軟件結(jié)構(gòu)設(shè)計(jì)_第1頁
軟件結(jié)構(gòu)設(shè)計(jì)_第2頁
軟件結(jié)構(gòu)設(shè)計(jì)_第3頁
軟件結(jié)構(gòu)設(shè)計(jì)_第4頁
軟件結(jié)構(gòu)設(shè)計(jì)_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、:n4.1軟件結(jié)構(gòu)設(shè)計(jì)概述第“章軟件褚構(gòu)筱針 * -* *» <* «»> <* <» <* «»>* *第“素聯(lián)件箱構(gòu)殺針設(shè)計(jì):應(yīng)用各種技術(shù)和原理,對(duì)設(shè)備、過程或系統(tǒng)作 出足夠詳細(xì)的定義,使之能夠在物理上得以實(shí)現(xiàn)。軟件結(jié)構(gòu)設(shè)計(jì):是一個(gè)把軟件需求變換為軟件表示的 過程,是對(duì)軟件的整體結(jié)構(gòu)、程序結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、文 件結(jié)構(gòu)、接口定義等的設(shè)計(jì),是宏觀上的設(shè)計(jì)。軟件豬狗筱針軟件設(shè)計(jì)結(jié)構(gòu)設(shè)計(jì)(總體設(shè)計(jì))任務(wù):制訂系統(tǒng)實(shí) 現(xiàn)方案和設(shè)計(jì)規(guī)范并合理確定系統(tǒng)的整體 模塊結(jié)構(gòu)及接口關(guān)系。結(jié).結(jié)構(gòu)化設(shè)計(jì)方法;數(shù)據(jù)結(jié)構(gòu)驅(qū)動(dòng)

2、的設(shè)計(jì)方法、面向?qū)ο蟮脑O(shè)計(jì)方法詳細(xì)設(shè)計(jì)(模塊設(shè)計(jì))任務(wù):詳細(xì)規(guī)定每 個(gè)模塊功能的實(shí)現(xiàn)算法。軟件設(shè)計(jì)與程序設(shè)計(jì)的區(qū)別:程序設(shè)計(jì)就是編程序,這是大家熟悉的,很多人印象 中的“做軟件”就是編程序,因此可能有人會(huì)把程 序設(shè)計(jì)和軟件設(shè)計(jì)等同起來。這是不對(duì)的,軟件設(shè)計(jì) 是宏觀上的設(shè)計(jì)。而程序設(shè)計(jì)僅僅是軟件設(shè)計(jì)的實(shí)現(xiàn), 所以做軟件決不簡單等同與編程序。4.2軟件結(jié)構(gòu)設(shè)計(jì)的目標(biāo)、任務(wù)和過程目標(biāo):綜合采用各種技術(shù)手段,將系統(tǒng)需求轉(zhuǎn)換為數(shù) 據(jù)結(jié)構(gòu)、模塊結(jié)構(gòu)(或?qū)ο?類結(jié)構(gòu))的表達(dá)形式, 并實(shí)現(xiàn)系統(tǒng)的性能、安全性、可靠性要求。取得最佳方案。最佳方案的標(biāo)準(zhǔn):(1)開發(fā)費(fèi)用?。唬?)資源消耗低;(3)開發(fā)時(shí)間短;(4)

3、生產(chǎn)效率高;(5)可靠性較高;(6)可維護(hù)性好。結(jié)果:用模塊結(jié)構(gòu)圖表達(dá)。第“章軟件褚構(gòu)筱針 -«» 4BB*4* «» <» -任務(wù):結(jié)構(gòu)設(shè)計(jì)是一個(gè)自頂向下,逐步具體的綜合性的設(shè)計(jì)過 程6主要內(nèi)容:(1) 綜合分析系統(tǒng)的各種實(shí)現(xiàn)方案,提出最佳實(shí)現(xiàn)方案 的建議©(2) 制定設(shè)計(jì)規(guī)范、標(biāo)準(zhǔn)及約定原則。軟件結(jié)構(gòu)設(shè)計(jì):采用某種軟件設(shè)計(jì)方法,按照模塊 的構(gòu)造原則,逐步、逐層地設(shè)計(jì)軟件的模塊層次結(jié)構(gòu)。念第彳章做件結(jié)構(gòu)殺針(4)數(shù)據(jù)結(jié)構(gòu)以及接口的設(shè)計(jì)。(5) 系統(tǒng)性能設(shè)計(jì)。(6) 系統(tǒng)安全性能設(shè)計(jì):系統(tǒng)的自保護(hù)設(shè)計(jì);數(shù)據(jù) 一致性設(shè)計(jì);;容錯(cuò)設(shè)

4、計(jì)。(7) 系統(tǒng)可靠性設(shè)計(jì)。(8)設(shè)計(jì)文檔的編寫:結(jié)構(gòu)設(shè)計(jì)說明書;用戶手冊(cè);系統(tǒng)初步的測(cè)試計(jì)劃說明書。(9)設(shè)計(jì)的審查和復(fù)審。軟件結(jié)構(gòu)設(shè)計(jì)過程:1. 設(shè)想供選擇方案;3.推薦最優(yōu)方案;5 .設(shè)計(jì)軟件結(jié)構(gòu);7.制訂測(cè)試計(jì)劃;9 審查和復(fù)審;2 選擇合理的方案;4.功能分解;6.設(shè)計(jì)數(shù)據(jù)庫;&書寫文檔;證第彳章軟件豬狗筱針瑩3秦斥毎祁禹玉*概念和原理1.模塊化所謂模塊,是指具有相對(duì)獨(dú)立性的,由數(shù)據(jù)說明、執(zhí)行語句 等程序?qū)ο髽?gòu)成的集合。程序中的每個(gè)模塊都需要單獨(dú)命名,通 過名字可實(shí)現(xiàn)對(duì)指定模塊的訪問。在高級(jí)語言中,模塊具體表現(xiàn) 為函數(shù)、子程序、過程等。一個(gè)模塊具有輸入/輸出(接口)、功 能、

