一种映射关系制导的循环代码模糊测试方法技术

技术编号:35582664 阅读:15 留言:0更新日期:2022-11-12 16:14
本发明专利技术公开了一种映射关系制导的循环代码模糊测试方法,应用于软件测试领域,包括:将测试用例不断变异,输入到测试用例队列,发送至经插桩循环代码结构得到的被测程序运行,当满足模糊测试终止条件时输出覆盖情况统计表;训练深度学习模型并反向计算权重距离和,构建并输出测试用例的字节序列与循环代码结构覆盖情况之间的映射关系;基于映射关系,对与循环代码结构覆盖情况对应的测试用例中的相应字节序列分配变异概率并进行变异,生成子代测试用例,并将其作为被测程序的输入,进行模糊测试,直到满足模糊测试终止条件,输出模糊测试报告。本方法基于映射关系对测试用例字节序列进行变异,能够针对性地生成提高循环代码结果覆盖率的测试用例。果覆盖率的测试用例。果覆盖率的测试用例。

【技术实现步骤摘要】
一种映射关系制导的循环代码模糊测试方法


[0001]本专利技术涉及软件测试领域,特别涉及一种映射关系制导的循环代码模糊测试方法。

技术介绍

[0002]工业软件随着自身的演化与迭代,导致软件规模不断扩大,软件中存在的缺陷也随之增多。软件缺陷是在软件编码实现过程中引入的错误,这些软件缺陷可能会导致软件非正常运行,甚至造成经济损失或危及生命安全。
[0003]软件测试是能够减少软件缺陷的有效手段,根据是否运行被测软件可分为静态分析和动态测试两种类型。静态分析指分析代码的控制流、数据流等信息判断是否存在软件缺陷。动态分析指运行被测程序,并观察运行情况和运行结果判断是否存在软件缺陷。
[0004]模糊测试是动态分析中的一种,模糊测试的主要思想是产生大量有效或部分有效的输入作为测试用例,发送给被测程序使其执行,通过监控被测软件的执行情况,收集测试对象(如函数、基本块、循环代码或其他代码结构等)的覆盖情况,发现如程序崩溃、违反断言等现象,从而判断是否存在软件缺陷。
[0005]模糊测试技术的核心在于测试用例的质量,高质量的测试用例能够覆盖更多的软件代码,从而更全面地对软件代码进行分析和测试。现有的模糊测试技术中,AFL等覆盖率制导的模糊测试工具使用遗传算法作为测试用例的保留策略,将能够覆盖到更多代码的测试用例保留,然后使用字节级操作(如位反转等)对被保留的测试用例进行变异,从而生成能够提高代码覆盖率的测试用例。
[0006]然而,AFL等覆盖制导的模糊测试工具没有充分利用程序中的控制流等语义信息,盲目地生成测试输入,可能会产生大量无效测试用例,导致测试效率较低,并且该类方法难以有针对性地对代码进行覆盖和分析,不能有效地检测软件代码中含有的软件缺陷。AFLGo等目标制导的模糊测试工具将特定基本块作为目标,通过保留与目标基本块距离较近的种子从而生成能够接近目标基本块的测试用例,但检测效率较低,并且无法确定基本块的覆盖情况与测试用例之间的关联关系。
[0007]循环代码结构是软件基本结构之一,能够重复执行循环体内的语句直到满足循环终止条件。相较于其他基本结构,循环代码结构中出现缺陷所引发的影响更大,且由于循环次数无法确定、循环体内部语句的执行间接影响循环终止条件等问题,现有的模糊测试方法难以有针对性地对循环代码结构进行充分测试。
[0008]为此,如何提供一种能够根据循环代码结构的覆盖情况对测试用例进行针对性变异,从而提高测试准确性以及测试效率的映射关系制导的循环代码模糊测试方法是本领域技术人员亟需解决的问题。

技术实现思路

