《軟件工程實(shí)踐與項(xiàng)目管理》課件第5章_第1頁(yè)
《軟件工程實(shí)踐與項(xiàng)目管理》課件第5章_第2頁(yè)
《軟件工程實(shí)踐與項(xiàng)目管理》課件第5章_第3頁(yè)
《軟件工程實(shí)踐與項(xiàng)目管理》課件第5章_第4頁(yè)
《軟件工程實(shí)踐與項(xiàng)目管理》課件第5章_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

5.1軟件體系結(jié)構(gòu)5.2概要設(shè)計(jì)5.3詳細(xì)設(shè)計(jì)

5.4文檔書寫第5章結(jié)構(gòu)化軟件設(shè)計(jì)5.1軟件體系結(jié)構(gòu)軟件體系結(jié)構(gòu)是系統(tǒng)的高層結(jié)構(gòu)共性的抽象,是建立系統(tǒng)時(shí)的構(gòu)造模型、構(gòu)造風(fēng)格和構(gòu)造模式。目前在商業(yè)軟件開發(fā)中常用的軟件體系結(jié)構(gòu)有以下幾種:層次體系結(jié)構(gòu)、C/S結(jié)構(gòu)和B/S結(jié)構(gòu)。1.層次體系結(jié)構(gòu)層次體系結(jié)構(gòu)就是利用分層的處理方式來(lái)處理復(fù)雜的問題,層次系統(tǒng)要求上層子系統(tǒng)調(diào)用下層子系統(tǒng)的功能,而下層子系統(tǒng)不能夠調(diào)用上層子系統(tǒng)的功能。2.?C/S結(jié)構(gòu)客戶機(jī)/服務(wù)器結(jié)構(gòu)簡(jiǎn)稱C/S結(jié)構(gòu),它是兩層體系結(jié)構(gòu),由服務(wù)器提供應(yīng)用(數(shù)據(jù))服務(wù),客戶機(jī)通過網(wǎng)絡(luò)與服務(wù)器進(jìn)行連接,向服務(wù)器提出服務(wù)請(qǐng)求,如圖5-2所示。在實(shí)際應(yīng)用中常采用基于“胖客戶機(jī)”的兩層應(yīng)用??蛻舳塑浖话阌蓱?yīng)用程序及相應(yīng)的數(shù)據(jù)庫(kù)連接程序組成,服務(wù)器端軟件一般是某種數(shù)據(jù)庫(kù)管理系統(tǒng)。3.?B/S結(jié)構(gòu)“瀏覽器/服務(wù)器”結(jié)構(gòu)簡(jiǎn)稱B/S結(jié)構(gòu),如圖5-3所示。在這種結(jié)構(gòu)下,主要業(yè)務(wù)邏輯在服務(wù)器端實(shí)現(xiàn),極少部分業(yè)務(wù)邏輯在前端瀏覽器實(shí)現(xiàn)??蛻魴C(jī)統(tǒng)一采用瀏覽器,用戶工作界面通過WWW瀏覽器來(lái)實(shí)現(xiàn)。這種結(jié)構(gòu)最大的優(yōu)點(diǎn)是:客戶機(jī)端只需安裝瀏覽器,登錄服務(wù)器即可執(zhí)行B/S結(jié)構(gòu)的軟件應(yīng)用系統(tǒng)。這樣不僅讓用戶使用方便,而且使得客戶機(jī)不存在安裝維護(hù)的問題。當(dāng)然軟件開發(fā)和維護(hù)的工作不是消失了,而是轉(zhuǎn)移到了Web服務(wù)器端。4.?B/S和C/S比較1)響應(yīng)速度C/S結(jié)構(gòu)的軟件系統(tǒng)比B/S結(jié)構(gòu)的軟件系統(tǒng)在客戶端響應(yīng)方面速度快,能充分發(fā)揮客戶端的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。2)交互性B/S結(jié)構(gòu)的軟件系統(tǒng)只需在客戶端(除操作系統(tǒng)軟件外)安裝一個(gè)瀏覽器,由于瀏覽器和HTML頁(yè)面的交互性比較差,因此B/S結(jié)構(gòu)的軟件系統(tǒng)沒有C/S軟件系統(tǒng)的交互性好。3)打印和I/O接口的處理能力C/S結(jié)構(gòu)的軟件系統(tǒng)在軟件處理打印和計(jì)算機(jī)接口方面比B/S結(jié)構(gòu)的軟件系統(tǒng)方便。例如,打印報(bào)表、RS-232異步通信口的控制等。4)維護(hù)費(fèi)用C/S結(jié)構(gòu)的軟件系統(tǒng)在系統(tǒng)維護(hù)方面沒有B/S結(jié)構(gòu)的軟件系統(tǒng)方便。C/S結(jié)構(gòu)的客戶端需要安裝專用的客戶端軟件,屬于“胖客戶端”。系統(tǒng)軟件升級(jí)時(shí),每一臺(tái)客戶機(jī)需要重新安裝,其維護(hù)和升級(jí)成本非常高。而B/S結(jié)構(gòu)的軟件系統(tǒng)屬于“瘦客戶端”,軟件工程師維護(hù)軟件系統(tǒng)不需要在不同地域之間來(lái)回奔跑,只需要在服務(wù)器端進(jìn)行維護(hù)就可以。5.2概要設(shè)計(jì)5.2.1概要設(shè)計(jì)的任務(wù)與步驟概要設(shè)計(jì)的任務(wù)主要有:(1)確定體系結(jié)構(gòu)、系統(tǒng)的外部接口和內(nèi)部接口,畫出數(shù)據(jù)流圖。(2)進(jìn)行模塊劃分,對(duì)初始結(jié)構(gòu)圖進(jìn)行改進(jìn)完善。(3)制定設(shè)計(jì)規(guī)范,對(duì)篩選后的模塊和邏輯數(shù)據(jù)結(jié)構(gòu)進(jìn)行列表說明。(4)確定用戶主界面。(5)進(jìn)行主要的算法設(shè)計(jì)。(6)進(jìn)行異常處理設(shè)計(jì)。(7)編寫概要設(shè)計(jì)文檔。

