【问题标题】:How can I perform mutation testing of my Java program?如何对我的 Java 程序进行突变测试?
【发布时间】:2011-09-23 04:28:26
【问题描述】:

谁能提供可用于在 Java 程序中在源代码(而不是字节代码)级别进行突变的工具的建议?我需要在我的源代码中植入错误。如果有的话,我更喜欢带有 GUI 的应用程序。

【问题讨论】:

  • 这在现实世界中应用很少
  • 简单地用其他人替换一些随机字符可以做到,但在大多数情况下,这将是致命的(即,如果你没有点击字符串或注释或者真的很幸运地被替换,那么生成的程序将无法编译)。
  • “这在现实世界中几乎没有应用”是一个糟糕的借口。当张量、拓扑或微积分数学被开发出来时,它们“在现实世界中几乎没有用处”。这是个有趣的问题。代码变异具有非常现实的应用。
  • 如果您可以提供您想要的突变的建议(即示例)和结果的属性,这可能会很有用 - 如果它仍然可以编译,是否应该定期放置错误等等。
  • @Bohemian:在现实世界中用于确定测试覆盖率。

标签: java testing mutation-testing


【解决方案1】:

当我在 GMU 上一门关于测试的软件工程课程时,we used Mu Java 是其中一章。高温

【讨论】:

  • 谢谢!我也试过了,但它对我不起作用。 @Override 注释导致异常..
【解决方案2】:

这是开源测试覆盖工具Jester 使用的技术。如果您找不到合适的工具并想自己构建一个,查看它的源代码可能会有所帮助。

【讨论】:

    【解决方案3】:

    我已经找到了坑突变测试工具,我很喜欢。 Mujava我有@override注释引起的例外。似乎它不支持Java 5/6。

    【讨论】:

    【解决方案4】:

    如果您的要求确实是源代码突变,那么我知道的选项是

    Jester - 提供有限数量的非常不稳定的变异算子。 Jeff Offutt 将其描述为应用分支测试的一种非常昂贵的方式。不过,我相信可以定义自己的运营商,所以这可能并不完全公平。

    Mu Java - 不支持 Java 5

    朱迪 - 除了它存在之外,对此了解不多

    Lava - 听起来很基础,我认为它不支持 java 5

    从下面的答案中,我看到您现在正在使用 PIT。我认为这确实是一个很棒的选择(我写它可能有一定的偏见),但它是一个字节码变异系统。

    【讨论】:

      【解决方案5】:

      这是一个基准:

      MμClipse 仅支持 JUnit 3,不再维护。 至于Jester,很费力,需要复杂的配置; plus 不再维护。 我能找到的最好的工具是 Javalanche I had wrote a entire article about this !

      【讨论】:

        【解决方案6】:

        “这在现实世界中几乎没有应用”。强烈不同意,我在英国一家非常大的媒体公司签约,PIT (http://pitest.org/) 对于突变测试非常有用。大多数 CI 构建在没有 85% 覆盖率 PIT 突变测试的情况下设置失败。 回复:“替换一些随机字符......”突变不一定是那个意思。 PIT 突变仅限于可编译的更改。

        【讨论】:

        • 如果您需要 100% 的突变覆盖率,您如何处理等效突变?
        【解决方案7】:

        主要突变框架 (Major's website) 为 JUnit 测试提供了编译器集成的突变器和突变分析器。

        Major 的 mutator 集成在 Java 7 编译器中。它提供了多种变异算子,并支持两种变异源代码的选项:

        1. 在编译期间生成并嵌入所有突变体
        2. 生成突变体并导出突变源文件

        【讨论】:

          猜你喜欢
          • 2018-04-02
          • 1970-01-01
          • 2013-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-08
          • 2016-02-22
          • 1970-01-01
          相关资源
          最近更新 更多