论文部分内容阅读
软件测试作为软件工程的一个重要组成部分,备受研究学者的关注。然而软件测试的花费是极其庞大的,至少50%的软件开发成本用于软件测试,回归测试作为软件测试的一个重要环节,在整个软件测试过程中占有很大的工作量比重。通过研究测试用例的排序问题,提出高效的优先级技术能够有效提高回归测试的效率,使得在较短的时间内能够检测出更多的错误,从而加快测试工作的进度以及新版本的发布,因此研究高效的优先级技术对提高测试效率以及降低测试成本是非常有意义的。测试用例优先级技术通常根据一些准则来调度测试用例的执行顺序以致于能够高效地完成测试目标。目前大多数的优先级技术主要根据覆盖信息、需求信息或测试历史执行信息等来研究排序准则。本文从程序结构出发,考虑程序结构的逻辑复杂性和功能模块影响范围两种影响因素,将其与基于覆盖排序技术的排序准则合并到一起进行研究,提出一种基于圈复杂度和调用次数的测试用例排序方法。该方法主要从两方面来评估测试用例的优先级,一方面通过圈复杂度来衡量功能模块代码的复杂性,作为该模块故障易发性的潜在代理,用来改进传统的以覆盖语句数或覆盖方法数来评估故障易发性的大小;另一方面通过分析待测试程序的静态调用图,以功能模块直接或间接被其它功能模块调用的次数作为该模块故障严重性的性能指标,用来改进传统的依赖历史信息评估故障严重性的大小。然后为评估的故障易发性和故障严重性两种因素分配不同权值,并以此来评估每一个待测试模块的测试能力TA(Testing-Ability)。最后通过分析各个测试用例的覆盖信息,将测试用例覆盖到的所有模块的测试能力的总和来确定每个测试用例的优先级。通过实验,将新技术应用于三个开源项目并对各个项目的单元测试用例进行测试,进一步地与随机排序技术、最优排序技术和基于覆盖的排序技术进行对比。实验结果表明,新的排序技术比随机排序技术和基于覆盖的技术具有更高的错误检测效率,并与最优排序技术最接近,说明该改进算法的有效性和高效性。