1.確定體系結(jié)構(gòu)仔細(xì)閱讀需求規(guī)格說明書,理解系統(tǒng)建設(shè)目標(biāo)、業(yè)務(wù)現(xiàn)狀、現(xiàn)有系統(tǒng)、客戶需求的各功能說明,選擇體系結(jié)構(gòu),如B/S(Browser/Server,瀏覽器/服務(wù)器)體系結(jié)構(gòu)、C/S(Client/Server,客戶/服務(wù)器)體系結(jié)構(gòu)等。

2.確定系統(tǒng)的外部接口和內(nèi)部接口

研究需求分析,從總體說明外部用戶有哪些,軟硬件系統(tǒng)與外部的接口是哪些,系統(tǒng)內(nèi)部模塊間的接口屬于內(nèi)部接口。然后對(duì)接口的命名、順序、數(shù)據(jù)類型、傳遞形式做出更具體的規(guī)定,再將這些接口分配到具體的模塊中。弄清數(shù)據(jù)流加工的業(yè)務(wù)過程,決定數(shù)據(jù)處理問題的類型,判定是屬于事務(wù)型問題還是變換型問題。

3.畫出數(shù)據(jù)流圖弄清數(shù)據(jù)流加工的業(yè)務(wù)過程,決定數(shù)據(jù)處理問題的類型,判定是屬于事務(wù)型問題還是變換型問題。

4.模塊劃分并導(dǎo)出數(shù)據(jù)結(jié)構(gòu)模塊劃分要根據(jù)模塊原則進(jìn)行,從宏觀上將系統(tǒng)劃分成多個(gè)高內(nèi)聚、低耦合的模塊。然后對(duì)模塊劃分進(jìn)行再完善。完善原則是所有的加工都要能對(duì)應(yīng)到相應(yīng)的模塊,消除完全相似或局部相似的重復(fù)功能,理清模塊間的層次、控制關(guān)系,減少模塊間信息的交換量,平衡模塊大小,對(duì)模塊劃分進(jìn)行合理調(diào)整。對(duì)數(shù)據(jù)字典進(jìn)行完善,導(dǎo)出邏輯數(shù)據(jù)結(jié)構(gòu),即每種數(shù)據(jù)結(jié)構(gòu)上的操作,最后對(duì)這些邏輯結(jié)構(gòu)進(jìn)行列表說明。確定系統(tǒng)包含哪些服務(wù)系統(tǒng)、哪些客戶端和數(shù)據(jù)庫(kù)管理系統(tǒng);

確定每個(gè)模塊放在哪個(gè)應(yīng)用服務(wù)器或客戶端的哪個(gè)目錄下。

5.進(jìn)行主要的算法設(shè)計(jì)

一個(gè)高效率的程序是基于良好的算法的,而不是基于編程技巧,因此在系統(tǒng)中應(yīng)該確定哪些是主要算法,哪些應(yīng)該進(jìn)行異常處理設(shè)計(jì)。

6.制定設(shè)計(jì)規(guī)范設(shè)計(jì)規(guī)范包括命名約定、界面約定、程序編寫規(guī)范、文檔書寫規(guī)范等內(nèi)容。

7.制定測(cè)試計(jì)劃

測(cè)試工作應(yīng)當(dāng)在軟件開發(fā)的每一個(gè)階段都要予以考慮。測(cè)試計(jì)劃包括測(cè)試目的、測(cè)試范圍、測(cè)試對(duì)象、測(cè)試策略、測(cè)試任務(wù)、測(cè)試用例、資源配置、測(cè)試結(jié)果分析和度量以及測(cè)試風(fēng)險(xiǎn)評(píng)估等,測(cè)試計(jì)劃應(yīng)當(dāng)適當(dāng)完整。

8.編寫概要設(shè)計(jì)文檔在這個(gè)階段應(yīng)該完成的文檔通常有《概要設(shè)計(jì)說明書》《用戶手冊(cè)》《測(cè)試計(jì)劃》等。最后對(duì)概要設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查,在技術(shù)審查通過之后再由使用部門的負(fù)責(zé)人從管理的角度進(jìn)行復(fù)審。5.2.2概要設(shè)計(jì)原則概要設(shè)計(jì)原則的基本思想(也就是概要設(shè)計(jì)基本原理)是:模塊化設(shè)計(jì)、抽象、自頂向下逐步求精設(shè)計(jì)、模塊獨(dú)立性、信息隱蔽。1.模塊化模塊是一個(gè)軟件系統(tǒng)的最小單元。從邏輯上看,模塊能完成一定的處理功能,給它一定的輸入信息,它可對(duì)之進(jìn)行加工處理,輸出相應(yīng)的結(jié)果信息;從物理上看,模塊是通過名字來(lái)調(diào)用的一段程序。模塊是數(shù)據(jù)說明、可執(zhí)行語(yǔ)句等程序?qū)ο蟮募?,可以單?dú)被命名而且可通過名字來(lái)訪問。模塊一般具有如下三個(gè)屬性:(1)功能:指該模塊實(shí)現(xiàn)什么功能,解決什么需求。此處的功能指該模塊本身的功能與它所調(diào)用的所有子模塊功能之和。(2)邏輯:指描述模塊內(nèi)部如何做,即模塊內(nèi)部的執(zhí)行過程。(3)狀態(tài):指該模塊使用時(shí)的環(huán)境和條件。

