91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

Wildesbeast ? 來(lái)源:21IC ? 作者:21IC ? 2021-01-09 11:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

代碼覆蓋率是衡量軟件測(cè)試完成情況的指標(biāo),通常基于測(cè)試過(guò)程中已檢查的程序源代碼比例 計(jì)算得出。代碼覆蓋率可以有效避免包含未測(cè)試代碼的程序被發(fā)布。

代碼覆蓋率能不能提高軟件的可靠性?答案是肯定的,代碼的覆蓋率分析是保證軟件質(zhì)量最簡(jiǎn) 便易行的方法。

代碼覆蓋率等級(jí)

代碼覆蓋率可以通過(guò)多種方法測(cè)量。最常用的是測(cè)量以下一個(gè)或多個(gè)指標(biāo):語(yǔ)句覆蓋率,分支 覆蓋率,修訂的條件/判定覆蓋率(MC/DC)。以下章節(jié)中將逐一詳解這些代碼覆蓋率。

語(yǔ)句覆蓋率

語(yǔ)句覆蓋率用來(lái)度量被測(cè)代碼中的可執(zhí)行語(yǔ)句是否被執(zhí)行到,它并不考慮循環(huán)或者條件語(yǔ)句, 只針對(duì)語(yǔ)句度量可執(zhí)行代碼。應(yīng)當(dāng)特別注意的是:“語(yǔ)句”并不等同于代碼行。

一般情況下,對(duì)于 C,C++,JavaAda,分號(hào)代表語(yǔ)句結(jié)束。在某些情況下,一條語(yǔ)句會(huì)跨越多 行代碼。語(yǔ)句覆蓋率可以有效度量可執(zhí)行代碼是否被執(zhí)行,但同時(shí)也有一定的局限性。

語(yǔ)句覆蓋率的局限

考慮如下圖1的代碼段:

int* p = NULL;

if (condition)

p = &variable;

*p = 123;

圖 1 – 語(yǔ)句覆蓋局限代碼示例

如果“condition”為true,那么就有可能達(dá)到100%的語(yǔ)句覆蓋,然而這個(gè)測(cè)試用例忽略了另 一種情況:如果“condition”為假,程序?qū)⒁每罩羔?,因此,雖然語(yǔ)句覆蓋率是一個(gè)很好 的度量指標(biāo),它仍舊是入門級(jí)的代碼覆蓋率。理想情況下,即使“condition”為false,測(cè)試 用例也應(yīng)當(dāng)被計(jì)算。

分支覆蓋率

分支覆蓋率用來(lái)度量程序中所有的判定和分支以及相應(yīng)的輸出是否都被測(cè)試執(zhí)行到,例如 “if”語(yǔ)句必須將“true”和“false”都考慮到以覆蓋所有的輸出。如果只有一個(gè)路徑被執(zhí)行,那么覆蓋率將被標(biāo)記為部分執(zhí)行。

和語(yǔ)句覆蓋率類似,分支覆蓋浪費(fèi)也有一些需要注意的細(xì)節(jié),尤其在針對(duì)“惰性求值”的編程語(yǔ)言時(shí),惰性求值是將代碼的求值操作延遲到需要結(jié)果值時(shí)再進(jìn)行的一項(xiàng)技術(shù)。

分支覆蓋率的局限

典型的情況是當(dāng)有復(fù)雜的布爾表達(dá)式的“惰性求值”出現(xiàn)時(shí),如下圖2的代碼片段:

int* p = NULL;

if (condition1 && (condition2 || function1(*p)))

statement1;

else

圖 2 – 分支覆蓋率局限代碼示例

考慮“condition1”為假的情況,惰性求值將不會(huì)度量“condition2”或,此種情況同樣會(huì)導(dǎo)致 代碼“if (condition1 && (condition2 || function1(*p)))”的分支覆蓋率計(jì)算錯(cuò)誤。

