版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第四章第四章 概要設(shè)計(jì)概要設(shè)計(jì)軟件工程軟件工程2 2第四章第四章 軟件概要設(shè)計(jì)軟件概要設(shè)計(jì)4.1 軟件設(shè)計(jì)的目標(biāo)與準(zhǔn)則軟件設(shè)計(jì)的目標(biāo)與準(zhǔn)則4.2 軟件設(shè)計(jì)工程的任務(wù)軟件設(shè)計(jì)工程的任務(wù)4.3 創(chuàng)建良好設(shè)計(jì)的原則創(chuàng)建良好設(shè)計(jì)的原則 4.4 傳統(tǒng)的結(jié)構(gòu)化設(shè)計(jì)方法傳統(tǒng)的結(jié)構(gòu)化設(shè)計(jì)方法4.5 概要設(shè)計(jì)評審概要設(shè)計(jì)評審4.6概要設(shè)計(jì)案例概要設(shè)計(jì)案例軟件工程軟件工程3 34.1 軟件設(shè)計(jì)的目標(biāo)和準(zhǔn)則軟件設(shè)計(jì)的目標(biāo)和準(zhǔn)則n軟件設(shè)計(jì)的基本目標(biāo)是軟件設(shè)計(jì)的基本目標(biāo)是用比較抽象概括的方式用比較抽象概括的方式確定目標(biāo)系統(tǒng)如何完成預(yù)定的任務(wù)確定目標(biāo)系統(tǒng)如何完成預(yù)定的任務(wù),即軟件設(shè),即軟件設(shè)計(jì)是確定系統(tǒng)的物理模型。計(jì)是
2、確定系統(tǒng)的物理模型。n從技術(shù)觀點(diǎn)來看,軟件設(shè)計(jì)包括從技術(shù)觀點(diǎn)來看,軟件設(shè)計(jì)包括數(shù)據(jù)設(shè)計(jì)數(shù)據(jù)設(shè)計(jì)、體體系結(jié)構(gòu)設(shè)計(jì)系結(jié)構(gòu)設(shè)計(jì)、接口設(shè)計(jì)接口設(shè)計(jì)、過程設(shè)計(jì)過程設(shè)計(jì)。n有一些設(shè)計(jì)目標(biāo)是從用戶那里得到,更多的設(shè)有一些設(shè)計(jì)目標(biāo)是從用戶那里得到,更多的設(shè)計(jì)目標(biāo)是從非功能需求或應(yīng)用領(lǐng)域中抽取出來。計(jì)目標(biāo)是從非功能需求或應(yīng)用領(lǐng)域中抽取出來。n設(shè)計(jì)目標(biāo)可以從以下設(shè)計(jì)目標(biāo)可以從以下 5 組設(shè)計(jì)準(zhǔn)則中選擇。組設(shè)計(jì)準(zhǔn)則中選擇。軟件工程軟件工程4 4性能準(zhǔn)則性能準(zhǔn)則設(shè)計(jì)準(zhǔn)則設(shè)計(jì)準(zhǔn)則定定 義義響應(yīng)時(shí)間響應(yīng)時(shí)間 用戶提交請求后多長時(shí)間可得到系統(tǒng)的確認(rèn)用戶提交請求后多長時(shí)間可得到系統(tǒng)的確認(rèn)吞吐量吞吐量在一段固定時(shí)間內(nèi)系統(tǒng)能夠處
3、理多少任務(wù)在一段固定時(shí)間內(nèi)系統(tǒng)能夠處理多少任務(wù)內(nèi)存內(nèi)存系統(tǒng)運(yùn)行需要占用多少內(nèi)存空間系統(tǒng)運(yùn)行需要占用多少內(nèi)存空間可靠性準(zhǔn)則可靠性準(zhǔn)則設(shè)計(jì)準(zhǔn)則設(shè)計(jì)準(zhǔn)則定定 義義魯棒性魯棒性面對非法用戶進(jìn)入后系統(tǒng)的存活能力面對非法用戶進(jìn)入后系統(tǒng)的存活能力可靠性可靠性明確期待的行為與觀察到行為之間的差別明確期待的行為與觀察到行為之間的差別可用性可用性系統(tǒng)能夠用來完成正常任務(wù)的時(shí)間百分比系統(tǒng)能夠用來完成正常任務(wù)的時(shí)間百分比容錯(cuò)性容錯(cuò)性在出錯(cuò)條件下系統(tǒng)的操作能力在出錯(cuò)條件下系統(tǒng)的操作能力保密性保密性系統(tǒng)忍受惡意攻擊的能力系統(tǒng)忍受惡意攻擊的能力安全性安全性再出現(xiàn)錯(cuò)誤時(shí)系統(tǒng)避免威脅到人類生命的能力再出現(xiàn)錯(cuò)誤時(shí)系統(tǒng)避免威脅到人
4、類生命的能力軟件工程軟件工程5 5最終用戶準(zhǔn)則最終用戶準(zhǔn)則成本準(zhǔn)則成本準(zhǔn)則設(shè)計(jì)準(zhǔn)則設(shè)計(jì)準(zhǔn)則定定 義義效用效用系統(tǒng)支持用戶工作的困難程度系統(tǒng)支持用戶工作的困難程度易用性易用性用戶使用系統(tǒng)的困難程度用戶使用系統(tǒng)的困難程度設(shè)計(jì)準(zhǔn)則設(shè)計(jì)準(zhǔn)則定定 義義開發(fā)成本開發(fā)成本 開發(fā)系統(tǒng)初始版本的成本開發(fā)系統(tǒng)初始版本的成本部署成本部署成本 安裝系統(tǒng)并培訓(xùn)用戶的成本安裝系統(tǒng)并培訓(xùn)用戶的成本升級成本升級成本 從原有系統(tǒng)中導(dǎo)出數(shù)據(jù)的成本,此準(zhǔn)則導(dǎo)致了從原有系統(tǒng)中導(dǎo)出數(shù)據(jù)的成本,此準(zhǔn)則導(dǎo)致了向后兼容性需求向后兼容性需求維護(hù)成本維護(hù)成本 需要進(jìn)行錯(cuò)誤修復(fù)和增強(qiáng)系統(tǒng)的成本需要進(jìn)行錯(cuò)誤修復(fù)和增強(qiáng)系統(tǒng)的成本管理成本管理成本 需要
5、對系統(tǒng)進(jìn)行管理的成本需要對系統(tǒng)進(jìn)行管理的成本軟件工程軟件工程6 6維護(hù)準(zhǔn)則維護(hù)準(zhǔn)則n性能性能、可靠性可靠性和和最終用戶最終用戶準(zhǔn)則往往準(zhǔn)則往往從需求中明確從需求中明確地獲取地獲取,也可以,也可以從應(yīng)用領(lǐng)域中獲取從應(yīng)用領(lǐng)域中獲取;而;而成本成本和和維維護(hù)護(hù)準(zhǔn)則準(zhǔn)則由客戶和供應(yīng)商提出由客戶和供應(yīng)商提出。設(shè)計(jì)準(zhǔn)則設(shè)計(jì)準(zhǔn)則定定 義義可擴(kuò)展性可擴(kuò)展性向系統(tǒng)中添加功能或新類的困難程度向系統(tǒng)中添加功能或新類的困難程度可修改性可修改性更改系統(tǒng)功能的困難程度更改系統(tǒng)功能的困難程度可適應(yīng)性可適應(yīng)性將系統(tǒng)發(fā)送到不同應(yīng)用領(lǐng)域的困難程度將系統(tǒng)發(fā)送到不同應(yīng)用領(lǐng)域的困難程度可移植性可移植性將系統(tǒng)移植到不同平臺(tái)的困難程度將系
6、統(tǒng)移植到不同平臺(tái)的困難程度可讀性可讀性通過閱讀源代碼來理解系統(tǒng)的困難程度通過閱讀源代碼來理解系統(tǒng)的困難程度需求的可追蹤性需求的可追蹤性 將代碼映射到特定需求上的困難程度將代碼映射到特定需求上的困難程度軟件工程軟件工程7 7n在定義設(shè)計(jì)目標(biāo)時(shí),希望開發(fā)一個(gè)既安全可靠,在定義設(shè)計(jì)目標(biāo)時(shí),希望開發(fā)一個(gè)既安全可靠,又廉價(jià)的系統(tǒng)是不現(xiàn)實(shí)的,因此開發(fā)人員應(yīng)當(dāng)對又廉價(jià)的系統(tǒng)是不現(xiàn)實(shí)的,因此開發(fā)人員應(yīng)當(dāng)對所有可能的設(shè)計(jì)目標(biāo)進(jìn)行權(quán)衡,對必須的設(shè)計(jì)目所有可能的設(shè)計(jì)目標(biāo)進(jìn)行權(quán)衡,對必須的設(shè)計(jì)目標(biāo)賦予優(yōu)先級別。標(biāo)賦予優(yōu)先級別。n一旦有了清晰的設(shè)計(jì)目標(biāo),就可以開始系統(tǒng)的初一旦有了清晰的設(shè)計(jì)目標(biāo),就可以開始系統(tǒng)的初始分解
7、。始分解。權(quán)權(quán) 衡衡基基 本本 原原 則則空間與速度空間與速度如果軟件的響應(yīng)時(shí)間或吞吐量不滿足需求,則如果軟件的響應(yīng)時(shí)間或吞吐量不滿足需求,則可以使用更多的存儲(chǔ)空間來加快軟件的執(zhí)行速可以使用更多的存儲(chǔ)空間來加快軟件的執(zhí)行速度。如果軟件太大,則可以犧牲一定的速度對度。如果軟件太大,則可以犧牲一定的速度對數(shù)據(jù)進(jìn)行壓縮處理。數(shù)據(jù)進(jìn)行壓縮處理。軟件工程軟件工程8 8權(quán)權(quán) 衡衡基基 本本 原原 則則交付時(shí)間與交付時(shí)間與功能功能如果開發(fā)進(jìn)度滯后于計(jì)劃,則按時(shí)交付的功能如果開發(fā)進(jìn)度滯后于計(jì)劃,則按時(shí)交付的功能可以少于預(yù)定交付的功能,或推遲交付所有功可以少于預(yù)定交付的功能,或推遲交付所有功能。契約軟件通常更強(qiáng)
8、調(diào)功能,而商業(yè)外購軟能。契約軟件通常更強(qiáng)調(diào)功能,而商業(yè)外購軟件則更強(qiáng)調(diào)交付日期。件則更強(qiáng)調(diào)交付日期。交付時(shí)間與交付時(shí)間與質(zhì)量質(zhì)量如果測試滯后于計(jì)劃,則可以按時(shí)交付帶有錯(cuò)如果測試滯后于計(jì)劃,則可以按時(shí)交付帶有錯(cuò)誤的軟件,或推遲交付帶有少量錯(cuò)誤的軟件。誤的軟件,或推遲交付帶有少量錯(cuò)誤的軟件。交付時(shí)間與交付時(shí)間與人員配置人員配置如果開發(fā)進(jìn)度滯后于計(jì)劃,可以在項(xiàng)目中增加如果開發(fā)進(jìn)度滯后于計(jì)劃,可以在項(xiàng)目中增加資源以提高生產(chǎn)率。在多數(shù)情況下,這種選擇資源以提高生產(chǎn)率。在多數(shù)情況下,這種選擇只適用于早期項(xiàng)目。新的人員要經(jīng)過培訓(xùn)方可只適用于早期項(xiàng)目。新的人員要經(jīng)過培訓(xùn)方可使用。這樣中途增加資源通常會(huì)降低生產(chǎn)
9、率,使用。這樣中途增加資源通常會(huì)降低生產(chǎn)率,還會(huì)增加軟件開發(fā)的成本。還會(huì)增加軟件開發(fā)的成本。軟件工程軟件工程9 94.2 軟件設(shè)計(jì)工程的任務(wù)軟件設(shè)計(jì)工程的任務(wù)n軟件設(shè)計(jì)工程的任務(wù)是基于需求分析的結(jié)果建立軟件設(shè)計(jì)工程的任務(wù)是基于需求分析的結(jié)果建立各種設(shè)計(jì)模型,給出問題解決的方案。各種設(shè)計(jì)模型,給出問題解決的方案。n軟件設(shè)計(jì)是將用戶需求準(zhǔn)確地轉(zhuǎn)化成為最終的軟軟件設(shè)計(jì)是將用戶需求準(zhǔn)確地轉(zhuǎn)化成為最終的軟件產(chǎn)品的唯一途徑,在需求到實(shí)現(xiàn)之間起到了橋件產(chǎn)品的唯一途徑,在需求到實(shí)現(xiàn)之間起到了橋梁作用。梁作用。n在軟件設(shè)計(jì)階段,需要在多種設(shè)計(jì)方案之中進(jìn)行在軟件設(shè)計(jì)階段,需要在多種設(shè)計(jì)方案之中進(jìn)行決策和折中,并使
10、用選定的方案進(jìn)行后續(xù)的開發(fā)決策和折中,并使用選定的方案進(jìn)行后續(xù)的開發(fā)活動(dòng)。設(shè)計(jì)決策將最終影響軟件實(shí)現(xiàn)的成敗,同活動(dòng)。設(shè)計(jì)決策將最終影響軟件實(shí)現(xiàn)的成敗,同時(shí)也將影響到軟件維護(hù)。時(shí)也將影響到軟件維護(hù)。軟件工程軟件工程1010n軟件設(shè)計(jì)既是過程又是模型。軟件設(shè)計(jì)既是過程又是模型。n設(shè)計(jì)過程設(shè)計(jì)過程是一系列的迭代步驟,使設(shè)計(jì)人員能是一系列的迭代步驟,使設(shè)計(jì)人員能夠描述目標(biāo)系統(tǒng)的各個(gè)側(cè)面。夠描述目標(biāo)系統(tǒng)的各個(gè)側(cè)面。n設(shè)計(jì)模型設(shè)計(jì)模型首先描述目標(biāo)系統(tǒng)的整體架構(gòu),然后首先描述目標(biāo)系統(tǒng)的整體架構(gòu),然后逐步細(xì)化架構(gòu)得到構(gòu)造每個(gè)細(xì)節(jié)的指導(dǎo)原則,逐步細(xì)化架構(gòu)得到構(gòu)造每個(gè)細(xì)節(jié)的指導(dǎo)原則,從而得到系統(tǒng)的一系列不同的視圖
11、。從而得到系統(tǒng)的一系列不同的視圖。n軟件設(shè)計(jì)是后續(xù)開發(fā)步驟及軟件維護(hù)工作的基軟件設(shè)計(jì)是后續(xù)開發(fā)步驟及軟件維護(hù)工作的基礎(chǔ)。如果沒有設(shè)計(jì),只能建立一個(gè)不穩(wěn)定的系礎(chǔ)。如果沒有設(shè)計(jì),只能建立一個(gè)不穩(wěn)定的系統(tǒng)結(jié)構(gòu)。統(tǒng)結(jié)構(gòu)。軟件設(shè)計(jì)的概念軟件設(shè)計(jì)的概念軟件工程軟件工程11 11n所謂的所謂的“不穩(wěn)定不穩(wěn)定”,是指每次修改,都會(huì)導(dǎo)致系,是指每次修改,都會(huì)導(dǎo)致系統(tǒng)結(jié)構(gòu)整體的變更,不但費(fèi)時(shí)費(fèi)力,還會(huì)引入新統(tǒng)結(jié)構(gòu)整體的變更,不但費(fèi)時(shí)費(fèi)力,還會(huì)引入新的錯(cuò)誤,降低軟件質(zhì)量。的錯(cuò)誤,降低軟件質(zhì)量。設(shè)計(jì)設(shè)計(jì)編碼編碼測試測試維護(hù)維護(hù)測試測試編碼編碼維護(hù)維護(hù)有軟件設(shè)計(jì)有軟件設(shè)計(jì) 沒有軟件設(shè)計(jì)沒有軟件設(shè)計(jì)軟件工程軟件工程121
12、2n從工程管理角度來看,軟件設(shè)計(jì)分兩步完成:從工程管理角度來看,軟件設(shè)計(jì)分兩步完成:概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。n概要設(shè)計(jì)概要設(shè)計(jì)是將軟件的需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的是將軟件的需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的系統(tǒng)結(jié)構(gòu);系統(tǒng)結(jié)構(gòu); 確定系統(tǒng)設(shè)計(jì)方案確定系統(tǒng)設(shè)計(jì)方案 將軟件需求將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu)轉(zhuǎn)化為軟件體系結(jié)構(gòu) 確定系統(tǒng)級接口確定系統(tǒng)級接口 全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式。全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式。n詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)是軟件結(jié)構(gòu)表示的細(xì)化,得到軟件的詳細(xì)是軟件結(jié)構(gòu)表示的細(xì)化,得到軟件的詳細(xì)數(shù)據(jù)結(jié)構(gòu)表達(dá)和具體算法描述。數(shù)據(jù)結(jié)構(gòu)表達(dá)和具體算法描述。 過程設(shè)計(jì)即確立每個(gè)模塊的實(shí)現(xiàn)算法過程設(shè)計(jì)即
13、確立每個(gè)模塊的實(shí)現(xiàn)算法 數(shù)據(jù)設(shè)計(jì)即局部數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)設(shè)計(jì)即局部數(shù)據(jù)結(jié)構(gòu) 模塊接口設(shè)計(jì)模塊接口設(shè)計(jì)軟件設(shè)計(jì)的階段與任務(wù)軟件設(shè)計(jì)的階段與任務(wù) 軟件工程軟件工程1313n從技術(shù)的角度,采用的方法不同會(huì)有所不同:從技術(shù)的角度,采用的方法不同會(huì)有所不同:u傳統(tǒng)的結(jié)構(gòu)化方法將軟件設(shè)計(jì)劃分為傳統(tǒng)的結(jié)構(gòu)化方法將軟件設(shè)計(jì)劃分為體系結(jié)體系結(jié)構(gòu)設(shè)計(jì)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)接口設(shè)計(jì)及及過程設(shè)計(jì)過程設(shè)計(jì)四四部分;部分;u面向?qū)ο蠓椒▌t將軟件設(shè)計(jì)劃分為面向?qū)ο蠓椒▌t將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)體系結(jié)構(gòu)設(shè)計(jì)設(shè)計(jì)、類設(shè)計(jì)類設(shè)計(jì)數(shù)據(jù)設(shè)計(jì)數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)接口設(shè)計(jì)、構(gòu)件構(gòu)件級設(shè)計(jì)級設(shè)計(jì)四部分。四部分。 軟件設(shè)計(jì)的階段與任務(wù)軟
14、件設(shè)計(jì)的階段與任務(wù) 軟件工程軟件工程14141. 體系結(jié)構(gòu)設(shè)計(jì)體系結(jié)構(gòu)設(shè)計(jì)體系結(jié)構(gòu)設(shè)計(jì)定義軟件的主要結(jié)構(gòu)元素及其之體系結(jié)構(gòu)設(shè)計(jì)定義軟件的主要結(jié)構(gòu)元素及其之間的關(guān)系。體系結(jié)構(gòu)設(shè)計(jì)表示可以從系統(tǒng)規(guī)格間的關(guān)系。體系結(jié)構(gòu)設(shè)計(jì)表示可以從系統(tǒng)規(guī)格說明、分析模型(如對象類或數(shù)據(jù)流圖)及體說明、分析模型(如對象類或數(shù)據(jù)流圖)及體系結(jié)構(gòu)的風(fēng)格導(dǎo)出。系結(jié)構(gòu)的風(fēng)格導(dǎo)出。2. 類設(shè)計(jì)類設(shè)計(jì)類設(shè)計(jì)對分析階段所建立的對象類模型進(jìn)行細(xì)類設(shè)計(jì)對分析階段所建立的對象類模型進(jìn)行細(xì)化,轉(zhuǎn)化為設(shè)計(jì)類的實(shí)現(xiàn)及軟件實(shí)現(xiàn)所要求的化,轉(zhuǎn)化為設(shè)計(jì)類的實(shí)現(xiàn)及軟件實(shí)現(xiàn)所要求的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)。3. 數(shù)據(jù)設(shè)計(jì)數(shù)據(jù)設(shè)計(jì)軟件工程軟件工程1515傳統(tǒng)方
15、法主要根據(jù)需求階段所建立的實(shí)體傳統(tǒng)方法主要根據(jù)需求階段所建立的實(shí)體-關(guān)關(guān)系圖(系圖(E-R圖)來確定軟件涉及的文件系統(tǒng)的圖)來確定軟件涉及的文件系統(tǒng)的結(jié)構(gòu)及數(shù)據(jù)庫的表結(jié)構(gòu)。面向?qū)ο蠓椒ǜ鶕?jù)類結(jié)構(gòu)及數(shù)據(jù)庫的表結(jié)構(gòu)。面向?qū)ο蠓椒ǜ鶕?jù)類設(shè)計(jì)導(dǎo)出數(shù)據(jù)設(shè)計(jì)。設(shè)計(jì)導(dǎo)出數(shù)據(jù)設(shè)計(jì)。4. 接口設(shè)計(jì)接口設(shè)計(jì)接口設(shè)計(jì)描述用戶界面,軟件和其他系統(tǒng)元素接口設(shè)計(jì)描述用戶界面,軟件和其他系統(tǒng)元素如硬件設(shè)備、其他軟件系統(tǒng)及使用人員的外部如硬件設(shè)備、其他軟件系統(tǒng)及使用人員的外部接口,以及各種構(gòu)件之間的內(nèi)部接口。接口,以及各種構(gòu)件之間的內(nèi)部接口。5. 構(gòu)件級設(shè)計(jì)構(gòu)件級設(shè)計(jì)構(gòu)件級設(shè)計(jì)將軟件體系結(jié)構(gòu)的結(jié)構(gòu)元素變換為構(gòu)件級設(shè)計(jì)將軟件體
16、系結(jié)構(gòu)的結(jié)構(gòu)元素變換為對軟件構(gòu)件的過程性描述。從基于類的模型、對軟件構(gòu)件的過程性描述。從基于類的模型、軟件工程軟件工程1616數(shù)據(jù)流模型及行為模型獲得的信息可以作為構(gòu)數(shù)據(jù)流模型及行為模型獲得的信息可以作為構(gòu)件設(shè)計(jì)的基礎(chǔ)。件設(shè)計(jì)的基礎(chǔ)。6. 過程設(shè)計(jì)過程設(shè)計(jì)過程設(shè)計(jì)的主要工作是確定軟件各個(gè)組成部分過程設(shè)計(jì)的主要工作是確定軟件各個(gè)組成部分內(nèi)的算法及內(nèi)部數(shù)據(jù)結(jié)構(gòu),并選定某種過程的內(nèi)的算法及內(nèi)部數(shù)據(jù)結(jié)構(gòu),并選定某種過程的表達(dá)形式來描述各種算法。表達(dá)形式來描述各種算法。n軟件設(shè)計(jì)過程中所有基本技術(shù)活動(dòng)的經(jīng)典設(shè)計(jì)軟件設(shè)計(jì)過程中所有基本技術(shù)活動(dòng)的經(jīng)典設(shè)計(jì)過程流程如圖過程流程如圖 軟件設(shè)計(jì)的過程軟件設(shè)計(jì)的過程
17、軟件工程軟件工程1717否否設(shè)計(jì)輸入設(shè)計(jì)輸入設(shè)計(jì)輸入的評審設(shè)計(jì)輸入的評審制定技術(shù)規(guī)范制定技術(shù)規(guī)范確定運(yùn)行環(huán)境確定運(yùn)行環(huán)境數(shù)據(jù)設(shè)計(jì)數(shù)據(jù)設(shè)計(jì)質(zhì)量設(shè)計(jì)質(zhì)量設(shè)計(jì)體系結(jié)構(gòu)設(shè)計(jì)體系結(jié)構(gòu)設(shè)計(jì)運(yùn)行設(shè)計(jì)運(yùn)行設(shè)計(jì)復(fù)用模塊的選擇與確定復(fù)用模塊的選擇與確定概要設(shè)計(jì)說明的編寫與評審概要設(shè)計(jì)說明的編寫與評審是否需要是否需要修改設(shè)計(jì)修改設(shè)計(jì)? ?實(shí)施設(shè)實(shí)施設(shè)計(jì)更改計(jì)更改是是否否詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)是否需要是否需要修改設(shè)計(jì)修改設(shè)計(jì)?實(shí)施實(shí)施設(shè)計(jì)設(shè)計(jì)更改更改進(jìn)入實(shí)現(xiàn)階段進(jìn)入實(shí)現(xiàn)階段是是詳細(xì)設(shè)計(jì)說明的編寫與評審詳細(xì)設(shè)計(jì)說明的編寫與評審軟件工程軟件工程1818概要設(shè)計(jì)過程概要設(shè)計(jì)過程n選定體系結(jié)構(gòu)n軟件總體結(jié)構(gòu)設(shè)計(jì)u按照結(jié)構(gòu)化設(shè)計(jì)方法
18、把一個(gè)復(fù)雜的系統(tǒng)按功能劃分模塊,并確定每個(gè)模塊的功能。u確定模塊之間的調(diào)用關(guān)系。n確定系統(tǒng)的外部接口和內(nèi)部接口n分析數(shù)據(jù)流圖,弄清數(shù)據(jù)流圖加工的過程,決定數(shù)據(jù)處理問題的類型(事務(wù)或變換)軟件工程軟件工程1919概要設(shè)計(jì)過程概要設(shè)計(jì)過程n對初始結(jié)構(gòu)圖進(jìn)行改進(jìn)完善n確定系統(tǒng)包含哪些應(yīng)用服務(wù)系統(tǒng)、客戶端、數(shù)據(jù)庫管理系統(tǒng);確定每個(gè)模塊放在哪個(gè)應(yīng)用服務(wù)器或客戶端的哪個(gè)目錄、哪個(gè)文件或是在數(shù)據(jù)庫內(nèi)建立的對象,落實(shí)體系結(jié)構(gòu)。n進(jìn)行主要的算法設(shè)計(jì)n進(jìn)行異常處理設(shè)計(jì)n制定設(shè)計(jì)規(guī)范n編寫概要設(shè)計(jì)說明書軟件工程軟件工程2020n良好的設(shè)計(jì)原則可為設(shè)計(jì)過程導(dǎo)航。良好的設(shè)計(jì)原則可為設(shè)計(jì)過程導(dǎo)航。1.設(shè)計(jì)應(yīng)遵循設(shè)計(jì)應(yīng)遵循
19、抽象化抽象化的原則,的原則,數(shù)據(jù)抽象數(shù)據(jù)抽象過程抽象過程抽象u過程抽象過程抽象 是指在軟件設(shè)計(jì)中將處理過程是指在軟件設(shè)計(jì)中將處理過程的實(shí)現(xiàn)細(xì)節(jié)隱藏在數(shù)據(jù)抽象中,可以直接的實(shí)現(xiàn)細(xì)節(jié)隱藏在數(shù)據(jù)抽象中,可以直接通過模塊接口使用這些處理操作通過模塊接口使用這些處理操作。u數(shù)據(jù)抽象數(shù)據(jù)抽象 是指采用抽象數(shù)據(jù)類型表示數(shù)是指采用抽象數(shù)據(jù)類型表示數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)封裝,使得使用者可通過接據(jù),實(shí)現(xiàn)數(shù)據(jù)封裝,使得使用者可通過接口使用數(shù)據(jù)而不必關(guān)心數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)??谑褂脭?shù)據(jù)而不必關(guān)心數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。創(chuàng)建良好設(shè)計(jì)的原則創(chuàng)建良好設(shè)計(jì)的原則 軟件工程軟件工程2121例例1:考慮適用于低級:考慮適用于低級CAD的圖形軟件包。的
20、圖形軟件包。n又抽象又抽象 該該CAD軟件系統(tǒng)配有能與繪圖員進(jìn)行可視化通信軟件系統(tǒng)配有能與繪圖員進(jìn)行可視化通信的圖形界面,能用鼠標(biāo)代替繪圖工具,畫各種直線和曲線;的圖形界面,能用鼠標(biāo)代替繪圖工具,畫各種直線和曲線;能完成所有幾何計(jì)算以及所有截面視圖和輔助視圖的設(shè)計(jì)。能完成所有幾何計(jì)算以及所有截面視圖和輔助視圖的設(shè)計(jì)。圖形設(shè)計(jì)的結(jié)果存在圖形文件中,圖形文件可包含幾何的、圖形設(shè)計(jì)的結(jié)果存在圖形文件中,圖形文件可包含幾何的、正文的和其他各種補(bǔ)充設(shè)計(jì)信息。正文的和其他各種補(bǔ)充設(shè)計(jì)信息。 顯而易見,在這一抽象級別上,用問題域本身的術(shù)語來描述顯而易見,在這一抽象級別上,用問題域本身的術(shù)語來描述問題的解。問
21、題的解。抽象與逐步求精抽象與逐步求精軟件工程軟件工程2222抽象抽象 CAD軟件任務(wù);軟件任務(wù); 用戶界面子任務(wù);用戶界面子任務(wù); 創(chuàng)建二維圖形子任務(wù);創(chuàng)建二維圖形子任務(wù); 顯示圖形子任務(wù);顯示圖形子任務(wù); 管理圖形文件子任務(wù);管理圖形文件子任務(wù); end CAD. 在這一抽象級別上,給出了組成在這一抽象級別上,給出了組成CAD軟件任務(wù)的所軟件任務(wù)的所有主要子任務(wù),盡管術(shù)語已與問題域有所不同,但有主要子任務(wù),盡管術(shù)語已與問題域有所不同,但仍然不是實(shí)現(xiàn)所用的語言。仍然不是實(shí)現(xiàn)所用的語言。抽象與逐步求精抽象與逐步求精軟件工程軟件工程2323抽象抽象(僅以(僅以“創(chuàng)建二維圖形子任務(wù)創(chuàng)建二維圖形子任務(wù)
22、”為例)為例) PROCEDURE 創(chuàng)建二維圖形創(chuàng)建二維圖形 REPEAT UNTIL DO WHILE 數(shù)字儀接口任務(wù);數(shù)字儀接口任務(wù); 判斷作圖請求:判斷作圖請求: 線:畫線任務(wù);線:畫線任務(wù); 圓:畫圓任務(wù);圓:畫圓任務(wù); END;抽象與逐步求精抽象與逐步求精軟件工程軟件工程2424 DO WHILE 鍵盤接口任務(wù);鍵盤接口任務(wù); 選擇分析或計(jì)算:選擇分析或計(jì)算: 輔助視圖:輔助視圖任務(wù);輔助視圖:輔助視圖任務(wù); 截面視圖:截面視圖任務(wù);截面視圖:截面視圖任務(wù); END; END REPEAT;END PROCEDURE.抽象與逐步求精抽象與逐步求精軟件工程軟件工程2525n在這一抽象級
23、別上,給出了初步的過程在這一抽象級別上,給出了初步的過程性表示,此時(shí)所有術(shù)語都是面向軟件性表示,此時(shí)所有術(shù)語都是面向軟件(比如采用(比如采用do while結(jié)構(gòu))并且模塊結(jié)結(jié)構(gòu))并且模塊結(jié)構(gòu)也開始明朗。求精過程還可繼續(xù)下去,構(gòu)也開始明朗。求精過程還可繼續(xù)下去,直至產(chǎn)生源代碼。直至產(chǎn)生源代碼。抽象與逐步求精抽象與逐步求精軟件工程軟件工程2626數(shù)據(jù)抽象與過程抽象一樣,能使設(shè)計(jì)者按不同的詳數(shù)據(jù)抽象與過程抽象一樣,能使設(shè)計(jì)者按不同的詳細(xì)程度表示數(shù)據(jù)對象。細(xì)程度表示數(shù)據(jù)對象。仍以仍以CAD軟件為例,我們可定義一個(gè)稱為軟件為例,我們可定義一個(gè)稱為drawing(圖)的數(shù)據(jù)對象:(圖)的數(shù)據(jù)對象:TYPE
24、 drawing IS STRUCTURE DEFINED number IS STRING LENGTH(12); geometry DEFINED notes IS STRING LENGTH(256); bom DEFINEDEND drawing TYPE;數(shù)據(jù)抽象數(shù)據(jù)抽象軟件工程軟件工程2727數(shù)據(jù)抽象數(shù)據(jù)抽象在此,在此,drawing被表示為一種結(jié)構(gòu),其各個(gè)組成部被表示為一種結(jié)構(gòu),其各個(gè)組成部件本身又可為某種數(shù)據(jù)抽象,比如件本身又可為某種數(shù)據(jù)抽象,比如geometry(幾何(幾何圖形)和圖形)和bom。一旦抽象數(shù)據(jù)類型一旦抽象數(shù)據(jù)類型drawing定義完畢,即可用類型定義完畢,即可
25、用類型名直接說明數(shù)據(jù)對象,而不必涉及其內(nèi)部構(gòu)造的細(xì)名直接說明數(shù)據(jù)對象,而不必涉及其內(nèi)部構(gòu)造的細(xì)節(jié),例如,可用語句節(jié),例如,可用語句: blueprint IS INSTANCE OF drawing; 或或 schematic IS INSTANCE OF drawing; 說明說明blueprint和和schematic具有具有drawing的一切特性。的一切特性。blueprint藍(lán)圖,藍(lán)圖,schematic簡(略)圖。簡(略)圖。軟件工程軟件工程2828數(shù)據(jù)抽象數(shù)據(jù)抽象在抽象數(shù)據(jù)類型的定義中可以附加一組操作在抽象數(shù)據(jù)類型的定義中可以附加一組操作的定義,用以確定在此類數(shù)據(jù)對象上可進(jìn)行的定
26、義,用以確定在此類數(shù)據(jù)對象上可進(jìn)行的操作。以抽象數(shù)據(jù)類型的操作。以抽象數(shù)據(jù)類型drawing為例,可以為例,可以定義擦除(定義擦除(erase)、存儲(chǔ)()、存儲(chǔ)(save)、分類)、分類(catalog)和拷貝()和拷貝(copy)等操作。)等操作。許多程序設(shè)計(jì)語言都提供了對抽象數(shù)據(jù)類型許多程序設(shè)計(jì)語言都提供了對抽象數(shù)據(jù)類型的支持,的支持,Ada 的程序包機(jī)制是對數(shù)據(jù)抽象和的程序包機(jī)制是對數(shù)據(jù)抽象和過程抽象的雙重支持過程抽象的雙重支持 軟件工程軟件工程29292.設(shè)計(jì)應(yīng)當(dāng)遵循設(shè)計(jì)應(yīng)當(dāng)遵循模塊化模塊化的原則的原則。u每個(gè)模塊可獨(dú)立地開發(fā)、測試,最后組裝成每個(gè)模塊可獨(dú)立地開發(fā)、測試,最后組裝成完整
27、的程序。完整的程序。u其出發(fā)點(diǎn)是本著將一種復(fù)雜問題其出發(fā)點(diǎn)是本著將一種復(fù)雜問題“分而治之分而治之”的原則。其目的是使程序的結(jié)構(gòu)清晰,容易的原則。其目的是使程序的結(jié)構(gòu)清晰,容易閱讀、理解、測試、修改。閱讀、理解、測試、修改。uMeyer的的良好模塊設(shè)計(jì)方法的標(biāo)準(zhǔn)良好模塊設(shè)計(jì)方法的標(biāo)準(zhǔn)a) 模塊可分解性模塊可分解性 可將系統(tǒng)按問題子問題可將系統(tǒng)按問題子問題分解的原則分解成系統(tǒng)的模塊層次結(jié)構(gòu)分解的原則分解成系統(tǒng)的模塊層次結(jié)構(gòu);b) 模塊可組裝性模塊可組裝性 可利用已有的設(shè)計(jì)構(gòu)件組可利用已有的設(shè)計(jì)構(gòu)件組裝成新系統(tǒng),不必一切從頭開始。裝成新系統(tǒng),不必一切從頭開始。軟件工程軟件工程3030c) 模塊可理解
28、性模塊可理解性 一個(gè)模塊可不參考其他模一個(gè)模塊可不參考其他模塊而被理解;塊而被理解;d) 模塊連續(xù)性模塊連續(xù)性 對軟件需求的一些微小變更對軟件需求的一些微小變更只導(dǎo)致對某個(gè)模塊的修改而整個(gè)系統(tǒng)不只導(dǎo)致對某個(gè)模塊的修改而整個(gè)系統(tǒng)不用大動(dòng)用大動(dòng);e) 模塊保護(hù)模塊保護(hù) 將模塊內(nèi)出現(xiàn)異常情況的影響將模塊內(nèi)出現(xiàn)異常情況的影響范圍限制在模塊內(nèi)部;范圍限制在模塊內(nèi)部;3.設(shè)計(jì)應(yīng)遵循設(shè)計(jì)應(yīng)遵循信息隱蔽信息隱蔽的原則的原則。uParnas主張?jiān)陂_發(fā)時(shí),將每個(gè)程序的成分主張?jiān)陂_發(fā)時(shí),將每個(gè)程序的成分隱藏在模塊內(nèi),定義每一個(gè)模塊時(shí)盡可能隱藏在模塊內(nèi),定義每一個(gè)模塊時(shí)盡可能少地顯露其內(nèi)部的處理。少地顯露其內(nèi)部的處理
29、。軟件工程軟件工程3131u每個(gè)模塊的實(shí)現(xiàn)細(xì)節(jié)對于其它模塊是隱蔽的,每個(gè)模塊的實(shí)現(xiàn)細(xì)節(jié)對于其它模塊是隱蔽的,將來修改軟件時(shí)偶然引入錯(cuò)誤所造成的影響將來修改軟件時(shí)偶然引入錯(cuò)誤所造成的影響就可以局限在一個(gè)或幾個(gè)模塊內(nèi)部,不致波就可以局限在一個(gè)或幾個(gè)模塊內(nèi)部,不致波及到軟件的其它部分。及到軟件的其它部分。u在可預(yù)見將來可能修改的場合,信息隱蔽可在可預(yù)見將來可能修改的場合,信息隱蔽可以提高軟件的可修改性、可測試性和可移植以提高軟件的可修改性、可測試性和可移植性。性。模塊模塊(求一元二次(求一元二次方程的根)方程的根)a,b,c根根計(jì)算一元二次方程根的所有軟件元素計(jì)算一元二次方程根的所有軟件元素(如局部
30、變量,計(jì)算公式等)(如局部變量,計(jì)算公式等)局部化局部化軟件工程軟件工程32324.模塊獨(dú)立性模塊獨(dú)立性u如果一個(gè)模塊能夠獨(dú)立于其他模塊被編程、測試和如果一個(gè)模塊能夠獨(dú)立于其他模塊被編程、測試和修改,則該模塊具有模塊獨(dú)立性。它是抽象、模塊修改,則該模塊具有模塊獨(dú)立性。它是抽象、模塊化和信息隱蔽的直接產(chǎn)物。化和信息隱蔽的直接產(chǎn)物。u1978年年Myers提出用兩個(gè)準(zhǔn)則來度量功能獨(dú)立性,提出用兩個(gè)準(zhǔn)則來度量功能獨(dú)立性,即模塊間的耦合和模塊的內(nèi)聚。即模塊間的耦合和模塊的內(nèi)聚。u內(nèi)聚性內(nèi)聚性:內(nèi)聚是一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的:內(nèi)聚是一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度的度量。緊密程度的度量。u耦
31、合性耦合性: 耦合是模塊間互相連接的緊密程度的度量,耦合是模塊間互相連接的緊密程度的度量,它取決于各個(gè)模塊之間接口的復(fù)雜度、調(diào)用方式以它取決于各個(gè)模塊之間接口的復(fù)雜度、調(diào)用方式以及哪些信息通過接口。及哪些信息通過接口。u模塊之間的耦合性越高,其模塊獨(dú)立性就越弱。模模塊之間的耦合性越高,其模塊獨(dú)立性就越弱。模塊的內(nèi)聚性越高,它與其他模塊之間的耦合性就會(huì)塊的內(nèi)聚性越高,它與其他模塊之間的耦合性就會(huì)降低,而模塊獨(dú)立性就越強(qiáng)。降低,而模塊獨(dú)立性就越強(qiáng)。 軟件工程軟件工程33335.盡可能盡可能增加內(nèi)聚增加內(nèi)聚u不同內(nèi)聚類型:內(nèi)聚性從高到低排序不同內(nèi)聚類型:內(nèi)聚性從高到低排序功能內(nèi)聚功能內(nèi)聚 層內(nèi)聚層內(nèi)
32、聚 通信內(nèi)聚通信內(nèi)聚 順序內(nèi)聚順序內(nèi)聚 過程內(nèi)聚過程內(nèi)聚 時(shí)間內(nèi)聚時(shí)間內(nèi)聚 實(shí)用程序內(nèi)聚實(shí)用程序內(nèi)聚高高 內(nèi)聚性內(nèi)聚性 低低強(qiáng)強(qiáng) 模塊獨(dú)立性模塊獨(dú)立性 弱弱軟件工程軟件工程34345.盡可能盡可能增加內(nèi)聚增加內(nèi)聚(1) 功能內(nèi)聚功能內(nèi)聚 u 一個(gè)模塊中各個(gè)部分都是為了完成一項(xiàng)具一個(gè)模塊中各個(gè)部分都是為了完成一項(xiàng)具體功能而協(xié)同工作,緊密聯(lián)系,不可分割體功能而協(xié)同工作,緊密聯(lián)系,不可分割的。這種模塊就是功能內(nèi)聚模塊。功能內(nèi)的。這種模塊就是功能內(nèi)聚模塊。功能內(nèi)聚模塊的模塊獨(dú)立性最強(qiáng)。聚模塊的模塊獨(dú)立性最強(qiáng)。u 功能內(nèi)聚的內(nèi)聚度最高,概要設(shè)計(jì)中要追功能內(nèi)聚的內(nèi)聚度最高,概要設(shè)計(jì)中要追求的目標(biāo)。求的目標(biāo)
33、。u 滿足功能內(nèi)聚的模塊只執(zhí)行一個(gè)功能,這滿足功能內(nèi)聚的模塊只執(zhí)行一個(gè)功能,這是一個(gè)判斷模塊是否是功能內(nèi)聚的方法。是一個(gè)判斷模塊是否是功能內(nèi)聚的方法。軟件工程軟件工程3535(2) 層內(nèi)聚層內(nèi)聚相關(guān)服務(wù)放在一起,并有嚴(yán)格的層次結(jié)構(gòu),高相關(guān)服務(wù)放在一起,并有嚴(yán)格的層次結(jié)構(gòu),高層服務(wù)可訪問低層服務(wù),反之不可。如分層結(jié)層服務(wù)可訪問低層服務(wù),反之不可。如分層結(jié)構(gòu)。構(gòu)。用戶界面用戶界面訪問操作系統(tǒng)訪問操作系統(tǒng)訪問數(shù)據(jù)庫訪問數(shù)據(jù)庫網(wǎng)絡(luò)通信網(wǎng)絡(luò)通信應(yīng)用邏輯應(yīng)用邏輯應(yīng)用程序的典型層次應(yīng)用程序的典型層次內(nèi)核內(nèi)核(處理過程和交換處理過程和交換)屏幕顯示功能屏幕顯示功能用戶帳號(hào)管理用戶帳號(hào)管理文件系統(tǒng)文件系統(tǒng)應(yīng)用程
34、序應(yīng)用程序操作系統(tǒng)的典型層次操作系統(tǒng)的典型層次軟件工程軟件工程3636(3) 通信內(nèi)聚通信內(nèi)聚訪問或操作同一數(shù)據(jù)的過程放在一個(gè)類中,這訪問或操作同一數(shù)據(jù)的過程放在一個(gè)類中,這些過程可以互相通信。如某個(gè)類設(shè)計(jì)。些過程可以互相通信。如某個(gè)類設(shè)計(jì)。初始化初始化插入插入刪除刪除查找查找修改修改符符 號(hào)號(hào) 表表軟件工程軟件工程3737通信內(nèi)聚通信內(nèi)聚打印報(bào)告A打印報(bào)告C打印報(bào)告B計(jì)算A計(jì)算B保存通信內(nèi)聚例子n如果一個(gè)模塊內(nèi)各組成部分的處理動(dòng)作都使用相如果一個(gè)模塊內(nèi)各組成部分的處理動(dòng)作都使用相同的輸入數(shù)據(jù)或相同的輸出數(shù)據(jù),稱為通訊聚合。同的輸入數(shù)據(jù)或相同的輸出數(shù)據(jù),稱為通訊聚合。軟件工程軟件工程3838案
35、例:通信內(nèi)聚案例:通信內(nèi)聚獲得配件單獲得配件單價(jià)和庫存量價(jià)和庫存量配件編號(hào)配件編號(hào)庫存量庫存量單價(jià)單價(jià)兩個(gè)工作:兩個(gè)工作:1.按配件編號(hào)查詢按配件編號(hào)查詢“數(shù)數(shù)據(jù)存儲(chǔ)據(jù)存儲(chǔ)”,獲得單價(jià)。,獲得單價(jià)。2.按配件編號(hào)查詢按配件編號(hào)查詢“數(shù)數(shù)據(jù)存儲(chǔ)據(jù)存儲(chǔ)”,獲得庫存量。,獲得庫存量。這兩個(gè)處理動(dòng)作都使用相同的輸入數(shù)據(jù),稱為通訊聚合。這兩個(gè)處理動(dòng)作都使用相同的輸入數(shù)據(jù),稱為通訊聚合。軟件工程軟件工程3939(4) 順序內(nèi)聚順序內(nèi)聚:存在一系列過程,其中一個(gè)過程向:存在一系列過程,其中一個(gè)過程向另一個(gè)過程提供輸入,這些過程放在一起,形另一個(gè)過程提供輸入,這些過程放在一起,形成順序內(nèi)聚。如面向?qū)ο笙到y(tǒng)中的
36、消息序列。成順序內(nèi)聚。如面向?qū)ο笙到y(tǒng)中的消息序列。(5) 過程內(nèi)聚過程內(nèi)聚:幾個(gè)一次調(diào)用的操作放在一個(gè)模塊:幾個(gè)一次調(diào)用的操作放在一個(gè)模塊中,它們是相關(guān)的且必須以特定次序執(zhí)行,則中,它們是相關(guān)的且必須以特定次序執(zhí)行,則稱這個(gè)模塊為過程內(nèi)聚模塊。但在這種模塊內(nèi),稱這個(gè)模塊為過程內(nèi)聚模塊。但在這種模塊內(nèi),一個(gè)操作的輸出不一定是下一個(gè)操作的輸入。一個(gè)操作的輸出不一定是下一個(gè)操作的輸入。如調(diào)用結(jié)構(gòu)。如調(diào)用結(jié)構(gòu)。軟件工程軟件工程4040循環(huán)體循環(huán)體計(jì)算累積計(jì)算累積事務(wù)記錄事務(wù)記錄累積銷售額累積銷售額累積訂貨量累積訂貨量通過循環(huán)體,計(jì)算通過循環(huán)體,計(jì)算兩種累積數(shù)。兩種累積數(shù)。寫一個(gè)記錄寫一個(gè)記錄讀一個(gè)記錄
37、讀一個(gè)記錄判定判定調(diào)用模塊調(diào)用模塊被調(diào)用被調(diào)用模塊模塊軟件工程軟件工程4141(6) 時(shí)間內(nèi)聚時(shí)間內(nèi)聚:程序執(zhí)行過程中同一階段內(nèi)完成的:程序執(zhí)行過程中同一階段內(nèi)完成的操作放在一起,達(dá)到時(shí)間內(nèi)聚。操作放在一起,達(dá)到時(shí)間內(nèi)聚。例如:程序設(shè)例如:程序設(shè)計(jì)中的初始化模塊計(jì)中的初始化模塊(7) 實(shí)用程序內(nèi)聚實(shí)用程序內(nèi)聚:邏輯上不能納入其他內(nèi)聚類型:邏輯上不能納入其他內(nèi)聚類型的相關(guān)實(shí)用程序放在一起,形成實(shí)用程序內(nèi)聚。的相關(guān)實(shí)用程序放在一起,形成實(shí)用程序內(nèi)聚。如可復(fù)用的過程或類。如可復(fù)用的過程或類。軟件工程軟件工程4242功能內(nèi)聚功能內(nèi)聚n功能內(nèi)聚功能內(nèi)聚如果一個(gè)模塊的各個(gè)成分都是完成某個(gè)具體任如果一個(gè)模塊
38、的各個(gè)成分都是完成某個(gè)具體任務(wù)必不可少的成分,這些成分協(xié)同工作,緊密務(wù)必不可少的成分,這些成分協(xié)同工作,緊密聯(lián)系,不可分割,則稱為功能內(nèi)聚。聯(lián)系,不可分割,則稱為功能內(nèi)聚。功能內(nèi)聚的內(nèi)聚度最高,概要設(shè)計(jì)中要追求的功能內(nèi)聚的內(nèi)聚度最高,概要設(shè)計(jì)中要追求的目標(biāo)。目標(biāo)。滿足功能內(nèi)聚的模塊只執(zhí)行一個(gè)功能,這是一滿足功能內(nèi)聚的模塊只執(zhí)行一個(gè)功能,這是一個(gè)判斷模塊是否是功能內(nèi)聚的方法。個(gè)判斷模塊是否是功能內(nèi)聚的方法。 軟件工程軟件工程4343模塊內(nèi)聚模塊內(nèi)聚巧合巧合 邏輯邏輯 時(shí)間時(shí)間 過程過程 通信通信 順序順序 功能功能內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚軟件工程軟件工
39、程4444該模塊只能完成一個(gè)模塊嗎模塊內(nèi)各組成部分的關(guān)系如何次序重要嗎次序重要嗎邏輯相似嗎功能內(nèi)聚過程內(nèi)聚通信內(nèi)聚順序內(nèi)聚時(shí)間內(nèi)聚邏輯內(nèi)聚偶然內(nèi)聚否是數(shù)據(jù)流控制流兩者都不是是是是否否否軟件工程軟件工程45456.盡可能盡可能降低耦合降低耦合主程序主程序子程序子程序1子程序子程序2模塊之間無連接,則無耦合模塊之間無連接,則無耦合主程序主程序子程序子程序1子程序子程序2模塊之間存在連接,則存在耦合模塊之間存在連接,則存在耦合耦合耦合是是模塊之間的互連程度度量模塊之間的互連程度度量模塊之間的連接有:調(diào)用,返回,進(jìn)入,跳出模塊之間的連接有:調(diào)用,返回,進(jìn)入,跳出軟件工程軟件工程46466.盡可能盡可能
40、降低耦合降低耦合u模塊間存在相互依賴關(guān)系即為耦合。不同模塊間存在相互依賴關(guān)系即為耦合。不同耦合類型按照耦合性從高向低排列有:耦合類型按照耦合性從高向低排列有:(1) 內(nèi)容耦合內(nèi)容耦合如果發(fā)生下列情形,模塊間就是內(nèi)容耦合如果發(fā)生下列情形,模塊間就是內(nèi)容耦合: 一個(gè)模塊直接訪問另一個(gè)模塊的內(nèi)部數(shù)一個(gè)模塊直接訪問另一個(gè)模塊的內(nèi)部數(shù)據(jù)據(jù);緊密緊密 耦合性耦合性 松散松散弱弱 模塊獨(dú)立性模塊獨(dú)立性 強(qiáng)強(qiáng)內(nèi)容內(nèi)容 公共公共 控制控制 標(biāo)記標(biāo)記 數(shù)據(jù)數(shù)據(jù) 例程調(diào)例程調(diào) 類型使類型使 外部外部耦合耦合 耦合耦合 耦合耦合 耦合耦合 耦合耦合 用耦合用耦合 用耦合用耦合 耦合耦合軟件工程軟件工程4747 一個(gè)模
41、塊不通過正常入口轉(zhuǎn)到另一模塊一個(gè)模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)部內(nèi)部; 兩個(gè)模塊有一部分程序代碼重迭(只可兩個(gè)模塊有一部分程序代碼重迭(只可能出現(xiàn)在匯編語言中)能出現(xiàn)在匯編語言中);內(nèi)容耦合始終要避免它。內(nèi)容耦合始終要避免它。AB進(jìn)入另一模塊內(nèi)部進(jìn)入另一模塊內(nèi)部模塊代碼重疊模塊代碼重疊AB軟件工程軟件工程4848(2)公共耦合公共耦合若一組模塊都訪問同一個(gè)公共數(shù)據(jù)環(huán)境,則它們之間若一組模塊都訪問同一個(gè)公共數(shù)據(jù)環(huán)境,則它們之間的耦合就是公共耦合。公共數(shù)據(jù)環(huán)境可以是全局的耦合就是公共耦合。公共數(shù)據(jù)環(huán)境可以是全局變量、全局?jǐn)?shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公變量、全局?jǐn)?shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共
42、覆蓋區(qū)等。這種耦合會(huì)引起下列問題:共覆蓋區(qū)等。這種耦合會(huì)引起下列問題:所有公共耦合模塊都與某一個(gè)公共數(shù)據(jù)環(huán)境內(nèi)所有公共耦合模塊都與某一個(gè)公共數(shù)據(jù)環(huán)境內(nèi)部各項(xiàng)的物理安排有關(guān),若某個(gè)數(shù)據(jù)的大小被部各項(xiàng)的物理安排有關(guān),若某個(gè)數(shù)據(jù)的大小被修改,將會(huì)影響到所有的模塊。修改,將會(huì)影響到所有的模塊。無法控制各個(gè)模塊對公共數(shù)據(jù)的存取,嚴(yán)重影無法控制各個(gè)模塊對公共數(shù)據(jù)的存取,嚴(yán)重影響軟件模塊的可靠性和適應(yīng)性。響軟件模塊的可靠性和適應(yīng)性。軟件工程軟件工程4949 公共數(shù)據(jù)名的使用,明顯降低了程序的公共數(shù)據(jù)名的使用,明顯降低了程序的可讀性??勺x性。u公共耦合的復(fù)雜程度隨耦合模塊的個(gè)數(shù)增公共耦合的復(fù)雜程度隨耦合模塊的
43、個(gè)數(shù)增加而顯著增加。若只是兩模塊間有公共數(shù)加而顯著增加。若只是兩模塊間有公共數(shù)據(jù)環(huán)境,則公共耦合有兩種情況。松散公據(jù)環(huán)境,則公共耦合有兩種情況。松散公共耦合和緊密公共耦合。共耦合和緊密公共耦合。common公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū)ABcommon公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū)AB松散的公共耦合松散的公共耦合緊密的公共耦合緊密的公共耦合軟件工程軟件工程5050(3) 控制耦合控制耦合一個(gè)過程通過標(biāo)志、開關(guān)或命令顯式地控一個(gè)過程通過標(biāo)志、開關(guān)或命令顯式地控制另一個(gè)過程制另一個(gè)過程的動(dòng)作,就產(chǎn)的動(dòng)作,就產(chǎn)生控制耦合。生控制耦合。FlagFlagf1f2fn軟件工程軟件工程A A計(jì)算平均分計(jì)算平均分或最高分或最高分
44、B B平均平均/ /最高最高( (控制信號(hào)控制信號(hào)) )成績成績讀入分?jǐn)?shù)讀入分?jǐn)?shù)輸出結(jié)果輸出結(jié)果計(jì)算平均分計(jì)算平均分計(jì)算最高分計(jì)算最高分平均平均/ /最高最高? ?B B軟件工程軟件工程n控制耦合增加了理解和編程的復(fù)雜性,調(diào)用控制耦合增加了理解和編程的復(fù)雜性,調(diào)用模塊必須知道被調(diào)模塊的內(nèi)部邏輯,增加了模塊必須知道被調(diào)模塊的內(nèi)部邏輯,增加了相互依賴相互依賴n去除模塊間控制耦合的方法:去除模塊間控制耦合的方法:(1)(1)找出模塊調(diào)用時(shí)所用的一個(gè)或多個(gè)控制找出模塊調(diào)用時(shí)所用的一個(gè)或多個(gè)控制變量。變量。( (2 2) )在被調(diào)用模塊中根據(jù)控制變量找出所有在被調(diào)用模塊中根據(jù)控制變量找出所有的流程。的流
45、程。( (5 5) )將每一個(gè)流程分解為一個(gè)獨(dú)立的模塊。將每一個(gè)流程分解為一個(gè)獨(dú)立的模塊。( (4 4) )將被調(diào)用模塊內(nèi)的判定上移到調(diào)用模塊將被調(diào)用模塊內(nèi)的判定上移到調(diào)用模塊中進(jìn)行中進(jìn)行軟件工程軟件工程5353(4) 標(biāo)記耦合標(biāo)記耦合u如果一組模塊通過參數(shù)表傳遞結(jié)構(gòu)或?qū)θ绻唤M模塊通過參數(shù)表傳遞結(jié)構(gòu)或?qū)ο螅ㄗ⒁猓皇呛唵巫兞炕蚪Y(jié)構(gòu)中的某象(注意,不是簡單變量或結(jié)構(gòu)中的某一分量),就是標(biāo)記耦合。一分量),就是標(biāo)記耦合。u事實(shí)上,這組模塊共享了這個(gè)結(jié)構(gòu)或?qū)κ聦?shí)上,這組模塊共享了這個(gè)結(jié)構(gòu)或?qū)ο?。這要求這些模塊都必須清楚該結(jié)構(gòu)象。這要求這些模塊都必須清楚該結(jié)構(gòu)或?qū)ο蟮膬?nèi)部細(xì)節(jié),并按結(jié)構(gòu)要求對此或?qū)ο?/p>
46、的內(nèi)部細(xì)節(jié),并按結(jié)構(gòu)要求對此結(jié)構(gòu)或?qū)ο筮M(jìn)行操作。結(jié)構(gòu)或?qū)ο筮M(jìn)行操作。 p0 (x0, y0) p1 (x1, y1)畫線段函數(shù)畫線段函數(shù) LINE ( p0, p1) 即為標(biāo)記耦合即為標(biāo)記耦合軟件工程軟件工程5454標(biāo)記耦合標(biāo)記耦合計(jì)算水費(fèi)和電費(fèi)計(jì)算水費(fèi)和電費(fèi)計(jì)算水費(fèi)計(jì)算水費(fèi)計(jì)算電費(fèi)計(jì)算電費(fèi)住戶詳情住戶詳情水費(fèi)水費(fèi)住戶詳情住戶詳情電費(fèi)電費(fèi)模塊之間的特征聯(lián)結(jié)模塊之間的特征聯(lián)結(jié)軟件工程軟件工程5555(5) 數(shù)據(jù)耦合數(shù)據(jù)耦合u如果模塊之間的訪問是通過數(shù)據(jù)參數(shù)如果模塊之間的訪問是通過數(shù)據(jù)參數(shù)(不是控制參數(shù)、結(jié)構(gòu)或?qū)ο髤?shù)、公(不是控制參數(shù)、結(jié)構(gòu)或?qū)ο髤?shù)、公共數(shù)據(jù)結(jié)構(gòu))來交換輸入、輸出信息的,共數(shù)據(jù)
47、結(jié)構(gòu))來交換輸入、輸出信息的,則稱這種耦合為數(shù)據(jù)耦合。則稱這種耦合為數(shù)據(jù)耦合。u由于限制了只通過參數(shù)表傳遞數(shù)據(jù),數(shù)由于限制了只通過參數(shù)表傳遞數(shù)據(jù),數(shù)據(jù)耦合是松散的耦合,模塊之間的獨(dú)立據(jù)耦合是松散的耦合,模塊之間的獨(dú)立性比較強(qiáng)性比較強(qiáng)數(shù)據(jù)耦合數(shù)據(jù)耦合 LINE ( x0, y0, x1, y1)p0 (x0, y0) p1 (x1, y1)軟件工程軟件工程5656數(shù)據(jù)耦合數(shù)據(jù)耦合開發(fā)貨單開發(fā)貨單計(jì)算金額計(jì)算金額單價(jià)單價(jià)數(shù)量數(shù)量金額金額軟件工程軟件工程5757特征特征耦合與數(shù)據(jù)耦合的相互轉(zhuǎn)換耦合與數(shù)據(jù)耦合的相互轉(zhuǎn)換計(jì)算水費(fèi)和電費(fèi)計(jì)算水費(fèi)和電費(fèi)計(jì)算水費(fèi)計(jì)算水費(fèi)計(jì)算電費(fèi)計(jì)算電費(fèi)本月用水量本月用水量水費(fèi)
48、水費(fèi)本月用電量本月用電量電費(fèi)電費(fèi)模塊之間的特征聯(lián)結(jié)模塊之間的特征聯(lián)結(jié)軟件工程軟件工程改控制耦合為數(shù)據(jù)耦合舉例改控制耦合為數(shù)據(jù)耦合舉例A A計(jì)算平均分計(jì)算平均分B1B1平均成績最高成績計(jì)算最高分計(jì)算最高分B2B2軟件工程軟件工程5959(6) 例程調(diào)用耦合例程調(diào)用耦合u一個(gè)程序(或?qū)ο蟮牟僮鳎┱{(diào)用另一個(gè)一個(gè)程序(或?qū)ο蟮牟僮鳎┱{(diào)用另一個(gè)程序(或另一個(gè)對象的操作),就產(chǎn)生程序(或另一個(gè)對象的操作),就產(chǎn)生例程調(diào)用耦合。例程調(diào)用耦合。u如果幾個(gè)程序之間出現(xiàn)例程調(diào)用耦合,如果幾個(gè)程序之間出現(xiàn)例程調(diào)用耦合,就意味著它們必須依賴對方的行為,而就意味著它們必須依賴對方的行為,而且調(diào)用者依賴被調(diào)用者的接口。且
49、調(diào)用者依賴被調(diào)用者的接口。u在所有的系統(tǒng)中都存在這種類型的耦合。在所有的系統(tǒng)中都存在這種類型的耦合。(7) 類型使用耦合類型使用耦合u類將實(shí)例變量或本地變量聲明為另一個(gè)類將實(shí)例變量或本地變量聲明為另一個(gè)類的實(shí)例,就產(chǎn)生類型(嵌套)耦合。類的實(shí)例,就產(chǎn)生類型(嵌套)耦合。軟件工程軟件工程6060u典型的事例如在定義一個(gè)典型的事例如在定義一個(gè)“幾何圖形幾何圖形”類時(shí)用到了類時(shí)用到了“點(diǎn)點(diǎn)”類的實(shí)例。類型使用類的實(shí)例。類型使用耦合的問題是:當(dāng)類型定義改變時(shí),該耦合的問題是:當(dāng)類型定義改變時(shí),該類型的使用者也必須改變。類型的使用者也必須改變。 (8) 包含包含/引入耦合引入耦合u一個(gè)構(gòu)件引入(一個(gè)構(gòu)件
50、引入(import)一個(gè)包時(shí)就產(chǎn))一個(gè)包時(shí)就產(chǎn)生引入耦合,一個(gè)構(gòu)件包含(生引入耦合,一個(gè)構(gòu)件包含(include)另一個(gè)構(gòu)件時(shí),就產(chǎn)生包含耦合。另一個(gè)構(gòu)件時(shí),就產(chǎn)生包含耦合。u包含包含引入耦合是必需的,因?yàn)樗试S你引入耦合是必需的,因?yàn)樗试S你使用庫或其他子系統(tǒng)的功能。但要注意使用庫或其他子系統(tǒng)的功能。但要注意可能的副作用。例如操作同名??赡艿母弊饔?。例如操作同名。 軟件工程軟件工程6161(9) 外部耦合外部耦合模塊對外部系統(tǒng),如操作系統(tǒng)、共享庫或模塊對外部系統(tǒng),如操作系統(tǒng)、共享庫或硬件有依賴關(guān)系時(shí)就產(chǎn)生外部耦合??赏ㄓ布幸蕾囮P(guān)系時(shí)就產(chǎn)生外部耦合??赏ㄟ^信息隱蔽減少這種依賴關(guān)系。過信息隱蔽
51、減少這種依賴關(guān)系。u實(shí)際上,兩個(gè)模塊之間的耦合不只是一種實(shí)際上,兩個(gè)模塊之間的耦合不只是一種類型,而是多種類型的混合。這就要求設(shè)類型,而是多種類型的混合。這就要求設(shè)計(jì)者按照降低耦合性的原則進(jìn)行比較和分計(jì)者按照降低耦合性的原則進(jìn)行比較和分析,逐步加以改進(jìn)。析,逐步加以改進(jìn)。 7.盡可能提高抽象層次盡可能提高抽象層次u設(shè)計(jì)應(yīng)隱藏或推遲考慮細(xì)節(jié)以降低復(fù)雜性。設(shè)計(jì)應(yīng)隱藏或推遲考慮細(xì)節(jié)以降低復(fù)雜性。軟件工程軟件工程6262 類是包含過程抽象的數(shù)據(jù)抽象。類是包含過程抽象的數(shù)據(jù)抽象。 使用泛化關(guān)系(父類)和接口,可進(jìn)一步使用泛化關(guān)系(父類)和接口,可進(jìn)一步提高抽象層次。提高抽象層次。 類中公有操作越少,抽象
52、程度越高。類中公有操作越少,抽象程度越高。 類中所有變量都是私有的,抽象程度達(dá)到類中所有變量都是私有的,抽象程度達(dá)到最高。最高。u抽象可確保在設(shè)計(jì)時(shí)不必關(guān)心不必要的細(xì)節(jié),抽象可確保在設(shè)計(jì)時(shí)不必關(guān)心不必要的細(xì)節(jié),能把握問題的本質(zhì)并做出重要決策。能把握問題的本質(zhì)并做出重要決策。8.8.盡可能提高可復(fù)用性盡可能提高可復(fù)用性u復(fù)用性設(shè)計(jì)有兩方面的含義:復(fù)用性設(shè)計(jì)有兩方面的含義:軟件工程軟件工程6363 盡量使用已有的構(gòu)件(包括開發(fā)環(huán)境提盡量使用已有的構(gòu)件(包括開發(fā)環(huán)境提供的及以往開發(fā)類似系統(tǒng)時(shí)創(chuàng)建的);供的及以往開發(fā)類似系統(tǒng)時(shí)創(chuàng)建的); 在設(shè)計(jì)時(shí)就應(yīng)該考慮將來的重復(fù)利用問在設(shè)計(jì)時(shí)就應(yīng)該考慮將來的重復(fù)利
53、用問題,有意識(shí)地按照可復(fù)用構(gòu)件的要求建題,有意識(shí)地按照可復(fù)用構(gòu)件的要求建立自己的設(shè)計(jì)。立自己的設(shè)計(jì)。u復(fù)用構(gòu)件的機(jī)制包括復(fù)用構(gòu)件的機(jī)制包括過程調(diào)用過程調(diào)用和和繼承父類繼承父類。u在軟件設(shè)計(jì)中引入復(fù)用性的方法有:在軟件設(shè)計(jì)中引入復(fù)用性的方法有: 使設(shè)計(jì)盡可能通用(數(shù)據(jù)類型參數(shù)化,使設(shè)計(jì)盡可能通用(數(shù)據(jù)類型參數(shù)化,所有數(shù)據(jù)自包含);所有數(shù)據(jù)自包含); 提高構(gòu)件的獨(dú)立性和抽象性(提高內(nèi)聚、提高構(gòu)件的獨(dú)立性和抽象性(提高內(nèi)聚、降低耦合、提高抽象性);降低耦合、提高抽象性);軟件工程軟件工程6464 設(shè)計(jì)系統(tǒng)時(shí)要包含鉤子(建立一些表格設(shè)計(jì)系統(tǒng)時(shí)要包含鉤子(建立一些表格或鏈接,用以納入新的功能);或鏈接,
54、用以納入新的功能); 盡量簡化設(shè)計(jì)(只做簡單事情,易于與盡量簡化設(shè)計(jì)(只做簡單事情,易于與其他構(gòu)件配合,輸入其他構(gòu)件配合,輸入輸出單一);輸出單一); u可以在算法、類、過程、框架和完整應(yīng)用可以在算法、類、過程、框架和完整應(yīng)用程序的級別上創(chuàng)建可復(fù)用性。程序的級別上創(chuàng)建可復(fù)用性。9.靈活性設(shè)計(jì)靈活性設(shè)計(jì)u積極預(yù)測將來可能在實(shí)現(xiàn)和功能方面的變積極預(yù)測將來可能在實(shí)現(xiàn)和功能方面的變化,并化,并采取相應(yīng)措施。采取相應(yīng)措施。u在設(shè)計(jì)中引入靈活性的方法有:在設(shè)計(jì)中引入靈活性的方法有: 降低耦合并提高內(nèi)聚(提高替換能力)降低耦合并提高內(nèi)聚(提高替換能力)軟件工程軟件工程6565 建立抽象(創(chuàng)建有多態(tài)操作的接口
55、和父類)建立抽象(創(chuàng)建有多態(tài)操作的接口和父類) 不要將代碼寫死(消除代碼中的常數(shù))不要將代碼寫死(消除代碼中的常數(shù)) 拋出異常(由操作的調(diào)用者處理異常)拋出異常(由操作的調(diào)用者處理異常) 使用并創(chuàng)建可復(fù)用的代碼使用并創(chuàng)建可復(fù)用的代碼10. 預(yù)防過期預(yù)防過期u積極預(yù)測將來可能在技術(shù)和運(yùn)行環(huán)境上的變積極預(yù)測將來可能在技術(shù)和運(yùn)行環(huán)境上的變化,并為此采取相應(yīng)措施?;榇瞬扇∠鄳?yīng)措施。u在設(shè)計(jì)中應(yīng)遵循的預(yù)計(jì)過期的規(guī)則有:在設(shè)計(jì)中應(yīng)遵循的預(yù)計(jì)過期的規(guī)則有: 避免使用早期發(fā)布的技術(shù)避免使用早期發(fā)布的技術(shù) 避免使用針對特定環(huán)境的軟件庫避免使用針對特定環(huán)境的軟件庫軟件工程軟件工程6666 避免使用軟件庫中未
56、編檔的或很少使用的避免使用軟件庫中未編檔的或很少使用的功能功能 避免使用小公司或可能不提供長期支持的避免使用小公司或可能不提供長期支持的公司提供的可復(fù)用構(gòu)件或特殊硬件公司提供的可復(fù)用構(gòu)件或特殊硬件 使用眾多廠商支持的標(biāo)準(zhǔn)語言和技術(shù)使用眾多廠商支持的標(biāo)準(zhǔn)語言和技術(shù)11. 可移植性設(shè)計(jì)可移植性設(shè)計(jì)u可移植性設(shè)計(jì)的主要目標(biāo)是讓軟件在盡可能可移植性設(shè)計(jì)的主要目標(biāo)是讓軟件在盡可能多的平臺(tái)上運(yùn)行。多的平臺(tái)上運(yùn)行。u實(shí)現(xiàn)可移植性的規(guī)則有:實(shí)現(xiàn)可移植性的規(guī)則有: 避免使用特定環(huán)境的專有功能避免使用特定環(huán)境的專有功能軟件工程軟件工程6767 使用不依賴特定平臺(tái)的程序設(shè)計(jì)語言使用不依賴特定平臺(tái)的程序設(shè)計(jì)語言 小心
57、使用可能依賴某一平臺(tái)的類庫小心使用可能依賴某一平臺(tái)的類庫 了解其他語言可能依賴特殊硬件結(jié)構(gòu)的功了解其他語言可能依賴特殊硬件結(jié)構(gòu)的功能和文本文件的差異能和文本文件的差異12. 可測試性設(shè)計(jì)可測試性設(shè)計(jì)u設(shè)計(jì)時(shí)采取措施使得測試易于進(jìn)行。設(shè)計(jì)時(shí)采取措施使得測試易于進(jìn)行。u可測試性設(shè)計(jì)的最重要的方法是保證代碼的可測試性設(shè)計(jì)的最重要的方法是保證代碼的所有功能都能脫離圖形用戶界面執(zhí)行。所有功能都能脫離圖形用戶界面執(zhí)行。u需要考慮的可測試性設(shè)計(jì)的規(guī)則如下:需要考慮的可測試性設(shè)計(jì)的規(guī)則如下: 堅(jiān)持測試驅(qū)動(dòng)設(shè)計(jì)(測試先行)的方法。堅(jiān)持測試驅(qū)動(dòng)設(shè)計(jì)(測試先行)的方法。軟件工程軟件工程6868 函數(shù)小型化。盡量做到
58、一個(gè)函數(shù)對應(yīng)一個(gè)函數(shù)小型化。盡量做到一個(gè)函數(shù)對應(yīng)一個(gè)操作,使函數(shù)小型化。操作,使函數(shù)小型化。 數(shù)據(jù)的顯示與控制分離。將處理代碼與數(shù)據(jù)的顯示與控制分離。將處理代碼與 GUI分離。這樣,各種分離。這樣,各種GUI 動(dòng)作就變成了動(dòng)作就變成了模型上的簡單方法調(diào)用。模型上的簡單方法調(diào)用。13. 防御性設(shè)計(jì)防御性設(shè)計(jì)u為提高可靠性,應(yīng)確保不引入任何缺陷,能為提高可靠性,應(yīng)確保不引入任何缺陷,能夠處理其他代碼不適當(dāng)使用構(gòu)件引起的問題。夠處理其他代碼不適當(dāng)使用構(gòu)件引起的問題。u按契約設(shè)計(jì)是防御性設(shè)計(jì)技術(shù),其核心思想:按契約設(shè)計(jì)是防御性設(shè)計(jì)技術(shù),其核心思想: 被調(diào)用操作中設(shè)置為正常執(zhí)行必須滿足的被調(diào)用操作中設(shè)置
59、為正常執(zhí)行必須滿足的前置條件前置條件(precondition):軟件工程軟件工程6969 被調(diào)用操作正常執(zhí)行所得到的結(jié)果即為被調(diào)用操作正常執(zhí)行所得到的結(jié)果即為后置條件后置條件 (postcondition):要求被調(diào)用:要求被調(diào)用操作在返回前有責(zé)任保證這些后置條件操作在返回前有責(zé)任保證這些后置條件成立。成立。 被調(diào)用操作在執(zhí)行時(shí)確保不會(huì)被修改的被調(diào)用操作在執(zhí)行時(shí)確保不會(huì)被修改的不變量不變量(invariant)。u前置條件、后置條件和不變式都是布爾表前置條件、后置條件和不變式都是布爾表達(dá)式,其計(jì)算結(jié)果為假,表示有錯(cuò)誤發(fā)生。達(dá)式,其計(jì)算結(jié)果為假,表示有錯(cuò)誤發(fā)生。u可以使用斷言機(jī)制。在重要構(gòu)件的
60、邊界可以使用斷言機(jī)制。在重要構(gòu)件的邊界(如層)應(yīng)始終保留嚴(yán)格的斷言檢測。(如層)應(yīng)始終保留嚴(yán)格的斷言檢測。 軟件工程軟件工程7070n結(jié)構(gòu)化設(shè)計(jì)(結(jié)構(gòu)化設(shè)計(jì)(structured design,SD)是)是一種面向數(shù)據(jù)流的設(shè)計(jì)方法,它可以與一種面向數(shù)據(jù)流的設(shè)計(jì)方法,它可以與SA方法銜接。方法銜接。n結(jié)構(gòu)化設(shè)計(jì)是基于模塊化、自頂向下細(xì)結(jié)構(gòu)化設(shè)計(jì)是基于模塊化、自頂向下細(xì)化、結(jié)構(gòu)化程序設(shè)計(jì)等程序設(shè)計(jì)技術(shù)基化、結(jié)構(gòu)化程序設(shè)計(jì)等程序設(shè)計(jì)技術(shù)基礎(chǔ)上發(fā)展起來的?;舅枷胧菍⑾到y(tǒng)設(shè)礎(chǔ)上發(fā)展起來的?;舅枷胧菍⑾到y(tǒng)設(shè)計(jì)成由相對獨(dú)立、功能單一的模塊組成計(jì)成由相對獨(dú)立、功能單一的模塊組成的結(jié)構(gòu)。的結(jié)構(gòu)。4.4 傳統(tǒng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一年級上冊語文教案
- 農(nóng)藥殘留土壤生物降解研究
- 高一化學(xué)教案:專題第二單元第四課時(shí)糖類
- 2024屆浙江省溫州十五校聯(lián)合體高考化學(xué)押題試卷含解析
- 2024高中化學(xué)第四章電化學(xué)基礎(chǔ)第一節(jié)原電池達(dá)標(biāo)訓(xùn)練含解析新人教版選修4
- 2024高中地理課時(shí)作業(yè)9資源的跨區(qū)域調(diào)配-以我國西氣東輸為例含解析新人教版必修3
- 2024高中語文開學(xué)第一課學(xué)生觀后感范文700字范文三篇素材
- 2024高中語文第五單元散而不亂氣脈中貫伶官傳序作業(yè)含解析新人教版選修中國古代詩歌散文欣賞
- 2024高中語文精讀課文一第3課2在動(dòng)亂中成長起來作業(yè)含解析新人教版選修中外傳記蚜
- 2024高考化學(xué)一輪復(fù)習(xí)第十章化學(xué)實(shí)驗(yàn)基礎(chǔ)第四講實(shí)驗(yàn)方案的設(shè)計(jì)與評價(jià)規(guī)范演練含解析新人教版
- 《國有控股上市公司高管薪酬的管控研究》
- 餐飲業(yè)環(huán)境保護(hù)管理方案
- 食品安全分享
- 礦山機(jī)械設(shè)備安全管理制度
- 《創(chuàng)傷失血性休克中國急診專家共識(shí)(2023)》解讀課件
- 小學(xué)六年級數(shù)學(xué)100道題解分?jǐn)?shù)方程
- 2022年五年級數(shù)學(xué)興趣小組活動(dòng)記錄
- Q∕GDW 12127-2021 低壓開關(guān)柜技術(shù)規(guī)范
- YY 0838-2021 微波熱凝設(shè)備
- 商品房預(yù)售合同登記備案表
- 版式設(shè)計(jì)發(fā)展歷程-ppt課件
評論
0/150
提交評論