广告

选择代码覆盖率工具的10个准则

时间:2021-12-28 06:26:14 作者:Klaus Lambertz 阅读:
为了开发出安全可靠的软件,测试是质量保证中不可或缺的一部分。如果没有充分和有记录的测试,就不可能确定软件是否安全以及功能是否正确。在这种情况下,代码覆盖率(测试覆盖率)这个测量指标就显得尤为重要。
广告

为了开发出安全可靠的软件,测试是质量保证中不可或缺的一部分。如果没有充分和有记录的测试,就不可能确定软件是否安全以及功能是否正确。在这种情况下,代码覆盖率(测试覆盖率)这个测量指标就显得尤为重要。这是因为它可以用来衡量一个软件已经被测试的全面程度。代码覆盖率表示已测代码占总代码的比例。打个简单的比方,如果在测试期间运行了四分之三的代码对象,那么代码覆盖率就是75%。

特别是在安全关键的软件开发项目中,行业标准对代码覆盖率提出了很高的要求,如果没有足够的测试覆盖率证明,产品就无法获得认证。在其他开发项目中,许多公司也越来越重视软件质量和测量代码覆盖率。

市场上可用的代码覆盖率分析器有很多种。它们在操作性能和产品质量方面存在显着差异。出于这个原因,下文提供了选择代码覆盖率工具的十个基本标准:

1.独立于编译器

当然,代码覆盖率工具必须与项目中使用的编译器配合使用。然而,选用一个从一开始就可以独立于编译器使用的工具是很有意义的。这样的工具不仅可以在当前项目中使用,也可以在使用不同编译器的所有项目中使用。独立于编译器的覆盖率工具能以更加多样化的方式使用,因此非常值得投资。

2.容易使用

如果一款软件设计得不必要的复杂,或者设计时没有经过深思熟虑,则很少有人愿意使用。而一款操作简单的测试覆盖率软件可以显著提高用户的接受度。理想情况下,这些工具应该在后台运行,在测试过程中不会给用户产生任何额外的负担。

3.覆盖率报告容易理解

在评估覆盖率报告时,应该很容易看清楚代码的哪些部分已经通过了测试,哪些部分仍然没有覆盖到。使用良好的覆盖率工具,测试人员可以轻松地在源代码级别识别哪些测试用例仍然未完成。通过执行这些缺失的测试,就能有针对性地提高代码覆盖率,同时也能避免因冗余测试而导致的不必要的工作。

图1:除了各个代码部分的代码覆盖率综览(上图),一个有效的代码覆盖率工具(如TestwellCTC++)还能显示更详细的信息(下图),即使在最高的覆盖率水平情况下,也能准确显示源代码被测试覆盖到什么程度。(来源:Verifysoft科技)

4.可以为安全关键开发项目提供更高的覆盖率水平

针对安全关键软件的测试,许多标准(例如汽车领域的ISO26262、航空领域的DO-178C和铁路运输领域的EN-50128)规定了高达MC/DC覆盖率的高覆盖水平。因此,必须确保覆盖率工具能够支持所有要求的覆盖率等级。为了能够长期使用同一个解决方案,不仅应该考虑当前的需求,还应该考虑未来的需求。重要的是要知道:许多覆盖率工具仅提供判断或分支覆盖,不足以用于安全关键软件的开发。

5.集成灵活

即使在公司内部,开发环境和工具链也常常是多种多样。覆盖率工具应该可以轻松应对所有这些不同的环境。它们必须能够无缝集成进相应的生成过程和测试的执行中,并且不会太麻烦。如果这些工具也可以通过命令行使用,那么在自动化生成执行代码的创建方面就具有很大的优势。

6.检测开销

大多数覆盖率工具通过检测源代码来测量代码覆盖率。它们会在源代码中增加“计数器”,用于计算测试过程中相关代码部分的执行位置和执行频率。但是,这会增加原始代码的大小。因此在对内存容量有限的嵌入式目标进行测试时,应注意尽可能降低这种所谓的仪器检测开销。各种代码覆盖率工具对内存的需求差异是很大的。例如,Verifysoft公司的代码覆盖率分析器TestwellCTC++在这方面就非常节省资源。TestwellCTC++甚至可以通过使用位覆盖率选项进一步减少所需的内存空间(位覆盖率仅测量某部分代码是否已被测试,而不是被测试了多少次)。

7.支持不同的编程语言

许多公司经常使用不同的编程语言,也可能计划在未来引入其他语言。因此,从一开始就选择支持所有或尽可能多的语言的工具是有意义的。

8.支持“创造性”的编程

一些覆盖率工具在分析非通用标准或具有深度嵌套的语言结构时会遇到问题。因此一个好的测试覆盖率工应该能够应对“创造性”的编程风格。

9.支持安全关键类软件开发

在开发安全关键类软件时,相关标准要求整个工具链都必须得到认证,目的是证明覆盖率分析器和整个工具链中使用的其他工具都能可靠地工作。专业的代码覆盖率工具制造商通过认证套件和有关工具认证的建议来支持软件项目。在这种情况下,还应注意所选的覆盖率工具是否已成功用于安全关键类项目。

