论文部分内容阅读
在软件产品的开发和维护过程中,因移除软件内在缺陷、完善已有功能、重构已有代码或提高运行性能等,需要不断的对程序代码进行修改,回归测试也成为了软件演化过程中最重要的活动之一。随着软件演化频率的提高,回归测试变得更加频繁。由于测试资源和时间的限制,在回归测试中执行全部的测试用例显然是不现实的,因此,如何利用测试用例的子集尽早地发现更多的错误是本文研究的重点之一。同时,软件调试作为软件开发的重要组成部分,是排除软件错误的重要手段,但它也是软件开发过程中最为复杂与耗时的部分,据统计,软件开发中50%~75%的工作都集中在减少软件错误上。错误定位技术以定位错误在程序中的位置为目标,利用已执行的测试用例的执行信息(路径,结果等),并结合相应的算法,对程序代码中存在错误的可能性进行评估。显然,测试用例的选取直接影响了错误定位的精度。因此,如何选择合适的测试用例以提高错误定位效率也是本文研究的重要课题之一。 本文主要研究在软件测试的两个重要活动——错误检测与错误定位过程中,测试用例的使用对错误检测和错误定位效率的影响。针对回归测试活动频繁、测试资源受限的问题,研究通过对测试用例的优先排序,达到使用较少的测试用例尽快地检测出程序中较多错误的目标。在确定程序中存在错误之后,需进一步定位出错误的位置,本文基于现有的错误定位技术,研究通过约简测试用例及优先排序测试用例,尽快的定位错误的位置,提高错误定位的效率。 本文的主要研究成果如下: (1)提出了一个结合聚类和调度算法的测试用例优先排序算法,用以提高回归测试中错误检测的效率。该算法基于相同或相似属性的测试用例具有相同或相似的错误检测能力的特性,使用凝聚层次的聚类算法对具有相似覆盖轨迹的测试用例进行聚类分组。在分配测试用例执行优先级时,算法基于测试用例的历史错误检测能力和已执行的测试用例的反馈信息,采用动态优先级调整策略和超时响应机制相结合的方式,选择一个最优的测试用例执行。实验结果表明,该方法能有效提高回归测试中错误检测的效率。 (2)提出了一个基于程序改变和方法调用关系的测试用例优先排序算法,用以提高回归测试中错误检测的效率。该算法首先通过静态代码分析,获取程序中被修改的代码以及方法间的调用关系,进而预估每个方法中包含错误且错误会发生的风险。根据测试用例的动态执行轨迹,分析测试用例在整个程序上检测错误的能力,最后将测试用例优先排序问题转换为一个整数线性规划问题,对问题求解得到测试用例的执行序列。实验结果表明,该方法能显著提高回归测试中错误检测的效率。 (3)提出了一个基于覆盖相似性的测试用例约简方法,用以提高错误定位的效率。该方法突出失败测试用例在定位错误上的重要影响,单独考虑每一类具有不同覆盖轨迹的失败测试用例,为每一类失败测试用例选择与其覆盖轨迹最为相似的成功测试用例并构成其相似测试集,利用现有的基于语句覆盖的错误定位方法和各个相似测试集提供的覆盖信息,最终定位出程序中错误的位置。实验结果表明,该方法不仅可以减小测试用例的规模,而且可以有效提高错误定位的效率。 (4)提出了一个面向错误定位的测试用例优先排序方法。该方法作用于回归测试中,其最终目标是在测试用例未执行的情况下,通过对测试用例的优先排序,提高错误定位的效率。该算法基于测试用例对语句可疑值排序的影响对测试用例排序。首先利用测试用例的历史执行信息,计算语句的初始可疑值排名,然后从剩余的待排序测试用例中依次选取能使高可疑语句的可疑值排名提高最多的测试用例。实验结果表明,在未取得准确测试信息的情况下,该方法依然能有效提高错误定位的效率。