5、內(nèi)部數(shù)據(jù)和程序代碼四個(gè)特征。輸入/輸出用于實(shí)現(xiàn)模塊與 其他模塊間的數(shù)據(jù)傳送,即向模塊傳入所需的原始數(shù)據(jù)及從模塊 傳出得到的結(jié)果數(shù)據(jù)。功能指模塊所完成的工作。模塊的輸入/ 輸出和功能構(gòu)成了模塊的外部特征。內(nèi)部數(shù)據(jù)是指僅能在模塊內(nèi) 部使用的局部量。程序代碼用于描述實(shí)現(xiàn)模塊功能的具體方法和 步驟。模塊的內(nèi)部數(shù)據(jù)和程序代碼反映的是模塊的內(nèi)部特征。2模塊化是指將整個(gè)程序劃分為若干個(gè)模塊,每個(gè)模塊用于 實(shí)現(xiàn)一個(gè)特定的功能。劃分模塊對(duì)于解決大型復(fù)雜的問題是非 常必要的,可以大大降低解決問題的難度。為了說明這一點(diǎn), 我們可對(duì)問題復(fù)雜性、開發(fā)工作量和模塊數(shù)之間的關(guān)系進(jìn)行以 下推理。首先,我們?cè)O(shè)C(x)為問題x所

6、對(duì)應(yīng)的復(fù)雜度函數(shù),E(x)為解 決問題x所需要的工作量函數(shù)。對(duì)于兩個(gè)問題P1和P2,如果:C(P1)> C(P2)即問題Pl的復(fù)雜度比P2高,則顯然有:E(P1)> E(P2)即解決問題Pl比P2所需的工作量大。念第褚敏件材構(gòu)殺針亍在人們解決問題的過程中,發(fā)現(xiàn)存在有另一個(gè)有趣的規(guī)律:C(P1+P2)> C(P1)+C (P2)即解決由多個(gè)問題復(fù)合而成的大問題的復(fù)雜度大于單獨(dú)解決各 個(gè)問題的復(fù)雜度之和。也就是說,對(duì)于一個(gè)復(fù)雜問題,將其分 解成多個(gè)小問題分別解決比較容易。由此我們可以推出:E(P1+P2)> E(P1)+E (P2)即將復(fù)雜問題分解成若干個(gè)小問題,各個(gè)擊破,

7、所需要的工作 量小于直接解決復(fù)雜問題所需的工作量。魚亀第徐軟件豬狗筱針根據(jù)上面的推理,我們可以得到這樣一個(gè)結(jié)論,模塊化可以降低解決問題的復(fù)雜度,從而降低軟件開發(fā)的工作量。雖然 增加程序中的模塊數(shù)可以降低開發(fā)每個(gè)模塊的工作量,但同時(shí) 卻增加了設(shè)計(jì)模塊接口的工作量。通過圖4. 1所示的模塊數(shù)與軟 件開發(fā)成本的關(guān)系圖中可以看出,當(dāng)劃分的模塊數(shù)處于最小成 本區(qū)時(shí),開發(fā)軟件的總成本最低。模塊化不但可以降低軟件開發(fā)的難度,而且可以使程序結(jié) 構(gòu)清晰,增加易讀性和易修改性。此外,模塊化還有利于提高 代碼的可重用性及團(tuán)隊(duì)合作開發(fā)大型軟件的可行性。第“章軟件褚構(gòu)筱針圖41模塊數(shù)與軟件開發(fā)成本第彳章軟件豬狗筱針2.

8、 模塊獨(dú)立性 1)耦合性耦合性是對(duì)一個(gè)軟件結(jié)構(gòu)內(nèi)部不同模塊間聯(lián)系緊密程度的 度量指標(biāo)。模塊間的聯(lián)系越緊密,耦合性就越高,模塊的獨(dú)立 性也就越低。由于模塊間的聯(lián)系是通過模塊接口實(shí)現(xiàn)的,因此, 模塊耦合性的高低主要取決于模塊接口的復(fù)雜程度、調(diào)用模塊 的方式以及通過模塊接口的數(shù)據(jù)。模塊間的耦合性主要可劃分 為如下幾種類型。(1)數(shù)據(jù)耦合。若兩個(gè)模塊之間僅通過模塊參數(shù)交換信息, 且交換的信息全部為簡單數(shù)據(jù),則稱這種耦合為數(shù)據(jù)耦合。數(shù) 據(jù)耦合的耦合性最低,通常軟件中都包含有數(shù)據(jù)耦合。數(shù)據(jù)耦 合的例子如下所示:sum (int a, int b)int c;c=a+b;return(c);main()in

9、t x, y;printf ("x+y二 d",sum (x, y);/*主函數(shù)與sum函數(shù)之間即為數(shù)據(jù)耦合關(guān)系*/(2)公共耦合。若兩個(gè)或多個(gè)模塊通過引用公共數(shù)據(jù)相互 聯(lián)系,則稱這種耦合為公共耦合。例如,在程序中定義了全局 變量,并在多個(gè)模塊中對(duì)全局變量進(jìn)行了引用,則引用全局變 量的多個(gè)模塊間就具有了公共耦合關(guān)系。FORTRAN®言中使用 的common語句也會(huì)在多個(gè)模塊間建立公共耦合關(guān)系。公共耦合 的復(fù)雜度隨著耦合的模塊個(gè)數(shù)的增加而顯著增加。在程序設(shè)計(jì) 中,若兩個(gè)模塊間需要交換的數(shù)據(jù)較多,僅通過參數(shù)傳遞難以 實(shí)現(xiàn)時(shí),可以考慮采用公共耦合完成,但一定注意盡量降低

10、公 共耦合的程度。色第“章軟件褚構(gòu)筱針q石亍離禰咨丁著籟藥另可交換的信息中包含有控制信息(盡管有時(shí)控制信息是以數(shù)據(jù)的形式出現(xiàn)的),則稱這種耦合為 控制耦合??刂岂詈鲜侵械瘸潭鹊鸟詈希鼤?huì)增加程序的復(fù)雜 性??刂岂詈系睦尤缦滤荆簐oid output (flag)if (flag) printf(,z0K! “);else printf(,zN0! “);main() int flag:output(flag);/*主函數(shù)與output函數(shù)之間即為控制耦合關(guān)系*/ 言、第彳章軟件豬狗筱針丿 (4)內(nèi)容耦合。若一個(gè)模塊對(duì)另一模塊中的內(nèi)容(包括數(shù)據(jù) 和程序段)進(jìn)行了直接的引用甚至修改,或通過非正

