美国伦理〈欲女春潮〉|美国伦理〈欲奴3〉|美国伦理巜交换做爰|宝贝腿开大点我添添你下边美国|美国色情巜春药2|美国A片巜禁忌5

鑒源實驗室

Jianyuan Lab

耦合之殤,軟件設(shè)計中的隱疾

發(fā)布時間:2025-04-03 作者:上海工業(yè)控制安全創(chuàng)新科技有限公司 點擊次數(shù):

01

引 言

數(shù)據(jù)耦合和控制耦合是復(fù)雜軟件設(shè)計中常見的一種情況。DO-178C要求高安全等級軟件( DAL A/ B /C) 的測試覆蓋分析,必須要確認(rèn)基于需求的測試執(zhí)行了代碼組件之間的數(shù)據(jù)耦合和控制耦合。如果控制耦合未被正確分析,可能會導(dǎo)致系統(tǒng)在某些情況下做出錯誤的決策。因此當(dāng)測試覆蓋率未滿足要求時,還要給出相關(guān)的解決方案。

02

定 義

從DO-178C中得到數(shù)據(jù)耦合與控制耦合的定義。

數(shù)據(jù)耦合:The dependence of a software component on data not exclusively under the control of that software component.某個軟件組件對該軟件組件控制下的非獨占數(shù)據(jù)的依賴性。

控制耦合:The manner or degree by which one software component influences the execution of another software component. 某個軟件組件對其它軟件組件的執(zhí)行所產(chǎn)生的影響方式或程度。

其中component的定義如下:

Component:A self contained part,combination of parts,subassemblies,or units that perform a distinct function of a system. 系統(tǒng)中能執(zhí)行明確功能的獨立部件、部件的組合、子組件或單元。

一般來說,Component可被解釋為:過程、函數(shù)、子程序、模塊和其他類似的編程構(gòu)造。

具體目標(biāo)在DO-178及其補充文件的目標(biāo)矩陣表A-7中有詳細(xì)的條目說明,完整表格參見附錄A。

6.4.4.d:Test coverage of software structure, both data coupling and control coupling, is achieved. 軟件結(jié)構(gòu)測試覆蓋的實現(xiàn)應(yīng)該包含數(shù)據(jù)耦合和控制耦合。

在6.4.4.2.c中有著如下進(jìn)一步的定義。

6.4.4.2.c:Analysis to confirm that the requirements-based testing has exercised the data and control coupling between code components. 分析以確認(rèn)基于需求的測試已經(jīng)實現(xiàn)了代碼組件之間的數(shù)據(jù)和控制耦合。

DO-178B和DO-178C標(biāo)準(zhǔn)中的示例主要說明了:代碼組件之間的數(shù)據(jù)和控制耦合的結(jié)構(gòu)覆蓋率分析應(yīng)通過評估基于需求的測試結(jié)果來實現(xiàn)(見6.4.4.2.c)。但這些定義并沒有清晰地確定要進(jìn)行的實際檢查。在一般情況下,它們針對的是其他覆蓋技術(shù)無法檢測到的故障。在接下來的討論中,將詳細(xì)探討這些概念,以制定實現(xiàn)這些目標(biāo)的實用技術(shù)。但是能夠清晰得知的是,航空機載軟件是需要針對數(shù)據(jù)耦合與控制耦合進(jìn)行靜態(tài)的分析,以及基于需求的測試覆蓋。

03

實例解析

本章結(jié)合一些具體例子進(jìn)行控制耦合與數(shù)據(jù)定義的詳細(xì)說明。

3.1 控制耦合

例子1

以下具有三個文件的模型,每個文件中至少有一個對函數(shù)foo的調(diào)用。然而,其中兩個文件包含函數(shù)foo的定義。這兩個定義可以相同或可能相似(相同的接口)。

圖1 文件及其定義示意圖

鏈接器可以選擇解析對文件A中的函數(shù)定義的所有調(diào)用(情況1),也可以對文件A中對其包含的定義的調(diào)用、文件B中對其包含的定義的引用和文件C中的調(diào)用中的任何一個進(jìn)行解析(情況2)。這是一個控制耦合缺陷的例子,因為這導(dǎo)致了定義的模糊性。

例子2

第二個例子是參數(shù)的控制耦合。一個具有函數(shù)指針參數(shù)的函數(shù)foo,即可以通過foo的參數(shù)列表傳遞另一個函數(shù)的名稱(地址)。

