许多 软件 开发 人员 测量 嵌入式 系统 中 的 代码 覆盖 率 使用 的 测试 系统 与 其 原始 设计 非常 不同。工程师知道这是一种糟糕的方法,但它很容易发生。就像沸腾的青蛙寓言一样,不被注意的增量温度变化会导致可怜的青蛙死亡。..。..
让我们探讨一下软件开发人员的困境。
代码覆盖率通常发生在开发过程的后期。此时,硬件和软件都针对成本进行了优化,系统紧密满足了指定的要求。在此阶段开始代码覆盖率分析通常意味着将“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文章
19123浏览量
305122 -
测试系统
+关注
关注
6文章
822浏览量
62129 -
MPLAB
+关注
关注
9文章
215浏览量
66882
发布评论请先 登录
相关推荐
评论