清華大學殷仁昆教授講授《軟件工程》講義-03_第1頁
清華大學殷仁昆教授講授《軟件工程》講義-03_第2頁
清華大學殷仁昆教授講授《軟件工程》講義-03_第3頁
清華大學殷仁昆教授講授《軟件工程》講義-03_第4頁
清華大學殷仁昆教授講授《軟件工程》講義-03_第5頁
已閱讀5頁,還剩89頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、軟件工程軟件工程第三章第三章 軟件設(shè)計軟件設(shè)計3.1 3.1 軟件設(shè)計的概念軟件設(shè)計的概念3.2 3.2 功能獨立性功能獨立性3.3 3.3 結(jié)構(gòu)化設(shè)計方法結(jié)構(gòu)化設(shè)計方法3.4 3.4 過程設(shè)計過程設(shè)計清華大學計算機系清華大學計算機系 殷人昆殷人昆1/10/20221 1軟件工程軟件工程3.1 3.1 軟件設(shè)計的概念軟件設(shè)計的概念n軟件設(shè)計的基本目標是軟件設(shè)計的基本目標是用比較抽象概括的方式用比較抽象概括的方式確定目標系統(tǒng)如何完成預(yù)定的任務(wù)確定目標系統(tǒng)如何完成預(yù)定的任務(wù),即軟件設(shè),即軟件設(shè)計是確定系統(tǒng)的物理模型。計是確定系統(tǒng)的物理模型。n從技術(shù)觀點來看,軟件設(shè)計包括從技術(shù)觀點來看,軟件設(shè)計包括

2、數(shù)據(jù)設(shè)計數(shù)據(jù)設(shè)計、體體系結(jié)構(gòu)設(shè)計系結(jié)構(gòu)設(shè)計、接口設(shè)計接口設(shè)計、過程設(shè)計過程設(shè)計。n數(shù)據(jù)設(shè)計數(shù)據(jù)設(shè)計將實體關(guān)系圖中描述的對象和關(guān)系,將實體關(guān)系圖中描述的對象和關(guān)系,以及數(shù)據(jù)字典中描述的詳細數(shù)據(jù)內(nèi)容轉(zhuǎn)化為數(shù)以及數(shù)據(jù)字典中描述的詳細數(shù)據(jù)內(nèi)容轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義。據(jù)結(jié)構(gòu)的定義。1/10/20222 2軟件工程軟件工程 體系結(jié)構(gòu)設(shè)計體系結(jié)構(gòu)設(shè)計定義軟件系統(tǒng)各主要成份之間的定義軟件系統(tǒng)各主要成份之間的關(guān)系。關(guān)系。 接口設(shè)計接口設(shè)計根據(jù)數(shù)據(jù)流圖定義軟件內(nèi)部各成份之根據(jù)數(shù)據(jù)流圖定義軟件內(nèi)部各成份之間、軟件與其它協(xié)同系統(tǒng)之間及軟件與用戶之間、軟件與其它協(xié)同系統(tǒng)之間及軟件與用戶之間的交互機制。間的交互機制。 過程

3、設(shè)計過程設(shè)計則是把結(jié)構(gòu)成份轉(zhuǎn)換成軟件的過程性則是把結(jié)構(gòu)成份轉(zhuǎn)換成軟件的過程性描述。描述。1/10/20223 3軟件工程軟件工程將分析模型轉(zhuǎn)換為設(shè)計將分析模型轉(zhuǎn)換為設(shè)計數(shù)據(jù)字典數(shù)據(jù)字典數(shù)數(shù)據(jù)據(jù)流流圖圖實實體體關(guān)關(guān)系系圖圖狀態(tài)轉(zhuǎn)換圖狀態(tài)轉(zhuǎn)換圖加加工工規(guī)規(guī)格格說說明明控控制制規(guī)規(guī) 格格說說明明數(shù)數(shù)據(jù)據(jù)對對象象描描述述過程設(shè)計過程設(shè)計接口設(shè)計接口設(shè)計體系結(jié)構(gòu)設(shè)計體系結(jié)構(gòu)設(shè)計數(shù)據(jù)設(shè)計數(shù)據(jù)設(shè)計1/10/20224 4軟件工程軟件工程n從工程管理角度來看,軟件設(shè)計分兩步完成:從工程管理角度來看,軟件設(shè)計分兩步完成:概要設(shè)計和詳細設(shè)計。概要設(shè)計和詳細設(shè)計。n概要設(shè)計概要設(shè)計將軟件需求將軟件需求轉(zhuǎn)化為軟件體系

4、結(jié)構(gòu)轉(zhuǎn)化為軟件體系結(jié)構(gòu)確定系統(tǒng)級接口確定系統(tǒng)級接口全局數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式。全局數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式。n詳細設(shè)計詳細設(shè)計確立每個模塊的實現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu)確立每個模塊的實現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu)用適當方法表示算法和數(shù)據(jù)結(jié)構(gòu)的細節(jié)用適當方法表示算法和數(shù)據(jù)結(jié)構(gòu)的細節(jié)1/10/20225 5軟件工程軟件工程n軟件設(shè)計是后續(xù)開發(fā)步驟及軟件維護工作的基軟件設(shè)計是后續(xù)開發(fā)步驟及軟件維護工作的基礎(chǔ)。如果沒有設(shè)計,只能建立一個不穩(wěn)定的系礎(chǔ)。如果沒有設(shè)計,只能建立一個不穩(wěn)定的系統(tǒng)結(jié)構(gòu)。統(tǒng)結(jié)構(gòu)。設(shè)計設(shè)計編碼編碼測試測試維護維護測試測試編碼編碼維護維護有軟件設(shè)計有軟件設(shè)計 沒有軟件設(shè)計沒有軟件設(shè)計1/10/20226

5、 6軟件工程軟件工程n軟件設(shè)計既是過程又是模型。軟件設(shè)計既是過程又是模型。n設(shè)計過程設(shè)計過程是一系列的迭代步驟,使設(shè)計人員能是一系列的迭代步驟,使設(shè)計人員能夠描述目標系統(tǒng)的各個側(cè)面。夠描述目標系統(tǒng)的各個側(cè)面。n設(shè)計模型設(shè)計模型首先描述目標系統(tǒng)的整體架構(gòu),然后首先描述目標系統(tǒng)的整體架構(gòu),然后逐步細化架構(gòu)得到構(gòu)造每個細節(jié)的指導原則,逐步細化架構(gòu)得到構(gòu)造每個細節(jié)的指導原則,從而得到系統(tǒng)的一系列不同的視圖。從而得到系統(tǒng)的一系列不同的視圖。n良好的設(shè)計原則可為設(shè)計過程導航。良好的設(shè)計原則可為設(shè)計過程導航。n衡量衡量設(shè)計過程設(shè)計過程的技術(shù)原則:的技術(shù)原則: 設(shè)計必須實現(xiàn)分析模型中描述的所有顯式需設(shè)計必須實

6、現(xiàn)分析模型中描述的所有顯式需求,必須滿足用戶希望的所有隱式需求。求,必須滿足用戶希望的所有隱式需求。衡量軟件設(shè)計的原則衡量軟件設(shè)計的原則1/10/20227 7軟件工程軟件工程 對于開發(fā)者和未來的維護者而言,對于開發(fā)者和未來的維護者而言,設(shè)計必須設(shè)計必須是可讀的、可理解的,使得將來易于編程、是可讀的、可理解的,使得將來易于編程、易于測試、易于維護。易于測試、易于維護。 設(shè)計應(yīng)該給出軟件的全貌,包括從實現(xiàn)角度設(shè)計應(yīng)該給出軟件的全貌,包括從實現(xiàn)角度可看到的數(shù)據(jù)、功能、行為。可看到的數(shù)據(jù)、功能、行為。n衡量衡量設(shè)計模型設(shè)計模型的技術(shù)原則的技術(shù)原則 設(shè)計模型應(yīng)該是一個分層結(jié)構(gòu)。該結(jié)構(gòu):設(shè)計模型應(yīng)該是一

