一种基于可达路径的软件测试方法

文档序号:6606498阅读:263来源:国知局
专利名称:一种基于可达路径的软件测试方法
技术领域
本发明涉及的是一种软件测试方法。
背景技术
软件测试的实质是根据软件开发各阶段的规格说明和程序的内部结构设计测试 用例,并用这些测试用例去驱动被测程序,观察程序的执行结果,验证实际运行结果与期望 结果是否一致。正确合理的选取测试用例是软件测试的核心与关键。测试用例是直接与程 序的结构相关的,因此结构测试尤为重要,它是根据程序的内部结构设计测试用例。这种结 构测试要求对被测程序的结构特性做到一定程度的覆盖,需要选择一种覆盖准则并确定逻 辑路径。每个测试用例需要执行特定的路径,首先面临的问题就是如何确定一条可达的路 径。可达路径的选择可以有效的避免冗余测试用例生成及路径生成的耗费,从而保证测试 的充分性。程序切片技术是一种分析和理解程序的技术,具有可以简化问题,缩小目标范围 的特点,在软件维护、程序调试、测试、代码理解等诸多领域有着广泛的应用。它的原理和方 法是由Mark Weiser于1979年在他的博士论文中首次提出来的。此后,在他的基础上又有 许多人提出了不同的程序切片定义和切片算法,其中包括Horwitz提出的程序切片算法, 他将程序依赖图(PDF)扩展为系统依赖图(SDG),解决了 Weiser提出的算法中无法解决过 程调用的问题;以及Canfora提出的条件切片技术;Korel和Laski提出的动态切片概念等 等。基于程序切片的软件测试是一种以程序或程序和需要相结合为基础的测试,根据程序 的不同切片来缩小软件的测试范围,并提高软件测试的效率。同时由于程序切片考虑程序 存在的各种依赖关系(不仅仅是数据依赖和控制依赖),使得测试的准确性得到提高。目前,对于可达路径的确定方法主要有两种一是不可达路径的排除,二是可达路 径的选择。不可达路径的排除主要分为静态方法和动态方法。文献《基于最少谓词思想的可达路径选择》(CNKI)指出传统的不可达路径排除方 法存在很大的缺陷(1)通过静态分析,确定存在的分支冲突,从而排除掉不可达路径,但该方法效率 较低,且受到静态分析方法、手段的影响,判别所有的不可达路径几乎是不可能的。(2)动态方法由于其试探性具有以下缺点①在确定某条路径为不可达路径之前,已经为探测测试用例而反复执行搜索,耗 费较大。②对于测试域窄的可达路径,因其测试用例不易搜索到,可能会被排除掉,直接影 响着测试的充分性。(3)以符号执行方式产生测试用例时,在解谓词方程组的同时,可通过方程组的有 解、无解判定不可达路径。但符号执行方法的缺陷也同样存在于不可达路径的判定方面,因 此不可达路径问题需要更有效的解决方法。文献《基于最少谓词思想的可达路径选择》同时指出积极选择可达路径的思想可
3有效地减少不可达路径的产生,基于可达路径的思想具有以下优点①早期排除不可达路径不仅可以有效避免冗余测试用例的生成,更因其早在路径 生成之前的决策,使得生成冗余路径的耗费也得以避免。②避免从完整的路径覆盖中因排除掉部分不可达路径而影响测试的整体覆盖率, 从而保证测试的充分性。可达路径的选择方法主要有最小谓词法、应用数据流和控制流的可达路径选择 法、探测分支冲突法。但是这些算法由于实现的不同,同样会影响路径的可达效果,因此,需 要找到一种有效的方法来改善目前可达路径选择算法的缺陷。基于路径的测试准则是各种测试准则中要求最高的一种,但是由于路径可达性问 题的存在,降低了基于路径的测试效率。因此如何有效地分析选择路径是基于路径测试中 的一个关键问题,有效地准确的选择路径能够提高软件测试的效率。对于路径可达性的分 析,是从另一个角度分析选择路径使测试用例在选择好的路径上执行。同时也为基于路径 的软件测试工作提供更好的前期处理结果,从而提高测试的效率保证软件的质量。直接分 析可达路径具有以下优点第一,早期排除不可达路径可以有效避免冗余测试用例生成的 耗费;第二,避免部分不可达路径而影响测试的覆盖率,从而保证测试的充分性。

