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编译器的免费版和专业版,并可作为工作站许可证提供。

审核编辑:郭婷

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

    关注

    5082

    文章

    19108

    浏览量

    304836
  • 测试系统
    +关注

    关注

    6

    文章

    818

    浏览量

    62115
  • MPLAB
    +关注

    关注

    9

    文章

    215

    浏览量

    66864
收藏 人收藏

    评论

    相关推荐

    一文详解Modelsim代码覆盖率功能使用

    作者:默宸  Modelsim代码覆盖率功能Code coverage,能报告出statement(语句)、branch(分支)、condition(条件)、expression(表达
    的头像 发表于 12-09 11:45 5805次阅读

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

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

    怎么用Vivado做覆盖率分析

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

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

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

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

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

    Verilog代码覆盖率检查

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

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

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

    嵌入式代码覆盖率如何进行统计有哪些方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程已检查的程序源代码比例 计算得出。代码覆盖率
    的头像 发表于 01-09 11:12 3070次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>如何进行统计有哪些方法和经验

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

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

    怎么才能写出高覆盖率的Verilog代码

    芯片前端工程,测试验证的核心理念:以提高覆盖率为核心。设计工程师需要关心的主要有行覆盖率(Block),条件覆盖率(Expression),翻转
    的头像 发表于 06-01 10:13 2622次阅读

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

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

    如何使用覆盖率指标进行更有效的嵌入式软件测试

      声明、决策或 MC/DC 覆盖率等指标并不能保证软件没有缺陷。如前所述,真正详尽的测试可能是不可能的,或者至少是不可行的。然而,结构覆盖率度量可以更好地了解代码的可靠性和对测试的更大信心。
    的头像 发表于 06-29 10:20 1544次阅读

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

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

    代码覆盖率工具的重要性

    测试覆盖率是软件质量的重要指标,也是软件维护的重要组成部分。它通过提供不同承保项目的数据来帮助评估测试的有效性。这种洞察力允许通过为未经测试的代码定义新的测试用例来改进测试,从而提高代码质量,最终增加
    的头像 发表于 12-08 15:13 1459次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>工具的重要性

    代码覆盖率记录

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