7、個分層結(jié)構(gòu)。該結(jié)構(gòu): 使用可識別的使用可識別的設(shè)計模式設(shè)計模式搭建系統(tǒng)結(jié)構(gòu)。搭建系統(tǒng)結(jié)構(gòu)。 用顯示良好設(shè)計特征的用顯示良好設(shè)計特征的構(gòu)件構(gòu)件構(gòu)成。構(gòu)成。 可以用可以用演化的方式演化的方式實現(xiàn)。實現(xiàn)。 設(shè)計應(yīng)當模塊化。設(shè)計應(yīng)當模塊化。1/10/20228 8軟件工程軟件工程 設(shè)計應(yīng)當包含數(shù)據(jù)、體系結(jié)構(gòu)、接口和構(gòu)件設(shè)計應(yīng)當包含數(shù)據(jù)、體系結(jié)構(gòu)、接口和構(gòu)件(模塊)的清晰的視圖。(模塊)的清晰的視圖。 設(shè)計應(yīng)當根據(jù)將要實現(xiàn)的對象和數(shù)據(jù)模式導出設(shè)計應(yīng)當根據(jù)將要實現(xiàn)的對象和數(shù)據(jù)模式導出合適的數(shù)據(jù)結(jié)構(gòu)。合適的數(shù)據(jù)結(jié)構(gòu)。 設(shè)計應(yīng)當建立具有獨立功能特征的構(gòu)件。設(shè)計應(yīng)當建立具有獨立功能特征的構(gòu)件。 設(shè)計應(yīng)當建立能夠

8、降低模塊與外部環(huán)境之間復(fù)設(shè)計應(yīng)當建立能夠降低模塊與外部環(huán)境之間復(fù)雜連接的接口。雜連接的接口。 設(shè)計模型應(yīng)當通過使用軟件需求信息所驅(qū)動的設(shè)計模型應(yīng)當通過使用軟件需求信息所驅(qū)動的可重復(fù)的方法導出??芍貜?fù)的方法導出。nDavis的軟件設(shè)計原則的軟件設(shè)計原則 設(shè)計應(yīng)具有設(shè)計應(yīng)具有可跟蹤性可跟蹤性,能回溯到軟件需求,能回溯到軟件需求;1/10/20229 9軟件工程軟件工程 設(shè)計不必每次都從頭做起,可以復(fù)用已有的設(shè)計不必每次都從頭做起,可以復(fù)用已有的設(shè)計模式和數(shù)據(jù)模式。設(shè)計模式和數(shù)據(jù)模式。 設(shè)計應(yīng)當縮小軟件與現(xiàn)實世界中問題的設(shè)計應(yīng)當縮小軟件與現(xiàn)實世界中問題的“智智力距離力距離”,盡量逼近問題領(lǐng)域的結(jié)構(gòu),

9、盡量逼近問題領(lǐng)域的結(jié)構(gòu); 設(shè)計應(yīng)具有一致性和集成性。整個系統(tǒng)應(yīng)具設(shè)計應(yīng)具有一致性和集成性。整個系統(tǒng)應(yīng)具有統(tǒng)一的風格和格式,具有良好的接口。有統(tǒng)一的風格和格式,具有良好的接口。 設(shè)計結(jié)果應(yīng)能適應(yīng)未來可能的變更設(shè)計結(jié)果應(yīng)能適應(yīng)未來可能的變更; 設(shè)計不是編碼,編碼也不是設(shè)計。設(shè)計模型設(shè)計不是編碼,編碼也不是設(shè)計。設(shè)計模型的抽象級別比源代碼高。在編碼級別上唯一的抽象級別比源代碼高。在編碼級別上唯一的設(shè)計決策是補充一些實現(xiàn)細節(jié)。的設(shè)計決策是補充一些實現(xiàn)細節(jié)。1/10/20221010軟件工程軟件工程 設(shè)計應(yīng)具有容錯性和異常處理能力。對于異設(shè)計應(yīng)具有容錯性和異常處理能力。對于異常數(shù)據(jù)、事件、操作條件等能夠

10、平滑處理。常數(shù)據(jù)、事件、操作條件等能夠平滑處理。 在建立設(shè)計方案時就應(yīng)能評估設(shè)計質(zhì)量,而在建立設(shè)計方案時就應(yīng)能評估設(shè)計質(zhì)量,而不是在系統(tǒng)編碼之后。不是在系統(tǒng)編碼之后。 應(yīng)堅持設(shè)計評審,減少概念性(語義性)的應(yīng)堅持設(shè)計評審,減少概念性(語義性)的錯誤。錯誤。1)設(shè)計應(yīng)遵循設(shè)計應(yīng)遵循抽象化抽象化的原則,的原則,數(shù)據(jù)抽象數(shù)據(jù)抽象軟件設(shè)計的主要手段軟件設(shè)計的主要手段1/10/202211 11軟件工程軟件工程 過程抽象過程抽象 是指在軟件設(shè)計中將處理過程的是指在軟件設(shè)計中將處理過程的實現(xiàn)細節(jié)隱藏在數(shù)據(jù)抽象中,可以直接通過實現(xiàn)細節(jié)隱藏在數(shù)據(jù)抽象中,可以直接通過模塊接口使用這些處理操作模塊接口使用這些處理

11、操作。 數(shù)據(jù)抽象數(shù)據(jù)抽象 是指采用抽象數(shù)據(jù)類型表示數(shù)據(jù),是指采用抽象數(shù)據(jù)類型表示數(shù)據(jù),實現(xiàn)數(shù)據(jù)封裝,使得使用者可通過接口使用實現(xiàn)數(shù)據(jù)封裝,使得使用者可通過接口使用數(shù)據(jù)而不必關(guān)心數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)。數(shù)據(jù)而不必關(guān)心數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)。2.設(shè)計應(yīng)遵循設(shè)計應(yīng)遵循自頂向下自頂向下、逐步細化逐步細化的原則,建立的原則,建立一個層次的結(jié)構(gòu)。一個層次的結(jié)構(gòu)。 將軟件體系結(jié)構(gòu)自頂向下,對過程細節(jié)和數(shù)將軟件體系結(jié)構(gòu)自頂向下,對過程細節(jié)和數(shù)據(jù)細節(jié)從抽象到具體,逐層細化,直到用編據(jù)細節(jié)從抽象到具體,逐層細化,直到用編程語言的語句能夠?qū)崿F(xiàn)為止。程語言的語句能夠?qū)崿F(xiàn)為止。1/10/20221212軟件工程軟件工程4)設(shè)計應(yīng)當遵循

12、設(shè)計應(yīng)當遵循模塊化模塊化的原則的原則。 每個模塊可獨立地開發(fā)、測試,最后組裝成每個模塊可獨立地開發(fā)、測試,最后組裝成完整的程序。完整的程序。 其出發(fā)點是本著將一種復(fù)雜問題其出發(fā)點是本著將一種復(fù)雜問題“分而治之分而治之”的原則。其目的是使程序的結(jié)構(gòu)清晰,容易的原則。其目的是使程序的結(jié)構(gòu)清晰,容易閱讀、理解、測試、修改。閱讀、理解、測試、修改。 Meyer的的良好模塊設(shè)計方法的標準良好模塊設(shè)計方法的標準a) 模塊可分解性模塊可分解性 可將系統(tǒng)按問題子問題可將系統(tǒng)按問題子問題分解的原則分解成系統(tǒng)的模塊層次結(jié)構(gòu)分解的原則分解成系統(tǒng)的模塊層次結(jié)構(gòu);b) 模塊可組裝性模塊可組裝性 可利用已有的設(shè)計構(gòu)件組可

13、利用已有的設(shè)計構(gòu)件組裝成新系統(tǒng),不必一切從頭開始。裝成新系統(tǒng),不必一切從頭開始。1/10/20221313軟件工程軟件工程c) 模塊可理解性模塊可理解性 一個模塊可不參考其他模一個模塊可不參考其他模塊而被理解;塊而被理解;d) 模塊連續(xù)性模塊連續(xù)性 對軟件需求的一些微小變更對軟件需求的一些微小變更只導致對某個模塊的修改而整個系統(tǒng)不只導致對某個模塊的修改而整個系統(tǒng)不用大動用大動;e) 模塊保護模塊保護 將模塊內(nèi)出現(xiàn)異常情況的影響將模塊內(nèi)出現(xiàn)異常情況的影響范圍限制在模塊內(nèi)部;范圍限制在模塊內(nèi)部;5)設(shè)計應(yīng)遵循設(shè)計應(yīng)遵循信息隱蔽信息隱蔽的原則的原則。 Patnas主張在開發(fā)時,將每個程序的成分隱主張