繼續(xù)考慮“condition1”和“condition2”都為真的情況。惰性求值將再次導(dǎo)致“function1(*p)” 不會(huì)被度量,也同樣會(huì)導(dǎo)致代碼“if (condition1 && (condition2 || function1(*p)))”的分支覆蓋率 計(jì)算錯(cuò)誤。在此種情況下,有可能出現(xiàn)分支覆蓋率為100%但軟件中仍有潛在缺陷的情況。

修訂條件/判定覆蓋率(MC/DC)

MC/DC是一種特殊的分支覆蓋率,它不但會(huì)使用分支覆蓋率報(bào)告復(fù)雜條件下的true和false輸出,同時(shí)也會(huì)報(bào)告復(fù)雜條件下的全部分支條件輸出。

MC/DC最初由波音公司創(chuàng)建,用于航空軟件中DO-178B的A級(jí)認(rèn)證。通過(guò)對(duì)所有的子條件輸出分支的獨(dú)立證明,有效解決了惰性求值帶來(lái)的問(wèn)題。

繼續(xù)討論代碼示例2,我們需要在“condition2”和“function1(*p)”固定的條件下驗(yàn)證“condition1” 的“true”和“false”判定分支,之后繼續(xù)固定“condition1”和“function1(*p)”驗(yàn)證“condition2” 的判定分支。

同樣的,讓我們?cè)诠潭ā癱ondition1”和“condition2”的條件下討論 “function1(*p)”。在其他分支條件固定的情況下驗(yàn)證某個(gè)分支條件的“true”和“false”值稱作“MC/DC對(duì)”。MC/DC對(duì)一般使用MC/DC真值表描述。表1就是一個(gè)MC/DC真值表示例。

在軟件開發(fā)的不同階段獲取覆蓋率

軟件測(cè)試有很多種類,本文將其簡(jiǎn)要的分為三類:

》 系統(tǒng)/函數(shù)測(cè)試: 測(cè)試集成后的整個(gè)應(yīng)用

》 集成測(cè)試::測(cè)試集成的子系統(tǒng)

》 單元測(cè)試:測(cè)試一個(gè)或多個(gè)文件或類

每個(gè)軟件項(xiàng)目在系統(tǒng)測(cè)試的過(guò)程中都會(huì)模擬最終用戶的操作對(duì)源代碼做一些系統(tǒng)測(cè)試。導(dǎo)致軟件發(fā)布后仍舊存在缺陷最重要的一個(gè)原因通常是程序在運(yùn)行過(guò)程中遇到了非預(yù)期的,即沒(méi)有測(cè)試的輸入組合。

很多軟件項(xiàng)目并不是沒(méi)有做集成測(cè)試或者單元測(cè)試。只是在完成集成測(cè)試或單元測(cè)試后,開發(fā)團(tuán)隊(duì)可能苦于為隔離程序中的單個(gè)或多個(gè)文必須所需的大量測(cè)試代碼量。

對(duì)于最嚴(yán)格的單元測(cè)試和集成測(cè)試來(lái)說(shuō),最終生成的測(cè)試代碼量比待測(cè)代碼量還要龐大是很經(jīng)常出現(xiàn)的情況。因此,這兩種級(jí)別的測(cè)試普遍適用于關(guān)鍵和高安全領(lǐng)域,例如:航空航天、醫(yī)療、交通運(yùn)輸、工業(yè)過(guò)程控制、高速汽車等。此類軟件中包含大量的嵌入式應(yīng)用軟件。

關(guān)鍵領(lǐng)域的結(jié)構(gòu)化測(cè)試流程一般會(huì)將需求的級(jí)別高低作為重點(diǎn),代碼覆蓋率因而會(huì)在這種“基于需求”的測(cè)試中進(jìn)行分析。在許多項(xiàng)目中,高等級(jí)的需求最先被測(cè)試。此時(shí)代碼覆蓋率可以被用來(lái)檢測(cè)和報(bào)告所達(dá)到的覆蓋比例。

然而不幸的是,在系統(tǒng)測(cè)試和功能測(cè)試階段想要達(dá)到100%的代碼覆蓋率幾乎是不可能的。通常情況下系統(tǒng)測(cè)試和功能測(cè)試只能達(dá)到60%-70%的代碼覆蓋率,剩余30%-40%的代碼覆蓋率需要在單元測(cè)試和集成測(cè)試階段才能夠完成。

