軟件工程:第6章 軟件設(shè)計_第1頁
軟件工程:第6章 軟件設(shè)計_第2頁
軟件工程:第6章 軟件設(shè)計_第3頁
軟件工程:第6章 軟件設(shè)計_第4頁
軟件工程:第6章 軟件設(shè)計_第5頁
已閱讀5頁,還剩105頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章軟件設(shè)計本章導(dǎo)讀軟件需求是軟件設(shè)計的基礎(chǔ),軟件設(shè)計是軟件開發(fā)的核心。本章首先討論軟件設(shè)計概論和軟件設(shè)計原理,然后介紹軟件架構(gòu)設(shè)計和軟件詳細設(shè)計,重點是論述面向過程、面向數(shù)據(jù)和面向?qū)ο蟮娜N詳細設(shè)計方法,以及軟件設(shè)計的屬性和度量。最后介紹IT企業(yè)的軟件設(shè)計文檔和設(shè)計管理文檔編寫的參考指南。1本章對讀者的要求

了解:

(1)軟件設(shè)計的輸入輸出

(2)概要設(shè)計與詳細設(shè)計之間的差異

(3)命名規(guī)范的概念

理解:

(1)軟件設(shè)計原理

(2)軟件架構(gòu)設(shè)計方法

(3)軟件詳細設(shè)計概念

(4)軟件設(shè)計屬性和度量

(5)軟件設(shè)計管理文檔

2本章對讀者的要求掌握:

(1)面向過程詳細設(shè)計

(2)面向數(shù)據(jù)詳細設(shè)計

(3)面向?qū)ο笤敿氃O(shè)計

(4)《概要設(shè)計說明書》的編寫方法

(5)《詳細設(shè)計說明書》的編寫方法

36.1設(shè)計方法概論

軟件設(shè)計的輸入是《需求規(guī)格說明書》,輸出是《概要設(shè)計說明書》和《詳細設(shè)計說明書》。概要設(shè)計概要設(shè)計,一是要覆蓋《需求規(guī)格說明書》的全部內(nèi)容,二是要作為指導(dǎo)詳細設(shè)計的依據(jù)。概要設(shè)計注重于宏觀上和框架上的設(shè)計,它是軟件系統(tǒng)的總體結(jié)構(gòu)設(shè)計、全局數(shù)據(jù)庫(包括數(shù)據(jù)結(jié)構(gòu))設(shè)計、外部接口設(shè)計、功能部件分配設(shè)計、部件之間的接口設(shè)計。概要設(shè)計又稱為架構(gòu)設(shè)計。4詳細設(shè)計

詳細設(shè)計,一是要覆蓋《概要設(shè)計說明書》的全部內(nèi)容,二是要作為指導(dǎo)程序設(shè)計的依據(jù)。詳細設(shè)計注重于微觀上和框架內(nèi)的設(shè)計,它是各子系統(tǒng)的公用部件實現(xiàn)設(shè)計、專用模塊實現(xiàn)設(shè)計、存儲過程實現(xiàn)設(shè)計、觸發(fā)器實現(xiàn)設(shè)計、外部接口實現(xiàn)設(shè)計、部門角色授權(quán)設(shè)計、其他詳細設(shè)計等。模塊實現(xiàn)設(shè)計包括:登錄注冊模塊設(shè)計、信息發(fā)布模塊設(shè)計、菜單模塊設(shè)計、錄入修改模塊設(shè)計、查詢統(tǒng)計模塊設(shè)計、業(yè)務(wù)邏輯處理模塊設(shè)計、報表輸出模塊設(shè)計、前臺網(wǎng)站模塊設(shè)計、后臺數(shù)據(jù)處理模塊設(shè)計、數(shù)據(jù)傳輸與接收模塊設(shè)計等等。5詳細設(shè)計

在設(shè)計之前要確定命名規(guī)范。包括系統(tǒng)命名規(guī)范,模塊命名規(guī)范,構(gòu)件命名規(guī)范,變量命名規(guī)范,以及表名、字段名、索引名、視圖名、存儲過程名的命名規(guī)范等。軟件設(shè)計時,一方面要善于將需求規(guī)格說明書中的冗余去掉,將公用功能提煉出來,并將它設(shè)計為構(gòu)件,標準化后加入到公司構(gòu)件庫中。另一方面,還要盡量調(diào)用公司構(gòu)件庫中已有的構(gòu)件。按照“五個面向理論”,概要設(shè)計主要方法是面向數(shù)據(jù),詳細設(shè)計和程序設(shè)計主要方法是面向?qū)ο?。所有的詳細設(shè)計都是面向模塊(部件/構(gòu)件)的,不是面向組織結(jié)構(gòu)或部門單位的。一個組織或單位,根據(jù)角色的不同授權(quán),可以掛上不同的模塊或部件。6*6.2軟件設(shè)計原理“設(shè)計”在IEEE中的定義是:“定義一個系統(tǒng)或部件的架構(gòu)、組成、接口或其它特征的過程”。軟件設(shè)計是一個過程,它是軟件生命周期中的一部分,是對軟件需求分析后產(chǎn)生軟件內(nèi)部結(jié)構(gòu)的一種描述。軟件設(shè)計的結(jié)果,應(yīng)能描述軟件的架構(gòu),即軟件中各個部件是如何分解并組合在一起的。架構(gòu)設(shè)計有時也稱為概要設(shè)計,用于描述系統(tǒng)最頂?shù)慕Y(jié)構(gòu)和組織形式,標識出軟件的各個組成部分。詳細設(shè)計用于詳細描述每個部件的內(nèi)部結(jié)構(gòu),用以指導(dǎo)程序人員編寫代碼,便于每個部件能夠得以順利實現(xiàn)。7原理1:抽象抽象是認識復(fù)雜現(xiàn)象過程中使用的思維工具,即抽出事物本質(zhì)的共同特性而暫不考慮它的細節(jié),不考慮其他因素。

