項目概要設計書一般設計方法

來源:互聯網
上載者:User

 

做軟體到一定層次了,就要考慮到設計了,設計了很久,就是不系統,系統的設計需要一個記錄,記錄就用文檔,那麼對項目所有包括技術上的設計都記錄下來,我們就可以理解為軟體的概要設計了。

           在需求明確、準備開始編碼之前,要做概要設計,而詳細設計可能大部分公司沒有做,有做的也大部分是和編碼同步進行,或者在編碼之後。因此,對大部分的公司來說,概要設計文檔是唯一的設計文檔,對後面的開發、測試、實施、維護工作起到關鍵性的影響。

      一、問題的提出

      概要設計寫什嗎?概要設計怎麼做?

      如何判斷設計的模組是完整的?

      為什麼說設計階段過於重視商務程序是個誤區?

      以需求分析文檔還是以概要設計文檔來評估開發工作量、指導開發計劃準確?

      結構化好還是物件導向好?

      以上問題的答案請在文章中找。

      二、概要設計的目的

      將軟體系統需求轉換為未來系統的設計;

      逐步開發強壯的系統構架;

      使設計適合於實施環境,為提高效能而進行設計;

      結構應該被分解為模組和庫。

      三、概要設計的任務

       制定規範:代碼體系、介面規約、命名規則。這是項目小組今後共同作戰的基礎,有了開發規範和程式模組之間和項目成員彼此之間的介面規則、方式方法,大家就有了共同的工作語言、共同的工作平台,使整個軟體開發工作可以協調有序地進行。

      總體結構設計:

      功能(加工)->模組:每個功能用那些模組實現,保證每個功能都有相應的模組來實現;

      模組階層:某個角度的軟體架構視圖;

      模組間的調用關係:模組間的介面的總體描述;

      模組間的介面:傳遞的資訊及其結構;

      處理方式設計:滿足功能和效能的演算法

      使用者介面設計;

      資料結構設計:

      詳細的資料結構:表、索引、檔案;

      演算法相關邏輯資料結構及其操作;

      上述操作的程式模組說明(在前台?在後台?用視圖?用過程?······)

      介面控制表的資料結構和使用規則

      其他效能設計。

      四、概要設計寫什麼

      結構化軟體設計說明書結構(因篇幅有限和過時嫌疑,在此不作過多解釋)

      任務:目標、環境、需求、局限;

      總體設計:處理流程、總體結構與模組、功能與模組的關係;

      介面設計:總體說明外部使用者、軟、硬體介面;內部模組間介面(註:介面≈系統介面)

      資料結構:邏輯結構、物理結構,與程式結構的關係;

      模組設計:每個模組“做什麼”、簡要說明“怎麼做”(輸入、輸出、處理邏輯、與其它模組的介面,與其它系統或硬體的介面),處在什麼邏輯位置、物理位置;

      運行設計:運行模組組合、控制、時間;

      出錯設計:出錯資訊、處錯處理;

      其他設計:保密、維護;

      OO軟體設計說明書結構

      1 概述

      系統簡述、軟體設計目標、參考資料、修訂版本記錄

      這部分論述整個系統的設計目標,明確地說明哪些功能是系統決定實現而哪些時不準備實現的。同時,對於非功能性的需求例如效能、可用性等,亦需提及。需求規格說明書對於這部分的內容來說是很重要的參考,看看其中明確了的功能性以及非功能性的需求。

