Ch4-程序分析技术_第1页
Ch4-程序分析技术_第2页
Ch4-程序分析技术_第3页
Ch4-程序分析技术_第4页
Ch4-程序分析技术_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件测试

-Ch4程序分析技术MPail:zhaohui@赵辉主要内容常用的程序分析技术文本视角句法视角控制流视角计算流视角功能视角

程序分析与测试的关系

程序分析:发现软件特性的技术分析技术1分析技术n……测试技术n测试技术1……测试数据选择程序执行数据收集结果评价测试阶段的分析视角:强调程序的不同特点,并且确定不同程序的特点文本视角

程序=字符+记号的序列文本的规模

文本视角分析工具:文本编辑器文本的行数文本词汇数文本词汇频度句法视角

程序……

语句1语句组1子程序1子程序2子程序n语句组n语句组2……

语句2

语句n……

符号1

符号2

符号n……元素之间的组合关系由语法决定工具:语法分析器、句法编辑器句法视角

语句计数分析程序特性程序插装技术:通过修改源程序或目标代码揭示程序内部的工作原理。标识符交叉引用程序调用变量的声明与未声明变量使用频度程序插装

程序插装方法:借助向被测试程序中插入操作来实现测试的目的。程序插装应用类型:

测试覆盖率和测试用例有效性度量断言检测数据流异常检测路径智能分解句法视角

测试覆盖率度量类型:程序中每条语句至少被执行一次流程图中每个分支至少被执行一次每个可能的路径至少被执行一次

方法:

在控制流中确定一个点集在程序中这些点上插入软件计数器用一组测试用例测试这个程序检查计数器的值,获得覆盖率的范围1.应用于测试覆盖率和测试用例有效性度量的程序插装句法视角

1.应用于测试覆盖率和测试用例有效性度量的程序插装句法视角

1.应用于测试覆盖率和测试用例有效性度量的程序插装

插装程序考虑的问题:

探测那些信息在程序什么部位设置探测点需要设置多少个探测点

探测点位置:

第一个可执行语句之前

Entry语句前后有标号的可执行语句处循环语句及终端语句之后If、elseif、else及ENDif语句之后

logicalif语句之后输入/输出语句之后Call语句之后计算GoTo语句之后句法视角

1.应用于测试覆盖率和测试用例有效性度量的程序插装

测试用例有效性:指该用例揭示程序错误的能力程序格式:Exp1opExp2=Exp1句法视角

1.应用于测试覆盖率和测试用例有效性度量的程序插装测试用例的单一指数:在一次特定测试执行期间,一个测试用例唯一关注于遇到的一个多重表达式的次数表达式:a×(c+(d/e))

