軟件工程課件之第5章-總體設(shè)計(jì)(第6版)(張海潘編著)_第1頁(yè)
軟件工程課件之第5章-總體設(shè)計(jì)(第6版)(張海潘編著)_第2頁(yè)
軟件工程課件之第5章-總體設(shè)計(jì)(第6版)(張海潘編著)_第3頁(yè)
軟件工程課件之第5章-總體設(shè)計(jì)(第6版)(張海潘編著)_第4頁(yè)
軟件工程課件之第5章-總體設(shè)計(jì)(第6版)(張海潘編著)_第5頁(yè)
已閱讀5頁(yè),還剩95頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章總體設(shè)計(jì)設(shè)計(jì)過(guò)程設(shè)計(jì)原理啟發(fā)規(guī)則描繪軟件結(jié)構(gòu)的圖形工具面向數(shù)據(jù)流的設(shè)計(jì)方法關(guān)于設(shè)計(jì)軟件設(shè)計(jì)宣言:MitchKapor“什么是設(shè)計(jì)?設(shè)計(jì)是你站在兩個(gè)世界——技術(shù)世界和人類的目標(biāo)世界——而你嘗試將這兩個(gè)世界結(jié)合在一起……”。羅馬建筑批評(píng)家Vitruvius提出的觀念:“設(shè)計(jì)良好的建筑應(yīng)該展示出堅(jiān)固、實(shí)用和令人賞心悅目”。設(shè)計(jì)階段從工程管理的角度,可以將軟件設(shè)計(jì)分為總體(概要)設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段。從技術(shù)的角度,傳統(tǒng)的結(jié)構(gòu)化方法將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和過(guò)程設(shè)計(jì)4部分。面向?qū)ο蠓椒▌t將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、類設(shè)計(jì)/數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和構(gòu)件級(jí)設(shè)計(jì)4部分。結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化分析的關(guān)系需求管理的問(wèn)題總體設(shè)計(jì)過(guò)程:尋找實(shí)現(xiàn)目標(biāo)系統(tǒng)的各種不同的方案;選取若干個(gè)合理的方案選出最佳方案向用戶和使用部門(mén)負(fù)責(zé)人推薦為最佳方案設(shè)計(jì)軟件結(jié)構(gòu),數(shù)據(jù)庫(kù)設(shè)計(jì),確定測(cè)試要求并且制定測(cè)試計(jì)劃。必要性:從較抽象的層次上分析多種可能的系統(tǒng)實(shí)現(xiàn)方案和軟件結(jié)構(gòu),選出最佳方案和最合理的軟件結(jié)構(gòu),以較低成本開(kāi)發(fā)出較高質(zhì)量的軟件系統(tǒng)。設(shè)計(jì)過(guò)程由兩個(gè)主要階段組成:系統(tǒng)設(shè)計(jì)階段,確定系統(tǒng)的具體實(shí)現(xiàn)方案設(shè)想供選擇的方案選取合理的方案推薦最佳方案結(jié)構(gòu)設(shè)計(jì)階段,確定軟件結(jié)構(gòu)功能分解設(shè)計(jì)軟件結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫(kù)制定測(cè)試計(jì)劃書(shū)寫(xiě)文檔審查和復(fù)審總體設(shè)計(jì)步驟設(shè)想供選擇的方案根據(jù)數(shù)據(jù)流圖考慮各種可能的實(shí)現(xiàn)方案選取合理的方案從方案中選取若干個(gè)合理的方案。準(zhǔn)備下列4份資料:系統(tǒng)流程圖;組成系統(tǒng)的物理元素清單;成本/效益分析;實(shí)現(xiàn)這個(gè)系統(tǒng)的進(jìn)度計(jì)劃??傮w設(shè)計(jì)步驟推薦最佳方案綜合分析對(duì)比各種合理方案,推薦一個(gè)最佳的方案,并且制定詳細(xì)的實(shí)現(xiàn)計(jì)劃。功能分解先結(jié)構(gòu)設(shè)計(jì),再過(guò)程設(shè)計(jì)。結(jié)構(gòu)設(shè)計(jì)確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系;總體設(shè)計(jì)階段的任務(wù)過(guò)程設(shè)計(jì)確定每個(gè)模塊的處理過(guò)程,詳細(xì)設(shè)計(jì)階段的任務(wù)??傮w設(shè)計(jì)步驟設(shè)計(jì)軟件結(jié)構(gòu)劃分模塊,一個(gè)模塊對(duì)應(yīng)一個(gè)子功能。將模塊組織成層次系統(tǒng),可用層次圖或結(jié)構(gòu)圖來(lái)描繪。若數(shù)據(jù)流圖已經(jīng)細(xì)化到適當(dāng)?shù)膶哟?,則可以直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu),這就是面向數(shù)據(jù)流的設(shè)計(jì)方法。設(shè)計(jì)數(shù)據(jù)庫(kù)對(duì)于需要使用數(shù)據(jù)庫(kù)的那些應(yīng)用系統(tǒng),進(jìn)一步設(shè)計(jì)數(shù)據(jù)庫(kù)。總體設(shè)計(jì)步驟制定測(cè)試計(jì)劃早期階段考慮測(cè)試問(wèn)題,能促進(jìn)在設(shè)計(jì)時(shí)提高軟件的可測(cè)試性。書(shū)寫(xiě)文檔記錄總體設(shè)計(jì)的結(jié)果,其文檔有:(1)系統(tǒng)說(shuō)明;(2)用戶手冊(cè);(3)測(cè)試計(jì)劃;(4)詳細(xì)的實(shí)現(xiàn)計(jì)劃;(5)數(shù)據(jù)庫(kù)設(shè)計(jì)結(jié)果。審查和復(fù)審對(duì)總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查和管理復(fù)審。設(shè)計(jì)原理模塊化模塊:是由邊界元素限定的相鄰程序元素的序列,而且有一個(gè)總體標(biāo)識(shí)符代表它。模塊化:就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問(wèn)的模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來(lái)構(gòu)成一個(gè)整體,可以完成指定的功能滿足用戶的需求。為什么要模塊化?使復(fù)雜的大型程序可管理,軟件應(yīng)具備的惟一屬性。單模塊的大型程序難以理解。設(shè)計(jì)原理模塊化的根據(jù):假設(shè):C(x)定義問(wèn)題的復(fù)雜度

