2010-05-11 56 views
8

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

我对这个陈述非常怀疑,不能清楚地看到什么样的测试可以自动生成,以及它们是否会有所帮助。

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

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

回答

5

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

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

他可能会误解的是code coverageunit testing。虽然相关,他们实际上是分开的问题。

代码覆盖率将代表您的代码,并且一旦完成运行,就可以降低运行中使用的源代码的数量。这在单元测试时非常有用,因为它可以有效地向您显示测试的位置以及需要将工作重点放在哪里。

获得前三分之二的代码是相当容易的,但收益递减意味着接近100%的魔法需要花费大量的时间和精力。

+0

我只是看着微软Pex。它似乎为C#代码生成接口测试。也许类似的C可能是一个很大的优势? – Henrik 2010-05-11 12:22:19

+1

仍然看起来像Pex需要测试您的代码以生成测试结果。 – 2010-05-11 12:29:30

1

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

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

乔恩本特利的书有一些很好的讨论“脚手架”代码的作用,包括测试脚手架。

0

我们在这里使用CANtata这里我工作产生单元测试/代码覆盖。它的体面,虽然我想它有点贵。

5

我建议API Sanity Checker工具:

的基本单元测试共享的C的自动生成器/ C++库。它能够为参数生成合理的(大多数但不是全部)输入参数数据,并通过分析报头中的声明为API中的每个函数构造简单(“完整”或“浅”质量)测试用例文件。

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

独特的功能:

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

FreeType2见的例子。

enter image description here

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

+0

[建议](http://stackoverflow.com/help/promotion)在SO答案中引用您自己的项目时披露您的联属关系。 – 2015-10-02 07:52:37

+2

@DmitryGrigoryev:已添加。谢谢。 – aponomarenko 2015-10-02 18:16:57

2

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

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

更基本的是,你为什么要测试?您是否遵循了需要一定水平测试的标准,还是您只是想在后期开发中降低风险和成本?或者,也许你正在建立一个现有的系统,只是想确保你不会破坏任何现有的功能。

以前的答案提到了康塔塔,我们最近发布了一个名为'基准测试'的组件的新版本。这可能就是你正在寻找的东西。它将为C代码创建一组单元测试,其中包含可充分利用每个源文件的好机会的测试用例。该工具通过读取源代码并生成一组测试来实现这一目标,从而实现您希望的覆盖目标 - 100%陈述,决策甚至MC/DC覆盖。其目的是将您的源代码“作为基准”,作为遗留系统持续开发的一部分,或者在功能或系统测试之后填补覆盖空白。

Cantata++网页的信息越多(免费评估)

0

是否有SW,生成用C单元测试和嵌入式应用?

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

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

号没有工具,可以为所有类型的C源代码做这项工作。

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

所以你可以考虑做到这一点,找出类似的源代码,并使你自己的工具,可以生成相似的测试用例。