0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何獲得100%的安全關(guān)鍵系統(tǒng)結(jié)構(gòu)代碼覆蓋率

麥克泰技術(shù) ? 來(lái)源:麥克泰技術(shù) ? 2022-12-26 11:12 ? 次閱讀

前言

許多軟件開發(fā)和驗(yàn)證工程師其實(shí)并不能真正理解獲得結(jié)構(gòu)覆蓋率的重要性。大部分人這么做只是因?yàn)檫@是他們行業(yè)的功能標(biāo)準(zhǔn)所要求的,而并沒(méi)有真正認(rèn)真對(duì)待它。

ADAS這樣的安全關(guān)鍵系統(tǒng)能夠?qū)崿F(xiàn)在沒(méi)有司機(jī)的情況下運(yùn)送乘客、能夠讓自動(dòng)駕駛飛行器能夠在天空中飛行、通過(guò)醫(yī)療設(shè)備維持患者的生命。人們的生命依賴于這些系統(tǒng)。因此,獲得結(jié)構(gòu)化代碼覆蓋率是至關(guān)重要的。接下來(lái)讓我們來(lái)看看什么是結(jié)構(gòu)覆蓋率,以及它重要的更多原因。

什么是結(jié)構(gòu)覆蓋率

簡(jiǎn)而言之,結(jié)構(gòu)覆蓋率是為了確定系統(tǒng)是否經(jīng)過(guò)充分測(cè)試而對(duì)已執(zhí)行和記錄的代碼的標(biāo)識(shí)。安全關(guān)鍵系統(tǒng)覆蓋率的徹底性取決于安全完整性級(jí)別(SIL)、汽車工業(yè)中的ASIL和航空電子設(shè)備中常用的開發(fā)保證級(jí)別(DAL)。

所謂徹底性,指的是代碼中的結(jié)構(gòu)元素。在嵌入式系統(tǒng)中,這些通常被細(xì)分為代碼語(yǔ)句、分支、修改的條件決策,此外還可以深入到更細(xì)的粒度級(jí)別,如目標(biāo)代碼或匯編語(yǔ)言。

語(yǔ)句及分支覆蓋率

語(yǔ)句覆蓋是最簡(jiǎn)單的工作,它表示程序中的每一行代碼。然而,代碼語(yǔ)句可能具有不同程度的復(fù)雜性。例如,分支語(yǔ)句在代碼中表示if then else條件,像case或switch這樣的語(yǔ)句被解釋為分支。但是,如果您要獲得分支的覆蓋率,這意味著必須同時(shí)覆蓋真實(shí)和錯(cuò)誤決策路徑的執(zhí)行。

99b5f14c-82c9-11ed-bfe3-dac502259ad0.png

如果需要考慮更高的安全級(jí)別,則可能需要修改條件/決策覆蓋率(MC/DC)。分支的復(fù)雜性可能會(huì)逐步遞增,其中一個(gè)決策中有多個(gè)條件,而每個(gè)條件都必須獨(dú)立測(cè)試。

對(duì)于覆蓋率標(biāo)準(zhǔn),這意味著決策中的每個(gè)條件都已被證明能夠獨(dú)立地影響該決策的結(jié)果。真值表可用于幫助進(jìn)行分析,如下圖所示。

此外,程序中決策的每個(gè)條件都至少采用了一次所有可能的結(jié)果,程序中的每個(gè)決策至少一次采用了所有可能的結(jié)果。

在下面包含4個(gè)條件語(yǔ)句的示例中,有16個(gè)可能的測(cè)試用例。在本例中,MC/DC只需要5個(gè)。取條件的數(shù)量并添加1。

公式:(C + 1)

99cc888a-82c9-11ed-bfe3-dac502259ad0.jpg

目標(biāo)代碼覆蓋率

對(duì)于最嚴(yán)格的安全關(guān)鍵應(yīng)用,如航空電子設(shè)備,流程標(biāo)準(zhǔn)DO-178B/C Level A要求目標(biāo)代碼覆蓋率。這是由于編譯器或鏈接器會(huì)產(chǎn)生額外的代碼,這些代碼不能直接追蹤到源代碼語(yǔ)句。因此,必須進(jìn)行匯編級(jí)覆蓋。

想象一下執(zhí)行這項(xiàng)任務(wù)的嚴(yán)格程度和人工成本。幸運(yùn)的是,有Parasoft ASMTools這樣一個(gè)獲得目標(biāo)代碼覆蓋率的自動(dòng)化解決方案。

99df5960-82c9-11ed-bfe3-dac502259ad0.png

(Parasoft ASMTools匯編語(yǔ)言代碼覆蓋)

獲取代碼覆蓋率