11、常入口進(jìn)入 到另一模塊內(nèi)部,或一個(gè)模塊具有多個(gè)入口,或兩個(gè)模塊共享 一部分代碼,則稱模塊間的這種耦合為內(nèi)容耦合。內(nèi)容耦合是 所有耦合關(guān)系中程度最高的,會(huì)使因模塊間的聯(lián)系過于緊密而 對(duì)后期的開發(fā)和維護(hù)工作帶來很大的麻煩,因此,應(yīng)堅(jiān)決避免 任何形式的內(nèi)容耦合。實(shí)際上,許多高級(jí)程序設(shè)計(jì)語言在規(guī)定 語法時(shí)就已經(jīng)杜絕了任何形式的內(nèi)容耦合。耦合是影響軟件復(fù)雜度的一個(gè)重要因素,設(shè)計(jì)過程中應(yīng)力求降低程序的耦合性。在以上所介紹的耦合中,數(shù)據(jù)耦合的程度最低,其次是公共耦合,再其次是控制耦合,程度最高的是內(nèi)容耦合。魚鼠第鑄軟件豬狗筱針 _ '丿蘇廡苗一 _內(nèi)聚性是對(duì)一個(gè)模塊內(nèi)部各個(gè)組成元素之間相互結(jié)合的緊密

12、 程度的度量指標(biāo)。模塊中組成元素結(jié)合的越緊密,模塊的內(nèi)聚性 就越高,模塊的獨(dú)立性也就越高。模塊的內(nèi)聚性和耦合性是兩個(gè) 相互對(duì)立且又密切相關(guān)的概念。事實(shí)上,它們是同一事物的兩個(gè) 方面,模塊的高內(nèi)聚性往往就意味著模塊間的低耦合性。因?yàn)槌?序中的各個(gè)部分必定是有聯(lián)系的,若將其中密切相關(guān)的部分放在 同一個(gè)模塊中,模塊間的聯(lián)系就會(huì)降低;反之,若將密切相關(guān)的 部分分散放在不同的模塊之中,模塊間的聯(lián)系必然會(huì)加強(qiáng)。在進(jìn) 行模塊化設(shè)計(jì)時(shí),耦合性和內(nèi)聚性都是必須考慮的重要指標(biāo)。但 在軟件設(shè)計(jì)時(shí)應(yīng)將更多的注意力集中在提高模塊的內(nèi)聚性上。模 塊的內(nèi)聚性主要可劃分為如下幾種不同的類型。第“章敏件緒構(gòu)殺計(jì)I7"

13、(1)偶然內(nèi)聚。若一個(gè)模塊由多個(gè)完成不同任務(wù)的語句段組成,各語句段之間的聯(lián)系十分松散或根本沒有任何聯(lián)系,則 稱此模塊的內(nèi)聚為偶然內(nèi)聚。例如,程序中多處出現(xiàn)一些無聯(lián) 系的語句段序列,為了節(jié)省內(nèi)存空間將其組合成為一個(gè)模塊, 這個(gè)模塊就屬于偶然內(nèi)聚。偶然內(nèi)聚的模塊由于組成部分之間 沒有實(shí)質(zhì)的聯(lián)系,因此難于理解和修改,會(huì)給軟件開發(fā)帶來很 大的困擾。偶然內(nèi)聚是內(nèi)聚程度最低的一種,在軟件設(shè)計(jì)時(shí)應(yīng) 盡量避免。第“章敬件轄構(gòu)殺針 I(2) 邏輯內(nèi)聚。若一個(gè)模塊可實(shí)現(xiàn)多個(gè)邏輯上相同或相似 的一類功能,則稱該模塊的內(nèi)聚為邏輯內(nèi)聚。例如,將程序中 多種不同類型數(shù)據(jù)的輸出放在同一個(gè)模塊中實(shí)現(xiàn),這個(gè)模塊就 屬于邏輯聚合

14、。邏輯內(nèi)聚比偶然內(nèi)聚的內(nèi)聚程度高一些。雖然 邏輯聚合模塊的組成部分之間有一定的關(guān)系,但不同功能混在 一起并公用模塊中的部分代碼,給修改帶來了一定的麻煩。另 夕卜,為了在調(diào)用模塊時(shí)能選擇執(zhí)行其中的某個(gè)功能,需要傳遞 相應(yīng)的控制參數(shù),因而會(huì)造成模塊間的控制耦合,降低模塊的 獨(dú)立性。時(shí)間內(nèi)聚。若一個(gè)模塊包含了需要在同一時(shí)間段中執(zhí) 行的多個(gè)任務(wù),則稱該模塊的內(nèi)聚為時(shí)間內(nèi)聚。例如,將多個(gè) 變量的初始化放在同一個(gè)模塊中實(shí)現(xiàn),或?qū)⑿枰瑫r(shí)使用的多 個(gè)庫文件的打開操作放在同一個(gè)模塊中,都會(huì)產(chǎn)生時(shí)間內(nèi)聚的 模塊。由于時(shí)間內(nèi)聚模塊中的各個(gè)部分在時(shí)間上的聯(lián)系,其內(nèi) 聚程度比邏輯內(nèi)聚高一些。但這樣的模塊往往會(huì)和其他相