E(x)確定解決問(wèn)題x需要的工作量設(shè)有兩個(gè)問(wèn)題:P1和P2如果C(P1)>C(P2),顯然E(P1)>E(P2)根據(jù)人類解決一般問(wèn)題的經(jīng)驗(yàn)得到的規(guī)律:C(P1+P2)>C(P1)+C(P2)綜上所述,得到下面的不等式E(P1+P2)>E(P1)+E(P2)設(shè)計(jì)原理每個(gè)程序都相應(yīng)地有一個(gè)最適當(dāng)?shù)哪K數(shù)目M,使得系統(tǒng)的開(kāi)發(fā)成本最小。模塊化和軟件成本模塊化的作用使軟件結(jié)構(gòu)清晰,容易設(shè)計(jì)、閱讀和理解。易于測(cè)試和調(diào)試,有助于提高可靠性。提高軟件的可修改性。有助于軟件開(kāi)發(fā)工程的組織管理。抽象抽象:現(xiàn)實(shí)世界中一定事物、狀態(tài)或過(guò)程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來(lái),暫時(shí)忽略它們之間的差異,這就是抽象。抽象就是抽出事物本質(zhì)特性而暫時(shí)不考慮細(xì)節(jié)?!俺橄笫侨祟愄幚韽?fù)雜問(wèn)題的基本方法之一?!薄狦radyBoach一般抽象過(guò)程處理復(fù)雜系統(tǒng)的惟一有效的方法是用層次的方式構(gòu)造和分析它。一個(gè)復(fù)雜的動(dòng)態(tài)系統(tǒng)首先可以用一些高級(jí)的抽象概念構(gòu)造和理解,這些高級(jí)概念又可以用一些較低級(jí)的概念構(gòu)造和理解,如此進(jìn)行下去,直至最低層次的具體元素。例:過(guò)程抽象、數(shù)據(jù)抽象軟件工程抽象過(guò)程軟件工程過(guò)程的每一步都是對(duì)軟件解法的抽象層次的一次精化。在可行性研究階段,軟件作為系統(tǒng)的一個(gè)完整部件;在需求分析期間,軟件解法是使用在問(wèn)題環(huán)境內(nèi)熟悉的方式描述的;當(dāng)由總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過(guò)渡時(shí),抽象的程度也就隨之減少了;最后,當(dāng)源程序?qū)懗鰜?lái)以后,也就達(dá)到了抽象的最低層。逐步求精例:用篩選法求100以內(nèi)的素?cái)?shù)。所謂的篩選法,就是從2到100中去掉2,3,5,7的倍數(shù),剩下的就是100以內(nèi)的素?cái)?shù)。首先按程序功能寫(xiě)出一個(gè)框架main(){

建立2到100的數(shù)組A[],其中A[i]=i;.......................1

建立2到10的素?cái)?shù)表B[],存放2到10以內(nèi)的素?cái)?shù);........2

