[发明专利]Java软件项目依赖冲突语义一致性的自动化检测方法有效
申请号: | 202011238918.1 | 申请日: | 2020-11-09 |
公开(公告)号: | CN112181858B | 公开(公告)日: | 2021-12-31 |
发明(设计)人: | 王超;王莹;李丹程;于海;朱志良 | 申请(专利权)人: | 东北大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/53;G06F8/70 |
代理公司: | 沈阳东大知识产权代理有限公司 21109 | 代理人: | 李在川 |
地址: | 110819 辽宁*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | java 软件 项目 依赖 冲突 语义 一致性 自动化 检测 方法 | ||
1.一种Java软件项目依赖冲突语义一致性的自动化检测方法,其特征在于,包括如下步骤:
步骤1:获取Maven项目POM文件和项目代码;
步骤2:获取项目完全依赖树,从中分析出依赖冲突并做筛选和过滤,过程如下;
步骤2.1:通过项目源代码中的pom.xml文件获取项目的完全依赖树;
步骤2.2:根据项目的完全依赖树,分析出所有由于Maven仲裁机制所屏蔽掉的第三方依赖,作为初始依赖冲突问题;
步骤2.3:对于检测出来的依赖冲突问题,筛选掉所有不参与项目正常运行的依赖包,以及自定义的过滤项;
步骤3:对于所有的依赖冲突,检测是否存在真实风险方法的情况,过程如下;
步骤3.1:在步骤2中可以得到项目的依赖冲突,检测其中是否包含完全限定名相同的方法;
步骤3.2:对于在两个冲突包中的完全限定名相同的方法,通过反编译技术,把二进制文件反编译成源文件;
步骤3.3:根据反编译出来的源文件,通过抽象语法树的对比,对比两个方法的方法体是否存在较为明显的差异,如果没有明显差异,则判断不是风险方法,否则判断属于风险方法;
步骤3.4:对于所有的风险方法,通过静态分析技术,构建当前项目的完全调用路径图,通过分析完全调用路径图,可以判断出当前风险方法是否被当前项目调用,如果没有被调用,则过滤;如果被调用则属于真实的风险方法;步骤4:对步骤3检测出的存在真实风险方法的项目构建相应的对象池和API池;
步骤5:对于检测出的真实风险方法,通过自动化测试用例生成工具结合步骤4构建的对象池和API池生成测试用例并进行验证;
步骤6:将分析结果生成相应的缺陷结果报告,报告给开发者,并及时修正和预测依赖冲突问题。
2.根据权利要求1所述的Java软件项目依赖冲突语义一致性的自动化检测方法,其特征在于,所述通过静态分析技术,构建当前项目的完全调用路径图的过程如下:
步骤3.4.1:通过静态分析技术,解析出当前项目中的所有依赖包内部方法之间的调用关系,并将调用关系保存;
步骤3.4.2:对于步骤3中获取的存在真实风险方法视为目标风险方法,把目标风险方法视为调用图的终点,把当前项目的入口方法视为调用图的起点;
步骤3.4.3:取出所有保存的调用关系,通过广度优先搜索的方式,把所有方法的调用关系组合成完整的调用路径图。
3.根据权利要求1所述的Java软件项目依赖冲突语义一致性的自动化检测方法,其特征在于,所述步骤4的过程如下:
步骤4.1:对于步骤3中检测出存在真实风险方法的项目,获取项目源代码中所有的对象构造方式和方法的声明方式;
步骤4.2:对当前项目所有代码文件进行扫描,获取当前项目所有的类,然后在项目中搜索所有在本项目中类被实例化的位置,然后在实例化的位置处,搜索获取实例一个类所需的所有构造参数,最终生成Object-Parameter对象参数的对应关系,形成项目的对象池;然后对所有API进行API生成池的构造,保存方式依旧为API加参数的方式;
步骤4.3:把初始化好的对象池和API池补充给自动化测试用例生成工具。
4.根据权利要求1所述的Java软件项目依赖冲突语义一致性的自动化检测方法,其特征在于,所述步骤5的过程如下:
步骤5.1:对于检测出的真实风险方法,通过自动化测试用例生成工具结合步骤4给出的对象池和API池,对目标风险方法进行测试用例生成;
步骤5.2:将生成出的测试用例分别在冲突的两个依赖包的环境下运行,如果运行结果不一致,则说明当前风险方法是一个真实的缺陷。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东北大学,未经东北大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011238918.1/1.html,转载请声明来源钻瓜专利网。