论文部分内容阅读
作为一种新的软件开发技术,面向方面编程(AOP,Aspect-OrientedProgramming)通过引入新的编程元素,将影响多个类的行为封装到一个可重用模块中,从而消除了面向对象编程中由横切关注点所引起的代码分散和代码纠缠问题,提高了系统的模块化程度,增强了系统的可维护性和代码的重用性。但是,面向方面编程技术的这一特性也使得软件测试具有一定的特殊性,传统的测试方法不再完全适用于面向方面程序,需要提出新的测试方法。而单元测试作为软件测试过程中最早、最基本的部分,是早期发现错误的最好阶段。因此,对面向方面程序进行单元测试的研究是有必要的。方面对类的依赖性以及类的封装性的破坏增加了单元测试的难度。
本文从控制流出发,为面向方面程序定义了三类单元测试模块,分别是Normal Method,Clustering Method和Clustering Advice。为了对测试路径进行选择,引入了一种新的面向方面的测试覆盖准则,即交织边覆盖,可用于验证逻辑触发时间的正确性。从测试自动化角度出发,采用了基于深度优先的路径生成算法和基于遗传过程的测试数据生成算法。在深度优先算法中使用了时间戳的概念,计算并记录遍历对象的状态,指导遍历过程的进行,从而生成测试路径。在此基础上使用改进的混合遗传算法生成测试数据。针对遗传算法早熟的缺陷,通过判断种群早熟的程度,自适应地调整交叉率和变异率,使种群在进化过程中既能保持个体的多样性,又加快了其收敛速度;通过设置爬山阈值,当进化到该阈值规定的代数且仍未取得最优解时,选择当前群体中的最优个体进行爬山操作,以提高算法的局部搜索能力。在Matlab工具上以三角形分类程序作为例子,实现了AOP程序单元测试数据的生成过程。当改进的混合遗传算法执行到指定代数时,生成的目标个体的数目达到了种群的63%,证明了该算法的有效性。通过与相关算法的比较,证明了改进的混合遗传算法的收敛代数有所减小,保持着较快的收敛速度。实验结果表明了论文中所提出的测试方法是可行的。