六、精准测试第四式:知识库
1、自动推荐用例??
代码和用例建立关联关系
- 模块与用例关联(先源文件与模块,再模块与用例)
-- 这种粒度非常粗,一个模块少量的变更会推荐大量冗余用例。(一个模块可能关联了大量用例,模块与模块间存在调用关系)
- 文件与用例关联
-- 粒度比上一种小,精度也更高。
- 类/方法/函数和用例的关联
-- 粒度更细,需关联的数量呈指数级增长,技术难度大。考虑投入产出比,用例与函数关联较合理。
2、函数与用例建立关系? - 用例与函数调用链建立关系
函数调用链动态获取:
-
- 源代码插桩(易用性 低)
在源文件的基础上,通过变异的方式将探针插入到源代码行中。
-
- 中间代码插桩(易用性 中)
中间代码:如Java源码编辑后生成的class字节码文件,就是一种类型的中间代码文件。
将探针插入到这个中间代码文件中,就是中间代码插桩
-
- 二进制代码插桩(易用性 高)
对程序真正运行的目标文件进行探针插入的操作,比较成熟的插桩工具有XDebug等。
采集器工具操作步骤:
1)建立调试会话
2)对需要获取动态函数调用关系链的模块进行下断
3)下断的点选择为call指令,jump跳转函数地址指令
4)监控调试事件
5)获取断点事件,保存特征数据信息
6)恢复断点执行
3、用例采集步骤,并与调用链关联
1)首先在工具中输入用例ID
2)点击开始采集按钮
3)切换到需要采集的进程,执行用例的操作
4)采集工具会自动将用例操作步骤关联的函数及其调用关系链捕获
5)当用例操作步骤完成后,点击工具的结束采集按钮,完成本次用例采集
6)文本方式保存本次用例采集到的函数及其调用关系链,反复前五步采集不同用例
7)将6的数据录入到数据库 - 知识库系统