代码覆盖率分析

ISO26262 - Coverage 上一期我们讲到了ISO26262的相关知识ASIL,相信大家对ASIL有更深入的理解了吧,那我们就一起来看看本周的新内容!大家有没有发现一个现象,就是往往我们知道要过认证,但是在庞大的知识体系下,我们却很难找到我们到底应该怎么去做,那这期就来聊聊过ASIL D对软件部分所要求的 —覆盖率。 在我们过ASIL等级的时候,ISO26262的指导文件中有对覆盖率的详细要求,从图一中,我们能够很清楚的看到,ASIL C、D等级对Function coverage(函数覆盖率)和Call coverage(调用覆. 阅读详情

无论是单元测试、API测试还是功能性测试,最终都是调用了产品的代码;如何评价这些测试的效率,是否真正全部或者大部分覆盖了产品的代码,这个时候,代码覆盖率(code coverage)就是一个比较有价值的参考指标了。

通常,代码覆盖率用在如下几个方面
  • 找出程序中没有被测试代码执行到的地方;
  • 增加新的测试代码,以提高代码覆盖率;
  • 分析测试代码的效率,以便设计出更有效的测试代码或测试用例
代码覆盖率常用的指标

语句覆盖(statement coverage):语句覆盖是指程序的每一行代码是否都被覆盖到;语句覆盖是最常用的一种代码覆盖率指标,也非常简单。但是对一些控制结构的代码而言,它不能真正表示是否完全覆盖到,如下代码:

int* p=NULL;
if(condition)
    p=&variable;
*p=123;

在以上代码中,如果condition为true,这时,语句覆盖率就为100%。而其实当condtion为false,会导致空指针被赋值的运行时错误。

 

决策覆盖(decision coverage):决策覆盖是指在控制结构的代码块,如if, while中的整个bool表达式是否在false和true条件下,各被执行一次。决策覆盖不考虑组成该条件表达式的各个子条件是否被完全覆盖到。于是,通常对于c/c++/java语言,由于short circuit operators,对于一个由多个条件以与关系组成的一个条件表达式,当出现第一个条件被检测为false时,其后所有的条件都不会被执行了。考虑一下代码:

if(condition1 && (condition2 || function1()))
    statement1;
else
    statement2;

在condtion1为false和conditon1为true,condition2为true,其决策覆盖率为100%,而function1中的代码从未被执行。决策覆盖也叫分支覆盖(branch coverage)。

条件覆盖(condition coverage):条件覆盖是指每个条件都必须有true和false的情况,这里一个条件是一个逻辑操作符的操作数,但是不含该逻辑操作符。注意和决策覆盖的区别,如

bool f(bool e){    return false;    }
bool a[2]={false, false};
if(f(a&&b)) ...
if(a[int(a&&b)]) ...
if((a&&b)?false:false) ...

该代码块的3个if条件中,一共包含2个条件a,b;共四种情况a=true, a=false, b=true, b=false;我们只需取a,b分别为true和false的组合(a=true, b=false和a=false, b=true)即可使条件覆盖为100%;而实际上,无论a,b取什么值,3个if语句的分支始终都返回false。

多重条件覆盖(multiple condition coverage):多重条件覆盖是指各个条件的每个可能的组合是否被检查到。多重条件覆盖中的各个条件组合是一种排列关系,而不是组合。通常多重条件覆盖的测试案例设计都非常复杂,因为在考虑到各个条件之间的排列关系时,其数量本身就多,而且还要考虑关系之间的相互影响,剔除无效的排列。

 

条件/决策覆盖(condition/decision coverage):条件决策覆盖是条件覆盖和决策覆盖的联合运算,它具有比多重条件覆盖简单的优势,同时又没有条件覆盖和决策覆盖的缺点。

 

改进的条件/决策覆盖(modified condition/decision coverage):其定义是程序中的每个入口和出口都至少被调用一次,一个决策的每个条件都至少有一次所有可能的输出,程序中的每个决策都至少有一次所有可能的输出,一个决策中的每个条件都能独立的影响该决策的输出(该条件改变,而其他条件保持不变)。

 

路径覆盖(path coverage):路径决策指示函数中的每个可能的路径是否被执行到。一条路径是一个唯一的从函数入口到出口的分支序列。路径覆盖通常能比较彻底的进行测试,但是它也有两个非常严重的缺陷:其一,路径的数量是分支数量的几何级数。例如,一个具有10个if语句的函数,需要1024个路径测试;而我们再加一条if语句,则有2048个路径需要测试。其次,由于数据相互关系,有些路径是不可能被测试到的,如:

if(success)
    statement1;
statement2;
if(success)
    statement3;

这段代码包含4条路径。而实际上,只有2条是可行的,success=false和success=true。

代码覆盖率的其他指标

其他代码覆盖率的指标还有函数覆盖率(function coverage);调用覆盖率(call coverage);循环覆盖率(loop coverage)等等。

代码覆盖率之间的关系
  • 决策覆盖通常是包含语句覆盖的,因为每个分支的执行必然需要每个语句的执行。但是,如果函数的控制流被throw,abort等语句打断,那么该规则就不适用了。
  • 条件/决策覆盖包含条件覆盖和决策覆盖。
  • 路径覆盖包含决策覆盖。
该如何利用代码覆盖率的数据

通常,我们都希望用较少的时间设计出高效的测试案例。简单的来说,高效的测试案例就是能尽可能多的发现程序中的问题。测试所花的时间、覆盖率和检测出的时间可参考下面的图表:

即便代码覆盖率为100%,我们只能说程序中的每行代码都被执行到了。但是如果我们一定要有一个定量的指标,可参考下表:

Coverage typewithout dependency injectionwith dependency injection
Function90%99%
Line75%95%

ref: http://blogs.msdn.com/b/cellfish/archive/2008/06/16/code-coverage.aspx

Dependency Injection(DI)是一种设计模式,即把一个对象引入到一个类中,而不是依靠类来创建对象本身。具体可参考:http://msdn.microsoft.com/en-us/magazine/cc163739.aspx

值得注意的是:

  • 不要一味的追求数据,为了提高代码测试覆盖率而去设计测试案例;
  • 而要以代码测试覆盖率为参考,让它来帮助我们设计更加有意义,高效的测试用例;

如果你或者你的老板一定要一个非常漂亮的数字,或者你用它来考量测试人员的绩效,那么对于.net平台上的程序,微软有一个叫Pex的工具,可以帮助你生成高代码覆盖率的测试案例。具体可参考:

http://research.microsoft.com/en-us/projects/pex/

 

注:本文大部分参考Code Coverage Analysis,欢迎转载,但请注明出处。谢谢。

函数覆盖vs调用覆盖:ISO26262认证中最容易混淆的两个概念详解 本文详细解析了ISO26262认证中函数覆盖与调用覆盖的核心区别,通过生活化类比和多语言代码示例,帮助工程师准确理解这两种代码覆盖率检测维度。文章还提供了主流工具对比和工程实践建议,助力汽车电子系统开发通过功能安全认证。 阅读详情

相关推荐

FPGA怎么用Vivado做verilog代码覆盖率分析

第三步:做如下设置,其中cover是我们想要设置的覆盖率的名字,这个可以自己设置,./是覆盖率信息放置的位置,这两项都可以根据自己的使用来设置。sbct是设置想要收集哪些覆盖率信息,s是行覆盖率,b是分支覆盖率,c的条件覆盖率,t是翻转覆盖率。这样在我们仿真的时候就会进行覆盖率的收集了。然后就可以看到在对应的仿真目录下生成一个xsim.codeCov的目录,因为我设置的./所以生成的信息放在了这个目录下。在做仿真的时候往往会去做代码覆盖率和功能覆盖率的分析,来保证仿真是做的比较充分完备的。

芯想是陈的博客 2419

代码覆盖率

通常,代码覆盖率用在如下几个方面 找出程序中没有被测试代码执行到的地方; 增加新的测试代码,以提高代码覆盖率; 分析测试代码的效率,以便设计出更有效的测试代码或测试用例. 代码覆盖率常用的指标: 语句覆盖(statement coverage),决策覆盖(decision coverage)也叫分支覆盖(branch coverage),条件覆盖(condition coverage

ross_的博客 1598

BullseyeCoverage:C++代码覆盖率分析工具详解

在现代软件开发过程中,代码覆盖率工具如BullseyeCoverage扮演着至关重要的角色。BullseyeCoverage不仅是一个高级的代码覆盖率分析工具,它还是提高软件质量,优化测试过程的关键工具。通过帮助开发者识别哪些代码被测试覆盖了,哪些还没有,它促进了测试的全面性和效率,进而保证了软件产品的质量和可靠性。## 1.1 BullseyeCoverage的含义BullseyeCoverage通过收集信息并计算测试过程中执行到的代码行数与总的代码行数的比例,提供了一个直观的覆盖率报告。

weixin_35370061的博客 1467

函数调用(doxygen )、覆盖率(gcov)

函数调用(doxygen )、覆盖率(gcov) 1. 可以利用doxygen 来跟踪这些数据 分析下载 分析配置 调用调用分析 2. 覆盖率 搭建环境 覆盖率 3. 函数调用关系 可以借助软件来分析,但是有编译宏,函数调用就是去了应有的意义。 只有在预编译后看函数调用才是准确的。 总结 ...

高效稳定 790

《双剑合璧:双 IMU 驱动的高精度 AHRS 实战宝典(基于 ROS2)》

本文系统阐述了基于双IMU的高精度姿态与航向参考系统(AHRS)设计与实现方法。文章首先分析了传统单IMU系统的局限性,提出通过双IMU冗余配置实现性能互补的方案。从硬件设计要点(包括IMU选型策略、电路降噪方法、PCB布局规范),到算法实现方案(互补滤波、卡尔曼滤波等融合算法),再到ROS2软件架构与调优策略,全方位展示了双IMU系统的技术实现路径。特别强调快速性与高精度平衡的方法,包括动态参数调整、双IMU权重优化等核心技巧。最后总结了硬件降噪、算法调优等实用心法。

bother3000的博客 2023

Ubutntu下使用realsense d435i(二):获取某二维像素点的三维坐标

00 准备工作 准备工作包括安装驱动以及pyrealsense2,具体可参考上一篇: Ubutntu下使用realsense d435i(一):准备工作以及安装pyrealsense2 https://blog.youkuaiyun.com/gyxx1998/article/details/121461293 01 通过二维像素点获得物体三维坐标 这个在上一篇已经介绍了代码: realsense d435i获取某像素点三维坐标(计算深度和点云两种方法) https://blog.youkuaiyun.com/gyxx1998/

gyxx1998的博客 9943

功能测试如何获得代码覆盖率?大佬解释得太详细了

如代码里展示的,我这里原始的入口类是com.tachibana.downloader.ui.main.MainActivity,我们继承这个Activity,并实现了一个generateCoverageReport方法,用来记录JaCoCo的数据,在这个Activity退出的时候,调用方法记录,实现覆盖率数据获取的功能。解决方案,继承一切真实入口类可以被继承的属性,比如theme什么的,这样在FakeActivity实例化加载资源的时候,可以避免出现资源申请失败的问题,防止出现应用启动闪退的现象。

测试萌萌 855

六款经典限流保护电路设计:从原理到实战的完整指南

在电子系统设计中,过流保护是确保电路可靠运行的基础技术。其核心原理是通过电流采样、比较与执行三个环节构成闭环控制,将不可见的电流转化为可测量的电压信号进行处理。这项技术的核心价值在于防止因短路、堵转或异常负载导致的元器件损坏,从而提升整个系统的稳定性和安全性。在电源管理、电机驱动和精密仪器等应用场景中,限流保护电路都是不可或缺的安全屏障。本文深入解析了基于运放和晶体管搭建的经典方案,并重点探讨了采样电阻选型、参考电压生成以及PCB布局中的开尔文连接等工程实践要点,帮助读者从热门的DIY项目到工业控制都能实现

weixin_29166013的博客 351

AI如何用JaCoCo提升代码覆盖率分析效率

在软件开发过程中,代码覆盖率是衡量测试质量的重要指标之一。传统的代码覆盖率分析工具虽然能提供基础数据,但往往需要人工解读和优化,效率较低。本文将介绍如何利用AI技术结合JaCoCo工具,实现智能化的代码覆盖率分析,帮助开发者更高效地提升测试质量。实际使用中发现,其集成的开发环境和可视化工具大大降低了技术门槛,让AI技术的应用变得更加简单高效。这种AI+测试覆盖率的创新组合,不仅提升了开发效率,更重要的是通过数据驱动的智能分析,帮助团队建立更完善的测试体系,最终实现软件质量的全面提升。

SilverfoxOwl19的博客 1000

Simulink实战:火电机组一次调频与AGC协同控制建模与仿真解析

本文详细解析了如何使用Simulink进行火电机组一次调频与AGC协调控制的建模与仿真。通过系统架构设计、参数设置和模块实现,阐述了如何实现两者的协同控制,确保电网频率稳定。文章提供了实用的建模技巧、参数整定经验和性能评估方法,为电力系统仿真工程师提供了有价值的实践指导。

c7d8e9的博客 306

从仿真到部署:基于ROS2与Gazebo的UR5e机械臂全流程控制实践

本文详细介绍了基于ROS2与Gazebo的UR5e机械臂全流程控制实践,从环境准备、模型构建到控制器开发和仿真优化,最终实现真实机器人部署。通过实战案例和避坑指南,帮助开发者掌握机器人仿真与控制的关键技术,提升UR5e机械臂在物料分拣等任务中的性能与稳定性。

weixin_29184371的博客 288

mold代码覆盖率:全面的代码覆盖率分析

在当今快速迭代的开发环境中,代码覆盖率分析已成为确保软件质量和可靠性的关键工具。对于像mold这样的高性能链接器项目,全面的代码覆盖率分析不仅能够帮助开发者识别未被测试的代码路径,还能指导测试策略的优化,确保这个关键基础设施组件的稳定性。 mold作为现代链接器的代表,其代码库高度优化且并行化,涉及复杂的算法和数据结构。通过系统的代码覆盖率分析,我们可以: - 识别测试盲点,确保所有关键功能都...

gitblog_00953的博客 736

XGBoost特征重要性为0的问题:深度解析与应对策略

在机器学习领域,XGBoost(Extreme Gradient Boosting)作为一款高效且强大的集成学习算法,已经被广泛应用于各类预测任务中。然而,在实际应用过程中,许多数据科学家和工程师们遇到了一个令人困惑的现象——某些特征的重要性值为0。这不仅影响了模型的解释性,还可能导致特征选择过程中的误判。本文将深入探讨这一问题,分析其背后的原因,并提供相应的解决方案。在深入探讨特征重要性为0的问题之前,我们首先需要了解XGBoost是如何计算特征重要性的。XGBoost提供了三种常见的特征重要性计算方法:

cda2024的博客 1704

代码覆盖率分析(gcov)

为什么需要代码覆盖率分析?在发布代码的时候,我们常常会对其进行一系列的测试来协调软件的性能和功能,使他们和预计的相同。但是检验通常都是相当的困难,即使程序相当的简单。开发者常常会借助一些测试工具(test suite)来模拟或者重建执行脚本。如果测试程序组是彻底的,那么程序的各个功能都将被测试到并且都可以证明是可以工作的。但是怎样才算彻底呢?简单点说就是测试程序的每一条路径,验证每一个结果,执行每

SecularBird的专栏 4889

FLUENT Meshing Watertight Geometry工作流入门 - 5 生成表面网格

我们学习在生成表面网格任务下的不同输入。讨论了局部尺寸控制与全局尺寸控制的影响。最后,讨论了如何改进表面网格,以实现好的体网格质量。

B_etter_Man的博客 5633

【libnice】meson + vs2022,生成win32工程

libnice

突围 947

使用 gcov 对 binutils 进行代码覆盖率分析

文章目录使用 gcov 对 binutils工具包下的小工具进行代码覆盖率分析需要的工具gcov插桩以及lcov分析原过程gcovlcov对于binutils进行gcov插桩问题 使用 gcov 对 binutils工具包下的小工具进行代码覆盖率分析 因为科研需要,需要对binutils进行coverage分析,然后就接触到了gcov以及lcov,下面对binutils插桩时遇到的问题以及步骤进行总结。 需要的工具 需要的工具主要是两个,gcov以及lcov。gcov是gcc自带的,Linux下可以 $ g

weixin_41013492的博客 529

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

本文仅仅简单介绍ModelSim仿真代码覆盖率分析的使用方法,适用于初学者进行学习。

windyqiao的博客 3330

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

PHPUnit袖珍指南 第十章 代码覆盖率分析

 第十章 代码覆盖率分析你已经学会了怎么使用单元测试代码,但你怎么测试你的测试呢?你怎么发现没被测试的代码,换句话说,没被测试覆盖的代码?怎么衡量测试的完整性?所有这些问题的答案就是代码覆盖率分析。代码覆盖率分析告诉你当测试进行时,那些产品代码执行过了。 PHPUnit的代码覆盖率分析应用了Xdebug[6]扩展提供的语句覆盖率功能。 什么时语句覆盖率?举个例子来说,如果有一个方法

三默的专栏 - SaaS,敏捷开发方法,最佳实践 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用 Contest 分析测试用例的代码覆盖率

解决什么问题 问题的提出时这样的:对于测试人员来说,首先面临的问题就是无法度量测试用例的质量,如果测试工程师花费大量时间写的测试用例不能有效地覆盖重要的实现代码,那么可以表明这样的测试用例不是优良的。同时可以根据测试覆盖了的报表来分析为什么没有覆盖到重要的代码,接着需要进行改进测试用例的代码覆盖率达到满意的结果。代码覆盖率高低根据产品的不同而不同:70%,80% 甚至 100% 都是可能的...

zhenaikeke 458

pycobertura:一款代码覆盖率差异分析工具

pycobertura:一款代码覆盖率差异分析工具 1. 项目基础介绍 pycobertura 是一个开源项目,旨在提供一个针对 Cobertura 覆盖率报告的通用解析器。Cobertura 是一个用于计算 Java 程序代码覆盖率的工具。pycobertura 采用 Python 语言开发,通过解析 Cobertura 生成的报告,帮助开发者识别代码覆盖率的变化,并专注于他们所做的更改。 2....

gitblog_00541的博客 484

代码覆盖率分析 - VectorCAST/CBA

转载自:博主——Trinitytec;网址:https://blog.youkuaiyun.com/trinity_techologies/article/details/73188078 一.用途 (1)通过分析来提高代码覆盖率   利用VectorCAST/CBA,用户可以标记出经过分析覆盖的代码。这样,高安全行业的开发工程师就能够通过覆盖率分析来提高测试所达到的覆盖率了,使覆盖率按照规定达到100%。...

软件领域 3545
上一篇: White使用简介
下一篇: AQtime代码覆盖率深度分析之一
ffeiffei
博客等级 码龄16年 36粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值