论文部分内容阅读
软件测试主要分为三个步骤:(1)为待测程序设计一组合理的测试用例;(2)在测试程序中执行设计好的测试用例;(3)判断执行结果和预期结果是否一致,以此确认输出的正确性。手工设计测试用例所需成本高,需要测试人员具备丰富的经验。实现测试用例生成的自动化有利于提高软件测试效率,降低测试成本。测试用例可以随机生成,也可以依据一些测试覆盖准则生成可以覆盖指定测试目标的测试用例。根据覆盖准则所考虑的程序实体的不同,可以分为两种类型:(1)基于控制流的测试覆盖准则,如语句覆盖、分支覆盖等;(2)基于数据流的测试覆盖准则,如所有使用覆盖准则等。其中数据流测试覆盖准则关注的是程序中的数据流交互关系,如果某条语句定义了一个变量且该变量用于另一条语句,就有必要执行经过这两条语句的路径来检查这之间是否存在错误。相比较于基于控制流的覆盖准则,数据流覆盖准则更容易检测到程序中通过变量引起的方法交互之间存在的错误,有着更为广泛的应用前景。但是,目前在基于数据流准则的测试用例生成问题上,依然有一些不足之处。包括:(1)数据流测试使用的适应度函数所包含的测试用例信息单一,无法较好地指导测试用例的进化;(2)覆盖数据流测试目标的难度高于分支等测试目标,导致数据流测试复杂度高,影响了数据流测试的应用。为此,本文对基于数据流准则的测试用例生成开展了以下相关的研究工作:(1)利用遗传算法实现基于数据流准则的测试用例自动生成方法,并设计了一个新的适应度函数指导测试测试用例的进化。适应度函数分别考虑定义节点和使用节点,利用分支距离度量测试用例到节点的距离,并引入一个常量来表示杀死节点信息,为测试用例的进化提供更多的信息,提高测试效率。(2)生成测试用例之前,利用所有使用覆盖准则和分支覆盖准则之间的并行覆盖关系,将部分数据流测试目标定义使用对替换为分支测试目标。在生成测试用例过程中,对于这部分被替换的目标,只需要保证测试用例覆盖对应的分支,不需要保证测试用例同时覆盖定义节点和相同变量的使用节点,也不需要额外考虑定义节点和使用节点之间是否存在杀死节点。以此降低数据流测试的复杂度。(3)设计并实现一个面向Java的基于数据流准则的测试用例自动生成工具DFTCG,使用遗传算法实现基于搜索的测试用例生成方法。提供可视化的界面方便使用者进行相关的配置。