第5章_總體設計_第1頁
第5章_總體設計_第2頁
第5章_總體設計_第3頁
第5章_總體設計_第4頁
第5章_總體設計_第5頁
已閱讀5頁,還剩222頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1開發(fā)開發(fā)時期時期維護維護時期時期定義定義時期時期(目標與范圍說明書目標與范圍說明書)(可行性研究報告可行性研究報告)(維護報告維護報告)(測試報告測試報告)(程序程序)(總體設計文檔總體設計文檔)(需求規(guī)格說明書需求規(guī)格說明書)圖1.3 瀑布模型(詳細設計文檔詳細設計文檔)2第第5章章 總體設計總體設計5.1 設計過程設計過程5.2 設計原理設計原理5.3 啟發(fā)規(guī)則啟發(fā)規(guī)則5.4 描繪軟件結構的圖形工具描繪軟件結構的圖形工具5.5 面向數(shù)據(jù)流的設計方法面向數(shù)據(jù)流的設計方法5.6 小結小結習題習題3軟件設計過程軟件設計過程 開發(fā)階段的信息流開發(fā)階段的信息流程序程序模塊模塊總體結構設計總體結構設

2、計設計設計編碼編碼數(shù)據(jù)描述數(shù)據(jù)描述功能描述功能描述行為描述行為描述其他需求其他需求過程設計過程設計數(shù)據(jù)設計數(shù)據(jù)設計集成并確認集成并確認的軟件的軟件測試測試4將將分析模型分析模型轉換為轉換為軟件設計軟件設計數(shù)據(jù)數(shù)據(jù)字典字典數(shù)據(jù)數(shù)據(jù)流圖流圖E-RE-R圖圖狀態(tài)變遷圖狀態(tài)變遷圖加加工工規(guī)規(guī)約約控制規(guī)約控制規(guī)約數(shù)數(shù)據(jù)據(jù)對對描描 述述象象數(shù)數(shù) 據(jù)據(jù) 設設 計計總體結構設計總體結構設計接口設計接口設計過程設計過程設計分析模型分析模型設計模型設計模型5從工程管理的角度來看,從工程管理的角度來看,軟件設計軟件設計分兩步完成;分兩步完成; 總體設計總體設計(概要設計或初步設計概要設計或初步設計)和和 詳細設計詳

3、細設計(過程設計過程設計)兩個階段。兩個階段。 首先做首先做總體設計總體設計, 將將軟件需求軟件需求轉化為轉化為軟件的結構軟件的結構 以及各組成成分以及各組成成分(子系統(tǒng)或模塊子系統(tǒng)或模塊)之間的之間的相互關系相互關系。 然后是然后是詳細設計詳細設計, 通過對通過對軟件結構軟件結構進行細化,進行細化, 得到每個模塊詳細的得到每個模塊詳細的數(shù)據(jù)結構數(shù)據(jù)結構和和算法算法。6模塊描述模塊描述總體總體設計設計需求需求 說明書說明書復審復審軟件結構軟件結構修修 改改詳細詳細設計設計可接受可接受復審復審修修 改改 設計設計說明書說明書軟件設計工作流程軟件設計工作流程需求分析需求分析總體設計總體設計詳細設計

4、詳細設計編碼編碼7需求分析需求分析階段的任務:回答階段的任務:回答“系統(tǒng)系統(tǒng)做什么做什么?”, 功能分析功能分析總體設計總體設計階段的任務:回答階段的任務:回答“怎樣做怎樣做?”, 設計設計總體設計總體設計的基本的基本目的目的就是回答就是回答“概括地說,概括地說, 系統(tǒng)應該如何實現(xiàn)系統(tǒng)應該如何實現(xiàn)?”這個問題。這個問題。8 總體設計總體設計過程通常由過程通常由兩個主要階段組成兩個主要階段組成:1)系統(tǒng)設計)系統(tǒng)設計:確定系統(tǒng)的:確定系統(tǒng)的具體實現(xiàn)方案。具體實現(xiàn)方案。 設想方案,選取合理方案,推薦最佳方案。設想方案,選取合理方案,推薦最佳方案。國家體育場(鳥巢)的設計方案國家體育場(鳥巢)的設計

5、方案2)結構設計)結構設計:確定:確定軟件結構軟件結構。 確定每個確定每個程序程序是由是由哪些模塊組成哪些模塊組成的,的, 以及這些以及這些模塊之間的關系模塊之間的關系。5.1 設計過程設計過程9國家體育場國家體育場(鳥巢,(鳥巢,2008年北京奧運會主體育場)設計方案:年北京奧運會主體育場)設計方案:1)共收到)共收到44家家設計單位設計單位(獨立或聯(lián)合體獨立或聯(lián)合體)提供的有效資格預審。提供的有效資格預審。2)最終評選出)最終評選出14家參加正式方案競賽。家參加正式方案競賽。 截至截至2003年年3月月18日,主辦單位共收到日,主辦單位共收到13個方案個方案。3)在方案評審技術小組初審后,

6、)在方案評審技術小組初審后,3月月23日日-25日,日,由由13名中外著名建筑設計大師等組成的評委對方案進行評審,名中外著名建筑設計大師等組成的評委對方案進行評審,評選出評選出3個優(yōu)秀方案個優(yōu)秀方案,(,(B11、B12、B08) 4)最終方案將由評委重點推薦的)最終方案將由評委重點推薦的一個優(yōu)秀方案一個優(yōu)秀方案優(yōu)化而成。優(yōu)化而成。 (B11) 10B0111B0212B0313B0614B1015B1316B0817B1218B1119國家體育場國家體育場(鳥巢)(鳥巢)基本情況一覽表基本情況一覽表建設地點建設地點:奧林匹克公園:奧林匹克公園 場地類型:場地類型:新建比賽場館新建比賽場館 建

7、筑面積:建筑面積:25.8萬平方米萬平方米 座位數(shù)量:座位數(shù)量:固定座位數(shù)固定座位數(shù)80000個個,臨時座位數(shù)臨時座位數(shù)11000個個 奧運會期間功能:奧運會期間功能:開閉幕式、田徑、男子足球開閉幕式、田徑、男子足球 殘奧會期間用途殘奧會期間用途:開閉幕式、田徑:開閉幕式、田徑 賽后功能:賽后功能:將用于國際國內體育比賽和文化、娛樂活動將用于國際國內體育比賽和文化、娛樂活動 。 鳥巢設計者鳥巢設計者:瑞士赫爾佐格和德梅隆設計公司與瑞士赫爾佐格和德梅隆設計公司與 中國建筑設計研究院組成的聯(lián)合體設計中國建筑設計研究院組成的聯(lián)合體設計 最終預算:最終預算:22.67億元億元最初預算最初預算:38.9

