C嵌入式自动单元测试生成

时间:2010-05-11 11:14:16

标签: c unit-testing testing embedded automated-tests

是否有任何SW在C和嵌入式应用程序中生成单元测试?我问的原因是我的老板告诉我他从某人那里听说“你需要一个工具来分析代码并自动创建所有相关测试用例的80%,剩下的20%是你用的所有时间并专注于”,否则这需要“太多时间”。

我对这个陈述非常怀疑,并且无法清楚地看到可以自动生成什么样的测试以及它们是否会有任何好处。

但是,我可以看到可以自动为API生成接口单元测试:

有人可以在这个问题上启发我吗?

7 个答案:

答案 0 :(得分:5)

你的老板得到了错误的结局。

我知道没有可以为您生成单元测试的工具。

他可能会误认为code coverageunit testing。虽然相关,但它们实际上是单独的问题。

代码覆盖率将检测您的代码,一旦运行完毕,您就可以了解运行中使用了多少源代码。这在单元测试时非常有用,因为它可以有效地显示您测试的位置以及您需要关注工作的位置。

很容易让前三分之二的代码被覆盖,但收益递减意味着接近魔法100%需要花费大量的时间和精力。

答案 1 :(得分:5)

我推荐API Sanity Checker工具:

  

共享C / C ++库的基本单元测试的自动生成器。它能够生成合理的(在大多数情况下,但不幸的是并非所有情况下)参数输入数据,并通过分析头中的声明为API中的每个函数组成简单(“健全”或“浅”质量)测试用例。文件。

     

生成的测试质量允许在简单的用例中检查是否存在严重错误。该工具能够构建和执行生成的测试并检测崩溃(段错误),中止,各种发出的信号,非零程序返回码和程序挂起。

独特功能:

  • 自动生成输入参数和测试数据(即使对于复杂数据类型)
  • 现代specialized types代替灯具和模板

请参阅FreeType2的示例。

enter image description here

我是这个项目的作者,你可以问我任何问题。

答案 2 :(得分:2)

首先,单位测试是什么意思并生成单元测试?

您的意思是生成框架,测试工具还是意味着使用实际调用代码的数据和数据检查或断言生成测试。而且,在后一种情况下,该测试是如何产生的?

更基本的是,你为什么要测试?您是否遵循了需要一定程度测试的标准,或者您是否只是想在开发的后期阶段降低风险和成本?或者您可能正在构建现有系统,只是想确保不破坏任何现有功能。

之前的回答提到了Cantata,我们最近发布了一个新版本,其中包含一个名为“基线测试”的组件。这可能正是您所寻找的。它将为C代码创建一组单元测试,其中包含可充分运用每个源文件的测试用例。该工具通过读取源并生成一组测试来实现这一目标,该测试驱动每条路径上的执行,旨在实现所需的覆盖目标--100%声明,决策甚至MC / DC覆盖。目的是将源代码“基线”作为遗留系统持续开发的一部分,或者在功能或系统测试后填补覆盖空白。

有关更多信息(和免费评估),请参阅Cantata++网页

答案 3 :(得分:1)

谷歌搜索“单元测试发生器”出现了很多东西,但我不知道它们是否有用,或者它们是否适合你的情况。

它不是单元测试,但您可以使用lint或相关工具进行一些代码检查。请参阅:http://www.lysator.liu.se/c/ten-commandments.html我认为当前的开源工具是splint http://www.splint.org/

Jon Bentley的书籍对“脚手架”代码的作用进行了一些很好的讨论,包括测试支架。

答案 4 :(得分:1)

我们在这里使用CANtata来生成单元测试/代码覆盖。虽然我觉得它有点贵,但还算不错。

答案 5 :(得分:0)

我们使用IBM RTRT

http://www-01.ibm.com/software/awdtools/test/realtime/index.html

虽然在我们的用例中我们不使用它来生成测试,但我看到了至少生成骨架的一些可能性。

答案 6 :(得分:0)

  

是否有任何SW在C和嵌入式应用程序中生成单元测试?

是。 IBM的Rational Test Realtime将是一个不错的选择。

  

一种分析代码并自动创建80%所有相关测试用例的工具

没有。没有工具可以为所有类型的C源代码执行此操作。

但在某些情况下是的。例如,在我的情况下,我需要大量的C源代码进行客户测试。但是因为每个源文件非常相似,所以我们创建一个小工具来读取每个文件并生成测试用例(使用单元测试工具的脚本语言),然后由单元测试工具执行。是的,在这种情况下,它可以节省80%的工作量。

所以你可以考虑这样做,找出类似的源代码,并制作自己的工具,为类似的代码生成测试用例。