八、精准测试第六式:知识库的优化
1、为何实际中函数变更后用例推荐过多?
建立函数与用例关系时,没有考虑到 各级调用和被调函数之间的复杂关系,以及函数内部的逻辑复杂度。这些关系对知识库建立产生影响。
因为这两种关系越复杂,就会导致用例执行时关联的函数越多,并且多条用例会关联到相同的函数,关联度成指数量级增加,导致函数关联用例太多。
2、去除冗余、优化知识库
用例预函数的关系
用例是针对函数编写的,用例预函数的分支内容息息相关,回归测试的时候,需要覆盖当前分支,但并不需要讲该分支的重复用例都覆盖到,不重复的用例分两种:
1)用例和函数的某一分支对应,但是当前分支的代码改动后,用例预这个修改的函数分支关系已经无效,这一部分无效测试用例应该删除
2)函数改动后,和其改动分支对应的测试用例仍然有效且必须执行,才是应该与函数关联的用例
如何去除无关、非关键的函数与用例的关系? - 精简函数对应的测试用例集 - hash标识分支
从函数角度,先对函数内部的路径分支做标记,然后从各路径分支抽出一条用例,组合出来的集合就是该函数的最小用例集
1. 如何对函数路径分支进行标记? - 需用例采集工具支持分支插桩
如何对分支地址进行插桩? 在程序加载的过程中挂起进程,然后解析进程中每一个模块的汇编指令、判断指令是否是跳转指令,则在这个地址处进行插桩操作。
2. 如何提取路径分支hash?
要得到用例执行的路径分析,需建立分支与路径分支的关系?
下图完成了函数路径分支hash提取、基本块地址与路径分支hash映射关系的建立。
3. 用例与函数路径分支的关联关系的建立
在采集器采集用例的过程中,将命中的插桩地址取出来,跟第2步建立的映射关系进行匹配,找到命中插桩地址对应的路径分支hash
优化后结果:将用例个数严格控制在其路径分支个数的基础上,建设成最精简用例集