單元測(cè)試使用包含驅(qū)動(dòng)和樁的測(cè)試代碼隔離系統(tǒng)中的特定函數(shù),同時(shí)使用測(cè)試用例模擬這些函數(shù)的執(zhí)行。這些所謂的“低等級(jí)測(cè)試需求” 對(duì)被測(cè)試代碼提供了更高的控制,可以提高先前執(zhí)行的系統(tǒng)測(cè)試覆蓋率(甚至能達(dá)到100%)。因此,在不同的測(cè)試之間共享覆蓋率數(shù)據(jù)是非常有必要的。

嵌入式環(huán)境中獲取覆蓋率帶來(lái)的挑戰(zhàn)

常言道“有得必有失”,在嵌入式環(huán)境獲取代碼覆蓋率的問(wèn)題上,要付出的代價(jià)是對(duì)待測(cè)代碼額外的插樁工作。

插樁是將額外的代碼添加到程序中,從而實(shí)現(xiàn)測(cè)試過(guò)程中的覆蓋率收集和分析操作。

由于插樁的相關(guān)操作將導(dǎo)致程序源代碼增多,進(jìn)而延長(zhǎng)程序的執(zhí)行時(shí)間,因而需要預(yù)測(cè)插樁后的源代碼的覆蓋范圍預(yù)測(cè),尤其當(dāng)測(cè)試實(shí)時(shí)嵌入式系統(tǒng)環(huán)境時(shí),此項(xiàng)工作就更為重要。

事實(shí)上,要精準(zhǔn)的預(yù)測(cè)程序文件插樁的影響幾乎是不可能的。沒(méi)有算法支持(也不可能有)。 每個(gè)系統(tǒng)都包含很多的變量,具有獨(dú)立唯一的復(fù)雜性。當(dāng)然,對(duì)于典型的示例系統(tǒng)來(lái)說(shuō),獲取一組準(zhǔn)確的估計(jì)還是可能實(shí)現(xiàn)的。

在共享環(huán)境中獲取覆蓋率數(shù)據(jù)

在嵌入式環(huán)境下管理代碼覆蓋率的主要問(wèn)題在于如何配置內(nèi)存以容納額外的插樁代碼。

VectorCAST針對(duì)大量示例代碼評(píng)估后發(fā)現(xiàn)添加了上文中提出的各種覆蓋率額外配置之后,源代碼量增長(zhǎng)量普遍達(dá)到了10%。對(duì)于絕大多數(shù)的32位目標(biāo)板,這并不是一個(gè)很大的問(wèn)題,但對(duì)于存儲(chǔ)容量有限的8位或者16位目標(biāo)板來(lái)說(shuō),幾乎可以肯定這會(huì)是一個(gè)問(wèn)題。

為了降低可執(zhí)行文件的大小,各種各樣的代碼插樁技術(shù)被發(fā)明出來(lái),針對(duì)不同大小的存儲(chǔ)區(qū)域有不同的數(shù)據(jù)采集技術(shù)。植入存儲(chǔ)器內(nèi)部的收集系統(tǒng)可以用于監(jiān)測(cè)被檢測(cè)到的代碼。這是插樁技術(shù)中保證使用最少RAM的關(guān)鍵技術(shù)。