若A[i]=i是B[]中任一數(shù)的倍數(shù),則剔除A[i];.............3

輸出A[]中所有沒(méi)有被剔除的數(shù);…..……………….............4}逐步求精求精main(){/*建立2到100的數(shù)組A[],其中A[i]=i*/………..………1for(i=2;i<=100;i++)A[i]=i;

/*建立2到10的素?cái)?shù)表B[],存放2到10以內(nèi)的素?cái)?shù)*/….2B[1]=2;B[2]=3;B[3]=5;B[4]=7;

/*若A[i]=i是B[]中任一數(shù)的倍數(shù),則剔除A[i]*/.…..….3for(j=1;j<=4;j++)檢查A[]所有數(shù)能否被B[j]整除并將其從A[]剔除;.....3.1/*輸出A[]中所有沒(méi)有被剔除的數(shù)*/…….4for(i=2;i<=100;i++)若A[i]沒(méi)有被剔除,則輸出之……..…..4.1}繼續(xù)對(duì)3.1和4.1細(xì)化,直到每個(gè)語(yǔ)句都能用程序設(shè)計(jì)語(yǔ)言來(lái)表示逐步求精的作用幫助軟件工程師把精力集中在與當(dāng)前開(kāi)發(fā)階段最相關(guān)的那些方面上,而忽略當(dāng)前不必要考慮的細(xì)節(jié)。確保每個(gè)問(wèn)題在適當(dāng)?shù)臅r(shí)候被解決,且不需要同時(shí)處理7個(gè)以上知識(shí)塊。Wirth的概括說(shuō)明對(duì)付復(fù)雜問(wèn)題的最重要的辦法是抽象,因此,對(duì)一個(gè)復(fù)雜的問(wèn)題不應(yīng)該立刻用計(jì)算機(jī)指令、數(shù)字和邏輯符號(hào)來(lái)表示,而應(yīng)該用較自然的抽象語(yǔ)句來(lái)表示,從而得出抽象程序。抽象程序?qū)Τ橄蟮臄?shù)據(jù)進(jìn)行某些特定的運(yùn)算并用某些合適的記號(hào)(可能是自然語(yǔ)言)來(lái)表示。對(duì)抽象程序做進(jìn)一步的分解,并進(jìn)入下一個(gè)抽象層次,這樣的精細(xì)化過(guò)程一直進(jìn)行下去,直到程序能被計(jì)算機(jī)接受為止。這時(shí)的程序可能是用某種高級(jí)語(yǔ)言或機(jī)器指令書(shū)寫(xiě)的。信息隱藏和局部化信息隱藏:設(shè)計(jì)和確定模塊時(shí),一個(gè)模塊內(nèi)包含的信息(過(guò)程和數(shù)據(jù))對(duì)于不需要這些信息的模塊來(lái)說(shuō),是不能訪問(wèn)的。局部化:把一些關(guān)系密切的軟件元素物理地放得彼此靠近。局部化有助于實(shí)現(xiàn)信息隱藏。信息隱藏和局部化與模塊獨(dú)立信息隱藏和局部化的作用“隱藏”意味著模塊化可以通過(guò)定義一組獨(dú)立的模塊而實(shí)現(xiàn),這些獨(dú)立的模塊彼此間僅交換為了完成系統(tǒng)功能而必須交換的信息。使用信息隱藏原理作為模塊化系統(tǒng)設(shè)計(jì)的標(biāo)準(zhǔn)可以防止錯(cuò)誤的傳播。模塊獨(dú)立是模塊化、抽象、信息隱藏和局部化概念的直接結(jié)果。每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定子功能,并且和其他模塊之間的關(guān)系很簡(jiǎn)單。模塊獨(dú)立模塊獨(dú)立的重要性:有效的模塊化意味著功能分割和接口簡(jiǎn)化,有利于多人分工合作開(kāi)發(fā),提高開(kāi)發(fā)效率。獨(dú)立的模塊比較容易測(cè)試和維護(hù)。模塊獨(dú)立程度定性標(biāo)準(zhǔn)度量:耦合衡量不同模塊彼此間互相依賴(連接)的緊密程度。耦合要低,即每個(gè)模塊和其他模塊之間的關(guān)系要簡(jiǎn)單;內(nèi)聚衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。內(nèi)聚要高,每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定子功能。耦合是對(duì)一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量。要求:在軟件設(shè)計(jì)中應(yīng)該追求盡可能松散耦合的系統(tǒng)。易于研究、測(cè)試或維護(hù)任何一個(gè)模塊抑制錯(cuò)誤傳播;增強(qiáng)系統(tǒng)的可理解性、可測(cè)試性、可靠性和可維護(hù)性。耦合程度的度量非直接耦合/完全獨(dú)立(nodirectcoupling)兩個(gè)模塊功能互不相干、完全獨(dú)立。通常不可能所有模塊之間都沒(méi)有任何連接。耦合程度的度量數(shù)據(jù)耦合(datacoupling)模塊間通過(guò)參數(shù)交換數(shù)據(jù)信息系統(tǒng)中至少必須存在這種耦合。一個(gè)系統(tǒng)內(nèi)可以只包含數(shù)據(jù)耦合。是理想的目標(biāo),系統(tǒng)易維護(hù),模塊的修改不會(huì)引起其他模塊產(chǎn)生退化錯(cuò)誤。耦合程度的度量控制耦合(controlcoupling)模塊間傳遞的信息有控制信息把模塊適當(dāng)分解之后控制耦合通??梢杂脭?shù)據(jù)耦合代替它。被調(diào)用的模塊需知道調(diào)用模塊的內(nèi)部結(jié)構(gòu)和邏輯,降低了重用的可能性。耦合程度的度量特征耦合(stampcoupling)把整個(gè)數(shù)據(jù)結(jié)構(gòu)作為參數(shù)傳遞而被調(diào)用的模塊只需要使用其中一部分?jǐn)?shù)據(jù)元素??赡軐?dǎo)致對(duì)數(shù)據(jù)的訪問(wèn)失去控制,從而給計(jì)算機(jī)犯罪提供了機(jī)會(huì)。無(wú)論何時(shí)把指針作為參數(shù)進(jìn)行傳遞,都應(yīng)該仔細(xì)檢查該耦合。耦合程度的度量特征耦合(stampcoupling)耦合程度的度量特征耦合(stampcoupling)耦合程度的度量公共環(huán)境耦合(commoncoupling)多個(gè)模塊通過(guò)公共數(shù)據(jù)環(huán)境相互作用。公共環(huán)境包括全程變量、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)、任何存儲(chǔ)介質(zhì)上的文件、物理設(shè)備等耦合程度的度量公共環(huán)境耦合(commoncoupling)與結(jié)構(gòu)化編程矛盾,代碼可讀性差。對(duì)全局變量的聲明進(jìn)行修改,必須修改能夠訪問(wèn)該全局變量的每一個(gè)模塊。公共環(huán)境耦合的模塊難于重用,必須提供一個(gè)全局變量的清單。即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共環(huán)境耦合的實(shí)例數(shù)也會(huì)變化非常大。潛在危險(xiǎn)很大。模塊暴露出必需要更多的數(shù)據(jù),難以控制數(shù)據(jù)存取,而且會(huì)導(dǎo)致計(jì)算機(jī)犯罪。耦合程度的度量?jī)?nèi)容耦合(contentcoupling)最高程度的耦合,包括:一個(gè)模塊訪問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù);一個(gè)模塊通過(guò)非正常入口轉(zhuǎn)到其他模塊的內(nèi)部;兩個(gè)模塊有一部分程序代碼重疊;一個(gè)模塊有多個(gè)入口。耦合程度的度量耦合是影響軟件復(fù)雜程度的一個(gè)重要因素。應(yīng)該采取下述設(shè)計(jì)原則:盡量使用數(shù)據(jù)耦合少用控制耦合和特征耦合限制公共環(huán)境耦合的范圍完全不用內(nèi)容耦合內(nèi)聚標(biāo)志模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴(kuò)展。簡(jiǎn)單地說(shuō),理想內(nèi)聚的模塊只做一件事情。要求:設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚,通常中等程度的內(nèi)聚也是可以采用的,而且效果和高內(nèi)聚相差不多;但是,低內(nèi)聚不要使用。內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。內(nèi)聚程度的度量偶然內(nèi)聚(coincidentalcohesion)模塊完成的一組任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的。MA=B+CGETCHERIFR=5THENS=1內(nèi)聚程度的度量偶然內(nèi)聚(coincidentalcohesion)評(píng)價(jià):模塊內(nèi)各元素之間沒(méi)有實(shí)質(zhì)性聯(lián)系,強(qiáng)扭的瓜不甜;可理解性差,可維護(hù)性產(chǎn)生退化;模塊是不可重用的。解決方案:將模塊分成更小的模塊,每個(gè)小模塊執(zhí)行一個(gè)操作。內(nèi)聚程度的度量邏輯內(nèi)聚(logicalcohesion)一個(gè)模塊完成的任務(wù)在邏輯上屬于相同或相似的一類。內(nèi)聚程度的度量邏輯內(nèi)聚接口難以理解,造成整體上不易理解;完成多個(gè)操作的代碼互相糾纏在一起,即使局部功能的修改有時(shí)也會(huì)影響全局,導(dǎo)致嚴(yán)重的維護(hù)問(wèn)題;難以重用。解決方案:模塊分解。內(nèi)聚程度的度量時(shí)間內(nèi)聚(temporalcohesion)多個(gè)模塊包含的任務(wù)必須在同一段時(shí)間內(nèi)執(zhí)行。各種初始化工作打開(kāi)舊主文件、新主文件、事務(wù)文件和打印文件;初始化銷售地區(qū)表;讀第一條事務(wù)記錄和第一條舊主文件記錄;內(nèi)聚程度的度量時(shí)間內(nèi)聚:時(shí)間關(guān)系在一定程度上反映了程序某些實(shí)質(zhì),所以時(shí)間內(nèi)聚比邏輯內(nèi)聚好一些。模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操作卻有很強(qiáng)的關(guān)聯(lián)。時(shí)間內(nèi)聚的模塊不太可能重用。內(nèi)聚程度的度量過(guò)程內(nèi)聚(proceduralcohesion)模塊內(nèi)的元素是相關(guān)的且必須以特定次序執(zhí)行。通常通過(guò)研究流程圖確定模塊的劃分得到的往往是過(guò)程內(nèi)聚的模塊。內(nèi)聚程度的度量過(guò)程內(nèi)聚:比時(shí)間內(nèi)聚好,至少操作之間是過(guò)程關(guān)聯(lián)的。仍是弱連接,不太可能重用模塊。解決方案:分割為單獨(dú)的模塊,每個(gè)模塊執(zhí)行一個(gè)操作。內(nèi)聚程度的度量通信內(nèi)聚(communicationalcohesion)模塊中所有元素都使用同一個(gè)輸入數(shù)據(jù)和(或)產(chǎn)生同一個(gè)輸出數(shù)據(jù)。即在同一數(shù)據(jù)結(jié)構(gòu)上操作。內(nèi)聚程度的度量通信內(nèi)聚:模塊中各操作緊密相連,比過(guò)程內(nèi)聚更好。不能重用。解決方案:分成多個(gè)模塊,每個(gè)模塊執(zhí)行一個(gè)操作。內(nèi)聚程度的度量順序內(nèi)聚(sequentialcohesion)模塊內(nèi)的處理元素和同一個(gè)功能密切相關(guān)且這些處理必須順序執(zhí)行。評(píng)價(jià):根據(jù)數(shù)據(jù)流圖劃分模塊時(shí),通常得到順序內(nèi)聚的模塊,這種模塊彼此間的連接往往比較簡(jiǎn)單。內(nèi)聚程度的度量功能內(nèi)聚(functionalcohesion)模塊內(nèi)所有處理元素屬于一個(gè)整體,完成一個(gè)單一的功能最高程度的內(nèi)聚。評(píng)價(jià):模塊可重用,應(yīng)盡可能重用;可隔離錯(cuò)誤,維護(hù)更容易;擴(kuò)充產(chǎn)品功能時(shí)更容易。內(nèi)聚程度的度量七種內(nèi)聚的優(yōu)劣評(píng)分結(jié)果:高內(nèi)聚:功能內(nèi)聚

