概要設(shè)計(jì)怎么寫(xiě)(你想成為軟件設(shè)計(jì)師嗎) (轉(zhuǎn)貼)( 2005-08-10 11:41)
發(fā)表者付:
做軟件到一定層次了,就要考慮到設(shè)計(jì)了,設(shè)計(jì)了很久,就是不系統(tǒng),系統(tǒng)的設(shè)計(jì)需要一個(gè)記錄,記錄就用文檔,那么對(duì)項(xiàng)目所有包括技術(shù)上的設(shè)計(jì)都記錄下來(lái),我們就可以理解為軟件的概要設(shè)計(jì)了。
在需求明確、準(zhǔn)備開(kāi)始編碼之前,要做概要設(shè)計(jì),而詳細(xì)設(shè)計(jì)可能大部分公司沒(méi)有做,有做的也大部分是和編碼同步進(jìn)行,或者在編碼之后。因此,對(duì)大部分的公司來(lái)說(shuō),概要設(shè)計(jì)文檔是唯一的設(shè)計(jì)文檔,對(duì)后面的開(kāi)發(fā)、測(cè)試、實(shí)施、維護(hù)工作起到關(guān)鍵性的影響。
一、問(wèn)題的提出
概要設(shè)計(jì)寫(xiě)什么?概要設(shè)計(jì)怎么做?
如何判斷設(shè)計(jì)的模塊是完整的?
為什么說(shuō)設(shè)計(jì)階段過(guò)于重視業(yè)務(wù)流程是個(gè)誤區(qū)?
以需求分析文檔還是以概要設(shè)計(jì)文檔來(lái)評(píng)估開(kāi)發(fā)工作量、指導(dǎo)開(kāi)發(fā)計(jì)劃準(zhǔn)確?
結(jié)構(gòu)化好還是面向?qū)ο蠛茫?BR> 以上問(wèn)題的答案請(qǐng)?jiān)谖恼轮姓摇?BR> 二、概要設(shè)計(jì)的目的
將軟件系統(tǒng)需求轉(zhuǎn)換為未來(lái)系統(tǒng)的設(shè)計(jì);
逐步開(kāi)發(fā)強(qiáng)壯的系統(tǒng)構(gòu)架;
使設(shè)計(jì)適合于實(shí)施環(huán)境,為提高性能而進(jìn)行設(shè)計(jì);
結(jié)構(gòu)應(yīng)該被分解為模塊和庫(kù)。
三、概要設(shè)計(jì)的任務(wù)
制定規(guī)范:代碼體系、接口規(guī)約、命名規(guī)則。這是項(xiàng)目小組今后共同作戰(zhàn)的基礎(chǔ),有了開(kāi)發(fā)規(guī)范和程序模塊之間和項(xiàng)目成員彼此之間的接口規(guī)則、方式方法,大家就有了共同的工作語(yǔ)言、共同的工作平臺(tái),使整個(gè)軟件開(kāi)發(fā)工作可以協(xié)調(diào)有序地進(jìn)行。
總體結(jié)構(gòu)設(shè)計(jì):
功能(加工)->模塊:每個(gè)功能用那些模塊實(shí)現(xiàn),保證每個(gè)功能都有相應(yīng)的模塊來(lái)實(shí)現(xiàn);
模塊層次結(jié)構(gòu):某個(gè)角度的軟件框架視圖;
模塊間的調(diào)用關(guān)系:模塊間的接口的總體描述;
模塊間的接口:傳遞的信息及其結(jié)構(gòu);
處理方式設(shè)計(jì):滿(mǎn)足功能和性能的算法
用戶(hù)界面設(shè)計(jì);
數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):
詳細(xì)的數(shù)據(jù)結(jié)構(gòu):表、索引、文件;
算法相關(guān)邏輯數(shù)據(jù)結(jié)構(gòu)及其操作;
上述操作的程序模塊說(shuō)明(在前臺(tái)?在后臺(tái)?用視圖?用過(guò)程?······)
接口控制表的數(shù)據(jù)結(jié)構(gòu)和使用規(guī)則
其他性能設(shè)計(jì)。
四、概要設(shè)計(jì)寫(xiě)什么
結(jié)構(gòu)化軟件設(shè)計(jì)說(shuō)明書(shū)結(jié)構(gòu)(因篇幅有限和過(guò)時(shí)嫌疑,在此不作過(guò)多解釋?zhuān)?BR> 任務(wù):目標(biāo)、環(huán)境、需求、局限;
總體設(shè)計(jì):處理流程、總體結(jié)構(gòu)與模塊、功能與模塊的關(guān)系;
接口設(shè)計(jì):總體說(shuō)明外部用戶(hù)、軟、硬件接口;內(nèi)部模塊間接口(注:接口≈系統(tǒng)界面)
數(shù)據(jù)結(jié)構(gòu):邏輯結(jié)構(gòu)、物理結(jié)構(gòu),與程序結(jié)構(gòu)的關(guān)系;
模塊設(shè)計(jì):每個(gè)模塊“做什么”、簡(jiǎn)要說(shuō)明“怎么做”(輸入、輸出、處理邏輯、與其它模塊的接口,與其它系統(tǒng)或硬件的接口),處在什么邏輯位置、物理位置;
運(yùn)行設(shè)計(jì):運(yùn)行模塊組合、控制、時(shí)間;
出錯(cuò)設(shè)計(jì):出錯(cuò)信息、處錯(cuò)處理;
其他設(shè)計(jì):保密、維護(hù);
OO軟件設(shè)計(jì)說(shuō)明書(shū)結(jié)構(gòu)
1 概述
系統(tǒng)簡(jiǎn)述、軟件設(shè)計(jì)目標(biāo)、參考資料、修訂版本記錄
這部分論述整個(gè)系統(tǒng)的設(shè)計(jì)目標(biāo),明確地說(shuō)明哪些功能是系統(tǒng)決定實(shí)現(xiàn)而哪些時(shí)不準(zhǔn)備實(shí)現(xiàn)的。同時(shí),對(duì)于非功能性的需求例如性能、可用性等,亦需提及。需求規(guī)格說(shuō)明書(shū)對(duì)于這部分的內(nèi)容來(lái)說(shuō)是很重要的參考,看看其中明確了的功能性以及非功能性的需求。
這部分必須說(shuō)清楚設(shè)計(jì)的全貌如何,務(wù)必使讀者看后知道將實(shí)現(xiàn)的系統(tǒng)有什么特點(diǎn)和功能。在隨后的文檔部分,將解釋設(shè)計(jì)是怎么來(lái)實(shí)現(xiàn)這些的。
2 術(shù)語(yǔ)表
對(duì)本文檔中所使用的各種術(shù)語(yǔ)進(jìn)行說(shuō)明。如果一些術(shù)語(yǔ)在需求規(guī)格說(shuō)明書(shū)中已經(jīng)說(shuō)明過(guò)了,此處不用再重復(fù),可以指引讀者參考需求說(shuō)明。
3 用例
此處要求系統(tǒng)用用例圖表述(UML),對(duì)每個(gè)用例(正常處理的情況)要有中文敘述。
4 設(shè)計(jì)概述
4.1 簡(jiǎn)述
這部分要求突出整個(gè)設(shè)計(jì)所采用的方法(是面向?qū)ο笤O(shè)計(jì)還是結(jié)構(gòu)化設(shè)計(jì))、系統(tǒng)的體系結(jié)構(gòu)(例如客戶(hù)/服務(wù)器結(jié)構(gòu))以及使用到的相應(yīng)技術(shù)和工具(例如OMT、Rose)
4.2 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
這部分要求提供高層系統(tǒng)結(jié)構(gòu)(頂層系統(tǒng)結(jié)構(gòu)、各子系統(tǒng)結(jié)構(gòu))的描述,使用方框圖來(lái)顯示主要的組件及組件間的交互。最好是把邏輯結(jié)構(gòu)同物理結(jié)構(gòu)分離,對(duì)前者進(jìn)行描述。別忘了說(shuō)明圖中用到的俗語(yǔ)和符號(hào)。
4.3 系統(tǒng)界面
各種提供給用戶(hù)的界面以及外部系統(tǒng)在此處要予以說(shuō)明。如果在需求規(guī)格說(shuō)明書(shū)中已經(jīng)對(duì)用戶(hù)界面有了敘述,此處不用再重復(fù),可以指引讀者參考需求說(shuō)明。如果系統(tǒng)提供了對(duì)其它系統(tǒng)的接口,比如說(shuō)從其它軟件系統(tǒng)導(dǎo)入/導(dǎo)出數(shù)據(jù),必須在此說(shuō)明。
4.4 約束和假定
描述系統(tǒng)設(shè)計(jì)中最主要的約束,這些是由客戶(hù)強(qiáng)制要求并在需求說(shuō)明書(shū)寫(xiě)明的。說(shuō)明系統(tǒng)是如何來(lái)適應(yīng)這些約束的。
另外如果本系統(tǒng)跟其它外部系統(tǒng)交互或者依賴(lài)其它外部系統(tǒng)提供一些功能輔助,那么系統(tǒng)可能還受到其它的約束。這種情況下,要求清楚地描述與本系統(tǒng)有交互的軟件類(lèi)型以及這樣導(dǎo)致的約束。
實(shí)現(xiàn)的語(yǔ)言和平臺(tái)也會(huì)對(duì)系統(tǒng)有約束,同樣在此予以說(shuō)明。
對(duì)于因選擇具體的設(shè)計(jì)實(shí)現(xiàn)而導(dǎo)致對(duì)系統(tǒng)的約束,簡(jiǎn)要地描述你的想法思路,經(jīng)過(guò)怎么樣的權(quán)衡,為什么要采取這樣的設(shè)計(jì)等等。
5 對(duì)象模型
提供整個(gè)系統(tǒng)的對(duì)象模型,如果模型過(guò)大,按照可行的標(biāo)準(zhǔn)把它劃分成小塊,例如可以把客戶(hù)端和服務(wù)器端的對(duì)象模型分開(kāi)成兩個(gè)圖表述。在其中應(yīng)該包含所有的系統(tǒng)對(duì)象。這些對(duì)象都是從理解需求后得到的。要明確哪些應(yīng)該、哪些不應(yīng)該被放進(jìn)圖中。所有對(duì)象之間的關(guān)聯(lián)必須被確定并且必須指明聯(lián)系的基數(shù)。聚合和繼承關(guān)系必須清楚地確定下來(lái)。每個(gè)圖必須附有簡(jiǎn)單的說(shuō)明。
6 對(duì)象描述
在這個(gè)部分?jǐn)⑹雒總€(gè)對(duì)象的細(xì)節(jié),它的屬性、它的方法。在這之前必須從邏輯上對(duì)對(duì)象進(jìn)行組織。你可能需要用結(jié)構(gòu)圖把對(duì)象按子系統(tǒng)劃分好。
為每個(gè)對(duì)象做一個(gè)條目。在系統(tǒng)對(duì)象模型中簡(jiǎn)要的描述它的用途、約束(如只能有一個(gè)實(shí)例),列出它的屬性和方法。如果對(duì)象是存儲(chǔ)在持久的數(shù)據(jù)容器中,標(biāo)明它是持久對(duì)象,否則說(shuō)明它是個(gè)臨時(shí)對(duì)象(transient object)。
對(duì)每個(gè)對(duì)象的每個(gè)屬性詳細(xì)說(shuō)明:名字、類(lèi)型,如果屬性不是很直觀或者有約束(例如,每個(gè)對(duì)象的該屬性必須有一個(gè)唯一的值或者值域是有限正整數(shù)等)。
對(duì)每個(gè)對(duì)象的每個(gè)方法詳細(xì)說(shuō)明:方法名,返回類(lèi)型,返回值,參數(shù),用途以及使用的算法的簡(jiǎn)要說(shuō)明(如果不是特別簡(jiǎn)單的話(huà))。如果對(duì)變量或者返回值由什么假定的話(huà),Pre-conditions和Post-conditions必須在此說(shuō)明。列出它或者被它調(diào)用的方法需要訪問(wèn)或者修改的屬性。最后,提供可以驗(yàn)證實(shí)現(xiàn)方法的測(cè)試案例。
7 動(dòng)態(tài)模型
這部分的作用是描述系統(tǒng)如何響應(yīng)各種事件。一般使用順序圖和狀態(tài)圖。
確定不同的場(chǎng)景(Scenario)是第一步,不需要確定所有可能的場(chǎng)景,但是必須至少要覆蓋典型的系統(tǒng)用例。不要自己去想當(dāng)然地創(chuàng)造場(chǎng)景,通常的策略是描述那些客戶(hù)可以感受得到的場(chǎng)景。
7.1 場(chǎng)景(Scenarios)
對(duì)每個(gè)場(chǎng)景做一則條目,包括以下內(nèi)容:
場(chǎng)景名:給它一個(gè)可以望文生義的名字
場(chǎng)景描述:簡(jiǎn)要敘述場(chǎng)景是干什么的以及發(fā)生的動(dòng)作的順序。
順序圖:描述各種事件及事件發(fā)生的相對(duì)時(shí)間順序。
7.2 狀態(tài)圖
這部分的內(nèi)容包括系統(tǒng)動(dòng)態(tài)模型重要的部分的狀態(tài)圖。可能你想為每個(gè)對(duì)象畫(huà)一個(gè)狀態(tài)圖,但事實(shí)上會(huì)導(dǎo)致太多不期望的細(xì)節(jié)信息,只需要確定系統(tǒng)中一些重要的對(duì)象并為之提供狀態(tài)圖即可。
8 非功能性需求
五、概要設(shè)計(jì)怎么做
結(jié)構(gòu)化軟件設(shè)計(jì)方法:
詳細(xì)閱讀需求規(guī)格說(shuō)明書(shū),理解系統(tǒng)建設(shè)目標(biāo)、業(yè)務(wù)現(xiàn)狀、現(xiàn)有系統(tǒng)、客戶(hù)需求的各功能說(shuō)明;
分析數(shù)據(jù)流圖,弄清數(shù)據(jù)流加工的過(guò)程;
根據(jù)數(shù)據(jù)流圖決定數(shù)據(jù)處理問(wèn)題的類(lèi)型(變換型、事務(wù)型、其他型);
通過(guò)以上分析,推導(dǎo)出系統(tǒng)的初始結(jié)構(gòu)圖;
對(duì)初始結(jié)構(gòu)圖進(jìn)行改進(jìn)完善:所有的加工都要能對(duì)應(yīng)到相應(yīng)模塊(模塊的完整性在于他們完成了需求中的所有加工),消除完全相似或局部相似的重復(fù)功能(智者察同),理清模塊間的層次、控制關(guān)系,減少高扇出結(jié)構(gòu),隨著深度增大扇入,平衡模塊大小。
由對(duì)數(shù)據(jù)字典的修改補(bǔ)充完善,導(dǎo)出邏輯數(shù)據(jù)結(jié)構(gòu),導(dǎo)出每種數(shù)據(jù)結(jié)構(gòu)上的操作,這些操作應(yīng)當(dāng)屬于某個(gè)模塊。
確定系統(tǒng)包含哪些應(yīng)用服務(wù)系統(tǒng)、客戶(hù)端、數(shù)據(jù)庫(kù)管理系統(tǒng);
確定每個(gè)模塊放在哪個(gè)應(yīng)用服務(wù)器或客戶(hù)端的哪個(gè)目錄、哪個(gè)文件(庫(kù)),或是在數(shù)據(jù)庫(kù)內(nèi)部建立的對(duì)象。
對(duì)每個(gè)篩選后的模塊進(jìn)行列表說(shuō)明。
對(duì)邏輯數(shù)據(jù)結(jié)構(gòu)進(jìn)行列表說(shuō)明。
根據(jù)結(jié)構(gòu)化軟件設(shè)計(jì)說(shuō)明書(shū)結(jié)構(gòu)對(duì)其他需要說(shuō)明的問(wèn)題進(jìn)行補(bǔ)充說(shuō)明,形成概要設(shè)計(jì)說(shuō)明書(shū)。
OO軟件設(shè)計(jì)方法:
在OOA基礎(chǔ)上設(shè)計(jì)對(duì)象與類(lèi):在問(wèn)題領(lǐng)域分析(業(yè)務(wù)建模和需求分析)之后,開(kāi)始建立系統(tǒng)構(gòu)架。
第一步是抽取建立領(lǐng)域的概念模型,在UML中表現(xiàn)為建立對(duì)象類(lèi)圖、活動(dòng)圖和交互圖。對(duì)象類(lèi)就是從對(duì)象中經(jīng)過(guò)“察同”找出某組對(duì)象之間的共同特征而形成類(lèi):
對(duì)象與類(lèi)的屬性:數(shù)據(jù)結(jié)構(gòu);
對(duì)象與類(lèi)的服務(wù)操作:操作的實(shí)現(xiàn)算法;
對(duì)象與類(lèi)的各外部聯(lián)系的實(shí)現(xiàn)結(jié)構(gòu);
設(shè)計(jì)策略:充分利用現(xiàn)有的類(lèi);
方法:繼承、復(fù)用、演化;
活動(dòng)圖用于定義工作流,主要說(shuō)明工作流的5W(Do What、Who Do、When Do、Where Do、Why Do)等問(wèn)題,交互圖把人員和業(yè)務(wù)聯(lián)系在一起是為了理解交互過(guò)程,發(fā)現(xiàn)業(yè)務(wù)工作流中相互交互的各種角色。
第二步是構(gòu)建完善系統(tǒng)結(jié)構(gòu):對(duì)系統(tǒng)進(jìn)行分解,將大系統(tǒng)分解為若干子系統(tǒng),子系統(tǒng)分解為若干軟件組件,并說(shuō)明子系統(tǒng)之間的靜態(tài)和動(dòng)態(tài)接口,每個(gè)子系統(tǒng)可以由用例模型、分析模型、設(shè)計(jì)模型、測(cè)試模型表示。軟件系統(tǒng)結(jié)構(gòu)的兩種方式:層次、塊狀
層次結(jié)構(gòu):系統(tǒng)、子系統(tǒng)、模塊、組件(同一層之間具有獨(dú)立性);
塊狀結(jié)構(gòu):相互之間弱耦合
系統(tǒng)的組成部分:
問(wèn)題論域:業(yè)務(wù)相關(guān)類(lèi)和對(duì)象(OOA的重點(diǎn));
人機(jī)界面:窗口、菜單、按鈕、命令等等;
數(shù)據(jù)管理:數(shù)據(jù)管理方法、邏輯物理結(jié)構(gòu)、操作對(duì)象類(lèi);
任務(wù)管理:任務(wù)協(xié)調(diào)和管理進(jìn)程;
第三步是利用“4+1”視圖描述系統(tǒng)架構(gòu):用例視圖及劇本;說(shuō)明體系結(jié)構(gòu)的設(shè)計(jì)視圖;以模塊形式組成包和層包含概要實(shí)現(xiàn)模型的實(shí)現(xiàn)視圖;說(shuō)明進(jìn)程與線(xiàn)程及其架構(gòu)、分配和相互交互關(guān)系的過(guò)程視圖;說(shuō)明系統(tǒng)在操作平臺(tái)上的物理節(jié)點(diǎn)和其上的任務(wù)分配的配置視圖。在RUP中還有可選的數(shù)據(jù)視圖。
第四步是性能優(yōu)化(速度、資源、內(nèi)存)、模型清晰化、簡(jiǎn)單化(簡(jiǎn)單就是享受)。
六、概要設(shè)計(jì)的原則
總體原則和方法:由粗到細(xì)的原則,互相結(jié)合的原則,定性分析和定量分析相結(jié)合的方法,分解和協(xié)調(diào)的方法和模型化方法。
要系統(tǒng)考慮系統(tǒng)的一般性、關(guān)聯(lián)性、整體性和層次性。
分解協(xié)調(diào):目的是為了創(chuàng)造更好的系統(tǒng)。系統(tǒng)分解是指將一個(gè)復(fù)雜的系統(tǒng)分解為若干個(gè)子系統(tǒng),系統(tǒng)協(xié)調(diào)一是系統(tǒng)內(nèi)協(xié)調(diào),即根據(jù)系統(tǒng)的總結(jié)構(gòu)、總功能、總?cè)蝿?wù)和總目標(biāo)的要求,使各個(gè)子系統(tǒng)之間互相協(xié)調(diào)配合,在各個(gè)子系統(tǒng)局部?jī)?yōu)化基礎(chǔ)上,通過(guò)內(nèi)部平衡的協(xié)調(diào)控制,實(shí)現(xiàn)系統(tǒng)的整體優(yōu)化;
屏蔽抽象:從簡(jiǎn)單的框架開(kāi)始,隱含細(xì)節(jié);
一致性:統(tǒng)一的規(guī)范、統(tǒng)一的標(biāo)準(zhǔn)、統(tǒng)一的文件模式;
每個(gè)模塊應(yīng)當(dāng)有一個(gè)統(tǒng)一命名的容易理解的名字;
編碼:由外向內(nèi)(界面->核心);
面向用戶(hù):概要設(shè)計(jì)是對(duì)于按鈕按下后系統(tǒng)“怎么做”的簡(jiǎn)要說(shuō)明;
模塊、組件的充分獨(dú)立性、封閉性;
同時(shí)考慮靜態(tài)結(jié)構(gòu)與動(dòng)態(tài)運(yùn)行;
每個(gè)邏輯對(duì)象都應(yīng)當(dāng)說(shuō)明其所處物理對(duì)象(非一一對(duì)應(yīng));
每個(gè)物理對(duì)象都有合適的開(kāi)發(fā)人員,并且利于分工與組裝。(詳細(xì)說(shuō)明見(jiàn)本人另一篇文章:系統(tǒng)構(gòu)架設(shè)計(jì)應(yīng)考慮的因素);
確立每個(gè)構(gòu)架視圖的整體結(jié)構(gòu):視圖的詳細(xì)組織結(jié)構(gòu)、元素的分組以及這些主要分組之間的接口;
軟件構(gòu)架與使用的技術(shù)平臺(tái)密切相關(guān),目前常用的平臺(tái)有J2EE、.NET、CORBA等等,因此具體的軟件構(gòu)架人員應(yīng)當(dāng)具備使用這些平臺(tái)的軟件開(kāi)發(fā)經(jīng)驗(yàn);
通過(guò)需求功能與設(shè)計(jì)模塊之間的列表對(duì)應(yīng),檢查每個(gè)需求功能是否都有相應(yīng)的模塊來(lái)實(shí)現(xiàn),保證需求功能的可追溯性和需求實(shí)現(xiàn)(模塊)的完整性,同時(shí)可以檢查重復(fù)和不必要的模塊。
在需求調(diào)研分析過(guò)程中對(duì)業(yè)務(wù)處理過(guò)程了解的完整性和準(zhǔn)確性非常重要。調(diào)查了解清楚所有的業(yè)務(wù)流程才能設(shè)計(jì)出適合各流程業(yè)務(wù)節(jié)點(diǎn)用戶(hù)業(yè)務(wù)特點(diǎn)和習(xí)慣的軟件,使開(kāi)發(fā)出來(lái)的軟件更受歡迎。當(dāng)然在進(jìn)行軟件概要設(shè)計(jì)時(shí),要盡量排除業(yè)務(wù)流程的制約,即把流程中的各項(xiàng)業(yè)務(wù)結(jié)點(diǎn)工作作為獨(dú)立的對(duì)象,設(shè)計(jì)成獨(dú)立的模塊,充分考慮他們與其他各種業(yè)務(wù)對(duì)象模塊的接口,在流程之間通過(guò)業(yè)務(wù)對(duì)象模塊的相互調(diào)用實(shí)現(xiàn)各種業(yè)務(wù),這樣,在業(yè)務(wù)流程發(fā)生有限的變化時(shí)(每個(gè)業(yè)務(wù)模塊本身的業(yè)務(wù)邏輯沒(méi)有變的情況下),就能夠比較方便地修改系統(tǒng)程序模塊間的調(diào)用關(guān)系而實(shí)現(xiàn)新的需求。如果這種調(diào)用關(guān)系被設(shè)計(jì)成存儲(chǔ)在配置庫(kù)的數(shù)據(jù)字典里,則連程序代碼都不用修改,只需修改數(shù)據(jù)字典里的模塊調(diào)用規(guī)則即可。
七、概要設(shè)計(jì)的重要輸出
編碼規(guī)范:信息形式、接口規(guī)約、命名規(guī)則;
物理模型:組件圖、配置圖;
不同角度的構(gòu)架視圖:用例視圖、邏輯視圖、進(jìn)程視圖、部署視圖、實(shí)施視圖、數(shù)據(jù)視圖(可選);
系統(tǒng)總體布局:哪些部分組成、各部分在物理上、邏輯上的相互關(guān)系;
兩個(gè)不可忽視的輸出:
與需求功能的關(guān)系:對(duì)于需求中的每一個(gè)功能,用哪一層、哪個(gè)模塊、哪個(gè)類(lèi)、哪個(gè)對(duì)象來(lái)實(shí)現(xiàn)(一對(duì)多關(guān)系);反過(guò)來(lái),應(yīng)當(dāng)說(shuō)明將要?jiǎng)?chuàng)建的系統(tǒng)每一層、每個(gè)模塊、每個(gè)對(duì)象、每一個(gè)類(lèi)“做什么”,他們是為了幫助實(shí)現(xiàn)哪些功能(一對(duì)多關(guān)系)。(需求的顆粒度在一開(kāi)始往往是比較粗的,因此根據(jù)功能點(diǎn)對(duì)于整體項(xiàng)目規(guī)模的估計(jì)或得到項(xiàng)目WBS其誤差范圍也是比較大的。更為重要的原因是,需求往往不是編碼工作分解的準(zhǔn)確依據(jù),因?yàn)橐粋€(gè)需求的功能點(diǎn)可能對(duì)應(yīng)多個(gè)代碼模塊,而多個(gè)需求的功能點(diǎn)也可能只對(duì)應(yīng)一個(gè)或少數(shù)代碼模塊,同時(shí)還有軟件復(fù)用等因素要考慮,因此只有在概要設(shè)計(jì)完成以后才能準(zhǔn)確地得到詳細(xì)設(shè)計(jì)或編碼階段的二次WBS,并估計(jì)較為準(zhǔn)確的整體項(xiàng)目規(guī)模。)
邏輯與物理位置:每個(gè)對(duì)象在邏輯上分別落在哪一層、哪個(gè)模塊、哪個(gè)類(lèi);在物理上每個(gè)模塊、每個(gè)對(duì)象、每一個(gè)類(lèi)放在哪個(gè)應(yīng)用服務(wù)器或客戶(hù)端的哪個(gè)目錄、哪個(gè)文件(庫(kù)),或者是建立在數(shù)據(jù)庫(kù)管理系統(tǒng)中的什么東東(過(guò)程、函數(shù)、視圖、觸發(fā)器等等)。
八、結(jié)構(gòu)化與面向?qū)ο蠓椒ㄌ攸c(diǎn)比較
1. 從概念方面看,結(jié)構(gòu)化軟件是功能的集合,通過(guò)模塊以及模塊和模塊之間的分層調(diào)用關(guān)系實(shí)現(xiàn);面向?qū)ο筌浖鞘挛锏募?,通過(guò)對(duì)象以及對(duì)象和對(duì)象之間的通訊聯(lián)系實(shí)現(xiàn);
2. 從構(gòu)成方面看,結(jié)構(gòu)化軟件=過(guò)程+數(shù)據(jù),以過(guò)程為中心;面向?qū)ο筌浖剑〝?shù)據(jù)+相應(yīng)操作)的封裝,以數(shù)據(jù)為中心;
3. 從運(yùn)行控制方面看,結(jié)構(gòu)化軟件采用順序處理方式,由過(guò)程驅(qū)動(dòng)控制;面向?qū)ο筌浖捎媒换ナ健⒉⑿刑幚矸绞?,由消息?qū)動(dòng)控制;
4. 從開(kāi)發(fā)方面看,結(jié)構(gòu)化方法的工作重點(diǎn)是設(shè)計(jì);面向?qū)ο蠓椒ǖ墓ぷ髦攸c(diǎn)是分析;但是,在結(jié)構(gòu)化方法中,分析階段和設(shè)計(jì)階段采用了不相吻合的表達(dá)方式,需要把在分析階段采用的具有網(wǎng)絡(luò)特征的數(shù)據(jù)流圖轉(zhuǎn)換為設(shè)計(jì)階段采用的具有分層特征的結(jié)構(gòu)圖,在面向?qū)ο蠓椒ㄖ袆t不存在這一問(wèn)題。
5. 從應(yīng)用方面看,相對(duì)而言,結(jié)構(gòu)化方法更加適合數(shù)據(jù)類(lèi)型比較簡(jiǎn)單的數(shù)值計(jì)算和數(shù)據(jù)統(tǒng)計(jì)管理軟件的開(kāi)發(fā);面向?qū)ο蠓椒ǜ舆m合大型復(fù)雜的人機(jī)交互式軟件和數(shù)據(jù)統(tǒng)計(jì)管理軟件的開(kāi)發(fā);
參考文獻(xiàn):
《實(shí)用軟件工程》第二版,鄭人杰、殷人昆、陶永雷等著
《微軟項(xiàng)目:求生法則》Steve McConnell著,余孟學(xué)譯
《軟件工程:實(shí)踐者的研究方法》(第5版)Roger S.Pressman著
《軟件構(gòu)架實(shí)踐》SEI軟件工程譯叢,林·巴斯著
《RUP2000》電子版;
《UML與系統(tǒng)分析設(shè)計(jì)》張龍祥著;
《面向?qū)ο蟮姆治雠c設(shè)計(jì)》楊正甫著;
做軟件到一定層次了,就要考慮到設(shè)計(jì)了,設(shè)計(jì)了很久,就是不系統(tǒng),系統(tǒng)的設(shè)計(jì)需要一個(gè)記錄,記錄就用文檔,那么對(duì)項(xiàng)目所有包括技術(shù)上的設(shè)計(jì)都記錄下來(lái),我們就可以理解為軟件的概要設(shè)計(jì)了。
在需求明確、準(zhǔn)備開(kāi)始編碼之前,要做概要設(shè)計(jì),而詳細(xì)設(shè)計(jì)可能大部分公司沒(méi)有做,有做的也大部分是和編碼同步進(jìn)行,或者在編碼之后。因此,對(duì)大部分的公司來(lái)說(shuō),概要設(shè)計(jì)文檔是唯一的設(shè)計(jì)文檔,對(duì)后面的開(kāi)發(fā)、測(cè)試、實(shí)施、維護(hù)工作起到關(guān)鍵性的影響。
一、問(wèn)題的提出
概要設(shè)計(jì)寫(xiě)什么?概要設(shè)計(jì)怎么做?
如何判斷設(shè)計(jì)的模塊是完整的?
為什么說(shuō)設(shè)計(jì)階段過(guò)于重視業(yè)務(wù)流程是個(gè)誤區(qū)?
以需求分析文檔還是以概要設(shè)計(jì)文檔來(lái)評(píng)估開(kāi)發(fā)工作量、指導(dǎo)開(kāi)發(fā)計(jì)劃準(zhǔn)確?
結(jié)構(gòu)化好還是面向?qū)ο蠛茫?BR> 以上問(wèn)題的答案請(qǐng)?jiān)谖恼轮姓摇?BR> 二、概要設(shè)計(jì)的目的
將軟件系統(tǒng)需求轉(zhuǎn)換為未來(lái)系統(tǒng)的設(shè)計(jì);
逐步開(kāi)發(fā)強(qiáng)壯的系統(tǒng)構(gòu)架;
使設(shè)計(jì)適合于實(shí)施環(huán)境,為提高性能而進(jìn)行設(shè)計(jì);
結(jié)構(gòu)應(yīng)該被分解為模塊和庫(kù)。
三、概要設(shè)計(jì)的任務(wù)
制定規(guī)范:代碼體系、接口規(guī)約、命名規(guī)則。這是項(xiàng)目小組今后共同作戰(zhàn)的基礎(chǔ),有了開(kāi)發(fā)規(guī)范和程序模塊之間和項(xiàng)目成員彼此之間的接口規(guī)則、方式方法,大家就有了共同的工作語(yǔ)言、共同的工作平臺(tái),使整個(gè)軟件開(kāi)發(fā)工作可以協(xié)調(diào)有序地進(jìn)行。
總體結(jié)構(gòu)設(shè)計(jì):
功能(加工)->模塊:每個(gè)功能用那些模塊實(shí)現(xiàn),保證每個(gè)功能都有相應(yīng)的模塊來(lái)實(shí)現(xiàn);
模塊層次結(jié)構(gòu):某個(gè)角度的軟件框架視圖;
模塊間的調(diào)用關(guān)系:模塊間的接口的總體描述;
模塊間的接口:傳遞的信息及其結(jié)構(gòu);
處理方式設(shè)計(jì):滿(mǎn)足功能和性能的算法
用戶(hù)界面設(shè)計(jì);
數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):
詳細(xì)的數(shù)據(jù)結(jié)構(gòu):表、索引、文件;
算法相關(guān)邏輯數(shù)據(jù)結(jié)構(gòu)及其操作;
上述操作的程序模塊說(shuō)明(在前臺(tái)?在后臺(tái)?用視圖?用過(guò)程?······)
接口控制表的數(shù)據(jù)結(jié)構(gòu)和使用規(guī)則
其他性能設(shè)計(jì)。
四、概要設(shè)計(jì)寫(xiě)什么
結(jié)構(gòu)化軟件設(shè)計(jì)說(shuō)明書(shū)結(jié)構(gòu)(因篇幅有限和過(guò)時(shí)嫌疑,在此不作過(guò)多解釋?zhuān)?BR> 任務(wù):目標(biāo)、環(huán)境、需求、局限;
總體設(shè)計(jì):處理流程、總體結(jié)構(gòu)與模塊、功能與模塊的關(guān)系;
接口設(shè)計(jì):總體說(shuō)明外部用戶(hù)、軟、硬件接口;內(nèi)部模塊間接口(注:接口≈系統(tǒng)界面)
數(shù)據(jù)結(jié)構(gòu):邏輯結(jié)構(gòu)、物理結(jié)構(gòu),與程序結(jié)構(gòu)的關(guān)系;
模塊設(shè)計(jì):每個(gè)模塊“做什么”、簡(jiǎn)要說(shuō)明“怎么做”(輸入、輸出、處理邏輯、與其它模塊的接口,與其它系統(tǒng)或硬件的接口),處在什么邏輯位置、物理位置;
運(yùn)行設(shè)計(jì):運(yùn)行模塊組合、控制、時(shí)間;
出錯(cuò)設(shè)計(jì):出錯(cuò)信息、處錯(cuò)處理;
其他設(shè)計(jì):保密、維護(hù);
OO軟件設(shè)計(jì)說(shuō)明書(shū)結(jié)構(gòu)
1 概述
系統(tǒng)簡(jiǎn)述、軟件設(shè)計(jì)目標(biāo)、參考資料、修訂版本記錄
這部分論述整個(gè)系統(tǒng)的設(shè)計(jì)目標(biāo),明確地說(shuō)明哪些功能是系統(tǒng)決定實(shí)現(xiàn)而哪些時(shí)不準(zhǔn)備實(shí)現(xiàn)的。同時(shí),對(duì)于非功能性的需求例如性能、可用性等,亦需提及。需求規(guī)格說(shuō)明書(shū)對(duì)于這部分的內(nèi)容來(lái)說(shuō)是很重要的參考,看看其中明確了的功能性以及非功能性的需求。
這部分必須說(shuō)清楚設(shè)計(jì)的全貌如何,務(wù)必使讀者看后知道將實(shí)現(xiàn)的系統(tǒng)有什么特點(diǎn)和功能。在隨后的文檔部分,將解釋設(shè)計(jì)是怎么來(lái)實(shí)現(xiàn)這些的。
2 術(shù)語(yǔ)表
對(duì)本文檔中所使用的各種術(shù)語(yǔ)進(jìn)行說(shuō)明。如果一些術(shù)語(yǔ)在需求規(guī)格說(shuō)明書(shū)中已經(jīng)說(shuō)明過(guò)了,此處不用再重復(fù),可以指引讀者參考需求說(shuō)明。
3 用例
此處要求系統(tǒng)用用例圖表述(UML),對(duì)每個(gè)用例(正常處理的情況)要有中文敘述。
4 設(shè)計(jì)概述
4.1 簡(jiǎn)述
這部分要求突出整個(gè)設(shè)計(jì)所采用的方法(是面向?qū)ο笤O(shè)計(jì)還是結(jié)構(gòu)化設(shè)計(jì))、系統(tǒng)的體系結(jié)構(gòu)(例如客戶(hù)/服務(wù)器結(jié)構(gòu))以及使用到的相應(yīng)技術(shù)和工具(例如OMT、Rose)
4.2 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
這部分要求提供高層系統(tǒng)結(jié)構(gòu)(頂層系統(tǒng)結(jié)構(gòu)、各子系統(tǒng)結(jié)構(gòu))的描述,使用方框圖來(lái)顯示主要的組件及組件間的交互。最好是把邏輯結(jié)構(gòu)同物理結(jié)構(gòu)分離,對(duì)前者進(jìn)行描述。別忘了說(shuō)明圖中用到的俗語(yǔ)和符號(hào)。
4.3 系統(tǒng)界面
各種提供給用戶(hù)的界面以及外部系統(tǒng)在此處要予以說(shuō)明。如果在需求規(guī)格說(shuō)明書(shū)中已經(jīng)對(duì)用戶(hù)界面有了敘述,此處不用再重復(fù),可以指引讀者參考需求說(shuō)明。如果系統(tǒng)提供了對(duì)其它系統(tǒng)的接口,比如說(shuō)從其它軟件系統(tǒng)導(dǎo)入/導(dǎo)出數(shù)據(jù),必須在此說(shuō)明。
4.4 約束和假定
描述系統(tǒng)設(shè)計(jì)中最主要的約束,這些是由客戶(hù)強(qiáng)制要求并在需求說(shuō)明書(shū)寫(xiě)明的。說(shuō)明系統(tǒng)是如何來(lái)適應(yīng)這些約束的。
另外如果本系統(tǒng)跟其它外部系統(tǒng)交互或者依賴(lài)其它外部系統(tǒng)提供一些功能輔助,那么系統(tǒng)可能還受到其它的約束。這種情況下,要求清楚地描述與本系統(tǒng)有交互的軟件類(lèi)型以及這樣導(dǎo)致的約束。
實(shí)現(xiàn)的語(yǔ)言和平臺(tái)也會(huì)對(duì)系統(tǒng)有約束,同樣在此予以說(shuō)明。
對(duì)于因選擇具體的設(shè)計(jì)實(shí)現(xiàn)而導(dǎo)致對(duì)系統(tǒng)的約束,簡(jiǎn)要地描述你的想法思路,經(jīng)過(guò)怎么樣的權(quán)衡,為什么要采取這樣的設(shè)計(jì)等等。
5 對(duì)象模型
提供整個(gè)系統(tǒng)的對(duì)象模型,如果模型過(guò)大,按照可行的標(biāo)準(zhǔn)把它劃分成小塊,例如可以把客戶(hù)端和服務(wù)器端的對(duì)象模型分開(kāi)成兩個(gè)圖表述。在其中應(yīng)該包含所有的系統(tǒng)對(duì)象。這些對(duì)象都是從理解需求后得到的。要明確哪些應(yīng)該、哪些不應(yīng)該被放進(jìn)圖中。所有對(duì)象之間的關(guān)聯(lián)必須被確定并且必須指明聯(lián)系的基數(shù)。聚合和繼承關(guān)系必須清楚地確定下來(lái)。每個(gè)圖必須附有簡(jiǎn)單的說(shuō)明。
6 對(duì)象描述
在這個(gè)部分?jǐn)⑹雒總€(gè)對(duì)象的細(xì)節(jié),它的屬性、它的方法。在這之前必須從邏輯上對(duì)對(duì)象進(jìn)行組織。你可能需要用結(jié)構(gòu)圖把對(duì)象按子系統(tǒng)劃分好。
為每個(gè)對(duì)象做一個(gè)條目。在系統(tǒng)對(duì)象模型中簡(jiǎn)要的描述它的用途、約束(如只能有一個(gè)實(shí)例),列出它的屬性和方法。如果對(duì)象是存儲(chǔ)在持久的數(shù)據(jù)容器中,標(biāo)明它是持久對(duì)象,否則說(shuō)明它是個(gè)臨時(shí)對(duì)象(transient object)。
對(duì)每個(gè)對(duì)象的每個(gè)屬性詳細(xì)說(shuō)明:名字、類(lèi)型,如果屬性不是很直觀或者有約束(例如,每個(gè)對(duì)象的該屬性必須有一個(gè)唯一的值或者值域是有限正整數(shù)等)。
對(duì)每個(gè)對(duì)象的每個(gè)方法詳細(xì)說(shuō)明:方法名,返回類(lèi)型,返回值,參數(shù),用途以及使用的算法的簡(jiǎn)要說(shuō)明(如果不是特別簡(jiǎn)單的話(huà))。如果對(duì)變量或者返回值由什么假定的話(huà),Pre-conditions和Post-conditions必須在此說(shuō)明。列出它或者被它調(diào)用的方法需要訪問(wèn)或者修改的屬性。最后,提供可以驗(yàn)證實(shí)現(xiàn)方法的測(cè)試案例。
7 動(dòng)態(tài)模型
這部分的作用是描述系統(tǒng)如何響應(yīng)各種事件。一般使用順序圖和狀態(tài)圖。
確定不同的場(chǎng)景(Scenario)是第一步,不需要確定所有可能的場(chǎng)景,但是必須至少要覆蓋典型的系統(tǒng)用例。不要自己去想當(dāng)然地創(chuàng)造場(chǎng)景,通常的策略是描述那些客戶(hù)可以感受得到的場(chǎng)景。
7.1 場(chǎng)景(Scenarios)
對(duì)每個(gè)場(chǎng)景做一則條目,包括以下內(nèi)容:
場(chǎng)景名:給它一個(gè)可以望文生義的名字
場(chǎng)景描述:簡(jiǎn)要敘述場(chǎng)景是干什么的以及發(fā)生的動(dòng)作的順序。
順序圖:描述各種事件及事件發(fā)生的相對(duì)時(shí)間順序。
7.2 狀態(tài)圖
這部分的內(nèi)容包括系統(tǒng)動(dòng)態(tài)模型重要的部分的狀態(tài)圖。可能你想為每個(gè)對(duì)象畫(huà)一個(gè)狀態(tài)圖,但事實(shí)上會(huì)導(dǎo)致太多不期望的細(xì)節(jié)信息,只需要確定系統(tǒng)中一些重要的對(duì)象并為之提供狀態(tài)圖即可。
8 非功能性需求
五、概要設(shè)計(jì)怎么做
結(jié)構(gòu)化軟件設(shè)計(jì)方法:
詳細(xì)閱讀需求規(guī)格說(shuō)明書(shū),理解系統(tǒng)建設(shè)目標(biāo)、業(yè)務(wù)現(xiàn)狀、現(xiàn)有系統(tǒng)、客戶(hù)需求的各功能說(shuō)明;
分析數(shù)據(jù)流圖,弄清數(shù)據(jù)流加工的過(guò)程;
根據(jù)數(shù)據(jù)流圖決定數(shù)據(jù)處理問(wèn)題的類(lèi)型(變換型、事務(wù)型、其他型);
通過(guò)以上分析,推導(dǎo)出系統(tǒng)的初始結(jié)構(gòu)圖;
對(duì)初始結(jié)構(gòu)圖進(jìn)行改進(jìn)完善:所有的加工都要能對(duì)應(yīng)到相應(yīng)模塊(模塊的完整性在于他們完成了需求中的所有加工),消除完全相似或局部相似的重復(fù)功能(智者察同),理清模塊間的層次、控制關(guān)系,減少高扇出結(jié)構(gòu),隨著深度增大扇入,平衡模塊大小。
由對(duì)數(shù)據(jù)字典的修改補(bǔ)充完善,導(dǎo)出邏輯數(shù)據(jù)結(jié)構(gòu),導(dǎo)出每種數(shù)據(jù)結(jié)構(gòu)上的操作,這些操作應(yīng)當(dāng)屬于某個(gè)模塊。
確定系統(tǒng)包含哪些應(yīng)用服務(wù)系統(tǒng)、客戶(hù)端、數(shù)據(jù)庫(kù)管理系統(tǒng);
確定每個(gè)模塊放在哪個(gè)應(yīng)用服務(wù)器或客戶(hù)端的哪個(gè)目錄、哪個(gè)文件(庫(kù)),或是在數(shù)據(jù)庫(kù)內(nèi)部建立的對(duì)象。
對(duì)每個(gè)篩選后的模塊進(jìn)行列表說(shuō)明。
對(duì)邏輯數(shù)據(jù)結(jié)構(gòu)進(jìn)行列表說(shuō)明。
根據(jù)結(jié)構(gòu)化軟件設(shè)計(jì)說(shuō)明書(shū)結(jié)構(gòu)對(duì)其他需要說(shuō)明的問(wèn)題進(jìn)行補(bǔ)充說(shuō)明,形成概要設(shè)計(jì)說(shuō)明書(shū)。
OO軟件設(shè)計(jì)方法:
在OOA基礎(chǔ)上設(shè)計(jì)對(duì)象與類(lèi):在問(wèn)題領(lǐng)域分析(業(yè)務(wù)建模和需求分析)之后,開(kāi)始建立系統(tǒng)構(gòu)架。
第一步是抽取建立領(lǐng)域的概念模型,在UML中表現(xiàn)為建立對(duì)象類(lèi)圖、活動(dòng)圖和交互圖。對(duì)象類(lèi)就是從對(duì)象中經(jīng)過(guò)“察同”找出某組對(duì)象之間的共同特征而形成類(lèi):
對(duì)象與類(lèi)的屬性:數(shù)據(jù)結(jié)構(gòu);
對(duì)象與類(lèi)的服務(wù)操作:操作的實(shí)現(xiàn)算法;
對(duì)象與類(lèi)的各外部聯(lián)系的實(shí)現(xiàn)結(jié)構(gòu);
設(shè)計(jì)策略:充分利用現(xiàn)有的類(lèi);
方法:繼承、復(fù)用、演化;
活動(dòng)圖用于定義工作流,主要說(shuō)明工作流的5W(Do What、Who Do、When Do、Where Do、Why Do)等問(wèn)題,交互圖把人員和業(yè)務(wù)聯(lián)系在一起是為了理解交互過(guò)程,發(fā)現(xiàn)業(yè)務(wù)工作流中相互交互的各種角色。
第二步是構(gòu)建完善系統(tǒng)結(jié)構(gòu):對(duì)系統(tǒng)進(jìn)行分解,將大系統(tǒng)分解為若干子系統(tǒng),子系統(tǒng)分解為若干軟件組件,并說(shuō)明子系統(tǒng)之間的靜態(tài)和動(dòng)態(tài)接口,每個(gè)子系統(tǒng)可以由用例模型、分析模型、設(shè)計(jì)模型、測(cè)試模型表示。軟件系統(tǒng)結(jié)構(gòu)的兩種方式:層次、塊狀
層次結(jié)構(gòu):系統(tǒng)、子系統(tǒng)、模塊、組件(同一層之間具有獨(dú)立性);
塊狀結(jié)構(gòu):相互之間弱耦合
系統(tǒng)的組成部分:
問(wèn)題論域:業(yè)務(wù)相關(guān)類(lèi)和對(duì)象(OOA的重點(diǎn));
人機(jī)界面:窗口、菜單、按鈕、命令等等;
數(shù)據(jù)管理:數(shù)據(jù)管理方法、邏輯物理結(jié)構(gòu)、操作對(duì)象類(lèi);
任務(wù)管理:任務(wù)協(xié)調(diào)和管理進(jìn)程;
第三步是利用“4+1”視圖描述系統(tǒng)架構(gòu):用例視圖及劇本;說(shuō)明體系結(jié)構(gòu)的設(shè)計(jì)視圖;以模塊形式組成包和層包含概要實(shí)現(xiàn)模型的實(shí)現(xiàn)視圖;說(shuō)明進(jìn)程與線(xiàn)程及其架構(gòu)、分配和相互交互關(guān)系的過(guò)程視圖;說(shuō)明系統(tǒng)在操作平臺(tái)上的物理節(jié)點(diǎn)和其上的任務(wù)分配的配置視圖。在RUP中還有可選的數(shù)據(jù)視圖。
第四步是性能優(yōu)化(速度、資源、內(nèi)存)、模型清晰化、簡(jiǎn)單化(簡(jiǎn)單就是享受)。
六、概要設(shè)計(jì)的原則
總體原則和方法:由粗到細(xì)的原則,互相結(jié)合的原則,定性分析和定量分析相結(jié)合的方法,分解和協(xié)調(diào)的方法和模型化方法。
要系統(tǒng)考慮系統(tǒng)的一般性、關(guān)聯(lián)性、整體性和層次性。
分解協(xié)調(diào):目的是為了創(chuàng)造更好的系統(tǒng)。系統(tǒng)分解是指將一個(gè)復(fù)雜的系統(tǒng)分解為若干個(gè)子系統(tǒng),系統(tǒng)協(xié)調(diào)一是系統(tǒng)內(nèi)協(xié)調(diào),即根據(jù)系統(tǒng)的總結(jié)構(gòu)、總功能、總?cè)蝿?wù)和總目標(biāo)的要求,使各個(gè)子系統(tǒng)之間互相協(xié)調(diào)配合,在各個(gè)子系統(tǒng)局部?jī)?yōu)化基礎(chǔ)上,通過(guò)內(nèi)部平衡的協(xié)調(diào)控制,實(shí)現(xiàn)系統(tǒng)的整體優(yōu)化;
屏蔽抽象:從簡(jiǎn)單的框架開(kāi)始,隱含細(xì)節(jié);
一致性:統(tǒng)一的規(guī)范、統(tǒng)一的標(biāo)準(zhǔn)、統(tǒng)一的文件模式;
每個(gè)模塊應(yīng)當(dāng)有一個(gè)統(tǒng)一命名的容易理解的名字;
編碼:由外向內(nèi)(界面->核心);
面向用戶(hù):概要設(shè)計(jì)是對(duì)于按鈕按下后系統(tǒng)“怎么做”的簡(jiǎn)要說(shuō)明;
模塊、組件的充分獨(dú)立性、封閉性;
同時(shí)考慮靜態(tài)結(jié)構(gòu)與動(dòng)態(tài)運(yùn)行;
每個(gè)邏輯對(duì)象都應(yīng)當(dāng)說(shuō)明其所處物理對(duì)象(非一一對(duì)應(yīng));
每個(gè)物理對(duì)象都有合適的開(kāi)發(fā)人員,并且利于分工與組裝。(詳細(xì)說(shuō)明見(jiàn)本人另一篇文章:系統(tǒng)構(gòu)架設(shè)計(jì)應(yīng)考慮的因素);
確立每個(gè)構(gòu)架視圖的整體結(jié)構(gòu):視圖的詳細(xì)組織結(jié)構(gòu)、元素的分組以及這些主要分組之間的接口;
軟件構(gòu)架與使用的技術(shù)平臺(tái)密切相關(guān),目前常用的平臺(tái)有J2EE、.NET、CORBA等等,因此具體的軟件構(gòu)架人員應(yīng)當(dāng)具備使用這些平臺(tái)的軟件開(kāi)發(fā)經(jīng)驗(yàn);
通過(guò)需求功能與設(shè)計(jì)模塊之間的列表對(duì)應(yīng),檢查每個(gè)需求功能是否都有相應(yīng)的模塊來(lái)實(shí)現(xiàn),保證需求功能的可追溯性和需求實(shí)現(xiàn)(模塊)的完整性,同時(shí)可以檢查重復(fù)和不必要的模塊。
在需求調(diào)研分析過(guò)程中對(duì)業(yè)務(wù)處理過(guò)程了解的完整性和準(zhǔn)確性非常重要。調(diào)查了解清楚所有的業(yè)務(wù)流程才能設(shè)計(jì)出適合各流程業(yè)務(wù)節(jié)點(diǎn)用戶(hù)業(yè)務(wù)特點(diǎn)和習(xí)慣的軟件,使開(kāi)發(fā)出來(lái)的軟件更受歡迎。當(dāng)然在進(jìn)行軟件概要設(shè)計(jì)時(shí),要盡量排除業(yè)務(wù)流程的制約,即把流程中的各項(xiàng)業(yè)務(wù)結(jié)點(diǎn)工作作為獨(dú)立的對(duì)象,設(shè)計(jì)成獨(dú)立的模塊,充分考慮他們與其他各種業(yè)務(wù)對(duì)象模塊的接口,在流程之間通過(guò)業(yè)務(wù)對(duì)象模塊的相互調(diào)用實(shí)現(xiàn)各種業(yè)務(wù),這樣,在業(yè)務(wù)流程發(fā)生有限的變化時(shí)(每個(gè)業(yè)務(wù)模塊本身的業(yè)務(wù)邏輯沒(méi)有變的情況下),就能夠比較方便地修改系統(tǒng)程序模塊間的調(diào)用關(guān)系而實(shí)現(xiàn)新的需求。如果這種調(diào)用關(guān)系被設(shè)計(jì)成存儲(chǔ)在配置庫(kù)的數(shù)據(jù)字典里,則連程序代碼都不用修改,只需修改數(shù)據(jù)字典里的模塊調(diào)用規(guī)則即可。
七、概要設(shè)計(jì)的重要輸出
編碼規(guī)范:信息形式、接口規(guī)約、命名規(guī)則;
物理模型:組件圖、配置圖;
不同角度的構(gòu)架視圖:用例視圖、邏輯視圖、進(jìn)程視圖、部署視圖、實(shí)施視圖、數(shù)據(jù)視圖(可選);
系統(tǒng)總體布局:哪些部分組成、各部分在物理上、邏輯上的相互關(guān)系;
兩個(gè)不可忽視的輸出:
與需求功能的關(guān)系:對(duì)于需求中的每一個(gè)功能,用哪一層、哪個(gè)模塊、哪個(gè)類(lèi)、哪個(gè)對(duì)象來(lái)實(shí)現(xiàn)(一對(duì)多關(guān)系);反過(guò)來(lái),應(yīng)當(dāng)說(shuō)明將要?jiǎng)?chuàng)建的系統(tǒng)每一層、每個(gè)模塊、每個(gè)對(duì)象、每一個(gè)類(lèi)“做什么”,他們是為了幫助實(shí)現(xiàn)哪些功能(一對(duì)多關(guān)系)。(需求的顆粒度在一開(kāi)始往往是比較粗的,因此根據(jù)功能點(diǎn)對(duì)于整體項(xiàng)目規(guī)模的估計(jì)或得到項(xiàng)目WBS其誤差范圍也是比較大的。更為重要的原因是,需求往往不是編碼工作分解的準(zhǔn)確依據(jù),因?yàn)橐粋€(gè)需求的功能點(diǎn)可能對(duì)應(yīng)多個(gè)代碼模塊,而多個(gè)需求的功能點(diǎn)也可能只對(duì)應(yīng)一個(gè)或少數(shù)代碼模塊,同時(shí)還有軟件復(fù)用等因素要考慮,因此只有在概要設(shè)計(jì)完成以后才能準(zhǔn)確地得到詳細(xì)設(shè)計(jì)或編碼階段的二次WBS,并估計(jì)較為準(zhǔn)確的整體項(xiàng)目規(guī)模。)
邏輯與物理位置:每個(gè)對(duì)象在邏輯上分別落在哪一層、哪個(gè)模塊、哪個(gè)類(lèi);在物理上每個(gè)模塊、每個(gè)對(duì)象、每一個(gè)類(lèi)放在哪個(gè)應(yīng)用服務(wù)器或客戶(hù)端的哪個(gè)目錄、哪個(gè)文件(庫(kù)),或者是建立在數(shù)據(jù)庫(kù)管理系統(tǒng)中的什么東東(過(guò)程、函數(shù)、視圖、觸發(fā)器等等)。
八、結(jié)構(gòu)化與面向?qū)ο蠓椒ㄌ攸c(diǎn)比較
1. 從概念方面看,結(jié)構(gòu)化軟件是功能的集合,通過(guò)模塊以及模塊和模塊之間的分層調(diào)用關(guān)系實(shí)現(xiàn);面向?qū)ο筌浖鞘挛锏募?,通過(guò)對(duì)象以及對(duì)象和對(duì)象之間的通訊聯(lián)系實(shí)現(xiàn);
2. 從構(gòu)成方面看,結(jié)構(gòu)化軟件=過(guò)程+數(shù)據(jù),以過(guò)程為中心;面向?qū)ο筌浖剑〝?shù)據(jù)+相應(yīng)操作)的封裝,以數(shù)據(jù)為中心;
3. 從運(yùn)行控制方面看,結(jié)構(gòu)化軟件采用順序處理方式,由過(guò)程驅(qū)動(dòng)控制;面向?qū)ο筌浖捎媒换ナ健⒉⑿刑幚矸绞?,由消息?qū)動(dòng)控制;
4. 從開(kāi)發(fā)方面看,結(jié)構(gòu)化方法的工作重點(diǎn)是設(shè)計(jì);面向?qū)ο蠓椒ǖ墓ぷ髦攸c(diǎn)是分析;但是,在結(jié)構(gòu)化方法中,分析階段和設(shè)計(jì)階段采用了不相吻合的表達(dá)方式,需要把在分析階段采用的具有網(wǎng)絡(luò)特征的數(shù)據(jù)流圖轉(zhuǎn)換為設(shè)計(jì)階段采用的具有分層特征的結(jié)構(gòu)圖,在面向?qū)ο蠓椒ㄖ袆t不存在這一問(wèn)題。
5. 從應(yīng)用方面看,相對(duì)而言,結(jié)構(gòu)化方法更加適合數(shù)據(jù)類(lèi)型比較簡(jiǎn)單的數(shù)值計(jì)算和數(shù)據(jù)統(tǒng)計(jì)管理軟件的開(kāi)發(fā);面向?qū)ο蠓椒ǜ舆m合大型復(fù)雜的人機(jī)交互式軟件和數(shù)據(jù)統(tǒng)計(jì)管理軟件的開(kāi)發(fā);
參考文獻(xiàn):
《實(shí)用軟件工程》第二版,鄭人杰、殷人昆、陶永雷等著
《微軟項(xiàng)目:求生法則》Steve McConnell著,余孟學(xué)譯
《軟件工程:實(shí)踐者的研究方法》(第5版)Roger S.Pressman著
《軟件構(gòu)架實(shí)踐》SEI軟件工程譯叢,林·巴斯著
《RUP2000》電子版;
《UML與系統(tǒng)分析設(shè)計(jì)》張龍祥著;
《面向?qū)ο蟮姆治雠c設(shè)計(jì)》楊正甫著;
posted on 2005-11-23 16:03 wader 閱讀(1318) 評(píng)論(1) 編輯 收藏