14、在開發(fā)時,將每個程序的成分隱藏在模塊內(nèi),定義每一個模塊時盡可能少藏在模塊內(nèi),定義每一個模塊時盡可能少地顯露其內(nèi)部的處理。地顯露其內(nèi)部的處理。1/10/20221414軟件工程軟件工程 每個模塊的實現(xiàn)細節(jié)對于其它模塊是隱蔽的,每個模塊的實現(xiàn)細節(jié)對于其它模塊是隱蔽的,將來修改軟件時偶然引入錯誤所造成的影響將來修改軟件時偶然引入錯誤所造成的影響就可以局限在一個或幾個模塊內(nèi)部,不致波就可以局限在一個或幾個模塊內(nèi)部,不致波及到軟件的其它部分。及到軟件的其它部分。 在可預(yù)見將來可能修改的場合,信息隱蔽可在可預(yù)見將來可能修改的場合,信息隱蔽可以提高軟件的可修改性、可測試性和可移植以提高軟件的可修改性、可測試

15、性和可移植性。性。1/10/20221515軟件工程軟件工程3.2 3.2 功能獨立性功能獨立性n功能獨立性是抽象、模塊化和信息隱蔽的直接功能獨立性是抽象、模塊化和信息隱蔽的直接產(chǎn)物。如果一個模塊能夠獨立于其他模塊被編產(chǎn)物。如果一個模塊能夠獨立于其他模塊被編程、測試和修改,則該模塊具有功能獨立性。程、測試和修改,則該模塊具有功能獨立性。n1978年年Myers提出用兩個準則來度量功能獨立提出用兩個準則來度量功能獨立性,即模塊間的耦合和模塊的內(nèi)聚。性,即模塊間的耦合和模塊的內(nèi)聚。n內(nèi)聚性內(nèi)聚性:內(nèi)聚是一個模塊內(nèi)部各個元素彼此結(jié):內(nèi)聚是一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度的度量。合的緊密程度的度

16、量。n耦合性耦合性: 耦合是模塊間互相連接的緊密程度的耦合是模塊間互相連接的緊密程度的度量,它取決于各個模塊之間接口的復(fù)雜度、度量,它取決于各個模塊之間接口的復(fù)雜度、調(diào)用方式以及哪些信息通過接口。調(diào)用方式以及哪些信息通過接口。1/10/20221616軟件工程軟件工程非直接非直接 數(shù)據(jù)數(shù)據(jù) 標記標記 控制控制 外部外部 公共公共 內(nèi)容內(nèi)容 耦合耦合 耦合耦合 耦合耦合 耦合耦合 耦合耦合 耦合耦合 耦合耦合耦合性耦合性功能獨立性功能獨立性模塊間的耦合模塊間的耦合n模塊之間耦合性越強,功能獨立性越差,這樣模塊之間耦合性越強,功能獨立性越差,這樣形成的模塊結(jié)構(gòu)界面不好。形成的模塊結(jié)構(gòu)界面不好。1/

17、10/20221717軟件工程軟件工程非直接耦合非直接耦合( (NondirectNondirect Coupling) Coupling)n兩個模塊之間沒有直接關(guān)系,它們之間的聯(lián)系完兩個模塊之間沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實現(xiàn)的。全是通過主模塊的控制和調(diào)用來實現(xiàn)的。n非直接耦合的模塊獨立性最強。非直接耦合的模塊獨立性最強。主模塊主模塊ABCEFGXYZ1/10/20221818軟件工程軟件工程數(shù)據(jù)耦合數(shù)據(jù)耦合 (Data Coupling)(Data Coupling)n一個模塊訪問另一個模塊時,彼此之間是通過簡一個模塊訪問另一個模塊時,彼此之間是通過簡單數(shù)據(jù)參

18、數(shù)單數(shù)據(jù)參數(shù) (不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量部變量) 來交換輸入、輸出信息的。來交換輸入、輸出信息的。p0 (x0, y0) p1 (x1, y1)數(shù)據(jù)耦合數(shù)據(jù)耦合 LINE ( x0, y0, x1, y1)1/10/20221919軟件工程軟件工程標記耦合標記耦合 (Stamp Coupling)(Stamp Coupling)n一組模塊通過參數(shù)表傳遞記錄信息,就是標記耦一組模塊通過參數(shù)表傳遞記錄信息,就是標記耦合。這個記錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是合。這個記錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡單變量。簡單變量。p0 (x0, y0) p1 (x1,

19、 y1)標記標記耦合耦合 LINE ( p0, p1)1/10/20222020軟件工程軟件工程控制耦合控制耦合 (Control Coupling)(Control Coupling)n如果一個模塊通過如果一個模塊通過傳送開關(guān)、標志、傳送開關(guān)、標志、名字等控制參數(shù),名字等控制參數(shù),明顯地控制選擇另明顯地控制選擇另一模塊的功能,就一模塊的功能,就是控制耦合。是控制耦合。FlagFlagf1f2fn1/10/20222121軟件工程軟件工程外部耦合(外部耦合(External CouplingExternal Coupling)n一組模塊都訪問同一全局簡單變量而不是同一一組模塊都訪問同一全局簡單

20、變量而不是同一全局數(shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)表傳遞該全全局數(shù)據(jù)結(jié)構(gòu),而且不是通過參數(shù)表傳遞該全局變量的信息,則稱之為外部耦合。局變量的信息,則稱之為外部耦合。公共耦合(公共耦合(Common CouplingCommon Coupling)n若一組模塊都訪問同一個公共數(shù)據(jù)環(huán)境,則它若一組模塊都訪問同一個公共數(shù)據(jù)環(huán)境,則它們之間的耦合就稱為公共耦合。公共的數(shù)據(jù)環(huán)們之間的耦合就稱為公共耦合。公共的數(shù)據(jù)環(huán)境可以是全局數(shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存境可以是全局數(shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)等。的公共覆蓋區(qū)等。1/10/20222222軟件工程軟件工程n公共耦合的復(fù)雜程度隨耦合模塊的個數(shù)增加而公

21、共耦合的復(fù)雜程度隨耦合模塊的個數(shù)增加而顯著增加。若只是兩模塊間有公共數(shù)據(jù)環(huán)境,顯著增加。若只是兩模塊間有公共數(shù)據(jù)環(huán)境,則公共耦合有兩種情況。松散公共耦合和緊密則公共耦合有兩種情況。松散公共耦合和緊密公共耦合。公共耦合。common公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū)ABcommon公共數(shù)據(jù)區(qū)公共數(shù)據(jù)區(qū)AB松散的公共耦合松散的公共耦合緊密的公共耦合緊密的公共耦合1/10/20222323軟件工程軟件工程n如果發(fā)生下列情形,模塊之間就是內(nèi)容耦合如果發(fā)生下列情形,模塊之間就是內(nèi)容耦合: 一個模塊直接訪問另一個模塊的內(nèi)部數(shù)據(jù)一個模塊直接訪問另一個模塊的內(nèi)部數(shù)據(jù); 一個模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)一個模塊不通過正常

22、入口轉(zhuǎn)到另一模塊內(nèi)部部; 兩個模塊有一部分程序代碼重迭兩個模塊有一部分程序代碼重迭(只可能出只可能出現(xiàn)在匯編語言中現(xiàn)在匯編語言中); 一個模塊有多個入口。一個模塊有多個入口。內(nèi)容耦合內(nèi)容耦合 (Content Coupling)(Content Coupling)1/10/20222424軟件工程軟件工程 c AB進入另一模塊內(nèi)部進入另一模塊內(nèi)部模塊代碼重疊模塊代碼重疊ABentry1 entry2 模塊多個入口模塊多個入口1/10/20222525軟件工程軟件工程模塊內(nèi)聚模塊內(nèi)聚巧合巧合 邏輯邏輯 時間時間 過程過程 通信通信 信息信息 功能功能內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)

