CN101833499A - 一种基于可达树的软件测试验证方法 - Google Patents

一种基于可达树的软件测试验证方法 Download PDF

Info

Publication number
CN101833499A
CN101833499A CN201010140750A CN201010140750A CN101833499A CN 101833499 A CN101833499 A CN 101833499A CN 201010140750 A CN201010140750 A CN 201010140750A CN 201010140750 A CN201010140750 A CN 201010140750A CN 101833499 A CN101833499 A CN 101833499A
Authority
CN
China
Prior art keywords
reachability
petri
modeling
program
tree
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
Application number
CN201010140750A
Other languages
English (en)
Inventor
刘久富
孙琳
王伟
娄坚波
苏青琴
陈魁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University of Aeronautics and Astronautics
Original Assignee
Nanjing University of Aeronautics and Astronautics
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nanjing University of Aeronautics and Astronautics filed Critical Nanjing University of Aeronautics and Astronautics
Priority to CN201010140750A priority Critical patent/CN101833499A/zh
Publication of CN101833499A publication Critical patent/CN101833499A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公布了一种基于可达树的软件测试验证方法,属于软件测试自动化的技术领域。本发明所述方法包括如下步骤:1.第一步,提交被测对象、用户需求文档、测试环境文档;并按照规定格式录入;2.第二步,对被测对象关键点插桩;依照Petri网建模规则对程序自动建立Petri网模型;3.第三步,根据第三步得到的数据生成可达树及可达图模型;4.第四步,对可达树及可达图模型进行可达性的分析与验证;5.第五步,对分析结果进行处理。

Description