代碼覆蓋率通常是通過(guò)對(duì)代碼進(jìn)行檢測(cè)來(lái)確定的。工具化是指在用戶代碼中添加額外的代碼,以便在執(zhí)行期間確定該語(yǔ)句、分支或MC/CD是否已被執(zhí)行。

根據(jù)嵌入式目標(biāo)或設(shè)備的不同,覆蓋數(shù)據(jù)可以存儲(chǔ)在文件系統(tǒng)中,也可以寫入內(nèi)存,也可以通過(guò)串口、TCP/IP端口、USB甚至JTAG等各種通信通道發(fā)送出去。

部分插樁

值得注意的是,代碼插樁會(huì)導(dǎo)致代碼膨脹,代碼大小的增加可能會(huì)影響將代碼加載到內(nèi)存受限的目標(biāo)硬件上進(jìn)行測(cè)試的能力。

其解決方法是對(duì)部分代碼進(jìn)行插樁。

運(yùn)行您的測(cè)試并獲取覆蓋率。

對(duì)另一部分代碼進(jìn)行插樁

再次執(zhí)行測(cè)試

獲取覆蓋率。

合并以往測(cè)試執(zhí)行的覆蓋率。

根據(jù)您的目標(biāo)限制,理想狀態(tài)是不會(huì)有太多的插樁分區(qū)要處理。不停重復(fù)運(yùn)行相同的測(cè)試會(huì)非常耗時(shí)及花費(fèi)成本。簡(jiǎn)單來(lái)說(shuō),插樁也許還會(huì)導(dǎo)致有關(guān)不良的時(shí)間和性能影響。

獲得嵌入式功能及信息安全關(guān)鍵系統(tǒng)的代碼覆蓋率

讓我們深入了解一下組織如何獲得嵌入式功能及信息安全關(guān)鍵系統(tǒng)獲得代碼覆蓋率。

對(duì)于代碼覆蓋率需求,比如強(qiáng)制的100%結(jié)構(gòu)、分支和MC/DC覆蓋率,有幾種測(cè)試方法可以用來(lái)滿足您的目標(biāo)。以下為最常見(jiàn)的方法:

系統(tǒng)測(cè)試

單元測(cè)試

手動(dòng)測(cè)試

結(jié)合這些不同實(shí)踐的覆蓋率指標(biāo)是典型的。

系統(tǒng)測(cè)試覆蓋率

通過(guò)系統(tǒng)測(cè)試獲得代碼覆蓋率是確定是否執(zhí)行了足夠測(cè)試的最佳方法。其方法是運(yùn)行所有的系統(tǒng)測(cè)試,然后檢查代碼的哪些部分沒(méi)有執(zhí)行。

未執(zhí)行的代碼意味著可能需要新的測(cè)試用例來(lái)執(zhí)行可能潛伏著缺陷的未觸及代碼,并有助于確認(rèn)以下問(wèn)題:我們是否做了足夠的測(cè)試?

單元測(cè)試覆蓋率

如前所述,單元測(cè)試可以作為系統(tǒng)測(cè)試的補(bǔ)充方法,以獲得100%的覆蓋率。通過(guò)單元測(cè)試獲得代碼覆蓋率是一種比較流行的方法,但是它并不能暴露您是否對(duì)系統(tǒng)進(jìn)行了足夠的測(cè)試,因?yàn)橹攸c(diǎn)是在單元級(jí)別(函數(shù)/過(guò)程)。

這里的目標(biāo)是創(chuàng)建一組單元測(cè)試用例,在所需的覆蓋率遵從性需求(語(yǔ)句、分支和MC/DC)下執(zhí)行整個(gè)單元,以便達(dá)到單個(gè)單元的100%覆蓋率。每個(gè)單元都要重復(fù)做,直到覆蓋整個(gè)代碼庫(kù)。然而,要充分利用單元測(cè)試,不能只關(guān)注獲得代碼覆蓋率。這通??梢酝ㄟ^(guò)行路徑測(cè)試用例來(lái)完成。

為了通過(guò)單元測(cè)試加速代碼覆蓋,Parasoft C/ C++test中存在可配置的和自動(dòng)化的測(cè)試用例生成功能??梢宰詣?dòng)生成測(cè)試用例來(lái)測(cè)試空指針、最小-中-最大值范圍、邊界值的使用等。這種自動(dòng)化可以讓您走得更遠(yuǎn),在幾分鐘內(nèi),您將獲得大量的代碼覆蓋率。

然而,與系統(tǒng)測(cè)試一樣,由于使用了防御性代碼或形式語(yǔ)言語(yǔ)義,獲得100%的代碼覆蓋率是難以實(shí)現(xiàn)的。在單元的粒度級(jí)別上,防御代碼可能以交換機(jī)中的默認(rèn)語(yǔ)句的形式出現(xiàn)。如果捕獲了交換機(jī)中所有可能的情況,則會(huì)導(dǎo)致無(wú)法訪問(wèn)默認(rèn)語(yǔ)句。在下面的例子中,返回0;將永遠(yuǎn)不會(huì)被執(zhí)行,因?yàn)閣hile(1)是無(wú)限的。