23、聚 內(nèi)聚內(nèi)聚 內(nèi)聚內(nèi)聚內(nèi)聚性內(nèi)聚性功能獨立性功能獨立性n模塊內(nèi)聚性越強,功能獨立性越好,對于形成模塊內(nèi)聚性越強,功能獨立性越好,對于形成的模塊結(jié)構(gòu)有比較好的作用。的模塊結(jié)構(gòu)有比較好的作用。n要求模塊結(jié)構(gòu)達到高內(nèi)聚,低耦合。要求模塊結(jié)構(gòu)達到高內(nèi)聚,低耦合。1/10/20222626軟件工程軟件工程n一個模塊中各個部分都是完成某一具體功能必一個模塊中各個部分都是完成某一具體功能必不可少的組成部分,或者說該模塊中所有部分不可少的組成部分,或者說該模塊中所有部分都是為了完成一項具體功能而協(xié)同工作,緊密都是為了完成一項具體功能而協(xié)同工作,緊密聯(lián)系,不可分割的。則稱該模塊為功能內(nèi)聚模聯(lián)系,不可分割的。則稱

24、該模塊為功能內(nèi)聚模塊。塊。n功能內(nèi)聚模塊的功能獨立性最強。功能內(nèi)聚模塊的功能獨立性最強。功能內(nèi)聚功能內(nèi)聚 (Functional Cohesion)(Functional Cohesion)1/10/20222727軟件工程軟件工程n這種模塊完成多個功能,各個功能相互獨立但這種模塊完成多個功能,各個功能相互獨立但都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項功能有一個都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項功能有一個唯一的入口點。這個模塊將根據(jù)不同的要求,唯一的入口點。這個模塊將根據(jù)不同的要求,確定該執(zhí)行哪一個功能。確定該執(zhí)行哪一個功能。n由于這個模塊的所有功能都是基于同一個數(shù)據(jù)由于這個模塊的所有功能都是基于同一個數(shù)據(jù)

25、結(jié)構(gòu)(符號表),因此,它是一個信息內(nèi)聚的結(jié)構(gòu)(符號表),因此,它是一個信息內(nèi)聚的模塊。模塊。n信息內(nèi)聚模塊可以看成是多個功能內(nèi)聚模塊的信息內(nèi)聚模塊可以看成是多個功能內(nèi)聚模塊的組合,并且達到信息的隱蔽。組合,并且達到信息的隱蔽。信息內(nèi)聚信息內(nèi)聚 (Informational Cohesion)(Informational Cohesion)1/10/20222828軟件工程軟件工程初始化初始化插入插入刪除刪除查找查找修改修改符符 號號 表表1/10/20222929軟件工程軟件工程n如果一個模塊內(nèi)各功能部分都使用了相同的輸如果一個模塊內(nèi)各功能部分都使用了相同的輸入數(shù)據(jù),或產(chǎn)生了相同的輸出數(shù)據(jù),則

26、稱之為入數(shù)據(jù),或產(chǎn)生了相同的輸出數(shù)據(jù),則稱之為通信內(nèi)聚模塊。通常,通信內(nèi)聚模塊是通過數(shù)通信內(nèi)聚模塊。通常,通信內(nèi)聚模塊是通過數(shù)據(jù)流圖來定義的。據(jù)流圖來定義的。n模塊內(nèi)各個功能是緊密相連的。模塊內(nèi)各個功能是緊密相連的。通信內(nèi)聚通信內(nèi)聚 (Communication Cohesion)(Communication Cohesion)1/10/20223030軟件工程軟件工程打印打印檢驗結(jié)檢驗結(jié)果果讀讀文件文件文件文件計算計算A計算計算B合并合并修改修改文件文件新文件新文件A結(jié)果結(jié)果B結(jié)果結(jié)果1/10/20223131軟件工程軟件工程n使用流程圖做為工具設(shè)計程序時,如果流程圖使用流程圖做為工具設(shè)計程

27、序時,如果流程圖太大,可以把流程圖中的某一部分劃出組成模太大,可以把流程圖中的某一部分劃出組成模塊,就得到過程內(nèi)聚模塊。塊,就得到過程內(nèi)聚模塊。n例如,把流程圖中的循環(huán)部分、判定部分、計例如,把流程圖中的循環(huán)部分、判定部分、計算部分分成三個模塊,這三個模塊都是過程內(nèi)算部分分成三個模塊,這三個模塊都是過程內(nèi)聚模塊。聚模塊。過程內(nèi)聚(過程內(nèi)聚(Procedural CohesionProcedural Cohesion)1/10/20223232軟件工程軟件工程n時間內(nèi)聚又稱為經(jīng)典內(nèi)聚。這種模塊大多為多時間內(nèi)聚又稱為經(jīng)典內(nèi)聚。這種模塊大多為多功能模塊,但模塊的各個功能的執(zhí)行與時間有功能模塊,但模塊

28、的各個功能的執(zhí)行與時間有關(guān),通常要求所有功能必須在同一時間段內(nèi)執(zhí)關(guān),通常要求所有功能必須在同一時間段內(nèi)執(zhí)行。行。n例如,初始化模塊和終止模塊就是時間內(nèi)聚模例如,初始化模塊和終止模塊就是時間內(nèi)聚模塊。塊。時間內(nèi)聚(時間內(nèi)聚(Classical CohesionClassical Cohesion)1/10/20223333軟件工程軟件工程n這種模塊把幾種相關(guān)的功能組合在一起,每次這種模塊把幾種相關(guān)的功能組合在一起,每次被調(diào)用時,由傳送給模塊的判定參數(shù)來確定該被調(diào)用時,由傳送給模塊的判定參數(shù)來確定該模塊應(yīng)執(zhí)行哪一種功能。模塊應(yīng)執(zhí)行哪一種功能。寫寫一個記錄一個記錄讀一個記錄讀一個記錄判定判定調(diào)用模塊

29、調(diào)用模塊被被調(diào)用調(diào)用模塊模塊邏輯內(nèi)聚(邏輯內(nèi)聚(Logical CohesionLogical Cohesion)1/10/20223434軟件工程軟件工程n當幾個模塊內(nèi)正好有一段代碼是相同的,將它們當幾個模塊內(nèi)正好有一段代碼是相同的,將它們抽取出來形成單獨的模塊,即巧合內(nèi)聚模塊。這抽取出來形成單獨的模塊,即巧合內(nèi)聚模塊。這種模塊沒有獨立功能,各部分之間沒有聯(lián)系,或種模塊沒有獨立功能,各部分之間沒有聯(lián)系,或聯(lián)系很松散。聯(lián)系很松散。巧合內(nèi)聚(巧合內(nèi)聚(Coincidental CohesionCoincidental Cohesion)ABCM STORE REC() TO N READ MAS

30、TER FILE ADD 1 TO x 1/10/20223535軟件工程軟件工程n結(jié)構(gòu)化設(shè)計(結(jié)構(gòu)化設(shè)計(structured design,SD)是一)是一種面向數(shù)據(jù)流的設(shè)計方法,它可以與種面向數(shù)據(jù)流的設(shè)計方法,它可以與SA方法方法銜接。銜接。n結(jié)構(gòu)化設(shè)計是基于模塊化、自頂向下細化、結(jié)構(gòu)化設(shè)計是基于模塊化、自頂向下細化、結(jié)構(gòu)化程序設(shè)計等程序設(shè)計技術(shù)基礎(chǔ)上發(fā)展結(jié)構(gòu)化程序設(shè)計等程序設(shè)計技術(shù)基礎(chǔ)上發(fā)展起來的。基本思想是將系統(tǒng)設(shè)計成由相對獨起來的?;舅枷胧菍⑾到y(tǒng)設(shè)計成由相對獨立、功能單一的模塊組成的結(jié)構(gòu)。立、功能單一的模塊組成的結(jié)構(gòu)。n該方法實施的要點是:該方法實施的要點是:1) 首先首先研究研

31、究、分析和審查數(shù)據(jù)流圖分析和審查數(shù)據(jù)流圖。 從軟件從軟件3.3 3.3 結(jié)構(gòu)化設(shè)計方法結(jié)構(gòu)化設(shè)計方法1/10/20223636軟件工程軟件工程的需求規(guī)格說明中弄清數(shù)據(jù)流加工的過程,的需求規(guī)格說明中弄清數(shù)據(jù)流加工的過程,對于發(fā)現(xiàn)的問題及時解決。對于發(fā)現(xiàn)的問題及時解決。2) 然后然后根據(jù)數(shù)據(jù)流圖確定數(shù)據(jù)處理的類型根據(jù)數(shù)據(jù)流圖確定數(shù)據(jù)處理的類型。典型的類型有兩種:變換型和事務(wù)型。針典型的類型有兩種:變換型和事務(wù)型。針對兩種對兩種不同類型分別進行分析處理。不同類型分別進行分析處理。3) 由數(shù)據(jù)流圖推導由數(shù)據(jù)流圖推導出系統(tǒng)的初始結(jié)構(gòu)圖出系統(tǒng)的初始結(jié)構(gòu)圖。4) 利用一些啟發(fā)式原則利用一些啟發(fā)式原則改進系統(tǒng)