2.抽象抽象是認(rèn)識(shí)現(xiàn)實(shí)世界中復(fù)雜問題的思維工具,即從事物的本質(zhì)中抽出其共性而不考慮其他因素。軟件設(shè)計(jì)方法中對(duì)功能逐步細(xì)化的每一步都是抽象化處理。

3.自頂向下逐步求精“分解”和“抽象”是結(jié)構(gòu)化方法解決復(fù)雜問題的兩個(gè)基本手段。分解是把大問題分解成若干個(gè)小問題,然后“分而治之”。抽象是抽取出事物共同的本質(zhì)特性而暫不考慮它的細(xì)節(jié)。軟件工程過程中的每一步都可以看做是對(duì)軟件解決方法的抽象層次的一次細(xì)化。抓住主要問題,忽略次要問題,集中精力先解決主要問題,這就是“抽象”。逐步求精是把問題的求解過程分成若干步驟或階段,每個(gè)步驟或階段都比上一個(gè)步驟或階段更精化,更接近問題的解法。逐步求精是與抽象緊密相關(guān)的概念,是一個(gè)由抽象到具體的過程。自頂向下逐步求精是先設(shè)計(jì)頂層結(jié)構(gòu),再逐層向下設(shè)計(jì)。把整個(gè)系統(tǒng)看做一個(gè)模塊,然后按功能將它分解成若干第一層模塊,第一層模塊又可以分解成更為簡(jiǎn)單一些的第二層模塊,越下層的模塊,其功能越具體、越簡(jiǎn)單。

4.模塊獨(dú)立性模塊獨(dú)立性指每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單。在實(shí)際開發(fā)工作中,由于各個(gè)模塊屬于同一個(gè)軟件系統(tǒng),它們之間必然存在著一些聯(lián)系,因此模塊的獨(dú)立性是一個(gè)相對(duì)的概念。具有獨(dú)立功能而且和其他模塊之間相互作用少的模塊稱為獨(dú)立性高的模塊。模塊具有較高的獨(dú)立性是設(shè)計(jì)軟件系統(tǒng)的一個(gè)關(guān)鍵,其重要性主要體現(xiàn)在以下幾個(gè)方面:

(1)系統(tǒng)容易開發(fā)。由于模塊之間接口簡(jiǎn)單,當(dāng)許多人分工合作開發(fā)同一個(gè)軟件時(shí),可以簡(jiǎn)化合作者之間的協(xié)調(diào)工作,提高系統(tǒng)開發(fā)的效率。

(2)系統(tǒng)可靠性高。模塊之間的相互影響小,當(dāng)一個(gè)模塊出錯(cuò)時(shí),由于模塊之間的聯(lián)系小,其他模塊受到的錯(cuò)誤波及也小,從而提高了系統(tǒng)的可靠性。

(3)系統(tǒng)易于測(cè)試和維護(hù)。模塊之間具有較高的獨(dú)立性,相對(duì)說來(lái),模塊間的聯(lián)系較少,當(dāng)某模塊發(fā)生錯(cuò)誤時(shí)其錯(cuò)誤傳播范圍較小,修改設(shè)計(jì)和修改程序需要的工作量也就比較小,這樣系統(tǒng)測(cè)試和維護(hù)的工作量也就相對(duì)小一些。模塊的獨(dú)立程度可以由兩個(gè)定性標(biāo)準(zhǔn)衡量,即模塊間的耦合性和模塊的內(nèi)聚性。耦合性衡量不同模塊彼此間互相連接的緊密程度;內(nèi)聚性衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。為保證模塊的獨(dú)立性,在進(jìn)行物理模型設(shè)計(jì)時(shí)就要遵循以下兩條原則:

(1)一個(gè)模塊內(nèi)部各個(gè)元素之間的聯(lián)系越緊密越好,即要使模塊具有較高的內(nèi)聚性。

(2)各個(gè)模塊之間的信息聯(lián)系要盡可能地減少,即模塊的耦合性要盡可能的低。

5.信息隱蔽信息隱蔽是指在設(shè)計(jì)和確定模塊時(shí),使得一個(gè)模塊內(nèi)包含的信息(過程或數(shù)據(jù)),對(duì)于不需要這些信息的其他模塊來(lái)說,是不能直接訪問的。通過信息隱蔽,可以定義和實(shí)施對(duì)模塊的過程細(xì)節(jié)和局部數(shù)據(jù)結(jié)構(gòu)的存取限制。5.2.3概要設(shè)計(jì)工具軟件概要設(shè)計(jì)的核心是軟件結(jié)構(gòu)的設(shè)計(jì)。軟件結(jié)構(gòu)設(shè)計(jì)的常用方法是結(jié)構(gòu)化設(shè)計(jì)方法,該方法的核心是基于模塊化、自頂向下逐步求精、結(jié)構(gòu)化程序設(shè)計(jì)等技術(shù)的發(fā)展。目前,描述軟件結(jié)構(gòu)的工具主要有:HIPO(HierarrchyplusInput-Process-Output,層次加輸入—處理—輸出)圖(簡(jiǎn)稱H圖)和模塊結(jié)構(gòu)圖,它們能夠反映整個(gè)系統(tǒng)的功能實(shí)現(xiàn)。

1.使用HIPO圖對(duì)庫(kù)存/銷售系統(tǒng)進(jìn)行概要設(shè)計(jì)