(1)控制抽象面向過程設(shè)計

,通過控制抽象(控制流程和接口),對軟件進行分解,達到降低軟件復(fù)雜度的目的。面向?qū)ο笤O(shè)計

,通過數(shù)據(jù)抽象和控制抽象,實現(xiàn)使數(shù)據(jù)和控制溶為一體,構(gòu)成一個完整的對象。

(2)過程抽象將數(shù)據(jù)處理抽象成函數(shù)或方法,獲得最終的執(zhí)行結(jié)果,而不必去關(guān)心它們的內(nèi)部實現(xiàn)細節(jié)。

(3)數(shù)據(jù)抽象在數(shù)據(jù)庫建模和面向?qū)ο蠼r,使用數(shù)據(jù)抽象,設(shè)計出數(shù)據(jù)庫的表及字段,或設(shè)計出類及類的屬性。8原理2:分解

將一個軟件分解成許多小模塊(代碼行在200~400之間),不同模塊負責不同的功能。

(1)在架構(gòu)設(shè)計中,將軟件系統(tǒng)分解為子系統(tǒng)和模塊;

(2)在詳細設(shè)計中,將子系統(tǒng)和模塊分解成類和接口。模塊具有以下幾種基本屬性:(1)接口:指模塊的輸入與輸出。(2)功能:指模塊實現(xiàn)什么功能。(3)邏輯:描述內(nèi)部如何實現(xiàn)要求的功能及所需的數(shù)據(jù)。(4)狀態(tài):指該模塊的運行環(huán)境,即模塊的調(diào)用與被調(diào)用關(guān)系。9原理3:低耦合高內(nèi)聚

模塊在系統(tǒng)中不能孤立存在,每個模塊具有一定的功能,他們共同完成系統(tǒng)的總功能,這樣模塊之間就必然會存在聯(lián)系或依賴。對于低內(nèi)聚的模塊,通過重新分解,來提高模塊內(nèi)部的緊湊性,使其成為高內(nèi)聚模塊,從而降低塊間聯(lián)系,提高模塊的獨立性。對于高耦合的模塊,通過重新組合,將聯(lián)系緊密的部分組合成新的模塊,使其成為低耦合模塊,從而提高模塊的可維護性。模塊耦合程度由低到高的分級如下:10(1)數(shù)據(jù)耦合(或參數(shù)傳遞耦合),屬于低級別耦合。例如,模塊間通過參數(shù)傳遞或數(shù)據(jù)結(jié)構(gòu)來訪問。

(2)控制耦合,屬于中級別耦合。例如,操作系統(tǒng)中的進程調(diào)度程序,通過就緒進程的優(yōu)生級來調(diào)度。那么調(diào)度程序與進程之間的耦合,就是控制耦合。

(3)外部耦合(或共用耦合),它屬于高級別耦合。例如,模塊間共享全局變量,或共同訪問全局數(shù)據(jù)區(qū)中的數(shù)據(jù)項,就是共用耦合。

(4)內(nèi)容耦合,它屬于最高級別耦合。例如,一個模塊利用分支或跳轉(zhuǎn)技術(shù),轉(zhuǎn)入到另一個模塊中去執(zhí)行,就是內(nèi)容耦合。耦合可發(fā)生在軟件設(shè)計、軟件編程之中。11原理4:封裝

封裝是將信息隱藏在一個實體中,使其內(nèi)部細節(jié)對外部不可見。封裝是實現(xiàn)“低耦合高內(nèi)聚”的技術(shù)手段之一。要進行正確的封裝,必須遵守下列原則:

(1).實體間相互隱藏內(nèi)部實現(xiàn);

(2).盡量減少全局的共享數(shù)據(jù)。12原理5:接口和實現(xiàn)分離

接口和實現(xiàn)分離的思想起源很早。上世紀五十年代,就出現(xiàn)了“子程序和函數(shù)”的概念,人們在實現(xiàn)和調(diào)用它們的時候,就運用了這種思想。將接口和實現(xiàn)分離開來,對外只提供接口,隱藏具體實現(xiàn)。接口與實現(xiàn)的分離,保證了實現(xiàn)的獨立變化,降低了模塊間的耦合。13146.3軟件體系結(jié)構(gòu)軟件總體設(shè)計的主要任務(wù)就是軟件結(jié)構(gòu)的設(shè)計。軟件體系結(jié)構(gòu)(softwarearchitecture)包含了計算機程序的兩個重要特性:(1)過程構(gòu)件(模塊)的層次結(jié)構(gòu)。(2)數(shù)據(jù)結(jié)構(gòu)。軟件的體系結(jié)構(gòu)通過一個劃分過程來完成。該劃分過程從需求分析確立的目標系統(tǒng)的模型出發(fā),對整個問題進行分割,使其每個部分用一個或幾個軟件成份加以解決,整個問題就解決了156.3軟件體系結(jié)構(gòu)結(jié)構(gòu)化演化166.3軟件體系結(jié)構(gòu)不同結(jié)構(gòu)176.3.1程序結(jié)構(gòu)程序結(jié)構(gòu)(programstructure)給出了程序各個構(gòu)件(模塊)的組織(通常叫分層)情況,這種組織包含了控制的層次。它們不給出軟件的過程方面,如過程的序列、決策的出現(xiàn)或次序,或操作的重復(fù)等。186.3.1程序結(jié)構(gòu)結(jié)構(gòu)專用名詞196.3.2數(shù)據(jù)結(jié)構(gòu)在軟件體系結(jié)構(gòu)的表達式中,數(shù)據(jù)結(jié)構(gòu)與程序結(jié)構(gòu)同樣重要。數(shù)據(jù)結(jié)構(gòu)決定信息的組織、存取方法、結(jié)合的程度,以及可選的處理方法。206.3.2數(shù)據(jù)結(jié)構(gòu)典型的數(shù)據(jù)結(jié)構(gòu)216.3.3軟件過程軟件過程(softwareprocedure),則側(cè)重于每一個單獨模塊的處理細節(jié)研究。過程必須提供精確的事件的順序、確切的抉擇點、重復(fù)的操作,以及數(shù)據(jù)的組織與結(jié)構(gòu)處理規(guī)格說明。226.3.3軟件過程一個模塊內(nèi)的過程236.3.3軟件過程過程的分層246.3.4體系結(jié)構(gòu)設(shè)計軟件體系結(jié)構(gòu)設(shè)計(architecturaldesign)的主要目標是設(shè)計一個模塊化的程序結(jié)構(gòu)。體系結(jié)構(gòu)設(shè)計融合了程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),接口定義能使數(shù)據(jù)流經(jīng)程序。要給出各個模塊之間的控制關(guān)系。251軟件結(jié)構(gòu)圖軟件結(jié)構(gòu)圖是軟件系統(tǒng)的模塊層次結(jié)構(gòu),反映了整個系統(tǒng)的功能實現(xiàn),即將來程序的控制層次體系。軟件結(jié)構(gòu)往往用樹狀或網(wǎng)狀結(jié)構(gòu)的圖形來表示。1.模塊用方框表示,并用名字標識該模塊,名字應(yīng)體現(xiàn)該模塊的功能。2.模塊的控制關(guān)系兩個模塊間用單向箭頭或直線連接起來表示它們的控制關(guān)系。