32、初始結(jié)構(gòu)圖改進系統(tǒng)初始結(jié)構(gòu)圖,直到得到符合要求的結(jié)構(gòu)圖為止。直到得到符合要求的結(jié)構(gòu)圖為止。5) 修改和補充數(shù)據(jù)字典。修改和補充數(shù)據(jù)字典。6) 制定制定測試計劃。測試計劃。1/10/20223737軟件工程軟件工程在系統(tǒng)結(jié)構(gòu)圖中的模塊在系統(tǒng)結(jié)構(gòu)圖中的模塊n傳入模塊傳入模塊 從下屬模塊取得數(shù)據(jù),經(jīng)過某些從下屬模塊取得數(shù)據(jù),經(jīng)過某些處理處理, 再將其傳送給上級模塊。它傳送的數(shù)據(jù)再將其傳送給上級模塊。它傳送的數(shù)據(jù)流叫做邏輯輸入數(shù)據(jù)流。流叫做邏輯輸入數(shù)據(jù)流。n傳出模塊傳出模塊 從上級模塊獲得數(shù)據(jù),進行某些從上級模塊獲得數(shù)據(jù),進行某些處理,再將其傳送給下屬模塊。它傳送的數(shù)處理,再將其傳送給下屬模塊。它傳送

33、的數(shù)據(jù)流叫做邏輯輸出數(shù)據(jù)流。據(jù)流叫做邏輯輸出數(shù)據(jù)流。n變換模塊變換模塊 它從上級模塊取得數(shù)據(jù),進行特它從上級模塊取得數(shù)據(jù),進行特定的處理,轉(zhuǎn)換成其它形式定的處理,轉(zhuǎn)換成其它形式, 再傳送回上級模再傳送回上級模塊。塊。1/10/20223838軟件工程軟件工程n協(xié)調(diào)模塊協(xié)調(diào)模塊 對所有下屬模塊進行協(xié)調(diào)和管理對所有下屬模塊進行協(xié)調(diào)和管理的模塊。的模塊。傳入模塊傳入模塊AA傳出模塊傳出模塊DD變換模塊變換模塊AB協(xié)調(diào)模塊協(xié)調(diào)模塊AABB1/10/20223939軟件工程軟件工程系統(tǒng)結(jié)構(gòu)圖的基本符號系統(tǒng)結(jié)構(gòu)圖的基本符號模塊模塊調(diào)用調(diào)用數(shù)據(jù)數(shù)據(jù)控制信息控制信息轉(zhuǎn)接符號轉(zhuǎn)接符號系統(tǒng)結(jié)構(gòu)圖的基本符系統(tǒng)結(jié)構(gòu)圖

34、的基本符號號選擇(判斷)選擇(判斷)重復(fù)重復(fù)1/10/20224040軟件工程軟件工程模塊調(diào)用示例模塊調(diào)用示例(a) 調(diào)用調(diào)用(b) 判斷調(diào)用判斷調(diào)用(c) 循環(huán)調(diào)用循環(huán)調(diào)用1/10/20224141軟件工程軟件工程n數(shù)據(jù)數(shù)據(jù):模塊之間傳送的數(shù)據(jù)用:模塊之間傳送的數(shù)據(jù)用帶空心圓的箭頭帶空心圓的箭頭表示,并在旁邊標上數(shù)據(jù)名。表示,并在旁邊標上數(shù)據(jù)名。n控制信息控制信息:控制信息與數(shù)據(jù)的主要區(qū)別是前者:控制信息與數(shù)據(jù)的主要區(qū)別是前者只反映數(shù)據(jù)的某種狀態(tài)。只反映數(shù)據(jù)的某種狀態(tài)。模塊間的數(shù)據(jù)傳遞模塊間的數(shù)據(jù)傳遞AB(a)xyz查職工簡歷查職工簡歷讀人事文件讀人事文件(b)職工號職工號簡歷數(shù)據(jù)簡歷數(shù)據(jù)無

35、此職工無此職工1/10/20224242軟件工程軟件工程數(shù)據(jù)處理的類型數(shù)據(jù)處理的類型 n在需求分析階段,面向數(shù)據(jù)流在需求分析階段,面向數(shù)據(jù)流的的SA方法產(chǎn)生數(shù)方法產(chǎn)生數(shù)據(jù)流圖據(jù)流圖DFD。n在在軟件設(shè)計階段,面向數(shù)據(jù)流的軟件設(shè)計階段,面向數(shù)據(jù)流的SD方法將方法將DFD轉(zhuǎn)換成程序結(jié)構(gòu)圖。轉(zhuǎn)換成程序結(jié)構(gòu)圖。n數(shù)據(jù)處理即為在數(shù)據(jù)處理即為在DFD中從系統(tǒng)的輸入數(shù)據(jù)流到中從系統(tǒng)的輸入數(shù)據(jù)流到系統(tǒng)的輸出數(shù)據(jù)流所經(jīng)歷的一連串連續(xù)變換。系統(tǒng)的輸出數(shù)據(jù)流所經(jīng)歷的一連串連續(xù)變換。n數(shù)據(jù)處理的類型分為變換流型與事務(wù)流型。數(shù)據(jù)處理的類型分為變換流型與事務(wù)流型。 1/10/20224343軟件工程軟件工程變換流變換流

36、n數(shù)據(jù)沿著數(shù)據(jù)沿著輸入通路輸入通路進入系統(tǒng),經(jīng)過一系列數(shù)進入系統(tǒng),經(jīng)過一系列數(shù)據(jù)變換,將數(shù)據(jù)的外部形式轉(zhuǎn)換成對應(yīng)的內(nèi)據(jù)變換,將數(shù)據(jù)的外部形式轉(zhuǎn)換成對應(yīng)的內(nèi)部表示,然后通過部表示,然后通過變換中心變換中心(也稱主加工)(也稱主加工)處理,再沿著處理,再沿著輸出通路輸出通路轉(zhuǎn)換成外部形式離開轉(zhuǎn)換成外部形式離開系統(tǒng)。具有這種特性的數(shù)據(jù)流稱為變換流。系統(tǒng)。具有這種特性的數(shù)據(jù)流稱為變換流。n變換流變換流型型DFD可以分成:可以分成: 輸入變換中心(主加工)輸出輸入變換中心(主加工)輸出 輸入數(shù)據(jù)輸入數(shù)據(jù)C變換數(shù)據(jù)變換數(shù)據(jù)CD輸出數(shù)據(jù)輸出數(shù)據(jù)D1/10/20224444軟件工程軟件工程n相應(yīng)于取得數(shù)據(jù)、變