1)任務(wù)描述假定庫(kù)存/銷售(或者稱為盤存/銷售)系統(tǒng)分為兩部分:庫(kù)存部分和銷售部分。庫(kù)存/銷售系統(tǒng)主要處理的任務(wù)有兩個(gè):準(zhǔn)備庫(kù)存/銷售事務(wù);處理庫(kù)存/銷售事務(wù)。圖5-4給出了系統(tǒng)的工作流程圖。圖5-4庫(kù)存/銷售系統(tǒng)的工作流程圖下面的任務(wù)是:根據(jù)圖5-4所示的工作流程圖畫出庫(kù)存/銷售系統(tǒng)的HIPO圖。

2)?HIPO圖方法介紹

HIPO圖由四部分組成:層次圖、圖例、描述說明和IPO圖(輸入/處理/輸出),其中層次圖(H圖)、圖例、描述說明稱為可視目錄表,IPO圖描述各部分的工作細(xì)節(jié)。

(1)層次圖。層次圖又稱H圖或者體系框圖,它表明各個(gè)功能的隸屬關(guān)系。層次圖是自頂向下逐層分解得到的,是一個(gè)樹形結(jié)構(gòu)。它的頂層是整個(gè)系統(tǒng)的名稱和系統(tǒng)的概括功能說明;第二層把系統(tǒng)的功能展開,分成了幾個(gè)框;將第二層功能進(jìn)一步分解,就得到了第三層、第四層……直到最后一層。每個(gè)框內(nèi)都應(yīng)有一個(gè)名字,用以標(biāo)識(shí)它的功能。還應(yīng)有一個(gè)編號(hào),以記錄它所在的層次及在該層次的位置。

(2)圖例。每一套HIPO圖都應(yīng)當(dāng)有一個(gè)圖例,即圖形符號(hào)說明。附上圖例,不管人們?cè)谑裁磿r(shí)侯閱讀它都能對(duì)其符號(hào)的意義一目了然。

(3)描述說明。它是對(duì)層次圖中每個(gè)框的補(bǔ)充說明,在必須說明時(shí)才用,所以它是可選的。描述說明可以使用自然語(yǔ)言。

(4)?IPO圖。IPO圖描述輸入數(shù)據(jù)、對(duì)數(shù)據(jù)的處理和輸出數(shù)據(jù)之間的關(guān)系。

IPO圖有固定的格式,圖中處理操作部分總是列在中間,輸入和輸出部分分別在其左邊和右邊。由于某些細(xì)節(jié)很難在一張IPO圖中表達(dá)清楚,常常把IPO圖又分為兩部分,簡(jiǎn)單概括的稱為概要IPO圖,細(xì)致具體一些的稱為詳細(xì)IPO圖。

3)任務(wù)實(shí)現(xiàn)對(duì)于庫(kù)存/銷售系統(tǒng),HIPO圖的設(shè)計(jì)方法如下:

(1)?H圖的第一層是系統(tǒng)名稱:盤存/銷售系統(tǒng)。

(2)?H圖的第二層是庫(kù)存系統(tǒng)和銷售系統(tǒng)。

(3)庫(kù)存的第三層分為檢查庫(kù)存情況,記錄庫(kù)存情況,產(chǎn)生庫(kù)存報(bào)表等。

(4)銷售的第三層分為計(jì)算銷售記錄,核對(duì)顧客賒欠金額等。以上的分析結(jié)果如圖5-5所示,其中,圖(a)是系統(tǒng)的層次圖,圖(b)是后面IPO圖的圖例,圖(c)是描述說明。圖5-5庫(kù)存/銷售系統(tǒng)的可視目錄表圖5-6是表示庫(kù)存/銷售系統(tǒng)第二層的對(duì)應(yīng)于H圖上的1.1.0框的概要IPO圖。圖5-6對(duì)應(yīng)H圖上1.1.0框的概要IPO圖在概要IPO圖中,沒有指明輸入—處理—輸出三者之間的關(guān)系,用它來(lái)進(jìn)行下一步的設(shè)計(jì)是不可能的。故需要使用詳細(xì)IPO圖以指明輸入—處理—輸出三者之間的關(guān)系,其圖形與概要IPO圖一樣,但輸入、輸出最好用具體的介質(zhì)和設(shè)備類型的圖形表示。圖5-7是銷售/庫(kù)存系統(tǒng)中對(duì)應(yīng)于1.1.2框的一張?jiān)敿?xì)IPO圖。圖5-7對(duì)應(yīng)于H圖1.1.2框的詳細(xì)IPO圖

2.設(shè)計(jì)采購(gòu)/銷售系統(tǒng)的模塊結(jié)構(gòu)圖

1)任務(wù)描述假設(shè)某公司采購(gòu)/銷售系統(tǒng)的數(shù)據(jù)處理過程是:公司營(yíng)業(yè)部對(duì)每天的顧客訂貨單形成一個(gè)訂貨單文件,它記錄了訂貨項(xiàng)目的數(shù)量、貨號(hào)、型號(hào)等詳細(xì)數(shù)據(jù)。在這個(gè)文件的基礎(chǔ)上對(duì)顧客訂貨情況進(jìn)行分類統(tǒng)計(jì)、匯總等項(xiàng)處理操作。下面的任務(wù)是:利用模塊結(jié)構(gòu)圖的方法設(shè)計(jì)采購(gòu)/銷售系統(tǒng)的模塊結(jié)構(gòu)圖。

