一种基于组合覆盖的循环代码模糊测试方法技术

技术编号:35582961 阅读:25 留言:0更新日期:2022-11-12 16:15
本发明专利技术公开了一种基于组合覆盖的循环代码模糊测试方法,涉及软件测试技术领域,首先对待测试程序进行插桩,执行初始种子测试用例并计算其覆盖情况,将未触发崩溃的初始种子测试用例加入测试用例队列;然后从测试用例队列中逐个取出种子测试用例t

【技术实现步骤摘要】
一种基于组合覆盖的循环代码模糊测试方法


[0001]本专利技术涉及软件测试
,更具体的说是涉及一种基于组合覆盖的循环代码模糊测试方法。

技术介绍

[0002]随着计算机软件应用的越来越广泛,与此同时,软件的规模和复杂程度随着其功能的强大而剧增,在这些大规模的软件中,循环代码块及其中的判定分支语句是构成函数的重要基础逻辑模块,也是引起软件复杂度上升、测试路径爆炸的主要原因。如果能够全面地对复杂软件的循环代码块及其中的判定分支语句进行充分测试,不仅能合理分配有限的资金和人力等测试资源,有针对性地对容易出错的部分进行分析,还可以更加客观地评价测试结果,对软件质量、开发成本控制都有着重要的指导意义。现有的白盒测试充分性度量有路径覆盖、语句覆盖、分支覆盖、和基本路径覆盖等。对于循环代码,难以使用已有的覆盖指标对测试充分性进行度量。路径覆盖指标关注循环上下边界范围内所有可能的循环路径,在复杂软件中进行穷举测试显然不可行;语句覆盖、分支覆盖和基本路径覆盖关注覆盖所有的语句、分支和基本路径,对循环代码而言又不够充分。而且,上述覆盖指标主要基于软件内部代码逻辑结构,需要持续跟踪测试数据集在整个软件中的执行情况,对于复杂软件而言,这无疑将产生巨大的开销。此外,上述结构覆盖率对测试复杂软件中关键循环代码块缺乏针对性。
[0003]因此,如何对循环代码块及其中的判定分支语句进行有针对性的模糊测试,以提高测试的充分性,是本领域技术人员亟需解决的问题。

技术实现思路

[0004]有鉴于此,本专利技术设计面向复杂软件循环代码块的组合覆盖测试充分性评价准则,对循环代码块及其中的判定分支语句进行有针对性的模糊测试,从组合覆盖角度来评价循环代码的测试充分性。首先,根据组合覆盖准则的需要对待测试程序进行插桩;然后,筛选初始测试用例插入测试用例队列,并根据所提出的覆盖准则计算测试用例的适应度;最后,变异生成子代测试用例并进行模糊测试。
[0005]具体的,为了实现上述目的,本专利技术提供如下技术方案:
[0006]一种基于组合覆盖的循环代码模糊测试方法,包括以下步骤:
[0007]步骤1、根据循环代码组合覆盖准则对待测试程序进行插桩,得到插桩后的待测试程序;
[0008]步骤2、获取初始种子测试用例集合T
ini
,并将其中的初始种子测试用例在已插桩的被测程序上执行并计算其覆盖率,将未触发崩溃的初始种子测试用例加入测试用例队列T
list

[0009]步骤3、从测试用例队列T
list
中取出一个种子测试用例t
i
,计算其适应度并为其分配对应资源以变异生成子代测试用例集合
[0010]步骤4、将子代测试用例集合中的每个子代测试用例在已插桩的被测程序上执行并计算其覆盖率,根据子代测试用例对循环代码块及其中判定分支语句的覆盖情况,决定是否将其插入测试用例队列T
list
中;
[0011]步骤5、判断是否满足模糊测试停止条件,若是,则结束测试,若否,则返回步骤3。
[0012]可选的,所述步骤1中,对待测试程序进行插桩的具体步骤为:
[0013]步骤1.1、输入待测试程序;
[0014]步骤1.2、对待测试程序进行预处理;
[0015]步骤1.3、生成待测试程序源代码对应的抽象语法树;
[0016]步骤1.4、根据所述抽象语法树,得到待测试程序中的循环代码块及其中的判定分支语句;
[0017]步骤1.5、基于待测试程序中的循环代码块及其中判定分支语句的位置和循环代码组合覆盖准则,使用静态插桩技术进行插桩,植入探针代码;
[0018]步骤1.6、输出插桩后的待测试程序。
[0019]可选的,所述步骤1.5中,插桩过程中探针的位置被设置在循环代码块及其中判定分支语句的开始,即循环代码块及其中的判定分支语句后的第一条语句前。
[0020]可选的,所述步骤1.5中,循环代码组合覆盖准则的方法为:代码块L的循环代码块集合为R={R1,R2,

,R
k


},R
k
表示深度为k的所有循环代码块集合,R
k
={r
k,1
,r
k,2


,r
k,v


},其中r
k,v
为深度为k的第v个循环代码块,B
k,v
={b
k,v,1
,b
k,v,2


,b
k,v,u


}为循环代码块r
k,v
中的判定分支语句集合,其中b
k,v,u
为深度为k的第v个循环代码块中的第u个判定分支语句;
[0021]对于测试用例t
i
:测试用例t
i
执行代码块L的覆盖情况记录为执行代码块L的覆盖情况记录为其中为第k层循环代码块的覆盖情况,的值为深度为k的第v个循环代码块被测试用例t
i
执行的次数,执行的次数,为循环代码块r
k,v
中判定分支语句的覆盖情况,其中表示深度为k的第v个循环代码块中的第u个判定分支语句是否被测试用例t
i
覆盖,若覆盖则值为1,若未覆盖则值为0。
[0022]可选的,所述步骤2的具体步骤为:
[0023]步骤2.1、输入初始种子测试用例集合T
ini

