当前位置: 首页 > 专利查询>福州大学专利>正文

基于代码分析的系统对象图自动生成方法技术方案

技术编号:19341107 阅读:39 留言:0更新日期:2018-11-07 13:32
本发明专利技术提供一种基于代码分析的系统对象图自动生成方法,其特征在于:包括以下步骤:步骤S1:通过soot分析获取类名、方法名和语句集;步骤S2:处理对象创建语句并生成对象集,处理对象声明语句并生成属性‑值对应集,采用符号执行的思想获取方法调用语句和调用过程并生成对象调用关系集;步骤S3:运用plantuml语言规则将上述集合转化为对象图生成语句,从而得到了自动生成的uml对象图。本发明专利技术基于代码分析的系统对象图自动生成技术可以直观反映运行时软件体系结构的特点,用户不必查看繁琐的代码就能通过该技术获取对象信息(类属性、对象属性)以及对象关系(对象调用链),加强代码的可读性和可维护性。

Automatic generation method of system object graph based on code analysis

The invention provides an automatic generation method of system object graph based on code analysis, which is characterized by the following steps: obtaining class name, method name and statement set through soot analysis; and processing object creation statement and generating object set, processing object declaration statement and generating attribute value correspondence set, and mining. The idea of symbolic execution is used to acquire the method call statement and call process and generate the object call relation set. _: using the plant UML language rules, the above set is transformed into the object graph generation statement, thus the UML object graph is automatically generated. The automatic generation technology of system object graph based on code analysis can directly reflect the characteristics of runtime software architecture. Users can obtain object information (class attributes, object attributes) and object relationship (object call chain) through the technology without looking at tedious code, and enhance the readability and dimensionality of code. Protect nature.

【技术实现步骤摘要】
基于代码分析的系统对象图自动生成方法
本专利技术涉及一种基于代码分析的系统对象图自动生成方法。
技术介绍
近年来,面向对象的软件开发技术发展迅速并获得了广泛应用,在面向对象的分析、设计技术及面向对象的程序设计语言方面均获得了丰富的研究成果,面向对象的方法占据着主导地位。统一建模语言UML是面向对象软件开发中的一种通用、统一的图形模型语言,是用于软件系统规约化、可视化构造和建模的有效工具。所以,在软件工程中,工程师通常使用uml设计方法(即类图、时序图、对象图)进行系统的详细设计,从而按照详细设计来进行代码编写和软件开发,通过uml图生成代码,这个属于正向工程生成代码。然而在实际开发中,很可能是先完成了代码开发,再补充详细设计文档,或者希望从复杂的源代码中快捷地提取系统的架构信息,这就需要通过代码来自动生成uml图。该逆向工程能通过uml对象图直观地反映系统中对象的状态信息、关系等抽象结构,让工程师从架构角度看系统源代码或者方便获取系统uml对象图。目前,一些编程语言和编程环境已有从代码生成uml图这一逆向工程,其中类图是最常见的,时序图较少,而生成对象图的技术更是处于不成熟的状态。这些UML生成工具的问题是,当以代码逆向构建uml类及序列图时,可能无法自动地产生有用的uml图,或者产生多余的图表信息。因此,基于代码分析是生成uml对象图的前提,它可以改善源代码的输出产物,从中间代码中识别其组成部分作为对象图生成工具的输入。
技术实现思路
本专利技术的目的是提供一种基于代码分析的系统对象图自动生成方法。本专利技术采用以下技术方案:一种基于代码分析的系统对象图自动生成方法,其包括以下步骤:步骤S1:通过soot分析获取类名、方法名和语句集;其中类的集合为C={C0,C1,C2,…Ci}其中Ci表示类名:方法的集合为Mi={Mi0,Mi1,Mi2,…Mij}其中Mij表示Ci的第j个方法;语句的集合为Uij={Uij0,Uij1,Uij2…Uijk}其中Uijk表示Mij的第k个语句;对象的集合为OBJ={obj0,obj1,obj2,…obji}其中obji表示第i个对象步骤S2:处理对象创建语句并生成对象集,处理对象声明语句并生成属性-值对应集,采用符号执行的思想获取方法调用语句和调用过程并生成对象调用关系集;步骤S3:运用plantuml语言规则将上述集合转化为对象图生成语句,从而得到了自动生成的uml对象图。在本专利技术一实施例中,步骤S1中soot的jtp阶段分析产物的语句格式:声明语句:定义形参pName:=@pId:pType赋值语句:普通赋值<Ci:TypeName>=Value调用式赋值$i=invokeinvoker.Mpq对象声明赋值obji=newCr调用语句:形如invokeuser.invoker.Mpq返回语句:形如returnresult;以上语句是在分析Ci的第j个方法,即Mij时产生的,其中,当第p个类的第q个方法Mpq为创建对象的方法时,格式为<Cr:void<init>(oValue0,oValue1,oValue2…)>pName为参数名,pId为参数号,pType为参数类型,invoker为被调用对象,user为调用对象,Cr为对象所属类的类名;result为返回值,oValue0,oValue1,oValue2…为对象实参值;形参表为param<Mij,pId,pName>;其中Mij为方法名,pId为参数号,pName为参数名;每个obji=<Mij,Cr,objectId>,Cr为对象所属类的类名,objectId是该对象唯一的标识符;属性-值表为param2<Mij,Name,Value>形参表param更新为对象参数表objparam<obji,pNamej,oValuej>;其中obji为对象名,pNamej为参数名,oValuej为对象实参值。在本专利技术一实施例中,步骤S2中对象之间调用关系为invokeij=<obji,objj,Mip,Mjq,invokeTime,invokeId>;其中,Mip为obji调用方法集Mi中第p个方法,Mjq为objj调用方法集Mj中第q个方法,invokeTime表示方法调用的次数,invokeId表示调用的唯一标识符。在本专利技术一实施例中,步骤S1包括以下步骤:步骤S11:使用soot.options.Options下的配置函数进行输入输出配置,主要有包括设置输出格式为jimple、处理path下所有的类;步骤S12:使用soot.Scene加载基本类,Scene是包含全部SootClass的容器,Scene.v()得到一个单例模式的Scene,设定分析发生的场景;步骤S13:加载所有类,得到class链表,以Iterator方式遍历获得所有类,判断该类是否为被分析系统下的类、是否为接口类、获得类名,以ArrayList<String>方式将类名保存;步骤S14:运行soot的jtp阶段,在bodytransformer注册自定义的过程间分析;生成被分析的java文件路径下所有的类名Ci、每个类下所有的方法Mij、每个方法体中所有的语句Uijk;步骤S15:处理输出的Uij,保存有效的分析产物;生成每个方法的形参表param、对象表obji、属性-值表param2。与现有技术相比,本专利技术基于代码分析的系统对象图自动生成技术可以直观反映软件体系结构的特点,用户不必查看繁琐的代码就能通过该技术获取对象信息(类属性、对象属性)以及对象关系(对象调用链),加强代码的可读性和可维护性。附图说明图1本专利技术为从java代码到uml图的分析、转换过程示意图。图2本专利技术为从java代码到对象图具体过程示意图。图3本专利技术一实施例的对象图中的链示例示意图。图4为本专利技术一实施例的用户执行uml生成工具流程示意图。具体实施方式下面结合附图和具体实施例对本专利技术做进一步解释说明。一种基于代码分析的系统对象图自动生成方法,其包括以下步骤:步骤S1:通过soot分析获取类名、方法名和语句集;其中类的集合为C={C0,C1,C2,…Ci}其中Ci表示类名:方法的集合为Mi={Mi0,Mi1,Mi2,…Mij}其中Mij表示Ci的第j个方法;语句的集合为Uij={Uij0,Uij1,Uij2…Uijk}其中Uijk表示Mij的第k个语句;对象的集合为OBJ={obj0,obj1,obj2,…obji}其中obji表示第i个对象步骤S2:处理对象创建语句并生成对象集,处理对象声明语句并生成属性-值对应集,采用符号执行的思想获取方法调用语句和调用过程并生成对象调用关系集;步骤S3:运用plantuml语言规则将上述集合转化为对象图生成语句,从而得到了自动生成的uml对象图。在本专利技术一实施例中,步骤S1中soot的jtp阶段分析产物的语句格式:声明语句:定义形参pName:=@pId:pType赋值语句:普通赋值&a本文档来自技高网...