10分順序內(nèi)聚 9分 中內(nèi)聚:通信內(nèi)聚 7分 過(guò)程內(nèi)聚 5分低內(nèi)聚:時(shí)間內(nèi)聚 3分邏輯內(nèi)聚 1分偶然內(nèi)聚 0分設(shè)計(jì)時(shí)力爭(zhēng)做到高內(nèi)聚,并且能夠辨認(rèn)出低內(nèi)聚的模塊。啟發(fā)規(guī)則改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性通過(guò)模塊分解或合并,降低耦合提高內(nèi)聚。兩個(gè)方面:模塊功能完善化。一個(gè)完整的模塊包含:執(zhí)行規(guī)定的功能的部分出錯(cuò)處理的部分返回一個(gè)“結(jié)束標(biāo)志”消除重復(fù)功能,改善軟件結(jié)構(gòu)。完全相似局部相似啟發(fā)規(guī)則啟發(fā)規(guī)則模塊規(guī)模應(yīng)該適中通常規(guī)定50~100行語(yǔ)句,最多不超過(guò)500行,一頁(yè)紙內(nèi)。數(shù)字作為參考,要保證模塊的獨(dú)立性。過(guò)大的模塊往往是由于分解不充分,但是進(jìn)一步分解必須符合問(wèn)題結(jié)構(gòu),一般說(shuō)來(lái),分解后不應(yīng)該降低模塊獨(dú)立性。過(guò)小的模塊開(kāi)銷大于有效操作,而且模塊數(shù)目過(guò)多將使系統(tǒng)接口復(fù)雜。啟發(fā)規(guī)則深度、寬度、扇出和扇入都應(yīng)適當(dāng)深度:軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略地標(biāo)志一個(gè)系統(tǒng)的大小和復(fù)雜程度。寬度:軟件結(jié)構(gòu)內(nèi)同一個(gè)層次上的模塊總數(shù)的最大值。扇出:一個(gè)模塊直接控制(調(diào)用)的模塊數(shù)目。扇入:有多少個(gè)上級(jí)模塊直接調(diào)用它。啟發(fā)規(guī)則啟發(fā)規(guī)則啟發(fā)規(guī)則模塊的作用域應(yīng)該在控制域之內(nèi)模塊的作用域:定義為受該模塊內(nèi)一個(gè)判定影響的所有模塊的集合。模塊的控制域:是這個(gè)模塊本身以及所有直接或間接從屬于它的模塊的集合。在一個(gè)設(shè)計(jì)得很好的系統(tǒng)中,所有受判定影響的模塊應(yīng)該都從屬于做出判定的那個(gè)模塊,最好局限于做出判定的那個(gè)模塊本身及它的直屬下級(jí)模塊。啟發(fā)規(guī)則啟發(fā)規(guī)則解決方案:把模塊A中的判定移到模塊M中;把模塊G移到模塊A下面,作為其下級(jí)模塊。啟發(fā)規(guī)則力爭(zhēng)降低模塊接口的復(fù)雜程度模塊接口復(fù)雜是軟件發(fā)生錯(cuò)誤的一個(gè)主要原因。應(yīng)該仔細(xì)設(shè)計(jì)模塊接口,使得信息傳遞簡(jiǎn)單并且和模塊的功能一致。例:解一元二次方程的函數(shù)QUAD_ROOT(TBL,X)其中數(shù)組TBL傳送方程的系數(shù)數(shù)組X送回求得的根QUAD_ROOT(A,B,C,ROOT1,ROOT2)啟發(fā)規(guī)則設(shè)計(jì)單入口單出口的模塊模塊間不要出現(xiàn)內(nèi)容耦合。軟件易理解和維護(hù)。模塊功能應(yīng)該可以預(yù)測(cè)模塊的功能可預(yù)測(cè),但也防止功能過(guò)分局限。功能可預(yù)測(cè):將模塊當(dāng)做黑盒子,相同輸入數(shù)據(jù)總是產(chǎn)生同樣的輸出。描繪軟件結(jié)構(gòu)的圖形工具層次圖(H圖)

