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

一种基于子图搜索的特征定位方法技术

技术编号:13681872 阅读:75 留言:0更新日期:2016-09-08 12:57
本发明专利技术属于软件工程技术领域,具体为一种基于子图搜索的特征定位方法。本发明专利技术方法包括:对软件源代码进行预处理,获取代码元素间的调用依赖关系信息;用户输入关键字,并通过文本检索方法在软件源代码中搜索到包含任意关键字的代码元素作为候选元素;计算候选元素与输入的关键字的相似度;根据代码元素与关键字的相似度和代码元素间依赖关系定义评价函数,来评价调用依赖图的子图是否为较好的特征定位结果;然后在代码元素间的调用依赖图上搜索使评价函数值最高的子图作为结果。本发明专利技术的自动化程度较高,可以让开发者快速的进行特征定位,并能够清晰的了解代码结构,快速理解代码的实现过程。

【技术实现步骤摘要】

本专利技术属于软件工程
,具体涉及特征定位、代码分析以及图搜索技术,适用于辅助开发人员完成软件特征定位任务,并让开发人员快速了解软件功能实现过程。
技术介绍
为了完成各种软件维护任务,例如纠正需求实现中的错误、改进已有的功能实现方式、或扩展新的功能特性,开发人员经常需要先确定需求特征与代码的对应关系。这种确定源代码中与给定需求特征相关的程序元素的过程称为特征定位。开发人员在进行特征定位时,除了找出与特征对应的代码元素之外,还需要理解这些功能特征的实现过程,以便进行相应的维护任务。但传统的特征定位仅仅找出与特征对应的代码元素,并没有给出任何辅助开发者理解代码的信息,而程序元素间的关系错综复杂,开发人员要完全了解特征定位过程得到的结果仍然要耗费很多精力探索代码元素。因此有必要为开发人员提供更好的特征定位工具以辅助他们更好的理解特征是如何实现的。为了让开发者尽快了解代码结构,本专利技术选择了代码间的调用关系作为结构信息加入到返回结果中。在软件程序中,每个代码元素都会负责相对单一的一个职能,要实现一个完整的功能特征,需要很多代码元素进行“协作”,而代码元素间的“协作”就是依靠代码之间的相互调用来完成。因此,代码间的调用关系能够很好的反映出代码元素间的协作过程,从而帮助开发人员快速的了解相应功能的实现过程。为了获取到带有调用信息的特征定位结果,本专利技术将直接使用现有的静态分析技术处理源代码,该技术能够获取到代码元素间的调用关系,本专利技术根据代码元素信息和代码元素间的调用关系构建一个调用依赖图,并在此基础上使用子图搜索的方法来获取到与功能特征描述最为接近的子图,最终以该子图作为最后的结果返回给开发者。在此需要说明的一点是,本专利技术中设计的子图搜索方法需要调用依赖图上任意两点间的最短路径。因此,本专利技术在构建了代码元素间的调用依赖图后,使用了弗洛伊德算法来计算最短路径信息。该算法是一种动态规划算法,能够高效的计算出图结构中任意两点间的最短路径。在搜索时本专利技术中还设置了一个评价函数来判断搜索到的图与功能特征的关联程度,在搜索过程中寻找评价值最大的子图。子图的评价函数结合了代码元素与功能描述的文本相似度和代码元素间的调用关系,从而充分利用了代码语义信息和结构信息,保证搜索结果的准确性。通过本专利技术,开发者只需要输入与特征相关的关键字,就能够快速的搜索到与特征相关的代码元素的调用依赖图。调用依赖图不仅能够帮助开发者找到相应的代码元素,还能够帮助开发者理解代码实现过程。
技术实现思路
本专利技术的目的在于提供一种快速自动化的特征定位方法,并在给出特征定位结果的同时提供代码元素间调用关系来辅助开发者快速理解代码。在使用该方法时,开发人员先输入一组描述特征的关键字。该方法先根据关键字搜索相关的代码元素,再根据代码元素的语义信息和调用关系搜索到一个与特征相关的代码元素调用依赖图。该依赖图将作为最后的结果提供给开发者,开发者在获取到依赖图后,不仅能够找到与特征相关的代码元素,还能够快速了解代码元素间的调用关系,以辅助他们理解代码实现过程。本专利技术的技术方案如下:本专利技术的方法流程如图1所示。在对某个项目进行特征定位之前,先要进行一些预处理过程来获取方法中所需的信息。首先使用静态分析技术对源代码进行预处理,获取到源代码中代码元素间的调用关系,并根据调用关系构建代码元素间的调用依赖图。然后使弗洛伊德算法处理调用依赖图,得到图中任意两点间的最短路径。至此,预处理过程结束,得到的代码元素间调用依赖图和图中任意两点间最短路径即为图1中的代码元素依赖信息。这些信息将在子图搜索过程中被使用。在进行特征定位时,开发者输入从特征描述中提取的关键字,然后本专利技术将会自动的根据关键字和预处理获取的信息搜索出与该特征相关的代码元素调用依赖图。本专利技术中提出的特征定位方法具体分为两部分,第一部分是根据开发者的关键字,在源代码中搜索候选代码元素,第二部分是根据第一部分得到的候选代码元素和预处理得到的数据,在代码调用依赖图上搜索一个与特征对应的子图,该子图将被作为特征定位结果返回给用户。在第一部分中,方法先使用现有的文本检索技术,在源代码中进行文本检索,找出到包含任意关键字的代码元素,然后根据公式(1)为每个搜索到的代码元素计算一个文本相似度。 (1)公式1中,Q为开发者输入的关键字的集合,m为函数的文本段中所包含的词语的集合。与信息检索中相似度计算不同,该相似度计算结果为离散数值,对相似性的区分度更大,且便于计算;这些计算了文本相似度的代码元素被称为候选代码元素。如图1所示,这些候选代码元素是方法第一步的输出数据。在第二部分中,方法根据候选代码元素和预处理得到的调用依赖信息,在源代码的调用依赖图上搜索到一个子图,使得该子图具有最好的评价值。子图评价值的计算如公式(2)所示: (2)公式中,Q为关键字集合,G(V, E)为搜索到的程序依赖调用图上的子图,V为子图的点集合,也就是函数元素的集合;E为子图上边的集合,也就是元素间调用关系的集合。公式中Sim(Q,vi)为代码元素与输入的关键字之间的文本相似度,∣E∣为子图中边的总长度。ρ为人工设置的参数,用来调节子图的大小对评价值的限制作用。该函数很好的结合了函数与关键字的文本相似度和函数间结构关系的紧密性,保证了最终结果的准确性。在进行子图搜索的过程中,直接使用暴力搜索来获取评价值最高的子图并不可行,其复杂度非常高,无法即时的给出特征定位结果。因此本专利技术中设计了一种基于贪心策略的图扩展算法。该算法不直接搜索子图,而是随机选取文本相似度最高的一个候选元素作为初始子图。然后逐步扩展子图,每次将新的候选元素连入子图,以使子图评价值得到最大提升。直到找不到任何使子图评价值提升的候选元素,或是子图中候选元素超过上限。该算使用贪心策略从随机选取的节点开始,生成一个评价值较高的子图,复杂度低。算法的输入为:项目的依调用结构图、调用结构图上任意两点最短路径信息以及候选元素数据;算法的输出为:与特征对应的代码元素的结构依赖图基于上述介绍,本专利技术提出的基于子图搜索的特征定位方法,具体步骤归纳如下:(1)首先对软件源代码进行预处理,获取代码元素间的调用依赖关系信息;(2)用户输入若干关键字,并通过文本检索方法在软件源代码中搜索到包含任意关键字的代码元素作为候选元素;(3)计算一个候选元素与输入的关键字的相似度,本专利技术中将其称为文本相似度。具体计算方式如式(1)所示:(4)根据代码元素与关键字的相似度和代码元素间依赖关系定义了一个评价函数,来评价调用依赖图的子图是否为较好的特征定位结果;然后在代码元素间的调用依赖图上搜索使评价函数值最高的子图作为结果;(5)在具体搜索时,采用一种基于贪心算法的图扩展算法,获取一个评价值较高的依赖结构图作为结果。本专利技术方法的最终特征定位结果为代码元素调用依赖图的子图。这种结果中包含了代码中函数间的结构关系,能够辅助用户快速理解代码的结构,并且采用图结构的结果展示方式能够很好地描绘代码元素间复杂的依赖关系。本专利技术的优点和积极效果:开发者只需要输入与特征相关的关键字,方法就可以自动化的搜索到相应的特征定位结果。由于方法中有效的结合了代码的语义信息和结本文档来自技高网
...

