【问题标题】:C embedded automatic unit test generationC 嵌入式自动单元测试生成
【发布时间】:2011-02-18 02:28:47
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    你的老板搞错了。

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

    他可能弄错的是code coverageunit testing。虽然相关,但它们实际上是独立的问题。

    代码覆盖率将检测您的代码,一旦完成运行,您就可以了解运行中使用了多少源代码。这在单元测试时很有用,因为它可以有效地向您展示您在哪里进行了测试以及您需要将工作重点放在哪里。

    覆盖前三分之二的代码相当容易,但收益递减意味着接近 100% 的神奇效果需要花费大量时间和精力。

    【讨论】:

    • 我刚刚查看了 Microsoft Pex。它似乎为 C# 代码生成接口测试。也许对 C 来说类似的东西可能是一个很大的优势?
    • 看起来 Pex 仍然需要检测您的代码以生成测试结果。
    【解决方案2】:

    我推荐API Sanity Checker工具:

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

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

    独特的功能:

    • 自动生成输入参数和测试数据(即使是复杂的数据类型)
    • 现代的specialized types,而不是固定装置和模板

    查看FreeType2 的示例。

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

    【讨论】:

    • 在 SO 答案中引用您自己的项目时,请advised 披露您的隶属关系。
    • @DmitryGrigoryev:添加。谢谢。
    【解决方案3】:

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

    您的意思是生成一个框架、一个测试工具,还是您的意思是生成一个包含数据和数据检查或断言的测试,这些数据实际上调用了您的代码。而且,在后一种情况下,该测试是如何生成的?

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

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

    请参阅Cantata++ 网页了解更多信息(和免费评估)

    【讨论】:

      【解决方案4】:

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

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

      Jon Bentley 的书中对“脚手架”代码(包括测试脚手架)的作用进行了很好的讨论。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          我们使用 IBM RTRT

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

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

          【讨论】:

            【解决方案7】:

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

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

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

            没有。没有工具可以为所有类型的 C 源代码完成这项工作。

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-01-03
              • 1970-01-01
              • 2010-09-10
              • 2011-08-19
              • 1970-01-01
              • 1970-01-01
              • 2012-12-13
              • 2023-01-21
              相关资源
              最近更新 更多