我们最近开始工作上一个非常大的C++的项目,在完成90%的实现,已经确定他们需要证明的100%支复盖期间测试。该项目是举办一个嵌入式平台(绿山的完整性).我正在寻找建议和经验,从其他计算器,使用代码复盖的产品在类似环境中。我感兴趣的积极和消极评论关于这些类型的工具。

有帮助吗?

解决方案

100%的分支机构覆盖范围?这是非常必要的,特别是因为某些分支(例如状态机的case语句中的默认值)不可能运行。我希望有一些例外,如果没有,你可能需要了解在开始之前可以完成哪些覆盖测试并且无法完成 - 否则你最终会把你的头发拉出来,或者更糟 - 提供不正确的数据。

嵌入式系统的大多数覆盖测试实际上是在PC上执行的。代码移植,微控制器的某些方面用软件模拟,并 Bullseye 或其他类似的PC代码覆盖实用程序运行。这样做的原因是,有太多的微控制器和编译器/调试器/测试环境为每个工具开发代码覆盖工具。

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

只要您可以抽象出特定于硬件的代码(并且因为您正确使用C ++,这应该很简单,对吗?-D),移植代码并不是非常困难。你将遇到的最大问题是类型,虽然在C ++中比在C中更好地指定但仍然存在一些问题。确保您使用的是types.h或类似的设置,以明确告诉编译器您使用的每种类型以及如何解释它。

之后,你可以到镇上测试PC上的核心逻辑。如果您有兴趣开发所需的软件仿真,您甚至可以测试低级硬件驱动程序,虽然时序问题可能有点麻烦。

MxVDev 等软件测试工具为您执行大量微控制器仿真,并帮助解决时序问题好吧,但即使有这样的帮助,你仍然会有一些工作。

如果您必须在系统本身上执行此操作,则需要为具有覆盖功能的处理器购买仿真器 - 这不是一个便宜的主张(许多仿真器对于整套工具和仿真硬件的成本高达3万美元) ,但它是汽车和航空航天工业等高可靠性环境中使用的众多工具之一。

- 亚当

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

其他提示

我们有用 大合唱vectorcast 在过去的单元测试和代码的复盖范围。我们还使用的绿山工具和这两个工具的工作与绿发展的工具。我们运行的大部分我们测试的PPC模拟器和运行测试,依靠硬件的目标上硬件通过JTAG pod。Canatata和矢量投非常相似,与catata只是稍微更易于使用和具有略多的功能,但小的额外做出很大的差异在的用户经验。

一般来说,如果你想要实现高水平的分复盖,你需要来设计你的代码可测试性。你越测试你更了解关于编写测试的代码。

我们还尝试了测试电脑与嵌入测试了我们的问题,因为endianess但是,这仅仅是一个问题在硬件层。

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

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

如果您必须进行覆盖率,则需要使用覆盖率分析器来创建源的检测版本。有商业和开源工具可以做到这一点,但IMO,它增加了很多工作,没有太大的收获。

100%的覆盖率是雄心勃勃的,因为您需要大量的故障注入才能进入所有错误处理程序和异常处理程序。 IMO,这在线束中比在船上更容易。

值得指出的是,无论谁要求100%的代码覆盖率 100%代码覆盖率绝不等于100%测试覆盖率。例如考虑以下函数;

int div(int a, int b)
{
return (a/b);
}

100%的代码覆盖率只要求我们调用此函数一次,100%的测试覆盖率需要更多的调用。我自己的测试策略包括开发自动化测试用例以给我一个可接受的测试覆盖率,并使用代码覆盖工具纯粹作为寻找未经测试区域的辅助工具。在某种程度上,这取决于您的测试预算;对我来说,100%的代码覆盖率对于它提供的东西来说是昂贵的。

请参阅 SD C ++测试覆盖率。这是一系列(分支)测试覆盖工具,适用于各种C ++(ANSI,GNU,MS ......)方言,即使在实际的嵌入式系统硬件中,由于占用空间小而且易于使用,因此可以很好地运行导出收集的测试覆盖率数据的方法。 GUI覆盖显示不依赖于您的实际嵌入式硬件,也会生成完整的覆盖报告摘要。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top