[0024]步骤2.2、从初始种子测试用例集合T
ini
中选取一个初始种子测试用例t
i

[0025]步骤2.3、在插桩后的待测试程序上执行所述初始种子测试用例t
i
,并记录所述初始种子测试用例t
i
的覆盖情况;
[0026]步骤2.4、判断所述初始种子测试用例t
i
的崩溃情况,若所述初始种子测试用例t
i
导致插桩后的待测试程序发生崩溃,则将所述初始种子测试用例t
i
加入崩溃测试用例集合T
e
;若所述初始种子测试用例t
i
未导致插桩后的待测试程序发生崩溃,则计算所述初始种子测试用例t
i
的循环代码块覆盖情况;
[0027]步骤2.5、重复步骤2.2至步骤2.4,直至遍历完初始种子测试用例集合T
ini
中的所有初始种子测试用例,将未导致插桩后的待测试程序发生崩溃的初始种子测试用例插入到测试用例队列T
list
中;
[0028]步骤2.6、输出测试用例队列T
list

[0029]可选的,所述步骤3的具体步骤为:
[0030]步骤3.1、从测试用例队列T
li本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于组合覆盖的循环代码模糊测试方法,其特征在于,包括以下步骤:步骤1、根据循环代码组合覆盖准则对待测试程序进行插桩,得到插桩后的待测试程序;步骤2、获取初始种子测试用例集合T
ini
,并将其中的初始种子测试用例在已插桩的被测程序上执行并计算其覆盖率,将未触发崩溃的初始种子测试用例加入测试用例队列T
list
;步骤3、从测试用例队列T
list
中取出一个种子测试用例t
i
,计算其适应度并为其分配对应资源以变异生成子代测试用例集合步骤4、将子代测试用例集合中的每个子代测试用例在已插桩的被测程序上执行并计算其覆盖率,根据子代测试用例对循环代码块及其中判定分支语句的覆盖情况,决定是否将其插入测试用例队列T
list
中;步骤5、判断是否满足模糊测试停止条件,若是,则结束测试,若否,则返回步骤3。2.根据权利要求1所述的一种基于组合覆盖的循环代码模糊测试方法,其特征在于,所述步骤1中,对待测试程序进行插桩的具体步骤为:步骤1.1、输入待测试程序;步骤1.2、对待测试程序进行预处理;步骤1.3、生成待测试程序源代码对应的抽象语法树;步骤1.4、根据所述抽象语法树,得到待测试程序中的循环代码块及其中的判定分支语句;步骤1.5、基于待测试程序中的循环代码块及其中判定分支语句的位置和循环代码组合覆盖准则,使用静态插桩技术进行插桩,植入探针代码;步骤1.6、输出插桩后的待测试程序。3.根据权利要求2所述的一种基于组合覆盖的循环代码模糊测试方法,其特征在于,所述步骤1.5中,插桩过程中探针的位置被设置在循环代码块及其中判定分支语句的开始,即循环代码块及其中的判定分支语句后的第一条语句前。4.根据权利要求2所述的一种基于组合覆盖的循环代码模糊测试方法,其特征在于,所述步骤1.5中,循环代码组合覆盖准则的方法为:代码块L的循环代码块集合为R={R1,R2,

,R
k
,

},R
k
表示深度为k的所有循环代码块集合,R
k
={r
k,1
,r
k,2
,

,r
k,v
,

},其中r
k,v
为深度为k的第v个循环代码块,B
k,v
={b
k,v,1
,b
k,v,2
,

,b
k,v,u
,

}为循环代码块r
k,v
中的判定分支语句集合,其中b
k,v,u
为深度为k的第v个循环代码块中的第u个判定分支语句;对于测试用例t
i
:测试用例t
i
执行代码块L的覆盖情况记录为执行代码块L的覆盖情况记录为其中为第k层循环代码块的覆盖情况,的值为深度为k的第v个循环代码块被测试用例t
i
执行的次数,执行的次数,为循环代码块r
k,v
中判定分支语句的覆盖情况,其中表示深度为k的第v个循环代码块中的第u个判定分支语句是否被测试用例t
i
覆盖,若覆盖则值为1,若未覆盖则值为0。5.根据权利要求1所述的一种基于组合覆盖的循环代码模糊测试方法,其特征在于,所
述步骤2的具体步骤为:步骤2.1、输入初始种子测试用例集合T
ini
;步骤2.2、从初始种子测试用例集合T
ini
中选取一个初始种子测试用例t
i
;步骤2.3、在插桩后的待测试程序上执行所述初始种子测试用例t
i
,并记录所述初始种子测试用例t
i
的覆盖情况;步骤2.4、判断所述初始种子测试用例t
i
的崩溃情况,若所述初始种子测试用例t
i
导致插桩后的待测试程序发生崩溃,则将所述初始种子测试用例t
i
加入崩溃测试用例集合T
e
;若所述初始种子测试用例t...

【专利技术属性】
技术研发人员:崔展齐金昊宸郑丽伟
申请(专利权)人:北京信息科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1