`

覆盖率分析

阅读更多

为什么需要代码覆盖率分析?

在发布代码的时候,我们常常会对其进行一系列的测试来协调软件的性能和功能,使他们和预计的相同。但是检验通常都是相当的困难,即使程序相当的简单。开发者常常会借助一些 测试工具( test suite) 来模拟或者重建执行脚本。如果测试程序组是彻底的,那么程序的各个功能都将被测试到并且都可以证明是可以工作的。

但是怎样才算彻底呢?简单点说就是测试程序的每一条路径,验证每一个结果,执行每一条语句,证明没一句语句是没用的。 gcov 就是一个用来检验你的每一句语句是否都执行了的工具。

 

什么是代码覆盖率分析?

代码覆盖率分析就是找到定位没用的或者不执行的代码的过程。没用的代码不会存在什么问题,但是他们会影响程序的可读性;不执行的代码则可能是未来 bug 的所在。所以找到他们,把他们从你的程序中移处是大有裨益的。

覆盖率分析主要有下面的几个过程:

    通过测试程序组找到不执行的程序段;

    添加额外测试程序组,以便增加代码覆盖率;

    决定代码覆盖率的定量测度,它也是程序质量的间接测度。

 

代码覆盖率分析的缺陷

代码覆盖率分析不能找出程序的逻辑错误。考虑一下下面的代码

10:  rc = call_to_xx ();

11:  if (rc == ERROR_FATAL)

12:    exit(2);    /* exit with error code 2 */

13:  else

14:    /* continue on */

当测试程序段运行到 11 行时, 11 行始终都不能为真。 call_to_xx 返回了另外的一个错误比如 ERROR_HANDLE ,除非我们加入这种错误的处理方式的代码。

代码覆盖测试工具不会告诉你什么是必须的,他们只能显示已经存在的代码的覆盖率。

 

代码覆盖率的类型

gcov 可以用来测量各种形式的代码覆盖率。最常见最有用的两种是分支覆盖( branch coverage) 和循环覆盖( loop coverage

分支覆盖证明各个方向的每一条分支都被执行到了。循环覆盖试图证明循环内部的每一条路径都被测试到了。循环覆盖似乎非常的复杂,但基本上只要满足下面的三个状况,就可以作了。

    1 。循环条件不满足,循环没有内部没有执行;

    2 。循环条件就满足了一次,循环内部就执行了一次;

    3 。循环条件至少满足了两次,循环至少执行了两次。

举个例子

void  function(int number)

{

  if (number % 2) == 0)

    printf("even \n");

  for (;number < 9; number++){

    printf("number is %d\n", number);

  }

}

function(11);   满足状况一

function(8);    满足状况二

function(6);    满足状况三    

分享到:
评论

相关推荐

    ISE与modelsim联合仿真利用modelsim查看覆盖率

    此外,覆盖率分析是验证过程中非常关键的一环,能帮助设计师评估测试用例对设计的覆盖程度。 本文档将详细介绍如何在ISE与Modelsim联合仿真环境中利用Modelsim查看覆盖率的步骤: 1. 首先,你需要启动ISE工作台,...

    基于FPGA的通用仿真设计及其覆盖率分析.pdf

    根据所提供的文件内容,以下是关于“基于FPGA的通用仿真设计及其覆盖率分析”的详细知识点: 一、FPGA(现场可编程门阵列)概述 FPGA是一种可通过编程定制其功能和行为的集成电路。由于其可重配置性,FPGA在航天...

    ModelSim仿真代码覆盖率分析方法

    在硬件设计验证过程中,ModelSim 是一款常用的仿真工具,它提供了强大的代码覆盖率分析功能,以确保测试的全面性。本文将详细介绍如何利用 ModelSim 进行代码覆盖率分析,特别是针对 FPGA 仿真。以下是一个简单的...

    Cypress:Cypress测试覆盖率分析.docx

    Cypress:Cypress测试覆盖率分析.docx

    基于emma的测试覆盖率分析工具,swing界面操作

    **Emma测试覆盖率分析工具** Emma是一款广泛应用于Java项目的开源代码覆盖率工具,它能够帮助开发者评估单元测试的质量。Emma提供了一种高效且精确的方式来衡量代码在测试中的执行情况,即测试覆盖率,这包括了哪些...

    使用Go语言进行单元测试与代码覆盖率分析.md

    如何使用 Go 语言进行单元测试与代码覆盖率分析,强调了 Go 语言内置的 `testing` 包在测试开发中的重要性。文章首先概述了 Go 的测试工具及其特点,包括内置测试框架、简单易用和集成的覆盖率分析功能。接着,详细...

    基于gcov工具的C/C++代码覆盖率分析与设计源码

    本项工程专注于C/C++代码覆盖率分析,设计源码包含2943个文件,涵盖1062个头文件(h)、970个C源文件(c)、244个HTML文件(html)、142个源代码文件(S)、44个PNG图像文件(png)、36个文本文件(txt)、31个...

    java单元测试篇:使用clover为java代码的junit测试做覆盖率分析.pdf

    Java 单元测试篇:使用 Clover 为 Java 代码的 JUnit 测试做覆盖率分析 Java 单元测试是软件测试的重要组成部分,对于 Java 开发者来说,单元测试是必不可少的。今天,我们将学习使用 Clover 框架来分析 Java 代码...

    Ruby-SimpleCovRuby代码覆盖率分析工具

    Ruby-SimpleCov是一款强大的代码覆盖率分析工具,它为Ruby开发者提供了一种简便的方式来测量和了解他们的测试套件覆盖了多少源代码。SimpleCov的工作原理是,在运行测试时,它会记录哪些代码行被执行,然后生成一个...

    Mocha:Mocha测试覆盖率分析.docx

    Mocha:Mocha测试覆盖率分析.docx

    基于覆盖率驱动的FPGA验证分析.pdf

    为了确保验证的有效性,验证人员需要充分提取设计需求,合理选择覆盖点和设置仓的值域,以确保既能收集到足够的信息完成覆盖率分析,又能避免收集过多无用信息。 总结来说,随着FPGA技术的不断发展和应用领域的不断...

    测试代码覆盖率

    2. **集成测试框架**:它支持多种流行的Java测试框架,如JUnit、TestNG等,使得在Eclipse环境中进行测试和覆盖率分析更加便捷。 3. **详细的报告**:EclEmma生成详细的HTML报告,展示每个类、方法以及整个项目的覆盖...

    eclipse覆盖率插件

    这些插件通常集成到Eclipse IDE中,为开发者提供无缝的测试覆盖率分析体验。通过这些插件,开发者可以在编写和运行单元测试时实时查看代码覆盖率,从而更好地了解测试的效果。 常见的Eclipse覆盖率插件有: 1. **...

    代码覆盖率驱动的测试

    代码覆盖率驱动的测试主要依赖于覆盖率分析工具来收集数据和生成覆盖率报告。这些工具可以嵌入到测试框架中,跟踪哪些代码被执行过,哪些没有被执行,以此来识别测试中的盲点。常见的代码覆盖率指标包括语句覆盖率、...

    lcov测试代码覆盖率例程

    除了基本的代码覆盖率,lcov还可以与其他工具结合使用,如lcov-resultmerger,用于合并多个覆盖率报告,适用于多模块或多线程项目的覆盖率分析。还有coveralls和codecov等服务,可以将 lcov 生成的报告上传至云端,...

    eclemma单元测试代码覆盖率工具

    5. **命令行工具**:除了IDE插件形式,EclEmma还提供命令行工具,允许在持续集成环境中使用,以便于自动化覆盖率分析。 6. **与其他工具的集成**:EclEmma可以与其他开发工具和版本控制系统集成,如Git或SVN,以...

Global site tag (gtag.js) - Google Analytics