基于整型区间集的数组越界静态自动测试方法研究
基于整型区间集的数组越界静态自动测试
方法研究
第27卷第12期
2006年12月
小型微型计算机系统
M1N卜一M1CROSYSTEMS
Vo1.27No.12
Dec.2006
基于整型区间集的数组越界静态自动测试方法研究
高传平,谈利群,宫云战.,张威.
(北方交通大学计算所,北京100029)
(装甲兵工程学院信息工程系,北京100072)
E—mail:cpgzgy@yahoo.tom.cn
摘要:数组越界是软件中普遍存在的一种故障类型,并对软件安全造成了潜在的威胁.传统的故障检测使用程序插装的方
法,并相应的以编译优化技术来排除掉多余的数组边界检查.这种检测方法不仅降低了程序运行效率,增加了开销,而且往往不
能对故障进行彻底的测试,容易造成漏报.本文在对程序进行静态分析的基础上,通过引入区间概念,建立了整型区间集和数组
区问集,进而给出了数组越界的故障模型,模型的建立对软件故障进行了
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
.本文随后给出了故障检测算法,最后给出了实
验.结果表明这种方法比以往的测试方法具有更强的故障检测能力.
关键词:软件测试;整型区间集;静态分析;数组越界;语法树
中图分类号:TP302.8文献标识码:A文章编号:1000—1220(2006)12—2222—06
ResearchonStaticandAuto--TestingMethodforArrayBoundsBasedonIntegerRangeAg-—
gregation
GAOChuan—ping,TANLi—qun,GONGYun—zhan,ZHANGWei
(Comput~gTechnologyLnstitute,NorthernTranortationLlniversity,BPijing100029,China)
(DepartmentofInformationEngineering,AcademyofArmoredForceEngineering,Beijing100072,C
hina)
Abstract:Asakindoffaultsinprograms,theissueofoutofboundofarrays(OOB)threatenssoftwaresecur
itypotentially.
Conventionalfaulttestingusesthemethodofcodeinsertion,andeliminatestheredundantarrayboundch
eckingwithoptimiza—
tiontechniqueofcompilingtime.Thismethodnotonlyreducestheefficiencythatprogramsrun,butalsoi
ncreasesthespend—
ing.Furthermore,itcannottesttheprogramsthoroughlyandresultstomisssomefaultseasily.Onthebasis
ofstaticanalysis
ofprograms,thispaperintroducesthecorcoptofrangeandsetsupintegerandarrayrangecongregation.T
henthepaperpre—
sentsamodelofOOBfaults.Thismodelcanstandardizesthesoftwarefaults.Thepaperpresentsafaulttes
tingalgorithmand
givesexperimentresults.Experimentresultshowsthatthismethodhasstrongerandbetterfaulttestingab
ilitythantheexist—
ingmethods.
Keywords:softwaretesting;integerrangecongregation;staticanalysis;outofboundofarrays;syntaxtre
e
1引言
数组是C,C++等程序设计语言常见的一种数据类型,
它是若干同类变量的聚合,数组的特定元素通过下标(index)
进行访问.程序在运行中如果数组变量的下标超过了定义时
的大小,就可能导致程序出现异常,从而降低系统运行的可靠
性,这种错误通称为数组越界0OB(OutofBoundof
Arrays).数组越界作为一种故障类型,在软件中普遍存在,并
对软件安全造成了影响.数组越界带来的后果主要有两种:一
是对数组的访问超越了边界,使程序运行结果错误,甚至导致
程序出现异常;二是对数组以外的区域进行操作,有可能引入
恶意代码,对软件安全造成了威胁.
目前对数组越界普遍采用的检测方法是进行程序插装,
即在程序中数组使用的地方加入逻辑断言或其它类型的语
句,以达到检测的目的.1977年,Suzuki与IshibataL1实现了
一
个软件测试系统,这个系统可以检测数组越界故障.其方法
是在每一个数组元素使用的地方加入逻辑断言,然后通过定
理证明技术验证数组越界故障的存在.这种测试方法应用起
来非常费时,并且只能适用于小的程序,因为对数组的每一次
使用都要相应的进行证明,因此这也增加了实现的难度.同时
由于断言的加入,降低了程序的执行效率.DavidLarocheIIe
等也运用程序插装技术实现了对c语言的静态测试,他们的
测试方法借助于静态测试工具LCIint予以实现.该方法将
一
种特殊定义的语义注释添加到程序源代码和
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
库中.为
了对数组边界进行检查,他们在数组声明或动态内存分配的
地方插入了相应的注释,指明数组下标的取值范围以及可使
用的内存区域,通过添加注释对变量的边界和范围进行了约
束,然后通过采用静态分析技术对程序进行了测试,并在可能
收稿日期:2005—09—12基金项目;总装备部十五预研基金项目(41315050107)资助.作者简介:高传平,男,1977年生,博士,研究方向为
软件测试及软件可靠性;谈利群,男,1957年生,高级工程师,研究方向为软件测试;宫云战,男,1961年生,博士,教授,博士生导师,研究方向为
容错计算技术和集成电路测试等}张威,男,1968年生,博士,副教授,研究方向为软件工程,软件测试等.
12期高传平等:基于整型区间集的数组越界静态自动测试方法研究2223
出现错误的地方给出了警告.
程序插装部分实现了对数组越界故障的测试,但是相应
的降低了程序运行效率,增加了开销,因此关于这方面的优化
技术也相继被提出.如:V.Markstein[,Asuru[,R.GuD—
ta,Kolte_6等等,他们给出了多种数组越界故障检查的优
化技术.R.Gupta在他的文章[5]里提出了使用数据流分析技
术来优化数组越界检查,通过建立程序的最小控制流图
MCFG(MinimalControlFlowGraph),实现了边界故障检查
的优化.Kolte_6]与Wol[e给出了一个编译时优化算法,用于
减少由于数组下标检查而额外增加的程序运行时间.他们的
技术依赖于检查实现图(checkimplicationgraph),其中节点
为使用规范形式表述的范围检查,边表示两个节点之间的一
种暗示关系.通过在程序中加入五种类型的检查语句,实现了
数组越界的故障检查,并实现了Fortran编译器Nascent.
文献[73给出了一个按要求排除数组越界故障检查的算
法,这种算法建立在一种称为静态单赋值SSA(StaticSingle—
Assignment)图的基础上,通过在SSA图上增加一些新边,完
成了对图的简单遍历.文章中指出这种方法能检测到Java程
序中存在的45的动态边界故障.
上述文献使用不同的研究方法实现了对数组越界故障的
测试,然而由于方法的局限性和故障本身的特殊性,使用以上
方法不可能对故障进行彻底的测试,往往存在漏报这种情况.
为了解决这一问题,本文在对故障进行分析的基础上,给出了
数组越界的故障模型,并在此基础上进行了测试方法的研究.
2故障定义
定义1.数组变量的状态可以表示为一个五元组:
73state<,73alue,type,uselen,alloc—len>
其中:
?73:vE(程序中所有变量的集合),表示变量名;
?73alue:变量值;
?type:type?丁(程序中所有类型的集合),表示变量对
应的类型;
?use—len:数组下标的值,表示数组变量使用时的长度,
反映数组下标的变化;
?alloc—len:数组定义时的长度;
由于数组越界是下标的越界,因此可以通过比较use—len
和alloc—len的大小来判断是否有越界故障发生.为了能有效
的描述问题,给出定义在以上变量的一些操作函数:
access():对变量进行读,写,修改等操作;
useLe(一):一一”5P—len,一?一(数组变量集合),得
到目前正在使用的数组变量下标大小;
allocLen(一):一一n0f—len,返回数组变量定义时的
大小,即数组初始长度;
有了上面的定义,下面给出数组越界的形式化定义:
定义2.在程序P中任意一条语句s,?5丁(语句集)处,
如果存在数组变量一,Nx~数组变量一的操作access(一),
数组下标的大小不能超过定义时的长度范围,否则就会发生
数组越界错误F.可形式化描述为
VSi?5丁,?Aaccess(一)A(useLen(一)<0
VuseLen(一)?allocLen(一))=F”(1)
3区间分析
,
3.1区间概念
本文提出的软件测试是在静态分析的基础上进行的,由
于程序往往存在分支和循环等情况,有些值只有在程序动态
运行时才能确定下来,因此为了能反映变量的变化情况,本文
引入了区间概念.Harrison[明最早将区间的概念应用到对变
量的分析中,Wagner[则将区间的概念应用到缓冲区溢出的
故障检测中.
定义3.整型变量的值可以表示为一个区间r一上(表
示空区间),或者r一[,n],?n,这里z称为区间r的下
界,n称为区间r的上界.
定义4.对于任意两个区间r一a,6],rz—c,(f],如果
n?f且6?d,则称r1r2.
有了以上的概念,下面给出一个定理.
定理1.定义两个操作符min,max,分别表示区间尺的
最小值和最大值,即下界和上界.对于任意一个集合5,定义
集合的闭区间为:R:[rain(5),max(5)],则区间尺是为集
合5构成的最小闭区间,即对于包含集合5中的元素的任意
闭区间尺(5),都有尺尺(5).
证明略.
定理2.区间集合尺和集合包含关系组成一个序偶<
尺,>,如果给集合尺增加两个元素,上,T,其中上一丁,
一
[一..,+..],N<R,>构成一个格.
证明略.
由于本文讨论的问题主要涉及整形变量,因此本文的讨
论仅限于整形区间,令z表示整形数值集合,IR表示扩展的
整形区间集合,且IR—zU{一..,+..),如果整形变量在定义
时没有进行初始化操作,则默认区间为[一..,+o.].为了能有
效地追踪整型变量的变化情况,在这里定义一个映射函数
range:一,],其中73是一个整形变量.通过对程序进行
静态分析,完成对变量的区间分析.
3.2区间分析
定义5.给定任意两个区间r一a,6],rz—c,d],定义
区间上的+,一,*,/基本代数运算如下:
r1+r2一[n+f,6+(f]
r1-r2一a—d,b-f]
r1*r2一[rain(n*f,*d,b*f,b*).max(n*f,口*d,b
*f,b*(f)]
r1/r2一
f[min(a/c,a/d.b/c.b/d),max(a/c,aid,b/c,b/d)]c?d<O
<[min(a/c,a/d,b/c,b/d),max(a/c,a/d,b/c,b/d)]o<f?(f
一
..,+..]f?o?d
在多分支路径的交汇点,整型变量的区间为各分支结束
2224小型微型计算机系统2006焦
点处变量区间的并集.
定义6.定义区间的U操作如下.给定两个区间r
6],r2一[c,],则:
r1U上一上Ur1一r1
rU-V—TUr一T
定义1O.定义整型变量的区间映射集合(简称整型区间
,集)IS一{<,r>l?V…rEIR},表示整型变量对应的区
间值集合.
譬如:<n,I-5,5]>表示变量n的值为5,<i,1-5,7]>表
r1Ur2—1-rain(n,C),max(6,d)]
本文为每一个整形变量定义了一个区间,由于变量在语
法中被看为表达式,另外在有些情况下也需要计算表达式的
值,因此应该相应的为表达式定义一个区间,这个区间反映表
达式的值.
定义7.定义表达式的区间,区间映射关系为range:ex-
户r—R,即表达式区间R—range(expr),其中ezpr表示表达
式.表达式的区间同样满足上述定义的所有区间运算性质.
在c/c++程序中的区间;
exprRange(expr):计算表达式ezpr的区间,常数,变量
都可以看作表达式.
getlndexExpr(v):得到数组变量目前的下标表达式.
mergeRange(.r1,.r2,.r3,…,.rl,…,.r):区l司
融合,表示在程序分支交汇点处变量的区间,其中表示
变量在程序分支点处的区间,该函数返回分支交汇处变
量的区间,结果是各分支区间的并集.
add(,S):将元素e添加到集合S中.
changeStatus(P,e):将变量对应的状态由e改变为e,
主要指变量对应区间的变化.
1ookupVar,S):在集合S中查找变量,如果存在变量
,则函数返回变量,否则返回?ULL.
updateSet(S):更新集合S,完成对S的添加,更改操作,
返回值为修改后的集合S.
isEmbody(r,r):区间r是否包含区间r,即是否rr,
如果包含则返回true,否则返回.
statementType(s):判断语句的类型,返回值为语句类型,5
为表达式语句,语句类型包括:变量声明语句(DeclStmt),赋
值语句(AssignStmt)等等,语句类型可以声明为一个枚举变
量.
exprType(e):判断表达式类型,可以为判断表达式(Test—
Expr),二元表达式(BinaryExpr),索引表达式(IndexExpr)
等等.
下面给出整型区间集的构造规则,用integer统一表示整
数类型.
定义12.定义两个变量-rJ,,反映变量在语句使
用前后的区间变化.
定义13.整型区间集S的产生规则如下:
1.?IS;
2.V?ST,如果statementType(si)=一DeclStmt.且s
形如:integer;则add(<,--oo,+?]>,IS);
3.V5?ST,如果statementType(si)=一DeclStmt,且Si
形如:integer—P;则:
(1)若P为常数C,则add(<,[c,c]>,IS);
(2)若P为变量,如果lookupVar(e,IS)!一NULL,则
r一getRange(1ookupVar(P,IS)),add(<,r一>,IS),否
则add(<,[一oo,+o.]>,IS);
(3)若e为表达式,则r一exprRange(P),add(<,
>,IS);
4.Vs?ST,如果statementType(s)一一AssignStmt,且
形如:—e;为整型变量,则:
12期高传平等:基于整型区间集的数组越界静态自动测试方法研究2225
(1)若P为常数c,如果lookupVar(v,IS)!一NULL.
则changeStatus(<,tin>,<,C,c]>);
(2)若P为变量,如果lookupVar(e,IS)!=NULL,则
r~=getRange(1ookupVar(e,IS)),changeStatus(<,r>,
<,r?>);
(3)若P为表达式,则r~.=exprRange(e),changeSta—
tus(<,rI>.<,r础>);
5.V?ST,如果statementType(si)一=AssignStmt,且
s.形如:oe(o表示算术运算符,可以为+一,一一,*一或者
/=),则将该表达式转换为一e(如+一e可以表示为=
+e,e一+e).转换后的变量的区间‰按照以上规则4
的第3条小规则进行处理,且changeStatus(<,>,<,
>);
6.Vs.?S丁,如果e是5的部分表达式,exprType(P)一
=
BinaryExpr,且e形如:++,,,++,一,则变量的
区间r按照定义8进行计算,changeStatus(<,‰>,<,
r?>);
7.Vs?S丁,如果e是s的部分表达式,且exprType(P)
一一
TestEzpr,则变量的区间r按照定义9进行计算,
changeStatus(<,r>,<,r?>);
8.Vs?S丁,如果s是条分支语句的交汇点,变量
在分支点i结束后的区间为.一,则在到达交汇点语句s时,
r一mergeRange(.r1,.r2,.r3,…,.n.…,.),则
changeStatus(<,r>,<,tin>),r为到达语句之前的变
量区间;语句S结束后的变量区间rout按照以上规则产生.
定义13给出了整型区间集的8条构造规则,其中1,7
给出了变量区间集的构造,第8条规则处理多分支语句的情
况.虽然这8条规则还不足以处理程序中出现的各种情况,规
则还不够完善,但是在实际应用中却起到了很好的效果,发挥
了很好的作用.
5故障模型
定义l4.令表示数组变量集合,?表示非负整数集
合,定义一个二元组集合ADEF,集合表示为ADEF—一×
?一{<,>l?,?N),反映在程序中表示为每一个
数组变量映射一个长度,即数组定义时的长度,这个长度是一
个定量.
定义15.令,R表示整型区间集合,NV?v,?N,r
?IR,为每一个数组变量映射一个区间,则数组与映射区间
组成的序偶集合(简称为数组区间集)定义为:
AS一(ADEFU)×IR一{<,,r>l<,>?
ADEFU,r?IR).
如果<,>一,则<,r>表示整型区间r,简记为
r.
定义16.数组区间集AS的产生规则如下:
1.?AS;
2.Vs?S丁,如果statementType(5)=一DeclStmt,且si
形如:丁[?];(丁表示数组类型,是数组变量,?表示数组
长度)或其它类型的数组变量声明,声明时数组长度为?,则
add(<,N,[O,O]>,AS);
3.Vs,?ST,?,如果access().且e=getlndex—
Expr(v),则:
(1)若e为常数c,如果lookupVar(v,AS)!一?uLL,
则changeStatus(~v,N,tin>,<,N,c,c]>);
(2)若e为变量,如果lookupVar(e,IS)!一LL,则
rout=getRange(1ookupVar(P,IS)),且changeStatus(<,N,
r>,<,N,‰>);
(3)若e为表达式,则r=exprRange(e),changeSta—
tus(<,N,r>,<,N,r?>);
下面在数组区间集的基础上给出数组越界的故障模型.
定义2)
定义2的公式1通过比较use—len和alloc—len的大小来
判断是否存在数组越界故障,而定义17的公式2将use—len
表示为区间,通过进行区间包含判断来完成故障的检测.
图1通过一个例子,给出整型区间集和数组区间集的构
造过程,并给出了数组越界的故障检测.
IS=;AS=;
Stl:chars,str[5];
IS一;AS={<str,5.[O,O]>)(依据规则AS2);
St2:inti一0;
IS一{<i,[O,O]>)(依据规则IS3)IAS一{<str,5.[O,O]
>);
St3:intj一1;
IS={<i,[O,O]>,<j,[1,1]>)(依据规则IS3);一{<
str,5’[O,O]>);
St4:scanf(c”,&s);
IS一{<i,[O,O]>,<j,[1,1]>);AS一{<str,5,[O,O]
>);
St5:if(s一一\n){i一3;)
IS一{<i.[3,3]>,<j,[1,1]>)(依据规则IS4);AS一
{<str,5,[O,O]>);
St6:elsei一4;
IS一{<i.[4,4]>,<j,[1,1]>)(依据规则IS4);AS一
{<str,5.[O,O]>);
St7:str[i+j]一!;
IS一{<i,[3,4]>,<j,[1,1]>)(依据规则IS8);
AS={<str,5,[4,5]>)(依据规则AS3);F(对于数
组str,按照定义17)
图1故障模型应用的一个例子
图1中黑体字表示程序语句,语句上下方的文字反映了
区间集和AS的变化情况以及相应的故障检测过程.其中
依据是定义13和16的构造规则,如IS2表示依据为定义13
的第2条规则,AS3表示依据为定义16的第3条规则.由例
子可以看出在程序第7行语句中由于[4,5][O,4],故依据数
2226小型微型计算机系统2006钲
组越界的故障模型(定义17),可以判断此处存在故障.
6算法实现
本文的算法实现建立在程序的语法树和对应的控制流图
基础上,通过遍历程序的控制流图,实现故障检测.故障检测
实现过程为:
6.1构造程序的语法树
分析器读入源程序,经过预处理,词法分析,语法分析和
语义分析,产生与程序对应的语法树.语法树是程序的一种树
形表示,程序的相关信息都可以反映在语法树上.
6.2产生控制流图
控制流图反映了程序的控制结构,从语法树构造程序的
控制流图.程序的控制流图与语法树是相对应的,控制流图的
每一个节点对应语法树上的语句节点,从控制流图可以访问
语法树,同样的从语法树的语句节点也可以很方便的访问到
控制流图的相应节点.
6.3故障检测
执行程序的控制流图,并访问对应的语法树节点,通过遍
历节点及其子节点进行整型区间集和数组区间集的构建与更
新,并完成故障的检测.
故障检测算法如下:
voidscanArray(){
//执行程序的控制流图
cfg-node—getFirstCNode(fct-body);
//得到控制流图的第一个节点
while(node!=NULL)
{
tree—node=getTreeN0de(cfg—node);
//得到与控制流图节点相对应的语法树节点
tree-node一>traverse(pre--action,aft--action);
//访问语法树节点
if(isArrayExist(tree—node){
//存在数组使用
checkArray(tree—node);)
//检查是否存在数组越界
node=scceed(cfg—node);
//访问控制流图的下一节点
}
voidCtreeNode::traverse(pre--action,aft-action){
??遍历语法椭
if(!visited()){
preVisit(pre-action);)
//执行节点访问前动作
if(!sDnsVisited()){//遍历子节点
deaIBack();//处理回溯
visitSons()://访问子节点
for(sons(1ist);list;++list){
list一>traverse(pre--action,aft_action);)
//递归调用子节点
aftVisit(aftnaction);//节点访问后动作
)
voidcheckArray(CtreeNode*tree-node)
{
array--name—tree-node一>getArrayVar();
//得到数组变量
index=tree—node一>getIndexExpr();
//得到数组下标
range—getRange(index);
//得到下标目前长度use—len
temp--name=lookup(array-table,array--name);
//在AS中查找变量
temp--name一>setRange(range);
//重新设置数组变量区间,更新AS
len=temp--name->dimension():
//得到数组变量定义的长度alloc-len
if(isEmbody(range.1en)=一0)
//判断是否越界
printError(tree—node,ARRAY—ERROR);
//故障输出
)
图2数组越界故障检测算法
故障检测算法在对语法树进行遍历时,采取了递归调用
的方法,并在遍历语法树的过程中完成整型区间集与数组区
间集的构造.
7实验
将以上提出的方法运用到实践中,进行了软件测试工具
OOBFTS的开发,并对一些软件进行了测试.
工程应用1:
首先对某军用软件进行了测试,被测软件大小为3.
41M,在一台P42.4G,内存256M的机器上进行分析,花费了
2分35秒的时间,测试结果检查出19个IP点,为了评估系统
的实用性,我们人工检查了系统检测出的故障,并最终确认发
现了8个故障.测试结果为:
表3一个软件的测试结果
其中精确度表示经人工复查后确认的故障数目占IP总
数的百分比,即:精确度=Defeets/IPs.
此后陆续对一些军用和民用软件进行了测试,测试结果
表明:与其它软件测试工具相比,OOBFTS需要较短的分析
时间.加上预处理花费的时间,一般的对一个十兆左右的软件
进行测试仅需要半个小时左右,与很多功能测试软件的动辄
几个小时甚至几天相比,大大缩短了测试周期.
工程应用2:
Reasoning公司是美国一家知名的软件测试公司,其业
务主要是对软件进行静态测试.为了对比同类测试工具的性
表4不同工具的测试结果对比
能,我们对一个8万行左右的软件源程序进行了测试,并和
Reasoning公司的IQA测试工具的检测结果进行了对比,得
出对比结果如表4.
12期高传平等:基于整型区间集的数组越界静态自动测试方法研究2227
从上面的测试结果对比可以看出,我们的测试工具比
IQA发现了更多的检测点,并且经过人工验证后发现的错误
也要比IQA的多,因此部分解决了故障的漏报问题,同时相
比之下精确度也基本相当,因此从测试结果的角度讲,我们的
测试工具具有更强的故障检测能力.
8结束语
本文在对程序进行静态分析的基础上,通过引入区间的
概念,解决了由于多分支路径的存在导致变量值无法确定的
情况.在此基础上建立了整型区间集和数组区间集,并进而提
出了数组越界的故障模型,模型的建立为软件测试工作的展
开提供了理论依据.本文随后给出了故障检测的算法实现,并
给出了实验结果分析,结果表明依据本文提出的方法开发的
测试工具具有更强的故障检测能力,这也进一步说明本文建
立故障模型的方法是可取的,建立的故障模型是正确的.课题
研究下一步的工作是继续完善数组越界的故障模型,并进一
步提高软件测试的自动化水平.
References:
[1]SuzukiN,IshihataK.Implementationofanarrayboundcheck—
er[C].In:ACMSymposiumPrinciplesofProgrammingLan—
guages,1977;132—143.
[2]LarochelleD,EvansD.Staticallydetectinglikelybufferover—
flowvulnerabilities[J].In:ACMSIGPLAN—SIGACTConfer—
enceonthePrinciplesofProgrammingLanguages(POPL),
January2002.177—190.
[3]MarksteinV,CokeJ.MarksteinP.Optimizationofrange
checking[C].AcmSigplanSymposiumonCompilerConstruc—
tton,June1982:114—119.
[4]AsuruJM.Optimizationofarraysubscriptrangechecks[J].
ACMLettersonProgrammingLanguagesandSystems,1992,1
(2):1O9—118.
[5]GuptaR.Afreshlookatoptimizingarrayboundchecking[C].
ProceedingsoftheACMSIGPLAN90ConferenceonProgram—
ruingLanguageDesignandImplementation,NewYork.1990,
(2O一22):272—282.
[6]KolteP,WolfeM.Eliminationofredundantarraysubscript
rangechecks[c].In:ACMSiglanNoticves—InternationalCon—
ferenceonProgrammingLanguageDesignandImplementation,
LaJolla,CA,USA,June1995:270—278.
[7]BodikR,GuptaR,SarkarV.ABCD:eliminatingarraybounds
checksondemand[c].In:ACMSigplanConferenceOilPro-
grammingLanguageDesignandImplementation,Vancouver,
Canada,June2000:321—333.
[8]HarrisonWH.Compileranalysisofthevaluerangesforvari—
ables[J].IEEETransactionsonSoftwareEngineering,1977,3
(3):243—250.
[9]WagnerD,FosterJ,BrewerE.Afirststeptowardsautomated
detectionofbufferoverrunvulnerabilities[c].In:Symposium
onNetworkandDistributedSystemsSecurity,2000:3-17.
[1O]HaoRui—bing,WuJian—ping,ChansonST.TUGEN;atoolfor
automatictestsuitegeneration[J].JournalofSoftware,1994,
5(5):26—38.
附中文参考文献:
[1O]郝瑞兵,吴建平,s.T.Chanson.测试集自动生成工具TUGEN
的设计与实现[J].软件学报,1994,5(5):26—38.