261軟件結(jié)構(gòu)圖3.模塊間的信息傳遞模塊間還經(jīng)常用帶注釋的短箭頭表示模塊調(diào)用過程中來回傳遞的信息。模塊間的控制關(guān)系及信息傳遞271軟件結(jié)構(gòu)圖4.兩個附加符號在模塊A的箭頭尾部標以一個菱形符號,表示模塊A有條件地調(diào)用另一個模塊B。當一個在調(diào)用箭頭尾部標以一個弧形符號,表示模塊M反復(fù)調(diào)用模塊T1,T2和模塊T3。281軟件結(jié)構(gòu)圖5.結(jié)構(gòu)圖的形態(tài)特征291軟件結(jié)構(gòu)圖結(jié)構(gòu)圖的形態(tài)特征包括:(1)深度:指結(jié)構(gòu)圖控制的層次,即模塊的層數(shù)。(2)寬度:指一層中最大的模塊個數(shù)。(3)扇出:指一個模塊直接下屬模塊的個數(shù)。(4)扇入:指一個模塊直接上屬模塊的個數(shù)。301軟件結(jié)構(gòu)圖6.畫結(jié)構(gòu)圖應(yīng)注意的事項(1)同一名字的模塊在結(jié)構(gòu)圖中僅出現(xiàn)一次。(2)調(diào)用關(guān)系只能從上到下。(3)不嚴格表示模塊的調(diào)用次序,習慣上從左到右。312模塊的大小前面在討論模塊設(shè)計的原理時,已經(jīng)知道一個系統(tǒng)應(yīng)當由若干個模塊構(gòu)成。其目的是為了降低系統(tǒng)的復(fù)雜度。模塊設(shè)計的準則不應(yīng)該是語句的多少,而應(yīng)當是模塊是否是一個獨立的功能。323扇出和扇入與深度和寬度由結(jié)構(gòu)圖的形態(tài)特征可以知道,一個系統(tǒng)的大小和系統(tǒng)的復(fù)雜程度在一定程度上可以用深度和寬度表示。大量的系統(tǒng)研究表明,認為高層模塊應(yīng)有較高的扇出,低層模塊特別是底層模塊應(yīng)有較高的扇入。扇入越大,表示該模塊被更多的上級模塊共享。多個扇入入口相同,這就避免了程序的重復(fù),因此希望扇入高一點。但過多又可能是把許多不相關(guān)的功能硬湊在一起,形成通用模塊,這樣的模塊必然是低聚合的。334模塊的耦合耦合(Coupling)表示軟件結(jié)構(gòu)內(nèi)不同模塊彼此之間相互依賴(連接)的緊密程度,是衡量軟件模塊結(jié)構(gòu)質(zhì)量好壞的度量,是對模塊獨立性的直接衡量指標。耦合強弱取決于模塊間接口的復(fù)雜程度,進入或訪問一個模塊的點,以及通過接口的數(shù)據(jù)。344模塊的耦合1.數(shù)據(jù)耦合如果兩個模塊彼此間通過參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合。數(shù)據(jù)耦合是低耦合。系統(tǒng)中必須存在這種耦合,因為只有當某些模塊的輸出數(shù)據(jù)作為另一些模塊的輸入數(shù)據(jù)時,系統(tǒng)才能完成有價值的功能。354模塊的耦合2.控制耦合如果傳遞的信息中有控制信息,則這種耦合稱為控制耦合??刂岂詈鲜侵械瘸潭鹊鸟詈?,它增加了系統(tǒng)的復(fù)雜程度??刂岂詈贤嵌嘤嗟?,在把模塊適當分解之后通常可以用數(shù)據(jù)耦合代替它。364模塊的耦合374模塊的耦合3.公共環(huán)境耦合當兩個或多個模塊通過一個公共數(shù)據(jù)環(huán)境相互作用時,它們之間的耦合稱為公共環(huán)境耦合(即公用耦合)。公共環(huán)境耦合的復(fù)雜程度隨耦合的模塊個數(shù)而變化,當耦合的模塊個數(shù)增加時復(fù)雜程度顯著增加。384模塊的耦合松散的公用耦合394模塊的耦合緊密的公用耦合404模塊的耦合(1)一個模塊往公共環(huán)境送數(shù)據(jù),另一個模塊從公共環(huán)境取數(shù)據(jù)。這是數(shù)據(jù)耦合的一種形式,是比較松散的耦合。(2)兩個模塊都既往公共環(huán)境送數(shù)據(jù)又從里面取數(shù)據(jù),這種耦合比較緊密,介于數(shù)據(jù)耦合和控制耦合之間。414模塊的耦合4.內(nèi)容耦合最高程度的耦合是內(nèi)容耦合。424模塊的耦合(1)一個模塊訪問另一個模塊的內(nèi)部數(shù)據(jù);(2)一個模塊不通過正常入口而轉(zhuǎn)到另一個模塊的內(nèi)部;(3)兩個模塊有一部分程度代碼重疊(只可能出現(xiàn)在匯編程序中);(4)一個模塊有多個入口(這表明一個模塊有幾種功能)。434模塊的耦合應(yīng)該堅決避免使用內(nèi)容耦合。事實上許多高級程序設(shè)計語言已經(jīng)設(shè)計成不允許在程序中出現(xiàn)任何形式的內(nèi)容耦合??傊?,耦合是影響模塊結(jié)構(gòu)和軟件復(fù)雜程度的一個重要因素,應(yīng)該采用如下設(shè)計原則:盡量使用數(shù)據(jù)耦合,少用控制耦合,限制公共環(huán)境耦合,完全不用內(nèi)容耦合。445模塊的內(nèi)聚內(nèi)聚標志一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度,它是信息隱蔽和局部化概念的自然擴展。簡單地說,理想內(nèi)聚的模塊只做一件事情。1.功能內(nèi)聚如果模塊內(nèi)所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚。455模塊的內(nèi)聚2.信息內(nèi)聚信息內(nèi)聚模塊能完成多種功能,各個功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項功能有一個惟一的入口點。465模塊的內(nèi)聚3.通信內(nèi)聚如果一個模塊中所有處理元素都使用同一個輸入數(shù)據(jù)和(或)產(chǎn)生同一個輸出數(shù)據(jù),稱為通信內(nèi)聚(CommunicationalCohesion)。通常,通信內(nèi)聚模塊是通過數(shù)據(jù)流圖來定義的。47485模塊的內(nèi)聚4.過程內(nèi)聚如果一個模塊內(nèi)部的處理元素是相關(guān)的,而且必須以特定次序執(zhí)行,則稱為過程內(nèi)聚。過程內(nèi)聚與順序內(nèi)聚的區(qū)別主要在于:順序內(nèi)聚中是數(shù)據(jù)流從一個處理元流到另一個處理元,而過程內(nèi)聚中是控制流從一個動作流向另一個動作。495模塊的內(nèi)聚5.邏輯內(nèi)聚如果一個模塊完成的任務(wù)在邏輯上屬于相同或相似的一類,稱為邏輯內(nèi)聚(LogicalCohesion)。505模塊的內(nèi)聚6.時間內(nèi)聚如果一個模塊包含的任務(wù)必須在同一段時間內(nèi)執(zhí)行,就叫時間內(nèi)聚。時間內(nèi)聚又稱為經(jīng)典內(nèi)聚。這種模塊大多為多功能模塊,但模塊的各個功能的執(zhí)行與時間有關(guān),通常要求所有功能必須在同一時間段內(nèi)執(zhí)行。例如初始化模塊和終止模塊515模塊的內(nèi)聚7.偶然內(nèi)聚如果一個模塊完成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫做偶然內(nèi)聚。526結(jié)構(gòu)設(shè)計的一般準則1.模塊獨立性準則(1)如果若干模塊之間耦合強度過高,每個模塊內(nèi)功能不復(fù)雜,可將它們合并,以減少信息的傳遞和公共區(qū)的引用。(2)若有多個相關(guān)模塊,應(yīng)對它們的功能進行分析,消去重復(fù)功能。536結(jié)構(gòu)設(shè)計的一般準則2.軟件結(jié)構(gòu)的形態(tài)特征準則軟件結(jié)構(gòu)的深度、寬度、扇入及扇出應(yīng)適當。3.模塊的大小準則在考慮模塊獨立性的同時,為了增加可理解性,模塊的大小最好在50~150條語句左右,可以用1~2頁打印紙打印,便于人們閱讀與研究。546結(jié)構(gòu)設(shè)計的一般準則4.模塊的接口準則模塊的接口要簡單、清晰及含義明確,便于理解,易于實現(xiàn)、測試與維護。模塊接口的復(fù)雜性是軟件發(fā)生錯誤的一個重要原因。因此,設(shè)計模塊接口時,應(yīng)盡量使傳遞的信息簡單并與模塊的功能一致。557模塊的作用域與控制域一個模塊的作用范圍應(yīng)在其控制范疇之內(nèi),且條件判定所在的模塊應(yīng)與受影響的模塊在層次上盡量靠近。如果在設(shè)計過程中,發(fā)現(xiàn)模塊作用范圍不在其控制范圍之內(nèi),可用以下方法加以改進:(1)上移判斷點。使該判斷的層次升高,以擴大它的控制范圍。(2)下移受判斷影響的模塊。將受判斷影響的模塊下移到判斷所在模塊的控制范圍內(nèi)。8.設(shè)計目的軟件體系結(jié)構(gòu)建模的目的:

a.捕獲早期的設(shè)計決策。設(shè)計決策將影響到后續(xù)設(shè)計、開發(fā)、部署、維護和演變。

b.捕獲軟件運行環(huán)境。

c.為底層實現(xiàn)提供限制條件。

d.為開發(fā)團隊的結(jié)構(gòu)組成提供依據(jù)。

e.設(shè)計系統(tǒng)滿足可靠性、可維護性、其他性能等。

f.方便開發(fā)團隊間的交流。56軟件體系結(jié)構(gòu)應(yīng)描述以下問題:

a.軟件系統(tǒng)中包含了哪些子系統(tǒng)/部件。

b.每個子系統(tǒng)/部件都完成哪些功能。

c.子系統(tǒng)/部件對外提供或使用外部的哪些接口。

e.子系統(tǒng)/部件間的依賴關(guān)系,以及對實現(xiàn)和測試的影響。

f.系統(tǒng)是如何部署的。軟件體系結(jié)構(gòu)不包括硬件、網(wǎng)格以及物理平臺的設(shè)計。軟件架構(gòu)只描述創(chuàng)建軟件所需要的各種環(huán)境,而不是詳細描述整個系統(tǒng)。579.軟件體系結(jié)構(gòu)模式

定義1:模式(pattern)是表示周境、動機、解決方案三個方面關(guān)系的一個規(guī)則,模式描述了一個在某種周境下不斷重復(fù)發(fā)生的問題,以及該問題解決方案的核心所在,模式既是一個事物(thing)又是一個過程(process),不僅描述該事物本身,而且提出了通過怎樣的過程來產(chǎn)生該事物。定義2:模式就是解決某一類問題的方法論。你把解決某類問題的方法總結(jié)歸納到理論高度,那就是模式。