HIPO圖層次圖用來(lái)描繪軟件的層次結(jié)構(gòu)。很適于在自頂向下設(shè)計(jì)軟件的過(guò)程中使用。層次圖和層次方框圖的區(qū)別:層次圖層次方框圖作用描繪軟件結(jié)構(gòu)描繪數(shù)據(jù)結(jié)構(gòu)矩形框模塊數(shù)據(jù)元素連線調(diào)用關(guān)系組成關(guān)系層次圖正文加工系統(tǒng)的層次圖結(jié)構(gòu)圖與層次圖類似,也是描繪軟件結(jié)構(gòu)的圖形工具。方框代表一個(gè)模塊;方框之間的直線表示模塊的調(diào)用關(guān)系;尾部是空心圓箭頭表示傳遞的是數(shù)據(jù);尾部實(shí)心圓箭頭表示傳遞的是控制信息。結(jié)構(gòu)圖附加符號(hào):選擇調(diào)用:判定為真時(shí)調(diào)用A,為假時(shí)調(diào)用B。循環(huán)調(diào)用:模塊M循環(huán)調(diào)用模塊A、B、C。層次圖與結(jié)構(gòu)圖二者并不嚴(yán)格表示模塊的調(diào)用次序,多數(shù)人習(xí)慣按調(diào)用次序從左到右畫(huà)模塊;二者并不指明何時(shí)調(diào)用下層模塊;二者只表明一個(gè)模塊調(diào)用那些模塊,沒(méi)有表示模塊內(nèi)還有沒(méi)有其他成分;通常用層次圖作為描繪軟件結(jié)構(gòu)的文檔;由層次圖導(dǎo)出結(jié)構(gòu)圖的過(guò)程,可以作為檢查設(shè)計(jì)正確性和評(píng)價(jià)模塊獨(dú)立性的好方法。面向數(shù)據(jù)流的設(shè)計(jì)方法定義了一些不同的“映射”,利用這些映射可以把數(shù)據(jù)流圖變換成軟件結(jié)構(gòu),理論上可以設(shè)計(jì)任何軟件的結(jié)構(gòu)。也是通常所說(shuō)的結(jié)構(gòu)化設(shè)計(jì)方法(簡(jiǎn)稱SD方法)。信息流的類型決定了映射的方法,包括兩種類型:變換流事務(wù)流面向數(shù)據(jù)流的設(shè)計(jì)方法變換流信息沿輸入通路進(jìn)入系統(tǒng),同時(shí)由外部形式變換成內(nèi)部形式,進(jìn)入系統(tǒng)的信息通過(guò)變換中心,經(jīng)加工處理以后再沿輸出通路變換成外部形式離開(kāi)軟件系統(tǒng)。面向數(shù)據(jù)流的設(shè)計(jì)方法事務(wù)流數(shù)據(jù)沿輸入通路到達(dá)一個(gè)處理T,T根據(jù)輸入數(shù)據(jù)的類型在若干個(gè)動(dòng)作序列中選出一個(gè)來(lái)執(zhí)行。處理T稱為事務(wù)中心,它完成下述任務(wù):接收輸入數(shù)據(jù);分析每個(gè)事務(wù)以

