0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

陆军航空兵 来源:陆军航空兵 作者:陆军航空兵 2022-07-20 18:06 次阅读

为了开发安全可靠的软件,测试是质量保证不可或缺的一部分。如果没有充分的记录测试,就不可能确定软件是否安全且功能是否正确。在这种情况下,代码覆盖率(测试覆盖率)的测量尤为重要。这是因为它可以用来确定一个软件已经被测试的全面程度。代码覆盖率表示测试代码与总代码的比率。简而言之,例如,如果在测试期间运行四分之三的可能选项,则代码覆盖率为 75%。

特别是在安全关键型软件开发中,行业标准对代码覆盖率规定了精确的要求,因此如果没有足够的测试覆盖率证明,产品就无法在此处进行认证。而且在其他开发项目中,公司也越来越重视软件质量和衡量代码覆盖率。

市场上有各种代码覆盖率分析仪可用于测量代码覆盖率。它们在处理和质量方面存在显着差异。出于这个原因,我们展示了选择代码覆盖工具的十个基本标准:

1. 独立于编译器

当然,代码覆盖工具必须与项目中使用的编译器配合使用。但是,从一开始就依赖于可以独立于编译器使用的工具是很有意义的。这样的工具可以在所有项目中使用,在编译器更改的情况下也可以在当前项目中使用。可以独立于编译器使用的覆盖工具可以以更多样化的方式使用,因此是值得投资的。

2. 易用性

如果最好的软件不必要地复杂或没有经过深思熟虑,则不情愿地(因此很少)使用它。另一方面,简单的处理可以显着提高用户对使用测试覆盖工具的接受度。理想情况下,该工具在后台运行,并且在测试期间不会为用户生成任何额外的工作。

3. 报道的可理解性

在评估覆盖率报告时,应该一目了然地知道哪些代码部分已经过测试,哪些地方仍然缺乏覆盖率。使用良好的覆盖率工具,测试人员可以轻松地在源代码级别识别哪些测试用例仍然出色。通过执行这些缺失的测试,可以有针对性地增加代码覆盖率。同时,这避免了因冗余测试而导致的不必要的工作。

poYBAGLO7YSAe2AlAAMJY_ah8x0377.jpg