15、關(guān)模 塊有著緊密的聯(lián)系,因而會(huì)造成耦合性的增加。(3) 過程內(nèi)聚。若一個(gè)模塊中的各個(gè)部分相關(guān),并且必須 按特定的次序執(zhí)行,則稱該模塊的內(nèi)聚為過程內(nèi)聚。在結(jié)構(gòu)化 程序中,通常采用程序流程圖作為設(shè)計(jì)軟件和確定模塊劃分的 工具,因此,這樣得到的模塊往往具有過程內(nèi)聚的特性。(4) 通信內(nèi)聚。若一個(gè)模塊中的各個(gè)部分使用同一個(gè)輸入 數(shù)據(jù)或產(chǎn)生同一個(gè)輸出數(shù)據(jù),則稱該模塊的內(nèi)聚為通信內(nèi)聚。 由于通信內(nèi)聚模塊中的各個(gè)部分都與某個(gè)共同的數(shù)據(jù)密切相關(guān), 因此內(nèi)聚性高于前幾種內(nèi)聚。(5) 順序內(nèi)聚。若一個(gè)模塊中的各個(gè)部分都與同一個(gè)功能密 切相關(guān),并且必須按照先后順序執(zhí)行(通常前一個(gè)部分的輸出數(shù) 據(jù)就是后一個(gè)部分的輸入

16、數(shù)據(jù)),則稱該模塊的內(nèi)聚為順序內(nèi)聚。 例如,在一個(gè)處理學(xué)生成績的模塊中,前一個(gè)部分根據(jù)成績統(tǒng) 計(jì)出及格的學(xué)生人數(shù),后一個(gè)部分根據(jù)及格人數(shù)計(jì)算出學(xué)生的 及格率。根據(jù)數(shù)據(jù)流圖劃分出的模塊通常都是順序內(nèi)聚的模塊。 由于順序內(nèi)聚模塊中的各個(gè)部分在功能和執(zhí)行順序上都密切相 關(guān),因此內(nèi)聚程度很高且易于理解。(6) 功能內(nèi)聚。若一個(gè)模塊中各個(gè)組成部分構(gòu)成一個(gè)整體 并共同完成一個(gè)單一的功能,則稱該模塊的內(nèi)聚為功能內(nèi)聚。 由于功能內(nèi)聚模塊中的各個(gè)部分關(guān)系非常密切,構(gòu)成一個(gè)不可 分割的整體,因此功能內(nèi)聚是所有內(nèi)聚中內(nèi)聚程度最高的一種。在以上所介紹的七種內(nèi)聚中,按照內(nèi)聚性從低到高進(jìn)行排 列的結(jié)果如圖4. 2所示。第

17、彳章軟件豬狗筱針中內(nèi)聚I高內(nèi)聚偶然內(nèi)聚、邏輯內(nèi)聚低內(nèi)聚時(shí)間內(nèi)聚-過程內(nèi)聚通信內(nèi)聚順序內(nèi)聚功能內(nèi)聚圖4.2內(nèi)聚性的排列言、第彳章軟件豬狗筱針Q丿3.抽象抽象是人類在解決復(fù)雜問題時(shí)經(jīng)常采用的一種思維方式, 它是指將現(xiàn)實(shí)世界中具有共性的一類事物的相似的、本質(zhì)的方 面集中概括起來,而暫時(shí)忽略它們之間的細(xì)節(jié)差異。在軟件開 發(fā)中運(yùn)用抽象的概念,可以將復(fù)雜問題的求解過程分層,在不 同的抽象層上實(shí)現(xiàn)難度的分解。在抽象級(jí)別較高的層次上,可 以將瑣碎的細(xì)節(jié)的信息暫時(shí)隱藏起來,以利于解決系統(tǒng)中的全 局性的問題。軟件開發(fā)過程中從問題定義到最終的軟件生成, 每一階段都是在前一階段基礎(chǔ)上對(duì)軟件解法的抽象層上的一次 求精和

18、細(xì)化。第“章敏件緒構(gòu)殺針 Q結(jié)構(gòu)化程序中自頂向下、逐步求精的模塊劃分思想正是人 類思維中運(yùn)用抽象方法解決復(fù)雜問題的體現(xiàn)。軟件結(jié)構(gòu)中頂層 的模塊抽象級(jí)別最高,控制并協(xié)調(diào)軟件的主要功能且影響全局; 軟件結(jié)構(gòu)中位于底層的模塊抽象級(jí)別最低,具體實(shí)現(xiàn)數(shù)據(jù)的處 理過程。采用自頂向下、由抽象到具體的思維方式,不但降低 了軟件開發(fā)中每個(gè)階段的工作難度,簡化了軟件的設(shè)計(jì)和實(shí)現(xiàn) 過程,還有助于提高軟件的可讀性、可測(cè)試性和可維護(hù)性。此 夕卜,在程序設(shè)計(jì)中運(yùn)用抽象的方法還能夠提高代碼的可重用性。第“章敬件轄構(gòu)殺針I(yè)4.信息隱蔽信息隱蔽是指一個(gè)模塊將自身的內(nèi)部信息向其他模塊隱藏 起來,以避免其他模塊不恰當(dāng)?shù)脑L問和修改,

19、只有對(duì)那些為了 完成系統(tǒng)功能所必須的數(shù)據(jù)交換才被允許在模塊間進(jìn)行。信息 隱蔽的目的主要是為了提高模塊的獨(dú)立性,減少將一個(gè)模塊中 的錯(cuò)誤擴(kuò)散到其他模塊的機(jī)會(huì)。但信息隱蔽并不意味著某個(gè)模 塊中的內(nèi)部信息對(duì)其他模塊來說是完全不可見或不能使用的, 而是說模塊之間的信息傳遞只能通過合法的調(diào)用接口來實(shí)現(xiàn)。 顯然,信息隱蔽對(duì)提高軟件的可讀性和可維護(hù)性都是非常重要 的。第彳章軟件材胸殺針5.逐步求精“為了能集中精力解決主要問題而盡量推遲對(duì)問題細(xì)節(jié)的 考慮”??梢钥醋魇且豁?xiàng)把一個(gè)時(shí)期內(nèi)必須解決的種種問題按 優(yōu)先級(jí)排列序的技術(shù),是由Niklaus Wirth提出的一種自頂向下 的設(shè)計(jì)策略。求精實(shí)際上是一個(gè)細(xì)化過程

