应用于白盒路径测试的测试用例生成方法

文档序号:6611041阅读:224来源:国知局
专利名称:应用于白盒路径测试的测试用例生成方法
技术领域
本发明涉及软件测试技术,更具体地涉及一种应用于白盒路径测试的测试用例生成方法。
背景技术
现有软件测试方法按照测试用例设计来区分,分为白盒测试与黑盒测试。白盒测试也称结构测试或逻辑驱动测试,它是从程序的控制结构出发进行的测试。白盒测试使用被测单元内部如何工作的信息,允许测试人员根据程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件的。按照覆盖标准从低到高分,分别是语句覆盖、判定覆盖(也称为分支覆盖)、条件覆盖、判定/条件覆盖、条件组合覆盖、和路径覆盖。
覆盖程度最高的是路径覆盖。执行路径测试需要绘制程序流程图、计算圈复杂度、寻找基本路径集、导出测试用例、执行测试用例。在路径测试流程中寻找基本路径集是确定测试用例的关键。
现行的方法有两种一种是直接采用肉眼观察找出独立路径集的方法。该方法对于程序流程图中节点和分支比较少的情况比较有效。但存在以下问题
(1)在路径数大于10并且程序流程图比较复杂的情况下,基本路径集寻找很困难,甚至无法寻找。
(2)该方法由不同测试人员执行会产生不同基本路径集,并生成不同的测试用例集。导致对于同一段代码没有一致的测试用例集。
(3)该方法没有对存在逻辑相关代码的情况进行处理。
(4)该方法不利于进行计算机自动化。
另一种是由McCabe开发的基线法。这种方法首先选择一个基线路径,McCabe建议选择尽可能多的判断节点的路径。接下来重新回溯基线路径,依次“翻转”每个判断点。其中,当节点外度≥2时,必须取不同的边。采用基线路径方法最好从最长的路径开始,然后对该路径中的判断依次“翻转”得到新的路径。该方法存在以下问题(1)因基本路径由最长路径“翻转”得到,所以基路径集中的路径较长。从而增加了测试用例的复杂度和测试难度。
(2)McCabe路径“翻转”默认的逻辑前提是代码节点不存在相关性,但由于代码中存在逻辑依赖关系,所以路径越长,存在逻辑冲突的概率越大,从而导致基本路径不可行概率变大。
(3)在某些情况下会导致大部分基本路径不可行,而必须重新寻找独立路径集。
(4)该方法没能对路径的独立性给出一个完整判定。

发明内容
鉴于以上所述的一个或多个问题,本发明提供了一种应用于白盒路径测试的测试用例生成方法。
根据本发明的应用于白盒路径测试的测试用例生成方法,包括以下步骤S102,对代码流程图中的所有圈进行标记;S104,生成经过代码流程图中的所有圈的至少一个分支的路径组成的主路径集;S106,利用主路径集,通过加圈法生成基本路径集;以及S108,根据基本路径集中的每条基本路径的可行情况,生成测试用例。
本发明可以保证不同测试人员寻找的基本独立路径集大体一致。并且,所选择的基本独立路径集路径是最短的,从而降低了测试用例复杂度和执行难度。另外,本发明可以对路径集独立性进行判断,从而可以保证白盒测试质量。附带地,本发明为复杂代码结构下对路径的测试提供了良好的支持。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1A至图1D是根据本发明实施例的应用于白盒路径测试的测试用例生成方法及步骤的流程图;图2是利用图1所示方法生成测试用例的过程的流程图。
具体实施例方式
下面参考附图,详细说明本发明的具体实施方式