【技术保护点】
一种基于子图搜索的特征定位方法,其特征在于具体步骤如下:(1)首先对软件源代码进行预处理,获取代码元素间的调用依赖关系信息;包括:使用静态分析技术对源代码进行预处理,获取到源代码中代码元素间的调用关系,并根据调用关系构建代码元素间的调用依赖图;然后使弗洛伊德算法处理调用依赖图,得到图中任意两点间的最短路径;(2)用户输入若干关键字,并通过文本检索方法在软件源代码中搜索到包含任意关键字的代码元素作为候选元素;(3)计算一个候选元素与输入的关键字的相似度,具体计算方式如下式:其中,Q为用户输入的关键字的集合,m为代码元素中所包含的词语的集合;(4)根据代码元素与关键字的相似度和代码元素间依赖关系定义一个评价函数,来评价调用依赖图的子图是否为较好的特征定位结果;然后在代码元素间的调用依赖图上搜索使评价函数值最高的子图作为结果;(5)在具体搜索时,采用一种基于贪心算法的图扩展算法,获取一个评价值较高的依赖结构图作为结果。

【技术特征摘要】
1. 一种基于子图搜索的特征定位方法,其特征在于具体步骤如下:(1)首先对软件源代码进行预处理,获取代码元素间的调用依赖关系信息;包括:使用静态分析技术对源代码进行预处理,获取到源代码中代码元素间的调用关系,并根据调用关系构建代码元素间的调用依赖图;然后使弗洛伊德算法处理调用依赖图,得到图中任意两点间的最短路径;(2)用户输入若干关键字,并通过文本检索方法在软件源代码中搜索到包含任意关键字的代码元素作为候选元素;(3)计算一个候选元素与输入的关键字的相似度,具体计算方式如下式:其中,Q为用户输入的关键字的集合,m为代码元素中所包含的词语的集合;(4)根据代码元素与关键字的相似度和代码元素间依赖关系定义一个评价函数,来评价调用依赖图的子图是否为较好的特征定位结果;然后在代码元素间的调用依赖图上搜索使评价函数值最高的子图作为结果;(5)在具体搜索时,采用一种基...

【专利技术属性】
技术研发人员:付焜彭鑫赵文耘
申请(专利权)人:复旦大学
类型:发明
国别省市:上海;31

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

1