数据预处理主要用于产生服务依赖图和测试用例,在本章第5.4节中我们已经详细阐述了服务依赖图的构建方法,在本节中我们主要介绍如何将历史数据转化为测试用例。
首先,我们假设Web服务的历史数据是已知的,并且数据格式如下:
(1)历史数据HD以一个执行路径集合的形式描述出来,HD={eti|1≤i≤n},这里eti表示HD中第i条执行路径,n表示HD中执行路径的条数。
(2)在HD中的执行路径eti={s1,s2,…,sm,result},这里sj表示eti中的第j个执行元素并且1≤j≤m,result表示eti的执行结果是成功还是失败,即result=s或result=f,m表示eti中执行行为的个数。
(3)执行路径中的每一个执行元素sj=(inj,bj,outj),这里bj表示所在执行路径中第j个执行的行为,inj和outj分别表示第j个执行的行为的输入和输出变量。
从上面定义的历史数据格式可以看出,每条执行路径的执行行为都是按照顺序进行记录的,即使是并发执行的行为,也无法从历史数据中明确地区分行为间的依赖关系,因此我们需要使用服务依赖图来标记行为间的依赖关系。
(1)如果在服务依赖图中行为b1和行为b2存在并发控制依赖关系,即(n1,n2)∈Econ,并且在执行路径et中有行为b1和b2,那么使用加号来标记行为b1,使用感叹号来标记行为b2,并在加号和感叹号后面加上一个相同的数字来表示这两个行为相匹配。
(2)如果在服务依赖图中行为b1和行为b2存在控制依赖关系,即(n1,n2)∈Ec,并且在执行路径et中有行为b1和b2,那么使用减号来标记行为b1,使用百分号来标记行为b2,并在减号和百分号后面加上一个相同的数字来表示这两个行为相匹配。
(3)对于执行路径et中的两个行为b1和b2,如果b1在b2之前执行,并且b1的输出变量是b2的输入变量,即out1=in2,那么就认为b2(异步)数据依赖于b1。
在标记依赖关系时增加的数字主要是用于区分同一个执行路径的不同依赖关系,假设同一路径中有两组并发控制依赖,如et={…,+1(in1,b1,out1),!1(in2,b2,out2),…,!1(in3,b3,out3),…,+2(in4,b4,out4),!2(in5,b5,out5),…},那么就可以通过数字知道行为b2和b3并发控制依赖于行为b1,行为b5并发控制依赖于b4。在标记完依赖关系之后,我们就可以根据标记后的历史数据构建测试用例。
定义5.9 Web服务WS的测试用例集TS={tci|1≤i≤n},其中:
(1)tci表示测试用例集合TS中的第i个测试用例,它与WS的历史数据中的第i个执行路径相对应;(www.xing528.com)
(2)n表示测试用例集合TS中的测试用例个数;
(3)TSf和TSs是TS的子集,TSf是执行失败的测试用例集合,即WS的历史数据中执行路径结果是f的执行路径集合,TSs是执行成功的测试用例集合,即WS的历史数据中执行路径结果是s的执行路径集合,并且TS=TSf∪TSs,TSf∩TSs=∅。
在测试用例集合中,我们使用pd(b1,b2,con)来表示Web服务WS中的行为b2依赖于行为b1的行为依赖关系且满足依赖条件con,pdc(b1,b2)表示b2控制依赖于b1,pdcon(b1,b2)表示b2并发控制依赖于b1,pdd(b1,b2)表示b2数据依赖于b1。例如,对于订票代理服务中的控制依赖关系可以表示为pdc(b10,b11,t)和pdc(b10,b12,f)。此外,我们使用pdc(b1,∪)来表示所有控制依赖于行为b1的控制依赖关系,用pdc(∪,b2)来表示所有被行为b2控制依赖的控制依赖关系,用pdcon(b1,∪)来表示所有并发控制依赖于行为b1的并发控制依赖关系,用pdd(b1,∪)表示所有(异步)数据依赖于行为b1的(异步)数据依赖关系,用pdd(∪,b2)来表示所有被行为b2(异步)数据依赖的(异步)数据依赖关系。例如,在订票代理服务中:
pdc(b10,∪)={pdc(b10,b11),pdc(b10,b12)};
定义5.10 对于一个Web服务WS的测试用例集TS来说,TS(p d)表示TS中的包含依赖关系p d的测试用例集合,其中:
(1)如果TS中的一个测试用例tc∈TS(pd),那么表示tc中包含依赖关系p d;
(2)TSf(pd)和TSs(pd)是TS(pd)的两个子集,TSf(pd)表示所有失败测试用例中包含依赖关系p d的测试用例集合,TSs(pd)表示所有成功测试用例中包含依赖关系pd的测试用例集合,并且TSf(pd)=TS(pd)∩TSf,TSs(pd)=TS(pd)∩TSs。
定义5.11 对于一个Web服务WS的测试用例集TS来说,TS(b)表示TS中包含行为b的测试用例集合,其中:
(1)如果TS中测试用例tc∈TS(b),那么表示tc中包含行为b;
(2)TSf(b)和TSs(b)是TS(b)的两个子集,TSf(b)表示所有失败测试用例中包含行为b的测试用例集合,TSs(b)表示所有成功测试用例中包含行为b的测试用例集合,并且TSf(b)=TS(b)∩TSf,TSs(b)=TS(b)∩TSs。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。