8、億元億元20奧林匹克公園鳥瞰圖奧林匹克公園鳥瞰圖 21奧林匹克公園鳥瞰圖奧林匹克公園鳥瞰圖 2223242526鳥巢內部跑道鳥巢內部跑道 271)系統(tǒng)設計)系統(tǒng)設計:確定系統(tǒng)的:確定系統(tǒng)的具體實現(xiàn)方案具體實現(xiàn)方案;設想方案設想方案(13),選取合理方案,選取合理方案(3),推薦最佳方案,推薦最佳方案(1)2)結構設計)結構設計:確定:確定軟件結構軟件結構。 確定每個確定每個程序程序是由是由哪些模塊組成哪些模塊組成的,的, 以及這些以及這些模塊之間的關系模塊之間的關系。 28 典型的典型的總體設計過程總體設計過程包括下述包括下述9個步驟個步驟1設想設想供選擇的供選擇的方案方案2選取選取合理的合理

9、的方案方案 3推薦推薦最佳最佳方案方案 4功能分解功能分解 5 5設計軟件結構設計軟件結構6數(shù)據(jù)庫設計數(shù)據(jù)庫設計7制定測試計劃制定測試計劃 8書寫文檔書寫文檔 9審查和復審審查和復審 291. 設想供選擇的方案設想供選擇的方案 分析員應該考慮分析員應該考慮各種可能各種可能的的實現(xiàn)方案實現(xiàn)方案,并且力求從中選出最佳方案。并且力求從中選出最佳方案。在總體設計階段開始時在總體設計階段開始時只有系統(tǒng)的只有系統(tǒng)的邏輯模型邏輯模型,分析員有充分的自由分析員有充分的自由分析比較不同的分析比較不同的物理實現(xiàn)方案物理實現(xiàn)方案,一旦選出了最佳的方案,一旦選出了最佳的方案,將能大大提高系統(tǒng)的性能將能大大提高系統(tǒng)的性

10、能/ /價格比價格比。 需求分析階段得出的需求分析階段得出的數(shù)據(jù)流圖數(shù)據(jù)流圖是是總體設計總體設計的出發(fā)點。的出發(fā)點。30常用的方法是:常用的方法是:設想設想數(shù)據(jù)流圖數(shù)據(jù)流圖中,中,處理處理分組分組的各種可能的方法(如,用的各種可能的方法(如,用自動化邊界自動化邊界)以圖中不同處理的以圖中不同處理的定時定時(聯(lián)機或批量處理方式聯(lián)機或批量處理方式)要求為指南要求為指南,畫出畫出許多組自動化邊界許多組自動化邊界,每一組自動化邊界每一組自動化邊界意味者一個的意味者一個的物理系統(tǒng)物理系統(tǒng)。P36先拋棄在技術上行不通的分組方法,采用可行的方法。先拋棄在技術上行不通的分組方法,采用可行的方法。先拋棄先拋棄方

11、案方案1,再拋棄,再拋棄方案方案2,最后選擇最后選擇方案方案331定時定時:聯(lián)機方式聯(lián)機方式:有的處理需要:有的處理需要隨時隨時處理或處理或立即立即處理,處理, 如:接收事務(如:接收事務(隨時隨時)。)。批量方式批量方式:有的處理需要等待一定時間有的處理需要等待一定時間, 一次性一次性處理。處理。 日、月、年報表日、月、年報表 如:產生定貨報表(如:產生定貨報表(1天天1次次)。)。分析分析:在:在定貨管理定貨管理系統(tǒng)中哪些處理應該是系統(tǒng)中哪些處理應該是聯(lián)機方式處理聯(lián)機方式處理, 那些處理應該是那些處理應該是批量方式處理。批量方式處理。 有三個方案。有三個方案。32D3 事務方案方案1定貨定

12、貨聯(lián)機方式聯(lián)機方式批量方式批量方式33方案方案1: 聯(lián)機方式聯(lián)機方式:自動化邊界:自動化邊界-1:接收事務:接收事務 批量方式批量方式:自動化邊界:自動化邊界-2:更新清單、:更新清單、 處理定貨、產生報表處理定貨、產生報表問題:問題: 以以批量方式批量方式進行進行“更新庫存清單更新庫存清單”, 不能不能隨時了解庫存實際情況隨時了解庫存實際情況, 有時甚至出現(xiàn),沒有零件也想出庫的情況。有時甚至出現(xiàn),沒有零件也想出庫的情況。 在零件進在零件進/出庫時應該出庫時應該及時更新庫存清單及時更新庫存清單才對。才對。 出現(xiàn)了出現(xiàn)了多余的數(shù)據(jù)存儲多余的數(shù)據(jù)存儲,D334方案方案2定貨定貨聯(lián)機方式聯(lián)機方式批量

13、方式批量方式35方案方案2:聯(lián)機方式聯(lián)機方式:自動化邊界:自動化邊界-1:接收事務,更新清單,:接收事務,更新清單, 處理定貨處理定貨批量方式批量方式:自動化邊界:自動化邊界-2:產生報表:產生報表優(yōu)點優(yōu)點: 可以隨時更新庫存清單,及時了解庫存實際情況。可以隨時更新庫存清單,及時了解庫存實際情況。 沒有多余的數(shù)據(jù)存儲,沒有多余的數(shù)據(jù)存儲,D3缺點缺點:因為:因為每一次出庫每一次出庫時隨時比較,時隨時比較,庫存量庫存量C(P2) 則有則有: E(P1)E(P2) 即:即:問題越問題越復雜復雜,所需要的,所需要的工作量工作量就越多就越多 53規(guī)律二規(guī)律二:如果問題如果問題P可以分解成兩個問題可以分

14、解成兩個問題 P1和和 P2, 即,即, P=P1+P2 則則 ,C(P)C(P1)+C(P2)即:即:把一個把一個復雜的問題復雜的問題分解成分解成幾個小問題,幾個小問題,復雜度復雜度就降低就降低因而,可以獲得下列不等式因而,可以獲得下列不等式 E(P)E(P1)+E(P2)即即: 把把一個復雜的問題一個復雜的問題分解成分解成幾個小問題,幾個小問題, 工作量工作量減少,容易解決。減少,容易解決。54從這個不等式導出從這個不等式導出“分而治之分而治之,各個擊破各個擊破”的結論,的結論,即即模塊化的依據(jù):模塊化的依據(jù): 把把復雜的問題復雜的問題分解成許多分解成許多容易解決的小問題容易解決的小問題,

15、 原來的問題就容易解決原來的問題就容易解決。中央政府分兩個部分:中央政府分兩個部分: 根據(jù)根據(jù)職能職能分:外交部、國防部、教育部分:外交部、國防部、教育部。 根據(jù)根據(jù)行政區(qū)域行政區(qū)域分:省、市、縣、鄉(xiāng)、村分:省、市、縣、鄉(xiāng)、村。管理方便,責任明確,問題容易解決。管理方便,責任明確,問題容易解決。55模塊化模塊化(Modularity)(Modularity)模塊化是好的軟件設計的一個基本準則模塊化是好的軟件設計的一個基本準則 高層模塊高層模塊 從整體上把握問題從整體上把握問題, ,隱蔽細隱蔽細節(jié)節(jié)56Main()int i,j,su,av; i=6;j=10;su=sum(i,j); av=a

16、ve(i,j);sum(x,y)int x,y;int z;z=x+y;return(z);ave(x,y)int x,y;int zz=(x+y)/2return(z); Main()Sum()Ave()6,10166,108C語言中模塊化以及模塊之間的調用關系語言中模塊化以及模塊之間的調用關系在在Main()中都進行中都進行求和求和、求平均求平均的計算的計算,問題比較復雜,問題比較復雜,因此,因此,求和、求平均求和、求平均的計算的計算劃分劃分成成獨立模塊獨立模塊,由由Main()函數(shù)調用的方法進行設計,函數(shù)調用的方法進行設計,復雜度降低,問題容易解決,測試也方便。復雜度降低,問題容易解決,

17、測試也方便。BACK57但是在但是在模塊分割時模塊分割時要注意;要注意;1) 當當模塊數(shù)目模塊數(shù)目增加時增加時,開發(fā)單個模塊所需要的開發(fā)單個模塊所需要的成本減成本減少少。2) 隨著模塊數(shù)目的增加,隨著模塊數(shù)目的增加, 設計設計模塊間接口的工作量模塊間接口的工作量也將增加。模塊多接口多也將增加。模塊多接口多因此,要控制模塊的總成本,因此,要控制模塊的總成本,每個程序應有一個每個程序應有一個最適當?shù)哪K數(shù)目最適當?shù)哪K數(shù)目(M),),使得系統(tǒng)的開發(fā)成本最小。使得系統(tǒng)的開發(fā)成本最小。 58模塊化與軟件成本模塊化與軟件成本成本或成本或工作量工作量模塊數(shù)量模塊數(shù)量接口成本接口成本成本成本/ /模塊模塊M