20、。抽象與求精是一對(duì) 互補(bǔ)的概念。第彳章軟件豬狗筱針4.4啟發(fā)式規(guī)則(1) 降低模塊的耦合性,提高模塊的內(nèi)聚性。為了提高軟件中各個(gè)模塊的獨(dú)立性,提高程序的可讀性、 可測(cè)試性和可維護(hù)性,在軟件體系結(jié)構(gòu)設(shè)計(jì)時(shí)應(yīng)盡可能采用內(nèi) 聚性高的模塊,如最好實(shí)現(xiàn)功能內(nèi)聚;盡量只使用數(shù)據(jù)耦合, 限制公共耦合的使用,避免控制耦合的使用,杜絕內(nèi)容耦合的 岀現(xiàn)。(2) 保持適中的模塊規(guī)模。程序中模塊的規(guī)模過大,會(huì)降低程序的可讀性;而模塊規(guī) 模過小,勢(shì)必會(huì)導(dǎo)致程序中的模塊數(shù)目過多,增加接口的復(fù)雜 性。對(duì)于模塊的適當(dāng)規(guī)模并沒有嚴(yán)格的規(guī)定,但普遍的觀點(diǎn)是 模塊中的語句數(shù)最好保持在10100之間。為了使模塊的規(guī)模適 中,在保證模

21、塊獨(dú)立性的前提下,可對(duì)程序中規(guī)模過小的模塊 進(jìn)行合并或?qū)σ?guī)模過大的模塊進(jìn)行分解。(3) 模塊應(yīng)具有高扇入和適當(dāng)?shù)纳瘸鲈谀K調(diào)用中,某個(gè)模塊的上級(jí)模塊數(shù)被稱為該模塊的扇 入(如圖4. 3(a)所示,模塊M的扇入數(shù)為n);而某個(gè)模塊可以調(diào) 用的下級(jí)模塊數(shù)被稱為該模塊的扇出(如圖4. 3(b)所示,模塊M 的扇出數(shù)為k)。顯然,一個(gè)模塊的扇入表明了共有多少個(gè)模塊 需要調(diào)用該模塊,而其扇出表明了該模塊可以控制的下級(jí)模塊 的數(shù)目。第“章軟件褚構(gòu)筱針M. MM(b)圖4.3模塊的扇入和扇岀(a)扇入;(b)扇岀模塊的扇入越大,則說明共享該模塊的上級(jí)模塊數(shù)越多, 或者說該模塊在程序中的重用性越高,這正是程序

22、設(shè)計(jì)所追求 的目標(biāo)之一。當(dāng)多個(gè)模塊具有一部分相同功能時(shí),應(yīng)將這部分 相同的功能分離出來,編寫成獨(dú)立的模塊供需要的模塊調(diào)用。 通過消除不同模塊中的重復(fù)內(nèi)容,提高代碼的可重用性,可以 減少程序的總代碼量,便于程序的測(cè)試和維護(hù)。模塊的扇出若過大,如在一個(gè)模塊中要調(diào)用八個(gè)下級(jí)模塊, 則會(huì)使該模塊的調(diào)用控制過于復(fù)雜。這種現(xiàn)象發(fā)生的原因通常 都是由于設(shè)計(jì)階段,模塊細(xì)化的過程中,分解速度過快造成的。 最常見的解決辦法是通過在此模塊和下級(jí)模塊間增加一個(gè)中間 層來控制模塊分解的速度。模塊的扇出過小,如扇出為1(下級(jí) 模塊層中只有一個(gè)模塊),在系統(tǒng)設(shè)計(jì)中通常是不可取的。常見 的解決方法是考慮將其合并到上級(jí)模塊中。

23、但若合并會(huì)影響模 塊的獨(dú)立性,則將其保留下來也未嘗不可。根據(jù)實(shí)踐經(jīng)驗(yàn),設(shè) 計(jì)良好的典型系統(tǒng)中,模塊的平均扇出通常為3或4??梢钥闯觯涸谝粋€(gè)好的軟件結(jié)構(gòu)中,模塊應(yīng)具有較高的扇 入和適當(dāng)?shù)纳瘸?。但絕不能為了單純追求高扇入或合適的扇出 而破壞了模塊的獨(dú)立性。此外,經(jīng)過對(duì)大量軟件系統(tǒng)的研究后 發(fā)現(xiàn),在設(shè)計(jì)良好的軟件結(jié)構(gòu)中,通常頂層的扇出數(shù)較大,中 間層的扇出數(shù)較小,底層的扇入數(shù)較大,如圖4. 4所示。第“章軟件褚構(gòu)筱針第“章軟件褚構(gòu)筱針 -<* «»> <* <» <* «* >* <*(4)軟件結(jié)構(gòu)中的深度和寬度不宜過

