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