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

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

3天内不再提示

测量嵌入式系统中的代码覆盖率

星星科技指导员 来源:microchip 作者:microchip 2023-04-23 10:50 次阅读

许多 软件 开发 人员 测量 嵌入式 系统 中 的 代码 覆盖 率 使用 的 测试 系统 与 其 原始 设计 非常 不同。工程师知道这是一种糟糕的方法,但它很容易发生。就像沸腾的青蛙寓言一样,不被注意的增量温度变化会导致可怜的青蛙死亡。..。..

让我们探讨一下软件开发人员的困境。

代码覆盖率通常发生在开发过程的后期。此时,硬件和软件都针对成本进行了优化,系统紧密满足了指定的要求。在此阶段开始代码覆盖率分析通常意味着将“printf”语句或某种类型的串行传输代码添加到代码的每个功能中,以便微控制器可以说“程序计数器= X”。在整个项目中添加这些代码段后,代码资源要求通常会超过成本优化控制器的限制。一种替代方法是用更大的内存变体替换微控制器(希望在同一封装中提供一种)。执行速度可能会因额外的代码而陷入困境,因此也许可以提高MCU时钟速度以提高系统性能?

该设备还需要一个通信通道来输出信息。需要电线来拼接通信端口和收发器,以便计算机捕获输出流。如果没有额外的引脚可用,则需要一块新板来容纳引脚数更高的微控制器。或者,所需的功能可以替换为代码覆盖例程,这需要多个软件版本来测试块中的代码。

现在,代码覆盖功能已经(痛苦地)添加,生成的数据日志文件非常庞大,笨拙,难以与原始源代码相关联。任何 注重 质量 的 开发 人员 都会 问 “这个 测试 系统 如何 代表 原始 设计?

让我们来看看代码覆盖率的优点和局限性,MPLAB®代码覆盖率的工作原理,以及如何使用它来衡量嵌入式系统中的代码覆盖率。

优点和局限性

适当的测试方法对于开发强大的嵌入式系统至关重要,正确使用代码覆盖率工具是确保测试完成工作的唯一方法。明智的代码开发人员明白“未经测试的代码是损坏的代码”。任何经历过产品召回的人都了解代码覆盖率对提高产品质量带来的价值。

具有最低代码覆盖率要求的代码开发人员通常会惊讶于其初始代码覆盖率结果的低。编写涵盖特定流的测试代码也可能非常困难。使用需要对原始设计进行大量修改的工具会使这项工作进一步复杂化。

代码覆盖率是一个看似简单的等式:

执行

的代码量 ______ 代码

总量 一个精明的工程师用 C 编写嵌入式代码,或者C++知道他们的代码编译成汇编代码,可能会问:“计算哪个代码?这是一个需要理解的重要问题,因为答案因工具提供商而异,并且会显著影响此等式的结果。我们l 在本博客后面介绍 MPLAB 代码覆盖率实现。

一个常见的误解是,覆盖率为 100% 的代码比覆盖率为 95% 的代码“更好”。代码覆盖率百分比指示测试套件对应用程序的执行程度。它没有指示代码效率低下、缺少功能、性能或正确性。

将测试方法与代码覆盖率工具区分开来也很重要。在互联网上搜索,您可以找到声称语句覆盖率、函数覆盖率、分支覆盖率、MC/DC 等的代码覆盖率工具。这些类型的描述可能会令人困惑,因为供应商正在使用测试方法术语来描述其代码覆盖率工具。这是两个不同的概念。分支覆盖或 MC/DC 等测试方法描述了如何执行源代码。相反,代码覆盖率工具确定执行了哪些机器指令。由于一行高级源代码可以生成多个机器指令,因此该工具可以将一行源代码指示为完全或部分执行或根本不执行。

MPLAB 代码覆盖

率的工作原理

对于初学者来说,MPLAB 代码覆盖率专为小型嵌入式系统而设计。它很特别,因为它利用了只有MPLAB XC编译器才能掌握的有关您项目的知识。没有工具比编译器更了解您的代码。由于Microchip制造了我们自己的编译器,因此我们的代码覆盖率工具可以利用这些信息。

我们的编译器知道所需的最小检测点数量以及放置它们的位置,以最大程度地减少对代码大小和性能的影响。我们的编译器还知道有多少数据存储器可用,并以最佳方式使用它来存储运行时信息。我们的分析表明,我们的MPLAB代码覆盖率工具使用的检测点是竞争产品的一半到三分之一。而且由于它仅使用单个位集指令作为标记,因此与基于“printf”指令的竞争对手解决方案的比较并不接近。MPLAB 代码覆盖率的影响非常小,通常为 《1%,以至于我们找不到无法使用其原始硬件执行分析的项目。

MPLAB 代码覆盖率具有用于导航结果的便捷工具。每一行源代码和汇编指令都被标记为完全或部分执行或根本不执行。为了澄清这个问题,我们的工具分析了汇编指令级别的覆盖范围。因此,覆盖率信息在汇编的MPLAB X集成开发环境(IDE)程序内存窗口中本机显示,但也被吸收以在源代码窗口中显示各种级别的执行。支持源代码和汇编指令代码之间的快速跳转,以快速评估部分覆盖的代码。