37、換數(shù)據(jù)、給出數(shù)據(jù),變相應(yīng)于取得數(shù)據(jù)、變換數(shù)據(jù)、給出數(shù)據(jù),變換流型系統(tǒng)結(jié)構(gòu)圖由輸入、變換中心和輸出換流型系統(tǒng)結(jié)構(gòu)圖由輸入、變換中心和輸出等三部分組成。等三部分組成。主模塊主模塊B變換成變換成C輸入輸入B輸出輸出CA變換成變換成B輸入輸入AC變換成變換成D輸出輸出DAABBBCCCDD1/10/20224545軟件工程軟件工程事務(wù)事務(wù)流流 n數(shù)據(jù)沿著數(shù)據(jù)沿著輸入通路輸入通路到達一個到達一個事務(wù)中心事務(wù)中心,事務(wù),事務(wù)中心根據(jù)輸入數(shù)據(jù)(即事務(wù))的類型在若干中心根據(jù)輸入數(shù)據(jù)(即事務(wù))的類型在若干個動作(稱為活動流)中選擇一個來執(zhí)行,個動作(稱為活動流)中選擇一個來執(zhí)行,這種數(shù)據(jù)流也稱為事務(wù)流。這種數(shù)據(jù)

38、流也稱為事務(wù)流。n事務(wù)流有明顯的事務(wù)中心,各活動流以事務(wù)事務(wù)流有明顯的事務(wù)中心,各活動流以事務(wù)中心為起點呈輻射狀流出。中心為起點呈輻射狀流出。n在事務(wù)流型系統(tǒng)結(jié)構(gòu)圖中,事務(wù)中心模塊按在事務(wù)流型系統(tǒng)結(jié)構(gòu)圖中,事務(wù)中心模塊按所接受的事務(wù)的類型,選擇某一事務(wù)(活動所接受的事務(wù)的類型,選擇某一事務(wù)(活動流)處理模塊執(zhí)行。各事務(wù)處理模塊并列。流)處理模塊執(zhí)行。各事務(wù)處理模塊并列。1/10/20224646軟件工程軟件工程事務(wù)中心事務(wù)中心分派模塊分派模塊輸出結(jié)果輸出結(jié)果事務(wù)事務(wù)1輸入作業(yè)信息輸入作業(yè)信息事務(wù)事務(wù)2事務(wù)事務(wù)3事務(wù)事務(wù)4作業(yè)信息作業(yè)信息作業(yè)作業(yè)信息信息結(jié)果結(jié)果結(jié)果結(jié)果操作操作1操作操作2操作操

39、作3操作操作4操作操作5操作操作6細節(jié)細節(jié)1細節(jié)細節(jié)2細節(jié)細節(jié)3細節(jié)細節(jié)4細節(jié)細節(jié)5細節(jié)細節(jié)61/10/20224747軟件工程軟件工程變換分析變換分析 n變換分析從變換流型的數(shù)據(jù)流圖導出系統(tǒng)結(jié)變換分析從變換流型的數(shù)據(jù)流圖導出系統(tǒng)結(jié)構(gòu)圖構(gòu)圖.n步驟步驟1. 重畫數(shù)據(jù)流圖;重畫數(shù)據(jù)流圖;2. 區(qū)分有效(邏輯)輸入、有效(邏輯)輸區(qū)分有效(邏輯)輸入、有效(邏輯)輸出和變換中心部分;出和變換中心部分;3. 進行一級分解,設(shè)計模塊結(jié)構(gòu)的頂層和第進行一級分解,設(shè)計模塊結(jié)構(gòu)的頂層和第一層模塊;一層模塊;4. 進行二級分解,設(shè)計輸入、輸出和中心變進行二級分解,設(shè)計輸入、輸出和中心變換換部分的中、下層模塊。

40、部分的中、下層模塊。1/10/20224848軟件工程軟件工程1. 1. 重畫數(shù)據(jù)流圖(平鋪)重畫數(shù)據(jù)流圖(平鋪)n為了建立系統(tǒng)結(jié)構(gòu),將數(shù)據(jù)流圖平鋪開來,為了建立系統(tǒng)結(jié)構(gòu),將數(shù)據(jù)流圖平鋪開來,物理輸入畫在左側(cè),物理輸出畫在右側(cè)。物理輸入畫在左側(cè),物理輸出畫在右側(cè)。n如果一個外部實體既是物理輸入又是物理輸如果一個外部實體既是物理輸入又是物理輸出,則兩側(cè)都要畫出它。出,則兩側(cè)都要畫出它。ABBCEGGHDFCDEABCDEFGH物理輸入物理輸入物理輸出物理輸出1/10/20224949軟件工程軟件工程2. 2. 確定邏輯輸入、邏輯輸出確定邏輯輸入、邏輯輸出和變換中心部分和變換中心部分n變換中心是程

41、序的核心功能,它的輸入是邏變換中心是程序的核心功能,它的輸入是邏輯輸入,它的輸出為邏輯輸出。輯輸入,它的輸出為邏輯輸出。變換中心變換中心ABBCEGGHDFCDEABCDEFGH物理輸入物理輸入物理輸出物理輸出邏輯輸入邏輯輸入邏輯輸出邏輯輸出1/10/20225050軟件工程軟件工程3. 3. 第一級分解:第一級分解:設(shè)計模塊結(jié)構(gòu)的頂層和第一層設(shè)計模塊結(jié)構(gòu)的頂層和第一層n頂層模塊:其功能就是整個系統(tǒng)的功能;頂層模塊:其功能就是整個系統(tǒng)的功能;n輸入控制模塊:接收所有的輸入數(shù)據(jù);輸入控制模塊:接收所有的輸入數(shù)據(jù);n變換控制模塊:實現(xiàn)輸入到輸出的變換;變換控制模塊:實現(xiàn)輸入到輸出的變換;n輸出控制

42、模塊:產(chǎn)生所有的輸出數(shù)據(jù)。輸出控制模塊:產(chǎn)生所有的輸出數(shù)據(jù)。頂層模塊頂層模塊變換控制變換控制輸出控制輸出控制輸入控制輸入控制1/10/20225151軟件工程軟件工程變換中心變換中心ABBCEGGHDFCDEABCDEFGH物理輸入物理輸入物理輸出物理輸出邏輯輸入邏輯輸入邏輯輸出邏輯輸出主模塊主模塊C D,E輸入輸入C輸出輸出D輸出輸出ECCD,EDE邏輯輸入邏輯輸入變換中心變換中心邏輯輸出邏輯輸出1/10/20225252軟件工程軟件工程4. 4. 第二級分解:設(shè)計中、下層模塊第二級分解:設(shè)計中、下層模塊輸入控制模塊的分解:從變換中心的邊界開輸入控制模塊的分解:從變換中心的邊界開始,沿著各輸

43、入通路,把輸入通路上的每個始,沿著各輸入通路,把輸入通路上的每個加工映射成輸入控制模塊的一個低層模塊。加工映射成輸入控制模塊的一個低層模塊。輸出控制模塊的分解:從變換中心的邊界開輸出控制模塊的分解:從變換中心的邊界開始,沿著各輸出通路,把輸出通路上的每個始,沿著各輸出通路,把輸出通路上的每個加工映射成輸出控制模塊的一個低層模塊。加工映射成輸出控制模塊的一個低層模塊。變換控制模塊的分解:變換控制模塊通常沒變換控制模塊的分解:變換控制模塊通常沒有通用的分解方法,應(yīng)根據(jù)數(shù)據(jù)流圖中變換有通用的分解方法,應(yīng)根據(jù)數(shù)據(jù)流圖中變換部分的實際情況進行設(shè)計。部分的實際情況進行設(shè)計。1/10/20225353軟件工

44、程軟件工程輸出輸出HG HABBCEGGHDFCD,EABCDEFGH物理輸入物理輸入物理輸出物理輸出主模塊主模塊CD,E輸入輸入C輸出輸出D輸出輸出ECCD,EDE輸入輸入BBBCBC輸入輸入AABABA輸出輸出GE G輸出輸出FDFDFFEGGGHH1/10/20225454軟件工程軟件工程輸出輸出HG HABBCEGGHDFCD,EABCDEFGH物理輸入物理輸入物理輸出物理輸出主模塊主模塊CD,E輸入輸入C輸出輸出D輸出輸出ECCD,EDE輸入輸入BBBCBC輸入輸入AABABA輸出輸出GE G輸出輸出FDFDFFEGGGHH1/10/20225555軟件工程軟件工程事務(wù)分析事務(wù)分析n

