Skip to content

系分文档

1 遗传算法

1.1 初始种群生成 ⭐

算法:随机算法

1.2 变异

1.2.1 突变

  1. 突变输入值

1.2.2 重组

  1. 交叉互换方法调用序列
    1. 注意:对应的 new action 和 method call action 不能分开

1.3 适应度计算

工具:JaCoCo

方法:

  1. 使用 org.junit.runner.JUnitCore 运行测试用例(不需要构建 main 函数运行)
  2. 使用 java -cp ... 运行测试用例,而不是打包为 jar 包后使用 java -jar

任务:

  1. 计算每个测试用例的覆盖率
  2. 计算测试用例集的覆盖率

步骤:

  1. 将 test case 转化为 JUnit optional?
  2. Create a Main Class: Run JUnit tests using JUnitCore
    1. quixbugs-experiment
    2. testcasesort
  3. Run main class to collect coverage information. Method name as parameters to tell which method should run.

Idea:

  1. 每一轮的种群输出为 .class 文件,放入 test/kotsuite/round1 文件夹中
  2. 为了获取每个个体的适应度,需要使用 java agent 动态生成 Main Class,并运行程序
    1. -javaagent:jarpath[=options] 传入参数:待调用的函数,即需要获取适应度的个体
  3. 先生成 Main Class,再通过 java agent 动态修改
    1. junit-pass-tests-agent

Other:

接口:提供待测方法 sootMethod

步骤:生成 KotMain,调用 sootMethod,调用 Coverage 方法

获取 Coverage info 时才生成 Main Class,最终输出 JUnit 测试类时不生成 Main Class,而是添加 @Test

MyApplication
- sootOutput
    - com
    - META-INF
    - test/com/example/myapplication/example/foo/ExampleFooR1.class
   - tc1()
   - tc2()
   - ...
    - test/com/example/myapplication/example/foo/ExampleFooR2.class
    - test/com/example/myapplication/example/bar/ExampleBarR1.class
    - ...
    - KotMain.class
- kotsuite
    - report/com/example/myapplication/example/foo/ExampleFooR1_tc1.exec
    - report/com/example/myapplication/example/foo/ExampleFooR1_tc2.exec
    - ...

1.4 选择

2 测试用例重用

3 测试用例输出

3.1 转化为 JUnit 测试用例的格式

工具:Soot

任务:将普通函数转化为 JUnit 测试用例(可以使用 org.junit.runner.JUnitCore 运行测试用例)

  1. 添加 @Test annotation

问题:无法添加 annotation

3.2 反编译

方法一:⭐

工具:fernflower

任务:将 .class 文件反编译为 Java 源代码文件

java -cp fernflower.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler ExampleTest.class .

进展:可以通过命令行完成转换

方法二:

工具:Soot

步骤:直接输出 java 文件

4 Android Studio 插件

4.1 参数设置界面放入 Idea 设置界面

参考插件:SonarLint

image-20230519165301461

image-20230519165247032

参考教程:Settings Tutorial

4.2 自动识别编译路径

4.3 第一次指定 jar 包后,将 jar 包存入插件安装位置

4.4 根据右键对象选择待测对象

4.5 优化日志输出

5 排期

序号 项目 DDL
1 3.1 转化为 JUnit 测试用例的格式
2 1.3 适应度计算
3 1.2.1 突变
4 1.2.2 重组