相关文章推荐
想出家的葫芦  ·  ORA-12012,ORA-20001,OR ...·  1 年前    · 
机灵的铁链  ·  unity怎么获取 android ...·  1 年前    · 
不羁的肉夹馍  ·  Node.js 中 Buffer ...·  1 年前    · 
旅途中的保温杯  ·  .net - "win-x86" or ...·  1 年前    · 

PIT 是目前最高水平的变异测试系统 Github Google小组

1. 变异测试是什么?

代码中自动生成错误(变异),然后运行测试。如果测试失败了,那么变异被杀死;如果测试通过,变异幸存。测试用例的质量可以通过变异被杀死的百分比数量进行衡量。

换句话说,PIT 在程序代码的自动修改版本上运行单元测试。当程序代码被更改后,就会产生不同的结果,并导致先前的单元测试失败。如果单元测试没有失败,则测试套件可能存在问题。

支持 Maven、命令行、Ant 和 Gradle。

2. 命令行

# 来源:http://pitest.org/quickstart/commandline/
java -cp <your classpath including pit jar and dependencies> \
    org.pitest.mutationtest.commandline.MutationCoverageReport \
    --reportDir <outputdir> \
    --targetClasses com.your.package.tobemutated* \
    --targetTests com.your.package.*
    --sourceDirs <pathtosource>
# 示例1
java -cp <your classpath> \
     org.pitest.mutationtest.commandline.MutationCoverageReport \
    --reportDir c:\\mutationReports \
    --targetClasses example.foo.* \
    --sourceDirs c:\\myProject\\src \
    --targetTests example.foo*
    --threads 2
    --excludedMethods hashCode,equals
# 示例2
java -cp <your classpath> \
     org.pitest.mutationtest.commandline.MutationCoverageReport \
    --reportDir c:\\mutationReports \
    --targetClasses example.foo.Specfic, example.foo.Other \
    --targetTests example.ReflectionSuite
    --sourceDirs c:\\myProject\\src \

java 示例代码可参考 Mkyong.com

