一种面向Java代码的类使用示例生成方法与流程

文档序号:13760166阅读:390来源:国知局
一种面向Java代码的类使用示例生成方法与流程

本发明属于软件理解领域,特别涉及一种面向Java代码的类使用示例生成方法。



背景技术:

对于软件开发人员,经常需要使用他们不熟悉或他们不记得怎么用的类。要了解这些类,开发者通常需要花大量的时间查阅参考手册(Javadoc),求助于问答(Q&A)论坛(StackOverflow),或其他信息来源。通常情况下,这些资源提供类使用语法多一点,并且注重方法的技术细节。而现有的技术仅仅只对类的用途和公共方法的用途进行阐述,并不教你如何去使用这个类,没有直观的例子供开发人员参考,开发人员并不知道在使用类公共方法的具体使用步骤,并且现有技术并不提供类的历史维护信息,这可能导致开发人员在软件开发过程中使用一些已经被淘汰掉的类或者不安全的类。



技术实现要素:

本发明的目的就在于克服上述缺陷,研制一种面向Java代码的类使用示例生成方法。

本发明的技术方案是:

一种面向Java代码的类使用示例生成方法,其主要技术特征在于如下步骤:

步骤1).开发人员提供Java项目源代码,输入该项目中的一个类的名称,若类名存在,则这个类的公共方法、公共属性和所属包将被自动提取,形成类的初始信息;若类名不存在,则提示类名错误,要求重新输入类名;

步骤2).在步骤1)结果中对每个调用类公共方法的项目进行分析,为每次方法调用计算一个程序切片,代表一个“原始”的使用示例;

步骤3).由于会计算出许多方法使用示例,其中有很多是相似的,所以在步骤2)的结果中对每个方法的切片集使E={ex1,ex2....,exn}用Simian来检查重复代码,其输出由所有被确定为2型克隆的代码示例对组(exk,exl)∈E×E成,并基于他们的克隆的出现次数进行排名;

步骤4).根据步骤3)的结果,从Javadoc文档中提取注释信息,与每种方法的示例排名列表相结合,生成文档展示示例排名列表;

步骤5).在步骤4)的结果中提取类之间继承、使用和依赖关系,并对类的历史修改和维护状况进行分析。根据类的使用次数以及bug出现次数,计算出类的稳定性;

步骤6).结合步骤4)和步骤5)的结果创建类文档,并向开发人员展示类示例的信息。

本发明提供了类使用示例来更直观的了解类的用法并计算了类的稳定性。类的使用示例包括展示类的公共属性、类与类之间的关系、类公共方法的使用示例以及类的稳定性。由于类的使用示例并不总是能在软件文档中获得,本发明提出了从现有的项目代码中自动提取类使用示例的技术,呈现出类的实际用法。

本发明可以对一个给定类的基本信息进行自动的发现、提取、记录。本发明使用最先进的静态分析技术,确保它的精确度和有效性。它分析现有的项目来收集类公共方法的用法,并为每次调用方法的语句计算出程序静态切片,用来检测调用该方法的相关步骤,去除与不相关的代码。因为不同的项目可能通过相似的途径使用相同的方法,所以本发明通过克隆检测来识别相似的代码。所检测到的克隆被用来作为使用码示例受欢迎程度的量度,对类似的使用示例进行排名。最后生成文档记录该公共方法的示例组。本发明还分析类的历史修改和维护状况,根据类的使用情况和bug出现次数规定稳定性指标,计算出类的稳定性,方便开发人员对类的选择进行判断,方便开发人员对类的使用决策。

本发明从类公共方法的使用角度生成方法的使用示例,进而生成类的使用示例。在这个类使用示例的辅助下,开发人员会对这个类有一个更加具体、快速和深入的理解。主要有如下一些优点:

(1)目前的项目基本都有软件帮助文档,如Javadoc,而本发明提出生成自动生成指定类的使用示例,类的使用示例包括展示类的公共属性、类与类之间的关系、类公共方法的使用示例。开发人员不仅可以了解类的用途并且可以更加具体地了解这个类的实际使用方法。

(2)该发明采用了先进的程序切片技术和克隆检测技术,可以更加精确有效地提取类公共方法的使用示例,开发人员可以不必花费大量时间查询类的具体用法,更加快速地进行软件开发。

(3)该发明所生成的类使用示例涉及到类的稳定性分析,开发人员可以直接通过稳定性来了解类的维护状况,更加方便地对类的选择进行判断,方便对类的使用决策。

附图说明

图1——本发明生成类使用示例的流程示意图。

