軟件工程_總體設(shè)計(jì)_第1頁
軟件工程_總體設(shè)計(jì)_第2頁
軟件工程_總體設(shè)計(jì)_第3頁
軟件工程_總體設(shè)計(jì)_第4頁
軟件工程_總體設(shè)計(jì)_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1,第二部分、開發(fā)階段,系統(tǒng)設(shè)計(jì)總體設(shè)計(jì)體系結(jié)構(gòu)設(shè)計(jì)模塊設(shè)計(jì)詳細(xì)設(shè)計(jì)用戶界面設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)系統(tǒng)實(shí)現(xiàn)編碼和單元測試綜合測試,體系結(jié)構(gòu)就如同人的骨架。如果某個家伙的骨架是猴子,那么無論怎樣喂養(yǎng)和美容,他始終都是猴子,不會成為人。,模塊就如同人的器官,具有特定的功能。人體中最出色的模塊設(shè)計(jì)之一是手,手只有幾種動作,卻能做無限多的事情。人體中最糟糕的模塊設(shè)計(jì)之一是嘴巴,嘴巴將最有價值但毫無相干的幾種功能如吃飯、說話混為一體,使之無法并行處理,真乃人類之不幸。,用戶界面就如同人的外表,最容易讓人一見鐘情或一見惡心。象人類追求心靈美和外表美那樣,軟件系統(tǒng)也追求(內(nèi)在的)功能強(qiáng)大和(外表的)界面友好。但隨著生活節(jié)奏的加快,人們已少有興趣去品味深藏不露的內(nèi)在美。如果把Unix系統(tǒng)比作是健壯的漢子和婦人,那么Windows系統(tǒng)就象嫵媚的小白臉和狐貍精。想不到Windows系統(tǒng)竟然能興風(fēng)作浪,占去大半市場。,數(shù)據(jù)結(jié)構(gòu)與算法就如同人的血脈和神經(jīng),它讓器官具有生命并能發(fā)揮功能。數(shù)據(jù)結(jié)構(gòu)與算法分布在體系結(jié)構(gòu)和模塊中,它將協(xié)調(diào)系統(tǒng)的各個功能。人的耳朵和嘴巴雖然是相對獨(dú)立的器官,但如果耳朵失聰了,嘴巴就只能發(fā)出“啊”“嗚”的聲音,等于喪失了說話的功能,可人們卻又能用手勢代替說話。人體的數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)真是十分神奇并且十分可笑。,2,第5章總體設(shè)計(jì),本章主要內(nèi)容:軟件設(shè)計(jì)的概念與原則;總體設(shè)計(jì)的步驟和方法;面向數(shù)據(jù)流的設(shè)計(jì)方法;總體設(shè)計(jì)的文檔與評審。本章重點(diǎn):總體設(shè)計(jì)的步驟和方法;面向數(shù)據(jù)流的設(shè)計(jì)方法本章難點(diǎn):軟件設(shè)計(jì)的原則,內(nèi)聚和耦合,系統(tǒng)結(jié)構(gòu)圖。,第五章總體設(shè)計(jì),5.1設(shè)計(jì)過程5.2設(shè)計(jì)原理5.3啟發(fā)規(guī)則5.4描繪軟件結(jié)構(gòu)的圖形工具5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,4,總體設(shè)計(jì)的基本目的總體設(shè)計(jì)的基本目的就是回答“概括地說,系統(tǒng)應(yīng)該如何實(shí)現(xiàn)?”這個問題??傮w設(shè)計(jì)又稱為概要設(shè)計(jì)或初步設(shè)計(jì)??傮w設(shè)計(jì)階段的任務(wù)通過這個階段的工作將劃分出組成系統(tǒng)的物理元素程序、文件、數(shù)據(jù)庫、人工過程和文檔等等,但是每個物理元素仍然處于黑盒子級,這些黑盒子里的具體內(nèi)容將在以后仔細(xì)設(shè)計(jì)??傮w設(shè)計(jì)階段的另一項(xiàng)重要任務(wù)是設(shè)計(jì)軟件的結(jié)構(gòu),也就是要確定系統(tǒng)中每個程序是由哪些模塊組成的,以及這些模塊相互間的關(guān)系??傮w設(shè)計(jì)的意義在詳細(xì)設(shè)計(jì)之前進(jìn)行總體設(shè)計(jì)可以站在全局高度上,花較少成本,從較抽象的層次上分析對比多種可能的系統(tǒng)實(shí)現(xiàn)方案和軟件結(jié)構(gòu),從中選出最佳方案和最合理的軟件結(jié)構(gòu),從而用較低成本開發(fā)出較高質(zhì)量的軟件系統(tǒng)。,把對象當(dāng)作一個黑盒子,不需要知道里面是怎么處理的。,5,5.1總體設(shè)計(jì)的過程,總體設(shè)計(jì)過程通常由兩個主要階段組成:系統(tǒng)設(shè)計(jì):確定系統(tǒng)的具體實(shí)現(xiàn)方案。結(jié)構(gòu)設(shè)計(jì):確定軟件結(jié)構(gòu)。9個步驟:設(shè)想供選擇的方案選取合理的方案推薦最佳方案功能分解設(shè)計(jì)軟件結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫制定測試計(jì)劃書寫文檔審查和復(fù)審,6,5.1.1設(shè)想供選擇的方案,在總體設(shè)計(jì)階段分析員應(yīng)該考慮各種可能的實(shí)現(xiàn)方案,并且力求從中選出最佳方案。需求分析階段得出的數(shù)據(jù)流圖是總體設(shè)計(jì)的極好的出發(fā)點(diǎn)。數(shù)據(jù)流圖中的某些處理可以邏輯地歸并在一個自動化邊界內(nèi)作為一組,另一些處理可以放在另一個自動化邊界內(nèi)作為另一組。這些自動化邊界通常意味著某種實(shí)現(xiàn)策略。設(shè)想把數(shù)據(jù)流圖中的處理分組的各種可能的方法,拋棄在技術(shù)上行不通的分組方法(例如,組內(nèi)不同處理的執(zhí)行時間不相容),余下的分組方法代表可能的實(shí)現(xiàn)策略,并且可以啟示供選擇的物理系統(tǒng)。在總體設(shè)計(jì)的該步驟中分析員僅僅一個邊界一個邊界地設(shè)想并且列出供選擇的方案,并不評價這些方案。,5.1總體設(shè)計(jì)的過程,7,8,5.1.2選取若干個合理的方案,至少選取低成本、中等成本和高成本三種方案。每種方案準(zhǔn)備四份資料:系統(tǒng)流程圖;組成系統(tǒng)的物理元素清單;成本/效益分析;實(shí)現(xiàn)這個系統(tǒng)的進(jìn)度計(jì)劃。,5.1總體設(shè)計(jì)的過程,9,5.1.3推薦最佳方案,分析員應(yīng)該綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為推薦的方案制定詳細(xì)的實(shí)現(xiàn)計(jì)劃。在使用部門的負(fù)責(zé)人接受了分析員所推薦的方案之后,將進(jìn)入總體設(shè)計(jì)過程的下一個重要階段結(jié)構(gòu)設(shè)計(jì)。,5.1總體設(shè)計(jì)的過程,10,5.1.4功能分解,程序(特別是復(fù)雜的大型程序)的設(shè)計(jì),通常分為兩個階段完成:結(jié)構(gòu)設(shè)計(jì):結(jié)構(gòu)設(shè)計(jì)是總體設(shè)計(jì)階段的任務(wù)。結(jié)構(gòu)設(shè)計(jì)確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系。過程設(shè)計(jì):過程設(shè)計(jì)是詳細(xì)設(shè)計(jì)階段的任務(wù)。過程設(shè)計(jì)確定每個模塊的處理過程。為確定軟件結(jié)構(gòu),首先需要從實(shí)現(xiàn)角度把復(fù)雜的功能進(jìn)一步分解。一般說來,經(jīng)過分解之后應(yīng)該使每個功能對大多數(shù)程序員而言都是明顯易懂的。功能分解導(dǎo)致數(shù)據(jù)流圖的進(jìn)一步細(xì)化,同時還應(yīng)該用IPO圖或其他適當(dāng)?shù)墓ぞ吆喴枋黾?xì)化后每個處理的算法,5.1總體設(shè)計(jì)的過程,11,5.1.5設(shè)計(jì)軟件結(jié)構(gòu),通常程序中的一個模塊完成一個適當(dāng)?shù)淖庸δ?。?yīng)該把模塊組織成良好的層次系統(tǒng),頂層模塊調(diào)用它的下層模塊以實(shí)現(xiàn)程序的完整功能,每個下層模塊再調(diào)用更下層的模塊,從而完成程序的一個子功能,最下層的模塊完成最具體的功能。軟件結(jié)構(gòu)(即由模塊組成的層次系統(tǒng))可以用層次圖或結(jié)構(gòu)圖來描繪。(5.4節(jié)),5.1總體設(shè)計(jì)的過程,12,5.1.6數(shù)據(jù)庫設(shè)計(jì),如需使用數(shù)據(jù)庫,分析員應(yīng)該在需求分析階段對系統(tǒng)數(shù)據(jù)要求所做的分析的基礎(chǔ)上進(jìn)一步設(shè)計(jì)數(shù)據(jù)庫。包括下述四個步驟:模式設(shè)計(jì):模式設(shè)計(jì)的目的是確定物理數(shù)據(jù)庫結(jié)構(gòu)。子模式設(shè)計(jì):子模式是用戶使用的數(shù)據(jù)視圖。完整性和安全性設(shè)計(jì)。優(yōu)化:主要目的是改進(jìn)模式和子模式以優(yōu)化數(shù)據(jù)的存取。,5.1總體設(shè)計(jì)的過程,13,5.1.7制定測試計(jì)劃,在軟件開發(fā)的早期階段考慮測試問題,能促使軟件設(shè)計(jì)人員在設(shè)計(jì)時注意提高軟件的可測試性。,5.1總體設(shè)計(jì)的過程,14,5.1.8書寫文檔,系統(tǒng)說明用系統(tǒng)流程圖描繪的系統(tǒng)構(gòu)成方案;組成系統(tǒng)的物理元素清單;成本效益分析;對最佳方案的概括描述;精化的數(shù)據(jù)流圖;用層次圖或結(jié)構(gòu)圖描繪的軟件結(jié)構(gòu);用IPO圖或其他工具(例如,PDL語言)簡要描述的各個模塊的算法;模塊間的接口關(guān)系;需求、功能和模塊三者之間的交叉參照關(guān)系等等。用戶手冊修改更正在需求分析階段產(chǎn)生的初步的用戶手冊。測試計(jì)劃包括測試策略,測試方案,預(yù)期的測試結(jié)果,測試進(jìn)度計(jì)劃等等。詳細(xì)的實(shí)現(xiàn)計(jì)劃數(shù)據(jù)庫設(shè)計(jì)結(jié)果,5.1總體設(shè)計(jì)的過程,15,5.1.9審查和復(fù)審,最后應(yīng)該對總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查,在技術(shù)審查通過之后再由使用部門的負(fù)責(zé)人從管理角度進(jìn)行復(fù)審。,5.1總體設(shè)計(jì)的過程,16,5.2軟件設(shè)計(jì)原理*,在軟件設(shè)計(jì)過程中應(yīng)該遵循的基本原理和相關(guān)概念模塊化抽象逐步求精信息隱蔽和局部化模塊獨(dú)立,17,5.2.1模塊化,模塊是數(shù)據(jù)說明、可執(zhí)行語句等程序?qū)ο蟮募?,它是單?dú)命名的而且可通過名字來訪問,例如,過程、函數(shù)、子程序、宏等等都可作為模塊。模塊化就是把程序劃分成若干個模塊,每個模塊完成一個子功能,把這些模塊集中起來組成一個整體,可以完成指定的功能,滿足問題的要求。模塊化的根據(jù)不等式C(P1P2)C(P1)C(P2)E(P1P2)E(P1)E(P2)“各個擊破”的結(jié)論把復(fù)雜的問題分解成許多容易解決的小問題,原來的問題也就容易解決了,5.2軟件設(shè)計(jì)原理*,18,最適當(dāng)?shù)哪K數(shù)目,5.2軟件設(shè)計(jì)原理*,19,模塊化的優(yōu)點(diǎn),可以使軟件結(jié)構(gòu)清晰,不僅容易設(shè)計(jì)也容易閱讀和理解;可以使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性;能夠提高軟件的可修改性;有助于軟件開發(fā)工程的組織管理。,5.2軟件設(shè)計(jì)原理*,20,5.2.2抽象,抽象就是抽出事物的本質(zhì)特性而暫時不考慮它們的細(xì)節(jié)。處理復(fù)雜系統(tǒng)的唯一有效的方法是用層次的方式構(gòu)造和分析它。一個復(fù)雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構(gòu)造和理解,這些高級概念又可以用一些較低級的概念構(gòu)造和理解,如此進(jìn)行下去,直至最低層次的具體元素。,5.2軟件設(shè)計(jì)原理*,上下級關(guān)系的層次結(jié)構(gòu)順序相鄰關(guān)系的層次結(jié)構(gòu),21,5.2.3逐步求精,逐步求精是許多軟件工程技術(shù)(如規(guī)格說明技術(shù)、設(shè)計(jì)和實(shí)現(xiàn)技術(shù))的基礎(chǔ)為了能集中精力解決主要問題而盡量延遲對問題細(xì)節(jié)的考慮抽象和求精是一對互補(bǔ)的概念抽象使得設(shè)計(jì)者能夠說明過程和數(shù)據(jù)、同時卻忽略底層細(xì)節(jié)可以把抽象看成一種通過忽略多余的細(xì)節(jié)同時強(qiáng)調(diào)有關(guān)的細(xì)節(jié),而實(shí)現(xiàn)逐步求精的方法,5.2軟件設(shè)計(jì)原理*,22,5.2.4信息隱蔽和局部化,信息隱蔽原理:應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。“隱蔽”意味著模塊彼此間僅僅交換那些為了完成系統(tǒng)功能而必須交換的信息。“局部化”是指把一些關(guān)系密切的軟件元素物理地放得彼此靠近。局部化有助于實(shí)現(xiàn)信息隱蔽。信息隱蔽和局部化的優(yōu)點(diǎn)測試期間和軟件維護(hù)期間需要修改軟件,使用信息隱蔽原理作為模塊化系統(tǒng)設(shè)計(jì)的標(biāo)準(zhǔn)就會帶來極大好處。因?yàn)榻^大多數(shù)數(shù)據(jù)和過程對于軟件的其他部分而言是隱蔽的(也就是“看”不見的),在修改期間由于疏忽而引入的錯誤就很少可能傳播到軟件的其他部分。,5.2軟件設(shè)計(jì)原理*,23,5.2.5模塊獨(dú)立,模塊獨(dú)立的概念是模塊化、抽象、信息隱蔽和局部化概念的直接結(jié)果。為什么模塊的獨(dú)立性很重要呢?有效的模塊化(即具有獨(dú)立的模塊)的軟件比較容易開發(fā)出來。獨(dú)立的模塊比較容易測試和維護(hù)。模塊的獨(dú)立程度可以由兩個定性標(biāo)準(zhǔn)度量,這兩個標(biāo)準(zhǔn)分別稱為耦合和內(nèi)聚。,5.2軟件設(shè)計(jì)原理*,24,耦合性(Coupling),耦合性是對一個軟件結(jié)構(gòu)中不同模塊之間互連程度的度量。模塊間的耦合程度強(qiáng)烈影響系統(tǒng)的可理解性、可測試性、可靠性和可維護(hù)性。,5.2軟件設(shè)計(jì)原理*,25,(1)非直接耦合,如果兩個模塊之間沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實(shí)現(xiàn)的,這就是非直接耦合。這種耦合的模塊獨(dú)立性最強(qiáng)。,5.2軟件設(shè)計(jì)原理*,26,(2)數(shù)據(jù)耦合,如果一個模塊訪問另一個模塊時,彼此之間是通過數(shù)據(jù)參數(shù)(不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量)來交換輸入、輸出信息的,則稱這種耦合為數(shù)據(jù)耦合。按數(shù)據(jù)耦合開發(fā)的程序界面簡單、安全可靠。數(shù)據(jù)耦合是松散的耦合,模塊之間的獨(dú)立性比較強(qiáng)。在軟件程序結(jié)構(gòu)中至少必須有這類耦合。,5.2軟件設(shè)計(jì)原理*,27,(3)標(biāo)記耦合,如果一組模塊通過參數(shù)表傳遞記錄信息,就是標(biāo)記耦合。事實(shí)上,這組模塊共享了這個記錄,它是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量。這要求這些模塊都必須清楚該記錄的結(jié)構(gòu),并按結(jié)構(gòu)要求對此記錄進(jìn)行操作。如果采取“信息隱蔽”的方法,把在數(shù)據(jù)結(jié)構(gòu)上的操作全部集中在一個模塊中,就可以消除這種耦合。,5.2軟件設(shè)計(jì)原理*,28,(4)控制耦合,如果一個模塊通過傳送開關(guān)、標(biāo)志、名字等控制信息,明顯地控制選擇另一模塊的功能,就是控制耦合。這種耦合的實(shí)質(zhì)是在單一接口上選擇多功能模塊中的某項(xiàng)功能。對所控制模塊的任何修改,都會影響控制模塊。另外,控制耦合也意味著控制模塊必須知道所控制模塊內(nèi)部的一些邏輯關(guān)系,這些都會降低模塊的獨(dú)立性。,5.2軟件設(shè)計(jì)原理*,29,(5)外部耦合,一組模塊都訪問同一全局簡單變量而不是同一全局?jǐn)?shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)表傳遞該全局變量的信息,則稱之為外部耦合。外部耦合引起的問題類似于公共耦合,區(qū)別在于在外部耦合中不存在依賴于一個數(shù)據(jù)結(jié)構(gòu)內(nèi)部各項(xiàng)的物理安排。,5.2軟件設(shè)計(jì)原理*,30,(6)公共耦合,若一組模塊都訪問同一個公共數(shù)據(jù)環(huán)境,則它們之間的耦合就稱為公共耦合。公共的數(shù)據(jù)環(huán)境可以是全局?jǐn)?shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)等。這種耦合會引起下列問題:所有公共耦合模塊都與某一個公共數(shù)據(jù)環(huán)境內(nèi)部各項(xiàng)的物理安排有關(guān),若修改某個數(shù)據(jù)的大小,將會影響到所有的模塊。無法控制各個模塊對公共數(shù)據(jù)的存取,嚴(yán)重影響軟件模塊的可靠性和適應(yīng)性。公共數(shù)據(jù)名的使用,明顯降低了程序的可讀性。,5.2軟件設(shè)計(jì)原理*,31,(7)內(nèi)容耦合,如果出現(xiàn)以下情形,兩個模塊之間就發(fā)生了內(nèi)容耦合:一個模塊訪問另一個模塊的內(nèi)部數(shù)據(jù)。一個模塊不通過正常入口轉(zhuǎn)到另一個模塊的內(nèi)部。兩個模塊有一部分代碼重疊(只可能出現(xiàn)在匯編程序中)。一個模塊有多個入口(這意味著一個模塊有幾種功能)。模塊化的原則模塊化設(shè)計(jì)的最終目標(biāo),是希望建立模塊間耦合盡可能松散的系統(tǒng)。在這樣一個系統(tǒng)中,我們設(shè)計(jì)、編碼、測試和維護(hù)其中任何一個模塊,就不需要對系統(tǒng)中其他模塊有很多的了解。此外,由于模塊間聯(lián)系簡單,發(fā)生在某一處的錯誤傳播到整個系統(tǒng)的可能性很小。,5.2軟件設(shè)計(jì)原理*,32,內(nèi)聚性(Cohesion),內(nèi)聚性標(biāo)志一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度。模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。內(nèi)聚和耦合都是模塊化設(shè)計(jì)的有力工具,但是實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。,5.2軟件設(shè)計(jì)原理*,33,(1)巧合內(nèi)聚,巧合內(nèi)聚又稱為偶然內(nèi)聚。當(dāng)模塊內(nèi)各部分之間沒有聯(lián)系,或者即使有聯(lián)系,這種聯(lián)系也很松散,則稱這種模塊為巧合內(nèi)聚模塊,它是內(nèi)聚程度最低的模塊。這種模塊的缺點(diǎn)首先是不易修改和維護(hù)。其次是這種模塊的內(nèi)容不易理解,很難描述它所完成的功能,增加了程序的模糊性。,5.2軟件設(shè)計(jì)原理*,34,(2)邏輯內(nèi)聚,這種模塊把幾種相關(guān)的功能組合在一起,每次調(diào)用時,由傳送給模塊的判定參數(shù)來確定該模塊應(yīng)執(zhí)行哪一種功能。這種模塊是單入口多功能模塊。類似的有錯誤處理模塊。它接收出錯信號,對不同類型的錯誤打印出不同的出錯信息。邏輯內(nèi)聚模塊比巧合內(nèi)聚模塊的內(nèi)聚程度要高。邏輯內(nèi)聚的缺點(diǎn)它所執(zhí)行的不是一種功能,而是執(zhí)行若干功能中的一種,因此它不易修改。另外,當(dāng)調(diào)用時需要進(jìn)行控制參數(shù)的傳遞,這就增加了模塊間的耦合程度。而將未用的部分也調(diào)入內(nèi)存,這就降低了系統(tǒng)的效率。,5.2軟件設(shè)計(jì)原理*,35,(3)時間內(nèi)聚,時間內(nèi)聚又稱為經(jīng)典內(nèi)聚。這種模塊大多為多功能模塊,但模塊的各個功能的執(zhí)行與時間有關(guān),通常要求所有功能必須在同一時間段內(nèi)執(zhí)行。例如初始化模塊和終止模塊。初始化模塊要為所有變量賦初值,對所有介質(zhì)上的文件置初態(tài),初始化寄存器和棧等,因此要求在程序開始執(zhí)行的最初一段時間內(nèi),模塊中所有功能全部執(zhí)行一遍。,5.2軟件設(shè)計(jì)原理*,36,(4)過程內(nèi)聚,如果一個模塊內(nèi)的處理是相關(guān)的,而且必須以特定次序執(zhí)行,則稱這個模塊為過程內(nèi)聚模塊。使用流程圖做為工具設(shè)計(jì)程序的時候,常常通過流程圖來確定模塊劃分。把流程圖中的某一部分劃出組成模塊,就得到過程內(nèi)聚模塊。例如,我們把流程圖中的循環(huán)部分、判定部分、計(jì)算部分分成三個模塊,這三個模塊都是過程內(nèi)聚模塊。,5.2軟件設(shè)計(jì)原理*,37,(5)通信內(nèi)聚,如果一個模塊內(nèi)各功能部分都使用了相同的輸入數(shù)據(jù),或產(chǎn)生了相同的輸出數(shù)據(jù),則稱之為通信內(nèi)聚模塊。通信內(nèi)聚模塊是通過數(shù)據(jù)流圖來定義的。,5.2軟件設(shè)計(jì)原理*,38,(6)信息內(nèi)聚,這種模塊完成多個功能,各個功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項(xiàng)功能有一個唯一的入口點(diǎn)。,5.2軟件設(shè)計(jì)原理*,39,(8)功能內(nèi)聚,一個模塊中各個部分都是完成某一具體功能必不可少的組成部分,或者說該模塊中所有部分都是為了完成一項(xiàng)具體功能而協(xié)同工作,緊密聯(lián)系,不可分割的。則稱該模塊為功能內(nèi)聚模塊。功能內(nèi)聚模塊的優(yōu)點(diǎn)是它們?nèi)菀仔薷暮途S護(hù),因?yàn)樗鼈兊墓δ苁敲鞔_的,模塊間的耦合是簡單的。,5.2軟件設(shè)計(jì)原理*,(7)順序內(nèi)聚如果一個模塊內(nèi)的處理元素和同一個功能密切相關(guān),而且這些處理必須順序執(zhí)行(通常一個處理元素的輸出數(shù)據(jù)作為下一個處理元素的輸入數(shù)據(jù)),40,5.3啟發(fā)式規(guī)則*,啟發(fā)式規(guī)則多數(shù)是經(jīng)驗(yàn)規(guī)律,對改進(jìn)設(shè)計(jì),提高軟件質(zhì)量,往往有重要的參考價值;但是,它們既不是設(shè)計(jì)的目標(biāo)也不是設(shè)計(jì)時普遍遵循的原則。,41,1改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性,設(shè)計(jì)出軟件的初步結(jié)構(gòu)以后,應(yīng)該審查分析這個結(jié)構(gòu),通過模塊分解或合并,力求降低耦合提高內(nèi)聚。例如,多個模塊公有的一個子功能可以獨(dú)立成一個模塊,由這些模塊調(diào)用;有時可以通過分解或合并模塊以減少控制信息的傳遞及對全局?jǐn)?shù)據(jù)的引用,并且降低接口的復(fù)雜程度。,5.3啟發(fā)式規(guī)則*,42,2模塊規(guī)模應(yīng)該適中,經(jīng)驗(yàn)表明,一個模塊的規(guī)模不應(yīng)過大。過大的模塊往往是由于分解不充分,但是分解后不應(yīng)該降低模塊獨(dú)立性。過小的模塊開銷大于有效操作,而且模塊數(shù)目過多將使系統(tǒng)接口復(fù)雜。因此過小的模塊有時不值得單獨(dú)存在,特別是只有一個模塊調(diào)用它時,通??梢园阉喜⒌缴霞壞K中去而不必單獨(dú)存在。,5.3啟發(fā)式規(guī)則*,43,3深度、寬度、扇入和扇出都應(yīng)適當(dāng),深度表示軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略地標(biāo)志一個系統(tǒng)的大小和復(fù)雜程度。如果層數(shù)過多則應(yīng)該考慮是否有許多管理模塊過分簡單了,能否適當(dāng)合并。寬度是軟件結(jié)構(gòu)內(nèi)同一個層次上的模塊總數(shù)的最大值。一般說來,寬度越大系統(tǒng)越復(fù)雜。對寬度影響最大的因素是模塊的扇出。扇出是一個模塊直接控制(調(diào)用)的模塊數(shù)目。扇出過大意味著模塊過分復(fù)雜,需要控制和協(xié)調(diào)過多的下級模塊;扇出過小也不好。一個設(shè)計(jì)得好的典型系統(tǒng)的平均扇出通常是3或4。扇出太大一般是因?yàn)槿狈χ虚g層次,應(yīng)該適當(dāng)增加中間層次的控制模塊。扇出太小時可以把下級模塊進(jìn)一步分解成若干個子功能模塊,或者合并到它的上級模塊中去。,5.3啟發(fā)式規(guī)則*,44,3深度、寬度、扇入和扇出都應(yīng)適當(dāng),一個模塊的扇入表明有多少個上級模塊直接調(diào)用它。扇入越大則共享該模塊的上級模塊數(shù)目越多,這是有好處的。但是,不能違背模塊獨(dú)立原理單純追求高扇入。觀察大量軟件系統(tǒng)后發(fā)現(xiàn),設(shè)計(jì)得很好的軟件結(jié)構(gòu)通常頂層扇出比較高,中層扇出較少,底層扇入到公共的實(shí)用模塊中去(底層模塊有高扇入)。,5.3啟發(fā)式規(guī)則*,45,4模塊的作用域應(yīng)該在控制域之內(nèi),模塊的作用域定義為受該模塊內(nèi)一個判定影響的所有模塊的集合。模塊的控制域是這個模塊本身以及所有直接或間接從屬于它的模塊的集合。,5.3啟發(fā)式規(guī)則*,46,修改軟件結(jié)構(gòu)使作用域是控制域的子集的方法,一個方法是把做判定的點(diǎn)往上移,例如,把判定從模塊A中移到模塊M中。另一個方法是把那些在作用域內(nèi)但不在控制域內(nèi)的模塊移到控制域內(nèi),例如,把模塊G移到模塊A的下面,成為它的直屬下級模塊。,5.3啟發(fā)式規(guī)則*,47,5力爭降低模塊接口的復(fù)雜程度,模塊接口復(fù)雜是軟件發(fā)生錯誤的一個主要原因。應(yīng)該仔細(xì)設(shè)計(jì)模塊接口,使得信息傳遞簡單并且和模塊的功能一致。接口復(fù)雜或不一致(即看起來傳遞的數(shù)據(jù)之間沒有聯(lián)系),是緊耦合或低內(nèi)聚的征兆,應(yīng)該重新分析這個模塊的獨(dú)立性。例如,求一元二次方程的根的模塊QUADROOT(TBL,X),其中用數(shù)組TBL傳送方程的系數(shù),用數(shù)組X回送求得的根。這種傳遞信息的方法不利于對這個模塊的理解,不僅在維護(hù)期間容易引起混淆,在開發(fā)期間也可能發(fā)生錯誤。下面這種接口可能是比較簡單的:QUADROOT(A,B,C,ROOT1,ROOT2)其中A、B、C是方程的系數(shù),ROOT1和ROOT2是算出的兩個根。,5.3啟發(fā)式規(guī)則*,48,6設(shè)計(jì)單入口單出口的模塊,不要出現(xiàn)內(nèi)容耦合。從頂部進(jìn)入模塊,從底部退出模塊。易理解,易維護(hù)。,5.3啟發(fā)式規(guī)則*,49,7模塊功能應(yīng)該可以預(yù)測,如果一個模塊可以當(dāng)做一個黑盒子,也就是說,只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,這個模塊的功能就是可以預(yù)測的。帶有內(nèi)部“存儲器”的模塊的功能可能是不可預(yù)測的,因?yàn)樗妮敵隹赡苋Q于內(nèi)部存儲器(例如某個標(biāo)記)的狀態(tài)。由于內(nèi)部存儲器對于上級模塊而言是不可見的,所以這樣的模塊既不易理解又難于測試和維護(hù)。,5.3啟發(fā)式規(guī)則*,50,5.4圖形工具,介紹在總體設(shè)計(jì)階段可能會使用的幾種圖形工具。,*5.1.5,51,5.4.1層次圖,層次圖用來描繪軟件的層次結(jié)構(gòu)。雖然層次圖的形式和第三章中介紹的描述數(shù)據(jù)結(jié)構(gòu)的層次方框圖相同,但是表現(xiàn)的內(nèi)容卻完全不同。層次圖中的一個方框代表一個模塊,方框間的連線表示調(diào)用關(guān)系。層次圖很適合在自頂向下設(shè)計(jì)軟件的過程中使用。,5.4圖形工具,52,5.4.1HIPO圖,HIPO圖是美國IBM公司發(fā)明的“層次圖加輸入處理輸出圖”的英文縮寫。為了能使HIPO圖具有可追蹤性,在H圖(層次圖)里除了最頂層的方框之外,每個方框都加了編號。,5.4圖形工具,53,5.4.1HIPO圖,和H圖中每個方框相對應(yīng),應(yīng)該有一張IPO圖描繪這個方框代表的模塊的處理過程。(P59)HIPO圖中的每張IPO圖內(nèi)都應(yīng)該明顯地標(biāo)出它所描繪的模塊在H圖中的編號,以便追蹤了解這個模塊在軟件結(jié)構(gòu)中的位置。,5.4圖形工具,5.4.2結(jié)構(gòu)圖,Yourdon提出的結(jié)構(gòu)圖是進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的另一個有力工具。方框代表一個模塊,框內(nèi)注明模塊的名字或主要功能;方框之間的箭頭(或直線)表示模塊的調(diào)用關(guān)系。帶注釋的箭頭表示模塊調(diào)用過程中來回傳遞的信息;尾部是空心圓表示傳遞的是數(shù)據(jù),實(shí)心圓表示傳遞的是控制信息。,5.4圖形工具,55,5.4.2結(jié)構(gòu)圖,層次圖和結(jié)構(gòu)圖并不嚴(yán)格表示模塊的調(diào)用次序。此外,層次圖和結(jié)構(gòu)圖并不指明什么時候調(diào)用下層模塊。事實(shí)上,層次圖和結(jié)構(gòu)圖只表明一個模塊調(diào)用那些模塊,至于模塊內(nèi)還有沒有其它成分則完全沒有表示。一些附加的符號,可以表示模塊的選擇調(diào)用或循環(huán)調(diào)用。,5.4圖形工具,56,通常用層次圖作為描述軟件結(jié)構(gòu)的文檔。結(jié)構(gòu)圖作為文檔并不很合適,因?yàn)閳D上包含的信息太多有時反而降低了清晰程度。但是,利用IPO圖或數(shù)據(jù)字典中的信息得到模塊調(diào)用時的信息,從由層次圖導(dǎo)出結(jié)構(gòu)圖的過程,可以作為檢查設(shè)計(jì)正確性和評價模塊獨(dú)立性的好方法。,5.4圖形工具,57,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,通常所說的結(jié)構(gòu)化設(shè)計(jì)方法(簡稱SD方法),也就是基于數(shù)據(jù)流的設(shè)計(jì)方法。面向數(shù)據(jù)流的設(shè)計(jì)方法的目標(biāo)是給出設(shè)計(jì)軟件結(jié)構(gòu)的一個系統(tǒng)化的途徑。,58,5.5.1概念,面向數(shù)據(jù)流的設(shè)計(jì)方法把信息流映射成軟件結(jié)構(gòu),信息流的類型決定了映射的方法。信息流有下述兩種類型:變換流事務(wù)流,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,59,變換流,信息沿輸入通路進(jìn)入系統(tǒng),同時由外部形式變換成內(nèi)部形式,進(jìn)入系統(tǒng)的信息通過變換中心,經(jīng)加工處理后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。當(dāng)數(shù)據(jù)流圖具有這些特性時,這種信息流就叫做變換流。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,外部表示,內(nèi)部表示,信息,變換流,信息流,時間,60,事務(wù)流,基本系統(tǒng)模型意味著變換流,因此,原則上所有信息流都可以歸結(jié)為變換流。但是,當(dāng)數(shù)據(jù)流圖的數(shù)據(jù)流是“以事務(wù)為中心的”,也就是說,數(shù)據(jù)沿輸入通路到達(dá)一個處理T,這個處理根據(jù)輸入數(shù)據(jù)的類型在若干個動作序列中選出一個來執(zhí)行。這類數(shù)據(jù)流應(yīng)該劃為一類特殊的數(shù)據(jù)流,稱為事務(wù)流。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,圖中的處理T稱為事務(wù)中心,它完成下述任務(wù):接收輸入數(shù)據(jù)(輸入數(shù)據(jù)又稱為事務(wù));分析每個事務(wù)以確定它的類型;根據(jù)事務(wù)類型選取一條活動通路。,61,設(shè)計(jì)過程,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,62,5.5.2變換分析,變換分析是一系列設(shè)計(jì)步驟的總稱,經(jīng)過這些步驟把具有變換流特點(diǎn)的數(shù)據(jù)流圖按預(yù)先確定的模式映射成軟件結(jié)構(gòu)例子通過模-數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳感器和微處理機(jī)接口。在發(fā)光二極管面板上顯示數(shù)據(jù)。指示行駛的速度(每小時英里數(shù)mph),行駛的總里程,每加侖油可以行駛的英里數(shù)(mpg)。指示汽車是在加速還是在減速。超速警告:如果車速超過55英里/小時,則發(fā)出超速警告鈴聲。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,63,設(shè)計(jì)步驟,復(fù)查基本系統(tǒng)模型。確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實(shí)際。復(fù)查并精化數(shù)據(jù)流圖。確保數(shù)據(jù)流圖給出了目標(biāo)系統(tǒng)正確的邏輯模型,而且應(yīng)該使數(shù)據(jù)流圖中每個處理都代表一個規(guī)模適中相對獨(dú)立的子功能。確定數(shù)據(jù)流圖具有變換特性還是事務(wù)特性。從圖中可以看出,數(shù)據(jù)沿兩條輸入通路進(jìn)入系統(tǒng),然后沿五條通路離開。沒有明顯的事務(wù)中心,可以認(rèn)為這個信息流具有變換流的特征。確定輸入流和輸出流邊界,從而孤立出變換中心。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,數(shù)據(jù)流圖,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,具有邊界的數(shù)據(jù)流圖,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,66,設(shè)計(jì)步驟,完成“第一級分解”。軟件結(jié)構(gòu)代表對控制的自頂向下的分配,所謂分解就是分配控制的過程。應(yīng)該在能夠完成控制并且保持好的耦合和內(nèi)聚的前提下,盡量使第一級控制中的模塊數(shù)目最少。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,第一級分解的方法,67,第一級分解的方法,位于軟件結(jié)構(gòu)最頂層的控制模塊Cm協(xié)調(diào)下述從屬的控制功能:輸入信息處理控制模塊Ca,協(xié)調(diào)對所有輸入數(shù)據(jù)的接收;變換中心控制模塊Ct,管理對內(nèi)部形式的數(shù)據(jù)的所有操作;輸出信息處理控制模塊Ce,協(xié)調(diào)輸出信息的產(chǎn)生過程。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,68,第一級分解得出的軟件結(jié)構(gòu),每個控制模塊的名字表明了為它所控制的那些模塊的功能。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,69,設(shè)計(jì)步驟,完成“第二級分解”。所謂第二級分解就是把數(shù)據(jù)流圖中的每個處理映射成軟件結(jié)構(gòu)中一個適當(dāng)?shù)哪K。第二級分解的方法從變換中心的邊界開始沿著輸入通路向外移動,把輸入通路中每個處理映射

溫馨提示

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

最新文檔

評論

0/150

提交評論