为了开发安全可靠的软件,测试是质量保证不可或缺的一部分。如果没有充分的记录测试,就不可能确定软件是否安全且功能是否正确。在这种情况下,代码覆盖率(测试覆盖率)的测量尤为重要。这是因为它可以用来确定一个软件已经被测试的全面程度。代码覆盖率表示测试代码与总代码的比率。简而言之,例如,如果在测试期间运行四分之三的可能选项,则代码覆盖率为 75%。
特别是在安全关键型软件开发中,行业标准对代码覆盖率规定了精确的要求,因此如果没有足够的测试覆盖率证明,产品就无法在此处进行认证。而且在其他开发项目中,公司也越来越重视软件质量和衡量代码覆盖率。
市场上有各种代码覆盖率分析仪可用于测量代码覆盖率。它们在处理和质量方面存在显着差异。出于这个原因,我们展示了选择代码覆盖工具的十个基本标准:
1. 独立于编译器
当然,代码覆盖工具必须与项目中使用的编译器配合使用。但是,从一开始就依赖于可以独立于编译器使用的工具是很有意义的。这样的工具可以在所有项目中使用,在编译器更改的情况下也可以在当前项目中使用。可以独立于编译器使用的覆盖工具可以以更多样化的方式使用,因此是值得投资的。
2. 易用性
如果最好的软件不必要地复杂或没有经过深思熟虑,则不情愿地(因此很少)使用它。另一方面,简单的处理可以显着提高用户对使用测试覆盖工具的接受度。理想情况下,该工具在后台运行,并且在测试期间不会为用户生成任何额外的工作。
3. 报道的可理解性
在评估覆盖率报告时,应该一目了然地知道哪些代码部分已经过测试,哪些地方仍然缺乏覆盖率。使用良好的覆盖率工具,测试人员可以轻松地在源代码级别识别哪些测试用例仍然出色。通过执行这些缺失的测试,可以有针对性地增加代码覆盖率。同时,这避免了因冗余测试而导致的不必要的工作。
图:除了单个代码部分的代码覆盖率概述(上),有效的代码覆盖率工具(如 Testwell CTC++)还显示详细信息(下),准确显示测试覆盖源代码的程度,即使是最高覆盖率。(来源:Verifysoft Technology)
4. 为安全关键型开发提供更高覆盖水平的支持
对于安全关键软件的测试,标准(例如汽车领域的 ISO 26262、航空领域的 DO-178C 和铁路运输领域的 EN-50128)规定了最高 MC/DC 覆盖范围的高覆盖水平。因此,必须确保覆盖工具支持所有必需的覆盖级别。为了能够长期使用解决方案,不仅要考虑当前的需求,还要考虑未来的需求。重要提示:许多覆盖工具仅提供决策或分支覆盖,因此不足以进行安全关键型软件开发。
代码覆盖率一览
函数覆盖率
函数覆盖率衡量程序的所有函数是否都被调用。功能覆盖率是通常测试覆盖率级别中“最弱的”。
语句覆盖率
语句覆盖率衡量测试语句与所有语句相比的百分比。
决策覆盖率/分支覆盖率
在此覆盖率级别,每个决策必须至少测试一次为真,一次为假。对于普通的 if 语句,这对应于分支覆盖,其中每个分支都必须已执行。
条件覆盖
条件覆盖详细考虑复合决策。对于由通过布尔运算符组成的多个原子条件组成的决策,必须将这些条件中的每一个单独测试为“真”和“假”。
多条件覆盖和修正条件/决策覆盖 (MC/DC)
对于多条件覆盖,必须检查所有可能的真假组合以进行复合决策。在一个决策中有多个条件的情况下,这需要大量几乎不切实际的测试用例。因此,在实践和标准中,修改后的条件/决策覆盖率 (MC/DC) 是相关的,其中测试用例的数量减少了,而测试覆盖率的信息价值仍然足够高。
5. 灵活集成
即使在公司内部,开发环境和工具链通常也非常多样化。覆盖工具应该可以轻松应对所有这些不同的环境。必须能够无缝地集成到各自的构建过程和测试的执行中,并且无需付出很大的努力。如果该工具也可以通过命令行使用,则在创建自动构建方面具有优势。
6. 低仪表开销
大多数覆盖率工具通过检测源代码来衡量代码覆盖率。源代码由带有“计数器”的覆盖工具丰富,它计算相关代码部分在测试期间执行的位置和频率。但是,这会增加原始代码的大小。因此,在内存有限的嵌入式目标上进行测试时,应注意将这种所谓的检测开销保持在尽可能低的水平。各个代码覆盖工具之间的内存需求差异有时是相当大的。例如,Verifysoft Technology 的代码覆盖率分析器 Testwell CTC++ 在这方面非常节省资源。
7.支持不同的编程语言
公司经常使用不同的编程语言或计划在未来引入其他语言。因此,从一开始就选择支持所有或尽可能多的这些语言的工具是有意义的。
8. 支持“创意”编程
一些覆盖工具在分析偏离通用标准或嵌套深度较高的语言结构时会遇到问题。然而,衡量测试覆盖率的好工具也应该能够应对“创造性”的编程风格。
9. 安全关键软件开发的适用性
在开发安全关键型软件时,相关标准要求整个工具链必须经过认证。这里的目的是证明覆盖分析器和整个工具链中使用的其他工具都能可靠地工作。专业代码覆盖工具的制造商通过鉴定工具包和工具鉴定建议支持软件项目。在这种情况下,还应注意所选的覆盖工具是否已在安全关键项目中成功使用。
10. 评估许可、技术支持和客户参考
应在工具评估期间检查覆盖工具对自己项目的适用性。在此期间,您已经对技术支持的表现有所了解。是否也可以通过电话或仅通过电子邮件获得支持?支持人员的能力如何?响应时间呢?用户手册有多好和实用?制造商是否也提供培训?最后但同样重要的是,还建议查看制造商的客户参考资料。这些可以提供有关覆盖分析仪质量和供应商性能的更多信息。
结论
代码覆盖对于安全关键型软件开发来说是强制性的,这是有充分理由的。但对于任何想要提高软件质量的人来说,这也是衡量和增加测试覆盖率和价值的好方法。在选择代码覆盖率分析器时,必须注意确保该工具满足设定的要求。此外,易用性和专业支持等因素也起着重要作用。正确使用,一个好的测试覆盖工具有助于显着提高质量,增加开发人员和测试人员的积极性,并以节省成本的方式执行测试。
审核编辑 黄昊宇
-
代码
+关注
关注
30文章
4742浏览量
68330 -
覆盖
+关注
关注
0文章
18浏览量
10938
发布评论请先 登录
相关推荐
评论