《軟件工程》05-結(jié)構(gòu)化總體設(shè)計(jì)_第1頁(yè)
《軟件工程》05-結(jié)構(gòu)化總體設(shè)計(jì)_第2頁(yè)
《軟件工程》05-結(jié)構(gòu)化總體設(shè)計(jì)_第3頁(yè)
《軟件工程》05-結(jié)構(gòu)化總體設(shè)計(jì)_第4頁(yè)
《軟件工程》05-結(jié)構(gòu)化總體設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

軟件工程2025/2/32第5章總體設(shè)計(jì)傳統(tǒng)的軟件工程方法學(xué)采用結(jié)構(gòu)化設(shè)計(jì)(StructuredDesign,SD)技術(shù)完成軟件設(shè)計(jì)工作,設(shè)計(jì)工作通常劃分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩階段。概要設(shè)計(jì)主要任務(wù)是通過仔細(xì)分析軟件規(guī)格說明,適當(dāng)?shù)貙?duì)軟件進(jìn)行功能分解,從而把軟件劃分為模塊,并且設(shè)計(jì)出完成預(yù)定功能的模塊結(jié)構(gòu)。詳細(xì)設(shè)計(jì)階段詳細(xì)地設(shè)計(jì)每個(gè)模塊,確定完成每個(gè)模塊功能所需要的算法和數(shù)據(jù)結(jié)構(gòu)。2025/2/335.1設(shè)計(jì)過程5.2設(shè)計(jì)原理5.3啟發(fā)規(guī)則5.4描繪軟件結(jié)構(gòu)的圖形工具5.5面向數(shù)據(jù)流的設(shè)計(jì)方法5.6小結(jié)軟件設(shè)計(jì)的指導(dǎo)原則2025/2/345.1設(shè)計(jì)過程設(shè)想供選擇的方案選擇合理的方案推薦最佳方案功能分解設(shè)計(jì)軟件結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫(kù)制定測(cè)試計(jì)劃書寫文檔審查和復(fù)審2025/2/355.2設(shè)計(jì)原理模塊化模塊是由邊界元素限定的相鄰的程序元素(例如,數(shù)據(jù)說明,可執(zhí)行的語句)的序列,而且有一個(gè)總體標(biāo)識(shí)符來代表它。像Pascal或Ada這樣的塊結(jié)構(gòu)語言中的Begin…end對(duì),或者C,C++和Java語言中的{…}對(duì),都是邊界元素的例子。過程、函數(shù)、子程序和宏等,都可作為模塊。面向?qū)ο蠓缎椭械膶?duì)象是模塊,對(duì)象內(nèi)的方法也是模塊。模塊是構(gòu)成程序的基本構(gòu)件。2025/2/36模塊化和軟件成本2025/2/37模塊化就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問的模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來構(gòu)成一個(gè)整體,可以完成指定的功能滿足用戶的需求。采用模塊化原理可以使軟件結(jié)構(gòu)清晰,不僅容易設(shè)計(jì)也容易閱讀和理解。因?yàn)槌绦蝈e(cuò)誤通常局限在有關(guān)的模塊及它們之間的接口中,所以模塊化使軟件容易測(cè)試和調(diào)試,因而有助于提高軟件的可靠性。2025/2/38因?yàn)樽儎?dòng)往往只涉及少數(shù)幾個(gè)模塊,所以模塊化能夠提高軟件的可修改性。模塊化也有助于軟件開發(fā)工程的組織管理,一個(gè)復(fù)雜的大型程序可以由許多程序員分工編寫不同的模塊,并且可以進(jìn)一步分配技術(shù)熟練的程序員編寫困難的模塊。2025/2/39抽象人類在認(rèn)識(shí)復(fù)雜現(xiàn)象的過程中使用的最強(qiáng)有力的思維工具是抽象。人們?cè)趯?shí)踐中認(rèn)識(shí)到,在現(xiàn)實(shí)世界中一定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時(shí)忽略它們之間的差異,這就是抽象。或者說抽象就是抽出事物的本質(zhì)特性而暫時(shí)不考慮它們的細(xì)節(jié)。