图1A是根据本发明实施例的应用于白盒路径测试的测试用例生成方法。如图1A所示,该测试用例生成方法包括以下步骤S102,对代码流程图中的所有圈进行标记。
具体地,步骤S102可以包括以下步骤(如图1B所示)S1022,绘制代码流程图,计算代码流程图圈复杂度,确定图中圈的个数。S1024,虚线连接代码流程图的入口节点和出口节点,标记出图上封闭区域。S1026,确定环绕每个封闭区域的闭合路径,其中,一条闭合路径就是一个圈。以及S1028,确定所述圈的标记边,并用所述标记边对所述圈进行标记。其中,将每个圈所特有的边确定为标记边。如果圈没有特有的边,则取与已标记圈公共的边中选取一条边作为标记边。
S104,找到至少经过上述所有圈的一个分支的主路径集,同时确定主路径集中每条路径对应的圈组合。
具体地,步骤S104可以包括以下步骤(如图1B所示)S1042,选择一条经过程序某些谓词节点的最短执行路径,并且在该执行路径未能经过所有谓词节点的情况下,继续寻找下一条最短路径,直到所选择的执行路径经过所有谓词节点,并通过所选择的执行路径组成主路径集。S1044,在代码流程图中的谓词节点存在明显相关性时,需要根据相关性来调整主路径集。然后识别主路径集中每条路径中包含的圈标记,由此获得路径的对应圈组合。由主路径与圈组合之间的对应关系,获得主路径集对应的圈组合集。
S106,利用主路径集,采用加圈法生成基本路径集。
具体地,步骤S106可以包括以下步骤(如图1C所示)S1062,在步骤S104中选择的路径数小于代码流程图的圈复杂度的情况下,选择一条主路径“扩展”,每次在路径中加入一个圈标记,其中,该圈标记对应的圈不在主路径集对应的圈组合集内,直到路径中不能加入新的圈标记。接着选择下一条主路径继续进行“扩展”,直到主路径集中所有路径扩展完毕。S1064,合并“扩展”得到的路径与主路径集,获得基本路径集,并获取基本路径集对应的基本路径圈组合集。其中,在步骤S104中选择的路径数等于代码流程图的圈复杂度的情况下,直接进行步骤S108。
S108,根据基本路径集中的每条基本路径的可行情况,生成测试用例。
具体地,步骤S108可以包括以下步骤(如图1D所示)S1082,判断所述基本路径集中的每条基本路径是否可行,如果可行,则生成所述测试用例,否则进行步骤S1084;S1084,判断所述代码流程图的所述谓词节点之间是否存在明显的节点相关性;S1086,如果存在,则根据所述节点相关性对所述基本路径集进行调整,并在经过调整后的所述基本路径集中的每条基本路径都可行的情况下,生成所述测试用例,否则判断所述基本路径集中的基本路径的相关性是否与所述节点相关性一致;以及S1088,如果一致,则生成所述测试用例,否则根据所述基本路径集中的基本路径的隐式相关性对所述基本路径进行调整,并在经过调整后的所述基本路径集中的每条基本路径都可行的情况下,生成所述测试用例。
其中,如果基本路径可以只经过一对相关节点中的一个就构成完整路径,则不去除相关节点的路径。如果存在一对相关节点的判断,并且一节点判断只有在另一个节点参与的循环完成一次后才生效,则不去除这个节点的路径。如果存在一对相关节点,则修改路径经过这两个节点,并去除多余的不可行路径。然后,建立调整后基本路径集对应的圈组合集。
其中,判断所述基本路径集中的基本路径相关性是否与所述节点相关性一致的过程包括以下步骤找到单圈只出现过一次的路径,并用该圈标记路径;找到多圈只出现过一次的路径,并用该圈组标记路径,并且该圈组中的圈为相关圈;去除已经标记的圈,获得未能分辨的圈组;走读相关代码判断未分辨圈之间的相关性,并在完全识别出圈相关性的情况下,判断识别出来的相关性是否与现有节点相关性一致,如果一致,则生成测试用例,否则路径存在隐式相关,对基本路径进行调整;在未能完全识别出圈相关性的情况下,找到路径组中与未分辨圈最密切的路径剩余圈,判断其与未分辨圈相关性,在完全识别出圈相关性的情况下,判断识别出来的相关性是否与现有节点相关性一致,如果一致,则生成测试用例,否则路径存在隐式相关,对基本路径进行调整参考图2,说明利用图1所示方法生成测试用例的过程。首先,测试人员绘制被测代码程序的流程图。如图3所示,图中共有16个节点、24条边、1个入口、0个出口。根据图论圈复杂度计算公式V(G)=(边的数量-节点数量+入口数)+出口节点数量,得出图3的圈复杂度为V(G)=24-16+1+0=9。
然后,测试人员找到图中的区域,如图3中大写字母标出所示。图3包含A-I共9个区域。找到每个区域对应的圈,为了理解方便,圈的编号与区域编号相同。
其中,区域A对应圈A(2-3,3-2);区域B对应圈B(4-5-6,4-6);区域C对应圈C(2-3-4-5-6-7-2);区域D对应圈D(2-3-4-5-6-7-8-14-16-2);区域E对应圈E(14-16,14-15-16);区域F对应圈F(8-9-12-13-8);区域G对应圈G(12-8,12-13-8);区域H对应圈H(9-10-8,9-12-8);区域I对应圈I(10-11-8,10-8)。
其中,圈A对应的标记是3-2;圈B对应的标记是4-6;圈C对应的标记是7-2;圈D对应的标记是16-2;圈E对应的标记是15-16;圈F对应的标记是13-8;圈G对应的标记是12-8;圈H对应的标记是10-8;圈I对应的标记是11-8。
找到经过所有圈的路径集和对应圈组合。对于进入循环的代码,可以将循环作为一个出口看待,所以路径4、5在节点8结束。
其中,路径1-2-3-2的对应圈组合为(A);路径1-2-3-4-6-7-2的对应圈组合为(B,C);路径1-2-3-4-6-7-8-14-16-2的对应圈组合为(B,D);路径1-2-3-4-6-7-8-9-12-8的对应圈组合为(B,G);路径1-2-3-4-6-7-8-9-10-11-8的对应圈组合为(B,I)。
由于节点4、9、14判断分支存在相关性,所以调整上述路径后得到如下基本路径对应于圈组合(A)的路径1-2-3-2;对应于圈组合(B,C)的路径1-2-3-4-6-7-2;对应于圈组合(B,D)的路径1-2-3-4-6-7-8-14-16-2;对应于圈组合(G)的路径1-2-3-4-5-6-7-8-9-12-8;以及对应于圈组合(B,I)的路径1-2-3-4-6-7-8-9-10-11-8。
节点4、9和14的判断一致,所以减少2条路径,可以减少对节点4和节点14的分支检测。但是,节点4的判断可以不通过节点9就可以找到完整路径,因此不减少节点4的分支判断。分支14的判断需循环一次以后才能判断。需要重新增加对节点14分支的测试。路径测试原则上是每个循环至少要循环一次。这样需要对路径3进行调整。并对路径进行扩展后得到路径集如下对应于圈组合(A)的路径1-2-3-2;对应于圈组合(B,C)的路径1-2-3-4-6-7-2;对应于圈组合(B,H,D)的路径1-2-3-4-6-7-8-9-10-8-14-16-2;对应于圈组合(G)的路径1-2-3-4-5-6-7-8-9-12-8;对应于圈组合(B,I)的路径1-2-3-4-6-7-8-9-10-11-8;对应于圈组合(F,E)的路径1-2-3-4-5-6-7-8-9-12-13-8-14-15-16-2;对应于圈组合(C)的路径1-2-3-4-5-6-7-2;对应于圈组合(F)的路径1-2-3-4-5-6-7-8-9-12-13-8;以及对应于圈组合(B,H)的路径1-2-3-4-6-7-8-9-10-8。依据上述路径集生成测试用例。
综上所述,本发明与以往技术不同的关键之处在于,从圈的角度去观察代码。把代码看成一组相互关联的圈,找到基本路径独立性与圈组合独立性之间对应关系。在代码流程图中对圈标记后,独立基本路径的寻找转化为圈组合的变换。在基本路径变换中保持圈组合的相对独立性就能够最终保持基本路径之间的独立性。在圈组合变换中遵循最简原则,保持圈组合元素的最少最终保证了独立基本路径的最短与最小。
本发明可以保证不同测试人员寻找的基本独立路径集大体一致。并且,所选择的基本独立路径集路径是最短的,从而降低了测试用例复杂度和执行难度。另外,本发明可以对路径集独立性进行判断,从而可以保证白盒测试质量。附带地,本发明为复杂代码结构下对路径的测试提供了良好的支持。
以上所述仅为本发明的实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
权利要求
1.一种应用于白盒路径测试的测试用例生成方法,其特征在于,包括以下步骤S102,对代码流程图中的所有圈进行标记;S104,生成经过所述代码流程图中的所有圈的至少一个分支的路径组成的主路径集;S106,利用所述主路径集,通过加圈法生成基本路径集;以及S108,根据所述基本路径集中的每条基本路径的可行情况,生成测试用例。
2.根据权利要求1所述的测试用例生成方法,其特征在于,所述步骤S102包括以下步骤S1022,创建所述代码流程图,计算所述代码流程图的圈复杂度,并根据所述圈复杂度确定所述代码流程图中的圈个数;S1024,连接所述代码流程图的入口节点和出口节点,标记出所述代码流程图中的封闭区域;S1026,确定围绕所述封闭区域的圈;以及S1028,确定所述圈的标记边,并用所述标记边对所述圈进行标记。
3.根据权利要求2所述的测试用例生成方法,其特征在于,所述步骤S104包括以下步骤S1042,选择经过所述代码流程图的所有谓词节点的主路径组成所述主路径集;以及S1044,根据所述主路径集中的每条主路径包含的圈标记,获取所述主路径集中的每条主路径对应的圈组合组成的主路径圈组合集。
4.根据权利要求3所述的测试用例生成方法,其特征在于,所述步骤S106包括以下步骤S1062,在组成所述主路径集的所述主路径的数目小于所述圈复杂度的情况下,在所述主路径集中的每条主路径中添加新圈标记,直到所述主路径中不能加入任何新圈标记为止;S1064,合并添加了新圈标记的每条主路径组成的集合与所述主路径集,组成所述基本路径集;以及S1066,根据所述基本路径集中的每条基本路径包含的圈标记,获取所述基本路径集中的每条基本路径对应的圈组合组成的基本路径圈组合集。
5.根据权利要求3所述的测试用例生成方法,其特征在于,在所述步骤S106中,在组成所述主路径集的所述主路径的数目等于所述圈复杂度的情况下,直接进行步骤S108。
6.根据权利要求4或5所述的测试用例生成方法,其特征在于,所述步骤S108包括以下步骤S1082,判断所述基本路径集中的每条基本路径是否可行,如果可行,则生成所述测试用例,否则进行步骤S1084;S1084,判断所述代码流程图的所述谓词节点之间是否存在明显的节点相关性;S1086,如果存在,则根据所述节点相关性对所述基本路径集进行调整,并在经过调整后的所述基本路径集中的每条基本路径都可行的情况下,生成所述测试用例,否则判断所述基本路径集中的基本路径的相关性是否与所述节点相关性一致;以及S1088,如果一致,则生成所述测试用例,否则根据所述基本路径集中的基本路径的隐式相关性对所述基本路径进行调整,并在经过调整后的所述基本路径集中的每条基本路径都可行的情况下,生成所述测试用例。
7.根据权利要求6所述的测试用例生成方法,其特征在于,判断所述基本路径集中的基本路径相关性是否与所述节点相关性一致的过程包括以下步骤找出所述基本路径集中的单圈只出现过一次的基本路径并进行标记;找出所述基本路径集中的多圈只出现过一次的基本路径并进行标记;以及获取所述基本路径集中的未标记基本路径之间的相关性,并判断所述未标记基本路径之间的相关性与所述节点相关性是否一致。
8.根据权利要求7所述的测试用例生成方法,其特征在于,在所述步骤S1028中,将所述圈特有的边确定为标记边。
9.根据权利要求8所述的测试用例生成方法,其特征在于,在所述步骤S1028中,在所述圈不具有特有的边的情况下,将所述圈的与已标记圈共有的边之一确定为标记边。
10.根据权利要求9所述的测试用例生成方法,其特征在于,所述新圈标记对应的圈不在所述主路径集所对应的所述主路径集圈组合集中。
全文摘要
本发明公开了一种应用于白盒路径测试的测试用例生成方法,包括以下步骤S102,对代码流程图中的所有圈进行标记;S104,生成经过代码流程图中的所有圈的至少一个分支的路径组成的主路径集;S106,利用主路径集,通过加圈法生成基本路径集;以及S108,根据基本路径集中的每条基本路径的可行情况,生成测试用例。通过本发明,可以保证不同测试人员寻找的基本独立路径集大体一致。
文档编号G06F9/44GK101075208SQ200710130469
公开日2007年11月21日 申请日期2007年7月19日 优先权日2007年7月19日
发明者金斌, 李维民, 蒋光明, 王勇 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1