圖2 例子2代碼展示圖

對于這段示例代碼來說,通過下方兩個用例可以實現(xiàn)代碼動態(tài)執(zhí)行的完全語句覆蓋。

圖3 例子2代碼全覆蓋用例圖

可能有兩個函數(shù)(func1與func2)在調(diào)用,而對于上述兩個數(shù)據(jù)集,每個只調(diào)用一個函數(shù),在用例1調(diào)用func1,在用例2調(diào)用func2。控制耦合要求在每個用例執(zhí)行所有潛在的調(diào)用。為了確保執(zhí)行所有控制流調(diào)用,基于需求的測試數(shù)據(jù)因此需要包括兩個額外的數(shù)據(jù)集。這個概念可以應(yīng)用于使用指向函數(shù)的指針的所有情況。如果通過指針解引用調(diào)用函數(shù),則必須執(zhí)行所有可以調(diào)用的潛在函數(shù)。同樣,在C++等面向?qū)ο蟪绦蛑?,所有可以在特定調(diào)用的虛函數(shù)都必須要有基于需求的測試數(shù)據(jù)執(zhí)行。

3.2 數(shù)據(jù)耦合

數(shù)據(jù)耦合完全取決于整個系統(tǒng)或子系統(tǒng)的控制流圖結(jié)構(gòu)。

例子1

如下圖所示為官方文檔給出的一個數(shù)據(jù)耦合的例子。

圖4 數(shù)據(jù)耦合示例圖

如上圖所示Calculate Air Speed和Display Air Speed兩個函數(shù)都是從同一個主程序調(diào)用的,并且共享一個全局變量“AirSpeed”。Calculate Air Speed計算變量“速度”的值,即設(shè)定操作,而功能Display Air Speed“速度”值輸出到顯示設(shè)備,即使用操作。代碼可能采用下圖所示的形式。

圖5 數(shù)據(jù)耦合代碼1展示圖

可以構(gòu)建一個執(zhí)行Display Air Speed的測試用例,然后構(gòu)建另一個執(zhí)行計算空速的測試實例。在這種情況下,控制耦合按要求進(jìn)行測試(即執(zhí)行的每個語句和執(zhí)行的每個分支/決策,在這種情況中沒有MC/DC要求),但呼叫的順序有缺陷,因為顯示空速沒有有效的顯示速度。同樣,如果一個測試用例調(diào)用Calculate Airspeed,而隨后沒有調(diào)用Display Airspeed,則很可能存在另一個缺陷。

這個例子表明,需要證明給定過程的所有輸入在調(diào)用時都有有效值,并且使用了分配給全局變量的所有值。在這種情況下,全局變量可以看做在使用過程中外部聲明和設(shè)置的變量。

例子2

如下所示,這個函數(shù)多次使用了變量x。

圖6 數(shù)據(jù)耦合代碼2展示圖

主函數(shù)同樣多次調(diào)用了foo函數(shù)。

圖7 數(shù)據(jù)耦合代碼3展示圖

運行main函數(shù),由于循環(huán)通過參數(shù)y調(diào)用foo可以讓foo中的每條語句都被執(zhí)行,此外還有每個分支/決策。然而使用參數(shù)z調(diào)用foo單個用例無法達(dá)到語句與分支/決策的全覆蓋,因此需要多個測試用例來保證在z的值改變的情況下,foo函數(shù)的語句會被全部覆蓋。根據(jù)上述的分析,主函數(shù)main與函數(shù)foo含有數(shù)據(jù)耦合,它們通過調(diào)用參數(shù)y與z,形參x而產(chǎn)生了耦合。 

04

耦合度啟示

在這個紛繁復(fù)雜的世界中,耦合度分析的核心思想——系統(tǒng)思維、關(guān)注隱藏依賴、預(yù)防優(yōu)于修復(fù)、優(yōu)化資源分配以及透明性和可追溯性——不僅適用于軟件開發(fā)和航空安全領(lǐng)域,還能為生產(chǎn)工作和生活帶來深刻的啟示。

1. 系統(tǒng)思維的重要性

