论文部分内容阅读
软件测试贯穿于软件开发的整个过程,是软件开发过程中耗时最长,耗资最多的一个阶段。软件测试通过运行相应的测试用例来发现软件程序中的错误,进而为开发人员或维护人员提供软件维护的必要依据,在软件测试阶段需要更多的发现程序中的错误,能发现错误的软件测试才是有价值的。随着软件版本的不断升级以及软件规模的不断扩大,软件测试过程中所需的测试用例集规模也在不断扩大,运行与维护这些测试用例集是需要代价的,用例集规模的扩大必然会带来运行及维护成本的增加。然而在这些用例集中,可能存在很大一部分冗余用例,它们的存在对软件测试本身毫无意义,可以通过删除这些冗余测试用例来降低软件开发的成本,也就是可以在已有测试用例集中找出它的一个子集来对源程序进行测试,这个测试子集必须要满足和原始测试用例集具有相同的测试覆盖度。目前已有很多方法来约简测试用例集,其中包括很多启发式算法:如贪心算法、HGS算法、GRE算法、GE算法等,实验证明这些方法都可以有效的约简测试用例集的规模。测试用例集规模的约简会产生一个新的问题,那就是随着这些冗余测试用例的删除,约简后测试用例集的错误检测能力也会减弱,且减弱的程度是随约简规模的增大而增加的。怎样在保证约简后测试用例集错误检测能力的基础上约简原始测试用例集就是本文研究的主要内容。本文在分析、总结之前学者研究成果的基础上,引入了程序切片的思想,找到程序中那些可能会引起程序错误,但是使用一般的测试用例来检测,测试结果不可靠的语句节点作为程序的关键点,从关键点开始根据本文构造的切片依赖图对这些点进行切片,从而分析得出使这些关键点出错的变量输入值的取值范围,并利用这些取值范围作为选择保留冗余测试用例思想中的一个测试充分性准则,用它来选取部分冗余用例,以此来使约简后测试用例集的错误检测能力保持在一定的水平之上。最后通过仿真实验来验证这个方法是有效的,能达到既约简测试用例集规模又保持约简后用例集错误检测能力的要求。本文主要完成了以下几个方面的研究工作:1.提出了程序关键点的定义并就运算类程序给出了关键点的分类。2.提出一种新的用于程序切片的依赖图构造方法。3.对程序关键点进行切片并分析使得它们出错的变量输入值取值范围,并将这个范围作为一种测试用例集约简的覆盖准则。4.结合本文研究内容改进选择保留冗余测试用例思想,并将其形式化为算法。5.设计并实现两个仿真实验,第一个用来验证本文构造的切片依赖图不会影响程序切片的正确性,另一个用来验证本文方法针对所研究的程序类型来说,在保持约简后用例集错误检测能力上面是有效的,能达到既约简测试用例集规模又保持约简后用例集错误检测能力的目的。