




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章基于程序变异的测试充分性评价7.1 导引 程序变异是一项用于评价测试优良程度的有效技术,它为测试评价和测试增强提供了一套严格的准则。 当测试人员采用变异技术来评价测试集的充分性或增强测试集时,我们称这种活动为变异测试。有时,使用变异技术对测试充分性进行评价也称做变异分析。7.2 变异与变体 变异是一种变更程序的行为,哪怕只是轻微的变更。用P表示被测原始程序,M表示轻微变更P后得到的程序,那么M称为P的变体,P是M的父体。假设P的语法正确,能顺利通过编译,那么M也必定是语法正确的。M表现出的行为可能P相同。例 程序P7.1 1 begin 2 intx,y; 3 input(x,y); 4
2、 if(xy) 5 output(x+y); 6 else 7 output(x*y); 8 end 程序P7.1的变体 变体 变体 1 begin begin 2 intx,y; intx,y; 3 input(x,y); input(x,y); 4 if(xy) 被变异的语句 if(xy) 5 output(x+y); output(x+y); 6 else else 7 output(x*y); output(x/y);被变异的语句 8 end end1M2M7.2.1 一阶变体与高阶变体 进行程序变异时,仅由1次变更所产生的变体称作一阶变体。二阶变体则是进行了2次简单的变更,依次类推。
3、对一个一阶变体在进行一次一阶变更就产生了一个二阶变体,类似地,一个n阶变体可以由一个(n-1)阶变体进行一个一阶变更来产生。程序P7.1 的变体 1 begin 2 intx,y; 3 input(x,y); 4 if(xy+1) 被变异的语句 5 output(x/y); 被变异的语句 6 else 7 output(x*y); 8 end3M高于一阶的变体称作高阶变体。在实际使用中,一阶变体用得最多。原因之一是,高阶变体的数目远远大于一阶变体的数目。7.2.2 变体的语法与语义 用 表示在程序P7.1中计算的函数 = 用 , 分别表示在程序P7.1变体 中计算的函数 = = ),(1 .
4、7yxfp),(1 . 7yxfpx+y 如果 xyx*y 其他),(1yxfM),(2yxfM21,MM),(1yxfMx+y 如果 xyx*y 其他),(2yxfMx+y 如果 xmaxTemp) 7 highCount=1 8 if (currentTemp1maxTemp) 9 highCount=highCount+1; 10 if (currentTemp2maxTemp) 11 highCount=highCount+1; 12 if(highCount=1) danger=moderate; 13 if(highCount=2) danger=high; 14 if(highC
5、ount=3) danger=veryHigh;子程序checkTemp比较3个温度传感器读数是否超过允许的最大值。如果3个读数都没有超过最大值,则返回信号None.否则,当有一个、两个或者三个读数超过了允许的最大值时,相应地风别返回信号Moderate,High,veryHigh.程序P7.2的变体 1 enum dangerLevel none,moderate,high,veryHigh; 15 return(danger); 2 procedure checkTemp(currentTemp,maxTenp) 16 3 float currentTemp3, maxTemp; int
6、highCount=0; 4 enum dangerLevel danger; 5 danger=none; 6 if(currentTemp0maxTemp) 7 highCount=1 8 if (currentTemp1maxTemp) 9 highCount=highCount+1; 10 if (currentTemp2maxTemp) 11 highCount=highCount+1; 12 if(highCount=1) danger=moderate; 13 if(highCount=2) danger=high; 14 if(highCount=3) danger=none;
7、 被变异的语句1M注意,程序P7.2与其变体在行为表现上的差别。在同样条件下三个读数都超过最大值,原程序返回信号veryHigh,而变体则返回信号None。虽然对程序进行的语法变更只是微小的,但核反应堆关闭软件的一次操作失误可能引起一次生态灾难。程序P7.2的变体 1 enum dangerLevel none,moderate,high,veryHigh; 15 return(danger); 2 procedure checkTemp(currentTemp,maxTenp) 16 3 float currentTemp3, maxTemp; int highCount=0; 4 enum
8、 dangerLevel danger; 5 danger=none; 6 if(currentTemp0maxTemp) 7 highCount=1 8 if (currentTemp1maxTemp) 9 highCount=highCount+1; 10 if (currentTemp2maxTemp) 11 highCount=highCount+1; 12 if(highCount1) danger=moderate; 被变异的语句 13 if(highCount=2) danger=high; 14 if(highCount=3) danger=veryHigh; 2M7.3 用变
9、异技术进行测试评价 利用变异技术评价测试集的问题可用下面这段话来表述: 假设P是将要测试的程序,T是P的测试集,R是P必须满足的需求。假设用T中的每一个测试用例对P进行了测试,发现P在每个测试用例中针对需求R都是正确的。这时,我们想知道“T究竟好到何种程度?” 变异技术提供了一种回答上述问题的方法。给定程序P和测试集T,通过计算T的变异值可以获得对T优良程度的定量评价。变异值是一个介于0到1之间的数值。变异值为1表示测试集T针对变异准则是充分的,而变异值低于1则代表T是非充分的。一个非充分的测试集可以通过增加测试用例来增强,使其变异值得以提高。测试充分性评价的步骤: 利用变异技术对测试集进行充
10、分性评价的过程。实线指向一下处理步骤。虚线代表数据在数据库和处理步骤之间的流动。L、D、E分别代表活跃变体、被区分出的变体、等价变体。 P(t)、M(t)分别代表程序、变体在执行测试用例t时所表现出来的行为步骤1 执行程序评价测试集T针对(P,R)充分性过程的第一步就是针对T中的每一个测试用例t执行P。P(t)代表P执行t时被观察到的行为。无论如何,步骤1的最后结果都是一个对于所有tT的P(t)数据库。假设对于所有的tT,P(t)均满足其需求R。若发现 P(t)是错误的,则必须修改程序P,然后重新执行步骤1.当发现程序P针对测试集T是完全正确的之后,采用变异技术评价测试充分性的过程才真正开始例
11、P7.1),(yxfx+y 如果 xyx*y 其他2, 1:0, 1:1, 0:0, 0:4321yxtyxtyxtyxtTp测试用例(测试用例( t)预期输出预期输出f(x,y)实际输出实际输出P(t)001100221t2t3t4t步骤2 生成变体评价测试集T针对(P,R)充分性过程的第二步就是生成变体。假设以下变体是通过下面步骤由程序P变更而来的:(a)变更算术运算符,将所有的加发运算符(+)都替换成减法运算符(),将所有的乘法运算符(*)都替换为除法运算符(/); (b)变更整数变量,将整数变量v替换 v+1.步骤2 生成变体 采用上述方法,共得到程序P7.1的8个变体,分别标记为 至
12、 如下表所示。每次只用下表中的一条变体语句替换程序P7.1中的相应语句,就可得到一个类似于程序P7.1的典型变体。1M8M步骤3和4 选取下一个变体 在步骤3和步骤4中,选择下一个将要考虑的变体,这个变体必须是以前没有考虑过的。从此时开始,将循环选取L中的变体,直到每一个变体都被选取过为止。这个选取过程在步骤3中完成。如L中还有多个未被选取过的活跃变体,那么任意选取其中一个即可,将被选取的变体从L中剔除掉。 L= 8765432,MMMMMMM步骤5和6 选取下一个测试用例 选取变体M后,现在就要努力从测试集T中找到一个测试用例将M与其父体程序区分开。为此,需要针对T中的测试用例执行变体M。这
13、样就进入另一个循环,即针对每个选取的测试用例执行变体M。循环结束时,要么是所有的测试用例都执行完了,要么是变体M被某个测试用例发现与父程序不同,无论哪种情况发生,循环终止。既然已经选取了 ,就要检查能否采用测试集 中的测试用例将其与父体程序P区分开来。在步骤5和步骤6中,选取下一个测试用例。同上面情况类似,只要 中还有未被执行过的测试用例,就选择它。假设选取的事 :1MPTPT1M1t步骤7,8和9 变体的执行和分类 已经选取出了变体M准备执行测试用例t。在步骤7中,使用测试用例t 执行变体M;在步骤8中,检查针对测试用例t执行M产出的结果和执行P产生的结果是否相同。步骤7,8和9 变体的执行
14、和分类U表示输出结果未定义;NE表示变体未执行;*表示第一个区分出此行变体的测试用例步骤10 活跃变体 当测试集T中,没有测试用例能将变体M与其父体程序P区分开来时,M被放回到活跃变体集合L中。当然任何被放回活跃变体集合L的变体在步骤4中都不会再被选取,因为它已经被选取过一次。仅有变体 不能被测试集T中的测试用例区分出来。因此,步骤10中, 被放回到活跃变体集合中。 不会再被选取来测试,因为它已经被选取过一次2M2M2M步骤11 等价变体 在执行完所有变体后,就要检查是否还存在活跃变体,即检查L集合是否非空。如果还存在活跃变体,就要测试其与父体程序的等价性。如果针对程序P输入域的每个测试输入,
15、观察到变体M的行为均与P的行为一致,就称变体M与其父体程序P等价。步骤11 等价变体 在本例中,假设 代表P计算的函数, 计算的函数,如下所示 : 暂且不管 是否等价于P而是寻找满足f=g的条件 x=x1,y=y1,通过对这两个函数的简单分析发现,为了使f=g 成立,以下两个条件必须成立:),(yxfp2),(2MyxgM代表其他如果其他如果yxyxyxyxgyxyxyxyxfMP*1),(*),(22M1111211111)*( :) 1()( :yxyxCyxyxC步骤11 等价变体 为了同时满足这两个条件,必须有 。虽然测试用例 满足第一个条件,但它不满足第二个。然而,下面的测试用例t却能满足这两个条件。 t: 通过计算可以知道P (t)=1,M(t)=2. 这就说明 至少可以通过一个测试用例区分出来。因此 与其父体程序P不等价。由于此时集合L中活跃变体只有一个,而这个变体已经过等价性检查,因此步骤11结束。等价变体集合E仍然为空。011 yx1t2M2M步骤12 变异值的计算 这是评价测试集T针对(P,R)充分性过程的最后一步。给定集合L,D和E,用MS(T)表示测试集T的变异值(0-1),计算如下: 假定M代表步骤2中生成的变体总数,也可以采用如下公式计算变异值:DLDTMS)(EMDTMS)(步骤12 变异值的计算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025个人土地转让合同
- 2025电竞馆装饰装修工程施工合同
- 修房屋漏水施工合同样本
- 农田承包合同书二零二五年
- 总工程师聘用合同样本
- 2025年家畜转基因胚胎项目合作计划书
- 二零二五版探矿权股权转让框架协议范例
- pvc地板清洗合同样本
- 二零二五个人借款合同经典
- 乘坐私人校车合同样本
- 中药饮片处方点评表-副本(文档良心出品)
- JJF1030-2023温度校准用恒温槽技术性能测试规范
- YYT 1849-2022 重组胶原蛋白
- 米什金货币金融学英文版习题答案chapter1英文习题
- 红色资本家荣毅仁课件
- 酒店贷款报告
- 会计职业道德对职业发展的影响研究
- 体育赛事推广方案
- 子宫肌瘤健康教育指导
- 手术室专案改善活动护理课件
- 公交驾驶员心理健康辅导培训
评论
0/150
提交评论