测试覆盖率常被用来衡量测试的充分性和完整性,也是测试有效性的一个度量。敏捷开发的大潮之下,如何在快速迭代的同时保证对被测代码的覆盖度和产品质量,是一个非常有挑战性的话题。本文依次介绍代码覆盖率的基本知识、工具和应用场景。

代码覆盖率的基本知识

概念

代码覆盖率测试技术是一种常见的白盒测试技术,是衡量软件测试工作充分性和完整性的重要指标之一。代码覆盖率指在测试的时候已经被测试过了的代码占准备被测试总代码量的比例和程度,它关注的是在执行测试用例时,有哪些代码被执行到了,有哪些代码没有被执行到。

代码覆盖率的指标

简单介绍最常用的几种代码覆盖率指标。

行覆盖率:又称为语句覆盖率,指已经被执行到的语句占总的可执行语句(不包含类似 C++ 的头文件声明、代码注释、空行等等)的百分比。这是最常用也是要求最低的覆盖率指标。实际项目中通常会结合判定覆盖率或者条件覆盖率一起使用。

判定覆盖率:又称分支覆盖率,用以度量程序中每一个判定的分支是否都被测试到了,即代码中每个判断的取真分支和取假分支是否各被覆盖至少一次。比如,对于 if(a>0 && b>0),就要求覆盖“a>0 && b>0”为 TURE 和 FALSE 各一次。

条件覆盖率:判定中的每个条件的可能取值至少满足一次,度量判定中的每个条件的结果 TRUE 和 FALSE 是否都被测试到了。比如,对于 if(a>0 && b>0),就要求“a>0”取 TRUE 和 FALSE 各一次,同时要求“b>0”取 TRUE 和 FALSE 各一次。

另有路径覆盖率、函数覆盖率、类覆盖率、圈复杂度等。

代码覆盖率的意义

代码覆盖率最主要的意义是帮助我们了解测试情况,即直观了解测试过程中覆盖和未覆盖率的代码,可能存在的风险,然后根据分析未覆盖率代码,反推测试设计是否充分,进一步明确测试设计阶段问题。

其次,代码覆盖率有助于发现多个测试用例都覆盖不到的代码,收集方法覆盖率,为废弃代码提供依据。

此外,代码覆盖率可以度量单元/自动化测试用例,提供覆盖率统计情况,分析覆盖率报告,完善用例;

最后,代码覆盖率利于精准回归,通过构建代码调用关系,精准的确定回归测试范围,避免了全量回归造成测试资源的浪费。

代码覆盖率的局限性

高的代码覆盖率不一定能保证软件的质量。举一个极端的例子,如果一个被测函数里面只有一行代码,只要这个函数被调用过了,那么衡量这一行代码质量的所有覆盖率指标都会是 100%,但是这个函数是否真正实现了应该需要实现的功能呢?显然不是的,我们希望代码覆盖率越高越好,但是,高的代码覆盖率并不一定能保证软件的质量,而低的代码覆盖率一定不能保障软件的质量。因为,代码覆盖率是基于现有代码,无法发现那些未考虑某些输入以及未处理某些情况形成的缺陷。

此外,在追求更高的代码覆盖率时,会发现测试成本会随着代码覆盖率的提高以指数级的方式迅速增加,花费的时间成本会更高。因为和自动化测试类似,后期需要大量的桩代码,MOCK代码等方式来控制执行路径。

代码覆盖率的常用工具

代码覆盖率是比较成熟的测试方式,常见的语言均有开源优秀的代码覆盖率工具。列举如下,实际使用根据项目语言和环境部署等选择合适的一款即可。

Java:  JaCoCo、Emma、 Cobertura

PHP:  Php-code-coverage

Python:  Coverage.py

Javascript:  istanbul 、Blanket.js

C/C++: gcov、lcov、gcovr

Golang: gotest

代码覆盖率的应用场景

单元测试

实际中一般会对底层和核心代码进行单元测试,单元测试聚焦于系统的某一部分,通常是较低级别,是一种以较小代价换取软件“正确”的方法。单元测试框架如 Junit 、TestNG、PhpUnit等。通过引入代码覆盖率技术,可以衡量和改进单元测试。

衡量单元测试用例集合的充分性和完备性;

分析覆盖率报告完善测试用例提升覆盖率;

与流水线集成,作为准入参考(如代码提交自动触发单元测试,并自动统计代码覆盖率,以单元测试通过率和代码覆盖率为标准决定代码是否提交到仓库,或是否提测上线等)。

自动化测试

自动化框架一般都有对应覆盖率的插件支持,自动化测试覆盖率一般分为业务用例覆盖率及代码覆盖率两种。同样的,代码覆盖率技术也有助于衡量和改进自动化测试。

衡量自动化测试用例集合的充分性和完备性;

分析覆盖率报告完善测试用例提升覆盖率;

通过报告细节快速定位并修复缺陷;

与流水线集成。

手工测试

如应用到日常项目测试,服务端的版本迭代或客户端的版本迭代。手工测试中,一般更要关注 增量覆盖率,即首要关注本次变动的代码覆盖率情况。

代码覆盖率平台

随着覆盖率在各个阶段的应用,对于整个测试周期(单元测试、接口测试、UI测试、集成测试)等,如何量化测试完整度和有效性?此外,不同编程语言有不同的工具环境要求,如何支持多语言的代码覆盖率收集、管理呢。这种背景下,就会驱动覆盖率平台的需求建设。一般来说,代码覆盖率平台需求应当 具备以下功能点:

支持多种开发语言的覆盖率测试(如PHP、JAVA、PYTHON等);

支持不同类型的覆盖率测试(如单元测试、自动化测试、功能测试等);

支持增量覆盖率统计;