2)模塊結(jié)構(gòu)圖的設(shè)計(jì)方法模塊結(jié)構(gòu)圖也稱控制結(jié)構(gòu)圖,它表示一個(gè)軟件系統(tǒng)的層次分解關(guān)系、模塊調(diào)用關(guān)系、模塊之間數(shù)據(jù)流和控制信息流的傳遞關(guān)系,它是描述軟件系統(tǒng)物理模型、進(jìn)行概要設(shè)計(jì)的主要工具,也是軟件文檔的一部分。模塊結(jié)構(gòu)圖既能反映系統(tǒng)整體結(jié)構(gòu),又能反映系統(tǒng)的細(xì)節(jié)和它們之間的聯(lián)系。通過模塊結(jié)構(gòu)圖,將系統(tǒng)分解為若干個(gè)模塊,這樣可以由不同設(shè)計(jì)人員分別承擔(dān)不同模塊的設(shè)計(jì)和實(shí)施任務(wù),便于管理與控制。

(1)模塊結(jié)構(gòu)圖的基本符號(hào)。繪制模塊結(jié)構(gòu)圖的基本符號(hào)如表5-1所示。

(2)模塊結(jié)構(gòu)圖的用途。模塊結(jié)構(gòu)圖可以表示模塊的調(diào)用關(guān)系。模塊之間的調(diào)用關(guān)系主要有三種:直接調(diào)用、選擇調(diào)用和循環(huán)調(diào)用。這與程序流程圖中三種基本結(jié)構(gòu)—順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)是對(duì)應(yīng)的。圖5-8給出了模塊結(jié)構(gòu)圖的形式表示這三種結(jié)構(gòu)。圖5-8IPO圖的三種基本結(jié)構(gòu)任何復(fù)雜的模塊結(jié)構(gòu)圖都可以由這三種基本結(jié)構(gòu)組合而成。

(3)模塊結(jié)構(gòu)圖中的模塊類型。在模塊結(jié)構(gòu)圖中,不能再分解的模塊稱為原子模塊。如果一個(gè)軟件系統(tǒng)的全部加工都是由原子模塊來(lái)完成,而其他所有非原子模塊僅僅執(zhí)行控制或協(xié)調(diào)功能,這樣的系統(tǒng)就是完全因子分解的最好的系統(tǒng)。實(shí)際上這只是我們要力圖達(dá)到的目標(biāo),大多數(shù)系統(tǒng)都達(dá)不到完全因子分解。一般地,在模塊結(jié)構(gòu)圖中有以下四種類型的模塊:

①傳入模塊。傳入模塊從下屬模塊取得數(shù)據(jù),經(jīng)過某些處理,再將其傳送給上級(jí)模塊。變換型數(shù)據(jù)流程圖的輸入模塊以及事務(wù)型數(shù)據(jù)流圖中的接受事務(wù)模塊均屬于此類模塊。

②傳出模塊。傳出模塊從上級(jí)模塊中獲取數(shù)據(jù),進(jìn)行某些處理,再將其傳送給下屬模塊。如變換型數(shù)據(jù)流圖及事務(wù)型數(shù)據(jù)流圖中的輸出模塊均屬于此類模塊。

③變換模塊,也叫加工模塊。它從上級(jí)模塊取得數(shù)據(jù),進(jìn)行特定的處理,轉(zhuǎn)換成其他形式,再傳回上級(jí)模塊。事務(wù)型數(shù)據(jù)流圖中的調(diào)度模塊就屬于此類模塊,如圖5-9(a)所示。

④協(xié)調(diào)模塊。它是對(duì)所有的下屬模塊進(jìn)行協(xié)調(diào)和管理的模塊。在一個(gè)較好的模塊結(jié)構(gòu)圖中,該模塊應(yīng)出現(xiàn)在較高層。變換型數(shù)據(jù)流圖的總控模塊以及事務(wù)型數(shù)據(jù)流圖中的事務(wù)中心模塊均屬于此類模塊,如圖5-9(b)所示。在實(shí)際系統(tǒng)中,有些模塊屬于上述某一類型,還有一些是上述各種類型的組合。圖5-9模塊結(jié)構(gòu)圖的類型

(4)模塊間調(diào)用的規(guī)則有:

①每個(gè)模塊有自身的任務(wù),只有接收到上級(jí)模塊的調(diào)用命令時(shí)才能執(zhí)行。

②模塊之間的通信只限于其直接上、下級(jí)模塊,任何模塊不能直接與其他上下級(jí)模塊或同級(jí)模塊發(fā)生通信聯(lián)系。

③若有某模塊要與非直接上、下級(jí)的其他模塊發(fā)生通信聯(lián)系,必須通過其上下級(jí)模塊進(jìn)行傳遞。

④模塊調(diào)用順序?yàn)樽陨隙隆T谀K結(jié)構(gòu)圖中,將一個(gè)系統(tǒng)分解為若干模塊,即將一個(gè)比較抽象的、物理內(nèi)容不大確定的任務(wù),分解為若干個(gè)比較具體的、物理內(nèi)容比較確定的任務(wù)。這些模塊可以進(jìn)一步分解,使下層模塊的任務(wù)更加具體、確定,這個(gè)分解過程是一個(gè)由抽象到具體、由復(fù)雜到簡(jiǎn)單的過程。從邏輯上看,上層模塊包括下層模塊,下層模塊功能是上層模塊功能的一部分。

(5)模塊結(jié)構(gòu)圖的改進(jìn)。在劃分模塊之后,要進(jìn)一步地完善模塊的功能,對(duì)于系統(tǒng)模塊中重復(fù)的功能部分要予以刪除,即刪除那些完全相似或局部相似的模塊。例如圖5-10(a)所示,模塊R1和R2中虛線框部分是相似的,可以將R1和R2中共同部分從R1和R2中分離出去,重新定義成一個(gè)獨(dú)立的下一層模塊,如圖5-10(b)所示。為了減少控制的傳遞、接口的復(fù)雜性,R1和R2中剩余的部分可根據(jù)情況與其上一層模塊合并,形成圖5-10(c)和圖5-10(d)中所示的方案。圖5-10完善模塊的功能