確定它的類型;根據(jù)事務(wù)類型

選取一條活動(dòng)通路。設(shè)計(jì)過(guò)程變換分析一系列設(shè)計(jì)步驟的總稱,經(jīng)過(guò)這些步驟把具有變換流特點(diǎn)的數(shù)據(jù)流圖按預(yù)先確定的模式映射成軟件結(jié)構(gòu)。設(shè)計(jì)步驟復(fù)查基本系統(tǒng)模型確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實(shí)際。復(fù)查并精化數(shù)據(jù)流圖對(duì)需求分析階段得出的數(shù)據(jù)流圖認(rèn)真復(fù)查,并且在必要時(shí)進(jìn)行精化。確保數(shù)據(jù)流圖給出正確的邏輯模型,使數(shù)據(jù)流圖中每個(gè)處理代表一個(gè)規(guī)模適中相對(duì)獨(dú)立的子功能。設(shè)計(jì)步驟確定數(shù)據(jù)流圖具有變換特性還是事務(wù)特性所有信息流都可認(rèn)為是變換流,但遇到有明顯事務(wù)特性的信息流時(shí),建議采用事務(wù)分析方法進(jìn)行設(shè)計(jì)。確定數(shù)據(jù)流的全局特性和局部特性。確定輸入流和輸出流的邊界,從而孤立出變換中心輸入流和輸出流的邊界和對(duì)它們的解釋有關(guān),不同設(shè)計(jì)人員可能會(huì)在流內(nèi)選取稍微不同的點(diǎn)作為邊界的位置。設(shè)計(jì)步驟完成“第一

