軟件設計工程

1、軟件設計簡介web

定義:爲軟件系統的架構,組件,接口和其它特性的定義過程及該過程的結果,解決「如何作」How的問題。數據庫

軟件設計方法包括:編程

  • 結構化設計SD
  • 面向對象的設計OOD

軟件設計包括如下活動:設計模式

  • 軟件架構設計(概要設計,頂層設計)
    • 體系結構設計
    • 數據設計
    • 接口設計
  • 軟件詳細設計(組件設計,過程設計)
  • 不包括:創新設計

 軟件質量能夠用質量屬性來描述。FURPS質量屬性:瀏覽器

  1. Functionality: 功能性
  2. Usability: 可用性
  3. Reliability: 可靠性
  4. Performance: 性能
  5. Serviceability: 可維護性

2、設計技術服務器

抽象:數據結構

側重於解決特定問題的細節,忽略不相關的底層細節。架構

設計開始時應提升軟件的抽象層次,按抽象級別從高到低進行軟件設計。框架

細化:數據庫設計

與抽象相對的概念,從軟件定義到實現,每進展一步均可以當作是對軟件設計方案的抽象化過程的一次細化。

自頂向下,逐步細化:

  • 最高的抽象層次:用問題所處環境的語言描述
  • 較低的抽象層次:用面向問題的術語面向現實的術語描述
  • 最低的抽象層次:用某種程序設計語言描述

設計模式:

  1. 建立型模式
  2. 結構型模式
  3. 行爲型模式

模塊化:

  • 理論依據:分解問題後的複雜性/工做量的總和<原問題複雜性/工做量
  • 模塊分解並非越小越好:隨着模塊數增長,單個模塊的規模減少了,可是模塊之間的關係複雜程度會增長,設計模塊間接口的工做量也將增大。

如何衡量模塊化設計水平?模塊化設計標準:

  1. 模塊化分解性:分解子問題的系統機制
  2. 模塊化組合性:現有組件能夠組裝成系統
  3. 模塊化可理解性:一個模塊能夠做爲一個獨立單元來使用
  4. 模塊化連續性:系統需求的小變化只引發單個模塊變化
  5. 模塊化保護:模塊內的異常狀況隻影響自身模塊

信息隱藏:

模塊內的信息不能夠被不須要這些信息的其它模塊訪問。

功能獨立:

  • 只解決特定的子功能
  • 接口獲得簡化

功能獨立的兩個定性衡量標準:

  1. 內聚性:模塊的功能相對強度
  2. 耦合性:模塊之間的相互依賴程度

獨立性強的模塊:高內聚,低耦合

耦合的7種類型:

    1. 非直接耦合:兩個模塊沒有直接聯繫,徹底是經過主模塊的控制和調用實現的
    2. 數據耦合:僅經過模塊參數交換信息,且交換的都是簡單數據
    3. 標記耦合:經過參數表,傳遞一個數據結構的一部分
    4. 控制耦合:一個模塊傳遞給另外一個模塊的參數中,包含了控制信息,用於控制接受模塊的執行狀況
    5. 外部耦合:模塊經過除軟件之外的環境(如I/O)鏈接
    6. 公共耦合:一組模塊訪問一個公共數據環境
    7. 內容耦合:一個模塊對另外一個模塊的內容(數據,代碼段)進行了直接引用或修改,兩個模塊共享一部分代碼

內聚的7種類型:

    1. 巧合內聚:又稱偶然內聚,語句段十分鬆散,無聯繫
    2. 邏輯內聚:把幾種功能組合在一塊兒,由傳入模塊的控制參數來決定執行哪種功能
    3. 時間內聚:一個模塊包括了須要在同一時間段執行的多個任務
    4. 過程內聚:一個模塊內的各個部分按照特定的次序執行
    5. 通訊內聚:一個模塊中的各個部分使用同一個輸入數據或產生同一個輸出數據
    6. 順序內聚:必須按照前後順序執行,後一個部分與前一個部分密切相關
    7. 功能內聚:模塊完成一個功能

重構:

不改變組件功能的條件下,簡化組件設計。

