论文部分内容阅读
软件测试横跨整个软件开发周期,并占据其工作量的40%以上。它是保证软件质量的重要手段。软件测试是为了发现软件错误而执行待测软件的过程,它精心选择不同的测试用例生成技术生成一些测试用例,然后用这些测试用例运行待测软件,并发现错误。在软件测试中,测试用例集规模和检错能力直接决定着软件测试的效果。因此,如何选取一个小规模高检错能力的测试用例集是软件测试的核心任务和关键课题。组合测试技术是一种重要的测试用例生成技术,它根据待测软件系统中各种因素以及各种因素之间的相互作用对系统产生的影响,生成测试用例集。该技术能生成小规模和高检测能力的测试用例集。本文以进一步提高组合测试技术的效果和实用性为目标对组合测试进行研究。首先,对国内外组合测试方法进行深入研究;然后,将各种组合测试方法进行比较权衡后,选取IPOG算法为研究对象进行改进和扩展。论文的主要贡献如下:1)针对现有t维组合测试技术在生成测试用例的过程中,一旦以某种策略选定某个参数值后,就不再改变该值的特性,提出改进。改进后的算法利用测试用例生成过程中反馈的实时信息及时处理测试用例集中冗余值,以获得更优的最终测试用例集。实验证明该算法相对其它t维组合测试算法生成的测试用例集更优。2)针对一些应用软件中,各个输入参数之间往往存在相互依赖关系问题,对改进的组合测试算法进行扩展,并提出一种基于约束的t维组合测试算法。该算法首先计算隐含约束;然后,在每次扩展中,从未被覆盖的参数值组合集中除去约束,并在满足选择标准下,选择不构成约束的参数值填充,直至所有参数扩展完毕。实验证明该算法不仅能够有效处理输入参数之间的相互依赖关系,而且相对其它基于约束的组合测试方法能生成更优的测试用例。3)一些实际的应用软件系统的输入参数之间的关系是非常复杂的,它们之间可能存在约束关系;可能根本没有相互关系;或者存在相互关系,但并不一定刚好是任意t个输入参数之间都存在相互关系。为了能处理更复杂的输入参数之间的关系,我们对基于约束的组合测试算法进一步扩展,并提出基于约束和输入输出关系的变强度组合测试算法。该算法根据输出参数对输入参数进行分类,并在分类的基础上生成测试用例。因测试的最终目的是对错误进行修改,但在修改错误之前,必须要对引起错误的组合进行定位。本文通过将输入输出关系引入基于测试数据补充生成的错误定位方法中对该方法进行改进,并提出一种基于输入输出关系的错误定位方法。基于输入输出关系的错误定位方法并不是生成测试用例所包含的每个模式,而是根据输入参数之间是否存在关系生成错误模式。实验表明,基于输入输出关系的错误定位方法提高了错误定位的准确性。4)本文最后以C++语言编写的程序为待测对象,对基于约束和输入输出关系的变强度组合测试算法进一步扩展。扩展后的算法在生成测试用例的过程中,会考虑部分程序内部结构。因指针类型是C++语言的特征之一,指针指向信息不明确,会导致保守估计IO关系问题,最终会影响测试用例集的优越性,所以在提出基于约束和输入输出关系的变强度组合测试算法之前,提出了一种基于包含约束的指针分析方法。基于包含约束的指针分析方法通过对包含约束语言进行扩展对传统的基于包含约束的指针分析方法进行改进。改进后的指针分析法不仅降低了时间花费,同时也提高了指向信息的精确性。在指针分析的基础上,给出采用灰盒测试技术的组合测试方法。该方法通过考虑程序的部分内部结构不仅优化了测试用例集还提高了错误定位的准确性。