2012-07-19 271 views
1

任何人都可以请告诉我如何在ARM处理器上执行代码覆盖率分析吗?BullsEye代码覆盖范围

我可以通过编写测试用例并在我的计算机上运行测试用例来进行代码覆盖率分析,但可以在目标设备(arm处理器)上安装代码覆盖率工具来执行覆盖率分析,而代码在手臂处理器上运行?

这样可以节省很多时间,因为我不会为嵌入式C代码中涉及的所有函数和条件明确编写测试用例。

+1

所以你的问题没有什么特别与“牛眼”有关。 – 2012-07-19 12:19:10

+1

......您如何避免为嵌入式程序中的“所有功能和条件”编写测试用例? *您在哪里测试该程序不会改变您必须测试的内容。 – 2012-07-19 12:21:30

+0

不,它确实与BullsEye有关,因为它是我用于脱离目标测试环境的代码覆盖工具。如果我可以在目标测试期间将其整合,我将能够实时测试覆盖率,而无需编写测试案例,我可以模拟实时场景。 – gmish27 2012-07-19 15:43:11

回答

2

我没有具体的手臂经验。我有经验(作为嵌入式测试覆盖工具的设计者)如何在嵌入式系统中收集测试覆盖率数据。

您需要:

  • 一个工具,它收集运行测试覆盖率数据在一个紧凑的格式,以简单和容易定位结构,嵌入式系统。
  • 一些额外的空间在您的嵌入式系统,足以容纳运行时测试覆盖率数据。在一些空间有限的嵌入式系统中,这可能是一个问题。
  • 一种导出机制,可以在方便的时刻将数据从嵌入式系统复制到开发系统。
  • 在工具的导入机制,可以接受这样的出口数据

有了这三个要素,你现在可以收集测试覆盖率数据:

  1. 仪器,你的代码的基础上开发系统并编译它。
  2. 将目标文件导出到嵌入式系统。
  3. 运行嵌入式应用程序,执行测试以任何方式您认为合适的
  4. 出口的覆盖率数据开发系统
  5. 导入到测试覆盖率工具来解释结果。

我不能说“牛眼”,它确实会做某种仪器。我们的Test Coverage tools涵盖了各种语言(Java,C,C#,C++等),并具有所有必需的属性(尽管我无法想象嵌入式PL/SQL应用程序!)。

我们的工具将测试覆盖数据存储为紧密排列的布尔型字节/位矢量(您为C和C++选择,其他语言的字节矢量)的密集块。这可以最大限度地减少嵌入式系统上的额外存储需求。即使这样做太多了,我们的工具也可以让您收集应用程序中较小部分的测试覆盖率数据,并将结果组合起来,为整个嵌入式应用程序提供测试覆盖率。您可以作为折衷运行多次测试,但您至少可以做到这一点,而脚本可以帮助缓解步骤的乏味。

我们并不规定如何从嵌入式系统导出测试覆盖矢量(TCV),因为这会限制我们的工具可以处理的系统。我们提供了一个“标准”导出功能,只需将矢量块直接写入开发系统磁盘文件;在开发系统本身进行测试覆盖收集时(如您已经表明您已经在某种程度上已经在做),那么该出口系统将保持不变。导出功能被添加到,编译/链接到检测的应用程序以启用使用。通常在程序退出时调用它,但是您可以在应用程序的任何方便的位置调用它,包括由外部事件触发的点。该工具包含一个交互式组件,它将读取这些文件并构造摘要报告,并以交互方式向您展示哪些代码已被执行/未执行。

在嵌入式上下文中,使用您自己的替换导出函数。它只有大约50行代码,所以没有太多可替代的东西。在大多数嵌入式系统中,都有可用的额外I/O端口(并行输出位,串行端口,您将其命名);一个代码将检测二进制测试覆盖数据的例程编码到该输出位。任何嵌入式工程师都可以编写一个位串行器或一个发送字节到串行端口的代码块,而不会有任何问题。此时,测试覆盖数据可以从嵌入式系统输出。 如果您的嵌入式系统具有文件系统,那么对代码所做的更改如果不是不存在,那么也是微不足道的。

最后一步是以捕获这个比特流。这需要在开发系统上构建一个定制程序,该程序读取一些可用的硬件输入(串行端口很容易找到,因此很受欢迎),并在内存中重新生成测试覆盖率数据的位图。可以通过稍微更改将默认导出功能复制到自定义程序中,以将此数据移动到磁盘文件。在这一步之后,测试覆盖交互组件可以读取覆盖数据;它并不关心它来自哪里。

因此,通过一些自定义的导出过程,您可以在几乎任意的嵌入式上下文中使用我们的工具。 (我们有一位客户用它来测试嵌入在笔记本电脑电池中的微处理器!)。需要花费大约一天的时间,一名有能力的嵌入式工程师可以调整导出功能的嵌入式版本以及开发系统驻留部分,然后您可以收集测试内容以查看您心中的内容。我们的客户已经使用我们的C,C++,C#和Java测试覆盖工具在嵌入式系统上实现了这项技术。