[发明专利]用于分布式静态检测系统的Java文件依赖性分析方法及模块有效
| 申请号: | 201810869157.6 | 申请日: | 2018-08-02 |
| 公开(公告)号: | CN109033843B | 公开(公告)日: | 2022-06-10 |
| 发明(设计)人: | 韩承锋;唐云善;邹旎彬;朱春雷;王强;陈皓立 | 申请(专利权)人: | 南瑞集团有限公司;南京南瑞信息通信科技有限公司;国网江苏省电力有限公司 |
| 主分类号: | G06F21/57 | 分类号: | G06F21/57;G06F8/75;G06F8/41 |
| 代理公司: | 南京纵横知识产权代理有限公司 32224 | 代理人: | 朱妃;董建林 |
| 地址: | 211106 江*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 用于 分布式 静态 检测 系统 java 文件 依赖性 分析 方法 模块 | ||
1.一种用于分布式静态检测系统的Java文件依赖性分析方法,其特征在于,包括以下步骤:
1)针对程序包中的所有文件进行信息处理,记录Java源代码文件为待分析对象;
2)读取所有文件中的一个Java源代码文件;
3)生成该文件的抽象语法树;
4)基于该文件的抽象语法树,对该文件所有语句进行依赖性分析,找出该文件依赖的其他文件;
5)记录该文件与其他文件的依赖关系;
其中,该文件与其他文件的依赖关系使用有向图记录;
6)判断程序包中的所有文件是否已依赖性分析完毕;
若已依赖性分析完毕、则执行下一步,若否、则跳转执行步骤2);
7)根据程序包中的所有文件的依赖关系,生成该程序包的依赖性关系图;
根据该依赖性关系图进行分析,得到所有不可再分的独立文件集合;
8)根据分布式检测系统对程序检测包的要求,对所有不可再分的独立文件集合进行合并,得到若干个符合系统需求的相互独立的Java源代码文件集合;
9)根据Java源代码文件集合,对程序包进行解耦拆分,获取所有程序子包,从而得到程序包解耦拆分的结果;
所述步骤1)中的信息处理,具体为,对程序包中的Java源代码文件和该Java源代码文件依赖的jar包进行分类处理;其中,Java源代码文件被视为待分析对象,依赖的jar包则作为依赖项引入分析过程;
所述步骤3)生成该文件的抽象语法树,具体为,使用JavaParser对待分析对象Java源代码文件以特定结构生成抽象语法树;
其中,生成的抽象语法树包括三大类节点,分别是声明节点、表达式节点和块节点;
所述声明节点,用于记录文本中与声明有关的语句或块,包括Package声明、import声明、类声明、方法声明和变量声明;
所述表达式节点,用于记录一切除了声明节点以及块节点的语句,包括方法调用语句、类创建语句和赋值语句;
所述块节点,用于表示带有花括号{}中的语句,包括类声明的类内容、方法声明中的方法内容、if语句、try语句、catch语句和for语句;
所述步骤4)中的依赖性分析,具体包括以下步骤:
4-1)Package声明以及import声明分析;
首先,分析文件所在的Package以及Import的Package,得到本文件所依赖的Package;
然后,直接遍历依赖的Package中的类以及Import的类,得到该文件所有可能依赖的类,以缩小下一步分析中类遍历范围;
最后,记录Import Static引入的静态变量;
4-2)类声明分析;
针对该文件的public类以及文件的内部类进行分析,若public类以及文件的内部类存在父类或者实现的接口类,则将找到的父类以及实现的接口类记录下来;
4-3)变量声明分析;
分析所有变量声明语句,记录所有是类对象变量所属的类,若这些类对象变量同时初始化,同时检查初始化的值是否是类的静态成员变量,若是、则记录下该成员变量所属的类;
4-4)方法声明分析;
分析方法声明中的返回类型、输入参数类型以及抛出错误类型;
若方法返回类型非void或者非Java基本类型,则记录下方法返回类型所属的类;
若方法声明存在大于等于一个输入参数,则依次分析每个输入参数,记录下每个非Java基本类型输入参数所属的类;
若方法存在抛出错误,记录下方法所有抛出错误所属的类;
4-5)特定语句分析;
遍历所感兴趣的特定语句,记录特定语句中存在的类或者类的静态成员;
其中,特定语句是指可能存在类符号的语句,包括赋值语句、类创建语句、for语句和catch语句;
4-6)方法调用分析;
分析方法调用的输入参数,若方法调用存在大于等于一个输入参数,则依次分析每个输入参数,记录下每个非Java基本类型输入参数所属的类;
分析该方法调用是否是静态成员方法,若是,则记录下该方法调用所属的类;若否,则查询该方法调用是否属于该文件public类或者内部类,若属于,则忽略该方法调用所属于的类;若不属于,则查询并记录下该方法调用所属的外部类;
4-7)注解分析;
分析文件中的注解,若存在自定义注解,则把该注解所属的自定义注解类记录下来;
4-8)搜索依赖类所在文件;
搜索定位根据步骤4-1)至步骤4-7)中所得到的依赖类所在的文件;
其中,包含依赖类的jar包为该文件所依赖的jar包,包含依赖类的Java源文件为该文件所依赖的Java 源代码文件;
所述步骤8)中的对所有不可再分的独立文件集合进行合并,具体是,根据分布式检测系统所需求的文件包大小,在不超过系统要求大小之内,遵循合并规则,对所有不可再分的独立文件集合进行合并,得到若干个符合系统需求的相互独立的Java源代码文件集合;
其中,合并规则包括第一规则和第二规则;所述第一规则为交集集合先合并,无交集集合后合并;所述第二规则为存在多个有交集集合时,交集大的两个集合先合并;
所述步骤9),具体为,通过获取Java源代码文件集合中每个Java源代码文件依赖的jar包,得到每个Java源代码文件集合所依赖的jar包;最后,把每个Java源代码文件集合中的Java源代码文件和该集合所依赖的jar包归为一个程序子包,获得的所有程序子包为程序包解耦拆分的结果。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南瑞集团有限公司;南京南瑞信息通信科技有限公司;国网江苏省电力有限公司,未经南瑞集团有限公司;南京南瑞信息通信科技有限公司;国网江苏省电力有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810869157.6/1.html,转载请声明来源钻瓜专利网。
- 上一篇:数据处理器
- 下一篇:基于端口识别的自动化漏洞探测系统及方法





