Katch是基于klee的一个专门针对补丁的测试工具。主要原理,首先通过静态分析,获取补丁代码,并以补丁代码为目标,计算测试用例到达补丁的距离。选择距离最小的测试用例作为种子。然后使用concolic来选择路径执行到目标程序。
-
Katch之使用流程
$ cd ~/infra
$ rm -rf diffutils/l-\* diffutils/log-\* diffutils/patch.size\*
$ ./analyze-patches-multiple.sh diffutils 0 175
analyze-patches-multiple.sh是主要功能脚本。其中diffutils 是目标repo, 0 是起始commit id,175是结束id。
调用了几个脚本:
Checkout.sh
Build.sh
InstrumentPrograms(analyze-patches-multiple.sh中的函数)
Minimizediff.sh (又实现了一次InstrumentPrograms)
restoreNatives
Katch-process.sh
Get-statistics.sh
2.Checkout.sh
首先git查看补丁:
git diff HEAD~$PREVREVISION HEAD~$REVISION -b -U0 -- $DIFFTARGETS