1. 概念、方法、實踐步驟
設計是指根據需求開發的結果,對產品的技術實現由粗到細進行設計的過程。根據設計粒度和目的的不同可以將設計分為概要設計、詳細設計等階段以便於管理和確保質量。設計內容也要根據軟件系統的實際情況進行定義,比如對於交互性要求高的系統可以有視覺設計等等。
一般來說可以將設計階段划分為概要設計、詳細設計2階段進行管理,程序設計可以結合項目管理、作業配分、開發團隊的能力以及質量要求等因素來決定是否作為單獨的階段進行管理。
n 概要設計: 定義實現需求的工作產品技功能、技術構架,定義設計准則及共通處理方針,分解划分功能模塊,定義各功能模塊的功能和業務處理,定義模塊間的接口關系。典型的工作產品有《概要設計書》、《設計准則》及《共通處理方針》。一般包括系統技術構架,機能一覽,機能遷移圖,數據庫邏輯設計,數據文件邏輯定義,系統各單位功能模塊及接口定義,設計准則及共通處理方針(外觀、操作、錯誤處理、日志、提示信息、異常處理、命名規約、編碼規約等方針)等內容。
n 詳細設計:定義各功能模塊的功能單元的詳細實現,包括接口的物理定義,明確數據庫/數據文件的物理定義等。典型的工作產品:《詳細設計書》。典型的內容包括各模塊的功能單元實現的詳細描述,數據庫物理設計,數據文件物理定義,接口物理定義,狀態碼物理設計,輸出信息(MSG/LOG)設計等內容。
程序設計:結合具體的編碼語言,編碼過程中對代碼的設計。根據經驗對於團隊中有大量初學者來說,進行一定量的程序設計可以提高編碼的質量和效率。
2. 設計階段的主要流程
設計階段的主要活動包括以下內容:設計階段的計划或規划、確定設計的准則、設計以及制作設計文檔、設計產物評審等。
1.設計階段的計划或規划內容為確定設計團隊的組織並授權、評估設計階段的工作量、明確設計的工作任務(WBS分解)以及完成時間、定義設計階段的質量標准以及效率標准。這部分活動主要是PDCA中首要步驟,除上述內容外,還需要考慮項目管理中一些共同管理規划,比如風險管理、配置管理、干系人管理、變更管理、決策分析管理等等內容。在多人或團隊作業的工作,制定合理的計划和規划是首要的步驟。
2.設計不同類型的系統其設計方法、方式等有很大的區別,比如圖像處理系統、監控系統和ERP等管理系統的差異是顯而易見的。因此設計階段有個關鍵的活動就是確定設計准則,這個活動的主要目的就是根據系統的實際情況,選擇最佳的實踐,用最優的方法指導設計的進行。設計准則通常要考慮的內容包括:設計的內容、方法、工具、模板、命名規約、模塊划分規則(尤其設計粒度)、質量以及效率評估方式等等。
3.設計以及制作設計文檔:根據設計准則以及設計規划執行設計任務並制作設計文檔多數情況不是一件復雜的工作,但是對軟件系統來說卻是一個迭代的、消化大量時間的過程。從我們討論設計思路、形成初步草案、充分溝通、決策優劣、再修正、評審通過都需要理解、學習、反復迭代並花費大量時間。軟件系統的設計無論采用什么形式,分層、抽象、歸納、匯總是設計的主要方法。分層和抽象是最關鍵的步驟,也是相對比較難掌握的,無論分層和抽象都是從分類開始的,比如功能的分類、業務的分類、信息的分類、控制模式的分類等等,只要能逐層分類就很容易進行分層和抽象。另外,歸納、匯總是常見的方法,也是體力工作,只要認真細致就能很好的完成。
4.設計產物評審:針對設計設計產物進行評審以及相關的溝通是確保設計質量的主要活動。從形式上,可以采用多種方法,比如設計小組評審、P2P評審、正式會議評審等等。
設計階段的主要活動設計階段的計划或規划、確定設計的准則、設計以及制作設計文檔、設計產物評審等是個反復迭代的過程。本質上設計是個學習迭代的過程、通過不斷的評審、確認、改善達到成熟,因此設計的保證手段主要是設計准則和評審。
根據軟件項目類型的不同具體流程也有一些細節差異,每個軟件開發組織可以結合業務特征具體定義,下面舉例介紹2種典型的流程。
例:軟件外包企業,工程類的典型流程(概要設計)
主要特征:
ü 流程強調客戶的參與,比如對設計的計划、設計的成果的評審。
ü 強調對關鍵的過程,比如系統架構的結果進行質量管控。
ü 對不同規模、技術、質量、進度要求的項目進行分級控制。
3.1制定及修改項目計划
• 項目經理根據《項目計划規程》制定概要設計計划,明確設計(式樣)管理組中參與概要設計人員的工作任務和完成時間,並通知各相關者進行確認。
• 項目進行中,根據給定需求的變更和概要設計的實際進度狀況的跟蹤結果,及時調整或重新制定概要設計的詳細進度計划。
• 根據概要設計的進展狀況,必要時修正計划並與客戶達成一致。
注:與客戶達成一致是外包的核心,計划以及核心內容和客戶達成一致非常重要。
• 項目概要設計計划並入項目計划中。
3.2確定系統架構和概要設計准則
• 確定系統架構
a. 對於A、B類項目
啟動DAR(參見《決策分析規程》),分析風險、成本、進度的制約、技術、質量的要求,決定是否需要購買商業組件、是否復用已有構件。如果確認需要進行采購,請參見《供應商合同管理規程》。
根據公司人員情況、項目業務特征、性能數據量要求、可靠性要求、成本、效率、風險等方面內容提出多種系統架構進行評定,最終選定適合項目的系統架構。
輸出參見《決策分析規程》的輸出。
b. 對於非A、B類項目
設計(式樣)管理組根據公司人員情況、項目業務特征、性能數據量要求、可靠性要求、成本、效率、風險等方面內容對多種系統架構進行評定,最終選定適合項目的系統架構。
如果用戶有不同於一般項目的要求或者采用了公司不熟悉的架構,開發技術(環境)組需制作項目原型,以驗證技術架構方案並確保其正確性。
注:根據不同工作量、技術、質量、進度要求、團隊規模等識別出項目分類,並對概要設計的關鍵控制點(體系結構)進行不同的管控。
• 確定概要設計准則
設計(式樣)管理組根據項目情況,確定項目的概要設計准則,准則通常包括:項目概要設計的方法、項目概要設計所使用的工具、概要設計成果物所使用的部分模板等。
設計(式樣)管理組定義各種方針,各單位機能模塊設計時應遵循已定義的各類方針。
通常需要定義的方針包括:操作、錯誤處理、日志、提示信息、異常處理、命名規約等方針。
所定義的所有的處理方針均需形成文檔,進行配置管理。
對定義的所有內容形成《概要設計准則》。
3.3設計業務機能
• 設計(式樣)管理組對《系統要件定義書》中定義的業務組件使用各種方法進行細化(包括拆分、合並、分組等),並將各需求分配到這些細分的業務組件或功能模塊上。
• 設計(式樣)管理組根據各類處理方針,對各單位機能組件和功能模塊的外觀、數據項目定義、功能概要、數據處理流程、操作方法、各機能組件或功能模塊的接口和參數等進行設計。
• 定義各機能組件和功能模塊的接口和參數,各設計人員需驗證其接口銜接上的一致性。
• 將以上的內容加入對系統架構的描述,形成《概要設計書》。
• 設計(式樣)管理組將概要設計的內容按照其和需求的對應關系填入《需求追蹤矩陣》。
• 數據庫邏輯設計。
3.4評審系統概要設計
• 項目經理組織項目評審專家組對概要設計的成果物進行評審(參見評審規程)。評審中發現的問題需體現於《概要設計評審報告》中。評審結束后,開發經理(PJL)跟蹤這些問題,直到問題得到修正。
• 評審結束后,項目評審專家組需要根據評審的結論產生《概要設計評審報告》,並上報項目經理(PM)。
3.5確認概要設計
• 概要設計評審通過后,項目經理(PM)針對《概要設計書》取得客戶的認可。
注:軟件外包中的概要設計結果一般還需要客戶的評審,這個也是項目屏蔽風險的主要方法,但是不同的客戶技術水平並不相同,還要根據實際情況來判斷。
3.6納入基線管理
• 概要設計評審通過后,《概要設計准則》、《概要設計書》、《需求追蹤矩陣》需納入基線管理
• 本規程所產生的所有文檔均需進行配置管理(參見配置管理規程)。產生的文檔通常包括:
《概要設計准則》
《概要設計書》
《概要設計評審報告》
案例2:軟件產品類的典型流程
主要特征:
ü 流程強調交互設計
ü 強調設計方針的管理。
ü 對設計內容進行的明確規范
3.1計划編制
產品研發經理根據《開發詳細時間計划》細化設計工作,編制《系統設計計划》。經相關人員確認后,提交產品團隊經理審核,審核通過后發布計划。
產品團隊經理應將《系統設計計划》及時合並到《開發詳細時間計划》中。
3.2設計准則確定
系統設計組根據項目情況,確定設計准則。准則通常包括:設計的方法、設計使用的工具、設計成果物所使用的模板等。
系統設計組制定各種設計方針,設計過程中需遵循已定義的方針。
3.2.1概要設計准則
概要設計方針通常包含:功能模塊命名規約、功能模塊操作、錯誤處理、異常處理、提示信息顯示、日志記錄等。
系統設計組匯總概要設計方針形成《概要設計准則》。
3.2.2詳細設計准則
詳細設計的方針通常包含:類和方法命名規約、方法輸入參數的排列次序、方法輸出參數的格式、提示信息輸出格式、方法級日志輸出格式等。
系統設計組匯總詳細設計方針形成《詳細設計准則》。
3.2.3設計准則評審
產品研發經理宜組織資源對《概要設計准則》、《詳細設計准則》進行評審,評審通過后,由配置組進行配置管理。
3.3概要設計
3.3.1《概要設計書》編制
《概要設計書》應包含以下內容:
系統架構設計
根據產品的業務特征、性能要求、可靠性要求、成本等方面內容,針對產品使用的技術平台和軟硬件架構,提出多種候選方案;
方案的內容應包含:系統使用的軟硬件技術平台及相關技術列表、系統的物理架構、物理器件類型、數據庫管理系統類型、服務器類型、子系統划分及部署方式、系統的軟件架構、第三方軟件平台列表等;
功能模塊設計
根據《產品規格說明書》的定義,結合產品的領域知識,通過拆分、合並、分組等方法,將產品的各項功能划分到子系統中,並細化到各機能組件和功能模塊上;
系統接口設計
接口主要用於子系統/模塊之間或內部系統與外部系統進行各種交互;
接口設計應根據制定各種方針,結合業務特點,並使用相應的設計方法;
接口設計的內容應包含:接口的名稱、功能描述、接口的輸入輸出定義、接口的使用方法、接口的數據處理流程、輸入輸出的數據結構定義、異常處理機制、錯誤處理機制、日志記錄方法及格式等;
數據庫設計
根據業務的復雜程度和設計實現的需要,對核心和重要的數據生成數據字典,對於復雜的操作流程,進行適當的流程說明;
完成核心和重要庫表的邏輯設計;
3.3.2《概要設計書》評審
產品研發經理組織相關干系人對《概要設計書》進行評審。評審通過后,由配置組進行配置管理。
3.4視覺設計
視覺設計的主要工作是根據交互設計的低保真原型進行高保真視覺效果設計;
視覺設計主要內容為整體風格把握,包括頁面顏色、元素外觀、配圖;
注:強調交互設計中的視覺設計,單獨作為一項工作內容進行管理。
3.5詳細設計
3.5.1《詳細設計書》編制
《詳細設計書》應包含以下內容:
模塊接口設計
對用於持久化的文件進行設計,設計的內容應包含:文件的存放位置、文件名稱、內容編碼、內容結構、讀寫控制機制等;
對持久化內存數據進行設計,設計的內容應包含數據的存儲格式、數據的緩存刷新機制、數據的讀寫時機和方式等;
對數據庫進行物理設計。設計的內容應包含:表、視圖、存儲過程等;
模塊功能設計
對模塊/子模塊的的命名空間進行設計。如對源代碼的包結構進行設計;
對模塊/子模塊的內部功能流程進行設計,將功能和職責細分到具體的類;
對於核心的類進行屬性和方法進行設計;
對復雜的計算進行算法設計;
共通功能設計
對異常、錯誤、消息和日志進行詳細的設計;
對內存管理、線程管理等進行設計;
對系統性能諸如:抗壓性、吞吐量、響應速度、安全性等進行進行設計;
3.5.2《詳細設計書》評審
產品研發經理組織相關干系人對《詳細設計書》進行評審。評審通過后,由配置組進行配置管理。
3.6 前端設計
前端設計是指根據視覺設計結果,進行CSS、HTML、JS進行編碼;
前端設計的主要工作為:超文本結構設計、樣式設計、交互效果實現、瀏覽器兼容設計、頁面性能優化;
注:強調交互設計中的視覺設計,單獨作為一項工作內容進行管理。