• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

小型面向对象语言程序测试用例自动生成技术

发布: 2009-10-21 10:52 | 作者: 网络转载 | 来源: 网络转载 | 查看: 369次 | 进入软件测试论坛讨论

领测软件测试网

4.2 信息流分析技术及部分求值技术介绍

信息流分析技术在程序优化,程序静态分析,程序测试等许多方面都有重要的应用.应用领域的不同,分析数据的属性也不同.我们的方法是通过对程序中变量值的获取与传播的分析,着重描述变量与表达式,表达式与变量,变量与变量之间的关系.

我们所研究的语言SOOL基本是从C++化简而来,这种面向对象式语言与函数式语言和逻辑式语言有很大的区别.其中,重要区别之一是:SOOL程序中变量的值是随着程序的执行而动态变化的.这使我们不能采用其它类语言的部分求值技术.

基于面向对象语言自身的特点,我们对面向对象语言求值,我们必须知道一个语句是否应被执行和一个表达式是否可计算.下面,我们给出部分求值技术的描述:

首先,我们引入状态STA和环境ENV: STA:V→{k,u} ENV:V→VAL

STA是变量到状态的映射,k表示变量已知,u表示变量值未知(初始状态所有变量为u);ENV是变量到其值的映射.

我们引入一个表达式求值函数:

M: EXP*STA*ENV→(EXP+VAL)*(k,u)

具体定义如下:

M(E,s,env)=(n,k) 若E=n,且n为常数或E=V,且s(v)=k, env(v)=n ;

(v,u) 若E=V,且s(v)=u;

M'(op,(x1,w1),(x2,w2)) 若E=E1 op E2,且M(Ei,s,env)=(xi,wi), i=1,2.

M'(op,(x1,w1),(x2,w2))= (n,k) 若w1=w2=k, 且x1 op x2=n;

(x1 op x2,u) 若w1=u或w2=u.

语句求值函数定义如下:

TRANS: Stm*STA*ENV→Stm*STA*ENV

在下面的语句求值函数中,(x/y)表示用x代替y 的值.语句求值函数具体定义如下:

(1)TRANS(skip,s,env) = (skip,s,env);

(2)TRANS(read(x1,x2,…,xn,y1,y2,…,ym),s,env)

= (read(y1,y2,…,ym),s(k/xi),env(val(xi)/xi))

其中xi为部分输入,val(xi)为xi的输入值.i=1,2,…,n;

(3)TRANS(v:=E,s,env)

= (v:=E',s[u/v],env) 若M(E,s,env)=(E',u)

= (skip,s[k/v],env[n/v]) 若M(E,s,env)=(n,k)

(4)TRANS(S1;S2,s,env)=(S1';S2'',s'',env'')

其中TRANS(S1,s,env)=(S1',s',env')

TRANS(S2,s',env')=(S2'',s'',env'');

(5)TRANS(IF E THEN S1 ELSE S2,s,env)

= TRANS(S1,s,env) 若M(E,s,env)=(true,k)

TRANS(S2,s,env) 若M(E,s,env)=(false,k)

(IF E' THEN S1';S1'' ELSE S2';S2'',s,env')

若M(E,s,env)=(E',u)

其中TRANS(S1,s,env)=(S1',s'',env'')

TRANS(S2,s,env)=(S2',s''',env''')

S1''=(v1:=n1;…;vm:=nm) (1≤i≤m)

若vi∈Ds1∧env''(vi)=ni∧((s''(vi)=k∧s'''(vi)=u)∨

(s''(vi)=s'''(vi)=k∧env''(vi)env'''(vi)))

S2''=(v1:=n1;…;vm:=nm) (1≤i≤m)

若vi∈Ds2∧env'''(vi)=ni∧((s'''(vi)=k∧s''(vi)=u)∨

(s''(vi)=s'''(vi)=k∧env''(vi)env'''(vi)))

其中Ds表示S定义的所有变量之集.

s'(v)= k 若 s''(v)=s'''(v)=k

u 若 s''(v)=u 或 s'''(v)=u

env'(v)= n 若 s'(v)=k∧n=env''(v)

若 s'(v)=u;

(6)循环语句的求值函数定义如下:

我们把循环语句视为:(WHILE E DO A,N)

其中,N=max(as(v)|v∈DA)+1,as(v)是变量v的稳定长度.

(a)若M(E,s,env)=(false,k) 则

TRANS((WHILE E DO A,N),s,env)=(skip,s,env)

(b)若M(E,s,env)=(true,k) 且n≥0,则

TRANS((WHILE E DO A,s,env)=

TRANS(A,(WHILE E DO A,N-1),s,env)

TRANS((WHILE E DO A,0),s,env)=

(WHILE E DO A,s,env)

(c)若M(E,s,env)=(E',u),则

TRANS((WHILE E DO A,N),s,env)=

TRANS'(IF E THEN (A;WHILE E DO A)

ELSE SKIP; ,s,env)

其中,函数TRANS'为一个新函数,它的定义与函数TRANS基本相同,其不同之处在于赋值语句与循环语句的处理.

TRANS'(V:=E,s,env)=(v:=E',s[u/v],env)

其中M(E,s,env)=(E',k/u)

TRANS'(WHILE E DO A,s,env)=(WHILE E DO A',s',env')

其中TRANS(A,s,env)=(A',s',env')

信息流分析技术通过对变量值的获取与传播的分析,分析输入变量和输出变量之间的关系,变量值的获取及变量值的传播.本文使用信息流分析技术和部分求值技术主要是用于寻找输入变量与判定表达式变量之间的关系以及程序中常量赋值的影响.

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网