(6)提高模塊獨(dú)立性。對(duì)模塊結(jié)構(gòu)進(jìn)行分析,通過模塊分解或模塊合并,盡量降低模塊之間的耦合以提高模塊之間的內(nèi)聚,從而對(duì)所設(shè)計(jì)的模塊結(jié)構(gòu)圖進(jìn)行優(yōu)化。

(7)合理確定模塊結(jié)構(gòu)的規(guī)模,盡可能減少模塊的高扇出,增加高扇入。模塊的規(guī)模包括兩個(gè)方面:模塊結(jié)構(gòu)的深度和模塊結(jié)構(gòu)的寬度。深度表示模塊結(jié)構(gòu)中的層數(shù),它往往能粗略地標(biāo)志一個(gè)系統(tǒng)的大小和復(fù)雜程度。模塊結(jié)構(gòu)圖一般不要超過7層。寬度是模塊結(jié)構(gòu)圖內(nèi)同一個(gè)層次上的模塊總數(shù)的最大值。一般來(lái)說,寬度越大,系統(tǒng)越復(fù)雜。對(duì)寬度影響最大的因素是模塊的扇出。

模塊的扇出是指一個(gè)模塊直接調(diào)用的子模塊數(shù)目。經(jīng)驗(yàn)表明,扇出數(shù)應(yīng)保持在合理的大小范圍,一個(gè)設(shè)計(jì)得好的典型系統(tǒng)的平均扇出通常是3或4(扇出的上限通常是5到9)。扇出過大就應(yīng)該適當(dāng)增加中間層次的控制模塊。扇出過小則可以將下級(jí)模塊進(jìn)一步劃分成若干子功能模塊,或者合并到它的上級(jí)模塊中去。模塊的扇入是指直接調(diào)用該模塊的上級(jí)模塊的數(shù)目。扇入越大則共享該模塊的上級(jí)模塊數(shù)目越多。如果一個(gè)模塊的扇入數(shù)過大,例如超過8,而這個(gè)模塊又不是公用模塊,說明該模塊包含多個(gè)功能,這時(shí)應(yīng)對(duì)它進(jìn)行功能分解。如圖5-11所示,M的扇出數(shù)目是3,Y的扇入數(shù)目是3。經(jīng)驗(yàn)表明,上層扇出比較高,中層扇出較少,底層為高扇入公用模塊的軟件模塊結(jié)構(gòu)是設(shè)計(jì)較好的結(jié)構(gòu)。圖5-11扇入/扇出示例

(8)模塊大小應(yīng)該適中。模塊的大小可用模塊中所含語(yǔ)句的數(shù)量多少來(lái)衡量。一個(gè)模塊所含語(yǔ)句不應(yīng)過多,過多時(shí),會(huì)影響模塊程序的可理解性。在保證模塊的獨(dú)立性的前提下,通常模塊中語(yǔ)句行數(shù)應(yīng)在50~100范圍內(nèi)。以上這些準(zhǔn)則對(duì)改進(jìn)設(shè)計(jì),提高軟件質(zhì)量有著重要的參考價(jià)值。模塊結(jié)構(gòu)圖的圖例如圖5-12所示。其中的箭頭有兩種:實(shí)心箭尾表示模塊結(jié)構(gòu)圖標(biāo)志,空心箭尾表示模塊結(jié)構(gòu)圖的數(shù)據(jù)流向。圖5-12模塊結(jié)構(gòu)圖的5個(gè)圖例

