问题标签 [mutation-testing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
3630 浏览

java - 如何对我的 Java 程序进行突变测试?

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

0 投票
1 回答
1477 浏览

c# - C# 反射:替换引用的程序集

我目前正在为 MutationTesting 编写一个框架。代码几乎是完整的,但有一点(花了半天时间)我无法弄清楚:

通过反射,我想执行“TestClass”类中的方法“TestMethod”。“TestClass”所在的项目引用了一个组件,我们称之为“Proband.dll”。

“TestMethod”在 Proband.dll 中创建某种类型的对象并在该对象上执行方法。

为了澄清一点:TestClass - 是一个包含单元测试的类。TestMethod - 是一个单一的单元测试。Proband.dll - 包含要测试的方法/类。

在执行 TestMethod 之前,我已经成功地对 Proband.dll 进行了反汇编、变异和重组。所以现在我有一个新的“Proband.dll”,它将由 TestClass 代替!

问题是 TestClass 已经在执行中。我在想是否可以创建一个 AppDomain 来加载新的 Proband.dll 并在新的 AppDomain 中执行 TestMethod。

我已经创建了这个 AppDomain 并成功地将新的 Proband.dll 加载到其中,但是,我不知道如何在这个新的 AppDomain 中执行 TestMethod。另外我不知道这是否会“替换”旧的 Proband.dll 用于测试方法。

这是我的测试类:

有谁知道如何实现这一目标?或者任何线索或关键字?

谢谢,克里斯蒂安

0 投票
2 回答
1192 浏览

ruby - ruby 1.9 和 RSpec2 有什么好的突变测试工具吗?

我曾经使用 Heckle,但由于 ParseTree 的问题,它与 ruby​​ 1.9 不兼容。我一直在寻找替代方案,但唯一看起来很有希望的是 Chaser,并且没有任何明确的文档可以用来查看是否可以使其与 RSpec 一起使用。它似乎有 Test::Unit 依赖项。

那么 - 有没有人使用任何很酷的工具来真正检查你的测试质量?

或者 - 是否有任何覆盖工具可以提供比 c0 更好的覆盖率?这将有助于解决同样的问题。我目前正在使用cover_me,但它是c0,如rcov。

0 投票
2 回答
374 浏览

java - 使用 maven 构建的示例开源项目并使用 TestNG 进行测试

我正在考虑向http://pitest.org添加 TestNG 支持,并且可以使用一些真实而肮脏的代码来尝试一下。

谁能推荐一些使用 maven 构建并使用 TestNG 进行单元测试的小型开源项目?

为清楚起见 - 我不是在问如何配置 maven 以使用 TestNG,我正在寻找一些示例项目以用作突变测试工具的输入。

0 投票
1 回答
749 浏览

java - java混乱突变测试框架可能出现的类加载器问题

这个问题是关于混杂突变测试框架(http://jumble.sourceforge.net/

我正试图混入我工作中的项目。我在其中一个项目的类上运行混乱,它在某些类上执行突变,但对于其他一些类它告诉

“测试班坏了”

尽管我使用 ant 任务运行这些测试类并且它们运行正常。

我试图知道出了什么问题,并开始在 Eclipse 上以调试模式运行 jumble,以处理 jumble 报告其测试被破坏的每个类。当我调试这些类时,我进入了 junit 类 TestResult 的实例字段,因此我可以看到 junit 在 jumble 运行测试类时报告的错误和失败的描述,因为 jumble 告诉我“测试类已损坏”但它没有告诉为什么它说测试类坏了,所以我需要调试才能知道发生了什么。我观察到的问题和错误详细信息是失败的测试混乱的结果,具体如下:

(由于我工作的公司的法律限制,我不能发布某些代码,但我会尽量解释清楚)

对于“转发器”类,我在调试模式下运行 jumble 并且运行平稳并且完美地使突变。这是最让我惊讶的情况,因为当与 ant task jumble 一起运行时,会报告我“测试类已损坏”,但在 eclipse 中的调试模式下运行正常。

对于 Action 类和许多其他类,在调试模式下,当运行测试类并检查错误描述时会发生错误,错误是

java.lang.ClassNotFoundException:org.junit.rules.ExpectedException。

我在 junit jar 上有那个类,它的路径可用于 eclipse 调试模式和 ant 任务。此外,这个类位于 selenium 框架的一个 jar 中,它的依赖项我认为可能是类加载器无法决定要加载哪个版本的类。但我不确定。

对于模块类,我做同样的事情:当测试由 jumble 运行并完成执行时,检查 TestResult junit 类上可用的错误消息。对于这门课,我得到:

java.lang.LinkageError:加载约束违规:加载程序“com/reeltwo/jumble/mutation/MutatingClassLoader@5b8d5b8d”先前为加载程序“sun/misc/Launcher$ 定义的名称为“org/hamcrest/Description”的不同类型启动加载AppClassLoader@7fce7fce"

这个错误让我大吃一惊。这让我觉得 Jumble 有自己的类加载器,也许它会以某种方式成为我的一些麻烦的根源。

我真的很感激任何帮助,马科斯

0 投票
5 回答
4940 浏览

testing - 回归测试和突变测试有什么区别?

只是想知道有什么区别。我需要一些简明的解释。维基百科对我来说有点太冗长了。

0 投票
1 回答
1602 浏览

.net - 使用 Mono.Cecil 创建带有内联参数的 IL 指令

我现在正在玩突变测试。我正在研究的其中一个突变涉及交换参数,例如,我可能需要交换参数,Ldarg.0Ldarg_S使用指示索引的操作数。

其操作数类型是内联 arg,我相信在 Mono.Cecil 中需要我创建一个正确实例化ParameterDefinition来存储 32 位 int 索引。有没有人对 Cecil 有足够的经验来为我指出正确的方向,即创建一个具有适当类型的Instruction实例OpCode的简单方法?Ldarg_SOperand

0 投票
4 回答
989 浏览

c# - Off By One 错误和变异测试

在为我最喜欢的突变测试框架(NinjaTurtles)编写“Off By One”突变测试器的过程中,我编写了以下代码来提供检查我实现的正确性的机会:

现在这看起来很简单,我并没有想到尝试改变 IL 中的所有文字整数常量会出现问题。毕竟,只有 3 个(the 0、the1和 the ++)。

错误的!

在第一次运行时,它变得非常明显,它永远不会在这个特定的实例中工作。为什么?因为将代码更改为

只在总和上加上 0(零),这显然没有效果。如果它是多重集合,则不同的故事,但在这种情况下它不是。

现在有一个相当简单的算法来计算整数的总和

我很容易使突变失败,因为从其中的任何一个常数中加或减 1 都会导致错误。(鉴于max >= 0

因此,针对这种特殊情况解决了问题。虽然它没有做我想要的突变测试,即检查当我丢失时会发生什么++- 实际上是一个无限循环。但这是另一个问题。

所以 - 我的问题: 是否有任何琐碎或非琐碎的情况,其中从 0 或 1 开始的循环可能会导致无法以类似方式重构(被测代码或测试代码)的“一个突变”测试失败?(请举例)

注意:当测试套件在应用突变后通过时,突变测试失败。

更新:一个不那么琐碎的例子,但仍然可以重构测试以使其失败的例子如下

var i=0如果您给它的测试var i=1输入是new[] {0,1,2,3,4,5,6,7,8,9}. 但是,将测试输入更改为new[] {9,8,7,6,5,4,3,2,1,0},变异测试将失败。因此,成功的重构证明了测试。

0 投票
2 回答
1854 浏览

c++ - 开源变异测试 C++

我需要一个对 C++ 代码执行突变测试的开源工具(即使是相对原始的工具也可以)。我要求它是开源的,因为我需要在概念验证实验中对其进行修改。

我尝试用谷歌搜索它,但没有提出开源工具,我提出了这个问题,但答案中建议的工具要么不是开源的,要么不改变 C++。

0 投票
1 回答
752 浏览

rspec2 - 使用突变 gem 对 ActiveRecord 模型进行突变测试

我一直在尝试开始对我们的 rails 应用程序进行突变测试,但无法让它工作 - 有没有人设法设置它?

这是我到目前为止所尝试的:

我还尝试使用 -I 直接加载 activerecord gem,gem 已经安装在当前的 rvm gemset 中 - 我感觉这将涉及一些更完整的设置来使用 database.yml,不幸的是我可以似乎找不到任何已经这样做的人。