显示单个文件和函数以及项目级别的代码覆盖率。可以轻松打开和关闭突出显示,以便于阅读。仪表板跟踪代码覆盖率进度,只需按一下按钮即可生成 HTML 报告。最重要的是,MPLAB代码覆盖率完全集成到Microchip的MPLAB X IDE中,可在工具之间轻松切换任务,并在可配置的输出窗口中显示结果。

轻松测量嵌入式系统中

的代码覆盖率

MPLAB 代码覆盖率是市场上最简单的代码覆盖率工具,只需在 MPLAB X IDE 中启用它,然后构建、编程、练习和读取您的设备。

该工具巧妙地使用数据存储器来存储已解码并在 IDE 中显示的覆盖范围信息。这个过程非常独特,受美国专利号10402309保护。它支持Microchip的所有PIC,SAM,AVR和DSPIC产品,适用于MPLAB XC编译器的免费版和专业版,并可作为工作站许可证提供。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288465
  • 测试系统
    +关注

    关注

    6

    文章

    751

    浏览量

    61782
  • MPLAB
    +关注

    关注

    8

    文章

    213

    浏览量

    66348
收藏 人收藏

    评论

    相关推荐

    测量嵌入式软件的代码覆盖率

    度还是从功能安全角度。 对于安全可靠的嵌入式设备,测试是质量保证不可或缺的一部分。 安全关键型软件开发标准对测试方法和测试覆盖率设定了精确要求,这并非没有道理。 通常,应用程序越关键,对代码
    发表于 07-14 14:50 1114次阅读
    <b class='flag-5'>测量</b><b class='flag-5'>嵌入式</b>软件的<b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>

    如何改善5G覆盖率

    改善5G覆盖率的方法
    发表于 12-15 07:52

    如何提高DFT设计测试覆盖率

    提高DFT设计测试覆盖率的有效方法是什么
    发表于 05-07 06:37

    怎么提高非随机图形设计的故障覆盖率

    怎么提高非随机图形设计的故障覆盖率?为LBIST设计提高故障检测能力的技术是什么?
    发表于 05-08 07:11

    如何对嵌入式软件进行覆盖测试?

    嵌入式软件的覆盖测试原理是什么?嵌入式实时操作系统覆盖测试工具是什么?Logiscope在嵌入式
    发表于 05-13 07:30

    嵌入式仿真平台SkyEye的覆盖率分析相关资料下载

    代码执娜行覆盖情况的功能,来检测代码未执行覆盖情况。在覆盖率分析时需要分析
    发表于 12-17 07:27

    关于SpinalHDL的验证覆盖率收集简单说明

    在做RTL仿真验证时,覆盖率收集往往是我们在验证需要注意的地方,本篇就SpinalHDL的验证覆盖率收集做一个简单说明。sbt配置在SpinalHDL里进行仿真验证时,我们的待测试
    发表于 06-24 15:56

    重点厘清覆盖率相关的概念以及在芯片开发流程中跟覆盖率相关的事项

    全盘考量。而覆盖率,就是芯片工程,评审体系需要重点参考的一项技术指标,但也只是验证相关的其中一项。目前被业界广泛采用的覆盖率指标有功能覆盖率(Function Coverage)和
    发表于 09-14 11:57

    Systemverilog覆盖率的合并和计算方式

      在systemverilog,对于一个covergroup来说,可能会有多个instance,我们可能需要对这些instance覆盖率进行操作。  只保存covergroup type的覆盖率
    发表于 03-21 14:24

    Verilog代码覆盖率检查

    Verilog代码覆盖率检查是检查验证工作是否完全的重要方法,代码覆盖率(codecoverge)可以指示Verilog代码描述的功能有多少
    发表于 04-29 12:35 7945次阅读

    嵌入式代码覆盖率统计方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中已检查的程序源代码比例计算得出。代码覆盖率可以有效避免包含未测试
    的头像 发表于 01-06 15:06 2839次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>统计方法和经验

    统计嵌入式代码覆盖率的方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中已检查的程序源代码比例计算得出。代码覆盖率可以有效避免包含未测试
    的头像 发表于 03-29 11:58 1611次阅读
    统计<b class='flag-5'>嵌入式</b><b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>的方法和经验

    覆盖率的Verilog代码的编写技巧

    设计工程师需要关心的主要有行覆盖率(Block),条件覆盖率(Expression),翻转覆盖率(Toggle),状态机覆盖率。本文从ASIC设计的角度上来讨论,如何写出高
    的头像 发表于 05-26 17:30 3718次阅读

    更好地测量代码覆盖率的 9 个技巧

    测量代码覆盖率对于嵌入式系统来说越来越重要,但需要一些经验。这是因为有一些障碍需要克服,尤其是小目标。但是,使用正确的方法和合适的工具,无需
    的头像 发表于 07-14 15:58 2412次阅读
    更好地<b class='flag-5'>测量</b><b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>的 9 个技巧

    代码覆盖率记录

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