Testing 嵌入式C+的代码覆盖率分析+;项目 我最近开始研究一个非常大的C++项目,在完成了90%的实现之后,他们决定在测试期间需要展示100%个分支覆盖率。该项目位于嵌入式平台(Green Hills Integrity)上。我正在寻找其他在类似环境中使用过代码覆盖率产品的StackOverflow方面的建议和经验。我对这类工具的正面和负面评论都感兴趣。

Testing 嵌入式C+的代码覆盖率分析+;项目 我最近开始研究一个非常大的C++项目,在完成了90%的实现之后,他们决定在测试期间需要展示100%个分支覆盖率。该项目位于嵌入式平台(Green Hills Integrity)上。我正在寻找其他在类似环境中使用过代码覆盖率产品的StackOverflow方面的建议和经验。我对这类工具的正面和负面评论都感兴趣。,testing,embedded,code-analysis,Testing,Embedded,Code Analysis,100%的分支机构覆盖率?这是非常必要的,特别是因为一些分支(例如,状态机的case语句中的默认值)不可能运行。我预计会有一些例外情况,如果没有,您可能需要在开始之前了解覆盖率测试可以完成和不能完成的内容—否则您将最终会大发雷霆,或者更糟—提供不正确的数据 嵌入式系统的大多数覆盖测试实际上是在PC机上进行的。代码被移植,微控制器的某些方面在软件中被模拟,或者运行另一个类似的PC代码覆盖实用程序。之所以这样做,是因为有太多的微控制器和编译器/调试器/测试环境,无法为每个微控制器和编译器/调试器/测

100%的分支机构覆盖率?这是非常必要的,特别是因为一些分支(例如,状态机的case语句中的默认值)不可能运行。我预计会有一些例外情况,如果没有,您可能需要在开始之前了解覆盖率测试可以完成和不能完成的内容—否则您将最终会大发雷霆,或者更糟—提供不正确的数据

嵌入式系统的大多数覆盖测试实际上是在PC机上进行的。代码被移植,微控制器的某些方面在软件中被模拟,或者运行另一个类似的PC代码覆盖实用程序。之所以这样做,是因为有太多的微控制器和编译器/调试器/测试环境,无法为每个微控制器和编译器/调试器/测试环境开发代码覆盖工具

当针对特定嵌入式平台的代码覆盖工具确实存在时,它们并不像针对PC平台开发的工具那样强大、可配置、易于使用和无bug。处理器通常不具备执行良好代码覆盖率所需的跟踪功能(没有高端仿真硬件),而无需向固件中插入额外的调试代码,这会产生难以控制的后果和副作用,特别是在实时系统中出现计时问题时

<>移植代码不是很困难,只要你能抽象硬件特定代码(而且因为你使用C++正确,那应该很容易,对,-D)。你会遇到的最大问题是类型,而C++中比C语言更好的类型仍然会带来一些问题。确保您使用的是types.h或类似的设置,专门告诉编译器您使用的每种类型是什么以及应该如何解释

之后,您可以在PC上测试核心逻辑。如果您对开发所需的软件仿真感兴趣,您甚至可以测试低级硬件驱动程序,尽管计时问题可能有些麻烦

软件测试工具,例如为您执行许多微控制器仿真,并帮助解决时序问题,但即使有了这些帮助,您仍然需要做一些工作

如果必须在系统本身上执行此操作,则需要为具有覆盖能力的处理器购买仿真器-这不是一个便宜的建议(许多仿真器的全套工具和仿真硬件的成本超过30000美元),但它是汽车和航空航天等高可靠性环境中使用的众多工具之一

-亚当


免责声明:我为生产MxVDev的公司工作。

与Adam一样,我们将嵌入式代码移植到基于PC的线束上,并在那里进行大部分覆盖和分析。我使用过AutomatedQA AQTime和Computerware DevPartner,这两款产品都很好

如果您必须在board上执行coverage ob,则需要使用coverage profiler来创建源代码的检测版本。可以使用商业和开源工具来实现这一点,但在我看来,它增加了很多工作,但收获不大

100%的覆盖率是雄心勃勃的,因为您需要大量的错误注入才能进入所有的错误处理程序和异常处理程序。在国际海事组织,这在安全带中比在船上更容易做到

同样值得指出的是,无论谁要求100%的代码覆盖率,100%的代码覆盖率绝不等同于100%的测试覆盖率。例如,考虑以下函数;
int div(int a, int b)
{
return (a/b);
}
100%的代码覆盖率只需要我们调用这个函数一次,100%的测试覆盖率需要更多的调用。我自己的测试策略包括开发自动化测试用例,为我提供一个可接受的测试覆盖率水平,并使用代码覆盖率工具来寻找未测试的区域。在某种程度上,这取决于您的测试预算;对我来说,100%的代码覆盖率对于它所提供的东西来说是非常昂贵的。

我们过去曾使用过单元测试和代码覆盖率。我们还使用Greenhills工具,这两种工具都与Greenhills开发工具配合使用。我们在PPC模拟器上运行大部分测试,并通过JTAG pod在目标硬件上运行依赖硬件的测试。 Canatata和Vector cast与catata非常相似,只是使用起来稍微容易一点,功能也稍微多一些,但小的额外功能在用户体验上有很大的不同

通常,如果您想要实现高级别的分支覆盖率,您需要为可测试性设计代码。测试越多,您就越了解如何编写可测试代码

我们还尝试了PC测试和嵌入式测试,这给我们带来了问题,因为它们的持久性,但这只是硬件层的问题

此外,这些工具经RTCA/DO-178B标准认证。

请参阅。这是一个家庭(分支)测试覆盖工具,用于各种方言的C++(ANSI,GNU,MS…),即使在实际的嵌入式系统硬件中也有很好的占用空间,并且有一种简单的方式来导出收集的测试覆盖数据。有一个GUI覆盖率显示,它不依赖于实际的嵌入式硬件,还将生成一个完整的覆盖率报告摘要


[我是提供这些工具的公司的负责人。]

+1对于康塔塔,我们也必须使用它!请注意,Bullseye似乎不支持Greenhills Integrity f