9a05d144-82c9-11ed-bfe3-dac502259ad0.png

用戶可以使用調(diào)試器對(duì)語(yǔ)句進(jìn)行標(biāo)記或標(biāo)記,修改調(diào)用堆棧并執(zhí)行返回0;聲明。視覺(jué)上見(jiàn)證執(zhí)行過(guò)程,至少記錄文件名、代碼行和代碼語(yǔ)句。

通過(guò)手動(dòng)/可視化檢查執(zhí)行的覆蓋率和報(bào)告可以用來(lái)補(bǔ)充通過(guò)單元測(cè)試捕獲的覆蓋率。兩個(gè)覆蓋率報(bào)告的添加可以用來(lái)證明100%的結(jié)構(gòu)代碼覆蓋率。

9a201ffe-82c9-11ed-bfe3-dac502259ad0.png

(Parasoft DTP儀表板代碼覆蓋報(bào)告示例)

總結(jié)

結(jié)構(gòu)代碼覆蓋率可以幫助回答以下問(wèn)題:我是否進(jìn)行了足夠的測(cè)試?

它也可能是您必須滿足的遵從性需求。獲得代碼覆蓋率的目標(biāo)是幫助我們確保代碼功能安全、信息安全和可靠性的一種附加手段。它顯示已執(zhí)行測(cè)試的證據(jù)。通過(guò)該測(cè)試我們能夠識(shí)別和修復(fù)缺陷。

您可能需要執(zhí)行不同級(jí)別的覆蓋(語(yǔ)句、分支、MC/DC等覆蓋率),其中所用標(biāo)準(zhǔn)是基于您的SIL、ASIL或DAL級(jí)別。幸運(yùn)的是,Parasoft提供了自動(dòng)化軟件測(cè)試解決方案和為了獲得100%的結(jié)構(gòu)代碼覆蓋率而所需的解決方法。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 匯編語(yǔ)言
    +關(guān)注

    關(guān)注

    14

    文章

    409

    瀏覽量

    35811
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68616
  • 結(jié)構(gòu)化
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    10311
  • 覆蓋率
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6866

原文標(biāo)題:如何獲得100%的安全關(guān)鍵系統(tǒng)結(jié)構(gòu)代碼覆蓋率