关注因子:a,(c+(d/e)),dIf(a==0)si++;If((c+(d/e)==0)si++;If(d==0)si++;...a×(c+(d/e));单一指数越高测试有效性越低断言:在程序的特定部位插入某些用以判断变量特性的语句,使这些语句在程序执行中得以证实,从而使程序的运行特性得以证实,这些插入语句即为断言。句法视角

2.应用于断言检测的程序插装困惑:在正确的位置插入正确的断言.程序错误?断言错误?句法视角

3.应用于数据流异常检测的程序插装变量在程序执行中的4种状态:U状态(未定义状态);D状态(定义未被引用状态)R状态(定义且被引用状态);A状态(异常状态)对变量执行的动作:d动作(定义动作)r动作(引用动作)u动作(取消定义动作)Sqq’aq’=f(q,a)f(U,d)=Df(D,d)=Af(R,d)=Df(A,d)=Af(U,r)=Af(D,r)=Rf(R,r)=Rf(A,r)=Af(U,u)=Uf(D,u)=Af(R,u)=Uf(A,u)=AX句法视角

控制流视角

控制流关系:叙述程序元素和它们的执行次序之间的联系。一个程序通常是一个条件、一个简单的语句或者一个语句块如果元素B可以在元素A之后立即执行,那么(A,B)在程序的控制流关系中,后继的B的执行独立于A的执行ifx<xthenwrite(x)A:x<xB:write(x)控制流视角

控制流的一条路径对应于一个潜在可执行的程序元素序列。如果一个输入引起一条路径的执行,那么这条路径就被称为可达的,否则为不可达。数据流视角

数据流关系:通过它们的数据访问行为关联起来的程序的元素之间的关系。如果元素B使用一个数据对象,该数据对象潜在的在元素A处被定义,那么(A,B)就出现在程序的数据流关系中。数据流的信息可以被引用到代码优化、异常检测以及测试数据生成中ABv数据流图例:X:=X+Y-Z数据流视角

程序切片:通过在一个特定的位置消除那些不影响表达式计算的所有语句产生的程序片断。BeginRead(x,y)Total:=0.0;Sum:=0.0;Ifx<=1thensum:=y;elsebeginread(z);total:=x×y;endwrite(total,sum)End1Begin2Read(x,y)5Ifx<=16then7elsebegin8read(z);10end12EndZ在语句12处切片1BeginRead(x,y)3Total:=0.0;5Ifx<=16then7elsebegin9total:=x×y;10end12Endtotal在语句12处切片用变量切片数据流视角

切片标准:指获得一个程序行为一个子集的规格,它包含程序中一个特定语句和一个变量的集合。

定义1:P是一个程序,并且假定其语句被连续标号,对于P中每一个语句n,定义两个集合:REF(n)是所有在语句n处被引用的变量的集合;DEF(n)是语句在n处被定义的变量的集合。定义2:程序P的一个值的轨迹是一个有限的有序对集合:(n1,v1)(n2,v2)…(nk,vk)ni表示语句,vi表示执行前所有变量值的向量。数据流视角

定义3:程序P的一个切片标准是一个有序对(i,V),其中i是P中一个语句,V是P中变量的一个子集。

C1=(12,{Z})C2=(12,{total})定义4:给定一个切片标准C=(i,V)和一个值轨迹T,定义一个映射函数Proj(C,T),该函数删除了在值轨迹中,左边成分不是i的所有有序对,并且在剩余的有序对中删除其右边向量中不在V中的成分。数据流视角

定义5:一个程序在一个切片标准C=(i,V)上的一个切片S(即S是使用切片标准C之后获得的一个程序子集)是任何满足下面两个属性的可执行程序。属性1:S可以从P中删除零条和多条语句获得属性2:对于轨迹T,无论何时程序P在输入I上阻塞,那么其切片S在轨迹T’上也会对输入阻塞,并且Proj(C’,T’)=Proj(C,T),并且如果语句i在切片中,那么i’=i,或者i’是i最近的后继语句。计算流视角

计算:当程序在执行特定的输入时产生的数据状态的轨迹。一个程序可以被看成一个有限的“计算集”表示。计算流分析的作用:估计代码中遗留缺陷的数量;测试数据扑捉缺陷的能力;程序隐藏缺陷的可能性;计算流视角

原本错误总数=(插入的错误总数/发现的插入的错误数)×发现的原本错误数残留的错误数=原本错误总数-发现的原本错误数目的:评价系统的危险模块,进而评价系统的容错能力。验证测试用例的有效性。与其他测试不同点:测试从系统的故障开始,测试系统在发生故障时的容错能力。1.故障插入

计算流视角

含义:使用故障插入技术来分析测试数据的属性,带有插入错误的程序成为一个变体或变异。执行变体以确定它们的行为是否不同于原来程序的行为。变体分析的产物是关于测试数据杀死变体的程度。变体通过使用变体操作产生:

2.变体分析

表达式1表达式2变体操作计算流视角

2.变体分析

main(){inti;floate,sum,term,x;

scancf(“%f%f”x,e);

printf(“x=%10.6fe=%10.6f\n”x,e);term=x;for(i=3;i<=100&&term>e;i=i+2){term=term×X×X/(i×(i-1));if(i%2==0)sum=sum+term;elsesum=sum–term;}

printf(“sin(x)=%8.6f\n”sum);}变量设成常量main(){inti;floate,sum,term,x;

scancf(“%f%f”x,e);

printf(“x=%10.6fe=%10.6f\n”x,e);

term=0;for(i=3;i<=100&&term>e;i=i+2){term=term×X×X/(i×(i-1));if(i%2==0)sum=sum+term;elsesum=sum–term;}

printf(“sin(x)=%8.6f\n”sum);}<=变成>=main(){inti;floate,sum,term,x;

scancf(“%f%f”x,e);

printf(“x=%10.6fe=%10.6f\n”x,e);term=x;for(i=3;i>=100&&term>e;i=i+2){term=term×X×X/(i×(i-1));if(i%2==0)sum=sum+term;elsesum=sum–term;}

printf(“sin(x)=%8.6f\n”sum);}常量0换成1main(){inti;floate,sum,term,x;

scancf(“%f%f”x,e);

printf(“x=%10.6fe=%10.6f\n”x,e);term=X;for(i=3;i<=100&&term>e;i=i+2){term=term×X×X/(i×(i-1));if(i%2==1)sum=sum+term;elsesum=sum–term;}

printf(“sin(x)=%8.6f\n”sum);}计算流视角

变体操作:

常量变换:常量C变换成C+1,或C-1

标量变换:标量变量替换成另一个,A=B-1,A=D-1

标量替换常量:使用标量变量替换常量,A=1,A=B

常量替换标量:A=B,A=1

源常量进行替换:把程序中一个常量替换成另一个常量。

A=1,A=11,其中11在程序其他语句中出现。

数组引用替换常量:A=2,A=B(2)。2.变体分析

计算流视角

变体操作:数组引用替换标量:A=C+1,A=B(1)+1。

相似数组名字替换:A=B(2,4),A=D(2,4).

常量替换数组应用:A=X(1),A=1

源常量进行替换:把程序中一个常量替换成另一个常量。

A=1,A=11,其中11在程序其他语句中出现。

数组引用替换常量:A=2,A=B(2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论