級(jí)分解”位于軟件結(jié)構(gòu)最頂層的控制模塊Cm協(xié)調(diào)下述從屬的控制功能:輸入信息處理控制模塊Ca變換中心控制模塊Ct,管理內(nèi)部數(shù)據(jù)操作;輸出信息處理控制模塊Ce。設(shè)計(jì)步驟完成“第二級(jí)分解”設(shè)計(jì)步驟使用設(shè)計(jì)度量和啟發(fā)式規(guī)則對(duì)第一次分割得到的軟件結(jié)構(gòu)進(jìn)一步精化為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、盡可能松散的耦合,為了得到一個(gè)易于實(shí)現(xiàn)、易于測(cè)試和易于維護(hù)的軟件結(jié)構(gòu),應(yīng)該對(duì)初步分割得到的模塊進(jìn)行再分解或合并。事務(wù)分析當(dāng)數(shù)據(jù)流有一個(gè)明顯的“發(fā)射中心”(事務(wù)中心)時(shí),采用事務(wù)分析方法為宜。事務(wù)分析與變換分析設(shè)計(jì)步驟的差別僅在于由數(shù)據(jù)流圖到軟件結(jié)構(gòu)的映射方法不同:由事務(wù)流映射成的軟件結(jié)構(gòu)包括一個(gè)接收分支和一個(gè)發(fā)送分支;接收分支與變換分析相似,即從事務(wù)中心的邊界開(kāi)始,把沿著接收流通路的處理映射成模塊;發(fā)送分支包含一個(gè)調(diào)度模塊,控制下層的所有活動(dòng)模塊;然后把數(shù)據(jù)流圖中的每個(gè)活動(dòng)流通路映射成與它的流特征相對(duì)應(yīng)的結(jié)構(gòu)。事務(wù)分析應(yīng)用示例例1(補(bǔ)充)設(shè)計(jì)一個(gè)產(chǎn)品,它將一個(gè)文件名作為輸入,并返回文件中的字?jǐn)?shù)。應(yīng)用示例第一級(jí)分解應(yīng)用示例第二級(jí)分解應(yīng)用示例精化應(yīng)用示例例2:汽車數(shù)字儀表板通過(guò)模數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳感器和微處理機(jī)接口;在發(fā)光二極管面板上顯示數(shù)據(jù);指示每小時(shí)英里數(shù)(mph),行駛的里程,每加侖油行駛的英里數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論