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