2025/2/310逐步求精逐步求精是人類解決復(fù)雜問題時(shí)采用的基本技術(shù),也是許多軟件工程技術(shù)的基礎(chǔ)。逐步求精:“為了能集中精力解決主要問題而盡量推遲對(duì)問題細(xì)節(jié)的考慮?!鼻缶珜?shí)際上是細(xì)化過程。從在高抽象級(jí)別定義的功能陳述(或信息描述)開始。該陳述僅僅概念性地描述了功能或信息,但是并沒有提供功能的內(nèi)部工作情況或信息的內(nèi)部結(jié)構(gòu)。求精要求設(shè)計(jì)者細(xì)化原始陳述,隨著每個(gè)后續(xù)求精(細(xì)化)步驟的完成而提供越來越多的細(xì)節(jié)。2025/2/311逐步求精的重要性在于,認(rèn)知符合Miller法則:一個(gè)人在任何時(shí)刻只能把注意力集中在7+-2個(gè)知識(shí)塊上。2025/2/312抽象與求精是一對(duì)互補(bǔ)的概念。抽象使得設(shè)計(jì)者能夠說明過程和數(shù)據(jù),同時(shí)卻忽略低層細(xì)節(jié)??梢园殉橄罂醋魇且环N通過忽略多余的細(xì)節(jié)同時(shí)強(qiáng)調(diào)有關(guān)的細(xì)節(jié),而實(shí)現(xiàn)逐步求精的方法。求精則幫助設(shè)計(jì)者在設(shè)計(jì)過程中揭示出低層細(xì)節(jié)。這兩個(gè)概念都有助于設(shè)計(jì)者在設(shè)計(jì)演化過程中創(chuàng)造出完整的設(shè)計(jì)模型。

2025/2/313信息隱藏和局部化應(yīng)用模塊化原理時(shí),自然會(huì)產(chǎn)生的一個(gè)問題是:“為了得到最好的一組模塊,應(yīng)該怎樣分解軟件”。信息隱藏原理指出:應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個(gè)模塊內(nèi)包含的信息(過程和數(shù)據(jù))對(duì)于不需要這些信息的模塊來說,是不能訪問的。2025/2/314模塊獨(dú)立“模塊獨(dú)立”概念是模塊化、抽象、逐步求精和信息隱藏等概念的直接結(jié)果,也是完成有效的模塊設(shè)計(jì)的基本標(biāo)準(zhǔn)。模塊的獨(dú)立程度可以由兩個(gè)定性標(biāo)準(zhǔn)來度量,這兩個(gè)標(biāo)準(zhǔn)分別稱為內(nèi)聚和耦合。耦合衡量不同模塊彼此間互相依賴(連接)緊密程度;內(nèi)聚衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。2025/2/3154.3.1耦合耦合是對(duì)一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量。耦合強(qiáng)弱取決于模塊間接口的復(fù)雜程度,進(jìn)入或訪問一個(gè)模塊的點(diǎn),以及通過接口的數(shù)據(jù)。在軟件設(shè)計(jì)中應(yīng)該追求盡可能松散耦合的系統(tǒng)。在這樣的系統(tǒng)中可以研究、測(cè)試或維護(hù)任何一個(gè)模塊,而不需要對(duì)系統(tǒng)的其他模塊有很多了解。此外,由于模塊間聯(lián)系簡(jiǎn)單,發(fā)生在一處的錯(cuò)誤傳播到整個(gè)系統(tǒng)的可能性就很小。因此,模塊間的耦合程度強(qiáng)烈影響系統(tǒng)的可理解性、可測(cè)試性、可靠性和可維護(hù)性。