图2——本发明类IOUtiles的初始信息示意图。

图3——本发明对类IOUtils中tolnputStream方法使用示例排名的预期结果示意图。

图4——本发明类IOUtils中部分方法的文档示意图。

具体实施方式

如图1所示:

一种面向Java代码的类使用示例生成方法,其特征在于如下步骤:

步骤1).开发人员提供Java项目源代码,输入该项目中的一个类的名称,若类名存在,则这个类的公共方法、公共属性和所属包将被自动提取,形成类的初始信息;若类名不存在,则提示类名错误,要求重新输入类名。本发明通过识别标签,从Javadoc文档中获取信息,如图2所示为类IOUtiles的初始信息。

步骤2).在步骤1)结果中对每个调用类公共方法的项目进行分析,为每次方法调用计算一个程序切片,代表一个“原始”的使用示例。

步骤3).由于会计算出许多方法使用示例,其中有很多是相似的,所以在步骤2)的结果中对每个方法的切片集E={ex1,ex2,...,exn}使用Simian(冗余代码检查工具)来检查重复代码,其输出由所有被确定为2型克隆(即除了在注释、标识符、常量、类型和空格不同其他都相同的代码片段)的代码示例对(exk,exl)∈E×E组成,并基于他们的克隆的出现次数进行排名。以下是方法示例的流行度指标:

rs(exi)=#clients2+#clones+1-#clients

其中,#clones表示在客户端中识别到EXI克隆的总数,+1代表EXI示例本身,#clients表示其中EXI和它的克隆被发现在不同的项目的数目。代码示例排名越高,所被估计的用处就越大,如图3所示为类IOUtils中tolnputStream方法使用示例排名。

步骤4).根据步骤3)的结果,从Javadoc文档中提取注释信息,与每种方法的示例排名列表相结合,生成文档展示示例排名列表,如图4所示为类IOUtils中部分方法的文档。

步骤5).在步骤4)的结果中对类与类之间的关系进行挖掘,提取类之间继承的关系。并对类的历史修改和维护状况进行分析,根据类的使用次数以及bug出现次数,计算出类的稳定性。本发明根据每个版本里的commits信息挖掘类的修改情况。以下是稳定性指标:

<mrow> <mi>s</mi> <mi>t</mi> <mi>a</mi> <mi>b</mi> <mi>i</mi> <mi>l</mi> <mi>i</mi> <mi>t</mi> <mi>y</mi> <mo>=</mo> <mn>0.5</mn> <mo>&times;</mo> <mfrac> <mrow> <mo>#</mo> <mi>V</mi> <mi>e</mi> <mi>r</mi> <mi>s</mi> <mi>i</mi> <mi>o</mi> <mi>n</mi> <mi>N</mi> <mi>u</mi> <mi>m</mi> <mo>-</mo> <mo>#</mo> <mi>B</mi> <mi>u</mi> <mi>g</mi> <mi>F</mi> <mi>r</mi> <mi>e</mi> <mi>q</mi> <mi>u</mi> <mi>e</mi> <mi>n</mi> <mi>c</mi> <mi>y</mi> </mrow> <mrow> <mo>#</mo> <mi>V</mi> <mi>e</mi> <mi>r</mi> <mi>s</mi> <mi>i</mi> <mi>o</mi> <mi>n</mi> <mi>N</mi> <mi>u</mi> <mi>m</mi> </mrow> </mfrac> <mo>+</mo> <mn>0.5</mn> <mo>&times;</mo> <mfrac> <mrow> <mo>#</mo> <mi>C</mi> <mi>l</mi> <mi>a</mi> <mi>s</mi> <mi>s</mi> <mi>U</mi> <mi>s</mi> <mi>e</mi> <mi>d</mi> <mi>F</mi> <mi>r</mi> <mi>e</mi> <mi>q</mi> <mi>u</mi> <mi>e</mi> <mi>n</mi> <mi>c</mi> <mi>y</mi> </mrow> <mrow> <mo>#</mo> <mi>V</mi> <mi>e</mi> <mi>r</mi> <mi>s</mi> <mi>i</mi> <mi>o</mi> <mi>n</mi> <mi>N</mi> <mi>u</mi> <mi>m</mi> </mrow> </mfrac> </mrow>

#VersionNum是现已发布的版本数目,#BugFrequency是该类出现bug的版本数目,#ClassUsedFrequency是使用该类的版本数目。该指标介于[0,1],越接近1说明该类越稳定。

步骤6).结合步骤4)和步骤5)的结果创建类文档,并向开发人员展示类示例的信息。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1