耦合度分析強調(diào)從整體出發(fā),理解各部分之間的相互關(guān)系。在生產(chǎn)中,這意味著要關(guān)注生產(chǎn)流程的全局,而不僅僅是單個環(huán)節(jié)。例如,工廠中每個車間的工作并非孤立存在,它們通過物料流轉(zhuǎn)、信息傳遞等方式緊密相連。只有從系統(tǒng)層面優(yōu)化這些耦合關(guān)系,才能真正提升效率。

2. 關(guān)注隱藏的依賴關(guān)系

耦合度分析提醒我們關(guān)注那些不明顯但可能引發(fā)問題的隱藏依賴關(guān)系。在生產(chǎn)工作中,團隊成員之間可能因職責(zé)劃分不清而產(chǎn)生隱性依賴,例如某個部門的工作進(jìn)度可能依賴于另一個部門的數(shù)據(jù)輸出,但這種依賴并未明確說明。提前識別這些潛在問題,可以避免項目延誤。

3. 預(yù)防優(yōu)于修復(fù)

耦合度分析的核心是通過提前分析和測試,發(fā)現(xiàn)潛在問題,避免問題在后期放大。這種“預(yù)防優(yōu)于修復(fù)”的理念在生產(chǎn)中體現(xiàn)為定期設(shè)備維護和流程優(yōu)化,減少因設(shè)備故障或流程問題導(dǎo)致的生產(chǎn)中斷。

4. 優(yōu)化資源分配

耦合度分析可以幫助識別系統(tǒng)中的關(guān)鍵耦合點,從而優(yōu)化資源分配,提高系統(tǒng)整體性能。在生產(chǎn)中,通過分析各部門之間的耦合關(guān)系,可以合理分配人力、物力資源,避免資源浪費。例如,優(yōu)化供應(yīng)鏈管理可以減少庫存成本,同時提高響應(yīng)速度。

5. 透明性和可追溯性

耦合度分析要求對系統(tǒng)中的耦合關(guān)系進(jìn)行詳細(xì)記錄和分析,這種透明性和可追溯性有助于快速定位問題和優(yōu)化系統(tǒng)。在生產(chǎn)中,通過記錄生產(chǎn)流程中的各個環(huán)節(jié)及其耦合關(guān)系,可以快速追溯質(zhì)量問題的根源,從而采取有效的改進(jìn)措施。

05

耦合度應(yīng)用

隨著科技發(fā)展與技術(shù)創(chuàng)新,近年來軌交、汽車、航空航天等領(lǐng)域的發(fā)展非常迅猛,伴隨而來的是各類安全問題。以上領(lǐng)域涉及的安全關(guān)鍵軟件的質(zhì)量與效率都受到了高度重視。因此,高可信嵌入式軟件建模開發(fā)工具SmartRocket Modeler應(yīng)運而生,誕生自質(zhì)量,扎根于安全。通過模型語言的圖形化建模、模型靜態(tài)檢查、仿真與調(diào)試與C代碼生成等等功能為用戶提供一套基于模型的高安全性嵌入式軟件解決方案。在更進(jìn)一步的前提下逐漸替代相關(guān)國外軟件,為解決卡脖子難題做出貢獻(xiàn)。

圖8 SmartRocket Modeler主頁圖

在耦合度分析理論的基礎(chǔ)上,上??匕睸martRocket Modeler團隊,通過充分的調(diào)研與實踐,實現(xiàn)了該功能的具體落地。

工程師根據(jù)上層需求,通過可視化建模方法得到其設(shè)計模型,其設(shè)計模型能夠通過圖形化或者代碼字符串的方式進(jìn)行展示,如下圖所示為示例項目Roll Control的圖形化界面。

圖9 SmartRocket Modeler設(shè)計模型圖形化展示界面

Modeler使用同步數(shù)據(jù)流語言Lustre代碼進(jìn)行設(shè)計模型的一致性描述,Lustre是一種經(jīng)過嚴(yán)格形式化驗證的設(shè)計模型語言,它能夠充分描述機載軟件在固定時鐘下的運行情況,其示例 lustre 代碼如下所示。

圖10 RollControl飛機控制模塊Lustre代碼示意圖

Modeler通過針對設(shè)計模型的分析給出其控制耦合與數(shù)據(jù)耦合的結(jié)果,并通過圖形化與表格的多維度展示,為用戶確認(rèn)模型預(yù)期性提供便捷。

圖11 SmartRocket Modeler耦合度分析圖