一种基于可达树的软件测试验证方法
技术领域
发明涉及一种基于可达树的软件测试验证方法,属于软件测试自动化的技术领域。
背景技术
软件测试是保证软件系统正确性的一个重要手段,它通过运行选定的测试用例来发现软件中的错误,并通过纠正错误使软件的质量达到要求。传统的软件测试只能通过测试用例被动的测试软件的结构问题,不能直接对软件结构进行分析。并且传统的测试方法主要采用的人工、半人工的方法,工作量大、测试周期长、容易出现遗漏,并且效用低。
中国电子科技集团公司第三十八研究所的陈波等采用有限状态机对嵌入式软件进行建模,使用SMV语言描述状态机模型,并通过符号模型检查工具SMV对SMV语言描述的状态机模型进行验证。基于模型检查的验证方法可以在嵌入式软件开发的早期发现错误,从而避免大量重复性的劳动,减少导致严重后果的因素。如文献:陈波、廖颖.一种基于模型检查的嵌入式软件验证方法[J].单片机与嵌入式系统应用.2009.
在已有的软件测试验证方法中,一般仍然或多或少存在以下不足:
(1)模型结构信息的收集没有建立具体的规则标准,导致不利于模型的分析与验证;
(2)所建模型没有明确的评价机制,即模型本身的合理性没有方法来评价,直接影响测试的效用;
(3)人为参与的步骤太多,并且需要较多的相关专业知识才能够实施相应方法;
发明内容
本发明目的是针对现有技术方法存在的缺陷提供一种基于可达树的软件测试验证方法。
本发明是一种软件测试验证方法,其特征在于包括如下步骤:
1)第一步,提交被测对象、用户需求文档、测试环境文档;所有提交的文档需要安装标准格式录入,即:被测的结构化程序区的宏定义,包含文件,入口函数及子函数等各个部分分别录入;用户需求安装文档项目及要求填写需求文档;
2)第二步,对被测对象进行语法分析,在关键点完成插桩;依照Petri网建模规则对程序自动建立Petri网模型;
3)第三步,根据模型结构信息生成可达树及可达图模型;
4)第四步,对可达树及可达图模型进行可达性特性的分析与验证;
5)第五步,根据分析结果与需求比较,并整理测试报告。
附图说明
图1:一种基于可达树的软件测试验证方法流程图
图2:程序录入流程图
图3:顺序结构的Petri网模型
图4:A型条件语句的Petri网模型
图5:B型条件语句的Petri网模型
图6:switch语句的Petri网模型
图7:for语句的Petri网模型
图8:while语句的Petri网模型
图9:程序插桩及建模流程图
图10:可达树生成算法流程图
具体实施方式
1.Petri网形式化定义
1.1.Petri网的充分必要条件
三元组N=(S,T;F)称为有向网(简称网)的充分必要条件是:
(1)
Figure GSA00000073440100031
(2)
Figure GSA00000073440100032
(3) F ⊆ S × T ∪ T × S
(4)dom(F)∪cod(F)=S∪T,其中:
dom ( F ) = { x | ∃ y : ( x , y ) ∈ F }
cod ( F ) = { y | ∃ x : ( x , y ) ∈ F }
S和T分别称为N的库所(place)和变迁(transition),F为流关系。
1.2.前集、后集
前集、后集即T或S的输入或输出,有定义:
设x∈X为有向网N=(S,T;F)的任一元素,
(1)·x={y|(y,x)∈F}称为x的前集(pre-set)或输入集。
(2)x·={z|(x,z)∈F}称为x的后集(post-set)或输出集。
1.3.容量函数、标识、权函数
对有向网N=(S,T;F)而言,记No={0,1,2,...},N={1,2,3,...}并以ω表示无穷:ω=ω+1=ω-1=ω+ω,有:
(1)K:S→N∪{ω}称为N的容量函数。
(2)对给定的容量函数K,M:S→N0称为N的一个标识的条件是:
∀ s ∈ S : M ( s ) ≤ K ( s ) .
(3)W:F→N称为N上的权函数,对(x,y)∈F,W(x,y)=W((x,y))称为(x,y)上的权。
1.4.变迁发生条件
(1)·t··t∪t·称为t的外延(extention)。
(2)t在M有发生权(firable)的条件是:
Figure GSA00000073440100042
t在M有发生权记作M[t>,也说M授权(enable)t发生或t在M授权(enable)下发生。
1.5.变迁发生后果
若M[t>,则t在M可以发生,将标识M改变为M的后继(successor)M′,M′的定义是:对
Figure GSA00000073440100043
Figure GSA00000073440100044
M′为M之后继的事实记作M[t>M′。
2.工作流程
下面结合附图1对本发明的工作流程进行详细说明。
一种基于可达树的软件测试验证方法,有如下软件测试步骤:
2.1.第一步(提交被测对象、用户需求文档、测试环境文档;并按照规定格式录入)
用户需要提交的文档包括完整的程序语言,该语言的关键字,测试需求,程序运行环境等信息。程序语言要求是标准的结构化程序语言。按照附图2所示步骤执行。
2.2.第二步(依照Petri网建模规则对程序自动建立Petri网模型;并收集和存储Petri网模型结构的相关信息)
首先,对该结构化语言的关键词整理并存储用以与程序中的词作比较,即标注程序中的关键词,同时在相应位置插桩标记,用以对程序模型遍历生成Petri网模型。同时,需要插桩的还有函数出口点、入口点、宏定义等位置。
程序为结构化语言编写的程序如C语言,由于有固定语法格式:顺序结构、条件结构(if、switch)、循环结构(while、for),则对结构分别建模,Petri网模型就是这些模块的组合。
1)顺序结构及其Petri网模型,如图3
Sentence1;
Sentence2;
Sentence3;
2)A型条件语句及其Petri网模型,如图4
If(condition1)
Sentence1;
End
Sentence2;
3)B型条件语句及其Petri网模型,如图5
If(condition1)
Sentence1;
Else
Sentence2;
End
Sentence3;
4)switch语句及其Petri网模型,如图6
Switch(condition0)
{
  Case(condition1):
    Sentence1;
    Break;
  Case(condition2):
    Sentence2;
    Break;
Case(condition3):
    Sentence3;
    Break;
    …
  Case(condition X):
    SentenceX;
    Break;
  Default:
  Sentence X+1;
}
5)for语句及其Petri网模型,如图7
For(Sentence_1;condition2;Sentence_2)
  Sentence1;
  …
  SentenceN;