3)任務(wù)實(shí)現(xiàn)根據(jù)以上模塊結(jié)構(gòu)圖的設(shè)計(jì)方法,所設(shè)計(jì)的采購(gòu)/銷售系統(tǒng)的模塊結(jié)構(gòu)圖如圖5-13所示。圖5-13采購(gòu)/銷售系統(tǒng)的模塊結(jié)構(gòu)圖5.3詳細(xì)設(shè)計(jì)5.3.1詳細(xì)設(shè)計(jì)的任務(wù)詳細(xì)設(shè)計(jì)階段主要進(jìn)行程序設(shè)計(jì),即確定各個(gè)模塊的實(shí)現(xiàn)算法,并采用一定的工具精確地描述這些算法,為編寫程序代碼提供依據(jù)。此外,在詳細(xì)設(shè)計(jì)階段還要完成代碼設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)、界面設(shè)計(jì)、網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)等任務(wù)。詳細(xì)設(shè)計(jì)是軟件設(shè)計(jì)的第二階段,其基本任務(wù)如下:(1)為每個(gè)模塊進(jìn)行詳細(xì)的算法設(shè)計(jì)。選擇適當(dāng)?shù)墓ぞ?,并詳?xì)描述算法的過程。(2)確定每個(gè)模塊使用的數(shù)據(jù)結(jié)構(gòu)。(3)功能模塊的詳細(xì)設(shè)計(jì)。(4)其他設(shè)計(jì):根據(jù)軟件系統(tǒng)類型,還要進(jìn)行用戶界面設(shè)計(jì)、輸入/輸出格式設(shè)計(jì)以及外部接口設(shè)計(jì)和內(nèi)部接口設(shè)計(jì)。(5)編寫詳細(xì)設(shè)計(jì)說明書并進(jìn)行評(píng)審。5.3.2詳細(xì)設(shè)計(jì)的原則詳細(xì)設(shè)計(jì)應(yīng)遵循以下原則:(1)模塊的邏輯描述要清晰易讀、正確可靠。(2)采用結(jié)構(gòu)化設(shè)計(jì)方法,改善控制結(jié)構(gòu),降低程序的復(fù)雜程度,從而提高程序的可讀性、可測(cè)試性、可維護(hù)性。(3)選擇恰當(dāng)?shù)拿枋龉ぞ邅?lái)描述各模塊算法。(4)職能劃分功能化,如企業(yè)組織架構(gòu),企業(yè)部門職能的組成要素描述,部門層次結(jié)構(gòu),部門職能劃分,員工職務(wù)職能劃分,職務(wù)職能的組成要素等。(5)功能劃分流程化,如功能需求描述(業(yè)務(wù)、系統(tǒng)),功能需求的整理與組合,功能間的耦合關(guān)系,功能的組成要素,功能的拆分描述與實(shí)現(xiàn)等。(6)流程劃分單據(jù)化,如現(xiàn)實(shí)業(yè)務(wù)單據(jù)收集,單據(jù)的整理與組合,單據(jù)在功能實(shí)現(xiàn)流程中不同時(shí)期的狀態(tài)變化,單據(jù)的拆分描述與實(shí)現(xiàn)(數(shù)據(jù)源/數(shù)據(jù)流向/數(shù)據(jù)處理動(dòng)作)等。(7)單據(jù)劃分表格化,如單據(jù)內(nèi)容的拆分與整合等。(8)表格劃分原子化,如表格的字段設(shè)計(jì)(數(shù)據(jù)類型、值域、屬性表),表格主鍵外鍵和約束的設(shè)計(jì),表格索引的設(shè)計(jì),表格對(duì)不同角色用戶的權(quán)限分配,視圖的設(shè)計(jì)等。5.3.3詳細(xì)設(shè)計(jì)的工具詳細(xì)描述處理過程常用三種工具:圖形、表格和語(yǔ)言。圖形工具:如結(jié)構(gòu)化程序流程圖、方塊圖和問題分析圖(PAD)。IPO圖也是詳細(xì)設(shè)計(jì)的主要工具之一。表格工具:如判定表可作為詳細(xì)設(shè)計(jì)中描述邏輯條件復(fù)雜的算法。過程設(shè)計(jì)語(yǔ)言(PDL):是一種用于描述模塊算法設(shè)計(jì)和處理細(xì)節(jié)的語(yǔ)言工具。

1.程序流程圖

1)任務(wù)描述畫出下面描述的流程圖:判定2000~2500年中的哪一年是閏年,將結(jié)果輸出。

2)任務(wù)分析閏年的條件是:能被4整除,但不能被100整除的年份是閏年,或者能被100整除,又能被400整除的年份是閏年。對(duì)于輸入的年份,使用上面的條件做除法,求結(jié)果的余數(shù)是否為零,為零說明能夠整除,不為零說明不能整除。另外,對(duì)于2000~2500年中的每個(gè)年份可以使用循環(huán)語(yǔ)句來(lái)控制。

3)任務(wù)實(shí)現(xiàn)下面首先介紹程序流程圖的畫法。在程序流程圖中只能使用三種控制結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),任何復(fù)雜的程序流程圖都是由這三種基本的控制結(jié)構(gòu)組成的。下面分別用圖示對(duì)這三種結(jié)構(gòu)加以說明,其中,P表示判斷,A表示處理加工,Y表示判斷條件成立,N表示條件不成立。

(1)順序結(jié)構(gòu)。順序結(jié)構(gòu)是由幾個(gè)連續(xù)的加工步驟依次排列構(gòu)成,如圖5-14所示。圖5-14順序結(jié)構(gòu)

(2)選擇結(jié)構(gòu)。選擇型結(jié)構(gòu)有兩類,一類由某個(gè)邏輯判斷式的取值決定選擇兩個(gè)加工中的一個(gè),如圖5-15(a)所示;一類是列舉多種加工情況,根據(jù)控制變量的取值,選擇執(zhí)行其一,如圖5-15(b)所示。圖5-15選擇結(jié)構(gòu)

(3)循環(huán)結(jié)構(gòu)。循環(huán)型結(jié)構(gòu)中有兩類,一類是當(dāng)型循環(huán)結(jié)構(gòu),先判定循環(huán)條件,當(dāng)循環(huán)控制條件成立時(shí),重復(fù)執(zhí)行特定的加工,如5-16(a)所示;另一類是直到型循環(huán)結(jié)構(gòu),先執(zhí)行某些特定的加工,后判定循環(huán)條件,直到控制條件成立為止,如圖5-16(b)所示。圖5-16循環(huán)結(jié)構(gòu)依據(jù)前面的任務(wù)分析,可畫出如圖5-17所示的程序流程圖。圖5-17完整的程序流程圖

4)任務(wù)總結(jié)雖然程序流程圖可以清晰完整地描述系統(tǒng)處理的算法。但是流程圖也具有以下缺點(diǎn):

(1)流程圖本質(zhì)上不是逐步求精的好工具,它誘使程序員過早地考慮程序的控制流程,而不去考慮程序的全局結(jié)構(gòu)。

(2)流程圖中用箭頭代表控制流容易使程序員不受任何約束,完全不顧結(jié)構(gòu)程序設(shè)計(jì)的思想,隨意轉(zhuǎn)移控制。

(3)流程圖不易表示數(shù)據(jù)結(jié)構(gòu)。

2.方塊圖

