[发明专利]一种基于约束求解的代码搜索方法在审
申请号: | 201711405834.0 | 申请日: | 2017-12-22 |
公开(公告)号: | CN107992324A | 公开(公告)日: | 2018-05-04 |
发明(设计)人: | 张天;吴少博;潘敏学;姜人和 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F8/70 | 分类号: | G06F8/70;G06F8/40 |
代理公司: | 南京知识律师事务所32207 | 代理人: | 张苏沛 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 约束 求解 代码 搜索 方法 | ||
1.一种基于约束求解的代码搜索方法,其特征在于,包括如下步骤:
步骤一、从开源社区中获取开源项目;
步骤二、使用JPF和JDT分析源代码,将其转化为SSA格式;
步骤三、使用JDT分析SSA格式的代码,将其转化为约束;
步骤四、将源代码与生成的约束一一对应,构建代码-约束库;
步骤五、构建代码搜索系统,帮助用户搜索代码。
2.根据权利要求1所述的基于约束求解的代码搜索方法,其特征在于,步骤一中:
所述开源社区是指Sourceforge,Github,BitBucket,Google Code等开源代码库。
3.根据权利要求2所述的基于约束求解的代码搜索方法,其特征在于,步骤一中:
在Sourceforge,Github,BitBucket,Google Code等开源社区中直接下载或者编写爬虫工具获取开源项目。
4.根据权利要求1所述的基于约束求解的代码搜索方法,其特征在于,步骤二中:
步骤2.1:使用JPF(Java PathFinder)工具的jpf-symbc模块对.class进行分析,获取所有成员函数的可达路径;
步骤2.2:使用JDT(Java Development tools)对可达路径构建AST(Abstract Syntax Tree)树,分析并转化为SSA(Static Single-Assignment)格式。
5.根据权利要求4所述的基于约束求解的代码搜索方法,其特征在于,步骤二中:
将步骤一获取的开源项目导入到Eclipse工具中,编译生成.class文件;
使用JPF工具的jpf-symbc模块对源代码和其对应的.class文件进行分析,获取该开源项目中所有成员函数的可达路径;在源代码的if语句进行插桩处理;
获取一个函数的所有可达路径后,使用JDT工具对所有可达路径的代码构建AST树,分析并将其转化为SSA格式;SSA是一种中间表示形式,保证每个变量在程序中仅被赋值一次,即每个变量只被定义一次,确保其具有精确的使用-定义关系。
6.根据权利要求1所述的基于约束求解的代码搜索方法,其特征在于,步骤三中:
再次使用JDT对SSA格式的路径构建AST,分析并将其转化为约束;包含对if语句,while语句,for语句,以及类成员变量的转换。
7.根据权利要求6所述的基于约束求解的代码搜索方法,其特征在于,步骤三中:
使用JDT工具对生成的SSA格式的代码构建AST,处理代码中变量的声明,赋值语句和条件语句,将代码转化为约束;处理的类型包括int,boolean和String类型,以及这些类型构成的类类型。
8.根据权利要求1所述的基于约束求解的代码搜索方法,其特征在于,步骤四中:
将所有成员函数的源代码及其约束一一对应保存在MySQL数据库中,构建代码-约束库。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711405834.0/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种基于红外线的鸡蛋无损检测装置
- 下一篇:一种理化检验用药物溶解稳定振荡器