九、精准测试第七式:用例预分析消振
1、为什么仍有冗余?
知识库消振已经做到了分支级别的用例关联,但是差异化分析还只是函数级别的,两者的不对称是造成用例冗余的根源。
需将差异化分析对变更函数的判断推进到分支级别。
比方说:
我们的Windows操作系统现在一般都有4核多线程处理能力,但是很多应用程序都是单线程运行,基本没有发挥出系统多核处理器的能力。为了让系统的处理器都跑起来,还需要应用程序自身支持多线程的处理方可。
我们的知识库与差异化分析之间也是类似这种关系,需要两者均具有识别函数分支能力,才可以协同作战。
* 只有挖掘到被测程序越精细的数据,才可以让我们系统弄的准确性得到保证
2、差异化分析也要到分支级别
面临两个问题:
1)差异化分析怎么判断函数的具体哪一个路径分支发生了变化?
2)如何能够将变更函数路径分支与知识库中原有已关联用例的函数路径分支进行匹配?
匹配变更和函数分支hash:
-- 只要路径分支的条件判断是一样的,说明它们在函数执行过程中的路径是相同的,基本块跳转顺序也是一样的,这样通过相同分支条件判断就可以匹配前后发生变更的函数路径分支。
实现步骤:
- 对变更函数的基本块对应的路径分支、路径分支的条件判断分别计算出一个hash值
- 再将变更函数的“基本块”与“函数路径分支hash”、“函数路径分支条件判断hash”三者建立起映射关系
- 最后在对应的知识库函数中寻找与路径分支条件判断hash相同的路径分支hash,就完成了整体的匹配
概念介绍:
基本块:指程序顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是最后一个语句。对一个基本块来说,执行时只从其入口进入,从出口退出。
函数路径分支hash:将分支的每个代码块中的语句作为集合,计算一个hash唯一值。
函数路径分支条件判断hash:将分支代码块的跳转顺序作为集合,计算一个hash唯一值。
3、用例分支和变更分支关联
- 知识库建立起用例与路径分支hash、路径分支条件判断hash的关联关系
- 差异化分析可以通过变更函数路径分支条件判断hash去知识库中查找对应函数相匹配的路径分支条件判断hash,继而找到对应的路径分支hash
- 再将差异化分析中的路径分支hash与知识库中查找到的路径分支hash列表进行对比,查找不相同的路径分支hash。这就是代表变更的路径分支,推荐出这些不同路径分支对应的用例
4、推荐最精简用例集