10.评估许可、技术支持和用户参考

在工具评估过程中应检查覆盖率工具对自己项目的适用性。在此期间,您已经对技术支持的表现有了一个印象。是否也可以通过电话或只能通过电子邮件获得支持?支持人员的能力如何?响应时间呢?用户手册有多好和有多实用?制造商是否也提供培训?最后而且也很重要的一点是,建议查看制造商提供的用户参考资料。它们可以提供有关覆盖率分析器的质量和供应商能力的更多信息。

本文小结

对于安全关键类的软件开发来说代码覆盖率测试是强制性的,这是有充分理由的。对于任何想要提高软件质量的人来说,测量覆盖率是一个很好的方法,它能提高软件测试的价值。在选择代码覆盖率分析器时,必须注意确保这些工具能够满足多方面的要求。此外,易用性和专业支持等因素也起着重要作用。如果使用得当,一个好的测试覆盖率工具有助于显着提高软件质量,提高开发人员和测试人员的积极性,并节省测试的成本。

(参考原文:criteria for selecting a code coverage tool

本文为《电子工程专辑》2021年12月刊杂志文章,版权所有,禁止转载。点击申请免费杂志订阅 

责编:Amy Wu

  • 都自带了
本文为EET电子工程专辑 原创文章,禁止转载。请尊重知识产权,违者本司保留追究责任的权利。
  • 成都岷山功率半导体技术研究院正式开业 成都岷山功率半导体技术研究院由台积电前高管张帅博士牵头,团队成员包括原IBM半导体微电子部副总裁及前软银资本投资副总裁白杰先、功率半导体国际著名专家张波等,具备将工艺技术、器件结构、版图设计、器件模型开发、产品设计和系统应用完美结合的能力,依托四川省功率半导体技术工程研究中心……
  • 半导体产业迈入“复杂化时代”, 降本增效成测试行业新 从“功能化时代”到“资本效率时代”,再到“复杂化时代”,半导体行业的巨大转变,给ATE测试行业在测试时间和良率两方面带来了巨大的挑战。
  • 加速5G基础设施部署的测试解决方案 目前,第五代移动网络(5G)正在全球范围内不断推进部署,各种新业务可用性越来越高,不仅提升了用户体验,并且支持多种极具挑战性的应用。不过重要的是要认识到,5G网络不仅仅是对4G技术的性能提升(在上传和下载速度方面),也不是对现有标准和协议的简单升级。
  • 【ICCAD 2021】国内外EDA厂商谈AI用于芯片设计、EDA上 国内外EDA厂商们,对于在设计验证中采用AI技术,抱什么样的态度,又是如何行动的呢?在日前举办的中国集成电路产业设计年会(ICCAD 2021)上,新思科技、Cadence、国微思尔芯和鸿芯微纳等EDA企业高层接受了《电子工程专辑》等媒体的采访,除了AI的应用,大家还就EDA上云、3D IC等热点话题进行了探讨。(首图来源:4 Key Considerations When Evaluating EDA in the Cloud,Synopsys Blog)
  • 科技行业是不是该把“在家办公”变为常态? 2021年12月以来,西安市的疫情牵动着全国人民的心,从12月23日到1月5日期间,已确诊病例总数1691名。而今日(1月7日),上海又发现本地病例3名,深圳发现2名。加上期间浙江宁波、金华、河南禹州等地的零星疫情,让科技业者开始思考:是不是该把远程办公变为常态?无论未来是否让劳工分阶段返回办公室、坚持远距工作,或介于两者之间,科技巨头们其实已在考虑为远距工作的劳动力订定更长远的计划...
  • 面向智能应用的长寿命体积小检测开关 自2014年以来,物联网(IoT)技术的实施使智能联网设备在广阔的市场中吸引了众多的关注。许多智能家居技术正在驱动被动、未联网的设备向主动的联网设备过渡。无论是在家中还是在路途中,智能家居设备都可以为联网设备提供高级控制,从而简化人们的生活并提供更丰富的功能。
  • 新款iPad Pro 2021成最受欢迎的 由于采用性能相对强大的M1处理器和mini-LED屏幕以及更多的创新,新款iPad Pro 2021已经成为消费者心目中最受欢迎。然而,iPad 2却已经在全球范围内被列入“复古和过时”的名单中。
  • 三星折叠屏手机Galaxy Z Fold 3 目前来看,折叠屏新机作为一种新的生产力工具,逐渐成为高端/平板的一种趋势,有报料称三星的Galaxy Z Fold 3发布时间或为7月,并且会引入新手势操控。

  • 5G基站数破百万,高通助力手机品牌成 1月20日,5G发展迎来又一里程碑——工信部宣布,截至2021年年底,中国5G手机终端连接数达5.18亿户。这相当于自5G牌照发放之日起,平均每天新增入网手机达54万部之多。
  • SXSW多元创新大会公布2022年入围名 全球三大创新大会之一的SXSW多元创新大会公布创新奖入围名单,Velodyne Lidar智能基础设施解决方案获得智慧城市、交通运输两项创新大奖的认可。
广告
热门推荐
广告
广告
广告
EE直播间
在线研讨会
广告
广告
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了