24、大。所謂深度,是指軟件體系結(jié)構(gòu)中控制的層數(shù),它能夠粗略度會(huì)引起寬度的增加,而降低寬度又會(huì)帶來深度的增加。地反映出軟件系統(tǒng)的規(guī)模和復(fù)雜程度:所謂寬度,是指軟件體 系結(jié)構(gòu)內(nèi)同一層次上模塊個(gè)數(shù)的最大值,通常寬度越大的系統(tǒng) 越復(fù)雜。如圖4. 6所示的軟件結(jié)構(gòu)圖中,深度為5,寬度為8。深 度在程序中表現(xiàn)為模塊的嵌套調(diào)用,嵌套的層數(shù)越多,程序就 越復(fù)雜。模塊可以調(diào)用的下級(jí)模塊數(shù)越多,軟件結(jié)構(gòu)的寬度就 越大。深度過大可通過將結(jié)構(gòu)中過于簡單的模塊分層與上一級(jí) 模塊合并來解決;而寬度過大則可通過增加中間層來解決。顯 然,軟件結(jié)構(gòu)中的深度和寬度是相互對(duì)立的兩個(gè)方面,降低深模塊的作用域是指受該模塊內(nèi)一個(gè)判定條件影響

25、的所有模塊范圍。 模塊的控制域是指該模塊本身以及所有該模塊的下屬模塊(包括該模塊 可以直接調(diào)用的下級(jí)模塊和可以間接調(diào)用的更下層的模塊)。例如,在 圖4. 5中,模塊C的控制域?yàn)槟KC、E和F;若在模塊C中存在一個(gè)對(duì)模塊 D、E和F均有影響的判定條件,即模塊C的作用域?yàn)槟KC、D、E和F(圖 中帶陰影的模塊),則顯然模塊C的作用域超出了其作用域。由于模塊D 在模塊C的作用域中,因此模塊C對(duì)模塊D的控制信息必然要通過上級(jí)模 塊B進(jìn)行傳遞,這樣不但會(huì)增加模塊間的耦合性,而且會(huì)給模塊的維護(hù) 和修改帶來麻煩(若要修改模塊C,可能會(huì)對(duì)不在它控制域中的模塊D造 成影響)。因此,軟件設(shè)計(jì)時(shí)應(yīng)使各個(gè)模塊的作用域

26、處于其控制域范圍 之內(nèi)。若發(fā)現(xiàn)不符合此設(shè)計(jì)原則的模塊,可通過下面的方法進(jìn)行改進(jìn): 將判定位置上移。如將圖4. 7中的模塊C中的判定條件上 移到上級(jí)模塊B中或?qū)⒛KC整個(gè)合并到模塊B中。 將超出作用域的模塊下移。如將圖4. 5中的模塊D移至模塊C的下一層上,使模塊D處于模塊C的控制域中。第“章軟件褚構(gòu)筱針圖45模塊的作用域和控制域第“章後件緒構(gòu)殺針q"(6)盡量降低模塊的接口復(fù)雜度。由于復(fù)雜的模塊接口是導(dǎo)致軟件岀現(xiàn)錯(cuò)誤的主要原因之一, 因此在軟件設(shè)計(jì)中應(yīng)盡量使模塊接口簡單清晰,如減少接口傳 送的信息個(gè)數(shù)以及確保實(shí)參和形參的一致性和對(duì)應(yīng)性等。降低 模塊的接口復(fù)雜度,可以提高軟件的可讀性,

27、減少出現(xiàn)錯(cuò)誤的 可能性,并有利于軟件的測(cè)試和維護(hù)。(7) 設(shè)計(jì)單入口單出口模塊模塊功能應(yīng)該可以預(yù)測(cè)第“章軟件褚構(gòu)筱針 * -* *» <* «»> <* <» <* «»>* *4. 5軟件結(jié)構(gòu)設(shè)計(jì)方法4. 5.1描述軟件結(jié)構(gòu)用的圖形工具1. HIPO 圖HIPO (Hierarchy Plus Input/Processing/Output)圖是IBM 公司在20世紀(jì)70年代發(fā)展起來的用于描述軟件結(jié)構(gòu)的圖形工具。 它實(shí)質(zhì)上是在描述軟件總體模塊結(jié)構(gòu)的層次圖(H圖)的基礎(chǔ)上, 加入了用于描述每個(gè)模塊輸

28、入/輸出數(shù)據(jù)和處理功能的IP0圖,因 此它的中文全名為層次圖加輸入/處理/輸出圖。第彳章軟件豬狗筱針1) HIPO圖中的H圖H圖用于在體系結(jié)構(gòu)設(shè)計(jì)過程中描繪軟件的層次結(jié)構(gòu)。在H 圖中,每一個(gè)矩形框代表一個(gè)模塊,圖中最頂層的矩形框表示 系統(tǒng)中的主控模塊,矩形框之間的連線用于表示模塊之間的調(diào) 用關(guān)系。為了使H圖更具有可追蹤性,可以為除頂層矩形框以外 的其他矩形框加上能反映層次關(guān)系的編號(hào)。H圖比較適用于自頂 向下進(jìn)行分解的軟件結(jié)構(gòu)設(shè)計(jì)方法。工資計(jì)算系統(tǒng)的H圖如下圖 所示。工資計(jì)算系統(tǒng)計(jì)算工資1工 轉(zhuǎn)資 存打印工資清單3計(jì)算應(yīng)發(fā)工資1.1計(jì)算扣款1.2計(jì)算實(shí)發(fā)工資1.3查詢職工賬號(hào)2.1成資款單.2生

29、工存清2計(jì)算計(jì)算出勤業(yè)績獎(jiǎng)獎(jiǎng)1.1.2.1.1.2. >圖4.6工資計(jì)算系統(tǒng)的H圖IPO圖能夠方便、清晰地描繪出模塊的輸入數(shù)據(jù)、加工和輸 出數(shù)據(jù)之間的關(guān)系。與層次圖中每個(gè)矩形框相對(duì)應(yīng),應(yīng)該有一 張IP0圖描述該矩形框所代表的模塊的具體處理過程,作為對(duì)層 次圖中內(nèi)容的補(bǔ)充說明。IP0圖的基本形式為:在圖中左邊的框 中列出模塊涉及的所有輸入數(shù)據(jù),在中間的框中列出主要的加 工,在右邊的框中列出處理后產(chǎn)生的輸出數(shù)據(jù);圖中的箭頭用 丁指明輸入數(shù)據(jù)、加工和輸出結(jié)果之間的關(guān)系。工資計(jì)算系統(tǒng) 中的計(jì)算工資模塊的IP0圖如圖4. 7所示。第“章軟件褚構(gòu)筱針圖4.7計(jì)算工資模塊的IPO圖2.結(jié)構(gòu)圖在軟件工程

