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

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

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

代碼覆蓋檢測(cè)

嵌入式大雜燴 ? 2023-05-12 22:26 ? 次閱讀

1 代碼覆蓋率概述

覆蓋率(code coverage rate)是反映測(cè)試用例對(duì)被測(cè)軟件覆蓋程度的重要指標(biāo),也是衡量測(cè)試工作進(jìn)展情況的重要指標(biāo)。在代碼邏輯比較復(fù)雜的情況下,測(cè)試工作往往只能覆蓋到顯而易見的邏輯分支,而更多的深層次的邏輯分支則不容易被測(cè)試人員發(fā)現(xiàn)。為了保證測(cè)試的覆蓋率,有些開發(fā)人員會(huì)嘗試協(xié)助測(cè)試人員寫出所有的測(cè)試用例,這不僅會(huì)犧牲大量的寶貴的開發(fā)時(shí)間,同時(shí)也擁有一定的難度,最重要原因就是因?yàn)闇y(cè)試難以量化。而代碼覆蓋工具就是用來量化代碼測(cè)試的覆蓋率,讓測(cè)試人員可以直觀的發(fā)現(xiàn)那些沒有覆蓋到的代碼分支。

代碼覆蓋率是評(píng)價(jià)單元測(cè)試的效果的一個(gè)重要指標(biāo)。在實(shí)際的工作中,通常使用代碼覆蓋率來評(píng)價(jià)單元測(cè)試的效果。

代碼覆蓋率可以由語(yǔ)句覆蓋率和分析分析率兩個(gè)方面來進(jìn)行評(píng)估。

  • 語(yǔ)句覆蓋率是指在測(cè)試過程中實(shí)際得到執(zhí)行的語(yǔ)句數(shù)和代碼總語(yǔ)句數(shù)之間的比值。比如總共有 100 條語(yǔ)句,在測(cè)試過程中有 80 條語(yǔ)句得到執(zhí)行,那么語(yǔ)句覆蓋率就是 80%。
  • 分支覆蓋率是指在程序的控制流圖中實(shí)際得到執(zhí)行的分支數(shù)和總分支數(shù)據(jù)之間的比值。例比如總共有 100 個(gè)分支,在測(cè)試過程中實(shí)際有 80 個(gè)分支得到執(zhí)行,那么分支覆蓋率就是 80%。 可以簡(jiǎn)單的理解為控制流圖中每一條線性無關(guān)路徑即為一個(gè)分支。

2 Windows 下覆蓋率分析工具

OpenCppCoverage是Windows平臺(tái)下開源的C++代碼覆蓋率工具,使用簡(jiǎn)單,功能齊全而強(qiáng)大。

使用起來非常簡(jiǎn)單,它不需要在編譯時(shí)插樁,只需要有pdb文件,運(yùn)行時(shí)插樁,通過OpenCppCoverage啟動(dòng)進(jìn)程即可。功能也比較全,主要特點(diǎn)有:

  • 不需要重新編譯被測(cè)程序,只需要使用penCppCoverage運(yùn)行程序
  • 性能開銷比較小
  • 按模塊、代碼路徑過濾
  • 自動(dòng)生成html覆蓋率結(jié)果報(bào)告
  • 支持多個(gè)覆蓋率結(jié)果合并
  • 集成Jenkins

OpenCppCoverage 是與Visual Studio 配合使用的一個(gè)代碼覆蓋率分析工具,當(dāng)測(cè)試程序使用Visual Studio編譯時(shí),就可以使用這個(gè)工具進(jìn)行代碼覆蓋率分析,為了能夠進(jìn)行分析,應(yīng)用程序必須編譯為Debug版本。

源碼地址:https://github.com/OpenCppCoverage/OpenCppCoverage

OpenCppCoverage可以單獨(dú)下載安裝,也可以作為插件在VisualStudio的進(jìn)行安裝。這里以單獨(dú)下載安裝為例。

2.1 OpenCppCoverage單獨(dú)安裝與使用

2.1.1 下載安裝

OpenCppCoverage下載地址:https://github.com/OpenCppCoverage/OpenCppCoverage/releases

1683896507401mx2z6w8lvu

根據(jù)自身環(huán)境選擇x86或者x64版本進(jìn)行安裝。

安裝過程比較簡(jiǎn)單,只需要注意一點(diǎn):勾選將運(yùn)行目錄添加到環(huán)境變量中(默認(rèn)也是勾選)。

1683896508063b7a9mifmji

2.1.2 使用

OpenCppCoverage最簡(jiǎn)單的運(yùn)行格式為:

OpenCppCoverage.exe --sources MySourcePath* -- YourProgram.exe arg1 arg2

以如下的TestOpenCppCoverage工程為例,工程由utils.c、utils.h和main.c組成。