[0009]有鉴于此,本专利技术提出了一种映射关系制导的循环代码模糊测试方法。本方法通
过输入测试用例,运行经过插桩循环代码结构的被测程序,判断测试用例是否满足模糊测试终止条件,若满足,则输出覆盖情况统计表;若不满足,则对测试用例进行变异,生成子代测试用例,以满足模糊测试终止条件;基于输出的覆盖情况统计表,训练深度学习模型并反向计算权重距离和,构建并输出测试用例的字节序列与循环代码结构覆盖情况之间的映射关系;基于映射关系,对与循环代码结构覆盖情况对应的测试用例中的相应字节序列进行针对性变异,生成下一子代测试用例;将下一子代测试用例作为被测程序的输入,进行模糊测试,直到满足模糊测试终止条件,输出模糊测试报告。本专利技术基于映射关系对测试用例字节序列进行变异,能够更有针对性地生成高质量的测试用例,不仅提高了测试用例对循环代码结构的覆盖次数,对被测项目中的循环代码结构进行了更充分地测试,提高了测试准确性,还因减少了盲目地生成测试用例输入,避免了大量无效测试用例,提高了测试效率。
[0010]为了实现上述目的,本专利技术采用如下技术方案:
[0011]一种映射关系制导的循环代码模糊测试方法,包括:
[0012]S1:输入被测项目,插桩循环代码结构,编译并输出被测程序;
[0013]S2:输入初始测试用例并进行变异,将变异后的测试用例加入到测试用例队列,发送到被测程序运行,判断测试用例队列是否满足模糊测试终止条件,若满足,则输出覆盖情况统计表;若不满足,则对测试用例队列中的测试用例进行变异,生成子代测试用例,以满足模糊测试终止条件;
[0014]S3:输入覆盖情况统计表,训练深度学习模型并反向计算权重距离和,构建并输出测试用例的字节序列与循环代码结构覆盖情况之间的映射关系;
[0015]S4:基于映射关系,对与循环代码结构覆盖情况对应的测试用例中的相应字节序列进行变异,生成子代测试用例;
[0016]S5:将S4子代测试用例作为S2被测程序的输入,进行模糊测试,直到满足模糊测试终止条件,输出模糊测试报告。
[0017]可选的,S1具体为:
[0018]S1

1:输入被测项目;
[0019]S1

2:读取并遍历被测项目的测试对象序列,判断该测试对象Object
i
是否为循环代码结构,若是,则执行步骤S1

3;否则执行步骤S1

4;
[0020]S1

3:对测试对象Object
i
执行插桩,插桩完成后执行步骤S1

4;
[0021]S1

4:判断测试对象序列是否全部遍历,若全部遍历则执行S1

5,否则执行S1

2;
[0022]S1

5:将插桩后的被测项目编译为被测程序;
[0023]S1

6:输出被测程序。
[0024]可选的,S2具体为:
[0025]S2

1:输入初始测试用例和被测程序,将初始测试用例加入到测试用例队列中;
[0026]S2

2:判断是否满足模糊测试终止条件,若尚未满足终止条件则执行步骤S2

3,否则执行S2

13;
[0027]S2

3:将测试用例队列中的测试用例进行变异,将生成的子代测试用例加入到测试用例队列中;
[0028]S2

4:从测试用例队列中依次读取队列中的子代测试用例,将子代测试用例发送至被测程序,作为被测程序的输入,直到测试用例队列为空;
[0029]S2

5:运行被测程序并收集每条子代测试用例的覆盖情况;
[0030]S2

6:遍历子代测试用例,若子代测试用例尚未被完全遍历则执行S2

7,否则执行S2

2;
[0031]S2

7:读取测试用例队列Te中的第i个子代测试用例t
i
,以及子代测试用例t
i
对应的覆盖情况;
[0032]S2

