代码测试方法及系统

文档序号:36958271发布日期:2024-02-07 13:01阅读:15来源:国知局
代码测试方法及系统

本申请涉及软件分析,尤其涉及一种代码测试方法及系统。


背景技术:

1、符号执行是一种重要的形式化方法和软件分析技术。通过使用符号执行,将程序中变量的值表示为符号值和常量组成的计算表达式,并随着程序后续代码对变量的修改将输出表示为输入符号值的函数。在遇到分支时,将分支条件加入路径约束,并最终约束求解,从而得到执行路径对应的输入。混合符号执行(concolic执行)是一种动态符号执行,其需要具体的输入,并让符号执行随着输入对应的执行路径进行。

2、混合符号执行会受到隐式流的阻碍。当程序中的输入能够影响控制流,而控制流的变化进一步改变了一些变量的值时,这些变量与输入之间存在隐式流,这些变量被称为隐式流变量。在混合符号执行时,随着前期执行路径的确定,隐式流变量的范围缩小,可能导致相关路径约束无法被求解,并进一步导致代码覆盖度的降低。因此,需要对这种情况处理。


技术实现思路

1、本申请提供一种代码测试方法及系统,可以探索更多代码分支路径,提高代码覆盖度。

2、第一方面,本申请实施例提供一种代码测试方法,包括:

3、获取目标隐式流变量;所述目标隐式流变量为合并符号执行状态后的隐式流变量;

4、基于所述目标隐式流变量进行约束求解确定隐式流入口点的输入值;

5、基于所述输入值测试所述输入值对应的代码分支。

6、在一个实施例中,所述获取目标隐式流变量之前,还包括:

7、基于污点分析方法获取初始隐式流变量;所述初始隐式流变量为未合并符号执行状态的隐式流变量。

8、在一个实施例中,所述获取目标隐式流变量,包括:

9、基于符号执行从所述隐式流入口点执行各个代码分支,在隐式流结束点将各个代码分支执行状态进行状态合并,得到所述目标隐式流变量。

10、在一个实施例中,所述基于所述目标隐式流变量进行约束求解确定隐式流入口点的输入值,包括:

11、基于所述目标隐式流变量确定第一路径约束;

12、基于所述第一路径约束进行约束求解确定隐式流入口点的所述输入值。

13、在一个实施例中,所述基于所述目标隐式流变量确定第一路径约束,包括:

14、基于对所述初始隐式流变量进行符号分配得到第二路径约束;

15、基于所述目标隐式流变量和所述第二路径约束确定所述第一路径约束。

16、在一个实施例中,所述基于对所述初始隐式流变量进行符号分配得到第二路径约束,包括:

17、基于对所述初始隐式流变量进行所述符号分配得到符号值;

18、基于所述符号值确定第二路径约束。

19、第二方面,本申请实施例提供一种代码测试系统,包括:

20、获取模块,用于获取目标隐式流变量;所述目标隐式流变量为合并符号执行状态后的隐式流变量;

21、计算模块,用于基于所述目标隐式流变量进行约束求解确定隐式流入口点的输入值;

22、测试模块,用于基于所述输入值测试所述输入值对应的代码分支。

23、在一个实施例中,所述获取模块还用于:

24、基于污点分析方法获取初始隐式流变量;所述初始隐式流变量为未合并符号执行状态的隐式流变量。

25、第三方面,本申请还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的方法。

26、第四方面,本申请还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述的方法。

27、本申请实施例提供的代码测试方法及系统,通过确定目标隐式流变量,基于目标隐式流变量进行约束求解得到所需输入值,基于该输入值可以探索对应代码分支,从而可以达到对该代码分支进行测试的目的。而且该方法可以解决由于隐式流变量存在导致的相关路径约束无法被求解的问题,结合符号执行的方式可以探索更多的代码分支,从而能够提高代码的覆盖度。



技术特征:

1.一种代码测试方法,其特征在于,包括:

2.根据权利要求1所述的代码测试方法,其特征在于,所述获取目标隐式流变量之前,还包括:

3.根据权利要求2所述的代码测试方法,其特征在于,所述获取目标隐式流变量,包括:

4.根据权利要求2所述的代码测试方法,其特征在于,所述基于所述目标隐式流变量进行约束求解确定隐式流入口点的输入值,包括:

5.根据权利要求4所述的代码测试方法,其特征在于,所述基于所述目标隐式流变量确定第一路径约束,包括:

6.根据权利要求5所述的代码测试方法,其特征在于,所述基于对所述初始隐式流变量进行符号分配得到第二路径约束,包括:

7.一种代码测试系统,其特征在于,包括:

8.根据权利要求7所述的代码测试系统,其特征在于,所述获取模块还用于:

9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述代码测试方法。

10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述代码测试方法。


技术总结
本申请提供一种代码测试方法及系统,涉及软件分析技术领域。所述方法包括:获取目标隐式流变量;所述目标隐式流变量为合并符号执行状态后的隐式流变量;基于所述目标隐式流变量进行约束求解确定隐式流入口点的输入值;基于所述输入值测试所述输入值对应的代码分支。本申请实施例提供的代码测试方法及系统,可以探索更多代码分支路径,提高代码覆盖度。

技术研发人员:朱红松,曾怡诚,宋站威,李志,于楠,孙利民
受保护的技术使用者:中国科学院信息工程研究所
技术研发日:
技术公布日:2024/2/6
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1