30、中,軟件結(jié)構(gòu)經(jīng)常釆用20世紀(jì)70年代中期由Your don等人提出的結(jié)構(gòu)圖(SC, Structure Chart)這種圖形工 具來表示。結(jié)構(gòu)圖能夠描述出軟件系統(tǒng)的模塊層次結(jié)構(gòu),清楚 地反映出程序中各模塊之間的調(diào)用關(guān)系和聯(lián)系。結(jié)構(gòu)圖中的基 本符號(hào)及其含義見表。第“章軟件褚構(gòu)筱針 * -* *» <* «»> <* <» <* «»>* *表41結(jié)構(gòu)圖中的基本符號(hào)符號(hào)含義用于表示模塊,方框中標(biāo)明模塊的名稱用于描述模塊之間的調(diào)用關(guān)系用于表示模塊調(diào)用過程中傳遞的信息,箭頭上標(biāo)明信息的名稱;箭頭尾部為空心圓

31、表示傳遞的信息是數(shù)據(jù),若為實(shí)心圓則表示傳遞的是控制信息A表示模塊A選擇調(diào)用模塊B或模塊CLT C表示模塊A循環(huán)調(diào)用模塊B和模塊C第彳章軟件豬狗筱針4. 5.2面向數(shù)據(jù)流的軟件結(jié)構(gòu)設(shè)計(jì)方法1、數(shù)據(jù)流圖的類型面向數(shù)據(jù)流的體系設(shè)計(jì)方法能夠方便地將需求分析階段生 成的數(shù)據(jù)流圖轉(zhuǎn)換成設(shè)計(jì)階段所需的軟件結(jié)構(gòu)。但對(duì)于不同類 型的數(shù)據(jù)流圖,轉(zhuǎn)換得到的軟件結(jié)構(gòu)也不同,因此有必要首先 研究一下數(shù)據(jù)流圖的典型形式。根據(jù)數(shù)據(jù)流圖的結(jié)構(gòu)特點(diǎn)通常 可將數(shù)據(jù)流圖劃分為如下兩個(gè)基本類型。(1)變換型數(shù)據(jù)流圖變換型數(shù)據(jù)流圖呈現(xiàn)出的結(jié)構(gòu)特點(diǎn)為:由(邏輯)輸入、變換 中心和(邏輯)輸出三部分組成,如圖4. 8所示。該類型數(shù)據(jù)流圖

32、所描述的加工過程為:首先,外部數(shù)據(jù)沿邏輯輸入路徑進(jìn)入系統(tǒng), 同時(shí)數(shù)據(jù)的形式由外部形式轉(zhuǎn)化為內(nèi)部形式;接著,數(shù)據(jù)被送往 變換中心進(jìn)行加工處理;最后,經(jīng)過加工得到的結(jié)果數(shù)據(jù)的內(nèi)部 形式被轉(zhuǎn)換為外部形式并沿邏輯輸出路徑離開系統(tǒng)??梢钥闯?, 變換型數(shù)據(jù)流圖反映的是一個(gè)順序結(jié)構(gòu)的加工過程。第“章軟件褚構(gòu)筱針圖4.8變換型數(shù)據(jù)流圖的基本模型第“章軟件褚構(gòu)筱針,加工路徑圖4.9事務(wù)型數(shù)據(jù)流圖的基本模型2、面向數(shù)據(jù)流的軟件結(jié)構(gòu)設(shè)計(jì)過程運(yùn)用面向數(shù)據(jù)流的方法進(jìn)行軟件體系結(jié)構(gòu)的設(shè)計(jì)時(shí),應(yīng)該首先對(duì)需求分析階段得到的數(shù)據(jù)流圖進(jìn)行復(fù)查,必要時(shí)進(jìn)行修改和精化;接著在仔細(xì)分析系統(tǒng)數(shù)據(jù)流圖的基礎(chǔ)上,確定數(shù)據(jù) 流圖的類型,并按照

33、相應(yīng)的設(shè)計(jì)步驟將數(shù)據(jù)流圖轉(zhuǎn)化為軟件結(jié) 構(gòu);最后還要根據(jù)體系結(jié)構(gòu)設(shè)計(jì)的原則對(duì)得到的軟件結(jié)構(gòu)進(jìn)行優(yōu)化和改進(jìn)。面向數(shù)據(jù)流的體系結(jié)構(gòu)設(shè)計(jì)過程如圖410所示。詳細(xì)設(shè)計(jì)一般來說,大多數(shù)系統(tǒng)的加工問題被表示為變換型,可采用 變換分析設(shè)計(jì)方法建立系統(tǒng)的軟件結(jié)構(gòu),但當(dāng)數(shù)據(jù)流圖具有明顯 的事務(wù)特點(diǎn)時(shí),則應(yīng)采用事務(wù)分析技術(shù)進(jìn)行處理。變換分析設(shè)計(jì) 方法與事務(wù)分析設(shè)計(jì)方法類似,都遵循圖4. 10所示的設(shè)計(jì)過程, 主要差別僅在于由數(shù)據(jù)流圖向軟件結(jié)構(gòu)的映射方法不同。對(duì)于一 個(gè)復(fù)雜的系統(tǒng),數(shù)據(jù)流圖中可能既存在變換流又存在事務(wù)流,這 時(shí)應(yīng)當(dāng)根據(jù)數(shù)據(jù)流圖的主要處理功能,選擇一個(gè)面向全局的、涉 及整個(gè)軟件系統(tǒng)的總體類型,映射得到系