End
或:
While(condition1)
Sentence1;…
End
6)while语句及其Petri网模型,如图8
Do
Sentence1;
While(condition1)
该建模方法,首先将程序的固定结构按照以上建模规则转变为Petri网模型,然后再按照顺序结构进行合并,即得到整个程序的完整的Petri网模型。与传统中利用数据流图的方法进行软件建模相比,利用基于Petri网的软件建模方法能够动态运行程序模型,可以看到其动态的流程走向,方便了解其测试的进展和结果,并帮助分析模型中存在的死锁、并发、冲突等问题,对程序正确性进行验证和分析。具体建模见图9所示的流程。
2.3.第三步(生成可达树及可达图模型)
可达树的构造是Petri网分析的第一步。
首先,按照下图10遍历整个Petri网结构图,并标记各个标识的关系,即构成可达树(可达图)模型。
其次,可达树(可达图)采用邻接矩阵的算法存储和运算。
1)邻接矩阵存储算法:
在存储标识展开树的时候需要考虑存储顶点数据的信息以及顶点之间的关系(权),需要用两个数组分别存储,数据结构描述如下:
///----标识展开树的存储方法
typedef struct Arch{
  LinkType link;//LinkType表示顶点的关系类型,1表示有向弧,
  0表示抑止弧
  InfoType *info;//InfoType指示下一顶点
}Arch,ArchMatrix[MaxNum][MaxNum]//MaxNum是最大顶点个数
Typedef struct{
  PointType point[MaxNum];//顶点向量
  ArchMatrix archer;//矩阵
  Int pointNum,archNum;//顶点数,弧数
}myGraph;
2)邻接矩阵构造算法:
Status CreatMatrix(myGraph&G){
  Scanf(&G.pointNum,&G.archNum);
  For(i=0,i<G.pointNum;++i)
  For(j=0;j<G.pointNum;++j)G.archer[i][j]={INFINITY,null};
  For(k=0;k<G.archNum;++k){
    Scanf(&v1,&v2,&w);
    I=SureMatrix(G,v2);
    G.archer[i][j].link=w;//弧的权值即变迁T
  }
}
2.4.第四步(对可达树及可达图模型进行可达性特性的分析与验证)
若有Petri网系统∑=(S,T;F,K,W,M0)和一个标识M,存在M∈[M0>则M是可达标识,如果对于∑所有m∈M都是可达的,就说系统∑是可达系统。
可达性可以由标识展开树由叶子节点Mt向其父节点向上逐级追溯来搜索是否可以找到初始标识M0。分为两步来实现,首先遍历标识展开树,找到所有Mi标识;然后,遍历Mi所在路径,按路径向上追溯所有节点,如果找到M0则Mi为可达标识。
//--可达性算法
FindFunc(v){
int Node[S_count];
int Flag=0;
NodeCopy(v,*Node[]);//获取节点Token集
NodeFind(Node[]);
for(int i=0;i<Keep_count;i++){
Flag=NodeCmp(Node[]);
if(Flag)
print(“M可达”);
else print(“M不可达”);}}
//查找
NodeFind(Node[]){
for(int i=0;i<Node_count;i++){
Find(Node[i]);//比较
Keep(i);}}//记录
//比较
int NodeCmp(Node[]){
for(int i=0;i<Root_count;i++){
if(Find(Node[i]));
Return 1;}}
2.5.第五步(根据分析结果进行处理)
根据第五步对模型的分析,与用户需求的程序可达性进行比较,如果满足用户对程序可达性的需求则结束分析,反之如果不通过则软件出现故障,需要排除故障,即回到第三步重新生成可达树模型,再进行分析。
3.优势与创新
本发明对现有技术有以下的改进和创新:
(1)本发明提出一种严格的形式化方法对软件测试验证。Petri网是一种完全形式化的语言,采用具有形式语义的图形语言,相比于其他的非形式化及半形式化分析方法一致性好,较现有技术严格地对程序进行测试验证。
(2)本发明采用按照结构化程序中的所有结构分别建模的方法来建立模型,以便于Petri网模型自动化生成,解决了Petri网分析方法中模型建立困难的问题。
(3)本发明应用Petri网可达性理论对程序的可达性进行分析验证。Petri网理论有完善的分析理论,通过对模型性质的分析可以很大程度上避免程序的缺陷。

Claims (3)

1.一种基于Petri网中可达树分析方法的软件测试验证方法,其特征在于包括如下步骤:
1)第一步,提交被测对象、用户需求文档、测试环境文档;所有提交的文档需要安装标准格式录入,即:被测的结构化程序区的宏定义,包含文件,入口函数及子函数等各个部分分别录入;用户需求按照文档各个分类的要求填写需求文档;
2)第二步,对被测对象(结构化语言程序)进行语法分析,查找关键词及函数入口、出口点,并依据以上的关键点完成插桩;依照Petri网建模规则对程序自动建立Petri网模型;并收集和存储Petri网模型结构的相关信息;
3)第三步,根据第三步得到的模型结构信息生成可达树及可达图模型;
4)第四步,对可达树及可达图模型进行可达性特性的分析与验证;
5)第五步,将分析结果与需求比较,并整理测试报告。
2.本发明提出了按照结构化程序的语法结构进行Petri网自动建模的方法。该方法首先需要对语法结构中的顺序结构、条件结构(if、switch)、循环结构(while、for)分别建模,再根据插桩信息对程序结构分块建模,最后组合,得到整个程序的Petri网模型。这种自动建模方法解决了Petri网模型分析中建模难的问题,提供了自动化的建模机制。
3.本发明将Petri网理论应用于软件测试验证,用可达树、可达图的方法分析程序的可达性,并实现了整个分析过程的自动化。
CN201010140750A 2010-04-07 2010-04-07 一种基于可达树的软件测试验证方法 Pending CN101833499A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010140750A CN101833499A (zh) 2010-04-07 2010-04-07 一种基于可达树的软件测试验证方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010140750A CN101833499A (zh) 2010-04-07 2010-04-07 一种基于可达树的软件测试验证方法

