[发明专利]一种基于黑盒函数与机器学习的代码测试生成方法和装置在审
申请号: | 201810442423.7 | 申请日: | 2018-05-10 |
公开(公告)号: | CN108763064A | 公开(公告)日: | 2018-11-06 |
发明(设计)人: | 卜磊;梁永隽;段玉超;闾乐成;张秋萍;张时雨;王林章;李宣东 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 江苏银创律师事务所 32242 | 代理人: | 孙计良 |
地址: | 210001 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 覆盖 黑盒 测试 测试用例数据 方法和装置 被测程序 代码测试 符号执行 机器学习 求解 验证 代码静态分析 测试工程师 多系统资源 约束求解器 程序代码 程序分析 代码片段 代码替换 复杂结构 回归测试 目标节点 分析器 结点 打包 覆盖率 分配 分析 学习 | ||
本发明公开了一种基于黑盒函数与机器学习的代码测试生成方法和装置。本发明通过对被测程序代码静态分析,提取先前测试未覆盖的节点所对应的未覆盖路径,然后将未覆盖路径上的复杂结构的程序代码用黑盒函数打包后,采用基于学习验证的约束求解器和符号执行分析器进行验证求解,得到能够覆盖先前测试未覆盖的节点的测试用例数据,从而使得测试工程师能够利用这些测试用例数据进行回归测试从而测试覆盖先前测试未覆盖的节点。本发明将被测程序中的复杂代码替换成黑盒函数,减少了符号执行过程中对复杂代码片段的分析,将更多系统资源分配在对目标结点覆盖的求解上,从而提高了程序分析效率和目标节点的覆盖率。
技术领域
本发明涉及软件分析与测试等领域,尤其涉及测试用例自动生成。
背景技术
步入现代信息社会,计算机软件程序已深入人们的生活,支撑着现代社会发展的方方面面。为保障计算机软件的正确运行,尤其是在经济金融、航天航空等安全相关领域,对程序进行分析验证测试是十分重要的。
然而由于现实程序中往往包含复杂程序结构、复杂非线性约束等复杂程序片段,现有的代码验证测试工具对真实程序的测试覆盖度有限,不能满足对真实代码的测试验证需求。以在软件测试领域被广泛使用的符号执行为例,该技术的主要特征是使用符号化变量代替具体值作为程序输入,在程序分析过程中维护收集分支语句产生的路径约束,并通过求解器求解对应约束生成可触发程序路径的测试用例。在面对复杂真实程序时,符号执行仍面对着因循环等复杂程序结构带来的路径爆炸问题和传统求解器对非线性约束等复杂约束缺乏支持的求解困难问题,对真实代码的测试能力有限。尤其是在处理包含循环等复杂程序结构时,符号执行引擎会将大量系统资源浪费在对循环语句的分析中,阻碍了对后续程序语句的分析测试。为此,当前急需准确而又高效的方法来提高对程序的测试覆盖效率。
发明内容
本发明所要解决的问题:采用符号执行技术对具有复杂程序结构的程序进行分析时带来路径爆炸问题,并由此带来传统约束求解器无法求解复杂约束等问题。
为解决上述问题,本发明采用的方案如下:
根据本发明的一种基于黑盒函数与机器学习的代码测试生成方法,该方法包含以下步骤:
S1:获取被测程序代码和未覆盖节点;所述未覆盖节点为先前程序代码测试时未覆盖到的程序节点;
S2:通过对被测程序代码的静态分析,提取未覆盖路径;所述未覆盖路径为包含未覆盖节点的路径;
S3:静态分析所述未覆盖路径,找出其中的复杂程序代码片段;
S4:抽取所述复杂程序代码片段组成黑盒函数,并将所述未覆盖路径中的所述复杂程序代码片段替换成对所述黑盒函数的调用后,形成包含所述黑盒函数和未覆盖节点的新程序;
S5:对包含所述黑盒函数和未覆盖节点的新程序使用符号执行分析器进行分析,并通过基于学习验证的约束求解器进行求解得到能够覆盖所述未覆盖节点的测试用例数据。
进一步,根据本发明的基于黑盒函数与机器学习的代码测试生成方法,所述步骤S4中“抽取所述复杂程序代码片段组成黑盒函数”包括以下步骤:
S41:根据所述复杂程序代码片段的所处的位置生成所述黑盒函数的函数名;
S42:分析所述复杂程序代码片段中各表达式;将不在该复杂程序代码片段中定义的并且出现在所述表达式右端的变量组成所述黑盒函数的输入变量集;将出现在所述表达式左端的变量组成所述黑盒函数的输出变量集;
S43:将所述黑盒函数的输入变量集打包成所述黑盒函数的输入的结构或类,并构建相应的输入对象实例作为所述黑盒函数的输入变量或输入参数;将所述黑盒函数的输出变量集打包成所述黑盒函数的输出的结构或类,并构建相应的输出对象实例作为所述黑盒函数的输出变量或所述黑盒函数的返回值;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810442423.7/2.html,转载请声明来源钻瓜专利网。