执行命令行:(verbose 是开启详细日志,更多内容见 链接

-cp # 1.PIT /home/ubuntu/lib/pitest-1.6.6.jar: /home/ubuntu/lib/pitest-command-line-1.6.6.jar: /home/ubuntu/lib/pitest-entry-1.6.6.jar: # 2.Juint /home/ubuntu/lib/junit-4.12.jar: /home/ubuntu/lib/hamcrest-core-1.3.jar: # 3.Project classes /home/ubuntu/PITexample/target/classes: /home/ubuntu/PITexample/target/test-classes \ org.pitest.mutationtest.commandline.MutationCoverageReport \ --reportDir /home/ubuntu/PITexample/mutationReports \ --targetClasses com.pit.* \ --targetTests com.pit.* \ --sourceDirs /home/ubuntu/PITexample/src/main/java \ --verbose true

最终生成的报告包含如下信息:

  • 包中的 java 文件的数量和名称,行覆盖率和变异覆盖率
  • java 文件代码产生的变异体(是否被杀死)、使用的变异算子和执行的测试用例(包括执行时间)

3. Maven

B站参考视频:av626459960

在 pom.xml 文件的 build/plugins 中加入

<plugin>
    <groupId>org.pitest</groupId>
    <artifactId>pitest-maven</artifactId>
    <version>LATEST</version>
 </plugin>

pitest 默认变异所有代码,使用 targetClasses 和 targetTests 来指定变异的部分和要运行的测试。

<plugin>
    <configuration>
        <targetClasses>
            <param>com.your.package.root.want.to.mutate*</param>
        </targetClasses>
        <targetTests>
            <param>com.your.package.root*</param>
        </targetTests>
    </configuration>
</plugin>

我的 pom.xml 文件

<build>
    <plugins>
        <plugin>
            <groupId>org.pitest</groupId>
            <artifactId>pitest-maven</artifactId>
            <version>1.6.6</version>
            <executions>
                <!-- 将goal绑定到test阶段,执行mutationCoverage -->
                <execution>
                    <id>pit-report</id>
                    <phase>test</phase>
                    <goals>
                        <goal>mutationCoverage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!-- 待变异类 -->
                <targetClasses>
                    <param>com.pit.*</param>
                </targetClasses>
                <!-- 所需测试 -->
                <targetTests>
                    <param>com.pit.*</param>
                </targetTests>
            </configuration>
        </plugin>
    </plugins>
</build>

终端执行 mvn clean test
对于 JUnit 5 项目,需要补充

<build>
    <plugins>
        <plugin>
            <dependencies>
                <dependency>
                    <groupId>org.pitest</groupId>
                    <artifactId>pitest-junit5-plugin</artifactId>
                    <version>0.14</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

如果不想绑定到 test 阶段,需要先mvn install,然后执行mvn org.pitest:pitest-maven:mutationCoverage

IntelliJ IDEA 在 Settings - Plugins 搜索 PIT mutation 插件,配置使用更方便。
在这里插入图片描述

PIT 是代表最高水平的变异测试系统,为 Java 和 JVM 提供 gold standard 测试覆盖。快速!可扩展性好!并且与测试和构建工具进行了集成。Github、Google小组变异测试是什么?代码种自动生成错误(变异),然后运行测试。如果测试失败了,那么变异被杀死,如果测试通过,变异幸存。测试用例的质量可以通过变异被杀死的百分比数量进行衡量。换句话说,PIT 在程序代码的自动修改版本上运行单元测试。当程序代码被更改后,就会产生不同的结果,并导致先前的单元测试失败。如果单元测试没有失败,则测 首先配置好maven环境 这里面有一些坑,可以看我的另一篇博客,踩过的坑希望大家不要在踩了。 https://blog.csdn.net/ibo123/article/details/108034402 无法加载主类的问题在于你的maven环境没有进行全局配置,请务必配置好全局maven。要不然IDEA会自动加载默认的maven。 1 构建一个简单的maven项目 file -> project ->
变异测试工具Pitest(maven配置) No mutations found 错误提示: 看一下pom.xml文件的插件这里的包名com.xxx.mypitest有没有写错 成功使用变异测试工具Pitest 对于性能测试,能够改变一些参数以确定被测试系统的行为是至关重要的。 对于pitest,一些最重要的参数是代码库大小、测试覆盖率和变异数。 要获得稳定且可自定义的源集,可以使用 LargeClassGenerator 类。 其用法如下: -c N : Number of classes to generate -m N : Number of methods to generate per class -p VAL : Package name -r VAL : Root folder -s : Run in simulated mode, i.e. do not actu
升级到ASM 5.0.2 修复#114-设置-parameters标志时无法为Java 8运行 #99在Maven插件中支持AdditionalClasspathElements属性(感谢artspb) #98请勿使用资源更改Java 7尝试(感谢@artspb) #109扩展删除条件变量(感谢@vrthra) 移至Github 升级ASM以支持Java 8字节码(感谢“ iirekm”) 对JUnit类别的部分支持(感谢“ chrisr”) 新的删除增量变量器(感谢Rahul Gopinath) 较小的日志记录改进(感谢Kyle Rogers又名Stephan Penndorf) 修复#92-损坏的Maven 将gradle-pitest-plugin添加到build.gradle文件中的plugins配置中: plugins { id ' info.solidsoft.pitest ' version ' 1.5.2 ' 用最艰巨的任务致电Gradle: gradle pitest 测量后,由PIT创建的报告将放置在${PROJECT_DIR}/build/reports/pitest目录中。 (可选)使其取决于构建: build . dependsOn ' id( " com.android.application " ) // or id("com.android.library") // or id("com.android.test") id( "
PIT的可扩展突变引擎 变异测试是一种评估测试质量的技术。 它会插入人为错误来创建原始代码的变体,然后检查我们的测试是否对那些变体失败。 人工错误的模型被称为变异算子。 或PITest是一种为JVM项目实施变异测试的工具。 在PIT中,变异引擎处理变异的创建和变异算子。 该工具带有一个名为Gregor的默认突变引擎。 我维护名为变异引擎,该引擎实现了极端变异。 Gregor和Descartes都不能使用自定义突变算符进行扩展,也不能同时使用。 能够添加自定义突变运算符使我们能够扩展默认突变引擎的功能。 像这样,我们可以例如将变异运算符调整为我们自己的自定义类型(请参阅 )。 然后,如果我们有自定义突变,则最好将它们与上面的引擎一起使用。 该存储库用两个新的PIT变异引擎填补了这一空白: ivo :它使您可以组合多个突变引擎并同时使用它们 amazo :它使您可以将自定义突变运算符
VG Toolkit是一个用于处理和分析变异图的工具包,主要用于基因组学和生物信息学研究。下面是一些常用的VG Toolkit命令及其详细说明: 1. vg index:用于将参考基因组和变异图索引化,以便快速访问和查询变异图。 2. vg construct:用于从FASTA格式的参考序列和VCF格式的变异数据构建变异图。 3. vg view:用于查看变异图的内容和结构,支持多种输出格式,如DOT、GFA和JSON等。 4. vg mod:用于修改变异图的结构和内容,如添加、删除节点和边等。 5. vg annotate:用于给变异图的节点和边添加注释信息,如基因名称、功能等。 6. vg map:用于将测序数据比对到变异图上,以便进行变异分析和变异检测。 7. vg call:用于从比对结果中识别出变异位点和变异类型,如SNP、Indel等。 8. vg prune:用于从变异图中删除低覆盖度和低质量的节点和边,以提高变异检测的准确性和效率。 9. vg deconstruct:用于将变异图分解成一系列的线性基因组片段,以便进行进一步的分析和比对。 10. vg sim:用于从变异图中生成模拟的测序数据,以便测试和评估变异检测算法的性能和准确性。 以上是VG Toolkit中的一些常用命令及其详细说明,使用这些命令可以更好地处理和分析变异图,从而深入探索基因组的奥秘。