Publications (1)

Publication Number Publication Date
CN101833499A true CN101833499A (zh) 2010-09-15

Family

ID=42717575

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010140750A Pending CN101833499A (zh) 2010-04-07 2010-04-07 一种基于可达树的软件测试验证方法

Country Status (1)

Country Link
CN (1) CN101833499A (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101901188A (zh) * 2010-07-23 2010-12-01 哈尔滨工程大学 一种基于可达路径的软件测试方法
CN101968769A (zh) * 2010-10-22 2011-02-09 中国人民解放军理工大学 一种基于行为模型的软件安全性测试用例生成方法
CN102129406A (zh) * 2011-03-03 2011-07-20 南京航空航天大学 一种基于条件值的软件静态预测方法及工具
CN102521123A (zh) * 2011-11-24 2012-06-27 西安邮电学院 一种基于逻辑执行块的嵌入式软件测试插桩方法
CN103399902A (zh) * 2013-07-23 2013-11-20 东北大学 一种并行环境下的有向图可达性链表生成及查询方法
CN103559587A (zh) * 2013-11-15 2014-02-05 安徽理工大学 一种基于行为模式的模型变化区域责任分析系统
CN103699730A (zh) * 2013-12-18 2014-04-02 华侨大学 一种基于Petri网的组合逻辑FPGA系统可达图的生成方法
CN103729289A (zh) * 2013-11-29 2014-04-16 北京广利核系统工程有限公司 一种利用图式标明hpd逻辑可靠性的方法
CN105468845A (zh) * 2015-11-24 2016-04-06 浪潮(北京)电子信息产业有限公司 一种基于XML的Petri网运行方法及系统
CN106021009A (zh) * 2016-05-25 2016-10-12 浪潮电子信息产业股份有限公司 利用excel自带宏实现自动化整理测试报告的方法
CN106547696A (zh) * 2016-10-28 2017-03-29 中国人民解放军理工大学 一种面向工作流系统的测试用例生成方法及装置
CN108304174A (zh) * 2017-08-22 2018-07-20 北京智行鸿远汽车有限公司 一种基于numpy的高精度C语言算法验证方法
US10365995B2 (en) 2015-08-04 2019-07-30 Entit Software Llc Composing future application tests including test action data
CN110879722A (zh) * 2019-11-27 2020-03-13 京东数字科技控股有限公司 生成逻辑示意图的方法及装置、计算机可存储介质

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101901188A (zh) * 2010-07-23 2010-12-01 哈尔滨工程大学 一种基于可达路径的软件测试方法
CN101968769A (zh) * 2010-10-22 2011-02-09 中国人民解放军理工大学 一种基于行为模型的软件安全性测试用例生成方法
CN102129406A (zh) * 2011-03-03 2011-07-20 南京航空航天大学 一种基于条件值的软件静态预测方法及工具
CN102521123A (zh) * 2011-11-24 2012-06-27 西安邮电学院 一种基于逻辑执行块的嵌入式软件测试插桩方法
CN102521123B (zh) * 2011-11-24 2016-04-06 西安邮电大学 一种基于逻辑执行块的嵌入式软件测试插桩方法
CN103399902A (zh) * 2013-07-23 2013-11-20 东北大学 一种并行环境下的有向图可达性链表生成及查询方法
CN103559587A (zh) * 2013-11-15 2014-02-05 安徽理工大学 一种基于行为模式的模型变化区域责任分析系统
CN103729289B (zh) * 2013-11-29 2016-04-06 北京广利核系统工程有限公司 一种利用图式标明hpd逻辑可靠性的方法
CN103729289A (zh) * 2013-11-29 2014-04-16 北京广利核系统工程有限公司 一种利用图式标明hpd逻辑可靠性的方法
CN103699730A (zh) * 2013-12-18 2014-04-02 华侨大学 一种基于Petri网的组合逻辑FPGA系统可达图的生成方法
CN103699730B (zh) * 2013-12-18 2017-02-22 华侨大学 一种基于Petri网的组合逻辑FPGA系统可达图的生成方法
US10365995B2 (en) 2015-08-04 2019-07-30 Entit Software Llc Composing future application tests including test action data
CN105468845A (zh) * 2015-11-24 2016-04-06 浪潮(北京)电子信息产业有限公司 一种基于XML的Petri网运行方法及系统
CN105468845B (zh) * 2015-11-24 2018-12-07 浪潮(北京)电子信息产业有限公司 一种基于XML的Petri网运行方法及系统
CN106021009A (zh) * 2016-05-25 2016-10-12 浪潮电子信息产业股份有限公司 利用excel自带宏实现自动化整理测试报告的方法
CN106547696A (zh) * 2016-10-28 2017-03-29 中国人民解放军理工大学 一种面向工作流系统的测试用例生成方法及装置
CN106547696B (zh) * 2016-10-28 2019-05-28 中国人民解放军理工大学 一种面向工作流系统的测试用例生成方法及装置
CN108304174A (zh) * 2017-08-22 2018-07-20 北京智行鸿远汽车有限公司 一种基于numpy的高精度C语言算法验证方法
CN110879722A (zh) * 2019-11-27 2020-03-13 京东数字科技控股有限公司 生成逻辑示意图的方法及装置、计算机可存储介质

Similar Documents

Publication Publication Date Title
CN101833499A (zh) 一种基于可达树的软件测试验证方法
Alur et al. Model checking of hierarchical state machines
Song et al. Efficient alignment between event logs and process models
CN105868116A (zh) 基于语义变异算子的测试用例生成和优化方法
CN102662825B (zh) 一种面向堆操作程序的内存泄漏检测方法
CN102567200A (zh) 基于函数调用图的并行化安全漏洞检测方法
Chen et al. Assertion-based functional consistency checking between TLM and RTL models
CN103995778A (zh) 一种基于事件和动作的脚本文件生成方法及其装置
CN103455362A (zh) 一种硬件语言自动转换系统
Ciobanu et al. Automatic analysis of TiMo systems in PAT
Haddad et al. A model checking method for partially symmetric systems
Liu et al. OF-PENDA: A Software Tool for Fault Diagnosis of Discrete Event Systems Modeled by Labeled Petri Nets.
US20120254178A1 (en) System and method for processing an sql query made against a relational database
Vert et al. Detection of incorrect pointer dereferences for C/C++ programs using static code analysis and logical inference
Ericsson et al. Seamless formal verification of complex event processing applications
Ouimet et al. Automated verification of completeness and consistency of abstract state machine specifications using a sat solver
Hou et al. A hybrid queueing model with imperfect debugging for component software reliability analysis
Ebeid et al. Generation of VHDL code from UML/MARTE sequence diagrams for verification and synthesis
Urdahl et al. Architectural system modeling for correct-by-construction RTL design
US8825631B2 (en) System and method for improved processing of an SQL query made against a relational database
Wu et al. RDGFuzz: A directed greybox fuzzing optimization method based on Rich-Branch nodes
El Hichami et al. Visual Specification Language and Automatic Checking of Business Process.
Shimakawa et al. Discussion of LTL Subsets for Efficient Verification
Mao et al. Formal specification and proof of gridjack
Alnemari et al. Integrating static and dynamic analysis techniques for detecting dynamic errors in MPI programs

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: 20100915