CN101251820A - 一种基于程序运行域的软件测试方法 - Google Patents
一种基于程序运行域的软件测试方法 Download PDFInfo
- Publication number
- CN101251820A CN101251820A CNA2008100179162A CN200810017916A CN101251820A CN 101251820 A CN101251820 A CN 101251820A CN A2008100179162 A CNA2008100179162 A CN A2008100179162A CN 200810017916 A CN200810017916 A CN 200810017916A CN 101251820 A CN101251820 A CN 101251820A
- Authority
- CN
- China
- Prior art keywords
- program
- source program
- finish
- read
- function
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种软件测试的方法,该方法包括以下步骤:1)首先取得一源程序的功能域;2)接着对源程序进行分析,以自源程序中取得与一变量有关的语句形成一等价程序;3)根据步骤2)中的等价程序,取得等价程序的运行域;4)最后比较源程序的功能域与等价程序的运行域是否重合,如果不重合,说明软件在此处存在故障或错误。本发明实现了快速、自动化的提早发现软件中的故障或错误,节省了大量的人力、物力,所以提高了产品质量、缩短了开发测试周期,提高了客户满意度。
Description
技术领域
本发明涉及一种软件测试的方法,尤其是一种基于程序运行域的软件测试方法。
背景技术
软件测试是软件开发流程中的一个大环节。以测试型态来做分类的话,可以分成建构性测试(Construction Testing)、系统测试(System Testing)以及特殊测试(Special Testing)。建构性测试是属于前置性的测试,主要是偏重于程序端的功能测试,以确保程序执行运作正常。系统测试是属于中后期的整合测试,所进行的测试是以使用者的观点为主,也就是模拟外界的使用者会如何的使用产品。特殊测试所进行的测试需要花费更多的时间与人力才能完成。
就测试模式而言,可分为白盒测试(White Box Testing)与黑盒测试(Black Box Testing)。这两种方式的测试方向是不同的,白盒测试是以源程序结构为主,而黑盒测试是以程序的功能为主。
白盒测试也称为结构性测试(Structural Testing),白盒测试有两大层面:数据流面(Data Flow Coverage)以及控制流程面(Control Flow Coverage),数据流面就是测试数据在系统的进出于程序内所经过的流程,控制流程面就是测试程序在执行过程中每个阶段的流程。
进行黑盒测试时,测试人员并不需要对软件的结构性有足够深层的了解,所进行的测试是着重于软件的功能面,所以也有人称之为功能测试。为了要控制黑盒测试的执行,测试人员必须要按照测试案例(Test Cases)来逐一进行,所以测试案例(Test Cases)设计的好坏就会直接影响到测试结果。
软件项目有其不同其它项目的特殊性,例如产品的不可视性、产品执行路径的无穷性、产品质量检测的不可完全性、导致软件产品质量很难完美保证。对于项目较小的或者对质量要求不太高的项目而言,手工方式一般也能达到预期的效果。但是随着产品系统的不断庞杂,功能的不断增加,同时用户对产品质量要求的提高,导致必须考虑采用新的测试方式方法去适应这一需求。
软件产品的复杂性,导致在软件产品整合及送交质量部门刚开始测试时,大量的错误(bug)出现,这些bug需要开发工程师、测试工程师、开发主管、测式主管、项目经理去处理,浪费大量的人力,物力等。
一般而言,在产品送测初期产生的bug占到总bug量的70-80%左右,因此如何快速的、自动化的提早发现这些bug,是提高产品质量、缩短开发测试周期以及提高客户满意度的关键。
要检验开发的软件是否有bug,可以采取各种不同的测试策略。但是,不论采用哪一种测试策略,设计测试方案都是测试阶段最关键问题。测试以前都需要从过程定义域中选取有代表性的测试数据,这也是测试成功与否的关键。
发明内容
为了解决背景技术中所述的技术问题,本发明提供了一种可快速、自动化的提早发现软件中的bug的软件测试方法。
本发明的技术解决方案是:本发明是一种基于程序运行域的软件测试方法,其特殊之处在于:该方法包括以下步骤:
1)、首先取得源程序的功能域;
2)、接着对源程序进行分析,留下与一变量有关的语句,形成等价程序;
3)、根据步骤2)中形成的等价程序,取得等价程序的运行域;
4)、最后比较源程序的功能域与等价程序的运行域是否完全重合,如果不重合,说明软件存在故障或错误。
上述步骤1)中取得源程序的功能域具体步骤如下:
1.1)首先逐行读入源程序的语句;
1.2)接着读取源程序的函数,判断读入的语句是否为函数,若不是函数,则返回步骤1.1),若是函数则进至步骤1.3);
1.3)建立函数参数表;
1.4)建立函数调用表;
1.5)建立变量表;
1.6)建立复合语句表;
1.7)判断函数的读取是否结束,如果结束则进至步骤1.8),如果没有结束则执行步骤1.6);
1.8)、判断源程序是否读取结束,若结束则进至步骤2),若未结束,则返回步骤1.1)。
上述步骤2)中形成等价程序的具体步骤如下:
2.1)扫瞄步骤1.5)所建立的变量表;
2.2)根据步骤2.1)所扫描的变量表取得一个变量;
2.3)读入源程序的一行语句;
2.4)判断读入的语句是否与步骤2.2)所取得的变量是否有关,若无关,则返回步骤2.3)继续读入源程序的语句,若有关则进至步骤2.5);
2.5)记录至源程序中;
2.6)判断源程序读取是否结束,若未结束,则回到步骤2.3)继续读入源程序,若结束,则进至步骤2.7);
2.7)判断变量表的变量是否读取完毕,若未读取完毕,则返回步骤2.2),若读取完毕,则进至步骤3)。
本发明提出了一种基于程序功能域的运行域的测试数据自动确定的方法,该方法通过分析每一个应用源程序的变量类型,完成对应用程序功能域的取得,通过对应用程序本身运行语句进行分析,来获取其运行域,获取有代表性的测试数据去执行测试,来发现程序中的问题点。由于本发明实现了快速、自动化的提早发现软件中的bug,节省了大量的人力、物力,所以提高了产品质量、缩短了开发测试周期,提高了客户满意度。
附图说明
图1是本发明的检测流程图。
图2是取得源程序P的功能域的流程图。
图3是本发明形成等价源程序P,的流程图。
具体实施方式
在开始说明本发明之前,先对本发明所使用的术语作一简介与说明。每个软件产品或项目都定义有非常详尽的规格书(specification),规格书中定义有模块的具体功能及其详细的要求范围,在源程序(source code)中也会对每个相关参数声明其具体的类型,可称之为功能域。各个程序执行时都有其运行的覆盖范围,可称之为运行域。
基于规范的功能测试和基于程序的结构测试是两类常用的软件测试方法。功能测试根据规格说明书设计测试范例,检查程序的每一功能是否按照规范的要求正确地执行。它以软件规范为依据选取测试数据,其正确性依赖于规范的正确性,通过功能域与程序运行域的不同范围,可选择有代表性的测试数据对程序进行测试,从而大量的节省选择测试数据的时间。
规格书是对软件输入、输出的定义,而软件程序则说明实现规范的算法和数据结构。虽然软件规范规定了输入变量的定义域(输入域),但程序实现本身也定义了其定义域。系统在需求阶段是由功能域来定义的,而在开发和运作中是由运行域来描述的。软件规范给定的功能是定义在输入空间的一个所谓功能域上,而被测程序本身定义了输入空间的一个运行域。如果功能域与运行域不能完全重合,那么软件的故障或错误(bug)就可检测出来。
参见图1:本发明包括以下步骤:
1)首先取得源程序P的功能域;
2)根据步骤1取得的源程序P的功能域,对源程序P进行分析,留下与某一变量有关的语句,形成等价程序P’,其主要是基于输入变量以产生静态程序并剔除与输入变量无关的语句及函数;
3)根据步骤2)取得的等价程序P’,取得等价程序P’的运行域。
4)最后比较源程序P的功能域与等价程序P’的运行域是否重合,以得到比较结果,如果功能域与运行域不能完全重合,那么说明软件在此处存在故障或错误(bug)。
参见图2,本发明取得源程序的功能域具体步骤如下:
首先逐行读入源程序P的语句(步骤1.1),接着读取源程序P的函数,首先判断读入的语句是否为函数(步骤1.2),若不是函数,则继续读入源程序P(步骤1.1)。如果是所读入的源程序P为函数,则建立函数参数表(步骤1.3),并建立函数调用表(步骤1.4)、变量表(步骤1.5)、与复合语句表(步骤1.6)。步骤1.2)至而步骤1.3)是用来取得源程序P中的函数;而步骤1.3)至步骤1.6)主要建立数据流分析所需的源程序的各种纪录。接着判断所读取的函数是否结束(步骤1.7)。若未结束,则继续建立复合语句表(步骤1.6),若函数已结束,则判断源程序P是否读取结束(步骤1.8),若读取结束,则结束,若未结束,则回到步骤1.1),继续读入源程序P。
参见图3:本发明形成等价程序的具体步骤如下:
首先,将扫瞄步骤1.5)所建立的变量表(步骤2.1),以取得一个变量(步骤2.2)。接着读入源程序P的一行语句(步骤2.3),并判断所读入的语句是与步骤2.2)所取得的变量有关(步骤2.4),若无关,则继续读入源程序P的语句,若有关,则记录至源程序P’中(步骤2.5)。接着判断源程序P是否读取结束(步骤2.6),若未结束,则回到步骤2.3),继续读入源程序P。若读取结束,则判断变量表中的变量是否读取完毕(步骤2.7)。若读取完毕,则结束,若未读取完毕,则继续取得下一个变量后重复上述的步骤2.2)至步骤2.6)。
本发明中,如果函数中有一些表达式及其它一些数学函数,则应该依据输入空间的范围进行选择划分。
一般而言,输入空间可以划分为四部份,即:E=E1∪E2∪E3∪E4,其中:
E1={x|x∈Df∩Dp}
Df表示输入变量的功能域,Dp表示运行域。
E1表示规范与程序有相同的输入子域,但实现与说明是否一致,还需进一步测试。
E2表明程序产生了一个结果,但规范并没有要求。对于这种情况,可补充规范或者缩小其程序的运行域。
E3表明规范的某些要求,程序没有处理。
E4关于例外处理,即规范既未要求,程序也无从处理对于规范未指明的输入,程序可能产生不可预料的结果。因此,在可靠的软件程序中,例外处理为必要的程序。
根据以上的说明书,源程序P以文件形式读入,再建立关于源程序P的各种变量纪录,并依据纪录提供的信息,从源程序P中抽取出与输入变量相关的部份,形成基于输入变量的静态等价程序P′,然后确定输入变量的运行域。
下面将对本发明进行举例说明,首先给出源程序P,由函数main(),xpoint(),f(),power()组成,其输入变量为x,
给定一源程序P如下:
int power(int x,int i)
{
int p;
for(p=1;i>0;--i)
P=P*x;
return(p);
}
float f(float x)
{
float y;
y=((x-0.5)*x+16.0)*x-80.0;
return(y);
}
float xpoint(float x1)
{
float y;
y=x1*f(x1)/(f(x1+1.0)-f(3.453));
return(y);
}
void main()
{
int k;
float x,y;
printf(″/n-----Print the value of function power-----/n″);
for(k=0;k<10;k++)
printf(″%d%d%d\n″,k,power(2,k),power(-3,k));
printf(″/n-----Print the value of function xpoint-----/n″);
Scan(″%f″,&x};
while(x>0)
{
y=xpoint(x);
printf(″%f%f″,x,y);
scanf(″%f″,&x);
}
}
基于输入变量对上述的源程序P分析,以得到一等价程序,如下:
float f(float x)
{
float y;
y=((x-0.5)*x+16.0)*x-80.0;
return(y);
}
float xpoint(float x1)
{
float y;
y=x1*f(x1)/(f(x1+1.0)-f(3.453));
return(y);
}
void main()
{
float x,y;
scan(″%f″,&x);
while(x>0)
{
y=xpoint(x);
printf(″%f%f″,x,y);
Scanf(″%f″,&x);
}
根据本发明所揭露的方法,首先取得纪录程序中的变量,此程序变量列表中只有变量x、y、k。
接着针对变量x的程序分析,得到等价程序P’,等价P’中去掉了与输入变量x无关的变量。k及其相关语句与函数POWER()、P’中变量与函数都与输入变量x有关,并且与P二者表示等价。因此,P’与P的运行域一致。但是,P’只分析与输入变量有关的部份,有利于程序运行域的确定。
接着分析P’以确定运行域。对函数进行分析,例如对xpoint()进行分析,其变量为x1,类型为float,float型变量,其功能域定义为[-3.4028235E38,3.4028235E38]同时函数中,其表达式中分母不能为0,则可得x1内容不能等于2.453,如此综合参考其功能域及运行域范围,可得其可执行域范围,[-3.4028235E38,-1],[-1,0],[0,1],[1,2.453),(2.453,3.4028235E38],测试其结果是否有误。选择如上一些特殊值等去测试其结果,如此可不需每个变量值均去执行一遍,从而节约大量时间。
Claims (3)
1. 一种基于程序运行域的软件测试方法,其特征在于:该方法包括以下步骤:
1)、首先取得源程序的功能域;
2)、接着对源程序进行分析,留下与一变量有关的语句,形成等价程序;
3)、根据步骤2)中形成的等价程序,取得等价程序的运行域;
4)、最后比较源程序的功能域与等价程序的运行域是否完全重合,如果不重合,说明软件存在故障或错误。
2. 根据权利要求1所述的基于程序运行域的软件测试方法,其特征在于:所述步骤1)中取得源程序的功能域具体步骤如下:
1.1)首先逐行读入源程序的语句;
1.2)接着读取源程序的函数,判断读入的语句是否为函数,若不是函数,则返回步骤1.1),若是函数则进至步骤1.3);
1.3)建立函数参数表;
1.4)建立函数调用表;
1.5)建立变量表;
1.6)建立复合语句表;
1.7)判断函数的读取是否结束,如果结束则进至步骤1.8),如果没有结束则执行步骤1.6);
1.8)、判断源程序是否读取结束,若结束则进至步骤2),若未结束,则返回步骤1.1)。
3. 根据权利要求2所述的基于程序运行域的软件测试方法,其特征在于:所述步骤2)中形成等价程序的具体步骤如下:
2.1)扫瞄步骤1.5)所建立的变量表;
2.2)根据步骤2.1)所扫描的变量表取得一个变量;
2.3)读入源程序的一行语句;
2.4)判断读入的语句是否与步骤2.2)所取得的变量是否有关,若无关,则返回步骤2.3)继续读入源程序的语句,若有关则进至步骤2.5);
2.5)记录至源程序中;
2.6)判断源程序读取是否结束,若未结束,则回到步骤2.3)继续读入源程序,若结束,则进至步骤2.7);
2.7)判断变量表的变量是否读取完毕,若未读取完毕,则返回步骤2.2),若读取完毕,则进至步骤3)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100179162A CN101251820A (zh) | 2008-04-09 | 2008-04-09 | 一种基于程序运行域的软件测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100179162A CN101251820A (zh) | 2008-04-09 | 2008-04-09 | 一种基于程序运行域的软件测试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101251820A true CN101251820A (zh) | 2008-08-27 |
Family
ID=39955217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008100179162A Pending CN101251820A (zh) | 2008-04-09 | 2008-04-09 | 一种基于程序运行域的软件测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101251820A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101847122A (zh) * | 2010-06-01 | 2010-09-29 | 北京邮电大学 | 应用异常控制流集的软件测试方法及系统 |
CN101894064B (zh) * | 2009-05-21 | 2013-01-02 | 北京邮电大学 | 应用跨函数分析的软件测试方法 |
CN105408872A (zh) * | 2013-08-28 | 2016-03-16 | 株式会社日立制作所 | 源代码等价性验证装置以及源代码等价性验证方法 |
CN109308256A (zh) * | 2018-07-24 | 2019-02-05 | 中国建设银行股份有限公司 | 一种java程序动态分析方法、设备和存储介质 |
-
2008
- 2008-04-09 CN CNA2008100179162A patent/CN101251820A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894064B (zh) * | 2009-05-21 | 2013-01-02 | 北京邮电大学 | 应用跨函数分析的软件测试方法 |
CN101847122A (zh) * | 2010-06-01 | 2010-09-29 | 北京邮电大学 | 应用异常控制流集的软件测试方法及系统 |
CN101847122B (zh) * | 2010-06-01 | 2012-05-02 | 北京邮电大学 | 应用异常控制流集的软件测试方法及系统 |
CN105408872A (zh) * | 2013-08-28 | 2016-03-16 | 株式会社日立制作所 | 源代码等价性验证装置以及源代码等价性验证方法 |
CN105408872B (zh) * | 2013-08-28 | 2017-11-24 | 株式会社日立制作所 | 源代码等价性验证装置以及源代码等价性验证方法 |
CN109308256A (zh) * | 2018-07-24 | 2019-02-05 | 中国建设银行股份有限公司 | 一种java程序动态分析方法、设备和存储介质 |
CN109308256B (zh) * | 2018-07-24 | 2021-08-27 | 中国建设银行股份有限公司 | 一种java程序动态分析方法、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102110048B (zh) | 用于基于框架的应用程序的回归测试选择方法和装置 | |
Leotta et al. | Approaches and tools for automated end-to-end web testing | |
Drave et al. | SMArDT modeling for automotive software testing | |
Stürmer et al. | Systematic testing of model-based code generators | |
CN102567201B (zh) | 跨模型的图形用户界面测试脚本自动修复方法 | |
Jaffar‐ur Rehman et al. | Testing software components for integration: a survey of issues and techniques | |
EP2381367A1 (en) | Method and apparatus for the performing unit testing of software modules in software systems | |
US7895575B2 (en) | Apparatus and method for generating test driver | |
Li et al. | Classification of software defect detected by black-box testing: An empirical study | |
CN101937396B (zh) | 软件程序中变量的不安全使用的检测方法 | |
Granda et al. | What do we know about the defect types detected in conceptual models? | |
Lee et al. | Requirements modeling and automated requirements-based test generation | |
CN101251820A (zh) | 一种基于程序运行域的软件测试方法 | |
US20090112554A1 (en) | Test Bench, Method, and Computer Program Product for Performing a Test Case on an Integrated Circuit | |
Jetley et al. | Applying software engineering practices for development of industrial automation applications | |
CN101673200B (zh) | 用户输入模型的检测方法及装置 | |
Ferreira et al. | Making software product line evolution safer | |
CN109376076A (zh) | 一种用于集成系统的测试方法及装置 | |
CN110286882A (zh) | 一种基于模型检测的前台系统设计与验证方法 | |
CN109857640B (zh) | 一种基于原型设计的嵌入式代码提前验证方法 | |
Ray et al. | Validating automotive control software using instrumentation-based verification | |
Desel | From human knowledge to process models | |
EP1388063B1 (en) | System and method for automated assertion acquisition in a java compatibility testing | |
Nunes et al. | Bridging the gap between algebraic specification and object-oriented generic programming | |
Fornaia et al. | Automatic Generation of Effective Unit Tests based on Code Behaviour |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20080827 |