王 波,柴玉梅,王黎明
(郑州大学 信息工程学院,河南 郑州450052)
在软件设计和实现过程中,人们提出面向方面程序技术 (aspect-oriented programming,AOP)来提高关注点的分离[1]。符合路径覆盖[2]准则的测试,就是使所有的测试用例覆盖程序中所有可能的执行路径。目前,程序路径的生成,主要依赖于程序的控制流信息[3]。许多针对面向过程、面向对象程序进行分析和维护的技术依赖于控制流信息。Zhen Feng[4]通过调用图、控制流图 (CFG)来表示控制流信息,其中,CFG准确刻画了程序所有的可能执行轨迹,但其只针对面向过程、面向对象程序,并没有说明针对AOP的CFG生成方法。因为CFG包含了AOP的执行路径,所以,T.Xie等人[5]根据特定的覆盖准则来确定AOP的测试数据。Jianjun Zhao[6]针对AOP的特性,详细分析了AOP的静态控制流信息,并使用系统控制流图来表示这些信息。
本文提出了AOP静态[7]控制流信息的表示方法,通过构造完整AOP语句控制流图 (complete AOP statement control flow graph,CSFG)来表示AOP的静态控制流信息,并使用邻接表存储CSFG,然后对CSFG进行遍历,得到AOP的所有可执行路径和不可执行路径。
定义1 语句控制流图 (SFG):SFG是一个有向图,SFG=<N,E,entry,exit>,其中,N:表示节点的集合,每个节点代表程序中的一条语句;E:表示边的集合,每条边为一个有序节点对<ni,nj>,表示从ni执行完以后立即执行nj,其中,ni,nj∈N;entry:表示SFG的唯一入口节点;exit:表示SFG的唯一出口节点;
程序的一条路径就是从入口节点entry到nk的节点序列<n1,n2,n3,…,nk>,其中n1=entry,<ni,ni+1>∈E,1≤i<k。
定义2 内部类型成员:一个方面可以声明属于特定类型的成员 (如字段、方法或构造方法),它们称为内部类型成员。