【问题标题】:What mutation-testing frameworks exist for C/C++?C/C++ 有哪些突变测试框架?
【发布时间】:2011-06-10 14:17:27
【问题描述】:

Mutation testing 已经存在一段时间了,似乎至少有一两个用于 C/C++ 的商业突变测试框架。你用过它们吗?你有什么经验?有没有开源替代品?

【问题讨论】:

标签: c++ testing mutation-testing


【解决方案1】:

简单的搜索结果:

话虽如此,您需要意识到突变测试并不是特别有用(至少从我以前读过的一些东西来看)。当面对困难的(隐喻的)断言时,它是一个有趣的工具,用于确保注意数据要求(在处理if and only if 情况时)。

在我看来,分析代码稳健性的方法要成熟得多。

【讨论】:

  • Parasoft (Insure++) 所说的“突变测试”与其他人所说的突变测试不太一样。他们“彻底改变”了它,面目全非。 parasoft.com/jsp/products/article.jsp?articleId=291
  • @Jason:这似乎是一个有趣的尝试,但想法仍然相同.. 获取代码,更改一些运算符(使它们“错误”或“等效”),然后看看东西是否有效。在代码中发现歧义有时很有用,但老实说,您可以编写自己的突变测试工具(这并不难)并节省一些钱。
  • 这是在 google 上弹出的第一个结果,所以我认为指出 MILU 链接导致 404 可能仍然相关。
  • 我真的认为“突变测试不是特别有用”这句话应该是合格的,或者直接从答案中删除。
  • 很容易找到流行的 Java 工具。为什么很难找到流行的 C++ 工具?事实上,我喜欢 C++(我也喜欢 Java)并且想做一些严肃的 C++ 开发,我正在寻找可以帮助我编写高质量代码的工具。我们有用于 Java 的 Eclemma、Pitest、SonarLint、JProfiler、VisualVM 等工具。任何人都可以请提供这样流行且经过验证的 C++ 工具吗?我在这里需要专家建议。
【解决方案2】:

请注意,Parasoft 的工具仅生成等效突变。这与维基百科关于突变测试的文章中描述的问题相呼应——很难区分等效突变和非等效突变,因此他们决定坚持使用等效突变。

我尝试了另一个有趣的工具,它可以自动发现插装的 C 和 C++ 代码中的不变量——它被称为“Daikon”。本质上,它与生成等效突变的工具做同样的事情,但它不会识别有问题的代码,而是为您提供一组不变量,例如“A == B + 1”。我认为不变量更有用,因为当您查看发现的不变量时,它可以确保您的代码在不变量有意义的情况下是正确的,然后您可以将不变量转换为断言,这让您在更改代码时更有信心。

【讨论】:

    【解决方案3】:

    用于变异 c 程序的直接 python 脚本可在以下位置获得:

    https://github.com/parunbabu/mutate.py

    作者说,如果被测代码取消注释和缩进,效果会更好。

    而且它也是免费和开源的......我认为这就是您正在寻找的。​​p>

    【讨论】:

      【解决方案4】:

      现有框架的设置和使用过于耗时,因此我自己进行了实现,这是一个可以在任何机器上运行的快速简单的解决方案。有适用于 MacOSX、Windows 和 RaspberryPi (Linux) 的二进制文件:

      https://github.com/RagnarDa/dumbmutate

      希望对大家有所帮助!

      【讨论】:

        【解决方案5】:
        • Mull 是基于 LLVM 的,似乎正在积极开发且易于使用。
        • dextool mutate 也是基于 LLVM 并积极开发的,使用更复杂,但具有更多功能,例如重新运行活着的突变体,并且仅基于 git diff 进行突变引入更改

        【讨论】:

          【解决方案6】:

          我没有这方面的经验,但 Mutate++ 似乎是已经提到的选项中缺少的选项。

          Mutate++ - A C++ Mutation Test Environment

          【讨论】:

            猜你喜欢
            • 2010-09-19
            • 1970-01-01
            • 2011-07-31
            • 1970-01-01
            • 2020-02-02
            • 1970-01-01
            • 2011-04-23
            • 2010-09-10
            • 1970-01-01
            相关资源
            最近更新 更多