[发明专利]一种程序隐性约束提取方法及系统有效
| 申请号: | 201810215371.X | 申请日: | 2018-03-15 |
| 公开(公告)号: | CN108563561B | 公开(公告)日: | 2020-06-23 |
| 发明(设计)人: | 宫云战;张明哲;王雅文;金大海 | 申请(专利权)人: | 北京邮电大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;吴欢燕 |
| 地址: | 100876 北京市*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 程序 隐性 约束 提取 方法 系统 | ||
本发明提供一种程序隐性约束提取方法及系统,包括:对于待测程序中的任一函数,将任一路径上的入口节点作为当前节点;获取当前节点与任一函数对应的抽象语法树上对应的当前语法节点,若当前语法节点包含目标变量,获取目标变量类型,根据目标变量类型和作用于目标变量的运算符类型匹配隐性约束规则,提取目标变量的隐性约束;否则,将当前节点的下一个节点重新作为当前节点,重复上述步骤,直到任一路径的出口节点为当前节点。本发明提出一种程序隐性约束提取方法及系统,可以实现隐性约束的提取,可以在一定程度上减小目标变量的搜索空间,保证生成测试数据的正确性,进而确保后续测试数据顺利执行。
技术领域
本发明涉及软件测试技术领域,更具体地,涉及一种程序隐性约束提取方法及系统。
背景技术
在面向路径的测试数据自动生成方法中,约束系统的建立和求解是其中的关键问题。约束系统的建立需要对程序进行静态分析,获取各程序点处的程序语义,将代码抽象和近似成由目标变量组成的形式化断言集合,这些形式化断言集合即限制目标变量取值的约束。通过使用约束求解算法对这些约束进行求解,可以获得满足当前路径约束的测试数据。
在上述过程中,如何建立一个能准确反映程序语义且可解的约束系统是实现测试数据生成的前提。为了建立一个这样的约束系统,不仅要对包括复杂数据类型在内的非线性操作进行建模以获取可解的约束;还要尽可能的挖掘程序中各种操作的语义,建立相应约束,缩小后续求解空间。
基于此,提出了程序隐性约束的概念,通过分析各种操作固有语义以外的语义信息,提取程序的隐性约束,增强了约束的完备性,为后续的约束求解及测试数据执行提供了方便。
程序隐性约束的提取不仅可以在一定程度上缩小目标变量的搜索空间,更有利于生成满足路径覆盖要求的测试数据,主要包括以下几个方面:
1、隐性约束基于程序语义推导产生,是程序固有语义对目标变量产生的约束的加强,使目标变量的搜索空间进一步减小,提高了测试数据生成效率。
2、隐性约束确保生成测试数据的正确性,保证了目标变量相应操作能正确、合法的沿当前路径执行。
3、隐性约束的添加使测试数据能够顺利执行,保证了基于路径的覆盖测试流程的正确进行,使每次执行都能得到相应的路径覆盖率,间接的提高了测试覆盖率和测试效率。
因此,寻找一种高效的程序隐性约束提取方法是十分必要的。
发明内容
本发明提供一种克服上述问题或者至少部分地解决上述问题的一种程序隐性约束提取方法及系统。
根据本发明的一个方面,提供一种程序隐性约束提取方法,包括:
S1,对应待测程序中的任一函数,获取所述任一函数对应的控制流图的入口节点到出口节点的任一路径,将所述任一路径上的入口节点作为当前节点;
S2,获取所述当前节点与所述任一函数对应的抽象语法树上对应的当前语法节点;根据所述当前语法节点的类型,判断是否进行进一步遍历,若所述当前语法节点对应赋值语句或分支语句,则对当前语法节点进行遍历访问;根据所述当前语法节点的类型,遍历访问当前语法节点并判断所述当前语法节点是否包含目标变量;若所述当前语法节点包含所述目标变量,获取所述目标变量和作用于所述目标变量的运算符,根据所述目标变量类型和作用于所述目标变量的运算符类型,匹配对应的预设隐性约束规则,根据确定的预设隐性约束规则提取所述目标变量的隐性约束,所述目标变量为所述待测程序的输入变量或所述待测程序的全局变量;
否则,将所述当前节点的下一个节点重新作为所述当前节点,重复上述步骤,直到所述任一路径的出口节点为当前节点。
根据本发明的另一个方面,提供一种程序隐性约束提取系统,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京邮电大学,未经北京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810215371.X/2.html,转载请声明来源钻瓜专利网。