2025/2/316非直接耦合數(shù)據(jù)耦合:簡(jiǎn)單的數(shù)據(jù)參數(shù)。標(biāo)記(特征)耦合:傳遞參數(shù)表記錄信息,如文件、數(shù)組、指針等??刂岂詈希嚎刂谱兞?,有可能是一個(gè)簡(jiǎn)單變量,但可能改變程序流程。將判斷點(diǎn)上移,將控制耦合轉(zhuǎn)變?yōu)閿?shù)據(jù)耦合,導(dǎo)致將下層模塊進(jìn)一步分解,增加了模塊個(gè)數(shù),所以要合理使用控制耦合。外部耦合:一組模塊都訪問同一全局簡(jiǎn)單變量。2025/2/317公共耦合:一組模塊訪問同一個(gè)公共數(shù)據(jù)環(huán)境。公共區(qū)可以降低語句的數(shù)量和內(nèi)存的耗費(fèi),但增加耦合度。內(nèi)容耦合:一組模塊使用另一模塊內(nèi)部數(shù)據(jù);模塊通過非正常渠道進(jìn)入另一模塊執(zhí)行。耦合是影響軟件復(fù)雜程度的一個(gè)重要因素。應(yīng)該采取下述設(shè)計(jì)原則:盡量使用數(shù)據(jù)耦合,少用控制耦合,限制公共環(huán)境耦合的范圍,完全不用內(nèi)容耦合。2025/2/3184.3.2內(nèi)聚內(nèi)聚標(biāo)志一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度,它是信息隱蔽和局部化概念的自然擴(kuò)展。簡(jiǎn)單地說,理想內(nèi)聚的模塊只做一件事情。設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚,通常中等程度的內(nèi)聚也是可以采用的,而且效果和高內(nèi)聚相差不多;但是,低內(nèi)聚很壞,不要使用。2025/2/319功能內(nèi)聚:模塊內(nèi)所有元素屬于一個(gè)整體,完成單一功能。信息內(nèi)聚:模塊完成多個(gè)功能,每個(gè)功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作(按一定的順序),各功能有唯一的出口點(diǎn)和入口點(diǎn)。通信內(nèi)聚:模塊內(nèi)各功能部分使用了相同的輸入數(shù)據(jù),或產(chǎn)生了相同的輸出數(shù)據(jù)。…2025/2/320過程內(nèi)聚:模塊中包含有一組任務(wù),必須按照一定的順序執(zhí)行完成功能。(沒有公共數(shù)據(jù)),通常上一任務(wù)的輸出是下一任務(wù)的輸入。時(shí)間內(nèi)聚:任務(wù)需在同一時(shí)間段完成。(各種初始化)邏輯內(nèi)聚:相關(guān)功能通過邏輯關(guān)系組成在模塊內(nèi)。(應(yīng)合理使用,否則增加模塊數(shù))巧合內(nèi)聚:各部分之間沒有任何聯(lián)系,或有聯(lián)系也很松散。2025/2/321內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。內(nèi)聚和耦合都是進(jìn)行模塊化設(shè)計(jì)的有力工具,但是實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。事實(shí)上,沒有必要精確確定內(nèi)聚的級(jí)別。重要的是設(shè)計(jì)時(shí)力爭(zhēng)做到高內(nèi)聚,并且能夠辨認(rèn)出低內(nèi)聚的模塊,有能力通過修改設(shè)計(jì)提高模塊的內(nèi)聚程度降低模塊間的耦合程度,從而獲得較高的模塊獨(dú)立性。2025/2/3225.3啟發(fā)規(guī)則軟件工程師們?cè)陂_發(fā)計(jì)算機(jī)軟件的長(zhǎng)期實(shí)踐中積累了豐富的經(jīng)驗(yàn),總結(jié)這些經(jīng)驗(yàn)得出了一些啟發(fā)規(guī)則。啟發(fā)規(guī)則雖然不像前兩節(jié)講述的基本原理那樣普遍適用,但能給軟件工程師有益的啟示,往往能幫助找到改進(jìn)軟件設(shè)計(jì)提高軟件質(zhì)量的途徑,因此有助于實(shí)現(xiàn)有效的模塊化。2025/2/323改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性模塊規(guī)模應(yīng)該適中深度、寬度、扇出和扇入都應(yīng)適當(dāng)模塊的作用域應(yīng)該在控制域之內(nèi)力爭(zhēng)降低模塊接口的復(fù)雜程度設(shè)計(jì)單入口單出口的模塊模塊功能應(yīng)該可以預(yù)測(cè)2025/2/324圖4.3模塊的作用域和控制2025/2/3255.4描繪軟件結(jié)構(gòu)的圖形工具層次圖和HIPO圖通常使用層次圖描繪軟件的層次結(jié)構(gòu)。在層次圖中一個(gè)矩形框代表一個(gè)模塊,框間的連線表示調(diào)用關(guān)系(位于上方的矩形框所代表的模塊調(diào)用位于下方的矩形框所代表的模塊)。2025/2/326正文加工系統(tǒng)的層次圖2025/2/327HIPO圖是美國(guó)IBM公司發(fā)明的“層次圖加輸入/處理/輸出圖”的英文縮寫。為了使HIPO圖具有可追蹤性,在H圖(即層次圖)里除了頂層的方框之外,每個(gè)方框都加了編號(hào)。編號(hào)方法數(shù)據(jù)流圖的編號(hào)方法相同。2025/2/328正文加工系統(tǒng)的H圖2025/2/329結(jié)構(gòu)圖Yourdon提出的結(jié)構(gòu)圖是進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的另一個(gè)有力工具。結(jié)構(gòu)圖和層次圖類似,也是描繪軟件結(jié)構(gòu)的圖形工具。結(jié)構(gòu)圖中帶注釋的箭頭表示模塊調(diào)用過程中來回傳遞的信息。尾部是空心圓表示傳遞的是數(shù)據(jù),實(shí)心圓表示傳遞的是控制信息。2025/2/330結(jié)構(gòu)圖的例子—產(chǎn)生最佳解的一般結(jié)構(gòu)2025/2/331判定為真時(shí)調(diào)用A,為假時(shí)調(diào)用B2025/2/332模塊M循環(huán)調(diào)用模塊A,B,C層次圖或結(jié)構(gòu)圖都不嚴(yán)格表示模塊的調(diào)用次序。更多使用結(jié)構(gòu)圖來驗(yàn)證設(shè)計(jì)的正確性和模塊的獨(dú)立性。2025/2/3335.5面向數(shù)據(jù)流的設(shè)計(jì)方法面向數(shù)據(jù)流的設(shè)計(jì)方法的目標(biāo)是給出設(shè)計(jì)軟件結(jié)構(gòu)的一個(gè)系統(tǒng)化的途徑。在需求分析階段,信息流是一個(gè)關(guān)鍵考慮因素,通常用數(shù)據(jù)流圖描繪信息在系統(tǒng)中加工和流動(dòng)情況。利用這些數(shù)據(jù)流圖中的“映射“可以把數(shù)據(jù)流圖變換成軟件結(jié)構(gòu)。任何軟件系統(tǒng)都可以用數(shù)據(jù)流圖表示,所以面向數(shù)據(jù)流的設(shè)計(jì)方法理論上可以設(shè)計(jì)任何軟件的結(jié)構(gòu)。通常的結(jié)構(gòu)化設(shè)計(jì)方法,也就是基于數(shù)據(jù)流的設(shè)計(jì)方法。2025/2/334概念面向數(shù)據(jù)流的設(shè)計(jì)方法把信息流映射成軟件結(jié)構(gòu),信息流的類型決定了映射的方法。信息流有下述兩種類型。變換流事務(wù)流2025/2/335變換流和事務(wù)流2025/2/336面向數(shù)據(jù)流方法的設(shè)計(jì)過程精化數(shù)據(jù)流圖流類型變換事務(wù)區(qū)分輸入和輸出分支區(qū)分事務(wù)中心和數(shù)據(jù)接收通路映射成變換結(jié)構(gòu)映射成事務(wù)結(jié)構(gòu)用啟發(fā)式設(shè)計(jì)規(guī)則精化軟件結(jié)構(gòu)導(dǎo)出接口描述和全程數(shù)據(jù)結(jié)構(gòu)復(fù)查詳細(xì)設(shè)計(jì)事務(wù)分析變換分析2025/2/337變換分析變換分析是一系列設(shè)計(jì)步驟的總稱,經(jīng)過這些步驟把具有變換流特點(diǎn)的數(shù)據(jù)流圖按預(yù)先確定的模式映射成軟件結(jié)構(gòu)。2025/2/338設(shè)計(jì)步驟復(fù)查基本系統(tǒng)模型。復(fù)查并精化數(shù)據(jù)流圖。確定數(shù)據(jù)流圖具有變換特性還是事務(wù)特性。確定輸入流和輸出流的邊界,從而孤立出變換中心。完成“第一級(jí)分解”。完成“第二級(jí)分解”。使用設(shè)計(jì)度量和啟發(fā)規(guī)則對(duì)第一次分割得到的軟件結(jié)構(gòu)進(jìn)一步精化。

