CN102360336A - 一种基于语法规则的自动化测试系统及方法 - Google Patents
一种基于语法规则的自动化测试系统及方法 Download PDFInfo
- Publication number
- CN102360336A CN102360336A CN2011103211138A CN201110321113A CN102360336A CN 102360336 A CN102360336 A CN 102360336A CN 2011103211138 A CN2011103211138 A CN 2011103211138A CN 201110321113 A CN201110321113 A CN 201110321113A CN 102360336 A CN102360336 A CN 102360336A
- Authority
- CN
- China
- Prior art keywords
- test case
- module
- test
- rule
- syntax rule
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于语法规则的自动化测试系统及方法,该系统包含测试用例参数配置模块、语法规则分析模块、语义优化模块、元数据管理模块、测试用例生成控制模块以及测试用例输出模块。本发明同时还提供一种基于语法规则的自动化测试方法,通过采用随机数和权值数组的结合,使得生成的测试用例从概率上既可以覆盖从根节点到叶节点的所有路径,又可以通过调整权值数组选择具有某一特征的路径,提高了生成测试用例的灵活性。
Description
技术领域
本发明涉及软件测试系统及方法,尤其涉及一种基于语法规则的自动化测试系统及方法。
背景技术
随着社会的发展和人们生活水平的不断提高,计算机及相关技术的发展,计算机及自动化应用成为人们日常生活中不可或缺的组成部分。与此同时,用户也在使用中不断提出新的需求,计算机相关应用正在以惊人的速度增长,并且系统功能不断扩充,复杂度日益增加。如何保证系统的质量及工作效率,成为当前计算机及相关软、硬件系统面临的一个共性问题。测试技术作为当前保证系统质量的一个广泛采取的有效手段,起到了非常重要的作用。测试的效率和质量在很大程度上决定了一个系统/产品的质量。
现有的测试效率和质量仍然距离人们的要求有较大差距。即便在测试领域已经有了部分自动化的测试工具,但都还停留在将测试用例的执行进行自动化的层面上,而绝大部分的测试用例编写工作仍然采用手工进行,实际中存在编写效率非常低、操作繁琐、编写用例考虑不全等问题,无论是效率还是质量上都存在非常大的风险。因此,如何自动化的生成测试用例是一个尤为紧迫的课题。
在针对某种计算机语言的测试中,目前没有其他的方式能够实现方便、快速、有效的自动化生成某种计算机语言的测试用例。这也是本发明所要解决的技术问题。
发明内容
本发明目的在于提供一种基于语法规则的自动化测试系统及方法,通过采用随机数和权值数组的结合,使得整个系统生成的测试用例从概率上既可覆盖从根节点到叶节点的所有路径,又可通过调整权值数组选择具有某一特定特征的路径,加大了生成测试用例的灵活性。
一种基于语法规则的自动化测试系统,包含测试用例参数配置模块、语法规则分析模块、语义优化模块、元数据管理模块、测试用例生成控制模块以及测试用例输出模块。
测试用例参数配置模块用于配置生成测试用例时所需的参数,主要包括非终结符最大循环次数、测试用例集的大小、非终结符的默认数据等。
语法规则分析模块用于解析被测系统的BNF(Backus-Naur Form,巴科斯范式)为语法规则,并将得到的语法规则转换为对应的测试驱动函数库,供测试用例生成控制模块调用。
语义优化模块用于优化规则库中的规则,使得基于该规则库生成的测试用例符合被测系统的语义要求,提高测试用例的有效性。
元数据管理模块用于指定自动化生成测试用例时BNF语法规则中终结符的数据来源,非终结符的默认数据,并且可以对数据源进行编辑、整理。
测试用例生成控制模块用于调用初始化的参数、元数据库的元数据,基于选择因子从规则库中选择合适的规则,自动生成大量测试用例。
测试用例输出模块用于将测试用例写入到指定的目的地。
同时,本发明还提供一种基于语法规则的自动化测试系统的实现方法,包含以下内容:
1、测试用例参数配置模块配置生成测试用例时所需的参数;
2、语法规则分析模块解析BNF文件为语法规则形成规则库;
3、语义优化模块优化规则库中的规则,元数据管理模块编辑、整理元数据信息成为元数据库;
4、测试用例生成控制模块调用初始化的参数、元数据库的元数据,基于选择因子从规则库中选择合适的规则,结合元数据库,自动生成测试用例集;
5、测试用例输出模块将测试用例写入到指定的目的地。
语法规则分析模块解析BNF文件为语法规则时,区分BNF的终结符和非终结符,为生成测试驱动函数库做准备,获取每个非终结符/终结符的权值信息,并生成专门用于自动生成测试用例的测试驱动函数库:
1)对于每个非终结符/终结符,生成一个以“gen_”开头、跟上该非终结符/终结符字符串的驱动代码函数,其返回类型为void,且仅含有一个输入输出参数:char*str;
2)对于每个非终结符,统计语法分支数总数TOTAL_BRANCH,并生成0到TOTAL_BRANCH-1之间的随机整数BRANCH_NUM。对于每个语法分支,用SWITCH语句来处理对应分支;
3)对于每个终结符,基于对应终结符的数据来源中值的总数TOTAL_VALUE_COUNT,生成一个0到TOTAL_VALUE_COUNT-1之间的随机的整数RAND_SEQ,然后获取数据来源中与RAND_SEQ对应的值,将其以字符串的形式连接到str参数的后面。
测试驱动函数中含有每个非终结符的权值信息。所有非终结符的权值可以由系统随机生成,也可以由用户以值列表的形式存放到文本文件中,每行存放一个父非终结符节点的所有兄弟节点集的权值数值。根据权值数组和兄弟节点的个数来选择某个节点,即测试驱动函数或者元数据。
语义优化模块中,由于每个被测系统的语义有很大的差别,所以不同的被测系统,可以根据具体的要求来设计优化的法则,修改规则库中相应的规则,来完善规则库。
测试驱动函数会随机生成其可能的取值,所有可能的取值可由函数自己生成,也可以都以值列表的形式存放到文本文件中,每行存放一个值,作为数据来源文件,测试驱动函数从对应的数据来源文件中随机获取,将获取的值返回给上层调用函数。
测试用例生成模块在从规则库中选择合适的规则,即测试驱动函数,其方案为:根节点下的所有子节点数目是TOTAL_BRANCH,每个节点有权值,形成一个权值数值weight_arr[TOTAL_BRANCH-1],在范围0-TOTAL_BRANCH之间,结合每个节点的权值,搜索其中一个节点。选择因子rdm_num是一个整形,按顺序得到选择因子对应的节点。get_rdm_num_by_weight(权值数组,分支个数)函数其伪代码如下:
输入权值数组,分支个数,输出选择因子,得到选择因子对应的测试驱动函数:
1)根据权值数组weight_arr将所有分支的权值相加得到weights;
2)选择因子rdm_num=随机数%weights;
3)选择因子累加值sum=0;
4)for(i=0;i<分支个数;i++)
5){
6)if(rdm_num>=sum&&rdm_num<(sum+weight_arr[i]))则选择因子rdm_num=i;
7)else sum+=weight_arr[i];
8)}
9)选择因子rdm_num=分支个数-1;
对整个节点树,递归该步骤,最终得到一条从根节点到叶节点的路径,最终得到一个测试用例。
通过本发明提供的基于语法规则的自动化测试系统及方法,采用随机数和权值数组的结合,使得生成的测试用例从概率上既可以覆盖从根节点到叶节点的所有路径,又可以通过调整权值数组选择具有某一特征的路径,提高了生成测试用例的灵活性。
附图说明
图1为基于语法规则的自动化测试系统结构框图;
图2为基于语法规则的自动化测试系统实现方法流程图。
具体实施方式
以下结合各附图对本发明提供的内容进行详细的描述。
以SQL语句的生成为例来说明本发明基于语法规则自动生成测试用例方法的技术方案:
如图2中所示,SQL语句中表达式exp的文法(假设只有加减乘除):
1)exp:
2)exp ‘+’VAR (3)
3)|exp ‘-’VAR (3)
4)|exp ‘*’VAR (3)
5)|exp ‘/’VAR (4)
6)|′(′exp′)′ (2)
7);
数据源文件为1,2,3,4,5,6,7,8,9,0。
五个节点的权值已经设置为3,3,3,4,2,在exp文法上已标示。
gen_exp默认的数据为0。
要求得到的测试用例集是5,非终结符最大循环次数2。
如图1中系统,这些信息输入系统之后,系统运行一次得到的表达式是1/0+0,2/3-0,5*3*0,6+2/0,7-3/0。
首先测试用例参数配置模块,获得信息:测试用例集5,最大循环次数2,gen_exp默认的数据为0。
元数据管理模块管理数据源,获得元数据库为1,2,3,4,5,6,7,8,9,0。
BNF文件为表达式exp的文法。通过语法规则分析模块可以得到:终结符‘+’、‘-’、‘*’、‘/’、VAR;非终结符exp。‘+’、‘-’、‘*’、‘/’直接用+-*/直接替换,VAR使用元数据库中的数据1,2,3,4,5,6,7,8,9,0。将exp非终结符转换为对应的测试驱动函数,其伪代码如下,APPEND(1,2)为宏,意在将符号2加入字符串1中。
1) gen_exp(char*str){
2) 函数gen_exp的调用次数+1;
3) if(函数gen_exp超出最大调用次数))
4) {str添加默认的信息;返回;}
5) rdm_num=get_rdm_num_by_weight(weight_arr,5);
6) switch(rdm_num){
7) case 0:{gen_exp(str);APPEND(str,‘+’);gen_var(str);break;}
8) case 1:{gen_exp(str);APPEND(str,‘-’);gen_var(str);break;}
9) case 2:{gen_exp(str);APPEND(str,‘*’);gen_var(str);break;}
10)case 3:{gen_exp(str);APPEND(str,‘/’);gen_var(str);break;}
11)case 4:{APPEND(str,‘(’);gen_exp(str);APPEND(str,
‘)’);break;}}}
终结符的测试驱动函数,其伪代码如下:
1)gen_var(char*str){
2)int count,index;
3)count=数据源中该类数据的个数;
4)index=随机数%count;
5)将索引index所指的数据添加到字符串str中;
6)}
这样形成的规则库中有两个规则:gen_exp(char*)、gen_var(char*)。在语义优化模块中,需要优化的部分是除数不能为0,当然也可以不优化,那么这样生成的测试用例当中有部分的除数有可能是0的,运行这个测试用例集的时候,如果测试用例中除数是0,则DBMS会报错误。
Claims (5)
1.一种基于语法规则的自动化测试系统,其特征在于所述系统包含测试用例参数配置模块、语法规则分析模块、语义优化模块、元数据管理模块、测试用例生成控制模块以及测试用例输出模块。
2.根据权利要求1所述的一种基于语法规则的自动化测试系统,其特征在于所述语法规则分析模块用于解析被测系统的BNF为语法规则,并将得到的语法规则转换为对应的测试驱动函数库,供测试用例生成控制模块调用。
3.一种基于语法规则的自动化测试方法,其特征在于所述方法包含:
1)测试用例参数配置模块配置生成测试用例时所需的参数;
2)语法规则分析模块解析BNF文件为语法规则形成规则库;
3)语义优化模块优化规则库中的规则,元数据管理模块编辑、整理元数据信息成为元数据库;
4)测试用例生成控制模块调用初始化的参数、元数据库的元数据,基于选择因子从规则库中选择合适的规则,结合元数据库,自动生成测试用例集;
5)测试用例输出模块将测试用例写入到指定的目的地。
4.根据权利要求3所述的一种基于语法规则的自动化测试方法,其特征在于所述语法规则分析模块解析BNF文件为语法规则的方式为:
1)对于每个非终结符/终结符,生成一个以“gen_”开头、跟上该非终结符/终结符字符串的驱动代码函数,其返回类型为void,且仅含有一个输入输出参数:char*str;
2)对于每个非终结符,统计语法分支数总数TOTAL_BRANCH,并生成0到TOTAL_BRANCH-1之间的随机整数BRANCH_NUM。对于每个语法分支,用SWITCH语句来处理对应分支;
3)对于每个终结符,基于对应终结符的数据来源中值的总数TOTAL_VALUE_COUNT,生成一个0到TOTAL_VALUE_COUNT-1之间的随机的整数RAND_SEQ,然后获取数据来源中与RAND_SEQ对应的值,将其以字符串的形式连接到str参数的后面。
5.根据权利要求3所述的一种基于语法规则的自动化测试方法,其特征在于所述测试用例生成控制模块基于选择因子从规则库中选择合适的规则,结合元数据库,自动生成测试用例集的方法是输入权值数组,分支个数,输出选择因子,得到选择因子对应的测试驱动函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110321113.8A CN102360336B (zh) | 2011-10-20 | 2011-10-20 | 一种基于语法规则的自动化测试系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110321113.8A CN102360336B (zh) | 2011-10-20 | 2011-10-20 | 一种基于语法规则的自动化测试系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102360336A true CN102360336A (zh) | 2012-02-22 |
CN102360336B CN102360336B (zh) | 2014-12-17 |
Family
ID=45585665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110321113.8A Active CN102360336B (zh) | 2011-10-20 | 2011-10-20 | 一种基于语法规则的自动化测试系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102360336B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636257A (zh) * | 2015-03-13 | 2015-05-20 | 胡兢玉 | 基于sql覆盖的数据库应用软件自动化测试方法 |
CN105159986A (zh) * | 2015-08-31 | 2015-12-16 | 浪潮(北京)电子信息产业有限公司 | 一种oracle数据库优化配置的方法及系统 |
CN105446743A (zh) * | 2015-12-12 | 2016-03-30 | 天津南大通用数据技术股份有限公司 | 一种自动生成sql语句的系统及方法 |
CN106294111A (zh) * | 2015-06-02 | 2017-01-04 | 富士通株式会社 | 为多个业务规则生成测试实例的方法和装置 |
CN108845927A (zh) * | 2018-05-04 | 2018-11-20 | 联动优势电子商务有限公司 | 一种测试用例的筛选方法及装置 |
CN109426609A (zh) * | 2017-08-29 | 2019-03-05 | 富士通株式会社 | 测试应用的方法和装置 |
CN111221844A (zh) * | 2019-11-14 | 2020-06-02 | 广东电网有限责任公司信息中心 | 基于拟态指令集随机化的Web服务器防护方法及数据库代理节点 |
CN112749084A (zh) * | 2020-12-17 | 2021-05-04 | 中国农业银行股份有限公司 | 一种测试用例生成方法及装置 |
CN112925726A (zh) * | 2021-04-14 | 2021-06-08 | 瀚高基础软件股份有限公司 | 一种自动生成数据库测试用例的方法及存储介质 |
CN117971532A (zh) * | 2023-11-20 | 2024-05-03 | 北京计算机技术及应用研究所 | 一种面向模糊测试的语义修复方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216803A (zh) * | 2008-01-09 | 2008-07-09 | 四川大学 | 基于基路径的测试程序控制流路径集生成方法 |
CN101436128A (zh) * | 2007-11-16 | 2009-05-20 | 北京邮电大学 | 软件测试用例自动生成方法及系统 |
-
2011
- 2011-10-20 CN CN201110321113.8A patent/CN102360336B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101436128A (zh) * | 2007-11-16 | 2009-05-20 | 北京邮电大学 | 软件测试用例自动生成方法及系统 |
CN101216803A (zh) * | 2008-01-09 | 2008-07-09 | 四川大学 | 基于基路径的测试程序控制流路径集生成方法 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636257B (zh) * | 2015-03-13 | 2017-10-27 | 胡兢玉 | 基于sql覆盖的数据库应用软件自动化测试方法 |
CN104636257A (zh) * | 2015-03-13 | 2015-05-20 | 胡兢玉 | 基于sql覆盖的数据库应用软件自动化测试方法 |
CN106294111A (zh) * | 2015-06-02 | 2017-01-04 | 富士通株式会社 | 为多个业务规则生成测试实例的方法和装置 |
CN105159986A (zh) * | 2015-08-31 | 2015-12-16 | 浪潮(北京)电子信息产业有限公司 | 一种oracle数据库优化配置的方法及系统 |
CN105159986B (zh) * | 2015-08-31 | 2018-10-30 | 浪潮(北京)电子信息产业有限公司 | 一种oracle数据库优化配置的方法及系统 |
CN105446743A (zh) * | 2015-12-12 | 2016-03-30 | 天津南大通用数据技术股份有限公司 | 一种自动生成sql语句的系统及方法 |
CN109426609A (zh) * | 2017-08-29 | 2019-03-05 | 富士通株式会社 | 测试应用的方法和装置 |
CN108845927A (zh) * | 2018-05-04 | 2018-11-20 | 联动优势电子商务有限公司 | 一种测试用例的筛选方法及装置 |
CN111221844A (zh) * | 2019-11-14 | 2020-06-02 | 广东电网有限责任公司信息中心 | 基于拟态指令集随机化的Web服务器防护方法及数据库代理节点 |
CN111221844B (zh) * | 2019-11-14 | 2023-10-03 | 广东电网有限责任公司信息中心 | 基于拟态指令集随机化的Web服务器防护方法及数据库代理节点 |
CN112749084A (zh) * | 2020-12-17 | 2021-05-04 | 中国农业银行股份有限公司 | 一种测试用例生成方法及装置 |
CN112925726A (zh) * | 2021-04-14 | 2021-06-08 | 瀚高基础软件股份有限公司 | 一种自动生成数据库测试用例的方法及存储介质 |
CN117971532A (zh) * | 2023-11-20 | 2024-05-03 | 北京计算机技术及应用研究所 | 一种面向模糊测试的语义修复方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102360336B (zh) | 2014-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102360336A (zh) | 一种基于语法规则的自动化测试系统及方法 | |
CN108959433B (zh) | 一种从软件项目数据中提取知识图谱并问答的方法与系统 | |
CN102541521B (zh) | 基于结构化查询语言的操作指令自动生成装置及方法 | |
CN109359094B (zh) | 一种分布式系统日志全链路追踪方法及装置 | |
CN106528512B (zh) | 一种excel概预算表格自动编排方法 | |
CN107330098B (zh) | 一种自定义报表的查询方法、计算节点及查询系统 | |
CN109002483A (zh) | 文档管理方法、装置、计算机设备及存储介质 | |
US20150106794A1 (en) | Transparent performance inference of whole software layers and context-sensitive performance debugging | |
CN103605556A (zh) | 虚拟试验对象一体化构建系统及方法 | |
CN101499063A (zh) | 基于跟踪的数据库模式演进方法及系统 | |
CN103914379B (zh) | 故障自动注入与故障检测的方法及其系统 | |
CN105389195A (zh) | 一种基于代码替换和正则表达式的静态分析工具改进方法 | |
CN104391731A (zh) | 一种基于c#的与数据类型无关的编辑方法 | |
Tavares et al. | Semistructured merge in JavaScript systems | |
CN103631590A (zh) | 自动化测试脚本的编辑方法 | |
CN103942140A (zh) | 一种测试程序自动转换方法 | |
CN102521008A (zh) | 程序编译装置和程序编译方法 | |
EP3438818B1 (en) | Method and device for compiling computer language | |
Ge et al. | Keywords guided method name generation | |
CN103176905A (zh) | 一种缺陷关联方法及装置 | |
CN114661721A (zh) | 数据库表的处理方法和系统 | |
CN105159746B (zh) | 面向容错组合web服务的可靠性仿真工具 | |
US20090064092A1 (en) | Visual programming language optimization | |
CN110309214A (zh) | 一种指令执行方法及其设备、存储介质、服务器 | |
CN116126736B (zh) | 一种基于用户需求的芯片代码优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |