我对Mutation Testing非常感兴趣,所以我尝试了一些像mujava这样的工具,这个工具很适合Java代码.我还读到在Android上应用变异测试并非易事.
所以,我的问题是,有没有人知道为Android代码执行变异测试的工具或方法?
先感谢您!
在某些语言中实施突变测试比其他语言更难(或不可能)吗?例如,是否可以在函数式编程语言中实现突变测试?
我需要一个开源工具(甚至是一个相对原始的工具),它可以对C ++代码执行变异测试。我要求它必须是开源的,因为我需要在概念验证实验中对其进行修改。
我尝试了Googling,但没有提出开源工具,但提出了这个问题,但是答案中建议的工具不是开源的,也不是对C ++进行了突变。
我现在正处于一个旷日持久的境地,有一个困难的项目,其中很大一部分被重构并检查了大量失败的测试。
我在 Maven 中运行 PIT,但很长一段时间都无法运行,因为测试必须是绿色的,但我希望至少在运行的测试上有 PIT 概述。
将失败的测试与 PIT 隔离的最有效方法是什么?
伙计们!我尝试在我的 Maven / Java 项目中使用 pitest-maven 插件,但显然无法生成汇总报告(考虑到我有一个多模块项目)。我从官方网站和其他几个来源收集了一些信息,但是,它们都没有真正帮助定义此场景的正确配置。简而言之,我的结构如下所示:
在某些子模块中,执行 pi-test 确实有意义,而其他子模块则没有。可以这么说,我的配置一般是。
父模块 pom:
<profile>
<id>run-pitest</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.3.2</version>
<configuration>
<outputFormats>
<param>HTML</param>
<param>XML</param>
</outputFormats>
<!--<historyInputFile>${project.basedir}/pitHistory.txt</historyInputFile>-->
<!--<historyOutputFile>${project.basedir}/pitHistory.txt</historyOutputFile>-->
<mutators>
<mutator>CONDITIONALS_BOUNDARY</mutator>
<mutator>MATH</mutator>
<mutator>INCREMENTS</mutator>
<mutator>NEGATE_CONDITIONALS</mutator>
</mutators>
<verbose>true</verbose>
<exportLineCoverage>true</exportLineCoverage>
<testPlugin>testng</testPlugin>
<!--<reportsDirectory>${project.build.directory}/pit-reports</reportsDirectory>-->
</configuration>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>mutationCoverage</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>site</phase>
<goals>
<goal>report-aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
</plugin>
</plugins>
</build>
</profile>
Run Code Online (Sandbox Code Playgroud)
具有突变的子项目:
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<configuration>
<mutationThreshold>80</mutationThreshold>
<exportLineCoverage>true</exportLineCoverage> …Run Code Online (Sandbox Code Playgroud) 我有一个返回自定义对象的方法
public MyObject getTheObject(){
...
return muObject;
}
Run Code Online (Sandbox Code Playgroud)
其单元测试检查getTheObject()方法返回的对象是否不为null
@Test
public void testGetTheObject(){
...
assertNotNull(actualObject);
}
Run Code Online (Sandbox Code Playgroud)
并通过测试。
当使用Pitest进行突变测试时,它显示一个SURVIVED突变,它表示如下内容:
mutated returned of Object for value for ..../getTheObject to ( if ( x!= null ) null else throw new RuntimeException )
Run Code Online (Sandbox Code Playgroud)
问题是我们的单元测试应该如何摆脱这个问题,并且KILL该突变
我现在正在玩变异测试.我正在研究的一个突变涉及交换参数,例如,我可能需要交换参数,Ldarg.0并Ldarg_S使用指示索引的操作数.
这个操作数类型是一个内联arg,在Mono.Cecil中我认为需要我创建一个正确实例化ParameterDefinition来存储32位int索引.有没有人有丝丝足够的经验,指出我的一个简单的方法正确的方向,以创建一个Instruction与实例OpCode的Ldarg_S和Operand适当的类型?
我们只是在进行突变测试,而我不了解一件事。为什么总是在这样的for-each循环上尝试应用“否定条件变量”:
for (final Order order : orders)
Run Code Online (Sandbox Code Playgroud)
如果我看一下mutator的描述(http://pitest.org/quickstart/mutators/#NEGATE_CONDITIONALS),那么它应该只!=对to ==或<to 这样的条件进行突变>=。所以我真的不明白为什么在这里使用它,为什么它有时会失败,有时却不会。
有人可以向我解释一下吗?
我的 maven 和 pitest 配置有问题。
Pitest 代突变没问题,但他看不到我的测试类..
如果您有任何解决方案:D
我有这样的主要来源 /src/main/java/com.plugin..... .java
我有这样的测试源 /src/test/java/com.plugin.....java
pom.xml 配置:
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.1.9</version>
<configuration>
<targetClasses>
<param>com.plugin.business.centre*</param>
</targetClasses>
<targetTests>
<param> com.plugin.business.centre*</param>
</targetTests>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
在 < targetTests > .. 他只知道我的带有自动完成功能的源类,而不知道我的测试类。
[INFO] --- pitest-maven:1.1.9:mutationCoverage (default-cli) @ Polux ---
[INFO] Found plugin : Default csv report plugin
[INFO] Found plugin : Default xml report plugin
[INFO] Found plugin : Default html report plugin
[INFO] Found plugin : Default limit mutations plugin
[INFO] Found shared classpath plugin : …Run Code Online (Sandbox Code Playgroud) 我正在将其添加Stryker.net到我的 C# 项目中。我发现它在所有日志条目上都发生了变化。有什么办法可以在配置中忽略这些吗?
mutation-testing ×10
pitest ×5
java ×3
.net ×2
maven ×2
unit-testing ×2
android ×1
c# ×1
c++ ×1
junit ×1
maven-plugin ×1
mono.cecil ×1
open-source ×1
stryker ×1
stryker-net ×1
testing ×1