18、軟件總成本軟件總成本最小成本區(qū)域最小成本區(qū)域59采用模塊化的優(yōu)點采用模塊化的優(yōu)點:1)軟件結構清晰,容易設計、閱讀和理解。)軟件結構清晰,容易設計、閱讀和理解。2)容易測試和調式,提高軟件的可靠性。)容易測試和調式,提高軟件的可靠性。 (錯誤局限在有關的模塊和它們之間的接口中)(錯誤局限在有關的模塊和它們之間的接口中)3)提高軟件的可修改性。(變動往往涉及少數(shù)幾個模塊)提高軟件的可修改性。(變動往往涉及少數(shù)幾個模塊)4)有助于軟件開發(fā)的組織管理。)有助于軟件開發(fā)的組織管理。 甲甲:學籍,:學籍,乙乙:成績,:成績,丙丙:選課,:選課,丁丁:教學:教學開發(fā)大系統(tǒng)時分工負責模塊,開發(fā)大系統(tǒng)時分工負

19、責模塊,復雜的關鍵的模塊,讓水平較高的人員負責復雜的關鍵的模塊,讓水平較高的人員負責60人類在認識復雜現(xiàn)象的過程中使用的最強有力的思維工具是人類在認識復雜現(xiàn)象的過程中使用的最強有力的思維工具是抽象抽象。1)“抽象抽象” 要求人們將注意力集中在某一層次上考慮問題,要求人們將注意力集中在某一層次上考慮問題, 而忽略那些低層次的細節(jié)。而忽略那些低層次的細節(jié)。抽象抽象:就是抽出事物的就是抽出事物的本質特性本質特性而暫時不考慮它們的而暫時不考慮它們的細節(jié)細節(jié)。學生:學號、姓名、性別、系、專業(yè)、年級學生:學號、姓名、性別、系、專業(yè)、年級 (身高、頭發(fā)顏色、血壓不考慮)(身高、頭發(fā)顏色、血壓不考慮) 5.2

20、.2 抽象抽象61處理復雜系統(tǒng)的惟一有效的方法是用層次的方式構造處理復雜系統(tǒng)的惟一有效的方法是用層次的方式構造和分析它。和分析它。一個復雜的動態(tài)系統(tǒng)首先可以用一些一個復雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念高級的抽象概念構造構造和理解,和理解,這些高級概念又可以用一些這些高級概念又可以用一些較低級的概念較低級的概念構造和理解,構造和理解,如此進行下去,直至最低層次的具體元素。如此進行下去,直至最低層次的具體元素。每級的一個概念將以某種方式對應于程序的一組成分。每級的一個概念將以某種方式對應于程序的一組成分。622)軟件工程過程中的每一個階段,都是對軟件解法的抽)軟件工程過程中的每一個階段,都

21、是對軟件解法的抽象層次的一次精化。象層次的一次精化??尚行苑治隹尚行苑治觯喊研枰鉀Q問題:把需要解決問題抽象抽象為一個為一個解解, 探索是否有可行的解決方法。探索是否有可行的解決方法。需求分析需求分析:把需要解決的解:把需要解決的解抽象抽象成成功能功能;總體設計總體設計:把系統(tǒng):把系統(tǒng)抽象抽象為為結構結構;詳細設計詳細設計:把結構:把結構抽象抽象為為每個模塊的處理過程每個模塊的處理過程;編碼階段編碼階段:把處理過程:把處理過程抽象抽象為機器能夠執(zhí)行的為機器能夠執(zhí)行的程序程序,當源程序寫出來以后,也就達到了當源程序寫出來以后,也就達到了抽象抽象的的最低層最低層。633)抽象抽象到到具體具體:由于

22、人類思維能力的限制,:由于人類思維能力的限制, 如果每次面臨的因素太多,就不可能做出精確思維,如果每次面臨的因素太多,就不可能做出精確思維, 所以只能從抽象到具體的分析過程所以只能從抽象到具體的分析過程4)對軟件系統(tǒng)進行模塊設計時,可以有不同的抽象層次。)對軟件系統(tǒng)進行模塊設計時,可以有不同的抽象層次。逐步求精和模塊化的概念,與抽象是緊密相關的。逐步求精和模塊化的概念,與抽象是緊密相關的。在總體設計階段采用自頂向下、逐步求精的方法,在總體設計階段采用自頂向下、逐步求精的方法,也就是也就是:從抽象到具體的過程。從抽象到具體的過程。64抽象化優(yōu)點:抽象化優(yōu)點:用自頂向下由用自頂向下由抽象抽象到到具

23、體具體的方式分配控制,的方式分配控制,簡化了軟件的設計和實現(xiàn),簡化了軟件的設計和實現(xiàn),提高了軟件的可理解性和可測試性,提高了軟件的可理解性和可測試性,并且使軟件更容易維護。并且使軟件更容易維護。65 逐步求精逐步求精是人類解決復雜問題時采用的是人類解決復雜問題時采用的基本方法基本方法,也是許,也是許多軟件工程技術的基礎。多軟件工程技術的基礎。逐步求精逐步求精:為了能集中精力解決為了能集中精力解決主要問題主要問題而盡量推遲對而盡量推遲對問題細節(jié)問題細節(jié)的考慮。的考慮。逐步求精之所以如此重要,逐步求精之所以如此重要,是因為人類的認知過程遵守是因為人類的認知過程遵守Miller法則法則:一個人在任何