45、事務(wù)分析是從事務(wù)流型數(shù)據(jù)流圖導出系統(tǒng)結(jié)事務(wù)分析是從事務(wù)流型數(shù)據(jù)流圖導出系統(tǒng)結(jié)構(gòu)圖。構(gòu)圖。n步驟:步驟:1.確定事務(wù)中心和每條活動流的流特性確定事務(wù)中心和每條活動流的流特性 2.將事務(wù)流型數(shù)據(jù)流圖映射成高層的系統(tǒng)結(jié)將事務(wù)流型數(shù)據(jù)流圖映射成高層的系統(tǒng)結(jié)構(gòu)構(gòu)3.進一步分解進一步分解 1/10/20225656軟件工程軟件工程1. 1. 確定事務(wù)中心和各活動流的流特性確定事務(wù)中心和各活動流的流特性 n右圖為事務(wù)流型右圖為事務(wù)流型DFD的一般形式。的一般形式。n事務(wù)中心事務(wù)中心(圖中的(圖中的T):):位于活動流的起點,位于活動流的起點,活動流從該點成輻射狀流出?;顒恿鲝脑擖c成輻射狀流出。n活動流:活動

46、流:可為變換流可為變換流可為事務(wù)流可為事務(wù)流n事務(wù)流型的事務(wù)流型的DFD的組成:的組成:輸入流事務(wù)中心若干條活動流輸入流事務(wù)中心若干條活動流 T T輸入流輸入流事務(wù)流事務(wù)流活動流活動流1/10/20225757軟件工程軟件工程n右圖為事務(wù)流型右圖為事務(wù)流型DFD的高層結(jié)構(gòu)形式。的高層結(jié)構(gòu)形式。n頂層模塊:其功能就是整個系統(tǒng)的功能。頂層模塊:其功能就是整個系統(tǒng)的功能。n接收模塊:接收輸入數(shù)據(jù)。接收模塊:接收輸入數(shù)據(jù)。n分派模塊:調(diào)度模塊,分派模塊:調(diào)度模塊,控制下層的所有活動模塊??刂葡聦拥乃谢顒幽K。n事務(wù)模塊:對應(yīng)活動流,事務(wù)模塊:對應(yīng)活動流,是該活動流映射成的。是該活動流映射成的。 2.

47、 2. 將事務(wù)流型將事務(wù)流型DFDDFD映射成映射成高層系統(tǒng)結(jié)構(gòu)高層系統(tǒng)結(jié)構(gòu)頂層模塊頂層模塊分派分派接收接收事務(wù)事務(wù)1 1事務(wù)事務(wù)2事務(wù)事務(wù)n1/10/20225858軟件工程軟件工程3. 3. 進一步分解進一步分解n接收模塊:類同于變換分析中輸入控制模塊的接收模塊:類同于變換分析中輸入控制模塊的分解。分解。n活動流模塊:根據(jù)其流特性(變換流或事務(wù)流)活動流模塊:根據(jù)其流特性(變換流或事務(wù)流)進一步采用變換分析或事務(wù)分析進行分解。進一步采用變換分析或事務(wù)分析進行分解。 1/10/20225959軟件工程軟件工程模塊設(shè)計的原則模塊設(shè)計的原則n在選擇模塊設(shè)計的次序時,必須對一個模塊在選擇模塊設(shè)計的

48、次序時,必須對一個模塊的全部直接下屬模塊都設(shè)計完成之后,才能的全部直接下屬模塊都設(shè)計完成之后,才能轉(zhuǎn)向另一個模塊的下層模塊的設(shè)計。轉(zhuǎn)向另一個模塊的下層模塊的設(shè)計。n使用使用“黑盒黑盒”技術(shù)技術(shù): 在設(shè)計當前模塊時,在設(shè)計當前模塊時,先把先把該模塊的所有下層模塊定義成該模塊的所有下層模塊定義成“黑盒黑盒”,在,在設(shè)計中利用它們時暫不考慮其內(nèi)部結(jié)構(gòu)和實設(shè)計中利用它們時暫不考慮其內(nèi)部結(jié)構(gòu)和實現(xiàn)。在這一步定義好的現(xiàn)。在這一步定義好的“黑盒黑盒”,在下一步,在下一步就可以對它們進行設(shè)計和加工。最后,全部就可以對它們進行設(shè)計和加工。最后,全部“黑盒黑盒”的內(nèi)容和結(jié)構(gòu)應(yīng)完全被確定。的內(nèi)容和結(jié)構(gòu)應(yīng)完全被確定。

49、1/10/20226060軟件工程軟件工程n在設(shè)計下層模塊時,應(yīng)考慮模塊的在設(shè)計下層模塊時,應(yīng)考慮模塊的耦合耦合和和內(nèi)內(nèi)聚聚問題,以提高初始結(jié)構(gòu)圖質(zhì)量。問題,以提高初始結(jié)構(gòu)圖質(zhì)量。n模塊劃分時,一個模塊的直接下屬模塊一般模塊劃分時,一個模塊的直接下屬模塊一般在在 5 個左右。如果直接下屬模塊超過個左右。如果直接下屬模塊超過 10 個,個,可設(shè)立中間層次??稍O(shè)立中間層次。n如果出現(xiàn)以下情況,就停止模塊分解:如果出現(xiàn)以下情況,就停止模塊分解: 模塊不能再細分為明顯的子任務(wù);模塊不能再細分為明顯的子任務(wù); 分解成用戶提供的模塊或庫函數(shù);分解成用戶提供的模塊或庫函數(shù); 模塊接口是輸入輸出設(shè)備傳送的信息

50、;模塊接口是輸入輸出設(shè)備傳送的信息; 模塊不宜再分解得過小。模塊不宜再分解得過小。1/10/20226161軟件工程軟件工程n變換分析是軟件系統(tǒng)結(jié)構(gòu)設(shè)計的主要方法。變換分析是軟件系統(tǒng)結(jié)構(gòu)設(shè)計的主要方法。n一般,一個大型的軟件系統(tǒng)是變換型結(jié)構(gòu)和一般,一個大型的軟件系統(tǒng)是變換型結(jié)構(gòu)和事務(wù)型結(jié)構(gòu)的混合結(jié)構(gòu)。所以,我們通常利事務(wù)型結(jié)構(gòu)的混合結(jié)構(gòu)。所以,我們通常利用以變換分析為主,事務(wù)分析為輔的方式進用以變換分析為主,事務(wù)分析為輔的方式進行軟件結(jié)構(gòu)設(shè)計。行軟件結(jié)構(gòu)設(shè)計。1/10/20226262軟件工程軟件工程abdpqrsbac1d分派模塊分派模塊事務(wù)控制事務(wù)控制qrs接受通路接受通路p1/10/20

51、226363軟件工程軟件工程1.模塊功能完善化模塊功能完善化 一個完整的模塊應(yīng)當有以下幾部分:一個完整的模塊應(yīng)當有以下幾部分: 執(zhí)行規(guī)定的功能的部分;執(zhí)行規(guī)定的功能的部分; 出錯處理的部分。當模塊不能完成規(guī)定的出錯處理的部分。當模塊不能完成規(guī)定的功能時,必須回送出錯標志,出現(xiàn)例外情功能時,必須回送出錯標志,出現(xiàn)例外情況的原因。況的原因。 如果需要返回數(shù)據(jù)給它的調(diào)用者,在完成如果需要返回數(shù)據(jù)給它的調(diào)用者,在完成數(shù)據(jù)加工或結(jié)束時,數(shù)據(jù)加工或結(jié)束時, 應(yīng)當給它的調(diào)用者返應(yīng)當給它的調(diào)用者返回一個狀態(tài)碼?;匾粋€狀態(tài)碼。改進系統(tǒng)結(jié)構(gòu)的啟發(fā)式原則改進系統(tǒng)結(jié)構(gòu)的啟發(fā)式原則1/10/20226464軟件工程軟件