工程的代碼目錄為:

C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\TestOpenCppCoverage\\src

工程的輸出程序?yàn)椋?/p>

C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\Debug\\TestOpenCppCoverage.exe

運(yùn)行CMD,運(yùn)行命令:

OpenCppCoverage --sources C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\TestOpenCppCoverage\\src -- C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\Debug\\TestOpenCppCoverage.exe

1683896508403ngwots5qcm

輸出信息說明,生成的html文件(index.html)位于:

C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\CoverageReport-2022-12-09-11h47m10s。

1683896508807faddxf62ai

單擊C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\Debug\\TestOpenCppCoverage.exe即可對(duì)文件進(jìn)一步分析。

1683896509198dzk6adil4b

綠色部分表示已覆蓋到的部分,紅色部分表示未覆蓋的部分。

2.2 作為Visual Studio插件

2.2.1 插件安裝

打開VisualStudio --> 工具 --> 擴(kuò)展和更新 --> 聯(lián)機(jī) --> 右上角輸入OpenCppCoverage,在下面的結(jié)果會(huì)出現(xiàn)“OpenCppCoverage Plugin”點(diǎn)擊安裝即可(安裝中需要將VisualStudio重啟)。

1683896509563b31tru3jws

2.2.2 使用

程序?qū)懞?,編譯執(zhí)行之后,點(diǎn)擊“工具 --> Run OpenCppCoverage”,程序運(yùn)行。

1683896509866syvc1f67oj

將命令行窗口關(guān)掉,則代碼會(huì)出現(xiàn)紅色或者綠色的陰影,下面會(huì)出現(xiàn)Coverage的報(bào)告,如下圖。

168389651018419dwkszx7f

3 Linux下覆蓋率分析工具

3.1 Lcov簡(jiǎn)介

gcov是一個(gè)測(cè)試代碼覆蓋率的程序,正確地使用它搭配 gcc 可以分析、幫助你將代碼寫得更高效。幫助你優(yōu)化程序。類似于一個(gè)profiling tool,使用 gcov 或者 gprof,可以收集到一些基礎(chǔ)的性能統(tǒng)計(jì)數(shù)據(jù)。比如:

  • 每一行代碼執(zhí)行的頻度
  • 每個(gè)代碼文件中實(shí)際被執(zhí)行到的行數(shù)
  • 每一個(gè)代碼塊執(zhí)行使用的時(shí)間

gcov創(chuàng)建一個(gè)logfile叫做 源文件名稱.gcxx (這里的源文件名稱指的是.c或者.cc文件的文件名),表示的是這個(gè) 源文件.c 中每一行所被執(zhí)行的次數(shù)。這些文件可以配合gprof使用。

gcov要工作只能用gcc編譯這些代碼。和其他的profiling 或者 測(cè)試代碼覆蓋率的機(jī)制不兼容。

fprofile-arcs參數(shù)使gcc創(chuàng)建一個(gè)程序的流圖,之后找到適合圖的生成樹。只有不在生成樹中的弧被操縱(instrumented):gcc添加了代碼來清點(diǎn)這些弧執(zhí)行的次數(shù)。當(dāng)這段弧是一個(gè)塊的唯一出口或入口時(shí),操縱工具代碼(instrumentation code)將會(huì)添加到塊中,否則創(chuàng)建一個(gè)基礎(chǔ)塊來包含操縱工具代碼。

Lcov是GCC覆蓋率測(cè)試工具gcov的前端圖形工具。它通過收集多個(gè)源文件的 行、函數(shù)和分支的代碼覆蓋信息并且將收集后的信息生成HTML頁(yè)面。生成HTML需要使用genhtml命令。

3.2 Lcov安裝

在Linux 中安裝 lcov 非常簡(jiǎn)單,只要使用如下命令即可完成 lcov 的安裝。

$ sudo apt-get install lcov

安裝完成后,后續(xù)就可以使用 lcov 生成代碼覆蓋率報(bào)告。

3.3 Lcov使用

Step1 : 使用 GCC 以 -fprofile-arcs 和-ftest-coverage 選項(xiàng)編譯程序。

$ gcc -fprofile-arcs -ftest-coverage -o test test.c

則會(huì)在當(dāng)前目錄下生成test.gcno和test.gcda文件

注:一般情況,gcda和gcno會(huì)在同一個(gè)目錄,假如在編譯機(jī)器上面是test/path,編譯的時(shí)候會(huì)在這個(gè)目錄下生成*.gcno文件,那么在執(zhí)行機(jī)器上也會(huì)生成*.gcda文件在test/path目錄下。如果要使用lcov統(tǒng)計(jì)覆蓋率,必須將gcno和gcda放在同一個(gè)目錄,并且有源代碼,且源代碼的目錄和編譯時(shí)的目錄一樣,否則不能生成。