這部分必須說清楚設計的全貌如何,務必使讀者看後知道將實現的系統有什麼特點和功能。在隨後的文檔部分,將解釋設計是怎麼來實現這些的。

      2 術語表

      對本文檔中所使用的各種術語進行說明。如果一些術語在需求規格說明書中已經說明過了,此處不用再重複,可以指引讀者參考需求說明。

      3 用例

      此處要求系統用使用案例圖表述(UML),對每個用例(正常處理的情況)要有中文敘述。

      4 設計概述

      4.1 簡述

      這部分要求突出整個設計所採用的方法(是物件導向設計還是結構化設計)、系統的體繫結構(例如客戶/伺服器結構)以及使用到的相應技術和工具(例如OMT、Rose)

      4.2 系統結構設計

      這部分要求提供高層系統結構(頂層系統結構、各子系統結構)的描述,使用方框圖來顯示主要的組件及組件間的互動。最好是把邏輯結構同物理結構分離,對前者進行描述。別忘了說明圖中用到的俗語和符號。

      4.3 系統介面

      各種提供給使用者的介面以及外部系統在此處要予以說明。如果在需求規格說明書中已經對使用者介面有了敘述,此處不用再重複,可以指引讀者參考需求說明。如果系統提供了對其它系統的介面,比如說從其它軟體系統匯入/匯出資料,必須在此說明。

      4.4 約束和假定

      描述系統設計中最主要的約束,這些是由客戶強制要求並在需求說明書寫明的。說明系統是如何來適應這些約束的。

      另外如果本系統跟其它外部系統互動或者依賴其它外部系統提供一些功能輔助,那麼系統可能還受到其它的約束。這種情況下,要求清楚地描述與本系統有互動的軟體類型以及這樣導致的約束。

      實現的語言和平台也會對系統有約束,同樣在此予以說明。

      對於因選擇具體的設計實現而導致對系統的約束,簡要地描述你的想法思路,經過怎麼樣的權衡,為什麼要採取這樣的設計等等。

      5 物件模型

      提供整個系統的物件模型,如果模型過大,按照可行的標準把它劃分成小塊,例如可以把用戶端和伺服器端的物件模型分開成兩個圖表述。在其中應該包含所有的系統對象。這些對象都是從理解需求後得到的。要明確哪些應該、哪些不應該被放進圖中。所有對象之間的關聯必須被確定並且必須指明聯絡的基數。彙總和繼承關係必須清楚地確定下來。每個圖必須附有簡單的說明。

      6 對象描述

      在這個部分敘述每個對象的細節,它的屬性、它的方法。在這之前必須從邏輯上對對象進行組織。你可能需要用結構圖把對象按子系統劃分好。

      為每個對象做一個條目。在系統物件模型中簡要的描述它的用途、約束(如只能有一個執行個體),列出它的屬性和方法。如果對象是儲存在持久的資料容器中,標明它是持久對象,否則說明它是個臨時對象(transient object)。

      對每個對象的每個屬性詳細說明:名字、類型,如果屬性不是很直觀或者有約束(例如,每個對象的該屬性必須有一個唯一的值或者範圍是有限正整數等)。

      對每個對象的每個方法詳細說明:方法名,傳回型別,傳回值,參數,用途以及使用的演算法的簡要說明(如果不是特別簡單的話)。如果對變數或者傳回值由什麼假定的話,Pre-conditions和Post-conditions必須在此說明。列出它或者被它調用的方法需要訪問或者修改的屬性。最後,提供可以驗證實現方法的測試案例。

      7 動態模型

      這部分的作用是描述系統如何響應各種事件。一般使用順序圖和狀態圖。

      確定不同的情境(Scenario)是第一步,不需要確定所有可能的情境,但是必須至少要覆蓋典型的系統用例。不要自己去想當然地創造情境,通常的策略是描述那些客戶可以感受得到的情境。

      7.1 情境(Scenarios)

      對每個情境做一則條目,包括以下內容:

      情境名:給它一個可以望文生義的名字

      情境描述:簡要敘述情境是幹什麼的以及發生的動作的順序。

      順序圖:描述各種事件及事件發生的相對時間順序。

      7.2 狀態圖

      這部分的內容包括系統動態模型重要的部分的狀態圖。可能你想為每個對象畫一個狀態圖,但事實上會導致太多不期望的細節資訊,只需要確定系統中一些重要的對象並為之提供狀態圖即可。

      8 非功能性需求

      五、概要設計怎麼做

      結構化軟體設計方法:

      詳細閱讀需求規格說明書,理解系統建設目標、業務現狀、現有系統、客戶需求的各功能說明;

      分析資料流圖,弄清資料流加工的過程;

      根據資料流圖決定資料處理問題的類型(變換型、事務型、其他型);

      通過以上分析,推匯出系統的初始結構圖;

      對初始結構圖進行改進完善:所有的加工都要能對應到相應模組(模組的完整性在於他們完成了需求中的所有加工),消除完全相似或局部相似的重複功能(智者察同),理清模組間的層次、控制關係,減少高扇出結構,隨著深度增大扇入,平衡模組大小。

      由對資料字典的修改補充完善,匯出邏輯資料結構,匯出每種資料結構上的操作,這些操作應當屬於某個模組。

      確定系統包含哪些應用服務系統、用戶端、資料庫管理系統;

      確定每個模組放在哪個應用伺服器或用戶端的哪個目錄、哪個檔案(庫),或是在資料庫內部建立的對象。

      對每個篩選後的模組進行列表說明。

      對邏輯資料結構進行列表說明。

      根據結構化軟體設計說明書結構對其他需要說明的問題進行補充說明,形成概要設計說明書。

      OO軟體設計方法:

      在OOA基礎上設計對象與類:在問題領域分析(業務建模和需求分析)之後,開始建立系統構架。

      第一步是抽取建立領域的概念性模型,在UML中表現為建立對象類圖、活動圖表和互動圖。對象類就是從對象中經過“察同”找出某組對象之間的共同特徵而形成類:

      對象與類的屬性:資料結構;

      對象與類的服務作業:操作的實現演算法;

      對象與類的各外部聯絡的實現結構;

      設計策略:充分利用現有的類;

      方法:繼承、複用、演化;

      活動圖表用於定義工作流程,主要說明工作流程的5W(Do What、Who Do、When Do、Where Do、Why Do)等問題,互動圖把人員和業務聯絡在一起是為了理解互動過程,發現業務工作流程中相互互動的各種角色。

      第二步是構建完善系統結構:對系統進行分解,將大系統分解為若干子系統,子系統分解為若干軟體組件,並說明子系統之間的靜態和動態介面,每個子系統可以由用例模型、分析模型、設計模型、測試模型表示。軟體系統結構的兩種方式:層次、塊狀

      階層:系統、子系統、模組、組件(同一層之間具有獨立性);

      塊狀結構:相互之間弱耦合

      系統的組成部分:

      問題論域:業務相關類和對象(OOA的重點);

      人機介面:視窗、菜單、按鈕、命令等等;

      資料管理:資料管理方法、邏輯物理結構、操作對象類;

      任務管理:任務協調和管理進程;

      第三步是利用“4+1”視圖描述系統架構:用例視圖及劇本;說明體繫結構的設計檢視;以模組形式組成包和層包含概要實現模型的實現視圖;說明進程與線程及其架構、分配和相互互動關係的過程視圖;說明系統在操作平台上的物理節點和其上的任務分配的配置視圖。在RUP中還有可選的資料檢視。

      第四步是效能最佳化(速度、資源、記憶體)、模型清晰化、簡單化(簡單就是享受)。

      六、概要設計的原則

      總體原則和方法:由粗到細的原則,互相結合的原則,定性分析和定量分析相結合的方法,分解和協調的方法和模型化方法。

      要系統考慮系統的一般性、關聯性、整體性和層次性。

      分解協調:目的是為了創造更好的系統。系統分解是指將一個複雜的系統分解為若干個子系統,系統協調一是系統內協調,即根據系統的總結構、總功能、總任務和總目標的要求,使各個子系統之間互相協調配合,在各個子系統局部最佳化基礎上,通過內部平衡的協調控制,實現系統的整體最佳化;

      屏蔽抽象:從簡單的架構開始,隱含細節;

      一致性:統一的規範、統一的標準、統一的檔案模式;

      每個模組應當有一個統一命名的容易理解的名字;

      編碼:由外向內(介面->核心);

      面向使用者:概要設計是對於按鈕按下後系統“怎麼做”的簡要說明;

      模組、組件的充分獨立性、封閉性;

      同時考慮靜態結構與動態運行;

      每個邏輯對象都應當說明其所處物理對象(非一一對應);

      每個物理對象都有合適的開發人員,並且利於分工與組裝。(詳細說明見本人另一篇文章:系統構架設計應考慮的因素);

      確立每個構架視圖的整體結構:視圖的詳細組織圖、元素的分組以及這些主要分組之間的介面;

      軟體構架與使用的技術平台密切相關,目前常用的平台有J2EE、.NET、CORBA等等,因此具體的軟體構架人員應當具備使用這些平台的軟體開發經驗;

      通過需求功能與設計模組之間的列表對應,檢查每個需求功能是否都有相應的模組來實現,保證需求功能的可追溯性和需求實現(模組)的完整性,同時可以檢查重複和不必要的模組。

      在需求調研分析過程中對業務處理過程瞭解的完整性和準確性非常重要。調查瞭解清楚所有的商務程序才能設計出適合各流程業務節點使用者業務特點和習慣的軟體,使開發出來的軟體更受歡迎。當然在進行軟體概要設計時,要盡量排除商務程序的制約,即把流程中的各項業務結點工作作為獨立的對象,設計成獨立的模組,充分考慮他們與其他各種業務對象模組的介面,在流程之間通過業務對象模組的相互調用實現各種業務,這樣,在商務程序發生有限的變化時(每個業務模組本身的商務邏輯沒有變的情況下),就能夠比較方便地修改系統程式模組間的調用關係而實現新的需求。如果這種調用關係被設計成儲存在配置庫的資料字典裡,則連程式碼都不用修改,只需修改資料字典裡的模組調用規則即可。

      七、概要設計的重要輸出

      編碼規範:資訊形式、介面規約、命名規則;

      物理模型:元件圖表、配置圖;

      不同角度的構架視圖:用例視圖、邏輯視圖、進程視圖、部署視圖、實施視圖、資料檢視(可選);

      系統總體布局:哪些部分組成、各部分在物理上、邏輯上的相互關係;

      兩個不可忽視的輸出:

      與需求功能的關係:對於需求中的每一個功能,用哪一層、哪個模組、哪個類、哪個對象來實現(一對多關聯性);反過來,應當說明將要建立的系統每一層、每個模組、每個對象、每一個類“做什麼”,他們是為了協助實現哪些功能(一對多關聯性)。(需求的顆粒度在一開始往往是比較粗的,因此根據功能點對於整體項目規模的估計或得到項目WBS其誤差範圍也是比較大的。更為重要的原因是,需求往往不是編碼工作分解的準確依據,因為一個需求的功能點可能對應多個代碼模組,而多個需求的功能點也可能只對應一個或少數代碼模組,同時還有軟體複用等因素要考慮,因此只有在概要設計完成以後才能準確地得到詳細設計或編碼階段的二次WBS,並估計較為準確的整體項目規模。)

      邏輯與物理位置:每個對象在邏輯上分別落在哪一層、哪個模組、哪個類;在物理上每個模組、每個對象、每一個類放在哪個應用伺服器或用戶端的哪個目錄、哪個檔案(庫),或者是建立在資料庫管理系統中的什麼東東(過程、函數、視圖、觸發器等等)。

      八、結構化與物件導向方法特點比較

      1. 從概念方面看,結構化軟體是功能的集合,通過模組以及模組和模組之間的分層調用關係實現;物件導向軟體是事物的集合,通過對象以及對象和對象之間的通訊聯絡實現;

      2. 從構成方面看,結構化軟體=過程+資料,以過程為中心;物件導向軟體=(資料+相應操作)的封裝,以資料為中心;

      3. 從運行控制方面看,結構化軟體採用順序處理方式,由過程驅動控制;物件導向軟體採用互動式、平行處理方式,由訊息驅動控制;

      4. 從開發方面看,結構化方法的工作重點是設計;物件導向方法的工作重點是分析;但是,在結構化方法中,分析階段和設計階段採用了不相吻合的表達方式,需要把在分析階段採用的具有網路特徵的資料流圖轉換為設計階段採用的具有分層特徵的結構圖,在物件導向方法中則不存在這一問題。

      5. 從應用方面看,相對而言,結構化方法更加適合資料類型比較簡單的數值計算和資料統計管理軟體的開發;物件導向方法更加適合大型複雜的人機互動式軟體和資料統計管理軟體的開發;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.