軟體設計基礎



軟體設計是一個將使用者需求轉化為某種合適形式的過程,這有助於程式設計師進行軟體編碼和實現。

為了評估使用者需求,會建立SRS(軟體需求規格說明)文件;而對於編碼和實現,則需要以軟體術語表達更具體和詳細的需求。此過程的輸出可以直接用於程式語言的實現。

軟體設計是SDLC(軟體開發生命週期)的第一步,它將注意力從問題域轉移到解決方案域。它試圖指定如何滿足SRS中提到的需求。

軟體設計層次

軟體設計產生三個層次的結果

  • 架構設計 - 架構設計是系統最高層次的抽象版本。它將軟體識別為一個由許多相互互動的元件組成的系統。在這個層次上,設計人員可以瞭解擬議的解決方案域。
  • 高層設計 - 高層設計將架構設計中“單個實體-多個元件”的概念分解為子系統和模組的較低抽象檢視,並描述它們之間的相互作用。高層設計側重於如何以模組的形式實現系統及其所有元件。它識別每個子系統的模組化結構以及它們彼此之間的關係和互動。
  • 詳細設計 - 詳細設計處理在前兩個設計中被視為系統及其子系統的實現部分。它對模組及其實現更詳細。它定義每個模組的邏輯結構及其與其他模組通訊的介面。

模組化

模組化是一種將軟體系統劃分為多個離散且獨立的模組的技術,這些模組預計能夠獨立執行任務。這些模組可以作為整個軟體的基本構造。設計人員傾向於設計模組,以便可以單獨且獨立地執行和/或編譯它們。

模組化設計無意中遵循了“分而治之”的解決問題策略的規則,這是因為模組化軟體設計還有許多其他好處。

模組化的優點

  • 較小的元件更容易維護
  • 程式可以根據功能方面進行劃分
  • 可以在程式中引入所需的抽象級別
  • 具有高內聚性的元件可以再次重用
  • 可以實現併發執行
  • 從安全形度來看是理想的

併發性

過去,所有軟體都旨在順序執行。順序執行是指編碼指令將一個接一個地執行,這意味著任何給定時間只有一個程式部分被啟用。例如,如果軟體有多個模組,則在任何執行時間都只能找到一個模組處於活動狀態。

在軟體設計中,併發性是透過將軟體拆分為多個獨立的執行單元(如模組)並並行執行它們來實現的。換句話說,併發性為軟體提供了並行執行多個程式碼部分的能力。

程式設計師和設計人員有必要識別哪些模組可以進行並行執行。

示例

文字處理程式中的拼寫檢查功能是一個軟體模組,它與文字處理程式本身一起執行。

耦合和內聚

當軟體程式模組化時,其任務將根據某些特徵劃分為多個模組。眾所周知,模組是一組指令,為了完成某些任務而組合在一起。它們雖然被認為是單個實體,但可以相互引用以一起工作。有一些度量可以衡量模組設計及其相互作用的質量。這些度量稱為耦合和內聚。

內聚

內聚是一種度量,它定義了模組元素內部依賴性的程度。內聚性越高,程式設計越好。

共有七種型別的內聚,即:

  • 偶然內聚 - 這是未計劃的和隨機的內聚,可能是為了模組化的目的將程式分解成較小模組的結果。因為它未經計劃,所以可能會讓程式設計師感到困惑,通常不被接受。
  • 邏輯內聚 - 當邏輯分類的元素組合到一個模組中時,稱為邏輯內聚。
  • 時間內聚 - 當模組的元素被組織起來以便在相似的點進行處理時,稱為時間內聚。
  • 過程內聚 - 當模組的元素組合在一起,並且為了執行任務而順序執行時,稱為過程內聚。
  • 通訊內聚 - 當模組的元素組合在一起,並且順序執行並在相同的資料(資訊)上工作時,稱為通訊內聚。
  • 順序內聚 - 當模組的元素組合在一起是因為一個元素的輸出作為另一個元素的輸入,依此類推時,稱為順序內聚。
  • 功能內聚 - 這被認為是最高程度的內聚,並且非常期望。功能內聚中模組的元素組合在一起,因為它們都對單個明確定義的功能做出了貢獻。它也可以重用。

耦合

耦合是一種度量,它定義了程式模組之間相互依賴的級別。它說明了模組以什麼級別相互干擾和互動。耦合越低,程式越好。

共有五個級別的耦合,即:

  • 內容耦合 - 當一個模組可以直接訪問、修改或引用另一個模組的內容時,稱為內容級耦合。
  • 公共耦合 - 當多個模組具有對某些全域性資料的讀寫訪問許可權時,稱為公共或全域性耦合。
  • 控制耦合 - 如果一個模組決定另一個模組的功能或改變其執行流程,則這兩個模組稱為控制耦合。
  • 標記耦合 - 當多個模組共享公共資料結構並在其不同部分工作時,稱為標記耦合。
  • 資料耦合 - 資料耦合是指兩個模組透過傳遞資料(作為引數)來相互互動。如果一個模組傳遞資料結構作為引數,則接收模組應該使用其所有元件。

理想情況下,無耦合被認為是最好的。

設計驗證

軟體設計過程的輸出是設計文件、虛擬碼、詳細邏輯圖、流程圖以及所有功能或非功能需求的詳細描述。

下一個階段是軟體的實現,它取決於上述所有輸出。

因此,在進入下一階段之前,有必要驗證輸出。越早檢測到錯誤越好,否則可能直到產品測試時才能檢測到。如果設計階段的輸出是正式表示形式,則應使用其相關的驗證工具;否則,可以使用徹底的設計審查來進行驗證。

透過結構化驗證方法,審查人員可以檢測可能因忽略某些條件而導致的缺陷。良好的設計審查對於良好的軟體設計、準確性和質量至關重要。

廣告
© . All rights reserved.