发明内容
本发明的目的在于提供一种能提高路径的选择效率和准确性的基于可达路径的 软件测试方法。本发明的目的是这样实现的本发明中涉及的路径切片概念的含义如下程序中存在的多分支情况造成了程序的复杂性,这些分支取向是由各种依赖关系 所影响的。切片技术考虑到了程序中存在的各种依赖关系(不仅仅是数据依赖和控制依 赖),使得测试的准确性得到提高。程序中最基本的依赖关系是语句之间的,主要是数据依 赖、普通依赖和控制依赖。任何一个程序都可以和一组程序切片的并集等价,所以测试每个 切片实际就是测试了整个程序,从而保证了测试的充分性。定义1(路径切片)程序P,切片准则C<n,V〉。以切片准则中的η为指定点,为分 析能够达到η的可能路径而得到切片S,称切片S为路径切片。定义2(切片路径)对于切片S(n,V,static) 0分析得到一组可能的路径pl, p2,…,pn,其中的路径称为切片路径。应用程序切片技术获取路径切片,进而选择可达路径的过程主要分为以下步骤。步骤1 收集程序的基本信息,包括语句出现的变量的定义和使用信息;步骤2 对每一个切片建立一个信息链表;步骤3 应用图可达性算法后向遍历程序,按照控制和依赖关系标记它的直接前 驱结点,将标记的当前节点η包含到S(V)中;步骤4 判断是否到达程序的入口点,如果还没有到达程序的入口点则继续后向 遍历程序,否则,停止遍历得到包含一组可能路径的集合即路径切片S ;步骤5 从路径切片S的第一个分支谓词开始分析变量的相关性。在取得的路径 切片上分析路径的可达性即分析切片谓词变量表达式的取值。从切片入口点开始,按照数据依赖和控制依赖重新标记路径信息,主要是完成对路径中分支谓词中的变量进行分析, 判断谓词结点的取值,它的取值有三种可能性true,false和undef,其中true和false表 示相应的谓词变量已经被定值(始终取真或假),undef表示相应的谓词变量的取值与实际 运行有关。通过对谓词变量的判断如果能够达到指定的切片变量,即该路径为可达,否则为 不可达。其中可达也分为始终可达,是指指定点始终在分支谓词取值的分支上,和输入相关 可达,是指它的能否达到依赖于程序的输入值。直到把路径切片中的所有谓词变量都分析
元ο本发明将程序切片应用在程序结构中的可达路径选择上,提出一种基于程序切片 的路径选择算法,为的是提高路径的选择效率和准确性。早期排除不可达路径不仅可以有 效避免冗余测试用例的生成,更因其早在路径生成之前的决策,使得生成冗余路径的耗费 也得以避免。应用程序切片技术能够简化程序结构的功能,将此应用在路径选择的前期。在分 析可达路径的前期,通过程序切片技术得到的切片包含一组可到达兴趣点的路径的集合。 这样一个路径的集合包含了从程序入口处到指定兴趣点的所有可能的路径,避免从完整的 路径覆盖中因排除掉部分不可达路径而影响测试的整体覆盖率,从而保证测试的充分性。采用图可达性算法来计算满足要求的程序切片。使用静态后向切片准则,以程序 出口点前的必经节点为兴趣点,后向遍历该程序,搜索与相应兴趣点中的变量有直接或间 接关系的节点,这样得到的节点集合即为所需包含一组路径的切片。在后向遍历过程中,考 虑到基本语句之间的依赖关系,在这些依赖关系基础上进一步构造程序依赖图和系统依赖 图。对比其他的可达路径选择方法,本发明提出的路径切片法具有以下优点该方法 分两步分析选择可达路径,第一步确定路径的子集,第二步在集合中分析路径。分两步完成 路径的选择,缩小了选择的范围,容易实现覆盖的充分性。


