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