52、工程2.消除重復(fù)功能,改善軟件結(jié)構(gòu)消除重復(fù)功能,改善軟件結(jié)構(gòu) 完全相似完全相似:在結(jié)構(gòu)上完全相似,可能只是:在結(jié)構(gòu)上完全相似,可能只是在數(shù)據(jù)類型上不一致。此時可以采取完全在數(shù)據(jù)類型上不一致。此時可以采取完全合并的方法。合并的方法。 局部相似局部相似:找出其相同部分,分離出去,:找出其相同部分,分離出去,重新定義成一個獨立的下一層模塊。還可重新定義成一個獨立的下一層模塊。還可以與它的上級模塊合并。以與它的上級模塊合并。1/10/20226565軟件工程軟件工程R1R2XYR1R2XYR1+R2XYX+R1Y+R2R1Y+R2X不可取不可取開關(guān)太多開關(guān)太多1/10/20226666軟件工程軟件工程

53、3.模塊的作用范圍應(yīng)在控制范圍之內(nèi)模塊的作用范圍應(yīng)在控制范圍之內(nèi) 模塊的模塊的控制范圍控制范圍包括它本身及其所有的從包括它本身及其所有的從屬模塊。屬模塊。 模塊的模塊的作用范圍作用范圍是指模塊內(nèi)一個判定的作是指模塊內(nèi)一個判定的作用范圍,凡是受這個判定影響的所有模塊用范圍,凡是受這個判定影響的所有模塊都屬于這個判定的作用范圍。都屬于這個判定的作用范圍。 如果一個判定的作用范圍包含在這個判定如果一個判定的作用范圍包含在這個判定所在模塊的控制范圍之內(nèi),則這種結(jié)構(gòu)是所在模塊的控制范圍之內(nèi),則這種結(jié)構(gòu)是簡單的,否則,它的結(jié)構(gòu)是不簡單的。簡單的,否則,它的結(jié)構(gòu)是不簡單的。1/10/20226767軟件工程

54、軟件工程4.盡可能減少高扇出結(jié)構(gòu)盡可能減少高扇出結(jié)構(gòu)如果一個模塊的扇出數(shù)過大,就意味著該模如果一個模塊的扇出數(shù)過大,就意味著該模塊過分復(fù)雜,需要協(xié)調(diào)和控制過多的下屬模塊過分復(fù)雜,需要協(xié)調(diào)和控制過多的下屬模塊。應(yīng)當適當增加中間層次的控制模塊。塊。應(yīng)當適當增加中間層次的控制模塊。PPP1P21/10/20226868軟件工程軟件工程5.避免或減少使用病態(tài)聯(lián)接避免或減少使用病態(tài)聯(lián)接a. 直接病態(tài)聯(lián)接直接病態(tài)聯(lián)接b. 公共數(shù)據(jù)域病態(tài)聯(lián)接公共數(shù)據(jù)域病態(tài)聯(lián)接c.通信通信模塊病態(tài)聯(lián)接模塊病態(tài)聯(lián)接ABcommonABTABLEITABABxxxx(a) 直接病態(tài)聯(lián)接直接病態(tài)聯(lián)接(b) 公共數(shù)據(jù)域公共數(shù)據(jù)域 病

55、態(tài)聯(lián)接病態(tài)聯(lián)接(c) 通信模塊通信模塊 病態(tài)聯(lián)接病態(tài)聯(lián)接1/10/20226969軟件工程軟件工程6.模塊的大小要適中。模塊的大小要適中。7.設(shè)計功能可預(yù)測的模塊設(shè)計功能可預(yù)測的模塊 一個功能可預(yù)測的模塊一個功能可預(yù)測的模塊, 不論內(nèi)部處理細節(jié)如不論內(nèi)部處理細節(jié)如何,但對相同的輸入數(shù)據(jù),總能產(chǎn)生同樣的何,但對相同的輸入數(shù)據(jù),總能產(chǎn)生同樣的結(jié)果。但是,如果模塊內(nèi)部蘊藏有一些特殊結(jié)果。但是,如果模塊內(nèi)部蘊藏有一些特殊的鮮為人知的功能時,這個模塊就可能是不的鮮為人知的功能時,這個模塊就可能是不可預(yù)測的。對于這種模塊,如果調(diào)用者不小可預(yù)測的。對于這種模塊,如果調(diào)用者不小心使用,其結(jié)果將不可預(yù)測。心使用

56、,其結(jié)果將不可預(yù)測。1/10/20227070軟件工程軟件工程保存當前標記保存當前標記恢復(fù)恢復(fù)“以前以前”標標記記標記?標記?標記?標記?功能不可預(yù)測的模塊功能不可預(yù)測的模塊1/10/20227171軟件工程軟件工程n在過程設(shè)計階段,要決定各個模塊的實現(xiàn)算法,在過程設(shè)計階段,要決定各個模塊的實現(xiàn)算法,并精確地表達這些算法。并精確地表達這些算法。n對每個模塊規(guī)定的功能以及算法的設(shè)計,給出對每個模塊規(guī)定的功能以及算法的設(shè)計,給出適當?shù)乃惴枋觯哼m當?shù)乃惴枋觯簐圖形工具:程序流程圖,圖形工具:程序流程圖, N-S ,PAD, HIPOv表格工具:判定表表格工具:判定表v語言工具:語言工具: PDL

57、 , HIPO3.5 3.5 過程設(shè)計(詳細設(shè)計)過程設(shè)計(詳細設(shè)計)1/10/20227272軟件工程軟件工程程序流程圖程序流程圖ABABPA1P=1A2=2An=nTSPFFSPT順序型順序型選擇型選擇型先判斷先判斷重復(fù)型重復(fù)型后判斷后判斷重復(fù)型重復(fù)型多分支選擇型多分支選擇型1/10/20227373軟件工程軟件工程gabfx1x4x5x6x2x3入口入口hijcde出口出口流程圖示例流程圖示例FFFFFTTTTTswitchdo-whiledo-whilewhile-do=1=2=31/10/20227474軟件工程軟件工程NN- -S S 圖圖ABPFTABPFTAwhile-do P

58、Ado-while PAP= 1 = 2 = nA1 A2 An順序型順序型選擇型選擇型(1)選擇型選擇型(2)先判斷重復(fù)型先判斷重復(fù)型后判斷重復(fù)型后判斷重復(fù)型多分支選擇型多分支選擇型1/10/20227575軟件工程軟件工程N-SN-S圖(盒圖)示例圖(盒圖)示例do-while x6abx1TTFFx2x4f=1=2=3gido-while x5hdec while-do x6j1/10/20227676軟件工程軟件工程問題分析圖問題分析圖 (PAD)(PAD)S1SA1A2AnPPP=1=2=nwhile PSSS1S2S2until P選擇型選擇型順序型順序型多分支選擇型多分支選擇型先

59、判斷重復(fù)型先判斷重復(fù)型后判斷重復(fù)型后判斷重復(fù)型1/10/20227777軟件工程軟件工程PADPAD示例示例while-do x3bfgx1ado-while x6jx4do-while x5hicdex2=1=2=31/10/20227878軟件工程軟件工程PDL (Program Design Language)PDL (Program Design Language) PDL是一種用于描述功能模塊的算法設(shè)計和加是一種用于描述功能模塊的算法設(shè)計和加工細節(jié)的語言。稱為設(shè)計程序用語言。它是一工細節(jié)的語言。稱為設(shè)計程序用語言。它是一種偽碼。種偽碼。 偽碼的語法規(guī)則分為偽碼的語法規(guī)則分為“外語法外

60、語法”和和“內(nèi)語法內(nèi)語法”。 PDL具有嚴格的關(guān)鍵字外語法,用于定義控制具有嚴格的關(guān)鍵字外語法,用于定義控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),同時它的表示實際操作和條結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),同時它的表示實際操作和條件的內(nèi)語法可使用自然語言的詞匯。件的內(nèi)語法可使用自然語言的詞匯。1/10/20227979軟件工程軟件工程示例示例: 拼詞檢查程序拼詞檢查程序PROCEDURE spellcheckBEGIN -* split document into single words LOOP get next word add word to word list in sortorder EXIT WHEN all words

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論