自軟件工程學科誕生以來,模塊化一直是永恒的口號之一。這種結構化設計和功能分解方法將軟件分解為具有明確接口的明確定義的功能單元或模塊。這種方法的成熟價值是高質量的軟件。但是,當您采用模塊化時,軟件測試必須檢查模塊組合在一起并交互的方式。這種測試被稱為“數據和控制耦合”。
今天,讓我們來了解一下如何使用軟件系統中的控制和數據耦合來評估系統的模塊化,并提供寶貴的好處,包括:
? 提高軟件可測試性? 提高軟件可維護性
? 減少變更
的影響? 簡化軟件重用
術語“內聚”描述了模塊化軟件組件的屬性。具有明確定義的接口并獨立于其他模塊運行的模塊被認為具有高水平的內聚力。例如,命令行 MD5 加密哈希生成器是演示高級別內聚的軟件組件的示例。輸入是任何描述的數據對象(例如文件),輸出是base-64哈希表示。由于哈希生成器采用單個輸入,提供單個輸出并且沒有外部依賴項,因此它被認為表現出高水平的內聚力。
光譜的另一端是飛行控制系統。這些高度依賴于飛機的當前狀態(例如,飛機是否在地面上)和傳入的飛行數據流(例如,空速、高度、姿態等),因此具有低水平的內聚力。
凝聚力會顯著影響任何試圖從一個系統中提取軟件模塊以便在另一個系統中重用的人,他們會很樂意告訴你關于阻礙的隱藏依賴關系的戰爭故事。問題就在這里:如果模塊不是真正內聚的,那么怎么可能在它的所有依賴項的上下文中測試每個模塊呢?為此,您必須了解軟件模塊之間存在的耦合。這種耦合提供了一種衡量軟件內聚力的方法,還提供了可用于評估和提高軟件質量的指標。
耦合的概念在1980年Meiler Page-Jones的《結構化系統設計實用指南》一書中定義為“一個模塊對另一個模塊的依賴程度;具體來說,衡量一個模塊中的缺陷在另一個模塊中顯示為缺陷的可能性,或者一個模塊中的更改需要更改另一個模塊的可能性。
他確定了耦合的兩種基本風格,并將它們定義為:
? 控制耦合 - 一種耦合類型,其中一個模塊將信息傳達給另一個模塊,以明確影響后者
? 數據耦合 - 一種耦合形式,其中一個模塊將信息傳達給另一個模塊
讓我們看一個例子來闡明兩者之間的差異。
飛機發動機控制系統消耗高度和空速等空氣數據信息,但是當飛機在地面和空中時,使用不同的控制算法。選擇使用哪種算法由起落架系統的“車輪重量”信號決定,該信號指示飛機是否在地面上。在此示例中,發動機控制系統對高度和空速數據流的依賴性表明與提供它們的系統存在很強的數據耦合。同樣,“車輪上的重量”信號表示發動機控制系統和起落架系統之間的強控制耦合。
耦合指標可用于在整個軟件設計和驗證過程中提高軟件質量。目的是表明軟件模塊僅以軟件設計預期的方式相互影響,確保沒有計劃外、異常或錯誤的行為。在設計過程中記錄數據和控制耦合提供了一組在軟件集成過程中進行測試的要求。同樣,確保在軟件測試期間執行模塊之間的數據和控制耦合,表明軟件的集成和架構得到了充分驗證。
許多準則,例如定義民用機載系統創建適航法規的DO-178C標準,要求對安全關鍵軟件進行控制和數據耦合評估,以確保滿足這些設計,集成和測試目標。同樣,英國國防部標準 00-55“國防設備中安全相關軟件的要求”要求使用控制和數據耦合等指標來評估軟件模塊化。
測量控制和數據耦合是通過控制和數據流分析的組合來實現的。控制流分析在調用層次結構的程序和單個過程上執行。
數據流分析通過源代碼跟蹤變量,并報告任何異常使用。此檢查在過程級別和作為系統范圍分析的一部分執行。這是一種非常強大的技術,不僅可以為數據耦合評估提供基礎,還可以檢測其他嚴重問題,例如在初始化之前使用的變量或在其邊界之外訪問的數組。
盡管從命名中很容易假設控制流分析提供了控制耦合和數據耦合的數據流分析的可見性,但事實并非如此。控制流和數據流分析對于評估控制和數據耦合都是必要的。
無論正在開發的軟件是否對安全至關重要,通過控制和數據耦合來測量軟件模塊的內聚力都有助于提高軟件可測試性和可維護性,同時減少變更的影響,簡化軟件重用。
審核編輯:郭婷
-
接口
+關注
關注
33文章
8504瀏覽量
150843 -
數據
+關注
關注
8文章
6898瀏覽量
88838
發布評論請先 登錄
相關推薦
評論