基于遗传算法的测试用例自动生成技术研究(4)
时间:2018-07-08 16:42 来源:毕业论文 作者:毕业论文 点击:次
2.2 测试用例生成方法 为了生成测试用例,测试数据必须首先被产生。 测试数据是为了测试程序质量而开发的测试输入,并有预先设想的结果,通过对实际输出结果与预想的结果进行比较,可以直观判断是否达到需求目标。我们可以通过验证一个特定的程序路径是否得到覆盖,或者核实程序是否符合特定的需求,来验证程序的质量和安全性。测试数据的选取是软件测试活动中最关键的部分。合理的测试不仅能够减少工作量,而且能高效地发现程序所存在的缺陷,它既是测试工作的导引旗标,更是软件测试质量稳定的保障。 测试数据的生成要求尽可能全面的覆盖程序的逻辑结构,因此它也是基于路径覆盖的一种测试,包括语义判断和语句覆盖。其基本思想是根据被测程序的逻辑结构,设计合理的出测试用例,并驱动被测程序运行。结构测试的目的,是让每条被测程序的语句均得以执行。因此,应该先对被测程序的流程进行逻辑分析,然后根据一些给定的规则推导必须输入的数据值。 通常将测试数据生成方法分为三种:随机法,静态法和动态法[12]。 值得一提的是,这里的静态法和动态法,都是面向逻辑结构生成测试数据的方法,都属于动态测试,与之前软件测试中提到的静态测试和动态测试不是一个概念。 1,随机法 随机法的基本思想是在输入范围内随机选取用以测试的数据。它可以在取值范围内迅速生成大量的测试数据,且生成单个测试数据快速、简单、易操作。但是,由于生成的测试数据带有大量的重复性,不具代表性,因此对生成的测试数据运行被测软件,便需要花费大量的时间和精力。同时,生成的测试数据具有很大的盲目性,所以难以满足测试的需求。 2,静态法 静态法是指对程序进行静态的分析,比较有代表性的两种方法为:符号执行法和区间算术法。 C.Ramanmoorthy等人和P.D.Coward[13]提出了符号执行法。符号执行就是在一条特定的逻辑路径上执行该路径上的语句,使得该路径得到覆盖。然而它并未真正运行被测程序,只是按照程序逻辑将相应的变量用符号表达式替代。而随着程序规模的增大,对应的符号表达式变得很长,该方法的可用性也就随之变得很差。 区间算术法[14]则是通过静态分析,将指定路径上的所有语句转换成正则约束式表。这种方法通过穷举布尔变量值及对乘除运算的变量分区间,将各个变量的取值区间确定下来。用区间算法将各变量的取值范围一步步缩小,直到找到正确的解,或者发现该路径的不可达。 3,动态法 动态法的方法是,从解集空间S中选取一组输入变量,驱动程序运行,根据程序的运行情况作为反馈,并对变量进行修改,使得修改后的变量再次驱动程序可使得程序按照预期路线进行或者确定此路径不可行。动态法不能保证一定可以找到覆盖该路径的输入值,因此即使程序中一条路径最终没有覆盖,也只能说明该路径的输入空间比较小,不能保证该路径不可达。常见的动态法包括直线式程序法[14]、迭代松弛法[15]、链方法、Gallagher方法[16]等方法。 除了以上测试数据生成办法,不少学者专家将遗传算法等人工智能技术运用到软件测试中,用于测试数据生成自动化,并取得了一些可观的成果。这些方法是在输入空间范围内,随机选择输入数据,运行被测程序,然后根据运行结果,结合概率论思想有方向性地产生新的输入数据,亦即“自启发式”的用例数据生成。其选择数据的过程不受搜索空间条件约束,且不需要其它辅助性的信息,而且在数据选取上有一定的方向性,使得有效数据的生成效率更高。该方法对多峰、大空间、全局优化等复杂问题,有明显优势和高效率。 (责任编辑:qin) |