Skip to content

Record 202309

开发任务

  • 优化 Android Studio 插件
    • 运行命令时不冻结窗口
  • kotsuite-core 集成 Mock 框架
    • 使用 Java Agent + ASM 做插桩,获取函数返回值,而不是在生成 Jimple 时插桩(9.26 任务)
    • 重构代码,将可重用的逻辑进行抽离
    • 学习如何使用 Mockito 和 Robolectric
    • 实现 Mock 框架集成
    • 完成遗传算法

一、Android Studio 优化

1. 运行命令时不冻结窗口

问题原因:Avoiding UI freezes

解决方案:使用 IntelliJ Platform Execution API

2. 插件流程

二、Mock 框架集成

1. 待测项目

simple-common

Analyzer 阶段

  • mockito-core-5.5.0.jarjunit-4.13.2.jar 放入 process_dir,耗时 2min

  • 不额外加入分析 jar 包,耗时 9s

  • 将测试框架放入 soot classpath 中进行分析,耗时 15s

2. 算法:Mock 集成

3. Java Agent

  • 问题:Instrumentation 只加载了 KotMain,没有加载 com.Test
  • 原因:transformer 在处理 KotMain 时提前加载了 com.Test,导致后续无法为 com.Test 添加 transformer
  • 解决方案:在第一个 visitor 中不提前加载类

如何一个类使用多个 transformer?

现在效果:

第一个 transformer 能正常使用,即可以动态插入方法调用用于生成测试用例覆盖率; 第二个 transformer 能生效,但还无法正常插入插桩语句,需要进一步排查。