gpt4 book ai didi

c - BullsEye代码覆盖率

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:11 25 4
gpt4 key购买 nike

有人能告诉我如何在arm处理器上执行代码覆盖率分析吗?
我可以通过编写测试用例并在我的计算机上运行它们来进行代码覆盖率分析,但是,在目标设备(arm处理器)上不安装代码覆盖率工具的情况下,当代码在arm处理器上运行时,是否有可能执行覆盖率分析?
这将节省很多时间,因为这样我就不会为嵌入的C代码中涉及的所有函数和条件显式地编写测试用例。

最佳答案

我对手臂没有特别的经验。我确实有在嵌入式系统中收集测试覆盖率数据的经验(作为嵌入式测试覆盖率工具的设计者)。
您需要以下信息:
一种工具,它以一种紧凑的格式,在嵌入式系统中以一种简单且易于定位的结构来收集运行时测试覆盖率数据。
嵌入式系统中的一些额外空间,足以容纳运行时测试覆盖率数据。在一些空间极其有限的嵌入式系统中,这可能是一个问题。
一种导出机制,可以在方便的时候将数据从嵌入式系统复制到开发系统。
工具中的一种导入机制,可以接受这种导出的数据
有了这三个元素,您现在可以收集测试覆盖率数据:
根据开发系统编写代码并编译它。
将对象文件导出到嵌入式系统。
运行嵌入式应用程序,以任何合适的方式执行测试
将覆盖范围数据导出到开发系统
导入到测试覆盖工具以解释结果。
我不能说“斗牛眼”,它确实做了某种仪器。我们的Test Coverage tools覆盖了多种语言(Java、C、C、C、C++等),并具有所有必要的属性(尽管我很难想象嵌入的PL/SQL应用程序!).
我们的工具将测试覆盖数据存储为密集填充的布尔字节/位向量(C和C++的选择,其他语言的字节向量)的密集块。这样可以最大限度地减少对嵌入式系统的额外存储需求。即使这太多,我们的工具也会让您收集应用程序中较小部分的测试覆盖率数据,并将结果组合起来,为整个嵌入式应用程序提供测试覆盖率。作为折衷,您可以运行多个测试,但至少可以这样做,而脚本可以帮助您减轻步骤的繁琐。
我们不指定如何从嵌入式系统导出测试覆盖向量(TCV),因为这将限制我们的工具可以处理哪些系统。我们提供了一个“标准”导出函数,它只需将向量块直接写入开发系统磁盘文件;在开发系统本身上执行测试覆盖率收集时(正如您已经在某种程度上表明您已经在执行的那样),该导出系统将不加更改地使用。导出函数将添加到插入指令的应用程序中,并与之编译/链接以启用使用。通常它在程序出口处被调用,但是您可以在应用程序中的任何方便点对它进行调用,包括由外部事件触发的点。该工具包含一个交互式组件,该组件将读取此类文件并构建摘要报告,并以交互方式显示已执行/未执行的代码。
在嵌入式上下文中,可以用自己的函数替换导出函数。它只有大约50行代码,所以没有太多可替换的代码。在大多数嵌入式系统上都有可用的额外I/O端口(并行输出位、串行端口,你可以命名它);其中一个代码是将二进制测试覆盖率数据感测到此输出位的例程。任何嵌入式工程师都可以编写一个位序列化器或一个发送字节到串行端口的代码块,而不会有什么麻烦。此时,可以从嵌入式系统导出测试覆盖率数据。
如果您的嵌入式系统有一个文件系统,那么如果不存在的话,代码的更改是很小的。
最后一步是捕获这个比特流。这需要在开发系统上构建一个运行的自定义程序,读取一些可用的硬件输入(很容易找到串行端口,因此这很流行),并在内存中重新生成测试覆盖率数据的位图像。默认导出函数可以复制到自定义程序中,只需稍作更改即可将此数据移动到磁盘文件中。在这一步之后,测试覆盖率交互组件可以读取覆盖率数据;它并不真正关心它来自哪里。
因此,通过对导出过程进行一些自定义,您可以在非常任意的嵌入上下文中使用我们的工具。(我们有一个客户使用它来测试嵌入笔记本电池的微处理器!)。需要一个称职的嵌入式工程师一天左右的时间来修改导出功能的嵌入式版本和开发系统常驻部分,然后您就可以心满意足地收集测试覆盖率。
这项技术已经由我们的客户用我们的C,C++,C语言和Java测试覆盖工具来实现。

关于c - BullsEye代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11554308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com