论文部分内容阅读
软件测试是保障软件质量的重要手段。传统的手工测试存在效率低、耗费人力和时间资源、无法有效量化管理等缺点,自动化测试在软件测试中所占比重日益增加。测试自动化就是希望能够通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。测试数据自动生成问题是软件测试自动化中的一个基本问题。高效自动地生成满足测试需要的测试用例,是提高软件测试工作效率的重要手段。 在面向路径的测试用例生成问题中,路径覆盖是一种非常苛刻的覆盖准则,测试人员往往只能根据一定的准则对全路径集合的某个有限子集进行测试。线性独立路径覆盖测试就是一种对全路径集合的一个有限子集进行测试的方法。传统方法通过程序得出程序的结构图,根据结构图确定程序的圈复杂度,然后再根据结构图和圈复杂度求出程序的一组线性独立路径,最后分别针对线性独立路径组中的每条路径求出相应的测试用例。这种传统方法没有运行被测程序,是一种静态的方法,由于机械地将源代码表达为有向图和程序路径,掩盖了代码中的逻辑信息,通过结构图得到的圈复杂度可能比程序实际运行时的圈复杂度大,得到的线性独立路径在程序实际运行中由于存在相互矛盾的语义依赖关系有些是不可达的,也就无法生成相应的测试用例。 论文提出了一种生成线性独立路径覆盖测试用例的动态算法,其基于遗传算法,动态运行源程序,以路径向量矩阵秩的大小、离未经过分支的距离来构造适应度函数,通过进化逐渐逼近程序的实际圈复杂度,直接得到满足线性独立路径覆盖率为百分之百的用例集合,而且是一个最小集合,不存在传统算法的不可达路径问题。另外,不同于以往对遗传算法的应用,文中动态算法针对线性独立路径问题的特殊性,种群中个体的染色体长度不统一,每个个体的染色体长度随着进化逐渐增加,在交叉和变异操作中将染色体划分为需要保护的部分和需要进化的部分,交叉和变异只针对需要进化的部分。文中最后对算法进行了实例验证,结果表明算法能够正确、有效地生成满足线性独立路径覆盖率为百分之百的用例集合。