4.1 概要設計

(1)概要設計的任務,

(2)概要設計的步驟,

(3)設計原則,

(3.1)模塊劃分,

(3.2)信息隱藏和局部化。


概要設計的任務

  • 概括地說明系統應該如何實現。
  • 設計軟體的結構(模塊組成)。

概要設計的步驟

1.設想供選擇的方案

2.選取合理的方案

依據:

(1) 系統流程圖。

(2) 組成系統的資源清單。

(3) 成本/效益分析。

(4) 該系統的進度計劃。

3.推薦最佳方案,並審查:

  • 是否確實符合用戶的需要?
  • 現有條件下能否實現?

4.功能分解

思考:一個地圖APP需要分解為哪些功能模塊?

5.設計軟體結構

通常,程序的一個模塊只完成一個功能。

應該把模塊組織成良好的層次系統,

頂層模塊調用其下層模塊以實現程序的完整功能,

每個下層模塊再調用更下層的模塊,

最下層的模塊完成最具體的功能。

6.設計資料庫

7.制定測試計劃

8.書寫文檔

(1). 系統說明

(2). 用戶手冊

(3). 測試計劃

(4). 詳細的實現計劃

(5). 資料庫設計結果

9.審查和複審

設計原理——模塊劃分

模塊化的好處:

  • 結構清晰
  • 容易設計、理解
  • 有利於管理——

大型程序可以由許多程序員分工編寫不同的模塊,

困難的模塊交給熟練的程序員。

mysql的jdbc包的模塊

模塊化的理論依據:

設問題x的複雜程度是函數C(x)

解決x需要的工作量(時間)用函數E(x)表示

對於兩個問題P1和P2,

  • 如果C(P1)>C(P2),
  • 則E(P1)>E(P2)

根據人類解決一般問題的經驗,有如下規律:

  • C(P1+P2)>C(P1)+C(P2)

也就是說:如果一個問題由P1和P2兩個問題組合而成,那麼它的複雜程度大於分別考慮每個問題時的複雜程度之和。

綜上所述,得到下面的不等式

  • E(P1+P2)>E(P1)+E(P2)

即:把複雜的問題分解成多個容易解決的小問題,原來的問題也就容易解決了。

推論:如果無限地分解軟體,最後各個模塊工作量也就小得可以忽略

然而,隨著模塊數目增加,設計模塊間介面所需要的工作量也將增加。下圖是「總成本曲線」:

即:只有在最小成本區的模塊數才是合適的劃分,模塊多了少了都不合適。

設計原理——信息隱藏和局部化

信息隱藏:模塊內包含的信息(函數/變數)對於不需要這些信息的模塊來說,不能訪問。

如果在測試期間和維護期間需要修改軟體,使用信息隱藏原理作為模塊化系統設計的標準就會帶來極大好處。

面向對象語言中,提供的private、protected關鍵字,就是用於信息隱藏。

局部化:把一些關係密切的元素放得彼此靠近。比如:

相關函數放在一個模塊中

變數統一定義

相關函數放在一個模塊中:Java的Math類

變數統一定義


推薦閱讀:

《軟體方法》上冊第2版推薦序
The world at your fingertips - 天涯明月刀幕後8(重啟)
【推薦】真正綠色的四窗口的文件管理器文件管理的福音
5W 相關
4.2 內聚和耦合

TAG:軟體工程 | 軟體設計 | 軟體工程師 |