2025/2/339數(shù)字儀表板系統(tǒng)的數(shù)據(jù)流圖2025/2/340具有邊界的數(shù)據(jù)流圖2025/2/341第一級(jí)分解的方法2025/2/342數(shù)字儀表板系統(tǒng)的第一級(jí)分解2025/2/343第二級(jí)分解的方法2025/2/344未經(jīng)精化的輸入結(jié)構(gòu)2025/2/345未經(jīng)精化的變換結(jié)構(gòu)2025/2/346未經(jīng)精化的輸出結(jié)構(gòu)2025/2/347精化后的數(shù)字儀表板系統(tǒng)的軟件結(jié)構(gòu)2025/2/348上述七個(gè)設(shè)計(jì)步驟的目的是,開發(fā)出軟件的整體表示。也就是說,一旦確定了軟件結(jié)構(gòu)就可以把它作為一個(gè)整體來復(fù)查,從而能夠評(píng)價(jià)和精化軟件結(jié)構(gòu)。在這個(gè)時(shí)期進(jìn)行修改只需要很少的附加工作,但是卻能夠?qū)浖馁|(zhì)量特別是軟件的可維護(hù)性產(chǎn)生深遠(yuǎn)的影響。

2025/2/349事務(wù)分析雖然在任何情況下都可以使用變換分析方法設(shè)計(jì)軟件結(jié)構(gòu),但是在數(shù)據(jù)流具有明顯的事務(wù)特點(diǎn)時(shí),也就是有一個(gè)明顯的“發(fā)射中心”(事務(wù)中心)時(shí),還是以采用事務(wù)分析方法為宜。事務(wù)分析的設(shè)計(jì)步驟和變換分析的設(shè)計(jì)步驟大部分相同或類似,主要差別僅在于由數(shù)據(jù)流圖到軟件結(jié)構(gòu)的映射方法不同。對(duì)于一個(gè)大系統(tǒng),常常把變換分析和事務(wù)分析應(yīng)用到同一個(gè)數(shù)據(jù)流圖的不同部分,由此得到的子結(jié)構(gòu)形成“構(gòu)件”,可以利用它們構(gòu)造完整的軟件結(jié)構(gòu)。

