论文部分内容阅读
为了提高软件测试活动的效费比,软件工程领域的研究者们提出了测试用例排序技术:通过重新编排测试用例的执行顺序以求在更短的时间内发现更多的软件错误。实践证明,使用测试用例优先级划分技术使得软件测试工程师有可能在测试资源和时间有限的情况下发现更多的软件错误,而且,软件错误的暴露时间提前使得软件工程师们有充分的时间来修正错误并灵活调整项目进度,最终使得软件系统的可靠性在较短的时间内得到保证。面向方面编程(Aspect-Oriented Programming, AOP)是一种新的编程范式,其核心思想是分离关注点与模块化,它允许关注点的分离并提供了一套描述这些分离出来的横切关注点的机制,以此保证核心关注点与横切关注点的无缝结合,从而解决了面向对象程序设计在系统建模阶段由于横切关注的存在而导致的代码分散和代码纠缠问题。得益于这种新的编程方式,软件开发人员可以集中精力分别完成核心业务逻辑和横切逻辑,最终得到一个低耦合,高内聚的软件系统。随着面向方面程序设计的蓬勃发展,面向方面软件的测试技术研究获得了越来越多的关注。然而现有的测试用例排序技术没有考虑到AOP的各种特性,无法很好地应用到面向方面软件的测试中去。为了提高面向方面软件测试活动的效费比,本文提出了一种改进的面向方面程序的调用图表示法和生成算法,并在此基础上开发了基于静态分析调用图的面向方面软件的测试用例排序技术。该技术着重从错误易发性(Fault Proneness)和错误严重性(Fault Severity)两方面来评估每一个待测试模块的测试重要性(Testing-importance),然后通过控制流分析获得各个测试用例的系统覆盖信息,最后根据测试用例所覆盖到的所有模块的测试重要性总和来确定每个测试用例的执行优先级。基于以上方法,本文设计实现了可应用于AspectJ程序和Java程序的测试用例排序工具APROS。与传统的测试用例排序技术有所不同,APROS脱离了对测试用例历史执行数据以及程序不同版本间代码差异信息的依赖,因此其应用范围不再局限于回归测试领域而是扩大到了非回归测试领域。实验表明,执行APROS排序后的测试套件能显著提高严重错误的发现速率,通过修正这些提早暴露出来的程序错误,我们可以很快地缩小软件错误在整个系统中的影响范围。