58模式1:數(shù)據(jù)流模式

數(shù)據(jù)流系統(tǒng)的特點是包含兩個或多個數(shù)據(jù)處理的部件,數(shù)據(jù)處理部件將輸入轉(zhuǎn)換為輸出。典型的數(shù)據(jù)流系統(tǒng)包括:

a.批處理程序

b.管道/過濾器程序數(shù)據(jù)處理部件以順序的方式依次處理數(shù)據(jù),前一個處理部件的輸出作為下一個處理部件的輸入。這種形式也稱為管道,如圖所示。59數(shù)據(jù)流模式數(shù)據(jù)處理1數(shù)據(jù)處理2數(shù)據(jù)處理3數(shù)據(jù)處理1子處理B子處理A60模式2:調(diào)用返回模式

調(diào)用返回系統(tǒng)的特點是包含一個主控制器,由它來控制操作的調(diào)用。典型的調(diào)用返回系統(tǒng)包括:

a.主程序/子程序

b.遠程過程調(diào)用系統(tǒng)主程序/子程序系統(tǒng)是經(jīng)典的系統(tǒng)架構(gòu),例如C程序和C++程序都有一個主程序來控制系統(tǒng)的執(zhí)行,如圖6-4所示。61調(diào)用返回模式主程序子程序1子程序2子程序362模式3:虛擬機模式

虛擬機系統(tǒng)執(zhí)行規(guī)定的語言符號,為其它的技術(shù)提供一個語義層。虛擬機結(jié)構(gòu)通常由四個主要部件組成:解釋引擎、包含“偽程序”的內(nèi)存、解釋引擎控制狀態(tài)、程序的執(zhí)行狀態(tài)。典型的虛擬機系統(tǒng)包括:

a.工作流系統(tǒng)

b.游戲程序

c.大型ERP63模式4:共享數(shù)據(jù)模式

共享數(shù)據(jù)系統(tǒng)以一個或多個數(shù)據(jù)庫/數(shù)據(jù)倉庫為中心進行組織,其它部件可以從中讀寫存儲的數(shù)據(jù)。共享數(shù)據(jù)系統(tǒng)還提供并發(fā)訪問、容錯處理、訪問權(quán)限控制等功能。典型的共享數(shù)據(jù)系統(tǒng)包括:

a.數(shù)據(jù)庫

b.知識庫

c.源代碼控制程序64模式5:信息系統(tǒng)模式

現(xiàn)代信息系統(tǒng)平臺模式,主要考慮B/S模式。

B/S模式的三層:表示層(presentation),業(yè)務(wù)層(business),和數(shù)據(jù)存儲層(dataaccess)。

B/S模式的優(yōu)點:

a.架構(gòu)簡化了客戶端。它無需象C/S模式那樣在不同的客戶機上安裝不同的客戶應(yīng)用程序,而只需安裝通用的瀏覽器軟件。

b.簡化了系統(tǒng)的開發(fā)和維護。

c.使用戶的操作變得更簡單。

d.特別適用于網(wǎng)上信息發(fā)布。65模式6:數(shù)據(jù)庫設(shè)計模式第三者插足模式。列變行模式。四個原子化模式。用視圖進行數(shù)據(jù)處理模式。666.4軟件詳細設(shè)計

軟件詳細設(shè)計,又稱為軟件實現(xiàn)設(shè)計。若在概要設(shè)計中將軟件系統(tǒng)劃分為各個不同的子系統(tǒng),則詳細設(shè)計就是各個子系統(tǒng)的實現(xiàn)設(shè)計。若在概要設(shè)計中將軟件系統(tǒng)劃分為各個不同的模塊,則詳細設(shè)計就是各個模塊的實現(xiàn)設(shè)計。若在概要設(shè)計中將軟件系統(tǒng)劃分為各個不同的部件,則詳細設(shè)計就是各個部件的實現(xiàn)設(shè)計。本節(jié)分別介紹面向過程、面向數(shù)據(jù)和面向?qū)ο笕N詳細設(shè)計方法,重點是說明這三種詳細設(shè)計方法的實質(zhì)、各自的描述工具及其相互之間的關(guān)系。67詳細設(shè)計的任務(wù)與步驟1.基本任務(wù)

回答的關(guān)鍵問題:“怎樣具體地實現(xiàn)這個系統(tǒng)”。主要任務(wù)是設(shè)計出程序的“藍圖”,供程序員日后根據(jù)這個藍圖編寫出實際的程序代碼。

2.基本步驟

a.確定模塊如何實現(xiàn)

b.編寫詳細設(shè)計說明書

c.制定單元測試計劃

d.評審詳細設(shè)計686.4.1面向過程詳細設(shè)計

面向過程詳細設(shè)計,實質(zhì)上就是面向算法分析設(shè)計,是其他各種詳細設(shè)計的基礎(chǔ)。一般而言,面向過程詳細設(shè)計的描述工具有下列四種:1.流程圖(Flowchart)

流程圖是用圖形化的方式,表示程序中一系列的操作以及操作執(zhí)行的順序,其表示元數(shù)如表6-2所示。69流程圖(Flowchart)名稱圖例說明終結(jié)符

