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

文档序号:6600290阅读:447来源:国知局
专利名称:一种基于可达树的软件测试验证方法
技术领域
发明涉及一种基于可达树的软件测试验证方法,属于软件测试自动化的技术领 域。
背景技术
软件测试是保证软件系统正确性的一个重要手段,它通过运行选定的测试用例来 发现软件中的错误,并通过纠正错误使软件的质量达到要求。传统的软件测试只能通过测 试用例被动的测试软件的结构问题,不能直接对软件结构进行分析。并且传统的测试方法 主要采用的人工、半人工的方法,工作量大、测试周期长、容易出现遗漏,并且效用低。中国电子科技集团公司第三十八研究所的陈波等采用有限状态机对嵌入式软件 进行建模,使用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 可达树生成算法流程图
具体实施例方式l.Petri网形式化定义1. 1. Petri网的充分必要条件三元组N = (S,T ;F)称为有向网(简称网)的充分必要条件是(1) Sf]T = 0;(2) S U Γ 关 0 ;(3) FcSxTiJTxS(4) dom(F) U cod (F) =SU T,其中dom(F) = {jc I (x,y) g F}cod(F) = I Bx : (x5<y) e F}S和T分别称为N的库所(place)和变迁(transition),F为流关系。1. 2.前集、后集前集、后集即T或S的输入或输出,有定义SxeX为有向网N = (S,T ;F)的任一元素,(1) 'χ = {y (y,χ) e F}称为 χ 的前集(pre-set)或输入集。(2)x. = {ζ I (χ, ζ) e F}称为 χ 的后集(post-set)或输出集。1. 3.容量函数、标识、权函数对有向网N= (S,T;F)而言,记 N。= {0,1,2,...},N= {1,2,3,...}并以 ω 表 示无穷ω = ω+1 = ω-1 = ω + ω,有(I)K :S — N U {ω}称为N的容量函数。(2)对给定的容量函数K,M :S — N0称为N的一个标识的条件是VseS: M(s) < K(s)。(3) W —N 称为 N 上的权函数,对(x, y) e F,W (χ, y)= ff((x, y))称为(χ, y) 上的权。1. 4.变迁发生条件(1) . t. = . t U t ·称为 t 的外延(extention)。(2) t在M有发生权(f irable)的条件是
ft.. M ( s ) >W ( S, t)八ν“ ·: M ( s ) +W ( S, t) <K ( s )
t在M有发生权记作M[t >,也说M授权(enable)t发生或t在M授权(enable) 下发生。1.5.变迁发生后果若M[t >,则t在M可以发生,将标识M改变为M的后继(successor)M',M'的 定义是对Vs e S,
<formula>formula see original document page 5</formula>M'为M之后继的事实记作M[t >M'。2.工作流程下面结合附图1对本发明的工作流程进行详细说明。一种基于可达树的软件测试验证方法,有如下软件测试步骤2. 1.第一步(提交被测对象、用户需求文档、测试环境文档;并按照规定格式录 入)用户需要提交的文档包括完整的程序语言,该语言的关键字,测试需求,程序运行 环境等信息。程序语言要求是标准的结构化程序语言。按照附图2所示步骤执行。2. 2.第二步(依照Petri网建模规则对程序自动建立Petri网模型;并收集和存 储Petri网模型结构的相关信息)首先,对该结构化语言的关键词整理并存储用以与程序中的词作比较,即标注程 序中的关键词,同时在相应位置插桩标记,用以对程序模型遍历生成Petri网模型。同时, 需要插桩的还有函数出口点、入口点、宏定义等位置。程序为结构化语言编写的程序如C语言,由于有固定语法格式顺序结构、条件结 构(if、switch)、循环结构(while、f0r),则对结构分别建模,Petri网模型就是这些模块的组合。1)顺序结构及其Petri网模型,如图3…Sentencel ;Sentence2 ;Sentence3 ;…2) A型条件语句及其Petri网模型,如图4…If(conditionl)Sentencel ;EndSentence2 ;
…3) B型条件语句及其Petri网模型,如图5…If(conditionl)Sentencel ;ElseSentence2 ;EndSentence3 ;…4) switch语句及其Petri网模型,如图6Switch(conditionO){Case (conditionl)Sentencel ;Break ;Case(condition2)Sentence2 ;Break ;Case(condition3)Sentence3 ;Break ;…Case(condition Χ)SentenceX ;Break ;Default Sentence Χ+l ;}5) for语句及其Petri网模型,如图7…For (Sentence_l ;condition2 ;Sentence_2)Sentencel ;…SentenceN ;End或
…While (conditionl)
Sentencel ;…End…6)while语句及其Petri网模型,如图8Do…Sentencel ;...While (conditionl)该建模方法,首先将程序的固定结构按照以上建模规则转变为Petri网模型,然 后再按照顺序结构进行合并,即得到整个程序的完整的Petri网模型。与传统中利用数 据流图的方法进行软件建模相比,利用基于Petri网的软件建模方法能够动态运行程序模 型,可以看到其动态的流程走向,方便了解其测试的进展和结果,并帮助分析模型中存在的 死锁、并发、冲突等问题,对程序正确性进行验证和分析。具体建模见图9所示的流程。2. 3.第三步(生成可达树及可达图模型)可达树的构造是Petri网分析的第一步。首先,按照下图10遍历整个Petri网结构图,并标记各个标识的关系,即构成可达 树(可达图)模型。其次,可达树(可达图)采用邻接矩阵的算法存储和运算。1)邻接矩阵存储算法在存储标识展开树的时候需要考虑存储顶点数据的信息以及顶点之间的关系 (权),需要用两个数组分别存储,数据结构描述如下III----标识展开树的存储方法typedef struct Arch{LinkType link ;//LinkType表示顶点的关系类型,1表示有向弧,
0表示抑止弧InfoType *info ;//InfoType 指示下一顶点} Arch, ArchMatrix [MaxNum] [MaxNum] //MaxNum 是最大顶点个数Typedef struct {PointType point [MaxNum] ;// Tjg^t^MArchMatrix 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 (&v 1,&v2,&w);I = SureMatrix (G, v2);G. archer [i] [j], link = w ;// 弧的权值即变迁 T}}2. 4.第四步(对可达树及可达图模型进行可达性特性的分析与验证)若有Petri网系统Σ = (S, T ;F, K, W, M0)和一个标识M,存在Me [Mtl >则M是可 达标识,如果对于Σ所有m e M都是可达的,就说系统Σ是可达系统。
可达性可以由标识展开树由叶子节点Mt向其父节点向上逐级追溯来搜索是否可 以找到初始标识Μ『分为两步来实现,首先遍历标识展开树,找到所有Mi标识;然后,遍历 Mi所在路径,按路径向上追溯所有节点,如果找到M0则Mi为可达标识。//-可达性算法FindFunc (ν) {int Node[S_count];int Flag = 0 ;NodeCopy (ν, *Node []) ;// 获取节点 Token 集NodeFind (Node []);for (int i = O ;i < Keep_count ;i++) {Flag = NodeCmp (Node []);if (Flag)print ( “M 可达”);else print ( “M 不可达”);}}//查找NodeFind (Node []) {for (int i = O ;i < Node_count ;i++) {Find (Node [i]);// 比较Ke印(i) ;}}//记录// 比较int NodeCmp (Node []) {for (int i = O ;i < Root_count ;i++) {if (Find (Node [i]));Return 1 ;}}2. 5.第五步(根据分析结果进行处理)根据第五步对模型的分析,与用户需求的程序可达性进行比较,如果满足用户对 程序可达性的需求则结束分析,反之如果不通过则软件出现故障,需要排除故障,即回到第 三步重新生成可达树模型,再进行分析。3.优势与创新本发明对现有技术有以下的改进和创新(1)本发明提出一种严格的形式化方法对软件测试验证。Petri网是一种完全形式化的语言,采用具有形式语义的图形语言,相比于其他的非形式化及半形式化分析方法 一致性好,较现有技术严格地对程序进行测试验证。(2)本发明采用按照结构化程序中的所有结构分别建模的方法来建立模型,以便 于Petri网模型自动化生成,解决了 Petri网分析方法中模型建立困难的问题。
(3)本发明应用Petri网可达性理论对程序的可达性进行分析验证。Petri网理 论有完善的分析理论,通过对模型性质的分析可以很大程度上避免程序的缺陷。
权利要求
一种基于Petri网中可达树分析方法的软件测试验证方法,其特征在于包括如下步骤1)第一步,提交被测对象、用户需求文档、测试环境文档;所有提交的文档需要安装标准格式录入,即被测的结构化程序区的宏定义,包含文件,入口函数及子函数等各个部分分别录入;用户需求按照文档各个分类的要求填写需求文档;2)第二步,对被测对象(结构化语言程序)进行语法分析,查找关键词及函数入口、出口点,并依据以上的关键点完成插桩;依照Petri网建模规则对程序自动建立Petri网模型;并收集和存储Petri网模型结构的相关信息;3)第三步,根据第三步得到的模型结构信息生成可达树及可达图模型;4)第四步,对可达树及可达图模型进行可达性特性的分析与验证;5)第五步,将分析结果与需求比较,并整理测试报告。
2.本发明提出了按照结构化程序的语法结构进行Petri网自动建模的方法。该方法 首先需要对语法结构中的顺序结构、条件结构(if、switch)、循环结构(while、f0r)分别建 模,再根据插桩信息对程序结构分块建模,最后组合,得到整个程序的Petri网模型。这种 自动建模方法解决了 Petri网模型分析中建模难的问题,提供了自动化的建模机制。
3.本发明将Petri网理论应用于软件测试验证,用可达树、可达图的方法分析程序的 可达性,并实现了整个分析过程的自动化。
全文摘要
本发明公布了一种基于可达树的软件测试验证方法,属于软件测试自动化的技术领域。本发明所述方法包括如下步骤1.第一步,提交被测对象、用户需求文档、测试环境文档;并按照规定格式录入;2.第二步,对被测对象关键点插桩;依照Petri网建模规则对程序自动建立Petri网模型;3.第三步,根据第三步得到的数据生成可达树及可达图模型;4.第四步,对可达树及可达图模型进行可达性的分析与验证;5.第五步,对分析结果进行处理。
文档编号G06F11/36GK101833499SQ201010140750
公开日2010年9月15日 申请日期2010年4月7日 优先权日2010年4月7日
发明者刘久富, 娄坚波, 孙琳, 王伟, 苏青琴, 陈魁 申请人:南京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1