24、時候都只能把注意力集中在(一個人在任何時候都只能把注意力集中在(72)個知識塊上)個知識塊上5.2.3 逐步求精逐步求精66 在開發(fā)軟件的過程中,在開發(fā)軟件的過程中,軟件工程師在一段時間內需要考慮的知識塊數(shù)遠遠多于軟件工程師在一段時間內需要考慮的知識塊數(shù)遠遠多于9。例如,一個程序通常不止使用例如,一個程序通常不止使用9個個數(shù)據(jù),數(shù)據(jù), 一個用戶也往往有不止一個用戶也往往有不止9個個方面的需求。方面的需求。逐步求精逐步求精方法的強大作用就在于,它能幫助軟件工程師,方法的強大作用就在于,它能幫助軟件工程師,把精力集中在把精力集中在與當前開發(fā)階段最相關的那些方面上與當前開發(fā)階段最相關的那些方面上,而

25、而忽略忽略那些對那些對整體解決方案整體解決方案來說雖然是必要的來說雖然是必要的,然而然而目前還不需要考慮的細節(jié)目前還不需要考慮的細節(jié),這些細節(jié)將留到以后再考慮。,這些細節(jié)將留到以后再考慮。67 抽象抽象與與求精求精是一對互補的概念。是一對互補的概念。抽象抽象:使設計者能夠抽出事物的本質特性:使設計者能夠抽出事物的本質特性 而暫時不考慮它們的細節(jié);(上層)而暫時不考慮它們的細節(jié);(上層)求精求精:幫助設計者在設計過程中:幫助設計者在設計過程中 逐步揭示低層細節(jié)。(下層)逐步揭示低層細節(jié)。(下層)68信息隱藏信息隱藏:一個模塊內包含的信息一個模塊內包含的信息(過程和數(shù)據(jù)過程和數(shù)據(jù)) 對于不需要這些

26、信息的模塊來說,是不能訪問的對于不需要這些信息的模塊來說,是不能訪問的(隱藏隱藏)。目的目的:提高:提高模塊的獨立性模塊的獨立性,當修改或維護模塊時防止把一個模塊的錯誤擴散到其他模塊中去當修改或維護模塊時防止把一個模塊的錯誤擴散到其他模塊中去。5.2.4 信息隱藏和局部化信息隱藏和局部化MBACDCD69局部化局部化:是把一些是把一些關系密切的軟件元素關系密切的軟件元素(數(shù)據(jù)和有關的過程數(shù)據(jù)和有關的過程), 物理地物理地放得彼此靠近放得彼此靠近(最好放在一個模塊內最好放在一個模塊內)。局部化局部化有助于實現(xiàn)信息隱藏有助于實現(xiàn)信息隱藏。使用使用局部變量局部變量是一個例子。是一個例子。Main()

27、 sum(x, y)int i, j, k; int x, y; i=5; j=10; int z; k=sum(i, j); z=x+y; return(z); 70當多人分別編寫一個系統(tǒng)的不同模塊時,當多人分別編寫一個系統(tǒng)的不同模塊時,可以根據(jù)需要可以根據(jù)需要自由命名自由命名局部變量局部變量,而不必考慮是否與其他模塊中的而不必考慮是否與其他模塊中的變量同名變量同名。以保證文件(模塊)的以保證文件(模塊)的獨立性獨立性。71模塊獨立性模塊獨立性:每個模塊完成一個:每個模塊完成一個相對獨立的特定子功能相對獨立的特定子功能, 并且和并且和其它模塊之間的關系其它模塊之間的關系(或接口或接口)很簡單

28、很簡單。 模塊獨立的模塊獨立的概念是:概念是: 模塊化、抽象、信息隱藏和局部化概念的模塊化、抽象、信息隱藏和局部化概念的直接結果直接結果。5.2.5 模塊獨立模塊獨立72模塊獨立模塊獨立性的優(yōu)點:性的優(yōu)點:1)可以并行開發(fā),)可以并行開發(fā),2)比較容易開發(fā))比較容易開發(fā)3)能減少錯誤的影響,使模塊容易組合)能減少錯誤的影響,使模塊容易組合4)容易修改、測試和維護。)容易修改、測試和維護。模塊獨立模塊獨立是良好是良好設計的關鍵設計的關鍵,而,而設計設計又是決定又是決定軟件質軟件質量的關鍵環(huán)節(jié)量的關鍵環(huán)節(jié)。73 模塊模塊的獨立程度可以由兩個定性標準度量的獨立程度可以由兩個定性標準度量耦合耦合(塊塊

29、間間聯(lián)系聯(lián)系): 衡量衡量不同模塊彼此間不同模塊彼此間互相依賴互相依賴(連接連接)的緊密程度的緊密程度;內聚內聚(塊塊內內聯(lián)系聯(lián)系):衡量衡量一個模塊內部各個元素一個模塊內部各個元素彼此結合的緊密程度彼此結合的緊密程度??偟姆结樖强偟姆结樖牵航档婉詈辖档婉詈?、提高內聚提高內聚741. 耦合耦合(塊塊間間聯(lián)系聯(lián)系): 耦合強弱取決于模塊間接口的復雜程度,在軟件設計中耦合強弱取決于模塊間接口的復雜程度,在軟件設計中應該應該追求追求盡可能松散耦合盡可能松散耦合的系統(tǒng)。的系統(tǒng)。耦合有耦合有7種類型種類型,它們之間的關系為,它們之間的關系為:非直接耦合非直接耦合 數(shù)據(jù)耦合數(shù)據(jù)耦合標記耦合標記耦合控制耦

30、合控制耦合外部耦合外部耦合公共耦合公共耦合內容耦合內容耦合低低高高強強弱弱耦合耦合性性模塊獨立性模塊獨立性75(1) (1) 非直接耦合非直接耦合:如果兩個模塊之間沒有直接關系如果兩個模塊之間沒有直接關系或或彼此完全獨立彼此完全獨立。 它們分別從屬于不同模塊的控制和調用,它們分別從屬于不同模塊的控制和調用, 它們之間不傳遞任何信息。它們之間不傳遞任何信息。 但是但是,在一個軟件系統(tǒng)中不可能所有模塊之間在一個軟件系統(tǒng)中不可能所有模塊之間都沒有任何聯(lián)系都沒有任何聯(lián)系,否則,就不能構成整體。否則,就不能構成整體。 模塊獨立性最強模塊獨立性最強模塊模塊1 1模塊模塊2 2模塊模塊3 3模塊模塊4 47