Step2: 運(yùn)行程序

$ ./test

Step3: 然后該目錄下執(zhí)行l(wèi)cov

$ lcov --directory . --capture --output-file app.info

其中:

--directory 或者-d 表示的是目錄,也就是gcno和gcda目錄

--capture 或者 -c 表示獲取覆蓋率信息

--output-file 或者 -o 表示輸出文件

Step4: 獲取 HTML 輸出

生成 html 格式的報(bào)告比較簡(jiǎn)單, 只要在 coverage 目錄下使用以下的命令就可以生成html 格式的報(bào)告。

$ genhtml -o results app.info

results是一個(gè)目錄,index.html為導(dǎo)航文件,使用 web 瀏覽器打開 index.html 文件查看代碼覆蓋結(jié)果。

1683896510542nhotq0tepp

也可查看更加詳細(xì)的信息。

1683896511139aq74zu3cct

如要查看某個(gè)文件具體的信息,點(diǎn)擊對(duì)應(yīng)的文件名即可,打開的文件詳細(xì)信息頁(yè)面。

1683896511459roduv58jwt

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

    關(guān)注

    3

    文章

    3503

    瀏覽量

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

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67765
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    代碼覆蓋分析過程包含哪些方面?

    代碼覆蓋分析過程包含哪些方面覆蓋分析在嵌入式系統(tǒng)上的問題BullseyeCoverage的實(shí)現(xiàn)方式嵌入式操作系統(tǒng)Nucleus的具體應(yīng)用
    發(fā)表于 04-26 06:16

    Verilog代碼覆蓋率檢查

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

    Linux的內(nèi)核級(jí)代碼復(fù)用攻擊檢測(cè)

    近年來,代碼復(fù)用攻擊與防御成為安全領(lǐng)域研究的熱點(diǎn).內(nèi)核級(jí)代碼復(fù)用攻擊使用內(nèi)核自身代碼繞過傳統(tǒng)的防御機(jī)制.現(xiàn)有的代碼復(fù)用攻擊檢測(cè)與防御方法多面
    發(fā)表于 12-27 15:14 ?0次下載

    基于Voronoi圖的覆蓋空洞檢測(cè)算法

    針對(duì)無線傳感器網(wǎng)絡(luò)(WSN)中節(jié)點(diǎn)隨機(jī)部署或部分節(jié)點(diǎn)能量耗盡帶來的覆蓋空洞(CH)問題,提出了一種基于Voronoi圖的覆蓋空洞檢測(cè)算法。該算法利用節(jié)點(diǎn)的位置信息在覆蓋區(qū)域范圍內(nèi)構(gòu)建V
    發(fā)表于 01-14 15:29 ?0次下載
    基于Voronoi圖的<b class='flag-5'>覆蓋</b>空洞<b class='flag-5'>檢測(cè)</b>算法

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

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

    MPLAB代碼覆蓋用戶指南

    MPLAB代碼覆蓋用戶指南資料免費(fèi)下載。
    發(fā)表于 04-29 10:25 ?13次下載

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

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

    代碼覆蓋工具的重要性

      它支持語(yǔ)句覆蓋、分支覆蓋和圈復(fù)雜度。它提供了分別選擇低、中、高和完整級(jí)別的代碼覆蓋率的規(guī)定。它非常易于使用和快速,也可用于開源和商業(yè)許可。
    的頭像 發(fā)表于 06-30 10:36 ?802次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>工具的重要性

    選擇代碼覆蓋工具的 10 個(gè)標(biāo)準(zhǔn)

    為了開發(fā)安全可靠的軟件,測(cè)試是質(zhì)量保證不可或缺的一部分。如果沒有充分的記錄測(cè)試,就不可能確定軟件是否安全且功能是否正確。在這種情況下,代碼覆蓋率(測(cè)試覆蓋率)的測(cè)量尤為重要。這是因?yàn)樗梢杂脕泶_定一
    的頭像 發(fā)表于 07-20 18:06 ?1234次閱讀
    選擇<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋</b>工具的 10 個(gè)標(biāo)準(zhǔn)

    代碼覆蓋率工具的重要性

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

    軟件代碼結(jié)構(gòu)化覆蓋測(cè)試-分支覆蓋

    本篇我們介紹分支覆蓋,從測(cè)試技術(shù)對(duì)代碼的測(cè)試程度上來說,在復(fù)雜代碼中,分支覆蓋比語(yǔ)句覆蓋效果要好。
    的頭像 發(fā)表于 09-01 11:34 ?572次閱讀
    軟件<b class='flag-5'>代碼</b>結(jié)構(gòu)化<b class='flag-5'>覆蓋</b>測(cè)試-分支<b class='flag-5'>覆蓋</b>

    代碼覆蓋率記錄

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