1)任務(wù)描述同上面判斷閏年的例子,我們利用方塊圖(N-S圖)畫出其處理過程。

2)方法步驟首先我們介紹一下方塊圖的畫法。方塊圖是由Nassi和Shneiderman提出的一種符合結(jié)構(gòu)化程序設(shè)計(jì)原則的圖形描述工具,又稱之為盒圖。在方塊圖中的6種基本控制結(jié)構(gòu),如圖5-18所示。圖5-18N-S圖的基本控制結(jié)構(gòu)對(duì)于前面的任務(wù),判斷閏年的方塊圖如圖5-19所示。圖5-19計(jì)算閏年的方塊圖

3)任務(wù)總結(jié)方塊圖具有以下特點(diǎn):

(1)每一個(gè)特定控制結(jié)構(gòu)的作用域很明確,能夠清晰辨別。

(2)繪制時(shí)需遵守結(jié)構(gòu)化程序設(shè)計(jì)的要求,不能任意轉(zhuǎn)移控制。

(3)很容易確定局部和全局?jǐn)?shù)據(jù)的作用域。

(4)很容易表明嵌套關(guān)系,也可以表示模塊的層次結(jié)構(gòu)。

3.?PAD圖

1)任務(wù)描述使用判斷閏年的例子,畫出PAD圖。

2)方法步驟首先介紹PAD圖的畫法。

PAD圖是日本人二村良彥等提出的算法圖形表示法,它用二維樹形結(jié)構(gòu)的圖來(lái)表示程序的控制流,是一種用結(jié)構(gòu)化程序設(shè)計(jì)思想表現(xiàn)程序邏輯結(jié)構(gòu)的圖形工具。其所表達(dá)的程序結(jié)構(gòu)清晰、結(jié)構(gòu)化程度高,比流程圖更容易閱讀。另外,PAD圖是樹形結(jié)構(gòu),比流程圖更適應(yīng)于在計(jì)算機(jī)上處理。

PAD圖設(shè)置了五種控制結(jié)構(gòu):順序結(jié)構(gòu)、雙分支結(jié)構(gòu)、while循環(huán)結(jié)構(gòu)、until循環(huán)結(jié)構(gòu)和雙分支結(jié)構(gòu)。如圖5-20所示。圖5-20PAD圖的基本控制結(jié)構(gòu)判斷閏年的PAD圖如圖5-21所示。圖5-21判斷閏年的PAD圖

4.?PDL程序

1)任務(wù)描述對(duì)于在一個(gè)文檔中查找錯(cuò)拼的單詞的步驟是:首先把整個(gè)文檔分離成單詞,然后在字典中查這些單詞,如果在字典中查不到,則顯示該單詞并加入到字典中。寫出以上描述所對(duì)應(yīng)的PDL偽碼程序。

2)方法步驟

PDL有四種基本處理結(jié)構(gòu)的方法:順序結(jié)構(gòu)、分支結(jié)構(gòu)、選擇型結(jié)構(gòu)和循環(huán)結(jié)構(gòu)(包括while型和until型結(jié)構(gòu))。(1)順序結(jié)構(gòu):

<PDL語(yǔ)句>

……

<PDL語(yǔ)句>(2)選擇型結(jié)構(gòu):

if<條件>then

<PDL語(yǔ)句>

elseif<條件>then

<PDL語(yǔ)句>

else

<PDL語(yǔ)句>

endif(3)?while循環(huán)結(jié)構(gòu):

loopwhile<條件>

<PDL語(yǔ)句>

endloop(4)?until型循環(huán)結(jié)構(gòu):

loopuntil<條件>

<PDL語(yǔ)句>

endloop (5)分支型結(jié)構(gòu):

case<選擇句子>of

<標(biāo)號(hào)>{,<標(biāo)號(hào)}:><PDL語(yǔ)言>

[defoult]:[<PDL語(yǔ)句>]

endcase本任務(wù)的PDL描述的過程如下:首先把整個(gè)文檔分離成單詞,然后在字典中查這些單詞,如果在字典中查不到,則顯示這些單詞并將它們加入到字典中。

3)任務(wù)總結(jié)

PDL是一種混合語(yǔ)言,它使用自然語(yǔ)言(如英語(yǔ))詞匯,同時(shí)使用另一種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言(如C語(yǔ)言)的語(yǔ)法。

PDL程序的主要特征如下:

(1)用PDL寫出的程序具有正文格式,在計(jì)算機(jī)上可做正文處理。

(2)?PDL程序中有一些能夠標(biāo)明程序結(jié)構(gòu)的關(guān)鍵字。

(3)?PDL語(yǔ)言僅有少量的簡(jiǎn)單語(yǔ)法規(guī)則,大量使用人們習(xí)慣的自然語(yǔ)言。

(4)使用PDL語(yǔ)言常常按逐步細(xì)化的方式寫出程序。

(5)?PDL程序的注釋行對(duì)語(yǔ)句進(jìn)行解釋,起到提高可讀性的作用。

(6)它提供了結(jié)構(gòu)化控制結(jié)構(gòu)、數(shù)據(jù)說明,具有模塊化的特點(diǎn)。

(7)有自然語(yǔ)言的語(yǔ)法。

(8)用模擬英語(yǔ)的口氣描述每一個(gè)特定操作。

(9)避免使用最終的程序語(yǔ)句。PDL就是為了讓程序員在一個(gè)比較高的層次上思考,如果PDL太底層,那就失去了PDL的好處。

(10)在設(shè)計(jì)意向這一層次上寫PDL描述方法的意義,而不是描述如何實(shí)現(xiàn)。

(11)?PDL非常適合描述算法,當(dāng)寫

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論