日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

概說概要設(shè)計怎么做

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多