表示流程的開始和結(jié)束(數(shù)據(jù)源/潭)處理

表示程序的計算步驟或處理過程(具體算法),在方框內(nèi)填寫處理的名稱或程序語句判斷

表示邏輯判斷或分支,用于決定執(zhí)行后續(xù)的路徑,在菱形框內(nèi)填寫判斷的條件輸入/輸出

獲取待處理的信息(輸入),記錄或顯示已處理的信息(輸出)連線

連接其它的符號,表示執(zhí)行順序或數(shù)據(jù)流向70【例7-1】使用流程圖,描述并打印N的階乘,如圖6-6所示。712.N-S圖(Nassi-SchneidermanDiagram)N-S圖是流程圖的另一種表達形式,由Nassi和Schneiderman提出,簡稱N-S圖。與流程圖對應(yīng)的三種結(jié)構(gòu)(順序、分支、循環(huán)),用圖形表示。如圖7-7所示。723.程序設(shè)計語言PDL

程序設(shè)計語言也稱結(jié)構(gòu)化英語或偽代碼,它使用結(jié)構(gòu)化編程語言的風格描述程序算法,但不遵循特定編程語言的語法。程序設(shè)計語言允許你在比源代碼更高的層次上進行設(shè)計。

【例7-3】使用程序設(shè)計語言描述打印N的階乘 讀入N

置F的值為1,置M的值為1

當M<=N時,執(zhí)行: 使F=F*M

使M=M+1

打印F734.決策表(DT)

決策表以緊湊的形式描述復(fù)雜的邏輯。決策表與if-else、switch-case語句類似,將條件判斷與執(zhí)行的動作聯(lián)系起來。決策表通常分成四個區(qū)域,如右圖6-9所示。條件條件選擇動作動作選擇74【例7-4】條件對應(yīng)于一個變量、關(guān)系或預(yù)測,其可能的組合在條件選擇中列出。動作是一個函數(shù)或操作。動作選擇當條件滿足時所執(zhí)行的動作,如右圖6-10所示。條件不能打印√√√√紅燈閃√√√√不能識別打印機√√√√動作檢查電源線√檢查打印機數(shù)據(jù)線√√檢查是否安裝驅(qū)動程序√√√√檢查墨盒√√√√檢查是否卡紙√√755.日本的PADPAD是問題分析圖(ProblemAnalysisDiagram)的英文縮寫,由日立公司發(fā)明,已經(jīng)得到推廣。

PAD圖有以下優(yōu)點:

a.使用PAD圖設(shè)計出來的程序必然是結(jié)構(gòu)化的程序;

b.PAD圖所描述的程序結(jié)構(gòu)非常清晰;

c.PAD圖表現(xiàn)的程序邏輯易讀、易懂、易記;

d.容易將PAD圖轉(zhuǎn)換成程序;

e.PAD圖還可以描述數(shù)據(jù)結(jié)構(gòu);

f.PAD圖支持自頂向下、逐步求精方法的使用。76776.4.2面向數(shù)據(jù)詳細設(shè)計

面向數(shù)據(jù)設(shè)計,它以實體--關(guān)系模型為基礎(chǔ),按照一定的規(guī)則將概念數(shù)據(jù)模型CDM轉(zhuǎn)換成能被某種數(shù)據(jù)庫管理系統(tǒng)接受的物理數(shù)據(jù)模型PDM,創(chuàng)建物理上的數(shù)據(jù)庫表、索引和視圖,并且用存儲過程和觸發(fā)器來實現(xiàn)各種業(yè)務(wù)規(guī)則。實踐證明,凡是用存儲過程能實現(xiàn)觸發(fā)器功能的地方,就堅決用存儲過程,而不用觸發(fā)器,因為過多的觸發(fā)器不但影響數(shù)據(jù)庫的運行性能,而且可能導(dǎo)致數(shù)據(jù)庫系統(tǒng)崩潰。78面向數(shù)據(jù)詳細設(shè)計

面向數(shù)據(jù)詳細設(shè)計,實質(zhì)上就是面向元數(shù)據(jù)詳細設(shè)計。元數(shù)據(jù)是數(shù)據(jù)庫和數(shù)據(jù)倉庫中的重要概念,元數(shù)據(jù)是關(guān)于數(shù)據(jù)的數(shù)據(jù),組織數(shù)據(jù)的數(shù)據(jù),領(lǐng)導(dǎo)數(shù)據(jù)的數(shù)據(jù),管理數(shù)據(jù)的數(shù)據(jù)。在詳細設(shè)計時,對于這些元數(shù)據(jù),都要用圖形、數(shù)據(jù)字典或文字進行詳細描述。對存儲過程中的算法,也要進行詳細設(shè)計。因此,面向數(shù)據(jù)詳細設(shè)計的描述工具,主要是概念數(shù)據(jù)模型CDM、物理數(shù)據(jù)模型PDM和存儲過程。80%以上的工作,可以在CDM上完成。7980面向數(shù)據(jù)詳細設(shè)計

在圖中,需要說明2點。(1)圖書與圖冊關(guān)系的理解與處理。實體“圖書”與實體“圖冊”之間的關(guān)系,是一對多關(guān)系。這種處理的好處是:讀者預(yù)借或者借閱,只是直接與圖冊打交道,而不直接與圖書打交道,從而防止了極少數(shù)讀者將別人的圖冊偷來冒稱自已的圖冊還書。(2)多對多關(guān)系的理解與處理。實體“讀者”與實體“圖冊”之間的關(guān)系,是多對多關(guān)系,這種多對多的復(fù)雜關(guān)系,是通過兩個實體“預(yù)約記錄”和“借閱記錄”來簡化的。而實體“圖書”與實體“作者”之間的多對多關(guān)系,是通過實體“圖書作者”來簡化的。81面向數(shù)據(jù)詳細設(shè)計