2025/2/350事務(wù)分析的映射方法2025/2/351設(shè)計(jì)優(yōu)化(refactoring)考慮設(shè)計(jì)優(yōu)化問題時(shí)應(yīng)該記住,“一個(gè)不能工作的‘最佳設(shè)計(jì)’的價(jià)值是值得懷疑的”。軟件設(shè)計(jì)人員應(yīng)該致力于開發(fā)能夠滿足所有功能和性能要求,而且按照設(shè)計(jì)原理和啟發(fā)式設(shè)計(jì)規(guī)則衡量是值得接受的軟件。應(yīng)該在設(shè)計(jì)的早期階段盡量對(duì)軟件結(jié)構(gòu)進(jìn)行精化??梢詫?dǎo)出不同的軟件結(jié)構(gòu),然后對(duì)它們進(jìn)行評(píng)價(jià)和比較,力求得到“最好”的結(jié)果。這種優(yōu)化的可能,是把軟件結(jié)構(gòu)設(shè)計(jì)和過程設(shè)計(jì)分開的真正優(yōu)點(diǎn)之一。2025/2/3525.6小結(jié)軟件工程方法學(xué)采用結(jié)構(gòu)化設(shè)計(jì)技術(shù)完成設(shè)計(jì)工作。軟件設(shè)計(jì)在軟件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論