系分文档¶
1 遗传算法¶
1.1 初始种群生成
¶
算法:随机算法
1.2 变异¶
1.2.1 突变¶
- 突变输入值
1.2.2 重组¶
- 交叉互换方法调用序列
- 注意:对应的 new action 和 method call action 不能分开
1.3 适应度计算¶
工具:JaCoCo
方法:
- 使用
org.junit.runner.JUnitCore运行测试用例(不需要构建 main 函数运行) - 使用
java -cp ...运行测试用例,而不是打包为 jar 包后使用java -jar
任务:
- 计算每个测试用例的覆盖率
- 计算测试用例集的覆盖率
步骤:
- 将 test case 转化为 JUnit optional?
- Create a Main Class: Run JUnit tests using
JUnitCore - Run main class to collect coverage information. Method name as parameters to tell which method should run.
Idea:
- 每一轮的种群输出为
.class文件,放入test/kotsuite/round1文件夹中 - 为了获取每个个体的适应度,需要使用 java agent 动态生成 Main Class,并运行程序
-javaagent:jarpath[=options]传入参数:待调用的函数,即需要获取适应度的个体
- 先生成 Main Class,再通过 java agent 动态修改
Other:
接口:提供待测方法 sootMethod
步骤:生成 KotMain,调用 sootMethod,调用 Coverage 方法
获取 Coverage info 时才生成 Main Class,最终输出 JUnit 测试类时不生成 Main Class,而是添加
@TestMyApplication - 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 运行测试用例)
- 添加
@Testannotation
问题:无法添加 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
参考教程: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 重组 |

