本文在方法调用图的基础上,定义了使用图和修改图来表示方法和字段之间的关系。
(2)方法序列构建:基于分析结果,构建能够修改待测方法访问字段的方法序列。基于使用图获取待测方法访问的字段,基于修改图得到能够修改指定字段的方法集合。根据解析得到的访问字段集合,对其中的每一个字段都从修改方法集合中寻找合适的方法构造方法序列。选择方法时需要满足修改给定字段的要求,同时也要尽量简单,避免重复修改,还要考虑到选择出的方法能被实例化和赋值。
(3)基于知识库构建类实例:基于启发式对待测方法分类:根据是否有file对象或进行文件操作的string对象来判断是否需要处理文件。
文件型:找出文件名参数,设置为输入,若有其他参数,用随机数生成器生成随机参数。
非文件型:首先读取文件,转换为字节数组,然后根据操作序列中的每一个项目所需的数据类型逐个从字节数组中截取数据,转换成所需要的数据。
(4)总结不足:对于类实例的构建能力有待提高。本文通过收集待测程序的构造方法和工厂方法等为类提供实例化的方法,对于内建类,需要提供人工帮助,本文能够处理大多数类的实例构造问题,但仍然存在很多不能处理的场合。在知识库中没有建立对接口类的构造方法。
改进:改进实例生成能力;提高生成实例的质量(语义知识)。
基于条件语句污点追踪的模糊测试使用污点追踪平台,执行种子输入,并收集分支的污点信息。选定一条分支做目标,根据污点信息,解析影响分支变量的集合,结合依赖性分析、知识库和修改策略,产生新的输入。若输入没有达到目标,则制定新的修改策略。
变量级污点追踪:对目标中的每一个变量,插入一个字段保存污点信息。
对于一个待测方法,定义污点源为该方法的参数和所属类、实例中的字段。对于方法中的分支,将变量从条件语句中分离出来。分别设置为污点槽。在获取所有的变量污点信息后,进行整合,得到该分支的污点信息。
变异操作:数据变异、操作序列变异、重置操作序列。
基于Java反射机制执行输入。
总结:改进:提高测试输入生成的质量,提高测试输入的执行速率,提高污点追踪的能力。
混合式待测方法调度算法本文采取非检查型异常作为测试准则,如果在测试过程中发现了非检查型异常,则认为程序产生问题。
采用启发式筛选出肯定不会产生错误的方法,减少不必要的测试。
用指令数目、被调用次数、调用其他方法次数、被其他方法调用次数、被测试的次数来描述优先级,结合方法调用图,定义方法的测试优先级。
基于执行反馈动态待测方法调度:在测试开始前,进行初始化,计算出优先级的初始值,在测试过程中,根据路径覆盖情况,更新动态优先级,据此重新排序。