支持报告持久化,历史覆盖率可以追溯;

支持平台化操作,简单便捷;

支持一键接入,解决手工配置繁琐问题。

基于代码覆盖率的精准测试

上文提到代码覆盖率利于精准回归,通过构建代码调用关系,精准的确定回归测试范围,避免了全量回归造成测试资源的浪费。那么什么是精准测试?

上一页12下一页

本文由51ste.com网友编辑,未经授权,不得转载使用上述作品盈利;个人转载,需标明作者及出处。

testng查看覆盖率_代码覆盖率测试技术相关推荐

  1. testng查看覆盖率_使用Cobertura统计单元测试覆盖率

    学习Cobertura的起因是前天晚上媳妇儿(终于有出场机会了)突然问我有没有用过一些可以统计单元测试覆盖率的工具,答曰:木有...感觉比较丢人,于是昨天晚上研究了一把,今天顺便share一下. 因为 ...

  2. 局域网弱口令扫描工具_安全测试技术 | 渗透测试获取弱口令密码,你的账号安全了吗?...

    1.Burp suite官网下载 Burp Suite 是用于攻击web 应用程序的集成平台.它包含了许多Burp工具,这些不同的burp工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础 ...

  3. 可靠性测试设备技术含量_可靠性测试技术文件.doc

    第二节 可靠性测试可靠性测试应该在可靠性设计之后,但目前我国的可靠性工作主要还是在测试阶段,这里将测试放在前面(目前大部分公司都会忽略最初的可靠性设计,比如我们公司,设计的时候,从来都没有考虑过可靠性 ...

  4. SystemVerilog基于覆盖率驱动验证技术(CDV)和生成-查看覆盖率报告

    作者:小白蒋 所有的努力都是为了做个小白,单纯且快乐~ 本文内容 基于覆盖率驱动的验证技术(CDV): 代码覆盖率: 断言覆盖率 定义功能覆盖率模型 covergroup解释 功能覆盖率的采样事件 定 ...

  5. SV中基于覆盖率驱动验证技术(CDV)和生成-查看覆盖率报告

    目录 ​基于覆盖率驱动的验证技术(CDV): 代码覆盖率 断言覆盖率 定义功能覆盖率模型 covergroup解释 功能覆盖率的采样事件 定义覆盖点:bins 定义覆盖点:条件覆盖 定义覆盖点:状态跳 ...

  6. 测试覆盖率统计工具_使用测试工具和方法进行测试覆盖率

    测试覆盖率统计工具 概述: 要定义"测试覆盖率",我们必须谈论以下主题: 测试覆盖的目的. 不同类型的测试覆盖率标准. 测试覆盖率指标 单元测试范围 测试覆盖率工具 测试覆盖范围的 ...

  7. 测试的目的_电磁干扰测试技术的目的是什么呢?

    电磁干扰现象是一种客观存在的自然现象,产生的方式多种,如接触.摩擦.感应等.静电的特点是长时间积聚.高电压.低电量.小电流和作用时间短的特点.电磁干扰测试技术是整个静电防护系统中不可缺少的重要组成部分 ...

  8. 量化延时法时间测量_「交易技术前沿」交易系统低延时测试与分析

    本文选自 <交易技术前沿>总第三十三期文章(2018年12月) 证券期货行业测试中心(中金所) 魏畅 陈冬严 张鸿晔 摘要:订单延时(Latency)是衡量交易系统性能的重要指标.本文利用 ...

  9. 端到端测试_端到端测试的滥用–测试技术2

    端到端测试 我的上一个博客是有关测试代码方法的一系列博客中的第一篇,概述了使用一种非常常见的模式从数据库检索地址的简单方案: -并描述了一种非常通用的测试技术: 不编写测试 , 而是手动进行所有操作. ...

最新文章

  1. AJAX培训第二讲:使用AJAX框架(上)
  2. android ffmegp for_FFmpeg 编译for Android
  3. oracle 增加ora容量_oracle数据库报错:ORA-01653无法在表空间扩展解决办法 ,增加表空间或表空间增加数据文件...
  4. 分享一款好用的PHP下ID混淆插件
  5. 【李宏毅2020 ML/DL】P118 RL - Model-based, Meta, Multi-agent, Alpha
  6. Linux libmodbus库编译,libmodbus编译安装使用
  7. 关于fixed元素的【子父div】宽度问题
  8. 程序员如何选择外包平台
  9. 剑斩楼兰的将军之路:多属性决策模型。
  10. APP推广渠道之SEM渠道相关知识科普
  11. OC中链式编程和函数式编程
  12. 微信小程序的作用,到底能为企业带来什么价值呢?
  13. 菜鸟应用-手机应用在线制作平台,手机应用,APP开发,手机软件开发
  14. web应用防火墙的部署方式
  15. 华为云:修炼防控内力,竖起游戏文娱行业安全之盾
  16. java控制台如何输入一段代码
  17. axios get怎么还会显示跨域_axios 跨域问题的解决 (接口 Phal 框架)
  18. [linux] 远程服务器安装unrar(无root)
  19. 第三章 打造高性能的视频弹幕系统
  20. oracle数据库创建物化视图

热门文章

  1. pytorch 中retain_graph==True的作用
  2. 如何提取文件名到excel表中
  3. IPv4地址、子网掩码、网关
  4. sumif :有条件的求和 averageIF :有条件的求平均值
  5. mac画图工具 OmniGraffle (三)基础绘图和模具
  6. Python-OpenCV 图像基本操作
  7. Oracle ODBC driver 驱动 官方 下载
  8. 代码厨师软件开发小组团队介绍
  9. 安装bugfree进行环境检查时,提示mysql未安装
  10. 小程序开发总结-SPUSKU