【技术保护点】
1.一种基于代码分析的系统对象图自动生成方法,其特征在于:包括以下步骤:步骤S1:通过soot分析获取类名、方法名和语句集;其中类的集合为C={C0,C1,C2,…Ci}其中Ci表示类名:方法的集合为Mi={Mi0,Mi1,Mi2,…Mij}其中Mij表示Ci的第j个方法;语句的集合为Uij={Uij0,Uij1,Uij2…Uijk}其中Uijk表示Mij的第k个语句;对象的集合为OBJ={obj0,obj1,obj2,…obji}其中obji表示第i个对象步骤S2:处理对象创建语句并生成对象集,处理对象声明语句并生成属性‑值对应集,采用符号执行的思想获取方法调用语句和调用过程并生成对象调用关系集;步骤S3:运用plantuml语言规则将上述集合转化为对象图生成语句,从而得到了自动生成的uml对象图。

【技术特征摘要】
1.一种基于代码分析的系统对象图自动生成方法,其特征在于:包括以下步骤:步骤S1:通过soot分析获取类名、方法名和语句集;其中类的集合为C={C0,C1,C2,…Ci}其中Ci表示类名:方法的集合为Mi={Mi0,Mi1,Mi2,…Mij}其中Mij表示Ci的第j个方法;语句的集合为Uij={Uij0,Uij1,Uij2…Uijk}其中Uijk表示Mij的第k个语句;对象的集合为OBJ={obj0,obj1,obj2,…obji}其中obji表示第i个对象步骤S2:处理对象创建语句并生成对象集,处理对象声明语句并生成属性-值对应集,采用符号执行的思想获取方法调用语句和调用过程并生成对象调用关系集;步骤S3:运用plantuml语言规则将上述集合转化为对象图生成语句,从而得到了自动生成的uml对象图。2.根据权利要求1所述的基于代码分析的系统对象图自动生成方法,其特征在于:步骤S1中soot的jtp阶段分析产物的语句格式:声明语句:定义形参pName:=@pId:pType赋值语句:普通赋值<Ci:TypeName>=Value调用式赋值$i=invokeinvoker.Mpq对象声明赋值obji=newCr调用语句:形如invokeuser.invoker.Mpq返回语句:形如returnresult;以上语句是在分析Ci的第j个方法,即Mij时产生的,其中,当第p个类的第q个方法Mpq为创建对象的方法时,格式为<Cr:void<init>(oValue0,oValue1,oValue2…)>pName为参数名,pId为参数号,pType为参数类型,invoker为被调用对象,user为调用对象,Cr为对象所属类的类名;result为返回值,oValue0,oValue1,oValue2…为对象实参值;形参表为param<Mij,pId,pName>;pId为参数号,pName为参数名;每个obji=&...

【专利技术属性】
技术研发人员:陈星陈佳晴陈世鸿刘碧春朱芳宁
申请(专利权)人:福州大学
类型:发明
国别省市:福建,35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1