8:判断子代测试用例t<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种映射关系制导的循环代码模糊测试方法,其特征在于,包括:S1:输入被测项目,插桩循环代码结构,编译并输出被测程序;S2:输入初始测试用例并进行变异,将变异后的测试用例加入到测试用例队列,发送到所述被测程序运行,判断所述测试用例队列是否满足模糊测试终止条件,若满足,则输出覆盖情况统计表;若不满足,则对所述测试用例队列中的测试用例进行变异,生成子代测试用例,以满足所述模糊测试终止条件;S3:输入所述覆盖情况统计表,训练深度学习模型并反向计算权重距离和,构建并输出所述测试用例的字节序列与循环代码结构覆盖情况之间的映射关系;S4:基于所述映射关系,对与所述循环代码结构覆盖情况对应的所述测试用例中的相应字节序列进行变异,生成子代测试用例;S5:将S4所述子代测试用例作为所述S2被测程序的输入,进行模糊测试,直到满足所述模糊测试终止条件,输出模糊测试报告。2.根据权利要求1所述的一种映射关系制导的循环代码模糊测试方法,其特征在于,S1具体为:S1

1:输入所述被测项目;S1

2:读取并遍历所述被测项目的测试对象序列,判断该测试对象Object
i
是否为循环代码结构,若是,则执行步骤S1

3;否则执行步骤S1

4;S1

3:对所述测试对象Object
i
执行插桩,插桩完成后执行步骤S1

4;S1

4:判断测试对象序列是否全部遍历,若全部遍历则执行S1

5,否则执行S1

2;S1

5:将插桩后的被测项目编译为被测程序;S1

6:输出所述被测程序。3.根据权利要求1所述的一种映射关系制导的循环代码模糊测试方法,其特征在于,S2具体为:S2

1:输入所述初始测试用例和所述被测程序,将初始测试用例加入到测试用例队列中;S2

2:判断是否满足所述模糊测试终止条件,若尚未满足所述终止条件则执行步骤S2

3,否则执行S2

13;S2

3:将所述测试用例队列中的测试用例进行变异,将生成的子代测试用例加入到测试用例队列中;S2

4:从所述测试用例队列中依次读取队列中的子代测试用例,将子代测试用例发送至所述被测程序,作为所述被测程序的输入,直到所述测试用例队列为空;S2

5:运行所述被测程序并收集每条所述子代测试用例的覆盖情况;S2

6:遍历所述子代测试用例,若所述子代测试用例尚未被完全遍历则执行S2

7,否则执行S2

2;S2

7:读取所述测试用例队列Te中的第i个子代测试用例t
i
,以及所述子代测试用例t
i
对应的覆盖情况;S2

8:判断所述子代测试用例t
i
是否触发崩溃,若触发崩溃则执行步骤S2

10,否则执行S2

9;S2

9:判断所述子代测试用例t
i
是否覆盖到更多循环代码结构,若覆盖到更多循环代码
则执行S2

11,否则执行S2

5;S2

10:将所述子代测试用例t
i
保存到本地;S2

11:将所述子代测试用例t
i
加入到测试用例队列;S2

12:将所述子代测试用例以及对应的覆盖情况保存到覆盖情况统计表中;执行S2

6;S2

13:输出覆盖情况统计表。4.根据权利要求1所述的一种映射关系制导的循环代码模糊测试方法,其特征在于,S3具体为:S3

1:输入由测试用例集Te=(t1,t2,

,t
n
)
T
和测试用例的覆盖情况集S=(s1,s2,

,s
n
)
T
组成的所述覆盖情况统计表;其中,n为所述测试用例数量,Te中的元素为所述测试用例,S中的元素为所述测试用例的覆盖情况;S3

2:将所述测试用例集Te和所述测试用例的覆盖情况集S转化为深度学习模型可以识别的训练数据;t
i
为第i个测试用例,将所述测试用例集Te=(t1,t2,

,t
n
)
T
中的测试用例t
i
进行二进制转化,选择前k个二进制字节作为所述测试用例t
i
的二进制字节序列,t
i
=(x
i,1
,x
i,2
...

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

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

1