由于CASE工具PowerDesigner具有正向和逆向的雙向功能,所以既可以從CDM生成PDM,又可以從PDM生成CDM。由此可見,數(shù)據(jù)模型設(shè)計,也可以從PDM開始進行。在詳細設(shè)計時,對于圖中物理數(shù)據(jù)模型中的表名和字段名,以及在此基礎(chǔ)上產(chǎn)生的索引名、視圖名、存儲過程名都要進行詳細定義與解釋,對存儲過程中的算法也要具體說明。同時,還要對數(shù)據(jù)庫的表結(jié)構(gòu)與系統(tǒng)的錄入界面及輸出報表之間的關(guān)系,作出詳盡的描述。8283846.4.3面向?qū)ο笤敿氃O(shè)計(專開一章)

軟件系統(tǒng)的架構(gòu)設(shè)計完成后,利用UML的描述工具:類圖、順序圖、狀態(tài)圖、部件圖、部署圖,分別將架構(gòu)中的部件(組件/構(gòu)件)進行實現(xiàn)設(shè)計,直到可以編程為止;在實現(xiàn)設(shè)計中,對類類的屬性定義、類的方法算法、接口說明、接口實現(xiàn)、類之間的關(guān)系、對象與消息之間的關(guān)系、實體之間的狀態(tài)轉(zhuǎn)換,均要詳細說清楚。85*6.4.4軟件詳細設(shè)計方法總結(jié)

運用詳細設(shè)計的描述工具,將架構(gòu)內(nèi)的構(gòu)件,設(shè)計成編程實現(xiàn)的蘭圖,就是詳情設(shè)計。對于B/S的系統(tǒng),“面向數(shù)據(jù)方法用在數(shù)據(jù)庫服務(wù)器層次上系統(tǒng)的設(shè)計與實現(xiàn),面向?qū)ο蠓椒ㄓ迷诔龜?shù)據(jù)庫服務(wù)器層次之外的其他層次上系統(tǒng)的設(shè)計與實現(xiàn),面向過程方法用在其他兩種方法本身內(nèi)部函數(shù)的設(shè)計與實現(xiàn)”。這三種方法是互相幫助、取長補短、彼此有關(guān)的。一般而言,對于一個大型信息系統(tǒng)的建設(shè),由于其分析、設(shè)計、實現(xiàn)、測試、維護的重點是數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù),所以在實施的過程中,在宏觀上仍然要遵守“五個面向”的實施理論,即:“面向流程分析、面向數(shù)據(jù)設(shè)計、面向?qū)ο髮崿F(xiàn)、面向功能測試、面向過程管理”。86*6.5軟件屬性和度量

6.5.1設(shè)計屬性

軟件架構(gòu)的設(shè)計屬性,表現(xiàn)在它們的可用性和可管理性上。1.可用性可用性是系統(tǒng)正常運行時間的概率,即:可用性=平均正常工作時間/(平均正常工作時間+平均修復(fù)時間)87影響可用性的因素不充分的測試。更改管理問題。缺少在線監(jiān)視和分析。操作錯誤。弱編碼。與外部服務(wù)或應(yīng)用程序的交互。不同的操作條件(使用級別更改、峰值重載)。異常事件(安全性失敗、廣播風暴)。硬件故障(硬盤、控制器、網(wǎng)絡(luò)設(shè)備、服務(wù)器、電源、內(nèi)存和CPU)。環(huán)境問題(電源、冷卻、火、洪水、灰塵、自然災(zāi)害)。88提高可用性的辦法

(1)使用群集。集群包括至少將兩個系統(tǒng)連接到一起,使兩個服務(wù)器能夠像一臺機器那樣工作或者看起來好像一臺機器。

集集是高可用性的關(guān)鍵技術(shù),因為它在出現(xiàn)失敗時,提供即時故障轉(zhuǎn)移應(yīng)用程序服務(wù)。

(2)使用網(wǎng)絡(luò)負載平衡?!熬W(wǎng)絡(luò)負載平衡”(NLB),它通過檢測某服務(wù)器失敗后,能自動將通信量重新分發(fā)給仍然運行的服務(wù)器。89提高可用性的辦法(續(xù))

(3)使用服務(wù)級別協(xié)議。定義期望的服務(wù)級別。這樣的服務(wù)級別協(xié)議應(yīng)包括這樣的細節(jié):“該應(yīng)用程序應(yīng)每周7天、每天24小時運行,年可用性為99.9%”。

(4)提供實時的監(jiān)視。連續(xù)監(jiān)視操作工作負荷和失敗數(shù)據(jù),對于發(fā)現(xiàn)趨勢和改善服務(wù)至關(guān)重要。

(5)使用數(shù)據(jù)備份。

(6)檢查所有安全計劃。安全性是指確保應(yīng)用程序服務(wù)只對有資格的用戶可用。安全性還意味著保護應(yīng)用程序使用的所有分布式組件和資源。902.可管理性

(1)可靠性軟件可靠性是指應(yīng)用程序能在多大程度上,在不發(fā)生失敗的情況下,準確地提供在原始規(guī)范中定義的服務(wù):

可靠性=

小時數(shù)/失敗次數(shù)例如,假設(shè)預(yù)期應(yīng)用程序提供的可靠性為:每天24小時操作,每30天發(fā)生一次失敗(大約每720小時失敗一次)。測試表明應(yīng)用程序運行1800小時中發(fā)生兩次失敗,所以,可靠性=1800/2=900小時軟件可靠性的一個重要概念,是當軟件發(fā)生失敗時,軟件仍可用并繼續(xù)執(zhí)行的程度。912.可管理性(續(xù))

(2)可維護性

可移植性:軟件系統(tǒng)能否在不同的硬件、操作系統(tǒng)上運行。

可修改性:添加新功能或修改現(xiàn)有功能的難易程度。可修改性差的系統(tǒng)有以下表現(xiàn):

