<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一路拾遺
    Collect By Finding All The Way ......
    posts - 81,comments - 41,trackbacks - 0
            在需求明確、準備開始編碼之前,要做概要設計,而詳細設計可能大部分公司沒有做,有做的也大部分是和編碼同步進行,或者在編碼之后。因此,對大部分的公司來說,概要設計文檔是唯一的設計文檔,對后面的開發、測試、實施、維護工作起到關鍵性的影響。
      一、問題的提出
      概要設計寫什么?概要設計怎么做?
      如何判斷設計的模塊是完整的?
      為什么說設計階段過于重視業務流程是個誤區?
      以需求分析文檔還是以概要設計文檔來評估開發工作量、指導開發計劃準確?
      結構化好還是面向對象好?
      以上問題的答案請在文章中找。
      二、概要設計的目的
      將軟件系統需求轉換為未來系統的設計;
      逐步開發強壯的系統構架;
      使設計適合于實施環境,為提高性能而進行設計;
      結構應該被分解為模塊和庫。
      三、概要設計的任務
       制定規范:代碼體系、接口規約、命名規則。這是項目小組今后共同作戰的基礎,有了開發規范和程序模塊之間和項目成員彼此之間的接口規則、方式方法,大家就有了共同的工作語言、共同的工作平臺,使整個軟件開發工作可以協調有序地進行。
      總體結構設計:
      功能(加工)->模塊:每個功能用那些模塊實現,保證每個功能都有相應的模塊來實現;
      模塊層次結構:某個角度的軟件框架視圖;
      模塊間的調用關系:模塊間的接口的總體描述;
      模塊間的接口:傳遞的信息及其結構;
      處理方式設計:滿足功能和性能的算法
      用戶界面設計;
      數據結構設計:
      詳細的數據結構:表、索引、文件;
      算法相關邏輯數據結構及其操作;
      上述操作的程序模塊說明(在前臺?在后臺?用視圖?用過程?······)
      接口控制表的數據結構和使用規則
      其他性能設計。
      四、概要設計寫什么
      結構化軟件設計說明書結構(因篇幅有限和過時嫌疑,在此不作過多解釋)
      任務:目標、環境、需求、局限;
      總體設計:處理流程、總體結構與模塊、功能與模塊的關系;
      接口設計:總體說明外部用戶、軟、硬件接口;內部模塊間接口(注:接口≈系統界面)
      數據結構:邏輯結構、物理結構,與程序結構的關系;
      模塊設計:每個模塊“做什么”、簡要說明“怎么做”(輸入、輸出、處理邏輯、與其它模塊的接口,與其它系統或硬件的接口),處在什么邏輯位置、物理位置;
      運行設計:運行模塊組合、控制、時間;
      出錯設計:出錯信息、處錯處理;
      其他設計:保密、維護;
      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. 從應用方面看,相對而言,結構化方法更加適合數據類型比較簡單的數值計算和數據統計管理軟件的開發;面向對象方法更加適合大型復雜的人機交互式軟件和數據統計管理軟件的開發;
    posted on 2009-08-30 09:12 胖胖泡泡 閱讀(699) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲欧美日韩中文字幕一区二区三区| 亚洲大尺度无码专区尤物| 亚洲 欧洲 日韩 综合在线| 99在线在线视频免费视频观看| 亚洲av日韩av无码黑人| 成人电影在线免费观看| 国产精品亚洲片在线观看不卡| 大妹子影视剧在线观看全集免费 | 四虎成人免费影院网址| 在线aⅴ亚洲中文字幕| 成人免费a级毛片| 亚洲高清乱码午夜电影网| 亚洲AV成人精品日韩一区18p| 黄色a三级免费看| 亚洲中文字幕无码不卡电影| 久久这里只精品99re免费| 亚洲最大在线视频| 午夜神器成在线人成在线人免费| 国产成人人综合亚洲欧美丁香花| 亚洲av午夜成人片精品电影| aa级女人大片喷水视频免费 | 亚洲乱码一区av春药高潮| 在线精品免费视频无码的| 农村寡妇一级毛片免费看视频| 亚洲免费视频一区二区三区| 成人性做爰aaa片免费看| 久久av无码专区亚洲av桃花岛| 又黄又爽又成人免费视频| 粉色视频在线观看www免费| 亚洲国产精品无码中文字| 69视频免费观看l| 朝桐光亚洲专区在线中文字幕 | 亚洲日韩精品无码专区加勒比☆ | 无码乱人伦一区二区亚洲| 国产香蕉九九久久精品免费| 成人a毛片视频免费看| 亚洲视频在线观看一区| 四虎永久在线精品免费观看地址 | 久久亚洲免费视频| 亚洲女女女同性video| 国产亚洲一区二区精品|