聲明:本文內(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)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5198

    文章

    20444

    瀏覽量

    333993
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3001

    瀏覽量

    116422
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2123

    瀏覽量

    77110
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

    度還是從功能安全角度。 對(duì)于安全可靠的嵌入式設(shè)備,測(cè)試是質(zhì)量保證不可或缺的一部分。 安全關(guān)鍵型軟件開發(fā)標(biāo)準(zhǔn)對(duì)測(cè)試方法和測(cè)試覆蓋率設(shè)定了精確要求,這并非沒(méi)有道理。 通常,應(yīng)用程序越關(guān)鍵,對(duì)代碼
    發(fā)表于 07-14 14:50 ?1771次閱讀
    測(cè)量<b class='flag-5'>嵌入式</b>軟件的<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>

    怎么用Vivado做覆蓋率分析

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

    C語(yǔ)言單元測(cè)試在嵌入式軟件開發(fā)中的作用及專業(yè)工具的應(yīng)用

    功能包括: 測(cè)試通過(guò)/失敗統(tǒng)計(jì) 代碼覆蓋率可視化 執(zhí)行時(shí)間分析 缺陷跟蹤和報(bào)告生成 winAMS的圖形化界面可以直觀展示測(cè)試結(jié)果和覆蓋率數(shù)據(jù)。 七、總結(jié)與展望 C語(yǔ)言單元測(cè)試在
    發(fā)表于 12-18 11:46

    嵌入式仿真平臺(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)

    (Sample)覆蓋數(shù)據(jù),然后進(jìn)行統(tǒng)計(jì)數(shù)據(jù)的合并(Merge),最后做覆蓋率分析(Analysis)。這里提到的功能和應(yīng)用場(chǎng)景,在不同層級(jí)的驗(yàn)證中(模塊驗(yàn)證/子系統(tǒng)驗(yàn)證/系統(tǒng)驗(yàn)證)有不
    發(fā)表于 09-14 11:57

    Verilog代碼覆蓋率檢查

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

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

    )是軟件測(cè)試中的一種度量,描述程式中源代碼被測(cè)試的比例和程度,所得比例稱為代碼覆蓋率。 ? 在進(jìn)行代碼測(cè)試時(shí),常常使用
    的頭像 發(fā)表于 01-06 15:06 ?3896次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b><b class='flag-5'>統(tǒng)計(jì)</b><b class='flag-5'>方法</b>和<b class='flag-5'>經(jīng)驗(yàn)</b>

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

    )是軟件測(cè)試中的一種度量,描述程式中源代碼被測(cè)試的比例和程度,所得比例稱為代碼覆蓋率。 在進(jìn)行代碼測(cè)試時(shí),常常使用
    的頭像 發(fā)表于 03-29 11:58 ?2773次閱讀
    <b class='flag-5'>統(tǒng)計(jì)</b><b class='flag-5'>嵌入式</b><b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的<b class='flag-5'>方法</b>和<b class='flag-5'>經(jīng)驗(yàn)</b>

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

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

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

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

    如何使用覆蓋率指標(biāo)進(jìn)行更有效的嵌入式軟件測(cè)試

      聲明、決策或 MC/DC 覆蓋率等指標(biāo)并不能保證軟件沒(méi)有缺陷。如前所述,真正詳盡的測(cè)試可能是不可能的,或者至少是不可行的。然而,結(jié)構(gòu)覆蓋率度量可以更好地了解代碼的可靠性和對(duì)測(cè)試的更大信心。
    的頭像 發(fā)表于 06-29 10:20 ?2266次閱讀

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

    測(cè)量代碼覆蓋率對(duì)于嵌入式系統(tǒng)來(lái)說(shuō)越來(lái)越重要,但需要一些經(jīng)驗(yàn)。這是因?yàn)橛幸恍┱系K需要克服,尤其是小目標(biāo)。但是,使用正確的方法和合適的工具,無(wú)需
    的頭像 發(fā)表于 07-14 15:58 ?3738次閱讀
    更好地測(cè)量<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的 9 個(gè)技巧

    代碼覆蓋率工具的重要性

    測(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 ?2155次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>工具的重要性

    測(cè)量嵌入式系統(tǒng)中的代碼覆蓋率

    許多 軟件 開發(fā) 人員 測(cè)量 嵌入式 系統(tǒng) 中 的 代碼 覆蓋 使用 的 測(cè)試系統(tǒng) 與 其 原始 設(shè)計(jì) 非常 不同。工程師知道這是一種糟糕的方法
    的頭像 發(fā)表于 04-23 10:50 ?1734次閱讀

    代碼覆蓋率記錄

    為確保具體的產(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>記錄