31、6(2) (2) 數(shù)據(jù)耦合數(shù)據(jù)耦合 當一個模塊當一個模塊調用調用另一模塊時,另一模塊時,被調用模塊的輸入、輸出都是被調用模塊的輸入、輸出都是簡單的數(shù)據(jù)簡單的數(shù)據(jù)( (若干參數(shù)若干參數(shù)) )。(調用函數(shù)時(調用函數(shù)時實參實參和和形參形參的關系)的關系),最常用的耦合最常用的耦合 計算水費計算水費單價、單價、數(shù)量數(shù)量金額金額開發(fā)票開發(fā)票77(3) (3) 特征耦合特征耦合( (標記耦合、數(shù)據(jù)結構耦合標記耦合、數(shù)據(jù)結構耦合) )當一個模塊調用另一個模塊時傳遞了當一個模塊調用另一個模塊時傳遞了整個整個數(shù)數(shù)據(jù)結構據(jù)結構,而而被調用的模塊被調用的模塊只需要其中的只需要其中的一部分一部分數(shù)據(jù)元數(shù)據(jù)元素素。則

32、稱這兩個模塊間存在特征偶合。則稱這兩個模塊間存在特征偶合。數(shù)據(jù)結構數(shù)據(jù)結構:不是是簡單的數(shù)據(jù),:不是是簡單的數(shù)據(jù), 而是數(shù)組名、記錄名、文件名等。而是數(shù)組名、記錄名、文件名等。78這種耦合可能會帶來一些問題,這種耦合可能會帶來一些問題, 那些那些不該修改的數(shù)據(jù)不該修改的數(shù)據(jù)也可能會被不小心修改了;也可能會被不小心修改了; 沒有權利接觸沒有權利接觸某些數(shù)據(jù)的人也能修改,從而給計算機犯某些數(shù)據(jù)的人也能修改,從而給計算機犯罪提供了機會。罪提供了機會。出于安全考慮,應該出于安全考慮,應該只傳遞那些必須的只傳遞那些必須的數(shù)據(jù)項數(shù)據(jù)項。 工資單工資單:只能瀏覽本人,不能瀏覽他人,更不能修改。只能瀏覽本人,

33、不能瀏覽他人,更不能修改。79特征耦合舉例特征耦合舉例計算水電費計算水電費計算水費計算水費計算電費計算電費住戶情況住戶情況水費水費電費電費住戶情況住戶情況“住戶情況住戶情況”是一個是一個數(shù)據(jù)結構數(shù)據(jù)結構( (文件文件) ), , 圖中模塊都與此數(shù)據(jù)結構有關。圖中模塊都與此數(shù)據(jù)結構有關?!坝嬎闼M計算水費”和和“計算電費計算電費”本來沒有關系本來沒有關系, ,由于引用了此數(shù)據(jù)結構產生由于引用了此數(shù)據(jù)結構產生依賴關系依賴關系, ,它們之間也是它們之間也是特征耦合特征耦合. .80將將特征耦合特征耦合修改為修改為數(shù)據(jù)耦合數(shù)據(jù)耦合舉例舉例計算水電費計算水電費計算水費計算水費計算電費計算電費本月用水量本

34、月用水量/ /單價單價本月用電量本月用電量/ /單價單價水費水費電費電費81(4) (4) 控制耦合控制耦合一模塊一模塊向下屬模塊向下屬模塊傳遞的信息傳遞的信息,控制了控制了被調用被調用模塊的模塊的內部邏輯。內部邏輯。控制信息控制信息:(開關量、標志等控制被調用模塊決策的變量開關量、標志等控制被調用模塊決策的變量) 一個模塊一個模塊A調用另一個模塊調用另一個模塊B時,時, 傳遞的是傳遞的是控制信息控制信息(flag=0,1),2個以上個以上 因此被調用模塊因此被調用模塊B內部有多個功能,內部有多個功能, B模塊根據(jù)控制信息的值,有選擇的執(zhí)行某一功能,模塊根據(jù)控制信息的值,有選擇的執(zhí)行某一功能,

35、 哪個功能發(fā)揮作用完全受哪個功能發(fā)揮作用完全受A模塊的控制,模塊的控制, A模塊必須知道模塊必須知道B模塊內部邏輯,才能發(fā)出正確的控制信息模塊內部邏輯,才能發(fā)出正確的控制信息。82控制耦合舉例控制耦合舉例A A計算計算平均分平均分或或最高分最高分B B平均平均/ /最高最高( (控制信號控制信號) )成績成績讀入分數(shù)讀入分數(shù)輸出結果輸出結果計算平均分計算平均分計算最高分計算最高分平均平均/ /最高最高? ?B B0 10 183去除模塊間去除模塊間控制耦合控制耦合的方法的方法控制耦合控制耦合增加了理解和編程的復雜性,增加了理解和編程的復雜性,調用模調用模塊塊必須知道必須知道被調模塊被調模塊的內

36、部邏輯,增加了相互依的內部邏輯,增加了相互依賴。賴。(1)(1)將將被調用模塊內被調用模塊內的的判定判定上移到上移到調用模塊調用模塊中中進行。進行。(2)(2)把把被調用模塊分解被調用模塊分解成若干成若干單一功能單一功能模塊。模塊。84改改控制耦合控制耦合為為數(shù)據(jù)耦合數(shù)據(jù)耦合舉例舉例A計算平均分計算平均分B1B1平均成績平均成績最高成績最高成績計算最高分計算最高分B2B2分數(shù)分數(shù)85(5) (5) 外部耦合外部耦合一組模塊均與一組模塊均與同一外部環(huán)境同一外部環(huán)境關聯(lián),關聯(lián),并受到約束時,并受到約束時,它們之間便存在它們之間便存在外部耦合外部耦合。外部環(huán)境外部環(huán)境: :如如, ,I/OI/O模塊

37、模塊與特定的設備、格式和通信協(xié)議相關聯(lián)與特定的設備、格式和通信協(xié)議相關聯(lián)外部耦合外部耦合必不可少必不可少, ,但這種模塊但這種模塊數(shù)目應盡量少數(shù)目應盡量少。DANMFECBOP外部模塊外部模塊設備設備86(6) (6) 公共耦合公共耦合( (公共數(shù)據(jù)區(qū)耦合公共數(shù)據(jù)區(qū)耦合) )一組模塊引用同一個一組模塊引用同一個公共數(shù)據(jù)區(qū)。公共數(shù)據(jù)區(qū)。公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū)指:指: 全局數(shù)據(jù)結構全局數(shù)據(jù)結構( (全局變量全局變量) ) 共享通訊區(qū)共享通訊區(qū) 內存公共覆蓋區(qū)等內存公共覆蓋區(qū)等87公共耦合舉例公共耦合舉例公用數(shù)據(jù)區(qū)公用數(shù)據(jù)區(qū)C CB B模塊模塊A A、B B、C C間存在錯綜復雜的聯(lián)系間存在錯綜復雜的