34、統(tǒng)的整體軟件結(jié)構(gòu)。此 外,再對(duì)局部范圍內(nèi)的數(shù)據(jù)流圖進(jìn)行具體研究,確定它們各自的 類型并分別處理,得到系統(tǒng)的局部軟件結(jié)構(gòu)。(1)變換分析設(shè)計(jì)對(duì)于變換型的數(shù)據(jù)流圖,應(yīng)按照變換分析設(shè)計(jì)的方法建立 系統(tǒng)的結(jié)構(gòu)圖。下面以圖4. 11所示的工資計(jì)算系統(tǒng)數(shù)據(jù)流圖為 例來介紹變換分析建立軟件結(jié)構(gòu)的具體步驟。A劃分邊界,區(qū)分系統(tǒng)的輸入、變換中心和輸出部分。變換中心在圖中往往是多股數(shù)據(jù)流匯集的地方,經(jīng)驗(yàn)豐富的 設(shè)計(jì)人員通??筛鶕?jù)其特征直接確定系統(tǒng)的變換中心。另外,下 述方法可幫助設(shè)計(jì)人員確定系統(tǒng)的輸入和輸出:從數(shù)據(jù)流圖的物 理輸入端出發(fā),沿著數(shù)據(jù)流方向逐步向系統(tǒng)內(nèi)部移動(dòng),直至遇到 不能被看作是系統(tǒng)輸入的數(shù)據(jù)流為止

35、,則此數(shù)據(jù)流之前的部分即 為系統(tǒng)的輸入;同理,從數(shù)據(jù)流圖的物理輸出端出發(fā),逆著數(shù)據(jù) 流方向逐步向系統(tǒng)內(nèi)部移動(dòng),直至遇到不能被看作是系統(tǒng)輸出的 數(shù)據(jù)流為止,則該數(shù)據(jù)流之后的部分即為系統(tǒng)的輸出;夾在輸入 和輸出之間的部分就是系統(tǒng)的變換中心。實(shí)發(fā)工資表n行邊劃的資算統(tǒng)據(jù)圖 圖4.進(jìn)了界分工計(jì)系數(shù)流生成工資存款淸單查找工資賬號(hào)實(shí)發(fā)工資賬號(hào)工資清單F3世趴|啊網(wǎng)勺丄丿0 . P乍 t;t職工銀行職工個(gè)人工資賬號(hào)清單F4籤)第“章後件詹構(gòu)殺計(jì) ( 完成第一級(jí)分解,設(shè)計(jì)系統(tǒng)的上層模塊。這一步主要是確定軟件結(jié)構(gòu)的頂層和第一層。任何系統(tǒng)的 頂層都只含一個(gè)用于控制的主模塊。變換型數(shù)據(jù)流圖對(duì)應(yīng)的軟 件結(jié)構(gòu)的第一層一

36、般由輸入、變換和輸岀三種模塊組成。系統(tǒng) 中的每個(gè)邏輯輸入對(duì)應(yīng)一個(gè)輸入模塊,完成為主模塊提供數(shù)據(jù) 的功能;每一個(gè)邏輯輸出對(duì)應(yīng)一個(gè)輸出模塊,完成為主模塊輸 出數(shù)據(jù)的功能;變換中心對(duì)應(yīng)一個(gè)變換模塊,完成將系統(tǒng)的邏 輯輸入轉(zhuǎn)換為邏輯輸出的功能。工資計(jì)算系統(tǒng)的一級(jí)分解結(jié)果 如圖4. 12所示。第“章軟件褚構(gòu)筱針圖4.12工資計(jì)算系統(tǒng)的一級(jí)分解第彳章敏件豬構(gòu)殺計(jì)石"A C完成第二級(jí)分解,設(shè)計(jì)輸入、變換中心和輸出部分的中、 下層模塊。這一步主要是對(duì)上一步確定的軟件結(jié)構(gòu)進(jìn)行逐層細(xì)化,為 每一個(gè)輸入、輸出模塊及變換模塊設(shè)計(jì)下屬模塊。通常,一個(gè) 輸入模塊應(yīng)包括用于接收數(shù)據(jù)和轉(zhuǎn)換數(shù)據(jù)(將接收的數(shù)據(jù)轉(zhuǎn)換成

37、下級(jí)模塊所需的形式)的兩個(gè)下屬模塊;一個(gè)輸出模塊應(yīng)包括用 于轉(zhuǎn)換數(shù)據(jù)(將上級(jí)模塊的處理結(jié)果轉(zhuǎn)換成輸出所需的形式)和 傳出數(shù)據(jù)的兩個(gè)下屬模塊;變換模塊的分解一般應(yīng)根據(jù)變換中 心的組成情況及模塊分解的原則來確定下屬模塊。完成二級(jí)分 解后,工資計(jì)算系統(tǒng)的軟件結(jié)構(gòu)如圖4. 13所示。圖4.13完成二級(jí)分解后的工資計(jì)算系統(tǒng)軟件結(jié)構(gòu)(2)事務(wù)分析設(shè)計(jì)圖414進(jìn)行了邊界劃分的事務(wù)型數(shù)據(jù)流圖A劃分邊界,明確數(shù)據(jù)流圖中的接收路徑、事務(wù)中心和加 工路徑。事務(wù)中心在數(shù)據(jù)流圖中位于多條加工路徑的起點(diǎn),經(jīng)過事 務(wù)中心的數(shù)據(jù)流被分解為多個(gè)發(fā)散的數(shù)據(jù)流,根據(jù)這個(gè)特征很 容易在圖中找到系統(tǒng)的事務(wù)中心。向事務(wù)中心提供數(shù)據(jù)的路徑 是系統(tǒng)的接收路徑,而從事務(wù)中心引岀的所有路徑都是系統(tǒng)的 加工路徑,如圖4. 14中對(duì)數(shù)據(jù)流圖的劃分。每條加工路徑都具 有自己的結(jié)構(gòu)特征,可能為變換型,也可能為事務(wù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論