3、設計模型

  • 體系結構設計:強調系統的:可理解性,可維護性,可擴展性
    • 模式
    • 風格
    • 框架(如MVC Struts)
  • 數據設計
  • 接口設計
  • 組件設計

 體系結構設計:

將模式(即,針對特定問題的解決方案)劃分紅三類:

  • 體系結構模式:軟件系統的基本結構組織形式或方案
  • 設計模式(23種):構件相互通訊的結構
  • 慣用法:與編程語言相關的低級模式

架構風格分類:

  • 數據中心架構:
  • 數據流架構
  • 調用和返回架構:
    • 可分爲主程序/子程序架構(因此程序組件都在同一臺計算機上),遠程過程調用架構(主程序或子程序的各組件分佈在多臺計算機上)兩類
    • 須要理解:深度寬度扇入扇出:

 

  • 面向對象架構:封裝了數據和對數據的操做
  • 層次架構:每一層爲上一層提供服務,並做爲下一層的客戶。每一層最多隻影響兩層,只需提供接口,容許各層用不一樣方法實現。

另外一種分類方法:

  • 單主機結構
  • 分佈式結構
    • 多處理器體系結構
    • 客戶機/服務器體系結構(B/S C/S架構)
    • 分佈式對象體系結構
    • 代理

兩層C/S架構:

  • 瘦客戶機模型:除數據表示之外的操做都在服務器執行。客戶機只負責數據表示。
  • 胖客戶機模型:服務器只負責管理數據,客戶機實現應用邏輯和與系統交互。

 三層C/S架構:

增長了應用服務器。

將系統分爲:數據層應用邏輯層表示層

B/S架構(是三層體系架構):

瀏覽器——web服務器——數據庫服務器

相對靈活,但響應速度和動態交互性不如C/S

 

接口設計中的重要部分:

用戶界面設計:三個準則:

  1. 用戶控制系統
  2. 減小學習和記憶負擔
  3. 保持界面的一致性

數據設計:

組件級別的數據設計,即設計供軟件組件直接訪問的數據結構。

低層的數據設計應推遲到後期進行。

注意信息的隱藏和耦合。

組件設計:

接近代碼層次的軟件抽象描述。

  • 結構化設計:基於過程
  • 面向對象設計:基於類

部署設計:

包含了整個解決方案的邏輯架構和服務質量(QoS)需求。

項目審批發生在部署設計階段,估計軟件部署的成本,提交審批。

是一種高層架構,描述了邏輯環境到物理環境的映射。

4、結構化設計方法SD(Structured Design)

 結構化設計中,軟件的結構元素是模塊,所以也稱爲模塊設計

接口設計:

  • 內部接口:模塊之間的接口。
  • 外部接口:軟件和硬件的接口,軟件和其它軟件的接口,軟件和用戶的交互界面。

SD數據設計的歸納:將ER圖轉換爲數據庫表。

軟件的結構分爲:模塊結構+數據結構。通常採用功能劃分的方法進行軟件結構設計,對整個問題進行分割,每一部分用一個或幾個模塊來完成。

模塊的表示:

  • 用矩形框表示,已定義的模塊用雙縱邊矩形框表示。

模塊的分類(實際系統中的模塊屬於如下任意一種,或某幾種的組合):

  1. 傳入模塊
  2. 傳出模塊
  3. 變換模塊
  4. 協調模塊

模塊的結構:

  1. 樹狀結構:
    • 只有一個頂層(第0層)模塊
    • 上層模塊調用下層模塊,同一層模塊之間互不調用
    • 實際系統中建議使用樹狀結構,最底層可能存在公共模塊,使得整個系統不是嚴格的樹狀結構,屬正常狀況
  2. 網狀結構:
    • 沒法區分層次
    • 任意模塊可相互調用
    • 系統結構複雜,難以處理
    • 實際系統中不建議使用網狀結構

用結構圖表示模塊結構:

菱形表示條件調用,圓弧表示循環調用。

 

 理解深度,寬度(下圖寬度爲7),扇入,扇出:

數據結構:

基於數據流的設計方法是:過程驅動的設計方法。

數據流的類型:(通常都是以變換型爲主,事務型爲輔)

  • 變換型數據流:工做過程大體分爲3步:取得數據,變換數據,給出數據