38、聯(lián)系88全局變量全局變量 : V1 V2A:A1=V1+V2B:V1=B1全局變量全局變量 : V1 V2A:V1+B:V2=B1+V1A、B 兩個模塊都能兩個模塊都能使用使用和和改變改變V1、V2值,值, 若發(fā)生錯誤,錯誤定位難。若發(fā)生錯誤,錯誤定位難。89公共耦合存在的問題公共耦合存在的問題 診斷錯誤困難診斷錯誤困難耦合的復雜程度隨模塊的個數(shù)增加而顯著增加耦合的復雜程度隨模塊的個數(shù)增加而顯著增加 軟件可理解性降低軟件可理解性降低軟件可維護性差,軟件可維護性差,軟件可靠性差軟件可靠性差 ( (公共數(shù)據(jù)區(qū)及全程變量無保護措施公共數(shù)據(jù)區(qū)及全程變量無保護措施) )慎用慎用公共數(shù)據(jù)區(qū)和公共數(shù)據(jù)區(qū)和全

39、程變量全程變量!90(7)內容耦合)內容耦合( content coupling)如果兩個模塊中的一個模塊如果兩個模塊中的一個模塊直接引用直接引用了另一個模塊的了另一個模塊的內容內容,則它們之間是則它們之間是內容耦合內容耦合。ABCDA:goto C1C:C1: 例例1:A訪問訪問C的的內部數(shù)據(jù)內部數(shù)據(jù)或或不通過正常入口不通過正常入口而轉入而轉入C的內部。的內部。91例例2:部分代碼重疊部分代碼重疊(常出現(xiàn)在匯編程序中)(常出現(xiàn)在匯編程序中)B A例例3:一個模塊有一個模塊有多個入多個入口(功能)口(功能)A:entry 1:entry 2:事實上許多高級程序設計語言事實上許多高級程序設計語言

40、已經(jīng)設計成已經(jīng)設計成不允許在程序中不允許在程序中出現(xiàn)任何形式的出現(xiàn)任何形式的內容耦合內容耦合。L 耦合度耦合度最高最高 L 最壞的耦合最壞的耦合, ,不要使用!不要使用!92 總之,耦合是影響軟件復雜程度的一個重要因素??傊詈鲜怯绊戃浖碗s程度的一個重要因素。應該采取下述設計原則:應該采取下述設計原則: 盡量使用盡量使用數(shù)據(jù)耦合,數(shù)據(jù)耦合, 少用少用控制控制耦合耦合和和特征耦合,特征耦合, 限制限制公共環(huán)境耦合的范圍,公共環(huán)境耦合的范圍, 完全不用完全不用內容耦合。內容耦合。932. 內聚內聚(塊塊內內聯(lián)系聯(lián)系):v衡量衡量一個模塊一個模塊內部內部各個元素各個元素彼此結合的緊密程度彼此結合

41、的緊密程度。元素元素:語句或語句段:語句或語句段v模塊的內聚性高模塊的內聚性高,就意味著模塊內部的就意味著模塊內部的各個元素各個元素是為了完成是為了完成一個功能一個功能而存在,而存在,顯然與其他模塊關系簡單顯然與其他模塊關系簡單v內聚內聚和和耦合耦合是密切相關的,是密切相關的,模塊內的模塊內的高內聚高內聚往往意味著模塊間的往往意味著模塊間的松耦合松耦合。IfEndIfDo whileEndDo94內聚類型內聚類型1. 偶然內聚偶然內聚2. 邏輯內聚邏輯內聚3. 時間內聚時間內聚4. 過程內聚過程內聚5. 通信內聚通信內聚6. 順序內聚順序內聚7. 功能內聚功能內聚功能內聚功能內聚順序內聚順序內

42、聚通信內聚通信內聚過程內聚過程內聚時間內聚時間內聚邏輯內聚邏輯內聚偶然內聚偶然內聚高高低低強強弱弱內聚性內聚性模塊獨立性模塊獨立性功能單一功能單一功能分散功能分散 10分分 9分分 7分分 5分分 3分分 1分分 0分分95(1)偶然內聚)偶然內聚如果一個模塊完成如果一個模塊完成一組一組任務任務, 這些任務這些任務彼此之間彼此之間沒有實質性關系沒有實質性關系, 或者即使有關系,或者即使有關系,關系也是很松散的關系也是很松散的。(應盡量避免)。(應盡量避免)如:一些沒有任何聯(lián)系的語句,可能在許多模塊中重復多次如:一些沒有任何聯(lián)系的語句,可能在許多模塊中重復多次, 程序員為了節(jié)省存儲空間,程序員為

43、了節(jié)省存儲空間, 把它們抽出來組成一個新的模塊。(早期內存比較?。┌阉鼈兂槌鰜斫M成一個新的模塊。(早期內存比較小)96偶然內聚舉例偶然內聚舉例A AB BC CM MZ=X+YZ=X+YPRINT NPRINT NIF K=0 THEN S=10IF K=0 THEN S=10模塊模塊M M中的三個語句中的三個語句沒有任何聯(lián)系,且重復出現(xiàn)多次。沒有任何聯(lián)系,且重復出現(xiàn)多次。缺點:可理解性差,缺點:可理解性差, 可修改性差可修改性差例例: :97(2)(2)邏輯內聚邏輯內聚v 如果如果一個模塊完成的任務一個模塊完成的任務在在邏輯上邏輯上屬于屬于相同相同或或相似的相似的一類。一類。v 這幾種任務這

44、幾種任務在在邏輯上邏輯上相似相似,但實際上并無必然的聯(lián)系。,但實際上并無必然的聯(lián)系。98邏輯內聚邏輯內聚模塊圖示模塊圖示ABCEFGABCEFGE1F1G1EFGEFG模塊內部邏輯模塊內部邏輯E E、F F、G G邏輯功能邏輯功能相似相似,組成新模塊組成新模塊EFGEFG缺點:增強了耦合程度缺點:增強了耦合程度( (控制耦合控制耦合) ) 不易修改,效率低不易修改,效率低公用代碼段公用代碼段公用代碼段公用代碼段99例如:例如:將將各種錯誤信息的處理集中起來各種錯誤信息的處理集中起來,定義為,定義為一個模塊一個模塊,但這些,但這些錯誤信息的處理彼此間沒有絲毫關系。由于它把所有錯誤信息的處理彼此間

45、沒有絲毫關系。由于它把所有形式上形式上或或邏輯上邏輯上相似相似(都是都是錯誤信息處理錯誤信息處理)而實質上毫無關系的處理)而實質上毫無關系的處理放在一起。放在一起。缺點:缺點:v 它和其他模塊之間的連接關系就必然相當復雜,它和其他模塊之間的連接關系就必然相當復雜,v 因此修改維護相當困難。因此修改維護相當困難。錯誤信息處理模塊錯誤信息處理模塊:從其他系統(tǒng)讀記錄錯誤;從其他系統(tǒng)讀記錄錯誤;格式錯誤;格式錯誤;輸出錯誤;輸出錯誤;100(3)(3)時間內聚時間內聚v 如果如果一個模塊包含的任務一個模塊包含的任務必須在必須在同一個時間段內同一個時間段內執(zhí)行。執(zhí)行。 這些任務只因這些任務只因時間因素時