图1是本发明的可达路径选择算法流程图。
具体实施例方式下面结合附图举例对本发明做更详细地描述本发明公开了一种基于可达路径的软件测试方法,下面将按照流程图1详述本发 明的具体实施方式
,流程图如图1所示。主要包含以下几个关键步骤步骤1 收集程序的基本信息,包括语句出现的变量的定义和使用信息;这个过程是设程序P,Definition (ν, η, t)表示变量ν在语句η中定义,其中t 表示每次对变量ν的定义依此区分对变量ν的定义,Def (ν)表示所有对变量ν的定值点集 合;Usingfc,ν)表示在语句η中引用变量v,Use (ν)表示对变量ν的引用点集合,GEN(ν) 表示变量ν的定义和引用的信息的集合。Def (ν) ={v| VDefinition (ν, η, t) }Use (ν) ={v| VUsing (η, ν) }GEN (ν) = Def (ν) UUse (ν)
5
在这一过程中,即使某变量在定义后可能被重新定义,这样的信息也会被记录下 来,通过t就可以区分,也显示变量ν被定义的次数。步骤2 对每一个切片建立一个信息链表;由于程序中可能存在多个切片变量,所以不同切片准则C涉及到的程序的基本信 息也不尽相同。以准则C<n,ν, backward〉后向遍历程序标记直接或间接相关的前驱结点, 得到路径切片,令集合S(V)表示切片准则C<n,ν, backward)中切片变量ν的基本信息集,语句η,变量ν S(v)eGEN(v)S (ν)以链表的形式来表示即为路径切片,在生成链表过程中需要考虑程序中的数 据依赖和控制依赖。步骤3 应用图可达性算法后向遍历程序,按照控制和依赖关系标记它的直接前 驱结点,将标记的当前节点η包含到S(V)中;在这类基于图形可达性的算法中,一般主要是指程序依赖图和系统依赖图可达。 下面对这两种依赖图进行详细说明。1.程序依赖图(PDG) :PDG是程序的一种图形表示,它把控制依赖和数据依赖包含 在单个的结构中。如果给定程序中的语句X和Y,则X和Y可以通过控制流或者数据流来 彼此关联。如果从Y至少可以引出两条路径,其中一条总会导致X的执行,而另一条可能导 致X不执行,则称语句X控制依赖于语句Y ;如果有一条从Y到X的路径,且存在一个在Y点 定义在X点使用的变量,且该变量在沿从Y到X的路径上其它任何地方没有被重新定义,则 称语句X数据依赖于语句Y。PDG的形式定义是由一个控制依赖子图(CDG),一个控制流图 (CFG)和一个数据依赖子图(DDG)组成。其中⑶G包含了程序中的控制依赖;CFG描述了一 个程序中的控制流,它类似于正常情况下的流图;DDG是一个程序中语句之间所有数据依 赖的集合。CDG包含几种类型的节点,即语句节点表示程序中的语句;域结点概括了域中语 句间的控制依赖;谓词节点(由此可以引出两条边)表示程序中的策略或分支条件。CDG中 的域节点可利用相同的控制依赖来集合语句。DDG包含语句间的数据依赖。可通过在CDG 的节点之间插入数据依赖边来构造DDG。2.系统依赖图(SDG) :SDG是程序的一种语法分析树表示。节点表示程序构造 (constructs),输入输出参数(in,out参数)和调用位置等。边表示与之相连的节点之间 的各种依赖(例如数据依赖,控制依赖和声明等)。程序依赖图通常是为单个过程的程序来 定义的。由于现实世界的程序一般是由多个过程组成的,所以必须考虑使用一种与现实世 界程序相匹配的表示方法,于是S. Horwitz, T. Reps和D. Binkley等人提出了系统依赖图。 SDG是一棵经过装饰的表示程序的语法分析树。形式地说,SDG是由一个程序依赖图和一组 过程依赖图(PrDG)构成的有向、带标记的多重图。PrDG模型化软件系统中的主程序PrDG 模型化软件系统中的多个过程体。SDG可以用来处理过程间的数据流和控制流,并能表示参 数传递。图可达性算法是一个具有扩展性的算法,使用程序依赖图(PDG)可以用来计算单 过程的程序切片,而在处理多过程时只需进一步使用系统依赖图(SDG)便可以得到进一步处理。步骤4 判断是否遍历到程序的入口点,如果还没有到达程序的入口点则继续后向遍历程序,否则,停止遍历得到包含一组可能路径的集合即路径切片S ;步骤5 从路径切片S的第一个分支谓词开始分析变量的相关性。在取得的路径 切片上分析路径的可达性即分析切片谓词变量表达式的取值。从切片入口点开始,按照数 据依赖和控制依赖重新标记路径信息,主要是完成对路径中分支谓词中的变量进行分析, 判断谓词结点的取值,它的取值有三种可能性true,false和undef,其中true和false表 示相应的谓词变量已经被定值(始终取真或假),undef表示相应的谓词变量的取值与实际 运行有关。通过对谓词变量的判断如果能够达到指定的切片变量,即该路径为可达,否则为 不可达。其中可达也分为始终可达,是指指定点始终在分支谓词取值的分支上,和输入相关 可达,是指它的能否达到依赖于程序的输入值。直到把路径切片中的所有谓词变量都分析
元ο下面使用结构化语言表述可达路径的选择方法的过程//首先收集程序的基本信息for(i = 0 ;i<var_num ;i++)//i 为变量个数GEN (v) = Def (ν) U Use (ν) ;//对每一个变量建立一个信息链表Il依据切片准则C<n,v>,应用图可达算法产生切片Begin SliceProcedure (node)//node 简记为 n,即指定节点while (η ! = Entry){//从指定结点η开始后向遍历if (n = = unmark_nodes&&n = = immediate predecessor nodes){S(v) = S(v) +n ;//按照控制和依赖关系标记它的直接前驱结点Il将标记的当前结点η包含到S (ν)中} Il直到η到达程序的入口点}End SliceProcedure ;H从路径切片中的第一个分支谓词开始分析谓词变量的相关性f0r(i = 1 ;i <np ;i++)//np为指定路径切片中的谓词变量的个数{if (Def (vp) = = NULL) // 变量 vp 是谓词变量{the path to slicing variable is feasible ;//谓词变量 vp 在之前未被定值, 切片变量是依赖于程序输入的}if (Def (vp) ! = NULL)//当前谓词变量Vp之前被定义{if(exp> = 0) //exp 是谓词表达式if (n e Def (vp)) //切片变量ν在真分支上slicing variable included ture branch ; 下面用一个实例具体分析描述上述算法的执行流程,表1中第二列表示以准则 C<(16),n, backwork〉后向遍历程序标记直接或间接相关的前驱结点,得到的路径切片,第 三列表示在上一步取得的路径切片上分析路径的可达性后得到的路径切片集合。表1实例对比分析
源程序<(16),n’backwork>可达路径分析(1) Intm;(2) Int n;(2) Int η;(2) Int η;(6) Int int_t=rand+50;(6) Int int_t=rand+50;(3) float χ;(7) lf(int_t<0){(10) If(int_t>10){(4) float y;(8) n=int_t;}(12) n=100+int—t;}(5) float ζ;(10) If(int_t>10){(14) n=int_t;(6) Int int_t=rand+50;(12) n=100+int_t;}(16) write(n);(7) lf(int_t<0){(14) n=int一t;(8) n=int_t;(16) write(n);(9) int_t=abs(int_t);}(10) If(int_t>10){(ll)m=int_t%10;(12) n=100+int_t;}(13)^x+y;(14) n=int_t;(15) write(m);(16) write(n); 对比本说明书中提到的其他可达路径选择方法,本发明提出的切片路径选择方法
8具有明显的优势,它们之间的简单对比如表2所示表2路径选择算法对比
权利要求
一种基于可达路径的软件测试方法,其特征是步骤1收集程序的基本信息,包括语句出现的变量的定义和使用信息;步骤2对每一个切片建立一个信息链表;步骤3应用图可达性算法后向遍历程序,按照控制和依赖关系标记它的直接前驱结点,将标记的当前节点n包含到S(v)中;步骤4判断是否到达程序的入口点,如果还没有到达程序的入口点则继续后向遍历程序,否则,停止遍历得到包含一组可能路径的集合即路径切片S;步骤5从路径切片S的第一个分支谓词开始分析变量的相关性,在取得的路径切片上分析路径的可达性即分析切片谓词变量表达式的取值,从切片入口点开始,按照数据依赖和控制依赖重新标记路径信息,完成对路径中分支谓词中的变量进行分析,判断谓词结点的取值,它的取值有三种可能性true,false和undef,其中true和false表示相应的谓词变量已经被定值,即始终取真或假,undef表示相应的谓词变量的取值与实际运行有关,通过对谓词变量的判断如果能够达到指定的切片变量,即该路径为可达,否则为不可达,其中可达分为始终可达是指指定点始终在分支谓词取值的分支上和输入相关可达是指它的能否达到依赖于程序的输入值,直到把路径切片中的所有谓词变量都分析完。
全文摘要
本发明提供的是一种基于可达路径的软件测试方法。1、收集程序的基本信息,包括语句出现的变量的定义和使用信息;2、对每一个切片建立一个信息链表;3、应用图可达性算法后向遍历程序,按照控制和依赖关系标记它的直接前驱结点,将标记的当前节点n包含到S(v)中;4、判断是否到达程序的入口点,如果还没有到达程序的入口点则继续后向遍历程序,否则,停止遍历得到包含一组可能路径的集合即路径切片S;5、从路径切片S的第一个分支谓词开始分析变量的相关性。本发明分两步分析选择可达路径,第一步确定路径的子集,第二步在集合中分析路径。缩小了选择的范围,容易实现覆盖的充分性。
文档编号G06F11/36GK101901188SQ20101023530
公开日2010年12月1日 申请日期2010年7月23日 优先权日2010年7月23日
发明者刘厂, 孙纪玮, 张振兴, 沈志峰, 赵玉新, 高峰 申请人:哈尔滨工程大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1