论文部分内容阅读
随着计算机软件的复杂性越来越高和规模越来越大,错误定位在整个软件开发和测试过程中需要花费时间和精力的比重越来越多。目前主要的调试工具是集成开发环境中的调试器,但是需要开发人员对程序非常的了解,并且有着丰富的经验直觉去设置断点,由于调试程序没有将检查的语句按照一定的优先级进行排序,所以需要花费大量的成本。为了解决手工操作调试器的问题,人们近几十年来提出了自动化错误定位方法。通过自动化错误定位方法缩小搜寻错误的范围,然后再通过手工方式找到错误根源。其中,基于覆盖率的错误定位方法通过运行大量的测试用例,得到测试用例的覆盖程序实体的信息和测试结果,利用可疑度公式得到各个程序实体的可疑度排序。由于这种错误定位方法的计算复杂度低,所以已经被广泛使用。然而这种方法也存在自身的不足,例如,没有充分分析程序实体间的相互关系,即控制依赖和数据依赖。除此之外,在软件开发和测试中,回归测试与软件调试是迭代进行一直到没有错误被检测出来为止,如果将回归测试用例全部用于错误定位将大大增加开发和测试成本,并且回归测试用例中存在着相同或者相似的测试用例,偶然性正确的测试用例以及在程序发生改变,例如新增程序,删除不必要的程序以及修改原来的程序等时回归测试用例也会产生过时的测试用例,不受控制的测试用例,冗余的测试用例和新的测试用例等。并且没有考虑程序中功能模块之间的调用,函数之间的调用以及一个函数中的控制依赖和数据依赖对回归测试用例的影响。为了解决以上问题,本文考虑了影响分析,依赖和权值,改进遗传算法和软件度量的基于回归测试用例的错误定位方法,论文的主要成果包含以下几个方面:(1)提出了基于影响分析的回归测试优先级错误定位方法,这种方法首先利用Ochiai错误定位方法得到初始语句可疑度及可疑度排行,其次,利用控制依赖图和数据依赖图建立联合依赖图,通过初始语句可疑度和联合依赖图得到各个节点的可疑度和可疑度排行,将初始语句可疑度排行加上各个节点的可疑度排行得到最终可疑度排行,最后,利用最终可疑度排行计算各个测试用例语句覆盖的最终可疑度排行总和,数值越大的测试用例,优先级越高,利用按照优先级排序好的测试用例进行回归测试错误定位。通过实验研究与分析,基于影响分析的回归测试优先级错误定位方法能够提高定位程序中的错误的效率。(2)提出了根据控制依赖和数据依赖,测试用例覆盖表和测试结果得到每条语句被成功或失败测试用例控制依赖和数据依赖覆盖的总次数得到频繁被成功或失败测试用例覆盖的语句来缓解相同或相似测试用例对可疑度排行的影响,并且增加对失效产生上下文的理解。然后利用向量夹角余弦权值公式计算每个成功测试用例的权值来减弱偶然性正确的测试用例对可疑度计算的影响。最后利用可疑度公式即每条语句被失败测试用例控制依赖和数据依赖覆盖的总次数除以每条语句被成功的测试用例覆盖的权值之和的绝对值对语句可疑度进行排序来有效地进行回归测试用例错误定位。实验结果表明,利用依赖和权值改进回归测试用例的错误定位方法的效率要优于基于覆盖率和基于依赖分析的回归测试用例错误定位方法。(3)提出了基于改进遗传免疫算法回归测试用例生成的错误定位方法,将人工免疫算法加入到遗传算法中并进行改进来提高面向错误定位的回归测试用例的质量。在回归测试中,代码的改变包括新增代码,删除不必要的代码以及修改原来的代码等。因此回归测试用例产生变化,产生了过时的测试用例,不受控制的测试用例,冗余的测试用例和新的测试用例。所以通过改进遗传算法中的适应值计算,以亲和度计算和浓度计算代替适应值计算使得更改的代码与回归测试用例紧密相连又保证回归测试用例的多样性,再通过将遗传算法中以交叉为主,变异为辅与人工免疫算法中以变异为主,交叉为辅相结合,保证测试用例可以执行多条路径。然后通过克隆抑制和接种疫苗保证经过交叉,变异的测试用例依旧与更改的代码紧密相连。最后群体更新得到最优抗体,最优抗体中的抗体可以覆盖所有抗原A。因此改进遗传免疫算法的回归测试用例生成的错误定位方法可以缓解回归测试用例中产生的过时的测试用例,不受控制的测试用例,冗余的测试用例和新的测试用例的问题。(4)提出了基于软件度量的归测试用例优化的错误定位方法,这种方法利用历史缺陷按照功能点分类并结合缺陷严重级别和优先级别以及功能模块的调用频率得到功能调用模块缺陷率,进行回归测试用例功能优化,再根据函数之间的调用频率得到回归测试用例函数优化,最后以其历史Ochiai可疑度,程序依赖图中的控制依赖边和数据依赖边得到平均节点Ochiai可疑度,根据测试用例覆盖节点情况,得到各个测试用例的平均节点Ochiai可疑度之和,利用各个测试用例的平均节点Ochiai可疑度之和对测试用例进行回归测试语句优化,根据最终得到的回归测试优化集利用Ochiai方法进行错误定位。