46、間因素關聯(lián)關聯(lián)在一起在一起, ,彼此之間彼此之間毫無聯(lián)系毫無聯(lián)系。例如例如: :初始化系統(tǒng)初始化系統(tǒng)模塊、模塊、 系統(tǒng)結束系統(tǒng)結束模塊、模塊、 緊急故障處理緊急故障處理模塊等均是模塊等均是時間內聚時間內聚模塊。模塊。101打開某個文件;打開某個文件;置計數(shù)器為零;置計數(shù)器為零;置累加器為零;置累加器為零; 初始化模塊初始化模塊 進行中斷處理;進行中斷處理; 關閉文件;關閉文件; 報警;報警; 保留現(xiàn)場;保留現(xiàn)場; 處理意外故障模塊處理意外故障模塊強調強調:在在同一個時間段內同一個時間段內執(zhí)行執(zhí)行102(4 4)過程內聚)過程內聚(順序性組合)(順序性組合):如果:如果一個模塊內的處理元素一個模

47、塊內的處理元素是是相關相關的,的, 而且必須以而且必須以特定次序特定次序執(zhí)行。執(zhí)行。讀入讀入成績單成績單審查審查成績單成績單統(tǒng)計統(tǒng)計成績成績打印打印成績成績讀入讀入并并審查成績單審查成績單統(tǒng)計統(tǒng)計并并打印成績單打印成績單103v過程內聚過程內聚強調嚴格的強調嚴格的執(zhí)行次序執(zhí)行次序(先后次序)(先后次序)v時間內聚時間內聚強調強調同一個時間段內同一個時間段內執(zhí)行,執(zhí)行, 對執(zhí)行次序則并無要求。對執(zhí)行次序則并無要求。顯然,顯然,過程內聚過程內聚比比時間內聚時間內聚模塊的內部緊密程度要模塊的內部緊密程度要高高些。些。過程內聚過程內聚和和時間內聚時間內聚的比較:的比較:104(5)(5)通信內聚通信內

48、聚如果如果模塊中所有元素模塊中所有元素是都使用是都使用同一個輸入數(shù)據(jù)同一個輸入數(shù)據(jù), 或或產生同一個輸出數(shù)據(jù)產生同一個輸出數(shù)據(jù)。產生產生工資報表工資報表計算計算平均工資平均工資職工工資記錄職工工資記錄職工工資報表職工工資報表平均工資平均工資產生職工工資報表并計算平均工資的模塊產生職工工資報表并計算平均工資的模塊105(6) 順序內聚順序內聚如果如果一個模塊內的各處理元素一個模塊內的各處理元素和和同一個功能同一個功能密切相關,而密切相關,而且且這些處理這些處理必須必須順序執(zhí)行順序執(zhí)行。通常,一個處理元素的通常,一個處理元素的輸出數(shù)據(jù)輸出數(shù)據(jù), 作為下一個處理元素的作為下一個處理元素的輸入數(shù)據(jù)輸入

49、數(shù)據(jù)。1. 輸入輸入系數(shù)系數(shù)2. 求求方程的方程的根根3. 打印打印方程的方程的根根求一元二次方程求一元二次方程根的模塊根的模塊106順序內聚順序內聚和和過程內聚過程內聚的區(qū)別:的區(qū)別:v 順序內聚順序內聚:強調的是:強調的是數(shù)據(jù)數(shù)據(jù)的先后順序。的先后順序。v 過程內聚:過程內聚:強調的是強調的是加工處理加工處理的先后順序。的先后順序。107(7)(7)功能內聚功能內聚v一個模塊內所有處理元素一個模塊內所有處理元素都屬于都屬于一個整體一個整體,完成一,完成一個個單一的功能單一的功能。v由于這種模塊只執(zhí)行一個功能,因而內聚性最高。由于這種模塊只執(zhí)行一個功能,因而內聚性最高?!耙粋€模塊一個模塊,一

50、個功能一個功能”,已成為模塊化設計的一條,已成為模塊化設計的一條原則。原則。108模塊設計原則模塊設計原則v內聚:內聚:設計時應該力求做到模塊的高內聚(功能和順序);通常中等程度的內聚(過程、通信)也是可以采用的,而且效果和高內聚相差不多;低內聚(偶然、邏輯、時間)很壞,建議不要使用。109v耦合:耦合:盡量使用數(shù)據(jù)耦合,少用控制耦合和特征耦合,限制公共環(huán)境耦合的范圍,完全不用內容耦合。110 耦合耦合、內聚內聚與與模塊獨立性模塊獨立性關系關系在模塊化過程中可能遇到這樣的問題,在模塊化過程中可能遇到這樣的問題,耦合耦合和和內聚內聚更應更應重視重視那一方面?那一方面?看法一:看法一: 耦合和內聚

51、是一個問題耦合和內聚是一個問題(衡量模塊獨立性衡量模塊獨立性)的兩個方面,的兩個方面, 它們處于它們處于同等地位同等地位、同樣重要,很難確定哪個更重要。、同樣重要,很難確定哪個更重要。多數(shù)人持這種觀點。多數(shù)人持這種觀點??捶ǘ嚎捶ǘ簝染蹆染鄹匾◤埡7匾◤埡7?,P98) 高內聚高內聚意味著意味著松耦合松耦合,實踐表明,實踐表明內聚更重要內聚更重要, 應該把更多的注意力集中到應該把更多的注意力集中到提高模塊的內聚提高模塊的內聚程度上。程度上。111看法三:看法三:耦合耦合更重要(屠立德)更重要(屠立德)模塊獨立性模塊獨立性的三個含義的三個含義: 每個模塊具有獨立的功能,每個模塊具有

52、獨立的功能, 模塊的劃分符合信息隱藏原則,模塊的劃分符合信息隱藏原則, 模塊間關聯(lián)最小,這些都是相對于其他模塊而言的。模塊間關聯(lián)最小,這些都是相對于其他模塊而言的。耦合耦合是對是對模塊獨立性的模塊獨立性的,而而內聚內聚則是從模塊內部各功能成分的緊密關系來則是從模塊內部各功能成分的緊密關系來它對模塊間關聯(lián)性的影響。它對模塊間關聯(lián)性的影響。因此內聚對獨立性的衡量不但因此內聚對獨立性的衡量不但不具有直接關系不具有直接關系,而且也而且也不具有確定性不具有確定性(是推斷)(是推斷)。如果模塊內部各成分關系密切如果模塊內部各成分關系密切,則與其它模塊之間的關系很小則與其它模塊之間的關系很小112結論:結論