Modeler通過耦合分析圖來展示方法或函數(shù)間的控制的耦合,如圖11所示。圖中的點與邊分別代表著函數(shù)與函數(shù)間的調(diào)用關(guān)系,正如第三章控制耦合的示例中從起點函數(shù)出發(fā),存在多個調(diào)用的關(guān)系,也存在不同函數(shù)共同調(diào)用統(tǒng)一函數(shù)的關(guān)系。通過圖的表現(xiàn)形式,生動展示了設(shè)計中的控制耦合關(guān)系。在其中,入度為零的點為全局變量和輸入變量,出度為零的點為輸出變量。該圖可以便于用戶快速定位搭建的模型與原始需求是否相一致。

圖12 SmartRocket Modeler全局變量使用情況展示圖

圖12中的信息將函數(shù)調(diào)用關(guān)系以表格的形式進(jìn)行了展示,該表中另外對實際調(diào)用過程中傳遞的參數(shù)進(jìn)行映射,該表不僅展示了調(diào)用關(guān)系(控制耦合),更進(jìn)一步包含了調(diào)用的參數(shù)及其類型(數(shù)據(jù)耦合),便于用戶根據(jù)表格和需求進(jìn)行比對。

圖 13 SmartRocket Modeler全局變量使用情況展示圖

此外Modeler還支持對全局變量的使用情況進(jìn)行統(tǒng)計與展示,全局常量與傳感器等變量在模塊間進(jìn)行著數(shù)據(jù)傳輸,如下圖所示。此表目的用于方便用戶映射需求的數(shù)據(jù)字典對應(yīng)的全局變量使用情況是否符合用戶預(yù)期。

Modeler 工具通過對系統(tǒng)中各個組件間的依賴關(guān)系進(jìn)行深度分析,實現(xiàn)了對系統(tǒng)耦合度的全景式展示。具體而言,它會分析變量之間的相互依賴、函數(shù)調(diào)用鏈的深層次聯(lián)系,以及函數(shù)對全局?jǐn)?shù)據(jù)的依賴情況,并以直觀的圖形和層次結(jié)構(gòu)展現(xiàn)出來。通過這種方式,設(shè)計者不僅可以清晰地看到哪些模塊之間存在緊密耦合,還能識別出那些可能導(dǎo)致后期維護和擴展困難的高耦合區(qū)域。Modeler 工具的多層次、分組顯示依賴關(guān)系,允許用戶根據(jù)實際需求進(jìn)行過濾和聚類,從而精準(zhǔn)定位那些與需求設(shè)計偏離的部分。在模型設(shè)計的早期階段,就能通過實時反饋機制發(fā)現(xiàn)潛在風(fēng)險,及時調(diào)整設(shè)計策略,確保整個系統(tǒng)架構(gòu)與業(yè)務(wù)需求保持高度一致。這樣不僅提升了系統(tǒng)設(shè)計的效率,也為后續(xù)的系統(tǒng)優(yōu)化和升級奠定了堅實基礎(chǔ)。


參考文獻(xiàn)

[1] Johnson L A. Software Considerations in Airborne Systems and Equipment Certification[Z]. Document RTCA/DO 178B,1998.

[2] RTCA.DO-248C-2011,Supporting Information for DO 178C and DO-278A[S]. USA: RTCA,2011.

[3] CAST.CAST-19-2004,Clarification of Structural Coverage Analyses of Data Coupling and Control Coupling[S]. USA: CAST,2004.

[4] 孔德岐,鐘珊 .淺談DO-178C中數(shù)據(jù)耦合與控制耦合目標(biāo)的實現(xiàn)[J] .航空計算技術(shù),2018,48(5):57-60.



閱讀原文

河间市| 广西| 康保县| 平乡县| 台南县| 游戏| 循化| 深州市| 会昌县| 郯城县| 太仆寺旗| 河间市| 罗田县| 奇台县| 光泽县| 昌吉市| 淮阳县| 泸溪县| 龙陵县| 大港区| 郎溪县| 枞阳县| 阿拉尔市| 台东县| 大厂| 醴陵市| 武宣县| 兰考县| 新昌县| 石狮市| 辽宁省| 南木林县| 麻栗坡县| 芦山县| 新蔡县| 泊头市| 田东县| 丹凤县| 瑞安市| 南部县| 沿河|