图:除了单个代码部分的代码覆盖率概述(上),有效的代码覆盖率工具(如 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

    文章

    4557

    浏览量

    66866
  • 覆盖
    +关注

    关注

    0

    文章

    18

    浏览量

    10916
收藏 人收藏

    评论

    相关推荐

    怎么用Vivado做覆盖率分析

    在做仿真的时候往往会去做代码覆盖率和功能覆盖率的分析,来保证仿真是做的比较充分完备的。
    的头像 发表于 01-03 12:34 604次阅读
    怎么用Vivado做<b class='flag-5'>覆盖</b>率分析

    如何为10G网络选择合适的超六类网线

    需要考虑网络的带宽需求。10G网络需要支持10Gbps的传输速度。超六类网线是一种高性能的网线标准,能够支持10Gbps的传输。不过,不同的超六类网线在实际应用中的性能可能会有所差别。
    的头像 发表于 12-27 10:56 426次阅读

    10kv一次消谐器如何选择

    在电力系统中,10kV一次消谐器是保护电力设备的重要工具选择合适的消谐器能够有效地避免谐波对电力设备的影响,提高设备运行效率。那么,如何选择10
    的头像 发表于 12-05 09:22 212次阅读

    代码覆盖率记录

    为确保具体的产品(例如,医疗或航空电子市场)质量合格, 通常需要提供语句覆盖与判定覆盖认证证明。对于各种嵌 入式系统,规范要求高度优化的代码需要实时测试。禁止 代码插装和运行时篡
    发表于 11-03 11:02 0次下载
    <b class='flag-5'>代码</b><b class='flag-5'>覆盖</b>率记录

    使用VectorCAST MATLAB Toolbox获取代码覆盖度的基本步骤

    程序与硬件的交互。在SIL或PIL验证的过程中,可以使用VectorCAST MATLAB Toolbox来捕获代码覆盖数据,从代码覆盖的角度体现SIL/PIL验证的充分性。
    的头像 发表于 10-26 11:06 491次阅读
    使用VectorCAST MATLAB Toolbox获取<b class='flag-5'>代码</b><b class='flag-5'>覆盖</b>度的基本步骤

    软件代码结构化覆盖测试-分支覆盖

    本篇我们介绍分支覆盖,从测试技术对代码的测试程度上来说,在复杂代码中,分支覆盖比语句覆盖效果要好。
    的头像 发表于 09-01 11:34 402次阅读
    软件<b class='flag-5'>代码</b>结构化<b class='flag-5'>覆盖</b>测试-分支<b class='flag-5'>覆盖</b>

    软件代码结构化覆盖测试-语句覆盖

    本篇将深入到代码层面,讲解单元测试中的一项重要工作-软件代码测试。
    的头像 发表于 08-25 11:50 392次阅读
    软件<b class='flag-5'>代码</b>结构化<b class='flag-5'>覆盖</b>测试-语句<b class='flag-5'>覆盖</b>

    基于C++代码实现内存泄漏检测工具

    看到的一个文章,有人用一个很简短的代码实现了内存检测工具,大家看看实用性如何?
    发表于 08-21 10:11 291次阅读
    基于C++<b class='flag-5'>代码</b>实现内存泄漏检测<b class='flag-5'>工具</b>

    Vivado仿真器和代码覆盖率简析

    编写 HDL 通常是 FPGA 开发中耗时最少的部分,最具挑战性和最耗时的部分可能是验证。根据最终应用程序,验证可能非常简单,也可能非常复杂,简单的话只需对大多数功能进行检查或执行完全独立开发的测试平台来演示功能和代码覆盖率。
    的头像 发表于 08-03 09:23 1299次阅读
    Vivado仿真器和<b class='flag-5'>代码</b><b class='flag-5'>覆盖</b>率简析

    优化Python代码有哪些工具

    代码。 1. Jupyter Notebook:这个交互式笔记本工具允许您在浏览器中编写和运行Python代码,并以文档形式保存。Jupyter Notebook使得代码的测试和实验更
    的头像 发表于 07-24 09:28 900次阅读

    什么是静态代码分析?静态代码分析概述

    静态分析可帮助面临压力的开发团队。高质量的版本需要按时交付。需要满足编码和合规性标准。错误不是一种选择。 这就是开发团队使用静态分析工具/源代码分析
    的头像 发表于 07-19 12:09 946次阅读
    什么是静态<b class='flag-5'>代码</b>分析?静态<b class='flag-5'>代码</b>分析概述

    如何应用编码标准和自动化工具 提高代码质量

    本文将介绍如何应用编码标准和自动化工具,提高代码质量。
    的头像 发表于 07-08 10:59 305次阅读
    如何应用编码<b class='flag-5'>标准</b>和自动化<b class='flag-5'>工具</b> 提高<b class='flag-5'>代码</b>质量

    分享一些Python代码加速工具

    这篇文章会提供一些优化代码工具。会让代码变得更简洁,或者更迅速。
    发表于 07-07 11:18 260次阅读

    选择合适的Wolfspeed设计工具

    电力电子系统设计是一个复杂的工程问题。传统上,克服相关挑战需要主题专家进行耗时的分析。幸运的是,工程师们可选择各种现代工具,显著加快设计过程并优化结果。这些工具涵盖软件模拟工具(如 P
    的头像 发表于 05-24 10:36 801次阅读
    <b class='flag-5'>选择</b>合适的Wolfspeed设计<b class='flag-5'>工具</b>

    代码覆盖检测

    1 代码覆盖率概述 覆盖率(code coverage rate)是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况的重要指标。在
    的头像 发表于 05-12 22:26 2494次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>覆盖</b>检测