正则表达式的应用。
第35卷
V01.35
第16期
No.J6
文章编号t
计算机工程
ComputerEngineering
2009年8月
August2009
文献标识码t
A
软件技术与数据库
loo肛铷28f2009)l扣枷2争珈3
中圈分类号ITI,3ll
基于正则表达式的测试数据自动生成技术
董敏,毕盛.齐德显
(华南理工大学计算机科学与工程学院,广州510640)
擅蔓:软件测试是提高软件可靠性、保证软件质量的童要手段。数据自动生成是测试自动化的重要组成部分。提出一种基于正则表达式的测试数据自动生成技术,生成的数据应该具有随机性、可控静j、可定义、有意义、无错误等特性。特剐是对大字段,专有类型等特殊类型的支持,可以解决目前测试数据自动生成存在的问题,具有良好的扩展性。关健诃:软件测试;正则表达式;测试数据自动生成
AutomaticTestDataGenerationTechnology
Based
on
RegularExpressions
Min,BISheng,QIDe-yu
DONG
(SchoolofComputerScience&Engineering,SouthChinaUniversityofTechnology.Guangzhou510640)
[Abstract]Software
test
teStis
all
important
a
waytOimprovesoftware
automatic
test
quality
assurance,Automatic
on
testdatageneration
is
all
importantcompositionof
this
kind
autOmation.Thispaperintroduces
be
techniqueof
datagenerationbased
regular
expressions.Thedatageneratedby
of
aIe
techniquesa咒random.Call
controlled,can
solve
bedefined,meaningful,error-free.and
test
other
characteristics.especiallylargeobject/specialtypes
expansibility.
supported
inthis
technique.Itcall
theprobleminautomatic
test
data
generation
andhasbetter
[Keywordsisoftwaretest;regularexpressions;automatic
data
generation
1概述
软件质量是一个软件企业成功的必要条件,软件测试是保证软件质量的一个重要手段,同时软件测试也是软件开发生命周期中的一项昂贵且耗时的活动。测试工作,特别是涉及数据库操作的软件的测试,往往离不开数据。而目前企业的一般做法是在系统测试之后,才从用户那里得到真实数据(敏感且不允许的数据将用掩{iJ5作适当处理)用作下一阶段的测试。这样就有可能导致以下问题11-2]:(1)测试人员可能会在其他测试阶段,如集成测试,单元测试,基于软件逻辑方面的设计,需要用到用户给的客现的数据,但用户基于安全性考虑或其他原因无法提供。(2)提供敏感数据,但掩码部分影响测试。(3)等待用户提供数据是耗时的。
有部分测试人员习惯于手动插入数据来做测试。同样存在以下问题:(1)对于呈数量级增长的记录数,手动操作需要大量繁琐的操作。(2)测试人员需要认识各种数据类型,并清楚相关表内列的长度、完整性约束,无疑加大了工作负担。(3)数据不满足客观性要求,与真实数据的规范相违背,或测试人员对数据的偏好。(4)手动操作只适用于当前操作对象,基本不可能重用。
上述的任一情况,均会直接影响到测试的质量和效率。本文提出一种基于正则表达式的测试数据自动生成技术。
测试数据的生成过程分为4步:建立程序的控制图,根据覆盖标准选择程序路径,符号演算,成测试数据。存在的问题是程序路径的数量是很大的,路径长度常常也是无限的,因此,选择路径时多数这方面的程序要进行人工干预。2.2随机羡试数据生成程序
这类程序是在输入数据的取值范围内随机选取测试数据。它适用于功能测试与结构测试。在功能测试方面,它从程序的输入数据规格说明出发,对每一等价类选取边界值及典型值,再针对所有等价类的所有取值组合(其个数可能极大),利用正交试验设计法选取测试数据。由于是均匀分布,将各种等价类同等看待,在认为不合理时对重要等价类及等价类的重要取值加权,以剔除不重要的数据。
在结构测试方面,为体现随机性,既要从一个路径域内选取数据,又要从不同的路径域内选取数据。也可以利用正交试验设计法,从大量的候选路径以及各路径的分支中选取服从均匀分布的可行的测试路径。随机测试数据生成程序的主要优点足方法比较简单,同时它也是把某些程序独立性引入测试过程的最为方便可行的办法。2.3根据数据规格说明的酒试数据生成
数据规格说明系统提供了一个数据规格说明语言,帮助基金项目:广东省科技计划粤港关键领域匡点突破基金资助项目
(B07一B2052080)
2测试数据自动生成技术
2.1路径测试数据生成程序p1
这类程序是先对所测试源程序进行逻辑流程的分析,再根据一些给定的规则,如实现某特定的覆盖准则或执行某条路径,推导出必须输入的数据值。
作者筒介:董敏(1977一),女,讲师、博士,主研方向:分布式体系结构,网络安全;毕盛,讲师、博士研究生;齐德是,教授、博士
收稿日期:2008—12.06
E mail:hollymin@sohu.corn
一29_一
万方数据
正则表达式的应用。
用户描述输入的数据,系统使用这一描述生成所需要的输入数据。自动数据生成(AutomaticData
Generation,ADG)程序将
描述数据文件特征的类似英语的ADG码转换成将生成特定
数据文件的PL/1程序。
本文参考上述3种方法的特性,采用其测试数据生成技术的混合策略,以数据库的测试数据生成为例,路径测试数据生成特性和随机测试数据生成特性对应的应于表结构、数据类型和长度;而根据数据规格说明生成测试数据特性对应的应用于完整性约束、数据类型和长度。测试数据基于一种正则表达式生成,是对根据数据规格说明生成测试数据特性的拓展应用,也就是说,基于正则表达式的策略将会生成数据规格,并传递给根据数据规格说明生成测试数据特性。
3基于正则表达式的测试致据自动生成技术
正则表达式描述一种字符串匹配的模式,可用来检查一个串是否含有某种子串、将匹配的子串做替换或从某个串中取出符合某个条件的子串等。3.1正则表达式的设计
正则表达式(RegularExpressions),又称正规表达式,是指一个用来描述或匹配一系列符合某个句法规则的字符串的单个字符串。正则表达式对文本和数据的操纵而言是一种强而有力的工具,被广泛的应用于各种编程语言及流行软件14J。正则表达式在字符串处理上有着强大的功能,对字符串的操作主要包括:字符串匹配,指定字符串替换,指定字符串查找,字符串分割。对正则表达式的设计从下方面考虑:
(1)大小写敏感:区分字母的大小写一方面有助于规范化表达式,不会出现多种表示方法。假设M设定为月份,忽略大小写就可能导致m也能表示月份;另一方面有助于增强拓展性,以单位数的字母为例,区分大小写可多获得26个字符,共52个字符。以m为例,拓展性使以肘表示月份同时以m表示分钟可能。
(2)5个字符集:数字集,字母集,特殊字符集,元字符集,词义集。其描述如下:
1)数字集,数字(顺序排列):0,1,2,3,4,5,6,7,8,92)字母集,大小写字母(顺序排列J:a,b,C,d,e,f,g,h,i,j,
k,1,m,n,o,P,q,r,S,t,U,v,W,X,Y,z,A,B,C,D,E,F’GH,I,J,K,L,M,N,O,P'Q,R,S,T’U,v'W,X,Y,Z
3)特殊字符集,可识别的所有字符集:!,@,舟,一,&(使用时须加转义符)
4)元字符集,%,一,“,+,(,),一,【,】,¥,…5)词义集,储存于外部独立文件中,可扩展。
关于“香港股市股票代码列表”的外部词义集的示例如下:
0001长江实业0002中电控股0003香港中华煤气0004九龙仓集团0005汇丰控股0006香港电灯.
0007高信集团0008电讯盈科0009东方娱乐控股0010恒隆集团0011恒生银行0012恒基地产
(3)使用转义符:某些元字符可能含括了其他字符集的字符,为消除元字符与其他集合字符的二义性,必须在恰当的万方数据
时候应用字符转义。例如,假如采取“%”作为分隔符,就有必要实现用“\%”表示“%”,并在分割之前转义为特殊字符“&pct;”,一般在后面还需逆转义回字符“%”。又例如“(”、“)”,由于在这里的设计涉及优先级处理,因此,有必要实现用“\(”,“\)”表示,并转义为字符“&lc;”,“&rc;”。
(4)实现数据的可定义、可控制、有意义、无错误:利用本文技术生成的数据具有随机性、可控制、可定义、有意义、无错误等特性,随机性要求数据的获取概率是同等的,不会倾向于某一取值范围;可控制对应着语义特性,即可控制数据的整体趋势和数据分布特征;可定义对应着正则表达式模式的技术特性,可根据自动生成或用户的配置策略进行对数据的形式与内容的规范;有意义要求生成的数据是符合用户需求的,客观的,并具有与真实数据相同的形式与内容规范;无错误要求生成的数据是符合定义的,不会出现数据类型、数据大小和数据格式不吻合的情况。
正则表达式有多种不同的风格。本文设计的正则表达式及其描述如下:
(1)基础普通式
%:指定须满足本工具正则表达式风格的解析起始符%#d:样位数字%}}c:#位字符%#s:}}位特殊字符
%[anycharacterset】:任意字符
%}}1~#2d:_f}l一样2任意位数字%#1-#2c:拌l-#2任意位字符%#l一#2s:撑1一挣2任意位特殊字符%【#l-#2】:拌l-#2的任意一数字%[@I.@2I:@1一@2的任意一字符(2)普通式的高级应用
“【‘‘}}”】:拓展%舟d、%样1一样2d,使不包含数字#本类形如%#d^【‘‘#”】,以下类似
^【“@ABC”】:拓展%}}c,%#s,%}}l一}}2c,%#l-#2s,使不包含字符串@ABC
n【}}l一#2】:拓展%群d、%#1一}}2d,使不包含数字#1到}}2之间的数字
^【@1 @2】:拓展%#c、%#s、%#1-#2c、%群l一}}2s,使不包含字符@1到@2之问的字母
一【样l}}2】:拓展%}}d、%引-#2d,使不包含数字样l、}}2^【@1@2】:拓展%}}c、%#s、%}f1一}}2c、%}}1-#2s,使不包含字符@1、@2
#l+:拓展%}}d、%}}l一样2d,使数据以数字#l等差增加本类形如%#d#+,以下类似
}}.:拓展%}}d、%}}l-#2d,使数据以数字}}1等差减少#+:拓展%#d、%#l一样2d,使数据以数字#l成等比增加洲:拓展%舟d、%样l一}}2d,使数据以数字#1成等比减少(3)须处理的表达式
f%REl+#:I段正则表达式%RE的}}次循环(%RE):优先级设置
(%RE—aI%REb):2段正则表达式%RE—a或%RE—b其一(4)转义
、:转义符号
\%:转义为字符”%”\(:转义为字符”(”\):转义为字符”)”
一3口一
正则表达式的应用。
、I:转义为字符”I”、\:转义为字符”\”p:转义为字符””’、'’:转义为字符”””、.:转义为字符”一”(5)特殊
<¥1Vocabulary>:词义分析词,对应一条预设的正则表达式或函数
<¥2file>:外部词义集任意词汇<¥3sql>:从其他表获取的数据其中,群,样l,#2均表示数字,且#1<}}2;any
character
set表示
任意字符集,支持字符请参考附录表格;%RE,%RE—a,
%RE
b表示一段或多段正则表达式;@1,@2表示介于a至Z(范围a—zA—Z)的任意一字母,且@1先于@2;@ABC为随意字符串;Vocabulary表示某一语义定义(参考附录适用于本工具正则表达式风格的语义集);file表示外部词义文件的路径;sql表示一条获取其他表的字段的SQL语句。
例如:正则表达式(%1~9c1%1—9d)%[@scut.edu.cn]表示华南理工大学邮箱地址的测试数据(假没邮箱前缀部分允许的最大长度是9位);正则表达式%100861%1—1(%1020]1%【0755])%l一1%7—8d表示广州或深圳的国际电话的测试数据(假设电话允许的最大长度是7—8位);正则表达式%[200433121%16400—64501表示04级某班学生的学号集合(假设长度是12位)。
3.2基于正则表达式的测试致据自动生成技术设计
该技术设计实现的核心模块包括控制中心、正则表达式解析器和数据生成器3个部分,其结构如图1所示。
圈1棱心模援结构
(1)控制中心模块,是本文为该基于正则表达式的数据自动生成技术实现而搭配的临时模块,通过该模块,可实现对正则表达式解析器与数据生成器的调控,调用正则表达式解析器和数据生成器实现的类的方法。
(2)正则表达式解析器模块,用于解析基于本文实现风格的正则表达式,该模块将从控制中心接收指令,获取正则表达式字符串,依据本文的正则表达式模式规则进行转换,并把处理后的结果,即可识别的普通式,返回给相关模块,以便进行下一步的数据生成。
(3)数据产生器模块,是基于从正则表达式解析器返回的可识别普通式产生可用数据的模块,该模块接收可识别普通式后,进行分段分析,从随机数据生成函数集选用合适方法获取字符串进行整合,然后返回数据字符串给数据控制中心
万方数据
进行下一步操作。
该技术的实现通过数据生成器为外部调用提供了一个接13。外部系统通过传递相应的对象信息和本文设计的正则表达式,可以轻松的实现所需的功能。如图2所示。大字段对象类型字段基本数据生成结果见图3。
擞件结粜状岳返¨
圈2外部对象与该技术实现f包)之间的整体框架
if_MEDIUMBLOB
t
一一■
}k,adeⅢl
TenR-chkn
Image
HTMI-
(a)图像类型数据
iLblob
ANSI,
_‘--_L___ ___ - _ --.-_____ ____^_..—√.,.________●●●●。●●●--●●_●一
He×ade删Te.d
Pr.,htext
h怕鼬HTWI_
测试文本文件
一一
.(b)文本类型数据
-r~—————————————+———1
’
;f_LONOBLOB
,
vl
HexedecuT吲Te对胁texf
ImeqeHTMLlO-i00504B0506000000
0l
}Oxl0
00
00
00
00
00
00
(c)16进制类型数据
圈3大字段类型数据生成结果
4结束语
软件测试是保证软件质量的蕈要技术手段,测试数据生成是软件测试的重要内容。测试数据的质量将直接影响软件测试的效率和成本。本文提出一种新的基于正则表达式的测试数据自动生成技术,生成的数据具有随机性、可控制、可定义、有意义、无错误等特性,特别是对大字段/专有类型等特殊类型的支持,可以解决目前测试数据自动生成的数据存
在的问题,并具有良好的扩展性,是测试自动化的一种新的尝试。
参考文献
【1】DustinE,RashkaJ,Paul
J.Automated
Soflware
Testing:
Introduction.Management,andPerformance[M].Upper
Saddle
River,NJ.USA:PearsonEducation.2008.
【2】朱少民.软件测试方法和技术IM].北京:清华大学出版社,
2()05.
【3】中国自学编程l珂.测试数据自动生成工具[EB/OL].(2007—12.14).
http://www.zxbc.cn/html/20071214130401.html.
【4]MansourS.ATaoof
Regular
Expressions[EB/OL].f1999—06—05).
http://www.matthewgifford.corrda-tao-of-regular-expressions.
编辑金胡考
~31—