论文部分内容阅读
软件测试是工业界提高软件可靠性、安全性和健壮性的主要技术途径,是软件工程周期中十分重要的环节。随着软件规模的增加以及软件在各个应用领域重要性的提升,软件测试在软件开发周期中的预算比重也不断上升,达到了50%--80%。因此如何提高测试自动化程度,减小测试代价成为工业界和学术界关注的重要问题。测试用例自动生成作为自动化软件测试中一项重要技术能大幅减少软件测试的代价、缩短软件开发周期。然而,目前测试用例自动生成技术仍存在一些问题,研究如何解决这些问题具有重要意义。本文关注基于动态符号执行的测试用例生成技术,针对动态符号执行中存在的路径组合爆炸和约束求解不准确等问题,提出了一种路径空间搜索策略和一种改进非线性算术约束求解过程的新算法,并且以这两项技术为基础实现了一个原型工具。本文的主要研究内容有:1)提出一种未覆盖分支数指导的搜索策略,它计算每个分支的后继未覆盖分支数的近似期望值,以此为权值指导搜索过程:在动态符号执行过程中记录已覆盖的分支,根据每个分支的后继分支被覆盖情况更新分支的权值,选择合适的分支组成路径条件;最后生成覆盖新分支较多的测试用例。2)提出一种改进动态符号执行中非线性算术约束求解过程的算法。该算法利用连续求解的路径条件约束具有相似性这一特征,在求解非线性算术约束时充分利用上次约束求解的输出信息,避免求解出错并减少求解时间。3)实现原型工具并评估本文所提策略和算法,将本文所述搜索策略与其它搜索策略在三组测试基准程序上进行比较,本文还评估了所述改进非线性算术约束求解过程算法的时间开销。本文所述方法提高了基于动态符号执行的测试用例生成技术的性能。实验表明,相比其它搜索策略本文所提策略能大量减少覆盖可达分支所需的测试用例个数,最好情况下能减少93%的测试用例。本文提出的约束求解算法能以更小的时间开销求解非线性算术约束,与传统的动态符号执行工具相比,本文约束求解算法能减少8%到18%的求解时间。