經過需求分析(https://blog.csdn.net/weixin_45626468/article/details/115324885)階段的工作,系統必選“做什么”已經清楚了,現在是決定“怎樣做”的時候了。
總體設計的基本目的就是回答“概況地說,系統應該如何實現”這個1問題,因此,總體設計又稱為概要設計或初步設計。
通過這個階段的工作將劃分出組成系統的物理元素——程序、文件、數據庫、人工過程和文檔等
但是每個物理元素仍然處于黑盒子級,這些黑盒子里的具體內容將在以后仔細設計。
總體設計階段的另一項主要任務是設計軟件的結構,也就是確定系統中每個程序是由哪些模塊組成的,以及這些模塊相互間的關系。
總體設計過程首先尋找實現目標系統的各種不同的方案,需求分析階段得到的數據流圖(https://blog.csdn.net/weixin_45626468/article/details/115117900)是設想各種可能方案的基礎。
然后分析員從這些供選擇的方案中選取若干個合理的方案,為每個合理的方案準備一份系統流程圖,列出組成系統的所有物理元素,進行成本/效益分析(https://blog.csdn.net/weixin_45626468/article/details/115227014),并且制定實現這個方案的進度計劃。
分析員應該綜合分析比較這些合理的方案,從中選出最佳方案向用戶和使用部門負責人推薦。
如果用戶和使用部門負責人接受了推薦的方案,分析員應該進一步為這個最佳方案設計軟件結構,通常,設計出初步軟件結構后還要多方改進,從而得到更合理的結構,進行必要的數據庫設計,確定測試要求并且制定測試計劃。
從上面的敘述當中不難看出,在詳細設計之前先進行總體設計的必要性;
可以站在全局高度上,花較少的成本,從較抽象的層次分析對比多種可能的系統實現方案和軟件結構,從中選出最佳方案和最合理的軟件結構,從而用較低成本開發出較高質量的軟件系統。
設計過程
總體設計過程通常由兩個主要階段組成:
系統設計階段,確定系統的具體實現方案
結構設計階段,確定軟件結構
典型的總體設計過程包括:
1.設想供選擇的方案
如何實現要求的系統呢?在總體設計階段分析員應該考慮各種可能的實現方案,并且力求從中選出最佳方案。在總體設計階段開始時只有系統的邏輯模型,分析員有充分的自由分析比較不同的物理實現方案,一且選出了最佳的方案,將能大大提高系統的性能/價格比。
需求分析階段得出的數據流圖是總體設計的極好的出發點。設想供選擇的方案的一種常用的方法是,設想把數據流圖中的處理分組的各種可能的方法,拋棄在技術上行不通的分組方法(例如,組內不同處理的執行時間不相容),余下的分組方法代表可能的實現策略,并且可以啟示供選擇的物理系統。
2.選取合理的方案
應該從前一步得到的一 系列供選擇的方案中選取若干個合理的方案,通常至少選取低成本、中等成本和高成本的3種方案。在判斷哪些方案合理時應該考慮在問題定義和可行性研究階段確定的工程規模和目標,有時可能還需要進一步征求用戶的意見。
對每個合理的方案,分析員都應該準備下列4份資料。
(1)系統流程圖。
(2)組成系統的物理元素清單。個
(3)成本/效益分析。
(4)實現這個系統的進度計劃。
3.推薦最佳方案
分析員應該綜合分析對比各種合理方案的利弊,推薦一個最佳的方案,并且為推薦的方案制定詳細的實現計劃。
用戶和有關的技術專家應該認真審查分析員所推薦的最佳系統,如果該系統確實符合用戶的需要,并且是在現有條件下完全能夠實現的,則應該提請使用部門負責人進一步審批。在使用部門的負責人也接受了分析員所推薦的方案之后,將進人總體設計過程的下一個重要階段一結構設計。
4.功能分解
為了最終實現目標系統,必須設計出組成這個系統的所有程序和文件(或數據庫)。對程序(特別是復雜的大型程序)的設計,通常分為兩個階段完成:首先進行結構設計,然后進行過程設計。結構設計確定程序由哪些模塊組成,以及這些模塊之間的關系;過程設計確定每個模塊的處理過程。結構設計是總體設計階段的任務,過程設計是詳細設計階段的任務。
為確定軟件結構,首先需要從實現角度把復雜的功能進一步分解。 分析員結合算法描述仔細分析數據流圖中的每個處理,如果一個處理的功能過分復雜,必須把它的功能適當地分解成一系列比較簡單的功能。一般說來,經過分解之后應該使每個功能對大多數程序員而言都是明顯易懂的。功能分解導致數據流圖的進一步細化,同時還應該用IPO圖或其他適當的工具簡要描述細化后每個處理的算法。
5.設計軟件結構
通常程序中的一個模塊完成一個適當的子功能。應該把模塊組織成良好的層次系統頂層模塊調用它的下層模塊以實現程序的完整功能,每個下層模塊再調用更下層的模塊,從而完成程序的一個子功能,最下層的模塊完成最具體的功能。軟件結構(即由模塊組成的層次系統)可以用層次圖或結構圖來描繪。如果數據流圖已經細化到適當的層次,則可以直接從數據流圖映射出軟件結構
6.設計數據庫
對于需要使用數據庫的那些應用系統,軟件工程師應該在需求分析階段所確定的系統數據需求的基礎上,進一步設計數據庫。在數據庫課中已經詳細講述了設計數據庫的方法,本書不再贅述。
7.制定測試計劃
在軟件開發的早期階段考慮測試問題,能促使軟件設計人員在設計時注意提高軟件的可測試性。本書第7章將仔細討論軟件測試的目的和設計測試方案的各種技術方法。
8.書寫文檔
應該用正式的文檔記錄總體設計的結果,在這個階段應該完成的文檔通常有下述幾種。
(1)系統說明主要內容包括用系 統流程圖描繪的系統構成方案,組成系統的物理元素清單,成本/效益分析;對最佳方案的概括描述,精化的數據流圖,用層次圖或結構圖描繪的軟件結構,用IPO圖或其他工具(例如,PDL語言)簡要描述的各個模塊的算法,模塊間的接口關系,以及需求、功能和模塊三者之間的交叉參照關系等。
(2)用戶手冊根據總體設計階段的結果 ,修改更正在需求分析階段產生的初步的用戶手冊。
(3)測試計劃包括測試策略,測試方案,預期的測試結果,測試進度計劃等。
(4)詳細的實現計劃
(5)數據庫設計結果
9.審查和復審
最后應該對總體設計的結果進行嚴格的技術審查,在技術審查通過之后再由客戶從管理角度進行復審。