-
公开(公告)号:CN108763064A
公开(公告)日:2018-11-06
申请号:CN201810442423.7
申请日:2018-05-10
Applicant: 南京大学
IPC: G06F11/36
Abstract: 本发明公开了一种基于黑盒函数与机器学习的代码测试生成方法和装置。本发明通过对被测程序代码静态分析,提取先前测试未覆盖的节点所对应的未覆盖路径,然后将未覆盖路径上的复杂结构的程序代码用黑盒函数打包后,采用基于学习验证的约束求解器和符号执行分析器进行验证求解,得到能够覆盖先前测试未覆盖的节点的测试用例数据,从而使得测试工程师能够利用这些测试用例数据进行回归测试从而测试覆盖先前测试未覆盖的节点。本发明将被测程序中的复杂代码替换成黑盒函数,减少了符号执行过程中对复杂代码片段的分析,将更多系统资源分配在对目标结点覆盖的求解上,从而提高了程序分析效率和目标节点的覆盖率。
-
公开(公告)号:CN111444112B
公开(公告)日:2023-12-12
申请号:CN202010344638.2
申请日:2020-04-27
Applicant: 南京大学
Abstract: 本发明公开了一种基于共享不可行路径池的代码并行验证方法和装置。该方法分为初始化过程、找出潜在路径过程和对潜在路径分析过程。在初始化过程中,输入的源程序和验证目标被构建成相应的SAT约束编码G。然后通过对不可行路径池中路径和SAT约束编码G的SAT求解,得到其SAT解对应的路径作为潜在路径存入并行任务池。再以多线程并行方式对并行任务池各个潜在路径进行SMT求解,若SMT无解,则抽取不可满足的最小集合X对应的不可行程序路径片段加入至不可行路径池。由此通过迭代,最终得到验证目标是否可达。为提高验证效率,本发明还增加了对不可行路径剪枝步骤。相比于现有技术,本发明大大提高代码验证效率。
-
公开(公告)号:CN108763064B
公开(公告)日:2020-07-07
申请号:CN201810442423.7
申请日:2018-05-10
Applicant: 南京大学
IPC: G06F11/36
Abstract: 本发明公开了一种基于黑盒函数与机器学习的代码测试生成方法和装置。本发明通过对被测程序代码静态分析,提取先前测试未覆盖的节点所对应的未覆盖路径,然后将未覆盖路径上的复杂结构的程序代码用黑盒函数打包后,采用基于学习验证的约束求解器和符号执行分析器进行验证求解,得到能够覆盖先前测试未覆盖的节点的测试用例数据,从而使得测试工程师能够利用这些测试用例数据进行回归测试从而测试覆盖先前测试未覆盖的节点。本发明将被测程序中的复杂代码替换成黑盒函数,减少了符号执行过程中对复杂代码片段的分析,将更多系统资源分配在对目标结点覆盖的求解上,从而提高了程序分析效率和目标节点的覆盖率。
-
公开(公告)号:CN107180193B
公开(公告)日:2020-03-27
申请号:CN201710480725.9
申请日:2017-06-22
Applicant: 南京大学
IPC: G06F21/56
Abstract: 本发明公开了一种将程序代码转换成数据约束的方法和装置。该方法首先将程序代码转换成中间指令集,然后将中间指令集进行细化拆分,细化拆分时将原变量定义指令中涉及的复杂类型的变量细化拆分成多个简单类型的变量,然后将简单类型的变量再进一步细化成简单类型的地址指针变量和简单类型的指针指向变量,最后再将相应的变量定义指令细化拆分成针对简单类型的地址指针变量和简单类型的指针指向变量的内存分配指令和初始化数据存储指令,然后提取细化拆分后的中间指令集中的存取指令、算术指令和比较指令作为数据约束。
-
公开(公告)号:CN111444112A
公开(公告)日:2020-07-24
申请号:CN202010344638.2
申请日:2020-04-27
Applicant: 南京大学
Abstract: 本发明公开了一种基于共享不可行路径池的代码并行验证方法和装置。该方法分为初始化过程、找出潜在路径过程和对潜在路径分析过程。在初始化过程中,输入的源程序和验证目标被构建成相应的SAT约束编码G。然后通过对不可行路径池中路径和SAT约束编码G的SAT求解,得到其SAT解对应的路径作为潜在路径存入并行任务池。再以多线程并行方式对并行任务池各个潜在路径进行SMT求解,若SMT无解,则抽取不可满足的最小集合X对应的不可行程序路径片段加入至不可行路径池。由此通过迭代,最终得到验证目标是否可达。为提高验证效率,本发明还增加了对不可行路径剪枝步骤。相比于现有技术,本发明大大提高代码验证效率。
-
公开(公告)号:CN107180193A
公开(公告)日:2017-09-19
申请号:CN201710480725.9
申请日:2017-06-22
Applicant: 南京大学
IPC: G06F21/56
Abstract: 本发明公开了一种将程序代码转换成数据约束的方法和装置。该方法首先将程序代码转换成中间指令集,然后将中间指令集进行细化拆分,细化拆分时将原变量定义指令中涉及的复杂类型的变量细化拆分成多个简单类型的变量,然后将简单类型的变量再进一步细化成简单类型的地址指针变量和简单类型的指针指向变量,最后再将相应的变量定义指令细化拆分成针对简单类型的地址指针变量和简单类型的指针指向变量的内存分配指令和初始化数据存储指令,然后提取细化拆分后的中间指令集中的存取指令、算术指令和比较指令作为数据约束。
-
-
-
-
-