版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.,第2章 軟件設(shè)計(jì)基本概念,2.1 設(shè)計(jì)過程 2.2 設(shè)計(jì)原理 2.3 啟發(fā)規(guī)則,.,軟件設(shè)計(jì)宣言:Mitch Kapor “什么是設(shè)計(jì)?設(shè)計(jì)是你站在兩個世界技術(shù)世界和人類的目標(biāo)世界而你嘗試將這兩個世界結(jié)合在一起”。 羅馬建筑批評家Vitruvius提出的觀念: “設(shè)計(jì)良好的建筑應(yīng)該展示出堅(jiān)固、適用和令人賞心悅目”。,.,設(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ì)和過程設(shè)計(jì)4部分。 面向?qū)ο蠓椒▌t將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、類設(shè)計(jì)/數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和構(gòu)件級設(shè)計(jì)4部分。,.,.
2、,結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化分析的關(guān)系:,.,總體設(shè)計(jì)過程:首先尋找實(shí)現(xiàn)目標(biāo)系統(tǒng)的各種不同的方案;然后分析員從這些供選擇的方案中選取若干個合理的方案,從中選出一個最佳方案向用戶和使用部門負(fù)責(zé)人推薦;分析員應(yīng)該進(jìn)一步為這個最佳方案設(shè)計(jì)軟件結(jié)構(gòu),進(jìn)行必要的數(shù)據(jù)庫設(shè)計(jì),確定測試要求并且制定測試計(jì)劃。 必要性:總體設(shè)計(jì)可以站在全局高度上,花較少成本,從較抽象的層次上分析對比多種可能的系統(tǒng)實(shí)現(xiàn)方案和軟件結(jié)構(gòu),從中選出最佳方案和最合理的軟件結(jié)構(gòu),從而用較低成本開發(fā)出較高質(zhì)量的軟件系統(tǒng)。,.,5.1 設(shè)計(jì)過程,由兩個主要階段組成: 系統(tǒng)設(shè)計(jì)階段,確定系統(tǒng)的具體實(shí)現(xiàn)方案 設(shè)想供選擇的方案 選取合理的方案 推薦最佳方案
3、 結(jié)構(gòu)設(shè)計(jì)階段,確定軟件結(jié)構(gòu) 功能分解 設(shè)計(jì)軟件結(jié)構(gòu) 設(shè)計(jì)數(shù)據(jù)庫,制定測試計(jì)劃 書寫文檔 審查和復(fù)審,.,典型的總體設(shè)計(jì)過程包括下述9個步驟: 1. 設(shè)想供選擇的方案 根據(jù)需求分析階段得出的數(shù)據(jù)流圖考慮各種可能的實(shí)現(xiàn)方案,力求從中選出最佳方案。 2. 選取合理的方案 從前一步得到的一系列供選擇的方案中選取若干個合理的方案。對每個合理的方案分析員都應(yīng)該準(zhǔn)備下列4份資料: 系統(tǒng)流程圖; 組成系統(tǒng)的物理元素清單; 成本/效益分析; 實(shí)現(xiàn)這個系統(tǒng)的進(jìn)度計(jì)劃。,.,3. 推薦最佳方案 分析員應(yīng)該綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為推薦的方案制定詳細(xì)的實(shí)現(xiàn)計(jì)劃。 4. 功能分解 首先
4、進(jìn)行結(jié)構(gòu)設(shè)計(jì),然后進(jìn)行過程設(shè)計(jì)。 結(jié)構(gòu)設(shè)計(jì)確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系;過程設(shè)計(jì)確定每個模塊的處理過程。 結(jié)構(gòu)設(shè)計(jì)是總體設(shè)計(jì)階段的任務(wù),過程設(shè)計(jì)是詳細(xì)設(shè)計(jì)階段的任務(wù)。,.,5. 設(shè)計(jì)軟件結(jié)構(gòu) 通常程序中的一個模塊完成一個適當(dāng)?shù)淖庸δ?。?yīng)該把模塊組織成良好的層次系統(tǒng)。軟件結(jié)構(gòu)可以用層次圖或結(jié)構(gòu)圖來描繪。 如果數(shù)據(jù)流圖已經(jīng)細(xì)化到適當(dāng)?shù)膶哟危瑒t可以直接從數(shù)據(jù)流圖映射出軟件結(jié)構(gòu),這就是面向數(shù)據(jù)流的設(shè)計(jì)方法。 6. 設(shè)計(jì)數(shù)據(jù)庫 對于需要使用數(shù)據(jù)庫的那些應(yīng)用系統(tǒng),軟件工程師應(yīng)該在需求分析階段所確定的系統(tǒng)數(shù)據(jù)需求的基礎(chǔ)上,進(jìn)一步設(shè)計(jì)數(shù)據(jù)庫。,.,7. 制定測試計(jì)劃 在軟件開發(fā)的早期階段考慮
5、測試問題,能促使軟件設(shè)計(jì)人員在設(shè)計(jì)時注意提高軟件的可測試性。 8. 書寫文檔 應(yīng)該用正式的文檔記錄總體設(shè)計(jì)的結(jié)果,在這個階段應(yīng)該完成的文檔通常有下述幾種: (1) 系統(tǒng)說明; (2) 用戶手冊;(3) 測試計(jì)劃; (4) 詳細(xì)的實(shí)現(xiàn)計(jì)劃;(5) 數(shù)據(jù)庫設(shè)計(jì)結(jié)果。 9. 審查和復(fù)審 最后應(yīng)該對總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查和管理復(fù)審。,.,5.2 設(shè)計(jì)原理 5.2.1 模塊化,模塊:是由邊界元素限定的相鄰程序元素的序列,而且有一個總體標(biāo)識符代表它。 模塊化:就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構(gòu)成一個整體,可以完成指定的功能滿足用戶的需求。,.
6、,為什么要模塊化? 模塊化是為了使一個復(fù)雜的大型程序能被人的智力所管理,軟件應(yīng)該具備的惟一屬性。 如果一個大型程序僅由一個模塊組成,它將很難被人所理解。,.,模塊化的根據(jù): 如果C(P1)C(P2),顯然E(P1)E(P2) 根據(jù)人類解決一般問題的經(jīng)驗(yàn), C(P1+P2)C(P1)+C(P2) 綜上所述,得到下面的不等式 E(P1+P2)E(P1)+E(P2),.,每個程序都相應(yīng)地有一個最適當(dāng)?shù)哪K數(shù)目M,使得系統(tǒng)的開發(fā)成本最小。,模塊化和軟件成本,.,模塊化的作用: 采用模塊化原理可以使軟件結(jié)構(gòu)清晰,不僅容易設(shè)計(jì)也容易閱讀和理解。 模塊化使軟件容易測試和調(diào)試,因而有助于提高軟件的可靠性。 模
7、塊化能夠提高軟件的可修改性。 模塊化也有助于軟件開發(fā)工程的組織管理。,.,5.2.2 抽象,抽象:現(xiàn)實(shí)世界中一定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。 抽象就是抽出事物本質(zhì)特性而暫時不考慮細(xì)節(jié)。 “抽象是人類處理復(fù)雜問題的基本方法之一。” Grady Boach,.,一般抽象過程: 處理復(fù)雜系統(tǒng)的惟一有效的方法是用層次的方式構(gòu)造和分析它。 一個復(fù)雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構(gòu)造和理解,這些高級概念又可以用一些較低級的概念構(gòu)造和理解,如此進(jìn)行下去,直至最低層次的具體元素。 例:過程抽象、數(shù)據(jù)抽象,開(行
8、為抽象)+ 門(數(shù)據(jù)抽象),.,19,形體,衣著,性格,抽象,抽象例子,外表,.,軟件工程抽象過程: 軟件工程過程的每一步都是對軟件解法的抽象層次的一次精化。 在可行性研究階段,軟件作為系統(tǒng)的一個完整部件; 在需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述的; 當(dāng)由總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過渡時,抽象的程度也就隨之減少了; 最后,當(dāng)源程序?qū)懗鰜硪院螅簿瓦_(dá)到了抽象的最低層。,.,5.2.3 逐步求精,逐步求精:為了能集中精力解決主要問題而盡量推遲對問題細(xì)節(jié)的考慮。逐步求精是人類解決復(fù)雜問題時采用的基本方法,也是許多軟件工程技術(shù)的基礎(chǔ)。 Miller法則:一個人在任何時候都只能把注意力集中在(
9、72)個知識塊上。,.,22,逐步求精,外表,形體,衣著,性格,頭發(fā),臉形,領(lǐng)帶,抽象,逐步求精的例子,.,例:用篩選法求100以內(nèi)的素?cái)?shù)。所謂的篩選法,就是從2到100中去掉2,3,5,7的倍數(shù),剩下的就是100以內(nèi)的素?cái)?shù)。 首先按程序功能寫出一個框架 main() 建立2到100的數(shù)組A ,其中Aii;.1 建立2到10的素?cái)?shù)表B ,存放2到10以內(nèi)的素?cái)?shù);.2 若Aii是B 中任一數(shù)的倍數(shù),則剔除Ai;.3 輸出A 中所有沒有被剔除的數(shù);.4 ,.,上述框架中每一個加工語句都可進(jìn)一步細(xì)化 main() /*建立2到100的數(shù)組A ,其中Aii*/ .1 for (i = 2;i = 10
10、0;i+)Ai = i; /* 建立2到10的素?cái)?shù)表B ,存放2到10以內(nèi)的素?cái)?shù)*/ .2 B1 =2; B2 = 3; B3 = 5; B4 = 7; /*若Aii是B 中任一數(shù)的倍數(shù),則剔除Ai*/ .3 for (j = 1; j = 4; j+) 檢查A所有數(shù)能否被Bj整除并將其從A剔除;.3.1 /*輸出A 中所有沒有被剔除的數(shù)*/ .4 for (i = 2; i 25) module_3(); else module_4(); ,.,評價(jià): 與結(jié)構(gòu)化編程矛盾,生成的代碼完全不可讀。 如果在一個模塊中對一個全局變量的聲明進(jìn)行修改,必須修改能夠訪問該全局變量的每一個模塊。 公共環(huán)境耦
11、合的模塊難于重用,必須提供一個全局變量的清單。 即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共環(huán)境耦合的實(shí)例數(shù)也會變化非常大。 潛在危險(xiǎn)很大。模塊暴露出必需要更多的數(shù)據(jù),難以控制數(shù)據(jù)存取,而且會導(dǎo)致計(jì)算機(jī)犯罪。 有些情況下公共環(huán)境耦合更好。,.,函數(shù)可重入的概念,可重入函數(shù)也可以這樣理解,重入即表示重復(fù)進(jìn)入,首先它意味著這個函數(shù)可以被中斷,其次意味著它除了使用自己棧上的變量以外不依賴于任何環(huán)境(包括static),這樣的函數(shù)就是purecode(純代碼)可重入,可以允許有該函數(shù)的多個副本在運(yùn)行,由于它們使用的是分離的棧,所以不會互相干擾。如果確實(shí)需要訪問全局變量(包括static),一定要注意
12、實(shí)施互斥手段??芍厝牒瘮?shù)在并行運(yùn)行環(huán)境中非常重要,但是一般要為訪問全局變量付出一些性能代價(jià),.,(6) 內(nèi)容耦合(content coupling) 最高程度的耦合是內(nèi)容耦合。如果出現(xiàn)下列情況之一,兩個模塊間就發(fā)生了內(nèi)容耦合: 一個模塊訪問另一個模塊的內(nèi)部數(shù)據(jù); 一個模塊不通過正常入口轉(zhuǎn)到另一個模塊的內(nèi)部; 兩個模塊有一部分程序代碼重疊; 一個模塊有多個入口。,.,耦合是影響軟件復(fù)雜程度的一個重要因素。 應(yīng)該采取下述設(shè)計(jì)原則: 盡量使用數(shù)據(jù)耦合, 少用控制耦合和特征耦合, 限制公共環(huán)境耦合的范圍, 完全不用內(nèi)容耦合。,.,2. 內(nèi)聚 內(nèi)聚:標(biāo)志一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度,它是信息隱藏
13、和局部化概念的自然擴(kuò)展。簡單地說,理想內(nèi)聚的模塊只做一件事情。 要求:設(shè)計(jì)時應(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)聚程度的度量: (1) 偶然內(nèi)聚(coincidental cohesion) 如果一個模塊完成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫做偶然內(nèi)聚。,.,評價(jià): 模塊內(nèi)各元素之間沒有實(shí)質(zhì)性聯(lián)系,很可能在一種應(yīng)用場合需要修改這個模塊,在另一種應(yīng)用場合又不允許這種修改,
14、從而陷入困境; 可理解性差,可維護(hù)性產(chǎn)生退化; 模塊是不可重用的。 解決方案: 將模塊分成更小的模塊,每個小模塊執(zhí)行一個操作。,.,(2) 邏輯內(nèi)聚(logical cohesion) 如果一個模塊完成的任務(wù)在邏輯上屬于相同或相似的一類,則稱為邏輯內(nèi)聚。,.,評價(jià): 接口難以理解,造成整體上不易理解; 完成多個操作的代碼互相糾纏在一起,即使局部功能的修改有時也會影響全局,導(dǎo)致嚴(yán)重的維護(hù)問題; 難以重用。 解決方案: 模塊分解。,.,.,(3) 時間內(nèi)聚(temporal cohesion) 如果一個模塊包含的任務(wù)必須在同一段時間內(nèi)執(zhí)行,就叫時間內(nèi)聚。,.,評價(jià): 時間關(guān)系在一定程度上反映了程序
15、某些實(shí)質(zhì),所以時間內(nèi)聚比邏輯內(nèi)聚好一些。 模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操作卻有很強(qiáng)的關(guān)聯(lián)。 時間內(nèi)聚的模塊不太可能重用。,.,(4) 過程內(nèi)聚(procedural cohesion) 如果一個模塊內(nèi)的處理元素是相關(guān)的,而且必須以特定次序執(zhí)行,則稱為過程內(nèi)聚。 使用程序流程圖作為工具設(shè)計(jì)軟件時,常常通過研究流程圖確定模塊的劃分,這樣得到的往往是過程內(nèi)聚的模塊。,.,.,評價(jià): 比時間內(nèi)聚好,至少操作之間是過程關(guān)聯(lián)的。 仍是弱連接,不太可能重用模塊。 解決方案: 分割為單獨(dú)的模塊,每個模塊執(zhí)行一個操作。,.,(5) 通信內(nèi)聚(communicational cohesion) 如果模塊
16、中所有元素都使用同一個輸入數(shù)據(jù)和(或)產(chǎn)生同一個輸出數(shù)據(jù),則稱為通信內(nèi)聚。即在同一個數(shù)據(jù)結(jié)構(gòu)上操作。 評價(jià): 模塊中各操作緊密相連,比過程內(nèi)聚更好。 不能重用。 解決方案: 分成多個模塊,每個模塊執(zhí)行一個操作。,.,.,(6) 順序內(nèi)聚(sequential cohesion) 如果一個模塊內(nèi)的處理元素和同一個功能密切相關(guān),而且這些處理必須順序執(zhí)行,則稱為順序內(nèi)聚。 評價(jià): 根據(jù)數(shù)據(jù)流圖劃分模塊時,通常得到順序內(nèi)聚的模塊,這種模塊彼此間的連接往往比較簡單。,.,(7) 功能內(nèi)聚(functional cohesion) 如果模塊內(nèi)所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。功
17、能內(nèi)聚是最高程度的內(nèi)聚。 評價(jià): 模塊可重用,應(yīng)盡可能重用; 可隔離錯誤,維護(hù)更容易; 擴(kuò)充產(chǎn)品功能時更容易。,.,七種內(nèi)聚的優(yōu)劣評分結(jié)果: 高內(nèi)聚:功能內(nèi)聚 10分 順序內(nèi)聚 9分 中內(nèi)聚:通信內(nèi)聚 7分 過程內(nèi)聚 5分 低內(nèi)聚:時間內(nèi)聚 3分 邏輯內(nèi)聚 1分 偶然內(nèi)聚 0分 設(shè)計(jì)時力爭做到高內(nèi)聚,并且能夠辨認(rèn)出低內(nèi)聚的模塊。,.,5.3 啟發(fā)規(guī)則,1. 改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性 通過模塊分解或合并,降低耦合提高內(nèi)聚。 兩個方面: 模塊功能完善化。一個完整的模塊包含: 執(zhí)行規(guī)定的功能的部分 出錯處理的部分 返回一個“結(jié)束標(biāo)志” 消除重復(fù)功能,改善軟件結(jié)構(gòu)。 完全相似 局部相似,.,.,2.
18、 模塊規(guī)模應(yīng)該適中 經(jīng)驗(yàn)表明,一個模塊的規(guī)模不應(yīng)過大,最好能寫在一頁紙內(nèi)。通常規(guī)定50100行語句,最多不超過500行。數(shù)字只能作為參考,根本問題是要保證模塊的獨(dú)立性。 過大的模塊往往是由于分解不充分,但是進(jìn)一步分解必須符合問題結(jié)構(gòu),一般說來,分解后不應(yīng)該降低模塊獨(dú)立性。 過小的模塊開銷大于有效操作,而且模塊數(shù)目過多將使系統(tǒng)接口復(fù)雜。,.,3. 深度、寬度、扇出和扇入都應(yīng)適當(dāng) 深度:軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略地標(biāo)志一個系統(tǒng)的大小和復(fù)雜程度。 寬度:軟件結(jié)構(gòu)內(nèi)同一個層次上的模塊總數(shù)的最大值。 扇出:一個模塊直接控制(調(diào)用)的模塊數(shù)目。 扇入:有多少個上級模塊直接調(diào)用它。,.,.,.,4. 模塊的作用域應(yīng)該在控制域之內(nèi) 模塊的作用域:定義為受該模塊內(nèi)一個判定影響的所有模塊的集合。 模塊的控制域:是這個模塊本身以及所有直接或間接從屬于它的模塊的集合。 在一個設(shè)計(jì)得很好的系統(tǒng)中,所有受判定影響的模塊應(yīng)該都從屬于做出判定的那個模塊,最好局限于做出判定的那個模塊本身及它的直屬下級模塊。,.,.,解決方案: 把模塊A中的判定移到模塊M中; 把模塊G移到模塊A下面,作為他的下級模塊。,.,5. 力爭降低模塊接口的復(fù)雜程度 模塊接口復(fù)雜是軟件發(fā)生錯誤的一個
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 簽證索賠培訓(xùn)
- 景區(qū)職業(yè)發(fā)展計(jì)劃
- 營養(yǎng)師考研就業(yè)指南
- 稀缺人才職業(yè)指南
- 比較驚人的醫(yī)患關(guān)系案例
- 股權(quán)投資產(chǎn)品培訓(xùn)課件
- 電商客服人員培訓(xùn)
- 《環(huán)境衛(wèi)生學(xué)》課件-人類的環(huán)境
- 《化工單元操作技術(shù)》課件-吸收劑用量的確定
- 基層安全工作實(shí)踐手冊講解
- 政治審查表(模板)
- 《最奇妙的蛋》完整版
- 三年級科學(xué)上冊蘇教版教學(xué)工作總結(jié)共3篇(蘇教版三年級科學(xué)上冊知識點(diǎn)整理)
- 種子室內(nèi)檢驗(yàn)技術(shù)-種子純度鑒定(種子質(zhì)量檢測技術(shù)課件)
- SEMI S1-1107原版完整文檔
- 心電監(jiān)測技術(shù)操作考核評分標(biāo)準(zhǔn)
- 2023年中級財(cái)務(wù)會計(jì)各章作業(yè)練習(xí)題
- 金屬罐三片罐成型方法與罐型
- 大疆植保無人機(jī)考試試題及答案
- 《LED顯示屏基礎(chǔ)知識培訓(xùn)》
- 高校宿舍樓建筑結(jié)構(gòu)畢業(yè)設(shè)計(jì)論文原創(chuàng)
評論
0/150
提交評論