a.脆弱。修改脆弱的軟件系統(tǒng)將破壞現(xiàn)有的功能。

b.僵化。軟件系統(tǒng)難以用簡單的方式進行修改。

c.重復(fù)。重復(fù)代碼散布各個角落,使之難于修改。

易理解性:只有理解原有的系統(tǒng)才能對它進行修改??烧{(diào)試性:支持多級的在線調(diào)試。922.可管理性(續(xù))(3)其它屬性

文化適應(yīng)性:是否提供多語言版本支持,提供對不同文件差異的支持。

可測試性:軟件可以有效的測試。

易用性:提供友好的人機界面。

危險性:系統(tǒng)對現(xiàn)實世界不會帶來災(zāi)難。936.5.2設(shè)計度量

設(shè)計度量是指評估和量化軟件設(shè)計的結(jié)構(gòu)、質(zhì)量等方面的屬性,用于項目的質(zhì)量控制和進度控制。1.面向過程設(shè)計的度量

(1)內(nèi)聚度量利用數(shù)據(jù)切片對功能內(nèi)聚進行度量。內(nèi)聚度量SFC則是超級膠合數(shù)據(jù)與所有數(shù)據(jù)的比值:

SFC的值越大,內(nèi)聚程度越高。94參數(shù)及符號說明:SFC:strongfunctionalcohesion(強功能性內(nèi)聚)P:procedureSA:sliceabstraction(切片抽取)SG(SA(p)):(表示位于所有SA(p)數(shù)據(jù)切片上的數(shù)據(jù)符號集合)Tockens(p):表示過程p的數(shù)據(jù)符號集合。951.面向過程設(shè)計的度量(續(xù))(2)耦合度量耦合度F反映了模塊與模塊之間、模塊與全局數(shù)據(jù)之間、模塊與環(huán)境之間的關(guān)聯(lián),F(xiàn)的值越大,耦合度越高。計算公式為:

F=1/(i1+q1i2+u1+q2u2+g1+q3g2+w+r)其中:

i1=輸入數(shù)據(jù)參數(shù)的個數(shù)

i2=輸入控制參數(shù)的個數(shù)

u1=輸出數(shù)據(jù)參數(shù)的個數(shù)

u2=輸出控制參數(shù)的個數(shù)

g1=全局變量用于數(shù)據(jù)的個數(shù)

g2=全局變量用于控制的個數(shù)

w=被調(diào)用模塊的個數(shù)

r=調(diào)用該模塊的模塊個數(shù)

q1,q2,q3=2961.面向過程設(shè)計的度量(續(xù))(3)復(fù)雜度度量程序復(fù)雜度反映出其可靠性和可維護性,從復(fù)雜度的分析中可以找到系統(tǒng)潛在的不可靠的區(qū)域。復(fù)雜度與程序的大小無關(guān),只取決于程序的判斷分支結(jié)構(gòu)。從圖論出發(fā),復(fù)雜度度量公式為:

v=e-n+2p其中:

e=圖形頂點數(shù)

n=邊數(shù)

p=相連部件的數(shù)量972.面向?qū)ο笤O(shè)計的度量

目前廣泛被采用的面向?qū)ο蟮亩攘繕藴?,是由Chidamber和Kemerer提出的,簡稱為CK度量套件。CK度量套件中提出了6個設(shè)計度量:度量1:每個類的加權(quán)方法(WeightedMethodsPerClass,WMC)設(shè)M1,…,Mn是類C的方法,并且M1,…,Mn的復(fù)雜度分別為C1,…,Cn。那么982.面向?qū)ο笤O(shè)計的度量(續(xù))

度量2:繼承樹的深度(DepthofInheritanceTree,DIT)指一個類到根類的深度,如果涉及多重繼承,取深度的最大值。DIT值反映了一個類受其父類的影響程度的大小。一個類的DIT值越大,它所繼承的方法越大,要預(yù)測它的行為越困難。度量3:子類數(shù)量(NumberofChildren,NOC)

NOC指一個類的直接子類的數(shù)量。一個類的子類越多,其復(fù)用性越高。NOC值越大,該類的被正確抽象的可能性越低,對子類的影響就越大,需要對該類進行更多的測試。992.面向?qū)ο笤O(shè)計的度量(續(xù))

度量4:對象類間的耦合(Couplingbetweenobjectclasses,CBO)

CBO指與一個類相耦合的類的數(shù)量。類間耦合越高,其模塊化程度和復(fù)用性越差。一個類的CBO值越大,對設(shè)計的其它部分的更改越敏感,其可維護性越差,需要進行的測試更多。度量5:類的響應(yīng)(ResponseForaClass,RFC)

RFC指一個類的消息響應(yīng)集合的勢。一個類的消息響應(yīng)集合是指當一個類的對象接收到一個消息時,可能會被執(zhí)行的方法的集合。RFC值越大,類的復(fù)雜度越高,測試和調(diào)試工作量越大。1002.面向?qū)ο笤O(shè)計的度量(續(xù))

度量6:方法中缺少內(nèi)聚(LackofCohesioninMethods,LCOM)一個類具有相似的方法越多,類的內(nèi)聚性越高,其封裝性越好。當一個類內(nèi)聚性低時,應(yīng)該將該類分割成多個子類。1013.面向數(shù)據(jù)設(shè)計的度量

度量1:復(fù)雜關(guān)系(多對多關(guān)系)的個數(shù)r。設(shè)法將復(fù)雜關(guān)系(多對多)轉(zhuǎn)化為簡單關(guān)系(一對多);度量2:基本表的個數(shù)t。若基本表的個數(shù)太多,則說明數(shù)據(jù)集成度差。若基本表個數(shù)太少,則可能要進行列變行;度量3:字段(數(shù)據(jù)項)的個數(shù)f。若字段的個數(shù)太多,則說明可能存在冗余。若字段個數(shù)太少,則可能要進一步將屬性原子化;度量4:基

溫馨提示

  • 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

提交評論