變換型系統結構圖以下:

 

  • 事務型數據流:接受一項事務,分派適當的處理單元並給出結果。選擇分派任務的部分稱爲事務(處理)中心分派部件。調度模塊若是不復雜,能夠納入事務中心模塊。

事務型系統結果圖(簡化):

變換型映射方法:將具備變換流特色的數據流圖映射成軟件結構

自頂向下,設計下層模塊的順序是任意的。但通常先設計輸入模塊的下層模塊。

一層一層往下分解。

事務型映射方法:將具備事務流特色的數據流圖映射成軟件結構

變換型和事務型混合結構的例子:

模塊的完善化:

模塊徹底類似,可能只是在數據類型上不一致。能夠徹底合併。

局部類似時,則不能將二者合併爲一。通常的處理方法是將類似的部分分離出去。

模塊的做用範圍和控制範圍:

模塊的控制範圍是指它自己和全部的從屬模塊。

模塊的做用範圍是指收模塊內一個斷定影響的範圍。

模塊的做用範圍應該在模塊的控制範圍之內

扇入和扇出:

適當的扇出數爲2~5,最好不要超過9。扇出數太小會使結構圖的深度增長,扇出數過大會使結構圖的寬度增長。

一個好的軟件模塊設計,一般是:上層扇出較高,中層扇出較少,底層公用模塊的扇入較高。

數據庫設計:

數據庫分爲多種,其中關係數據庫最成熟。多對多關係的映射須要引入關聯表。

結構化程序設計用到的工具:

  • 程序流程圖
  • N-S圖(盒圖)
  • PAD圖:採用PAD描述出來的程序必定是結構化程序,多少根豎線對應多少層
  • 斷定表:多重嵌套的條件選擇
  • 僞代碼

5、面向對象的設計方法OOD(Object-Oriented Design)

 OOA和OOD,分析和設計聯繫緊密,沒有明顯界限。

整個設計階段的核心任務:建立包含操做的設計類圖

分析類設計類:導出實體類,增長邊界類,控制類

在OOD中,類和接口是程序的基本組成單元。

繼承(子類對象繼承父類的全部特徵,又能夠覆蓋父類的方法)依賴性:

  1. 多態繼承:
    • 根據爲請求服務的對象不一樣能夠獲得不一樣的行爲。若在運行時對類進行實例化,稱爲動態綁定;若方法的調用是在編譯時肯定的,稱爲靜態綁定。
    • 多態不是伴隨着繼承產生。若是子類中不覆蓋父類中的任何方法,就不會產生多態。
    1. 編譯時繼承依賴性:通常來講,全部的繼承都會引入編譯時依賴性。而且,依賴性是可傳遞的。
    2. 運行時繼承依賴性
    3. 交互依賴性:經過消息鏈接產生的
  2. 無多態繼承:
    • 子類不覆蓋父類的方法。
    • 有時不是十分有用,但便於理解和管理。
  3. 擴展繼承和約束繼承:
    • 擴展繼承:子類繼承了父類的屬性,並提供額外屬性來加強類的定義。
    • 約束繼承:子類對從父類繼承來的方法和功能進行了約束和限制。

面向接口編程,而不是面向實現編程:接口依賴性又分爲使用依賴性和實現依賴性。

在包之間增長新包,能夠消除循環依賴性。

構件:比類更高級,包含一個或一組類,或者其它部署單元,完成一個或多個功能的特定服務。隱藏了具體的實現,只用接口對外提供服務。

從軟件複用的角度,構件是指開發過程當中能夠複用的軟件元素。具備獨立性,不可拆分。

構件被實現爲大粒度的單元,只能由一個實例。

OOD:系統劃分爲子系統。

封閉體系結構:每一層只能訪問與其相鄰的下一層。

開放體系結構:每一層能夠訪問比其下一層更低的層次。

典型的面向對象系統的分層結構:數據庫層,業務邏輯層,用戶界面層

面向對象的設計順序:業務邏輯層(問題域部分)M——人機交互部分V——C任務管理部分——數據管理部分

數據管理部分:關聯關係的映射:

相關文章
相關標籤/搜索