文章出處:【微信號(hào):麥克泰技術(shù),微信公眾號(hào):麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一文詳解Modelsim代碼覆蓋率功能使用

    作者:默宸? Modelsim代碼覆蓋率功能Code coverage,能報(bào)告出statement(語(yǔ)句)、branch(分支)、condition(條件)、expression(表達(dá)
    的頭像 發(fā)表于 12-09 11:45 ?5830次閱讀

    測(cè)量嵌入式軟件的代碼覆蓋率

    角度還是從功能安全角度。 對(duì)于安全可靠的嵌入式設(shè)備,測(cè)試是質(zhì)量保證不可或缺的一部分。 安全關(guān)鍵型軟件開發(fā)標(biāo)準(zhǔn)對(duì)測(cè)試方法和測(cè)試覆蓋率設(shè)定了精確
    發(fā)表于 07-14 14:50 ?1312次閱讀
    測(cè)量嵌入式軟件的<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>

    怎么用Vivado做覆蓋率分析

    在做仿真的時(shí)候往往會(huì)去做代碼覆蓋率和功能覆蓋率的分析,來(lái)保證仿真是做的比較充分完備的。
    的頭像 發(fā)表于 01-03 12:34 ?1720次閱讀
    怎么用Vivado做<b class='flag-5'>覆蓋率</b>分析

    嵌入式仿真平臺(tái)SkyEye的覆蓋率分析相關(guān)資料下載

    代碼執(zhí)娜行覆蓋情況的功能,來(lái)檢測(cè)代碼中未執(zhí)行覆蓋情況。在覆蓋率分析時(shí)需要分析嵌入式軟件的指令覆蓋率
    發(fā)表于 12-17 07:27

    重點(diǎn)厘清覆蓋率相關(guān)的概念以及在芯片開發(fā)流程中跟覆蓋率相關(guān)的事項(xiàng)

    (Code Coverage)。這兩項(xiàng)指標(biāo)需要配合起來(lái)看,比如100%的代碼覆蓋率以及低于100%的功能覆蓋率,可以看出驗(yàn)證不完整;
    發(fā)表于 09-14 11:57

    Verilog代碼覆蓋率檢查

    Verilog代碼覆蓋率檢查是檢查驗(yàn)證工作是否完全的重要方法,代碼覆蓋率(codecoverge)可以指示Verilog代碼描述的功能有多少
    發(fā)表于 04-29 12:35 ?8430次閱讀

    嵌入式代碼覆蓋率統(tǒng)計(jì)方法和經(jīng)驗(yàn)

    代碼覆蓋率是衡量軟件測(cè)試完成情況的指標(biāo),通?;跍y(cè)試過(guò)程中已檢查的程序源代碼比例計(jì)算得出。代碼覆蓋率可以有效避免包含未測(cè)試
    的頭像 發(fā)表于 01-06 15:06 ?3169次閱讀
    嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>統(tǒng)計(jì)方法和經(jīng)驗(yàn)

    嵌入式代碼覆蓋率如何進(jìn)行統(tǒng)計(jì)有哪些方法和經(jīng)驗(yàn)

    代碼覆蓋率是衡量軟件測(cè)試完成情況的指標(biāo),通?;跍y(cè)試過(guò)程中已檢查的程序源代碼比例 計(jì)算得出。代碼覆蓋率可以有效避免包含未測(cè)試
    的頭像 發(fā)表于 01-09 11:12 ?3082次閱讀
    嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>如何進(jìn)行統(tǒng)計(jì)有哪些方法和經(jīng)驗(yàn)

    統(tǒng)計(jì)嵌入式代碼覆蓋率的方法和經(jīng)驗(yàn)

    代碼覆蓋率是衡量軟件測(cè)試完成情況的指標(biāo),通?;跍y(cè)試過(guò)程中已檢查的程序源代碼比例計(jì)算得出。代碼覆蓋率可以有效避免包含未測(cè)試
    的頭像 發(fā)表于 03-29 11:58 ?1954次閱讀
    統(tǒng)計(jì)嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的方法和經(jīng)驗(yàn)

    怎么才能寫出高覆蓋率的Verilog代碼?

    設(shè)計(jì)的角度上來(lái)討論,如何寫出高覆蓋率的Verilog代碼。assign慎用按位運(yùn)算邏輯, | ^ ^~和三目運(yùn)算符,慎用。使用這樣的描述方式本身功能并沒(méi)有什么問(wèn)題,而且寫起來(lái)很爽,但是在很多
    的頭像 發(fā)表于 06-01 10:13 ?2631次閱讀

    覆蓋率的Verilog代碼的編寫技巧

    設(shè)計(jì)工程師需要關(guān)心的主要有行覆蓋率(Block),條件覆蓋率(Expression),翻轉(zhuǎn)覆蓋率(Toggle),狀態(tài)機(jī)覆蓋率。本文從ASIC設(shè)計(jì)的角度上來(lái)討論,如何寫出高
    的頭像 發(fā)表于 05-26 17:30 ?4286次閱讀

    更好地測(cè)量代碼覆蓋率的 9 個(gè)技巧

    。? 測(cè)量測(cè)試覆蓋率,也稱為代碼覆蓋率,對(duì)于嵌入式系統(tǒng)變得越來(lái)越重要。在許多情況下,這些設(shè)備對(duì)安全或業(yè)務(wù)至關(guān)重要。流程基于物聯(lián)網(wǎng)設(shè)備,患者依
    的頭像 發(fā)表于 07-14 15:58 ?3028次閱讀
    更好地測(cè)量<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的 9 個(gè)技巧

    100%代碼覆蓋率分析是否必不可少

    安全關(guān)鍵型軟件標(biāo)準(zhǔn)高度關(guān)注如何有效地測(cè)試軟件。他們指出,有效的軟件測(cè)試需要一種規(guī)范的方法,其中代碼覆蓋率用于提供有關(guān)迄今為止測(cè)試有效性的反饋。應(yīng)用于
    的頭像 發(fā)表于 11-01 10:46 ?978次閱讀

    代碼覆蓋率工具的重要性

    測(cè)試覆蓋率是軟件質(zhì)量的重要指標(biāo),也是軟件維護(hù)的重要組成部分。它通過(guò)提供不同承保項(xiàng)目的數(shù)據(jù)來(lái)幫助評(píng)估測(cè)試的有效性。這種洞察力允許通過(guò)為未經(jīng)測(cè)試的代碼定義新的測(cè)試用例來(lái)改進(jìn)測(cè)試,從而提高代碼質(zhì)量,最終增加
    的頭像 發(fā)表于 12-08 15:13 ?1470次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>工具的重要性

    代碼覆蓋率記錄

    為確保具體的產(chǎn)品(例如,醫(yī)療或航空電子市場(chǎng))質(zhì)量合格, 通常需要提供語(yǔ)句覆蓋與判定覆蓋認(rèn)證證明。對(duì)于各種嵌 入式系統(tǒng),規(guī)范要求高度優(yōu)化的代碼需要實(shí)時(shí)測(cè)試。禁止
    發(fā)表于 11-03 11:02 ?0次下載
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>記錄