




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第7章 軟件設(shè)計(jì)基礎(chǔ)軟件設(shè)計(jì)階段的工作是以需求分析階段的成果為前提和基礎(chǔ)的,即經(jīng)過系統(tǒng)分析小組簽字認(rèn)可的需求規(guī)格說明書及有關(guān)技術(shù)文檔。經(jīng)過軟件工程師們多年的努力,一些軟件設(shè)計(jì)技術(shù)、質(zhì)量評(píng)估標(biāo)準(zhǔn)和設(shè)計(jì)表示法逐步形成并用于軟件工程實(shí)踐。軟件設(shè)計(jì)是軟件工程的重要階段。軟件設(shè)計(jì)過程是對(duì)程序結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)和過程細(xì)節(jié)逐步求精、復(fù)審并編制文檔的過程,本章討論與軟件設(shè)計(jì)有關(guān)的主要概念。第7章 軟件設(shè)計(jì)基礎(chǔ)軟件設(shè)計(jì)階段的工作是以需求分析階段的成果17.1軟件設(shè)計(jì)基本概念
7.1.1軟件設(shè)計(jì)過程一般認(rèn)為,軟件開發(fā)階段由設(shè)計(jì)、編碼和測試三個(gè)基本活動(dòng)組成,其中“設(shè)計(jì)”活動(dòng)是獲取高質(zhì)量、低耗費(fèi)、易維護(hù)軟件的一個(gè)最重要環(huán)節(jié)。需求分析階段獲得的需求規(guī)格說明書包括對(duì)將要實(shí)現(xiàn)的系統(tǒng)在信息、功能和行為等各個(gè)方面的描述,這是軟件設(shè)計(jì)的基礎(chǔ)。對(duì)此不論采用何種軟件設(shè)計(jì)方法都將產(chǎn)生:系統(tǒng)的總體結(jié)構(gòu)設(shè)計(jì)(architecturaldesign);系統(tǒng)的數(shù)據(jù)設(shè)計(jì)(datadesign);系統(tǒng)的過程設(shè)計(jì)(proceduraldesign)。7.1軟件設(shè)計(jì)基本概念
7.1.1軟件設(shè)計(jì)過程一般27.1.1軟件設(shè)計(jì)過程圖8-1-1開發(fā)階段的信息流程序模塊總體結(jié)構(gòu)設(shè)計(jì)設(shè)計(jì)編碼信息描述功能描述行為描述其他需求過程設(shè)計(jì)數(shù)據(jù)設(shè)計(jì)集成并確認(rèn)的軟件測試7.1.1軟件設(shè)計(jì)過程圖8-1-1開發(fā)階段的信息流程37.1.1軟件設(shè)計(jì)過程軟件設(shè)計(jì)也可看作將需求規(guī)格說明逐步轉(zhuǎn)換為軟件源代碼的過程。從工程管理的角度軟件設(shè)計(jì)可分為概要(preliminary)設(shè)計(jì)和詳細(xì)(detail)設(shè)計(jì)兩大步驟。概要設(shè)計(jì)是根據(jù)需求確定軟件和數(shù)據(jù)的總體框架,詳細(xì)設(shè)計(jì)是將其進(jìn)一步精化成軟件的算法表示和數(shù)據(jù)結(jié)構(gòu)。而在技術(shù)上,概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)又由若干活動(dòng)組成,除總體結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和過程設(shè)計(jì)外,許多現(xiàn)代應(yīng)用軟件,還包括一個(gè)獨(dú)立的界面設(shè)計(jì)活動(dòng)。7.1.1軟件設(shè)計(jì)過程軟件設(shè)計(jì)也可看作將需求規(guī)格說明逐步47.1.2抽象與逐步求精抽象是控制復(fù)雜性的基本策略?!俺橄蟆币笕藗儗⒆⒁饬性谀骋粚哟紊峡紤]問題,而忽略那些低層次的細(xì)節(jié)。軟件設(shè)計(jì)過程應(yīng)當(dāng)是在不同抽象級(jí)別上考慮和處理問題的過程。最初,應(yīng)在最高抽象級(jí)別上,用面向問題域的語言敘述“問題”,概括“問題解”的形式,而后不斷地具體化,不斷地用面向過程的語言描述問題,最后,在最低的抽象級(jí)別上給出可直接實(shí)現(xiàn)的“問題解”,即程序。7.1.2抽象與逐步求精抽象是控制復(fù)雜性的基本策略?!俺?7.1.2抽象與逐步求精軟件工程過程的每一步都是對(duì)較高一級(jí)抽象的解作一次進(jìn)一步具體化的描述。在系統(tǒng)定義階段,軟件系統(tǒng)被描述為基于計(jì)算機(jī)的大系統(tǒng)的一個(gè)組成部分;在軟件規(guī)劃和需求分析階段,軟件用問題域約定的習(xí)慣用語表達(dá);從概要設(shè)計(jì)過渡到詳細(xì)設(shè)計(jì)時(shí),抽象級(jí)再一次降低;編碼完成后達(dá)到了抽象的最低級(jí)。在上述由高級(jí)抽象到低級(jí)抽象的轉(zhuǎn)換過程中,伴隨著一連串的過程抽象和數(shù)據(jù)抽象。過程抽象把完成一個(gè)特定功能的動(dòng)作序列抽象為一個(gè)過程名和參數(shù)表;數(shù)據(jù)抽象把一個(gè)數(shù)據(jù)對(duì)象的定義(或描述)抽象為一個(gè)數(shù)據(jù)類型名。7.1.2抽象與逐步求精軟件工程過程的每一步都是對(duì)較高一6【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅰ該CAD軟件系統(tǒng)配有能與繪圖員進(jìn)行可視化通信的圖形界面,能用鼠標(biāo)代替繪圖工具,畫各種直線和曲線;能完成所有幾何計(jì)算以及所有截面視圖和輔助視圖的設(shè)計(jì)。圖形設(shè)計(jì)的結(jié)果存在圖形文件中,圖形文件可包含幾何的、正文的和其他各種補(bǔ)充設(shè)計(jì)信息。顯而易見,在這一抽象級(jí)別上,用問題域本身的術(shù)語來描述問題的解?!纠?.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅰ該C7【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象ⅡCAD軟件任務(wù);用戶界面子任務(wù);創(chuàng)建二維圖形子任務(wù);顯示圖形子任務(wù);管理圖形文件子任務(wù);endCAD.在這一抽象級(jí)別上,給出了組成CAD軟件任務(wù)的所有主要子任務(wù),盡管術(shù)語已與問題域有所不同,但仍然不是實(shí)現(xiàn)所用的語言?!纠?.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅱ8【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅲ(僅以“創(chuàng)建二維圖形子任務(wù)”為例)PROCEDURE創(chuàng)建二維圖形REPEATUNTIL<創(chuàng)建圖形任務(wù)終止>DOWHILE<出現(xiàn)與數(shù)字儀的交互時(shí)>數(shù)字儀接口任務(wù);判斷作圖請(qǐng)求:線:畫線任務(wù);圓:畫圓任務(wù);┇END;【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅲ(僅以“9【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。DOWHILE<出現(xiàn)與鍵盤的交互時(shí)>鍵盤接口任務(wù);選擇分析或計(jì)算:輔助視圖:輔助視圖任務(wù);截面視圖:截面視圖任務(wù);┇END;┇ENDREPEAT;ENDPROCEDURE.【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。10【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。在這一抽象級(jí)別上,給出了初步的過程性表示,此時(shí)所有術(shù)語都是面向軟件(比如采用do?while結(jié)構(gòu))并且模塊結(jié)構(gòu)也開始明朗。求精過程還可繼續(xù)下去,直至產(chǎn)生源代碼?!纠?.1】考慮適用于低級(jí)CAD的圖形軟件包。在這一抽象級(jí)別11數(shù)據(jù)抽象數(shù)據(jù)抽象與過程抽象一樣,能使設(shè)計(jì)者按不同的詳細(xì)程度表示數(shù)據(jù)對(duì)象。仍以CAD軟件為例,我們可定義一個(gè)稱為drawing(圖)的數(shù)據(jù)對(duì)象:TYPEdrawingISSTRUCTUREDEFINEDnumberISSTRINGLENTH(12);geometryDEFINED…notesISSTRINGLENTH(256);bomDEFINED…ENDdrawingTYPE;數(shù)據(jù)抽象數(shù)據(jù)抽象與過程抽象一樣,能使設(shè)計(jì)者按不同的詳細(xì)程度表12數(shù)據(jù)抽象在此,drawing被表示為一種結(jié)構(gòu),其各個(gè)組成部件本身又可為某種數(shù)據(jù)抽象,比如geometry(幾何圖形)和bom。一旦抽象數(shù)據(jù)類型drawing定義完畢,即可用類型名直接說明數(shù)據(jù)對(duì)象,而不必涉及其內(nèi)部構(gòu)造的細(xì)節(jié),例如,可用語句:blueprintISINSTANCEOFdrawing;或schematicISINSTANCEOFdrawing;說明blueprint和schematic具有drawing的一切特性。blueprint——藍(lán)圖,schematic——簡(略)圖。數(shù)據(jù)抽象在此,drawing被表示為一種結(jié)構(gòu),其各個(gè)組成部件13數(shù)據(jù)抽象在抽象數(shù)據(jù)類型的定義中可以附加一組操作的定義,用以確定在此類數(shù)據(jù)對(duì)象上可進(jìn)行的操作。以抽象數(shù)據(jù)類型drawing為例,可以定義擦除(erase)、存儲(chǔ)(save)、分類(catalog)和拷貝(copy)等操作。許多程序設(shè)計(jì)語言都提供了對(duì)抽象數(shù)據(jù)類型的支持,Ada的程序包機(jī)制是對(duì)數(shù)據(jù)抽象和過程抽象的雙重支持?jǐn)?shù)據(jù)抽象在抽象數(shù)據(jù)類型的定義中可以附加一組操作的定義,用以確14逐步求精關(guān)于“逐步求精”,N.Wirth曾經(jīng)做過如下說明:“我們對(duì)付復(fù)雜問題的重要辦法是抽象,因此,對(duì)一個(gè)復(fù)雜的問題不應(yīng)該立即用計(jì)算機(jī)指令、數(shù)字和邏輯符號(hào)來表示,而應(yīng)該用較自然的抽象語言來表示,從而得出抽象程序。抽象程序?qū)Τ橄蟮臄?shù)據(jù)進(jìn)行某些特定的運(yùn)算并用某些合適的記號(hào)(可能是自然語言)來表示。對(duì)抽象程序做進(jìn)一步分解,進(jìn)入下一個(gè)抽象層次,重復(fù)這一精化過程直到程序能被計(jì)算機(jī)接受為止。這時(shí)的程序可能是用某種高級(jí)語言或機(jī)器指令書寫的?!敝鸩角缶P(guān)于“逐步求精”,N.Wirth曾經(jīng)做過如下說明:15過程求精與數(shù)據(jù)求精因?yàn)榍缶拿恳徊蕉际怯酶鼮樵敿?xì)的描述替代上一層次的抽象描述,所以在整個(gè)設(shè)計(jì)過程中產(chǎn)生的,具有不同詳細(xì)程度的各種描述,組成了系統(tǒng)的層次結(jié)構(gòu)。層次結(jié)構(gòu)的上一層是下一層的抽象,下一層是上一層的求精。在過程求精的同時(shí)自然伴隨著數(shù)據(jù)的求精,無論是過程還是數(shù)據(jù),每一步細(xì)化都蘊(yùn)涵著某些設(shè)計(jì)決策,因此設(shè)計(jì)人員必須掌握一些基本的準(zhǔn)則,比較各種可能的候選方案。過程求精與數(shù)據(jù)求精因?yàn)榍缶拿恳徊蕉际怯酶鼮樵敿?xì)的描述替代上167.1.3模塊化與信息隱藏軟件總體結(jié)構(gòu)(下一節(jié)討論)體現(xiàn)了模塊化思想,即把軟件劃分為可獨(dú)立命名和編制的部件,每個(gè)部件稱為一個(gè)模塊,當(dāng)把所有模塊組裝到一起時(shí),便可獲得滿足問題需要的一個(gè)解?!澳K化是唯一對(duì)軟件中的程序進(jìn)行智能化管理的一個(gè)屬性”。7.1.3模塊化與信息隱藏軟件總體結(jié)構(gòu)(下一節(jié)討論)體現(xiàn)177.1.3模塊化與信息隱藏假設(shè):函數(shù)C(X)——問題X的復(fù)雜性;函數(shù)E(X)——求解問題X需要花費(fèi)的工作量(時(shí)間);對(duì)于問題P1和P2,如果:C(P1)>C(P2)則有:E(P1)>E(P2)結(jié)論:解決一個(gè)復(fù)雜問題總比解決一個(gè)簡單問題耗費(fèi)更多的工作量。同時(shí)有:C(P1+P2)>C(P1)+C(P2)結(jié)論:由P1、P2組合而成的問題的復(fù)雜性往往比考慮單個(gè)問題復(fù)雜性的和更大。于是有:E(P1+P2)>E(P1)+E(P2)7.1.3模塊化與信息隱藏假設(shè):187.1.3模塊化與信息隱藏圖8-1-2模塊與軟件耗費(fèi)最小成本區(qū)域MO軟件總成本用于接口的成本每個(gè)模塊成本之和模塊總數(shù)成本或工作量7.1.3模塊化與信息隱藏圖8-1-2模塊與軟件耗費(fèi)191.信息隱蔽信息隱蔽原理告訴我們,模塊應(yīng)該設(shè)計(jì)得使其所含信息(過程和數(shù)據(jù))對(duì)于那些不需要這些信息的模塊不可訪問;每個(gè)模塊只完成一個(gè)相對(duì)獨(dú)立的特定功能;模塊之間僅僅交換那些為完成系統(tǒng)功能必須交換的信息,即模塊應(yīng)該獨(dú)立。顯然,模塊獨(dú)立的概念是模塊化、抽象、信息隱蔽和局部化等諸多概念的直接結(jié)果。1.信息隱蔽信息隱蔽原理告訴我們,模塊應(yīng)該設(shè)計(jì)得使其所含信息20信息隱蔽原理的好處它不僅支持模塊的并行開發(fā),而且還可減少測試和后期維護(hù)的工作量。因?yàn)闇y試和維護(hù)階段不可避免地要修改設(shè)計(jì)和代碼,模塊對(duì)大多數(shù)數(shù)據(jù)和過程處理細(xì)節(jié)的隱蔽可以減少錯(cuò)誤向外傳播。此外,整個(gè)系統(tǒng)欲擴(kuò)充功能亦只需“插入”新模塊,原有的多數(shù)模塊無須改動(dòng)。信息隱蔽原理的好處它不僅支持模塊的并行開發(fā),而且還可減少測試212.內(nèi)聚度(cohesion)內(nèi)聚度是前述信息隱蔽和局部化概念的自然擴(kuò)展,它標(biāo)志一個(gè)模塊內(nèi)部各成分彼此結(jié)合的緊密程度。內(nèi)聚度按其高低程度可分為七級(jí),內(nèi)聚度越高越好。2.內(nèi)聚度(cohesion)內(nèi)聚度是前述信息隱蔽和局部化概221)偶然性內(nèi)聚——低級(jí)內(nèi)聚偶然性內(nèi)聚(coincidentalcohesion)。是指一個(gè)模塊內(nèi)各成分為完成一組功能而組合在一起,它們相互之間即使有關(guān)系,也很松散。常見的偶然性內(nèi)聚情形是,當(dāng)程序員寫完一個(gè)程序后發(fā)現(xiàn)有一組語句多處出現(xiàn),于是為節(jié)省內(nèi)存便將這組語句單獨(dú)組成一個(gè)模塊。XYZW1)偶然性內(nèi)聚——低級(jí)內(nèi)聚偶然性內(nèi)聚(coincidenta232)邏輯性內(nèi)聚——低級(jí)內(nèi)聚如果一個(gè)模塊完成的諸任務(wù)邏輯上相關(guān),則稱之為邏輯性內(nèi)聚(logicalcohesion)例如:一個(gè)模塊產(chǎn)生所有與類型無關(guān)的輸出,即為邏輯性內(nèi)聚。又如:模塊X、Y分別調(diào)用A、B,A、B相似,將其合并為模塊AB,模塊AB即為邏輯性內(nèi)聚。XYSABXYSAB2)邏輯性內(nèi)聚——低級(jí)內(nèi)聚如果一個(gè)模塊完成的諸任務(wù)邏輯上相關(guān)243)時(shí)間性內(nèi)聚——低級(jí)內(nèi)聚如果一個(gè)模塊包含的諸任務(wù)必須在同一時(shí)間段內(nèi)執(zhí)行(例如一個(gè)初始化模塊),則稱之為時(shí)間性內(nèi)聚(temporalcohesion)。以上三種內(nèi)聚形式通常認(rèn)為是低級(jí)內(nèi)聚。3)時(shí)間性內(nèi)聚——低級(jí)內(nèi)聚如果一個(gè)模塊包含的諸任務(wù)必須在同一254)過程性內(nèi)聚——中級(jí)內(nèi)聚過程性內(nèi)聚(proceduralcohesion)模塊的過程性內(nèi)聚度是指,模塊內(nèi)成分彼此相關(guān),并且必須按特定的次序執(zhí)行;過程內(nèi)聚模塊的各組成功能由控制流聯(lián)結(jié)在一起。4)過程性內(nèi)聚——中級(jí)內(nèi)聚過程性內(nèi)聚(procedural265)通信性內(nèi)聚度——中級(jí)內(nèi)聚通信性內(nèi)聚(communicationalcohesion)。模塊的通信性內(nèi)聚度是指,模塊中各成分都將對(duì)數(shù)據(jù)結(jié)構(gòu)的同一區(qū)域進(jìn)行操作,以達(dá)到通信的目的。例如,模塊A的處理單元是由同一數(shù)據(jù)文件的數(shù)據(jù)產(chǎn)生不同的表格模塊A從文件FILE讀出數(shù)據(jù)1.由數(shù)據(jù)產(chǎn)生報(bào)表一2.由數(shù)據(jù)產(chǎn)生報(bào)表二5)通信性內(nèi)聚度——中級(jí)內(nèi)聚通信性內(nèi)聚(communicat276)順序性內(nèi)聚——高級(jí)內(nèi)聚順序性內(nèi)聚(sequentialcohesion)。如果一個(gè)模塊內(nèi)的各處理成分均與同一功能相關(guān),且這些處理必須順序執(zhí)行,則稱順序內(nèi)聚;通常,一個(gè)處理成分的輸出是另一個(gè)處理成分的輸入。例如:1.輸入系數(shù)2.求方程的根3.打印方程的根求一元二次方程根的模塊6)順序性內(nèi)聚——高級(jí)內(nèi)聚順序性內(nèi)聚(sequential287)功能性內(nèi)聚——高級(jí)內(nèi)聚功能性內(nèi)聚(functionalcohesion)。如果模塊內(nèi)所有成分形成一個(gè)整體,完成單個(gè)功能,則稱功能內(nèi)聚,功能內(nèi)聚是最高程度的內(nèi)聚形式。例如,一個(gè)模塊僅完成一個(gè)矩陣的輸出,就是一個(gè)具有功能性內(nèi)聚的模塊。設(shè)計(jì)軟件時(shí),應(yīng)該能夠識(shí)別內(nèi)聚度的高低,并通過修改設(shè)計(jì)盡可能提高模塊內(nèi)聚度,從而獲得較高的模塊獨(dú)立性。7)功能性內(nèi)聚——高級(jí)內(nèi)聚功能性內(nèi)聚(functional293.耦合度耦合度是對(duì)軟件結(jié)構(gòu)中模塊間關(guān)聯(lián)程度的一種度量。耦合的強(qiáng)弱取決于模塊間接口的復(fù)雜性、進(jìn)入或調(diào)用模塊的位置以及通過界面?zhèn)魉蛿?shù)據(jù)的多少等。與內(nèi)聚度正好相反,在設(shè)計(jì)軟件時(shí)應(yīng)追求盡可能松散耦合的系統(tǒng)。因?yàn)閷?duì)這類系統(tǒng)中任一模塊的設(shè)計(jì)、測試和維護(hù)相對(duì)獨(dú)立。由于模塊間聯(lián)系較少,錯(cuò)誤在模塊間傳播的可能性也隨之變小。模塊間的耦合程度直接影響系統(tǒng)的可理解性、可測試性、可靠性和可維護(hù)性。耦合度也可以分為七級(jí)3.耦合度耦合度是對(duì)軟件結(jié)構(gòu)中模塊間關(guān)聯(lián)程度的一種度量。301)非直接耦合——最松散的耦合耦合度也可以分為七級(jí):如果兩模塊中任一個(gè)都不依賴于對(duì)方能獨(dú)立工作,則稱這兩模塊為(nodirectcoupling),這類耦合度最低。例如:XYAB無關(guān)系1)非直接耦合——最松散的耦合耦合度也可以分為七級(jí):XYAB312)數(shù)據(jù)耦合數(shù)據(jù)耦合(datacoupling)如果兩模塊間通過參數(shù)交換信息,而信息僅限于數(shù)據(jù),則稱這兩模塊為數(shù)據(jù)耦合。一般軟件系統(tǒng)中都存在數(shù)據(jù)耦合,它是完成大多數(shù)功能所必需的。例如:AB通過參數(shù)傳遞數(shù)據(jù)2)數(shù)據(jù)耦合數(shù)據(jù)耦合(datacoupling)AB通過323)特征耦合特征耦合(stampcoupling)。介于數(shù)據(jù)耦合和控制耦合之間的是特征耦合(stampcoupling)。例如,傳遞了求平均成績以外的參數(shù):producereportcardscalculateaverageprintreportcardstudengtrecordaverragestudengtrecordaverrage3)特征耦合特征耦合(stampcoupling)。pro334)控制耦合控制耦合(controlcoupling)。如果兩模塊間通過參數(shù)交換信息,此時(shí)若傳遞的信息中含有控制信息,則耦合度上升為控制耦合??刂岂詈贤ǔ?huì)增加系統(tǒng)的復(fù)雜性,有時(shí)適當(dāng)分解模塊可消除控制耦合。4)控制耦合控制耦合(controlcoupling)。345)外部耦合外部耦合(externalcoupling)。當(dāng)若干模塊均與同一個(gè)外部環(huán)境關(guān)聯(lián)(例如,I/O處理使所有I/O模塊與特定的設(shè)備、格式和通信協(xié)議相關(guān)聯(lián)),它們之間便存在外部耦合。外部耦合盡管需要,但應(yīng)限制在少數(shù)幾個(gè)模塊上。5)外部耦合外部耦合(externalcoupling)。356)公共耦合公共耦合(commoncoupling)當(dāng)若干模塊通過全局的數(shù)據(jù)環(huán)境相互作用時(shí),它們之間存在公共耦合。全局?jǐn)?shù)據(jù)環(huán)境中可能含有全局變量、公用區(qū)、內(nèi)存公共覆蓋區(qū)、任何存儲(chǔ)介質(zhì)上的文件、物理設(shè)備等。6)公共耦合公共耦合(commoncoupling)367)內(nèi)容耦合內(nèi)容耦合(contentcoupling)。最高耦合度是內(nèi)容耦合,出現(xiàn)內(nèi)容耦合的情形包括:當(dāng)一個(gè)模塊使用另一個(gè)模塊內(nèi)部的數(shù)據(jù)或控制信息;一個(gè)模塊直接轉(zhuǎn)移到另一個(gè)模塊內(nèi)部,等等。7)內(nèi)容耦合內(nèi)容耦合(contentcoupling)。377.1.3模塊化與信息隱藏一般來說,設(shè)計(jì)軟件時(shí)應(yīng)盡量使用數(shù)據(jù)耦合,減少控制耦合,限制外部環(huán)境耦合和公共數(shù)據(jù)耦合,杜絕內(nèi)容耦合。值得指出,模塊化設(shè)計(jì)的思想適用于任何軟件系統(tǒng)的設(shè)計(jì)。當(dāng)某些軟件系統(tǒng)(如實(shí)時(shí)軟件等),因不能容忍子程序調(diào)用引起的時(shí)間開銷而必須以整塊軟件的形式出現(xiàn)時(shí),軟件設(shè)計(jì)仍然應(yīng)該以模塊化設(shè)計(jì)的思想為指導(dǎo),直至編碼時(shí)再改用代入式(in?line)方法。這樣,源程序中雖不含明顯的模塊,但模塊化設(shè)計(jì)所帶來的大部分益處卻已被系統(tǒng)獲得。7.1.3模塊化與信息隱藏一般來說,設(shè)計(jì)軟件時(shí)應(yīng)盡量使用387.1.4軟件總體結(jié)構(gòu)設(shè)計(jì)軟件總體結(jié)構(gòu)(softwarearchitecture)應(yīng)該包括兩方面內(nèi)容:1)由系統(tǒng)中所有過程性部件(即模塊)構(gòu)成的層次結(jié)構(gòu),即程序結(jié)構(gòu);2)對(duì)應(yīng)于程序結(jié)構(gòu)的輸入輸出數(shù)據(jù)結(jié)構(gòu)。軟件總體結(jié)構(gòu)設(shè)計(jì)的目標(biāo)就是產(chǎn)生一個(gè)模塊化的程序結(jié)構(gòu)并明確各模塊之間的控制關(guān)系,此外還要通過定義界面,說明程序的輸入輸出數(shù)據(jù)流,進(jìn)一步協(xié)調(diào)程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。7.1.4軟件總體結(jié)構(gòu)設(shè)計(jì)軟件總體結(jié)構(gòu)(software397.1.4軟件總體結(jié)構(gòu)設(shè)計(jì)軟件總體結(jié)構(gòu)(softwarearchitecture)應(yīng)該包括兩方面內(nèi)容:1)由系統(tǒng)中所有過程性部件(即模塊)構(gòu)成的層次結(jié)構(gòu),即程序結(jié)構(gòu);2)對(duì)應(yīng)于程序結(jié)構(gòu)的輸入輸出數(shù)據(jù)結(jié)構(gòu)。軟件總體結(jié)構(gòu)設(shè)計(jì)的目標(biāo)就是產(chǎn)生一個(gè)模塊化的程序結(jié)構(gòu)并明確各模塊之間的控制關(guān)系,此外還要通過定義界面,說明程序的輸入輸出數(shù)據(jù)流,進(jìn)一步協(xié)調(diào)程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。7.1.4軟件總體結(jié)構(gòu)設(shè)計(jì)軟件總體結(jié)構(gòu)(software401.結(jié)構(gòu)演變圖8-1-3結(jié)構(gòu)演變軟件“解”S1S4S2待解問題S3P1P2P4P31.結(jié)構(gòu)演變圖8-1-3結(jié)構(gòu)演變軟件“解”S1S4S412.同一個(gè)“問題”的多種軟件解圖8-1-4對(duì)應(yīng)于同一問題的各種軟件結(jié)構(gòu)問題P結(jié)構(gòu)1結(jié)構(gòu)2結(jié)構(gòu)3M1M2M3M4M1M2M3M4M1M2M3M4MMM2.同一個(gè)“問題”的多種軟件解圖8-1-4對(duì)應(yīng)于同一423.表示程序結(jié)構(gòu)的工具類樹圖(tree?likediagram)Warnier?Orr圖Jackson圖最常見的是如圖8-1-5所示的類樹圖。為便于討論,下面定義幾個(gè)有關(guān)的術(shù)語和度量。3.表示程序結(jié)構(gòu)的工具類樹圖(tree?likedia434.有關(guān)程序結(jié)構(gòu)的術(shù)語圖8-1-5有關(guān)程序結(jié)構(gòu)的術(shù)語Mabcdemfgihopqrntjks扇出扇入寬度深度4.有關(guān)程序結(jié)構(gòu)的術(shù)語圖8-1-5有關(guān)程序結(jié)構(gòu)的術(shù)語444.有關(guān)程序結(jié)構(gòu)的術(shù)語一個(gè)軟件的深度(depth)—控制的層數(shù);一個(gè)軟件的寬度(width)—其控制的層數(shù)和跨度;一個(gè)模塊的“扇出數(shù)”(fan?out)—該模塊直接控制的其他模塊數(shù);一個(gè)模塊的“扇入數(shù)”(fan?in)指能直接控制該模塊的模塊數(shù)。4.有關(guān)程序結(jié)構(gòu)的術(shù)語一個(gè)軟件的深度(depth)—控454.有關(guān)程序結(jié)構(gòu)的術(shù)語如果一個(gè)模塊控制另一個(gè)模塊,稱前者為“主控”模塊,后者為“從屬”模塊。在圖8-1-5中模塊M主控模塊a、b、c,模塊d從屬模塊a,因此也從屬M(fèi)。此外,軟件結(jié)構(gòu)中還有兩個(gè)重要的特性,即可見域和連通域。模塊的可見域——該模塊可直接或間接引用的一組模塊;模塊的連通域——僅包括該模塊可直接引用的模塊。4.有關(guān)程序結(jié)構(gòu)的術(shù)語如果一個(gè)模塊控制另一個(gè)模塊,稱前者467.1.5數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)描述各數(shù)據(jù)分量之間的邏輯關(guān)系,數(shù)據(jù)結(jié)構(gòu)一經(jīng)確定,數(shù)據(jù)的組織形式、訪問方法、組合程度及處理策略等隨之而定,所以數(shù)據(jù)結(jié)構(gòu)是影響軟件總體結(jié)構(gòu)的重要因素。數(shù)據(jù)結(jié)構(gòu)與程序結(jié)構(gòu)一樣,也可以在不同的抽象級(jí)別上表示。以棧為例,作為一個(gè)抽象數(shù)據(jù)類型,在概念級(jí)上只關(guān)心“先進(jìn)后出”特性,而在實(shí)現(xiàn)級(jí)上則要考慮物理表示及內(nèi)部工作的細(xì)節(jié),比如,用向量實(shí)現(xiàn),或用鏈表實(shí)現(xiàn)等。7.1.5數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)描述各數(shù)據(jù)分量之間的邏輯關(guān)477.1.5數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)對(duì)程序結(jié)構(gòu)和過程復(fù)雜性有直接的影響,從而在很大程度上決定了軟件的質(zhì)量。數(shù)據(jù)設(shè)計(jì)的目標(biāo)是為在需求規(guī)格說明中定義的那些數(shù)據(jù)對(duì)象選擇合適的邏輯表示,并確定可能作用在這些邏輯結(jié)構(gòu)上的所有操作(包括選用已存在的程序包)。數(shù)據(jù)抽象和信息隱蔽兩個(gè)概念是數(shù)據(jù)設(shè)計(jì)的基礎(chǔ)。通常,數(shù)據(jù)設(shè)計(jì)方案不是唯一的,有時(shí)需進(jìn)行算法復(fù)雜性分析、綜合各種因素之后才能從多種候選方案中篩選出最佳的設(shè)計(jì)方案。7.1.5數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)對(duì)程序結(jié)構(gòu)和過程復(fù)雜性有直487.1.6軟件過程設(shè)計(jì)過程設(shè)計(jì)緊跟在數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu)設(shè)計(jì)之后,其基本任務(wù)是描述模塊內(nèi)各處理元素和判斷元素的順序,圖8-1-6展示了模塊B的內(nèi)部過程。┇過程說明圖8-1-6模塊B的內(nèi)部結(jié)構(gòu)模塊B┇┇模塊B程序結(jié)構(gòu)7.1.6軟件過程設(shè)計(jì)過程設(shè)計(jì)緊跟在數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu)設(shè)497.1.6軟件過程設(shè)計(jì)所謂過程,應(yīng)包括有關(guān)處理的精確說明,諸如事件的順序、判斷的位置和條件、循環(huán)操作以及數(shù)據(jù)的組成,內(nèi)部變量和外部變量的引用問題等等。過程設(shè)計(jì)也應(yīng)遵循“自上而下,逐步求精”的原則和單入口單出口的結(jié)構(gòu)化設(shè)計(jì)思想。過程設(shè)計(jì)的任務(wù)是描述算法的細(xì)節(jié)。結(jié)構(gòu)化程序流程圖、盒圖(N-S圖)、判定表和判定樹,以及過程設(shè)計(jì)語言(PDL)、PAD圖等是人們經(jīng)常使用的工具。7.1.6軟件過程設(shè)計(jì)所謂過程,應(yīng)包括有關(guān)處理的精確說明507.2軟件過程設(shè)計(jì)技術(shù)和工具
7.2.1結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)定義:是程序設(shè)計(jì)技術(shù),它采用自頂向下逐步求精的設(shè)計(jì)方法和單入口單出口的控制構(gòu)件。結(jié)構(gòu)化程序設(shè)計(jì)的思想,應(yīng)該在軟件設(shè)計(jì)中體現(xiàn)出來,但這并不排除為效率或其他原因?qū)Y(jié)構(gòu)化程序設(shè)計(jì)作一點(diǎn)修正。隨著面向?qū)ο?、軟件重用等新的軟件開發(fā)方法和技術(shù)的發(fā)展,更現(xiàn)實(shí)、更有效的開發(fā)途徑可能是自頂向下和自底向上兩種方法有機(jī)地結(jié)合。7.2軟件過程設(shè)計(jì)技術(shù)和工具
7.2.1結(jié)構(gòu)化程序517.2.2圖形表示法1.流程圖(也稱為程序框圖)是最常用的一種表示法,“順序”、“分支”和“循環(huán)”三個(gè)基本控制構(gòu)件用流程圖表達(dá)的形式如圖8-2-1所示。F第二個(gè)任務(wù)順序結(jié)構(gòu)then部分else部分do?while循環(huán)第一個(gè)任務(wù)T分支條件If?then?else結(jié)構(gòu)循環(huán)條件循環(huán)體TF圖8-2-1流程圖構(gòu)件7.2.2圖形表示法1.流程圖(也稱為程序框圖)是最常用527.2.2圖形表示法2.盒圖也稱為N-S圖或Chapin圖。這種表達(dá)方式取消了流程線,它強(qiáng)迫程序員以結(jié)構(gòu)化方式思考和解決問題。第一個(gè)任務(wù)第二個(gè)任務(wù)第三個(gè)任務(wù)順序結(jié)構(gòu)else部分then部分條件FTif-then-else結(jié)構(gòu)do-while部分循環(huán)條件循環(huán)結(jié)構(gòu)圖8-2-3盒圖的構(gòu)件7.2.2圖形表示法2.盒圖也稱為N-S圖或Chapin537.2.3判定表與判定樹當(dāng)模塊中包含復(fù)雜的條件組合,并要根據(jù)這些條件的組合選擇動(dòng)作時(shí),只有判定表和判定樹能夠清晰地表達(dá)出復(fù)雜的條件組合與各種動(dòng)作之間的對(duì)應(yīng)關(guān)系。判定表由四部分組成:左上部——列出所有條件;左下部——列出所有可能的動(dòng)作;右上部——所有可能的條件組合(矩陣);右下部——條件組合與動(dòng)作之間的對(duì)應(yīng)關(guān)系。判定表的每一列可解釋為一條處理規(guī)則。7.2.3判定表與判定樹當(dāng)模塊中包含復(fù)雜的條件組合,并要547.2.3判定表與判定樹【例7.2】問題處理描述:耗電記費(fèi)系統(tǒng)可以采用固定價(jià)格收費(fèi)、浮動(dòng)價(jià)格收費(fèi)和其他方式收費(fèi)三種方式。若采用固定價(jià)格方式收費(fèi),對(duì)每月耗電100kW?h以下的用戶只征收最低標(biāo)準(zhǔn)費(fèi),超過100kW?h的用戶按價(jià)格表A收費(fèi);若采用浮動(dòng)價(jià)格方式收費(fèi),則每月耗電100kW?h以下的用戶按價(jià)格A收費(fèi),超過100kW?h的用戶按價(jià)格B收費(fèi)。7.2.3判定表與判定樹【例7.2】問題處理描述:耗電記55表8?1判定表規(guī)則12345固定價(jià)格方式浮動(dòng)價(jià)格方式耗電<100kW.h耗電≥100kW.hTFTFTFFTFTTFFTFTFF收取最低標(biāo)準(zhǔn)費(fèi)按價(jià)格表A收費(fèi)按價(jià)格表B收費(fèi)其他處理√√√√√條件動(dòng)作表8?1判定表規(guī)則12345固定56【例7.2】判定樹耗電<100kW·h—收取最低標(biāo)準(zhǔn)費(fèi)固定方式耗電≥100kW·h—按價(jià)格表A收費(fèi)耗電<100kW·h—按價(jià)格表A收費(fèi)耗電收費(fèi)浮動(dòng)方式耗電≥100kW·h—按價(jià)格表B收費(fèi)其他方式—其他處理圖8-2-5用判定樹表示計(jì)算耗電收費(fèi)的算法【例7.2】判定樹577.2.3判定表與判定樹判定樹的優(yōu)點(diǎn):形式簡單,直觀明了,易于掌握。判定樹的缺點(diǎn):①存在著數(shù)據(jù)冗余的問題,相同的數(shù)據(jù)元素往往要重復(fù)多次,而且越接近樹的葉端重復(fù)的次數(shù)越多。②判定樹要求對(duì)條件進(jìn)行層次劃分,若條件所處層次不對(duì),可能會(huì)導(dǎo)致增加判定樹的復(fù)雜性。7.2.3判定表與判定樹判定樹的優(yōu)點(diǎn):形式簡單,直觀明了587.2.4過程設(shè)計(jì)語言(PDL)PDL(ProcedureDesignLanguage)也稱為結(jié)構(gòu)英語或偽碼,是所有正文形式的過程設(shè)計(jì)工具的統(tǒng)稱。PDL經(jīng)常表現(xiàn)為一種“混雜”的形式,允許自然語言(如英語)的詞匯與某種結(jié)構(gòu)化程序設(shè)計(jì)語言(如Pascal、C、Ada等)的語法結(jié)構(gòu)交織在一起7.2.4過程設(shè)計(jì)語言(PDL)PDL(Procedur597.2.4過程設(shè)計(jì)語言(PDL)PDL應(yīng)具有下述特點(diǎn):1.關(guān)鍵字采用固定語法并支持結(jié)構(gòu)化構(gòu)件、數(shù)據(jù)說明機(jī)制和模塊化;2.處理部分采用自然語言描述;3.允許說明簡單(標(biāo)量、數(shù)組等)和復(fù)雜(鏈表、樹等)的數(shù)據(jù)結(jié)構(gòu);4.子程序的定義與調(diào)用規(guī)則不受具體接口方式的影響。7.2.4過程設(shè)計(jì)語言(PDL)PDL應(yīng)具有下述特點(diǎn):607.2.4過程設(shè)計(jì)語言(PDL)考察一個(gè)PDL的原型,它可以建立在任意一個(gè)通用的結(jié)構(gòu)化程序設(shè)計(jì)語言之上。基本成分包括:子程序定義、界面描述、數(shù)據(jù)說明、塊結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和I/O結(jié)構(gòu)。數(shù)據(jù)說明的形式為:TYPE<變量名>IS<限定詞1><限定詞2>其中:<變量名>——局部變量或全局變量;<限定詞1>——某個(gè)特定關(guān)鍵字(例如,SCALAR,ARRAY,LIST,STRING,STRUTURE等);<限定詞2>——說明此處定義的變量在該過程或整個(gè)程序中應(yīng)如何使用。7.2.4過程設(shè)計(jì)語言(PDL)考察一個(gè)PDL的原型,它617.2.4過程設(shè)計(jì)語言(PDL)可進(jìn)行抽象數(shù)據(jù)類型的定義,例如:TYPEtable_1ISINSTACEOFsymbol_table而symbol_table在另一處已定義如下:TYPEsymbol_tableISSTRUCTUREDEFINED7.2.4過程設(shè)計(jì)語言(PDL)可進(jìn)行抽象數(shù)據(jù)類型的定義627.2.4過程設(shè)計(jì)語言(PDL)該P(yáng)DL的塊結(jié)構(gòu)描述一個(gè)過程元素,即一個(gè)塊內(nèi)的所有語句將作為一個(gè)整體執(zhí)行,形式為BEGIN[<塊名>]<語句序列>END該P(yáng)DL的分支結(jié)構(gòu)有if-then-else和case兩種形式,分別為IF<條件描述>THEN<塊結(jié)構(gòu)或語句>ELSE<塊結(jié)構(gòu)或語句>ENDIF7.2.4過程設(shè)計(jì)語言(PDL)該P(yáng)DL的塊結(jié)構(gòu)描述一個(gè)637.2.4過程設(shè)計(jì)語言(PDL)CASEOF<情況變量名>WHEN<第1種情況>SELECT<塊結(jié)構(gòu)或語句>WHEN<第2種情況>SELECT<塊結(jié)構(gòu)或語句>…WHEN<最后一種情況>SELECT<塊結(jié)構(gòu)或語句>DEFAULT:<塊結(jié)構(gòu)或語句>ENDCASE7.2.4過程設(shè)計(jì)語言(PDL)CASEOF<情況647.2.4過程設(shè)計(jì)語言(PDL)循環(huán)結(jié)構(gòu)包括三類,表達(dá)形式分別為:DOWHILE<條件描述><塊結(jié)構(gòu)或語句>ENDWHILEREPEATUNTIL<條件描述><塊結(jié)構(gòu)或語句>ENDREPEATDOFOR<循變>=<循變?nèi)≈捣秶?表達(dá)式或序列><塊結(jié)構(gòu)或語句>ENDFOR7.2.4過程設(shè)計(jì)語言(PDL)循環(huán)結(jié)構(gòu)包括三類,表達(dá)形657.2.4過程設(shè)計(jì)語言(PDL)此PDL還提供了NEXT和EXIT兩種語句:EXIT語句,退出本層循環(huán);NEXT語句強(qiáng)迫本次循環(huán)結(jié)束,新一輪循環(huán)開始。在該P(yáng)DL中,子程序說明為:PROCEDURE<子程序說明><屬性表>INTERFACE<參數(shù)表><塊結(jié)構(gòu)或語句序列>END其中屬性表指明該子程序的引用特性(比如,是INTERNAL還是EXTERNAL模式)和其他依賴于實(shí)現(xiàn)(即程序設(shè)計(jì)語言)的特性。7.2.4過程設(shè)計(jì)語言(PDL)此PDL還提供了NEXT667.2.4過程設(shè)計(jì)語言(PDL)輸入/輸出說明部分常用的形式有READ/WRITETO<設(shè)備><I/O表>或ASK<詢問>ANSWER<響應(yīng)選擇項(xiàng)>后一種形式多用于人機(jī)交互部分的設(shè)計(jì)。7.2.4過程設(shè)計(jì)語言(PDL)輸入/輸出說明部分常用的677.3設(shè)計(jì)規(guī)格說明與評(píng)審軟件設(shè)計(jì)階段的輸出主要是設(shè)計(jì)規(guī)格說明書:第一節(jié):描述與設(shè)計(jì)活動(dòng)有關(guān)的各個(gè)方面,該節(jié)中許多信息取自系統(tǒng)規(guī)格說明書和系統(tǒng)定義階段產(chǎn)生的其他文檔。第二節(jié):具體指明引用信息的出處。第三節(jié):設(shè)計(jì)描述,是概要設(shè)計(jì)的產(chǎn)物,此時(shí)設(shè)計(jì)由信息驅(qū)動(dòng),即軟件總體結(jié)構(gòu)主要受數(shù)據(jù)流程、數(shù)據(jù)結(jié)構(gòu)的影響,需求分析時(shí)產(chǎn)生的DFD或其他某種形式的數(shù)據(jù)表示將在這一節(jié)中進(jìn)一步精化,用于確定軟件結(jié)構(gòu)。當(dāng)信息流程確定后,界面亦可作為整個(gè)軟件的一部分進(jìn)行描述。7.3設(shè)計(jì)規(guī)格說明與評(píng)審軟件設(shè)計(jì)階段的輸出主要是設(shè)計(jì)規(guī)格687.3設(shè)計(jì)規(guī)格說明與評(píng)審第四、五兩節(jié)是概要設(shè)計(jì)向詳細(xì)設(shè)計(jì)過渡后形成的。第四節(jié):模塊指軟件中可單獨(dú)編址的部件,如函數(shù)和過程,最初用自然語言描述它們的功能,隨后采用某種過程設(shè)計(jì)工具將這些自然語言描述轉(zhuǎn)換為結(jié)構(gòu)化描述。第五節(jié):主要描述數(shù)據(jù)組織結(jié)構(gòu),包括輔存的文件結(jié)構(gòu)、全局?jǐn)?shù)據(jù)(例如FORTRAN公共區(qū))的賦值以及這些文件與全局?jǐn)?shù)據(jù)的交叉訪問關(guān)系。7.3設(shè)計(jì)規(guī)格說明與評(píng)審第四、五兩節(jié)是概要設(shè)計(jì)向詳細(xì)設(shè)計(jì)697.3設(shè)計(jì)規(guī)格說明與評(píng)審第六節(jié):是與需求規(guī)格說明書的交叉訪問表,根據(jù)交叉訪問表可斷定設(shè)計(jì)是否滿足所有需求,這對(duì)于完成某個(gè)具體需求的模塊來說十分重要。第七節(jié):是測試的初步計(jì)劃。一旦軟件結(jié)構(gòu)和模塊間界面確定下來之后,即可制定模塊單元測試和聯(lián)調(diào)的計(jì)劃。某些場合,要求同時(shí)開發(fā)測試規(guī)格說明書與設(shè)計(jì)規(guī)格說明書,此時(shí)第七節(jié)可從設(shè)計(jì)規(guī)格說明書中刪去。第八節(jié):將逐條說明各種限制和造成的影響。第九、十兩節(jié):包括若干輔助數(shù)據(jù),如從其他文檔中節(jié)選的算法描述、候選的過程、表格化數(shù)據(jù)和其他相關(guān)信息,這些信息是對(duì)設(shè)計(jì)的一種特殊注釋最后開發(fā)一基本操作規(guī)格說明或安裝手冊(cè)作為附錄。7.3設(shè)計(jì)規(guī)格說明與評(píng)審第六節(jié):是與需求規(guī)格說明書的交叉70設(shè)計(jì)規(guī)格說明書示例Ⅰ.作用范圍A.系統(tǒng)目標(biāo)B.硬件、軟件和人機(jī)界面C.主要的系統(tǒng)功能D.外部數(shù)據(jù)庫定義E.主要的設(shè)計(jì)約束和限制Ⅱ.文檔A.現(xiàn)有的軟件文檔B.系統(tǒng)文檔C.賣主(硬件的和軟件的)的有關(guān)文檔D.技術(shù)參考書設(shè)計(jì)規(guī)格說明書示例Ⅰ.作用范圍71設(shè)計(jì)規(guī)格說明書示例Ⅲ.設(shè)計(jì)描述A.數(shù)據(jù)描述1.數(shù)據(jù)流復(fù)審2.數(shù)據(jù)結(jié)構(gòu)復(fù)審B.導(dǎo)出的程序結(jié)構(gòu)C.結(jié)構(gòu)之間的界面設(shè)計(jì)規(guī)格說明書示例Ⅲ.設(shè)計(jì)描述72設(shè)計(jì)規(guī)格說明書示例Ⅳ.模塊描述;針對(duì)每個(gè)模塊給出A.處理過程陳述B.接口描述C.設(shè)計(jì)語言(或其他形式)描述D.引用的模塊E.數(shù)據(jù)組織F.注釋設(shè)計(jì)規(guī)格說明書示例Ⅳ.模塊描述;針對(duì)每個(gè)模塊給出73設(shè)計(jì)規(guī)格說明書示例Ⅴ.文件結(jié)構(gòu)及全局?jǐn)?shù)據(jù)A.外部文件結(jié)構(gòu)1.邏輯結(jié)構(gòu)2.邏輯記錄描述3.訪問方式B.全局?jǐn)?shù)據(jù)C.文件與數(shù)據(jù)的交叉訪問表Ⅵ.需求交叉訪問矩陣設(shè)計(jì)規(guī)格說明書示例Ⅴ.文件結(jié)構(gòu)及全局?jǐn)?shù)據(jù)74設(shè)計(jì)規(guī)格說明書示例Ⅶ.測試準(zhǔn)備A.測試指南B.集成策略C.特殊考慮Ⅷ.裝配A.特殊的程序覆蓋要求B.轉(zhuǎn)換方面的考慮Ⅸ.特別注釋Ⅹ.附錄設(shè)計(jì)規(guī)格說明書示例Ⅶ.測試準(zhǔn)備75設(shè)計(jì)規(guī)格說明的評(píng)審為了確保文檔的質(zhì)量,還必須對(duì)設(shè)計(jì)文檔進(jìn)行評(píng)審。評(píng)審的目的在于及早發(fā)現(xiàn)設(shè)計(jì)中的缺陷和錯(cuò)誤。評(píng)審包括軟件總體結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、結(jié)構(gòu)之間的界面以及模塊過程細(xì)節(jié)四個(gè)方面,重點(diǎn)考慮:軟件結(jié)構(gòu)能否滿足需求?結(jié)構(gòu)的形態(tài)是否合理?層次是否清晰?模塊的劃分是否遵循模塊化和信息隱蔽的思想?系統(tǒng)的人機(jī)界面、各模塊的接口以及出錯(cuò)處理是否恰當(dāng)?模塊的設(shè)計(jì)能否滿足功能與性能要求?選擇的算法與數(shù)據(jù)結(jié)構(gòu)是否合理,能否適應(yīng)編程語言,等等。設(shè)計(jì)規(guī)格說明的評(píng)審為了確保文檔的質(zhì)量,還必須對(duì)設(shè)計(jì)文檔進(jìn)行評(píng)76設(shè)計(jì)規(guī)格說明的評(píng)審評(píng)審分正式與非正式的兩種方式。正式評(píng)審除軟件開發(fā)人員外,還邀請(qǐng)用戶代表和領(lǐng)域?qū)<覅⒓樱ǔ2捎么疝q形式,與會(huì)者有備而來(即提前審閱了文檔),設(shè)計(jì)人員在對(duì)設(shè)計(jì)方案詳細(xì)說明后,答復(fù)與會(huì)者的問題并記下各種重要的評(píng)審意見。非正式評(píng)審多少有些同行切磋的性質(zhì),不拘時(shí)間,不拘形式。需求階段使用的“走查”法同樣適用于設(shè)計(jì)評(píng)審,此時(shí)由一名設(shè)計(jì)人員帶領(lǐng)到會(huì)的同事逐行審閱文檔,記錄發(fā)現(xiàn)的問題。評(píng)審應(yīng)對(duì)事不對(duì)人,防止把評(píng)審變?yōu)橘|(zhì)詢或辯論。最后,對(duì)評(píng)審中提出的問題應(yīng)詳細(xì)記錄。評(píng)審結(jié)束前,還應(yīng)對(duì)本次評(píng)審做出結(jié)論。設(shè)計(jì)規(guī)格說明的評(píng)審評(píng)審分正式與非正式的兩種方式。77第7章 軟件設(shè)計(jì)基礎(chǔ)軟件設(shè)計(jì)階段的工作是以需求分析階段的成果為前提和基礎(chǔ)的,即經(jīng)過系統(tǒng)分析小組簽字認(rèn)可的需求規(guī)格說明書及有關(guān)技術(shù)文檔。經(jīng)過軟件工程師們多年的努力,一些軟件設(shè)計(jì)技術(shù)、質(zhì)量評(píng)估標(biāo)準(zhǔn)和設(shè)計(jì)表示法逐步形成并用于軟件工程實(shí)踐。軟件設(shè)計(jì)是軟件工程的重要階段。軟件設(shè)計(jì)過程是對(duì)程序結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)和過程細(xì)節(jié)逐步求精、復(fù)審并編制文檔的過程,本章討論與軟件設(shè)計(jì)有關(guān)的主要概念。第7章 軟件設(shè)計(jì)基礎(chǔ)軟件設(shè)計(jì)階段的工作是以需求分析階段的成果787.1軟件設(shè)計(jì)基本概念
7.1.1軟件設(shè)計(jì)過程一般認(rèn)為,軟件開發(fā)階段由設(shè)計(jì)、編碼和測試三個(gè)基本活動(dòng)組成,其中“設(shè)計(jì)”活動(dòng)是獲取高質(zhì)量、低耗費(fèi)、易維護(hù)軟件的一個(gè)最重要環(huán)節(jié)。需求分析階段獲得的需求規(guī)格說明書包括對(duì)將要實(shí)現(xiàn)的系統(tǒng)在信息、功能和行為等各個(gè)方面的描述,這是軟件設(shè)計(jì)的基礎(chǔ)。對(duì)此不論采用何種軟件設(shè)計(jì)方法都將產(chǎn)生:系統(tǒng)的總體結(jié)構(gòu)設(shè)計(jì)(architecturaldesign);系統(tǒng)的數(shù)據(jù)設(shè)計(jì)(datadesign);系統(tǒng)的過程設(shè)計(jì)(proceduraldesign)。7.1軟件設(shè)計(jì)基本概念
7.1.1軟件設(shè)計(jì)過程一般797.1.1軟件設(shè)計(jì)過程圖8-1-1開發(fā)階段的信息流程序模塊總體結(jié)構(gòu)設(shè)計(jì)設(shè)計(jì)編碼信息描述功能描述行為描述其他需求過程設(shè)計(jì)數(shù)據(jù)設(shè)計(jì)集成并確認(rèn)的軟件測試7.1.1軟件設(shè)計(jì)過程圖8-1-1開發(fā)階段的信息流程807.1.1軟件設(shè)計(jì)過程軟件設(shè)計(jì)也可看作將需求規(guī)格說明逐步轉(zhuǎn)換為軟件源代碼的過程。從工程管理的角度軟件設(shè)計(jì)可分為概要(preliminary)設(shè)計(jì)和詳細(xì)(detail)設(shè)計(jì)兩大步驟。概要設(shè)計(jì)是根據(jù)需求確定軟件和數(shù)據(jù)的總體框架,詳細(xì)設(shè)計(jì)是將其進(jìn)一步精化成軟件的算法表示和數(shù)據(jù)結(jié)構(gòu)。而在技術(shù)上,概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)又由若干活動(dòng)組成,除總體結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和過程設(shè)計(jì)外,許多現(xiàn)代應(yīng)用軟件,還包括一個(gè)獨(dú)立的界面設(shè)計(jì)活動(dòng)。7.1.1軟件設(shè)計(jì)過程軟件設(shè)計(jì)也可看作將需求規(guī)格說明逐步817.1.2抽象與逐步求精抽象是控制復(fù)雜性的基本策略。“抽象”要求人們將注意力集中在某一層次上考慮問題,而忽略那些低層次的細(xì)節(jié)。軟件設(shè)計(jì)過程應(yīng)當(dāng)是在不同抽象級(jí)別上考慮和處理問題的過程。最初,應(yīng)在最高抽象級(jí)別上,用面向問題域的語言敘述“問題”,概括“問題解”的形式,而后不斷地具體化,不斷地用面向過程的語言描述問題,最后,在最低的抽象級(jí)別上給出可直接實(shí)現(xiàn)的“問題解”,即程序。7.1.2抽象與逐步求精抽象是控制復(fù)雜性的基本策略。“抽827.1.2抽象與逐步求精軟件工程過程的每一步都是對(duì)較高一級(jí)抽象的解作一次進(jìn)一步具體化的描述。在系統(tǒng)定義階段,軟件系統(tǒng)被描述為基于計(jì)算機(jī)的大系統(tǒng)的一個(gè)組成部分;在軟件規(guī)劃和需求分析階段,軟件用問題域約定的習(xí)慣用語表達(dá);從概要設(shè)計(jì)過渡到詳細(xì)設(shè)計(jì)時(shí),抽象級(jí)再一次降低;編碼完成后達(dá)到了抽象的最低級(jí)。在上述由高級(jí)抽象到低級(jí)抽象的轉(zhuǎn)換過程中,伴隨著一連串的過程抽象和數(shù)據(jù)抽象。過程抽象把完成一個(gè)特定功能的動(dòng)作序列抽象為一個(gè)過程名和參數(shù)表;數(shù)據(jù)抽象把一個(gè)數(shù)據(jù)對(duì)象的定義(或描述)抽象為一個(gè)數(shù)據(jù)類型名。7.1.2抽象與逐步求精軟件工程過程的每一步都是對(duì)較高一83【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅰ該CAD軟件系統(tǒng)配有能與繪圖員進(jìn)行可視化通信的圖形界面,能用鼠標(biāo)代替繪圖工具,畫各種直線和曲線;能完成所有幾何計(jì)算以及所有截面視圖和輔助視圖的設(shè)計(jì)。圖形設(shè)計(jì)的結(jié)果存在圖形文件中,圖形文件可包含幾何的、正文的和其他各種補(bǔ)充設(shè)計(jì)信息。顯而易見,在這一抽象級(jí)別上,用問題域本身的術(shù)語來描述問題的解。【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅰ該C84【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象ⅡCAD軟件任務(wù);用戶界面子任務(wù);創(chuàng)建二維圖形子任務(wù);顯示圖形子任務(wù);管理圖形文件子任務(wù);endCAD.在這一抽象級(jí)別上,給出了組成CAD軟件任務(wù)的所有主要子任務(wù),盡管術(shù)語已與問題域有所不同,但仍然不是實(shí)現(xiàn)所用的語言。【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅱ85【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅲ(僅以“創(chuàng)建二維圖形子任務(wù)”為例)PROCEDURE創(chuàng)建二維圖形REPEATUNTIL<創(chuàng)建圖形任務(wù)終止>DOWHILE<出現(xiàn)與數(shù)字儀的交互時(shí)>數(shù)字儀接口任務(wù);判斷作圖請(qǐng)求:線:畫線任務(wù);圓:畫圓任務(wù);┇END;【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。抽象Ⅲ(僅以“86【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。DOWHILE<出現(xiàn)與鍵盤的交互時(shí)>鍵盤接口任務(wù);選擇分析或計(jì)算:輔助視圖:輔助視圖任務(wù);截面視圖:截面視圖任務(wù);┇END;┇ENDREPEAT;ENDPROCEDURE.【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。87【例7.1】考慮適用于低級(jí)CAD的圖形軟件包。在這一抽象級(jí)別上,給出了初步的過程性表示,此時(shí)所有術(shù)語都是面向軟件(比如采用do?while結(jié)構(gòu))并且模塊結(jié)構(gòu)也開始明朗。求精過程還可繼續(xù)下去,直至產(chǎn)生源代碼?!纠?.1】考慮適用于低級(jí)CAD的圖形軟件包。在這一抽象級(jí)別88數(shù)據(jù)抽象數(shù)據(jù)抽象與過程抽象一樣,能使設(shè)計(jì)者按不同的詳細(xì)程度表示數(shù)據(jù)對(duì)象。仍以CAD軟件為例,我們可定義一個(gè)稱為drawing(圖)的數(shù)據(jù)對(duì)象:TYPEdrawingISSTRUCTUREDEFINEDnumberISSTRINGLENTH(12);geometryDEFINED…notesISSTRINGLENTH(256);bomDEFINED…ENDdrawingTYPE;數(shù)據(jù)抽象數(shù)據(jù)抽象與過程抽象一樣,能使設(shè)計(jì)者按不同的詳細(xì)程度表89數(shù)據(jù)抽象在此,drawing被表示為一種結(jié)構(gòu),其各個(gè)組成部件本身又可為某種數(shù)據(jù)抽象,比如geometry(幾何圖形)和bom。一旦抽象數(shù)據(jù)類型drawing定義完畢,即可用類型名直接說明數(shù)據(jù)對(duì)象,而不必涉及其內(nèi)部構(gòu)造的細(xì)節(jié),例如,可用語句:blueprintISINSTANCEOFdrawing;或schematicISINSTANCEOFdrawing;說明blueprint和schematic具有drawing的一切特性。blueprint——藍(lán)圖,schematic——簡(略)圖。數(shù)據(jù)抽象在此,drawing被表示為一種結(jié)構(gòu),其各個(gè)組成部件90數(shù)據(jù)抽象在抽象數(shù)據(jù)類型的定義中可以附加一組操作的定義,用以確定在此類數(shù)據(jù)對(duì)象上可進(jìn)行的操作。以抽象數(shù)據(jù)類型drawing為例,可以定義擦除(erase)、存儲(chǔ)(save)、分類(catalog)和拷貝(copy)等操作。許多程序設(shè)計(jì)語言都提供了對(duì)抽象數(shù)據(jù)類型的支持,Ada的程序包機(jī)制是對(duì)數(shù)據(jù)抽象和過程抽象的雙重支持?jǐn)?shù)據(jù)抽象在抽象數(shù)據(jù)類型的定義中可以附加一組操作的定義,用以確91逐步求精關(guān)于“逐步求精”,N.Wirth曾經(jīng)做過如下說明:“我們對(duì)付復(fù)雜問題的重要辦法是抽象,因此,對(duì)一個(gè)復(fù)雜的問題不應(yīng)該立即用計(jì)算機(jī)指令、數(shù)字和邏輯符號(hào)來表示,而應(yīng)該用較自然的抽象語言來表示,從而得出抽象程序。抽象程序?qū)Τ橄蟮臄?shù)據(jù)進(jìn)行某些特定的運(yùn)算并用某些合適的記號(hào)(可能是自然語言)來表示。對(duì)抽象程序做進(jìn)一步分解,進(jìn)入下一個(gè)抽象層次,重復(fù)這一精化過程直到程序能被計(jì)算機(jī)接受為止。這時(shí)的程序可能是用某種高級(jí)語言或機(jī)器指令書寫的。”逐步求精關(guān)于“逐步求精”,N.Wirth曾經(jīng)做過如下說明:92過程求精與數(shù)據(jù)求精因?yàn)榍缶拿恳徊蕉际怯酶鼮樵敿?xì)的描述替代上一層次的抽象描述,所以在整個(gè)設(shè)計(jì)過程中產(chǎn)生的,具有不同詳細(xì)程度的各種描述,組成了系統(tǒng)的層次結(jié)構(gòu)。層次結(jié)構(gòu)的上一層是下一層的抽象,下一層是上一層的求精。在過程求精的同時(shí)自然伴隨著數(shù)據(jù)的求精,無論是過程還是數(shù)據(jù),每一步細(xì)化都蘊(yùn)涵著某些設(shè)計(jì)決策,因此設(shè)計(jì)人員必須掌握一些基本的準(zhǔn)則,比較各種可能的候選方案。過程求精與數(shù)據(jù)求精因?yàn)榍缶拿恳徊蕉际怯酶鼮樵敿?xì)的描述替代上937.1.3模塊化與信息隱藏軟件總體結(jié)構(gòu)(下一節(jié)討論)體現(xiàn)了模塊化思想,即把軟件劃分為可獨(dú)立命名和編制的部件,每個(gè)部件稱為一個(gè)模塊,當(dāng)把所有模塊組裝到一起時(shí),便可獲得滿足問題需要的一個(gè)解。“模塊化是唯一對(duì)軟件中的程序進(jìn)行智能化管理的一個(gè)屬性”。7.1.3模塊化與信息隱藏軟件總體結(jié)構(gòu)(下一節(jié)討論)體現(xiàn)947.1.3模塊化與信息隱藏假設(shè):函數(shù)C(X)——問題X的復(fù)雜性;函數(shù)E(X)——求解問題X需要花費(fèi)的工作量(時(shí)間);對(duì)于問題P1和P2,如果:C(P1)>C(P2)則有:E(P1)>E(P2)結(jié)論:解決一個(gè)復(fù)雜問題總比解決一個(gè)簡單問題耗費(fèi)更多的工作量。同時(shí)有:C(P1+P2)>C(P1)+C(P2)結(jié)論:由P1、P2組合而成的問題的復(fù)雜性往往比考慮單個(gè)問題復(fù)雜性的和更大。于是有:E(P1+P2)>E(P1)+E(P2)7.1.3模塊化與信息隱藏假設(shè):957.1.3模塊化與信息隱藏圖8-1-2模塊與軟件耗費(fèi)最小成本區(qū)域MO軟件總成本用于接口的成本每個(gè)模塊成本之和模塊總數(shù)成本或工作量7.1.3模塊化與信息隱藏圖8-1-2模塊與軟件耗費(fèi)961.信息隱蔽信息隱蔽原理告訴我們,模塊應(yīng)該設(shè)計(jì)得使其所含信息(過程和數(shù)據(jù))對(duì)于那些不需要這些信息的模塊不可訪問;每個(gè)模塊只完成一個(gè)相對(duì)獨(dú)立的特定功能;模塊之間僅僅交換那些為完成系統(tǒng)功能必須交換的信息,即模塊應(yīng)該獨(dú)立。顯然,模塊獨(dú)立的概念是模塊化、抽象、信息隱蔽和局部化等諸多概念的直接結(jié)果。1.信息隱蔽信息隱蔽原理告訴我們,模塊應(yīng)該設(shè)計(jì)得使其所含信息97信息隱蔽原理的好處它不僅支持模塊的并行開發(fā),而且還可減少測試和后期維護(hù)的工作量。因?yàn)闇y試和維護(hù)階段不可避免地要修改設(shè)計(jì)和代碼,模塊對(duì)大多數(shù)數(shù)據(jù)和過程處理細(xì)節(jié)的隱蔽可以減少錯(cuò)誤向外傳播。此外,整個(gè)系統(tǒng)欲擴(kuò)充功能亦只需“插入”新模塊,原有的多數(shù)模塊無須改動(dòng)。信息隱蔽原理的好處它不僅支持模塊的并行開發(fā),而且還可減少測試982.內(nèi)聚度(cohesion)內(nèi)聚度是前述信息隱蔽和局部化概念的自然擴(kuò)展,它標(biāo)志一個(gè)模塊內(nèi)部各成分彼此結(jié)合的緊密程度。內(nèi)聚度按其高低程度可分為七級(jí),內(nèi)聚度越高越好。2.內(nèi)聚度(cohesion)內(nèi)聚度是前述信息隱蔽和局部化概991)偶然性內(nèi)聚——低級(jí)內(nèi)聚偶然性內(nèi)聚(coincidentalcohesion)。是指一個(gè)模塊內(nèi)各成分為完成一組功能而組合在一起,它們相互之間即使有關(guān)系,也很松散。常見的偶然性內(nèi)聚情形是,當(dāng)程序員寫完一個(gè)程序后發(fā)現(xiàn)有一組語句多處出現(xiàn),于是為節(jié)省內(nèi)存便將這組語句單獨(dú)組成一個(gè)模塊。XYZW1)偶然性內(nèi)聚——低級(jí)內(nèi)聚偶然性內(nèi)聚(coincidenta1002)邏輯性內(nèi)聚——低級(jí)內(nèi)聚如果一個(gè)模塊完成的諸任務(wù)邏輯上相關(guān),則稱之為邏輯性內(nèi)聚(logicalcohesion)例如:一個(gè)模塊產(chǎn)生所有與類型無關(guān)的輸出,即為邏輯性內(nèi)聚。又如:模塊X、Y分別調(diào)用A、B,A、B相似,將其合并為模塊AB,模塊AB即為邏輯性內(nèi)聚。XYSABXYSAB2)邏輯性內(nèi)聚——低級(jí)內(nèi)聚如果一個(gè)模塊完成的諸任務(wù)邏輯上相關(guān)1013)時(shí)間性內(nèi)聚——低級(jí)內(nèi)聚如果一個(gè)模塊包含的諸任務(wù)必須在同一時(shí)間段內(nèi)執(zhí)行(例如一個(gè)初始化模塊),則稱之為時(shí)間性內(nèi)聚(temporalcohesion)。以上三種內(nèi)聚形式通常認(rèn)為是低級(jí)內(nèi)聚。3)時(shí)間性內(nèi)聚——低級(jí)內(nèi)聚如果一個(gè)模塊包含的諸任務(wù)必須在同一1024)過程性內(nèi)聚——中級(jí)內(nèi)聚過程性內(nèi)聚(proceduralcohesion)模塊的過程性內(nèi)聚度是指,模塊內(nèi)成分彼此相關(guān),并且必須按特定的次序執(zhí)行;過程內(nèi)聚模塊的各組成功能由控制流聯(lián)結(jié)在一起。4)過程性內(nèi)聚——中級(jí)內(nèi)聚過程性內(nèi)聚(procedural1035)通信性內(nèi)聚度——中級(jí)內(nèi)聚通信性內(nèi)聚(communicationalcohesion)。模塊的通信性內(nèi)聚度是指,模塊中各成分都將對(duì)數(shù)據(jù)結(jié)構(gòu)的同一區(qū)域進(jìn)行操作,以達(dá)到通信的目的。例如,模塊A的處理單元是由同一數(shù)據(jù)文件的數(shù)據(jù)產(chǎn)生不同的表格模塊A從文件FILE讀出數(shù)據(jù)1.由數(shù)據(jù)產(chǎn)生報(bào)表一2.由數(shù)據(jù)產(chǎn)生報(bào)表二5)通信性內(nèi)聚度——中級(jí)內(nèi)聚通信性內(nèi)聚(communicat1046)順序性內(nèi)聚——高級(jí)內(nèi)聚順序性內(nèi)聚(sequentialcohesion)。如果一個(gè)模塊內(nèi)的各處理成分均與同一功能相關(guān),且這些處理必須順序執(zhí)行,則稱順序內(nèi)聚;通常,一個(gè)處理成分的輸出是另一個(gè)處理成分的輸入。例如:1.輸入系數(shù)2.求方程的根3.打印方程的根求一元二次方程根的模塊6)順序性內(nèi)聚——高級(jí)內(nèi)聚順序性內(nèi)聚(sequential1057)功能性內(nèi)聚——高級(jí)內(nèi)聚功能性內(nèi)聚(functionalcohesion)。如果模塊內(nèi)所有成分形成一個(gè)整體,完成單個(gè)功能,則稱功能內(nèi)聚,功能內(nèi)聚是最高程度的內(nèi)聚形式。例如,一個(gè)模塊僅完成一個(gè)矩陣的輸出,就是一個(gè)具有功能性內(nèi)聚的模塊。設(shè)計(jì)軟件時(shí),應(yīng)該能夠識(shí)別內(nèi)聚度的高低,并通過修改設(shè)計(jì)盡可能提高模塊內(nèi)聚度,從而獲得較高的模塊獨(dú)立性。7)功能性內(nèi)聚——高級(jí)內(nèi)聚功能性內(nèi)聚(functional1063.耦合度耦合度是對(duì)軟件結(jié)構(gòu)中模塊間關(guān)聯(lián)程度的一種度量。耦合的強(qiáng)弱取決于模塊間接口的復(fù)雜性、進(jìn)入或調(diào)用模塊的位置以及通過界面?zhèn)魉蛿?shù)據(jù)的多少等。與內(nèi)聚度正好相反,在設(shè)計(jì)軟件時(shí)應(yīng)追求盡可能松散耦合的系統(tǒng)。因?yàn)閷?duì)這類系統(tǒng)中任一模塊的設(shè)計(jì)、測試和維護(hù)相對(duì)獨(dú)立。由于模塊間聯(lián)系較少,錯(cuò)誤在模塊間傳播的可能性也隨之變小。模塊間的耦合程度直接影響系統(tǒng)的可理解性、可測試性、可靠性和可維護(hù)性。耦合度也可以分為七級(jí)3.耦合度耦合度是對(duì)軟件結(jié)構(gòu)中模塊間關(guān)聯(lián)程度的一種度量。1071)非直接耦合——最松散的耦合耦合度也可以分為七級(jí):如果兩模塊中任一個(gè)都不依賴于對(duì)方能獨(dú)立工作,則稱這兩模塊為(nodirectcoupling),這類耦合度最低。例如:XYAB無關(guān)系1)非直接耦合——最松散的耦合耦合度也可以分為七級(jí):XYAB1082)數(shù)據(jù)耦合數(shù)據(jù)耦合(datacoupling)如果兩模塊間通過參數(shù)交換信息,而信息僅限于數(shù)據(jù),則稱這兩模塊為數(shù)據(jù)耦合。一般軟件系統(tǒng)中都存在數(shù)據(jù)耦合,它是完成大多數(shù)功能所必需的。例如:AB通過參數(shù)傳遞數(shù)據(jù)2)數(shù)據(jù)耦合數(shù)據(jù)耦合(datacoupling)AB通過1093)特征耦合特征耦合(stampcoupling)。介于數(shù)據(jù)耦合和控制耦合之間的是特征耦合(stampcoupling)。例如,傳遞了求平均成績以外的參數(shù):producereportcardscalculateaverageprintreportcardstudengtrecordaverragestudengtrecordaverrage3)特征耦合特征耦合(stampcoupling)。pro1104)控制耦合控制耦合(controlcoupling)。如果兩模塊間通過參數(shù)交換信息,此時(shí)若傳遞的信息中含有控制信息,則耦合度上升為控制耦合。控制耦合通常會(huì)增加系統(tǒng)的復(fù)雜性,有時(shí)適當(dāng)分解模塊可消除控制耦合。4)控制耦合控制耦合(controlcoupling)。1115)外部耦合外部耦合(externalcoupling)。當(dāng)若干模塊均與同一個(gè)外部環(huán)境關(guān)聯(lián)(例如,I/O處理使所有I/O模塊與特定的設(shè)備、格式和通信協(xié)議相關(guān)聯(lián)),它們之間便存在外部耦合。外部耦合盡管需要,但應(yīng)限制在少數(shù)幾個(gè)模塊上。5)外部耦合外部耦合(externalcoupling)。1126)公共耦合公共耦合(commoncoupling)當(dāng)若干模塊通過全局的數(shù)據(jù)環(huán)境相互作用時(shí),它們之間存在公共耦合。全局?jǐn)?shù)據(jù)環(huán)境中可能含有全局變量、公用區(qū)、內(nèi)存公共覆蓋區(qū)、任何存儲(chǔ)介質(zhì)上的文件、物理設(shè)備等。6)公共耦合公共耦合(commoncoupling)1137)內(nèi)容耦合內(nèi)容耦合(contentcoupling)。最高耦合度是內(nèi)容耦合,出現(xiàn)內(nèi)容耦合的情形包括:當(dāng)一個(gè)模塊使用另一個(gè)模塊內(nèi)部的數(shù)據(jù)或控制信息;一個(gè)模塊直接轉(zhuǎn)移到另一個(gè)模塊內(nèi)部,等等。7)內(nèi)容耦合內(nèi)容耦合(contentcoupling)。1147.1.3模塊化與信息隱藏一般來說,設(shè)計(jì)軟件時(shí)應(yīng)盡量使用數(shù)據(jù)耦合,減少控制耦合,限制外部環(huán)境耦合和公共數(shù)據(jù)耦合,杜絕內(nèi)容耦合。值得指出,模塊化設(shè)計(jì)的思想適用于任何軟件系統(tǒng)的設(shè)計(jì)。當(dāng)某些軟件系統(tǒng)(如實(shí)時(shí)軟件等),因不能容忍子程序調(diào)用引起的時(shí)間開銷而必須以整塊軟件的形式出現(xiàn)時(shí),軟件設(shè)計(jì)仍然應(yīng)該以模塊化設(shè)計(jì)的思想為指導(dǎo),直至編碼時(shí)再改用代入式(in?line)方法。這樣,源程序中雖不含明顯的模塊,但模塊化設(shè)計(jì)所帶來的大部分益處卻已被系統(tǒng)獲得。7.1.3模塊化與信息隱藏一般來說,設(shè)計(jì)軟件時(shí)應(yīng)盡量使用1157.1.4軟件總體結(jié)構(gòu)設(shè)計(jì)軟件總體結(jié)構(gòu)(softwarearchitecture)應(yīng)該包括兩方面內(nèi)容:1)由系統(tǒng)中所有過程性部件(即模塊)構(gòu)成的層次結(jié)構(gòu),即程序結(jié)構(gòu);2)對(duì)應(yīng)于程序結(jié)構(gòu)的輸入輸出數(shù)據(jù)結(jié)構(gòu)。軟件總體結(jié)構(gòu)設(shè)計(jì)的目標(biāo)就是產(chǎn)生一個(gè)模塊化的程序結(jié)構(gòu)并明確各模塊之間的控制關(guān)系,此外還要通過定義界面,說明程序的輸入輸出數(shù)據(jù)流,進(jìn)一步協(xié)調(diào)程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。7.1.4軟件總體結(jié)構(gòu)設(shè)計(jì)軟件總體結(jié)構(gòu)(software1167.1.4軟件總體結(jié)構(gòu)設(shè)計(jì)軟件總體結(jié)構(gòu)(softwarearchitecture)應(yīng)該包括兩方面內(nèi)容:1)由系統(tǒng)中所有過程性部件(即模塊)構(gòu)成的層次結(jié)構(gòu),即程序結(jié)構(gòu);2)對(duì)應(yīng)于程序結(jié)構(gòu)的輸入輸出數(shù)據(jù)結(jié)構(gòu)。軟件總體結(jié)構(gòu)設(shè)計(jì)的目標(biāo)就是產(chǎn)生一個(gè)模塊化的程序結(jié)構(gòu)并明確各模塊之間的控制關(guān)系,此外還要通過定義界面,說明程序的輸入輸出數(shù)據(jù)流,進(jìn)一步協(xié)調(diào)程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。7.1.4軟件總體結(jié)構(gòu)設(shè)計(jì)軟件總體結(jié)構(gòu)(software1171.結(jié)構(gòu)演變圖8-1-3結(jié)構(gòu)演變軟件“解”S1S4S2待解問題S3P1P2P4P31.結(jié)構(gòu)演變圖8-1-3結(jié)構(gòu)演變軟件“解”S1S4S1182.同一個(gè)“問題”的多種軟件解圖8-1-4對(duì)應(yīng)于同一問題的各種軟件結(jié)構(gòu)問題P結(jié)構(gòu)1結(jié)構(gòu)2結(jié)構(gòu)3M1M2M3M4M1M2M3M4M1M2M3M4MMM2.同一個(gè)“問題”的多種軟件解圖8-1-4對(duì)應(yīng)于同一1193.表示程序結(jié)構(gòu)的工具類樹圖(tree?likediagram)Warnier?Orr圖Jackson圖最常見的是如圖8-1-5所示的類樹圖。為便于討論,下面定義幾個(gè)有關(guān)的術(shù)語和度量。3.表示程序結(jié)構(gòu)的工具類樹圖(tree?likedia1204.有關(guān)程序結(jié)構(gòu)的術(shù)語圖8-1-5有關(guān)程序結(jié)構(gòu)的術(shù)語Mabcdemfgihopqrntjks扇出扇入寬度深度4.有關(guān)程序結(jié)構(gòu)的術(shù)語圖8-1-5有關(guān)程序結(jié)構(gòu)的術(shù)語1214.有關(guān)程序結(jié)構(gòu)的術(shù)語一個(gè)軟件的深度(depth)—控制的層數(shù);一個(gè)軟件的寬度(width)—其控制的層數(shù)和跨度;一個(gè)模塊的“扇出數(shù)”(fan?out)—該模塊直接控制的其他模塊數(shù);一個(gè)模塊的“扇入數(shù)”(fan?in)指能直接控制該模塊的模塊數(shù)。4.有關(guān)程序結(jié)構(gòu)的術(shù)語一個(gè)軟件的深度(depth)—控1224.有關(guān)程序結(jié)構(gòu)的術(shù)語如果一個(gè)模塊控制另一個(gè)模塊,稱前者為“主控”模塊,后者為“從屬”模塊。在圖8-1-5中模塊M主控模塊a、b、c,模塊d從屬模塊a,因此也從屬M(fèi)。此外,軟件結(jié)構(gòu)中還有兩個(gè)重要的特性,即可見域和連通域。模塊的可見域——該模塊可直接或間接引用的一組模塊;模塊的連通域——僅包括該模塊可直接引用的模塊。4.有關(guān)程序結(jié)構(gòu)的術(shù)語如果一個(gè)模塊控制另一個(gè)模塊,稱前者1237.1.5數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)描述各數(shù)據(jù)分量之間的邏輯關(guān)系,數(shù)據(jù)結(jié)構(gòu)一經(jīng)確定,數(shù)據(jù)的組織形式、訪問方法、組合程度及處理策略等隨之而定,所以數(shù)據(jù)結(jié)構(gòu)是影響軟件總體結(jié)構(gòu)的重要因素。數(shù)據(jù)結(jié)構(gòu)與程序結(jié)構(gòu)一樣,也可以在不同的抽象級(jí)別上表示。以棧為例,作為一個(gè)抽象數(shù)據(jù)類型,在概念級(jí)上只關(guān)心“先進(jìn)后出”特性,而在實(shí)現(xiàn)級(jí)上則要考慮物理表示及內(nèi)部工作的細(xì)節(jié),比如,用向量實(shí)現(xiàn),或用鏈表實(shí)現(xiàn)等。7.1.5數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)描述各數(shù)據(jù)分量之間的邏輯關(guān)1247.1.5數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)對(duì)程序結(jié)構(gòu)和過程復(fù)雜性有直接的影響,從而在很大程度上決定了軟件的質(zhì)量。數(shù)據(jù)設(shè)計(jì)的目標(biāo)是為在需求規(guī)格說明中定義的那些數(shù)據(jù)對(duì)象選擇合適的邏輯表示,并確定可能作用在這些邏輯結(jié)構(gòu)上的所有操作(包括選用已存在的程序包)。數(shù)據(jù)抽象和信息隱蔽兩個(gè)概念是數(shù)據(jù)設(shè)計(jì)的基礎(chǔ)。通常,數(shù)據(jù)設(shè)計(jì)方案不是唯一的,有時(shí)需進(jìn)行算法復(fù)雜性分析、綜合各種因素之后才能從多種候選方案中篩選出最佳的設(shè)計(jì)方案。7.1.5數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)對(duì)程序結(jié)構(gòu)和過程復(fù)雜性有直1257.1.6軟件過程設(shè)計(jì)過程設(shè)計(jì)緊跟在數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu)設(shè)計(jì)之后,其基本任務(wù)是描述模塊內(nèi)各處理元素和判斷元素的順序,圖8-1-6展示了模塊B的內(nèi)部過程。┇過程說明圖8-1-6模塊B的內(nèi)部結(jié)構(gòu)模塊B┇┇模塊B程序結(jié)構(gòu)7.1.6軟件過程設(shè)計(jì)過程設(shè)計(jì)緊跟在數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu)設(shè)1267.1.6軟件過程設(shè)計(jì)所謂過程,應(yīng)包括有關(guān)處理的精確說明,諸如事件的順序、判斷的位置和條件、循環(huán)操作以及數(shù)據(jù)的組成,內(nèi)部變量和外部變量的引用問題等等。過程設(shè)計(jì)也應(yīng)遵循“自上而下,逐步求精”的原則和單入口單出口的結(jié)構(gòu)化設(shè)計(jì)思想。過程設(shè)計(jì)的任務(wù)是描述算法的細(xì)節(jié)。結(jié)構(gòu)化程序流程圖、盒圖(N-S圖)、判定表和判定樹,以及過程設(shè)計(jì)語言(PDL)、PAD圖等是人們經(jīng)常使用的工具。7.1.6軟件過程設(shè)計(jì)所謂過程,應(yīng)包括有關(guān)處理的精確說明1277.2軟件過程設(shè)計(jì)技術(shù)和工具
7.2.1結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)定義:是程序設(shè)計(jì)技術(shù),它采用自頂向下逐步求精的設(shè)計(jì)方法和單入口單出口的控制構(gòu)件。結(jié)構(gòu)化程序設(shè)計(jì)的思想,應(yīng)該在軟件設(shè)計(jì)中體現(xiàn)出來,但這并不排除為效率或其他原因?qū)Y(jié)構(gòu)化程序設(shè)計(jì)作一點(diǎn)修正。隨著面向?qū)ο蟆④浖赜玫刃碌能浖_發(fā)方法和技術(shù)的發(fā)展,更現(xiàn)實(shí)、更有效的開發(fā)途徑可能是自頂向下和自底向上兩種方法有機(jī)地結(jié)合。7.2軟件過程設(shè)計(jì)技術(shù)和工具
7.2.1結(jié)構(gòu)化程序1287.2.2圖形表示法1.流程圖(也稱為程序框圖)是最常用的一種表示法,“順序”、“分支”和“循環(huán)”三個(gè)基本控制構(gòu)件用流程圖表達(dá)的形式如圖8-2-1所示。F第二個(gè)任務(wù)順序結(jié)構(gòu)then部分else部分do?while循環(huán)第一個(gè)任務(wù)T分支條件If?then?else結(jié)構(gòu)循環(huán)條件循環(huán)體TF圖8-2-1流程圖構(gòu)件7.2.2圖形表示法1.流程圖(也稱為程序框圖)是最常用1297.2.2圖形表示法2.盒圖也稱為N-S圖或Chapin圖。這種表達(dá)方式取消了流程線,它強(qiáng)迫程序員以結(jié)構(gòu)化方式思考和解決問題。第一個(gè)任務(wù)第二個(gè)任務(wù)第三個(gè)任務(wù)順序結(jié)構(gòu)else部分then部分條件FTif-then-else結(jié)構(gòu)do-while部分循環(huán)條件循環(huán)結(jié)構(gòu)圖8-2-3盒圖的構(gòu)件7.2.2圖形表示法2.盒圖也稱為N-S圖或Chapin1307.2.3判定表與判定樹當(dāng)模塊中包含復(fù)雜的條件組合,并要根據(jù)這些條件的組合選擇動(dòng)作時(shí),只有判定表和判定樹能夠清晰地表達(dá)出復(fù)雜的條件組合與各種動(dòng)作之間的對(duì)應(yīng)關(guān)系。判定表由四部分組成:左上部——列出所有條件;左下部——列出所有可能的動(dòng)作;右上部——所有可能的條件組合(矩陣);右下部——條件組合與動(dòng)作之間的對(duì)應(yīng)關(guān)系。判定表的每一列可解釋為一條處理規(guī)則。7.2.3判定表與判定樹當(dāng)模塊中包含復(fù)雜的條件組合,并要1317.2.3判定表與判定樹【例7.2】問題處理描述:耗電記費(fèi)系統(tǒng)可以采用固定價(jià)格收費(fèi)、浮動(dòng)價(jià)格收費(fèi)和其他方式收費(fèi)三種方式。若采用固定價(jià)格方式收費(fèi),對(duì)每月耗電100kW?h以下的用戶只征收最低標(biāo)準(zhǔn)費(fèi),超過100kW?h的用戶按價(jià)格表A收費(fèi);若采用浮動(dòng)價(jià)格方式收費(fèi),則每月耗電100kW?h以下的用戶按價(jià)格A
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 主管全年工作任務(wù)計(jì)劃
- 學(xué)期交流日的組織策劃計(jì)劃
- 學(xué)習(xí)障礙與個(gè)性化支持計(jì)劃
- 增強(qiáng)職場競爭力的計(jì)劃
- 《Unit Seven Meet My Family》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年北京版(2024)英語三年級(jí)上冊(cè)
- 胃大切的護(hù)理
- 幼兒園消防培訓(xùn)知識(shí)課件
- 2025年深圳道路貨運(yùn)從業(yè)資格證考試
- 肥胖護(hù)理查房
- 2025年北海貨運(yùn)從業(yè)資格證考試題目庫存答案
- 小學(xué)生戲劇課件
- 《認(rèn)知行為療法》課件
- 無人機(jī)駕駛培訓(xùn)
- 2024年中煤電力有限公司所屬企業(yè)招聘29人筆試參考題庫附帶答案詳解
- DeepSeek介紹及其典型使用案例
- 2025年貴陽市貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 積極心理學(xué)視角下高職院校學(xué)生心理健康教育路徑研究
- 2025年內(nèi)蒙古建筑職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 人教版五年級(jí)數(shù)學(xué)下冊(cè)全套試卷附完整答案
- 2025年春新人教版數(shù)學(xué)一年級(jí)下冊(cè)課件 第一單元 2.拼一拼
- 《煤礦職業(yè)病危害防治》培訓(xùn)課件2025
評(píng)論
0/150
提交評(píng)論