53、:耦合耦合和和內聚內聚都是衡量都是衡量模塊獨立性模塊獨立性的定性標準。的定性標準。但要承認但要承認耦合耦合是是,內聚內聚則則輔助耦合輔助耦合共同對模塊獨立性進行衡量。共同對模塊獨立性進行衡量。所以不少人在模塊化過程中,給所以不少人在模塊化過程中,給耦合性耦合性。例如例如G.Myers(IBM著名的軟件測試專家)在他的質量度著名的軟件測試專家)在他的質量度量模型中,量模型中,分配給分配給內聚性內聚性和和耦合性耦合性對質量影響的權重是對質量影響的權重是3:7。以上討論的實際意義在于,以上討論的實際意義在于,在開發(fā)軟件的模塊工作中,應在開發(fā)軟件的模塊工作中,應首先著眼于首先著眼于耦合耦合還是還是內聚

54、內聚。模塊設計的總的原則模塊設計的總的原則是:是:要保持模塊獨立性,必須降低要保持模塊獨立性,必須降低耦合耦合、提高、提高內聚。內聚。113v人們在開發(fā)計算機軟件的人們在開發(fā)計算機軟件的長期實踐中總結的經(jīng)驗長期實踐中總結的經(jīng)驗,v在許多場合仍然能給軟件工程師以在許多場合仍然能給軟件工程師以有益的啟示有益的啟示,v能幫助他們找到能幫助他們找到改進軟件設計提高軟件質量改進軟件設計提高軟件質量的途徑。的途徑。5.3 啟發(fā)規(guī)則啟發(fā)規(guī)則1141. 改進改進軟件結構軟件結構提高模塊獨立性提高模塊獨立性通過模塊的通過模塊的分解分解或或合并合并,力求,力求降低降低耦合耦合提高提高內聚內聚。分解分解:提高:提高

55、內聚內聚;合并合并:降低:降低耦合耦合,減少控制信息的傳遞,減少控制信息的傳遞, 同時降低接口的復雜性。同時降低接口的復雜性。115QXY改進方法:改進方法:將將Q1Q1、Q2Q2合并為合并為Q QQ1CQ2CX XY重復部分重復部分改進前改進前Q1Q1、Q2Q2功能有功能有完全相同的部分完全相同的部分C C思考題思考題116思考題(作業(yè)):思考題(作業(yè)):1)模塊)模塊Q1、Q2是在是在邏輯上邏輯上具有相似功能的模塊;具有相似功能的模塊;2)其中)其中C 部分的功能完全相同;部分的功能完全相同;3)為了消除重復的功能,)為了消除重復的功能, 把把Q1、Q2兩個模塊合并而形成新的模塊兩個模塊合

56、并而形成新的模塊Q。問問: 1) 模塊模塊Q是什么是什么內聚內聚? 2) 模塊模塊Q 和和X、Y模塊之間是什么模塊之間是什么耦合耦合 3) 這個方案是否可取?,說明理由這個方案是否可???,說明理由 4) 提出提出2個合理方案個合理方案(提高內聚、降低耦合)(提高內聚、降低耦合)117消除重復功能消除重復功能Q1CQ2C改進前改進前Q1Q1、Q2Q2功能有功能有完全相同的部分完全相同的部分C CXY重復部分重復部分X+Q1Y+Q2C改進方法改進方法2:Q1合并到合并到X中,中,Q2合并到合并到Y中,中,C一個獨立的模塊一個獨立的模塊 Q1XCY改進方法改進方法1 1:將將Q1Q1、Q2Q2的公共

57、部分的公共部分C C分離分離出來,做成下層出來,做成下層公共模塊公共模塊Q21182. 模塊規(guī)模應該適中模塊規(guī)模應該適中1) 一個模塊規(guī)模不應過大,最好能一個模塊規(guī)模不應過大,最好能寫在一頁紙內寫在一頁紙內(60行),行), 所以模塊規(guī)模一般在所以模塊規(guī)模一般在50-100條語句條語句為好,為好, 因為可以用因為可以用1-2頁打印紙打印,便于閱讀,頁打印紙打印,便于閱讀, 同時同時編碼工作一天內編碼工作一天內可以完成,也可以調試??梢酝瓿?,也可以調試。1192)分解分解:如果模塊規(guī)模:如果模塊規(guī)模太大太大,就增加復雜性,可理解性下降。,就增加復雜性,可理解性下降。 要考慮分離出一些功能,構成要

58、考慮分離出一些功能,構成同層同層或或下層下層其他模塊。其他模塊。 3)合并合并: 過小的模塊開銷大于有效操作,過小的模塊開銷大于有效操作, 而且模塊數(shù)目過多而且模塊數(shù)目過多 將使系統(tǒng)接口復雜。將使系統(tǒng)接口復雜。 通??梢园阉ǔ?梢园阉喜⒑喜⒌缴霞壞K中到上級模塊中去而不必單獨存在。去而不必單獨存在。MM1M2M1M21204)合并時要注意,)合并時要注意, 盡管這個模塊盡管這個模塊比較小比較小, 但有但有多個模塊多個模塊調用調用它它時時不應合并不應合并, 而應而應單獨存在單獨存在(重用率高重用率高)。)。 t 模塊模塊任何時候應該單獨存在。任何時候應該單獨存在。opqrt1213. 深度、

59、寬度、扇出深度、寬度、扇出和和扇入扇入都應適當都應適當1) 深度深度:表示軟件結構中從:表示軟件結構中從頂層頂層模塊到模塊到最底層最底層模塊的模塊的層數(shù)層數(shù)。 可表示一個系統(tǒng)的可表示一個系統(tǒng)的大小大小和和復雜程度復雜程度。2) 寬度寬度:同一層次上同一層次上的模塊的模塊總數(shù)總數(shù)的的最大值最大值。 對對寬度寬度影響最大的因素影響最大的因素是模塊的是模塊的扇出扇出。 寬度寬度越大系統(tǒng)越大系統(tǒng)越復雜越復雜。 1223) 扇出扇出:指一個模塊:指一個模塊直接控制直接控制下屬的下屬的模塊個數(shù)模塊個數(shù)。 平均扇出一般是平均扇出一般是34,一般認為不要超過,一般認為不要超過7個。個。4) 扇入扇入:指一個模

60、塊的:指一個模塊的直接上屬直接上屬模塊個數(shù)模塊個數(shù)。反映模塊的。反映模塊的重用率重用率 扇入大扇入大, 表明該模塊設置得好表明該模塊設置得好,有很多模塊要用該模塊的功能有很多模塊要用該模塊的功能 模塊模塊重用程度重用程度高。但不能違背模塊獨立原理。高。但不能違背模塊獨立原理。 123舉例:舉例:深度、寬度、扇出、扇入深度、寬度、扇出、扇入Mabcdemfgihopqrntjks扇出扇出扇入扇入寬度寬度深度深度深度深度:5,寬度寬度:8,M的的扇出扇出:3,t的的扇入扇入:4124經(jīng)驗:經(jīng)驗:頂層頂層扇出扇出較高,較高,中間層中間層扇出扇出較小,較小,低層低層模塊,特別是模塊,特別是最底層最底層

溫馨提示

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

評論

0/150

提交評論