[发明专利]一种基于程序分析的Pull Request功能分类方法有效
申请号: | 201911321383.1 | 申请日: | 2019-12-19 |
公开(公告)号: | CN110990055B | 公开(公告)日: | 2022-07-01 |
发明(设计)人: | 张卫丰;李旭阳;周国强;王子元;张迎周 | 申请(专利权)人: | 南京邮电大学 |
主分类号: | G06F8/71 | 分类号: | G06F8/71;G06F8/70 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 210023 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 程序 分析 pull request 功能 分类 方法 | ||
1.一种基于程序分析的Pull Request功能分类方法,其特征是对项目Pull Request中的文件修改和当前项目获取程序代码;接着,对于程序代码,使用程序分析框架Soot生成调用图Callgragh,遍历Callgragh直到调用的是第三方库提供的方法,保存遍历到的节点和边;接着,提取并分析数据库中保存的节点和边的关系,以Pull Request中的文件作为图的节点,构建图的邻接表结构;最后,基于图的深度优先遍历算法遍历邻接表的所有结点,按照节点入度是否为0进行功能分类,针对无调用关系的文件,以文件后缀名进行处理。
2.根据权利要求1所描述的一种基于程序分析的Pull Request功能分类方法,其特征包括以下几个步骤:
1)对项目Pull Request中的文件修改和当前项目进行获取,程序代码是当前版本和Pull Request中文件的并集;
2)基于程序分析的调用关系图获取方法的调用关系,使用程序分析框架Soot生成调用图Callgragh,遍历Callgragh直到调用的是第三方库提供的方法,保存遍历到的节点和边;
3)提取数据库中的调用关系生成Pull Request中文件的图表示,数据库保存了程序间所有方法的调用关系,通过分析这些关系过滤出与PullRequest中文件相关的方法,以文件作为图的节点,生成图的邻接表结构;
4)基于深度优先算法遍历获取到的节点和边以及类之间关系的图表示结构,根据遍历的结果确定Pull Request中文件的功能分类,针对不存在关系的文件,根据文件的后缀名统一分类。
3.根据权利要求2所述的基于程序分析的Pull Request功能分类方法,其特征是步骤1)中,针对项目Pull Request中的文件修改和当前项目进行获取;本发明需要对审核PullRequest的场景进行优化,为了在不修改主分支的情况下进行程序分析,程序代码是当前版本和Pull Request中文件的并集,具体的获取程序代码的步骤如下:
S1.1、利用jgit抽取仓库中所有Pull Request,得到每个Pull Request的具体信息,所述的信息包括创建时间,标题,作者,状态和Pull Request中修改的文件;
S1.2、克隆项目到本地仓库中;
S1.3、调用igit中branchCreate().setName(″tempBranch″).call()方法创建临时分支tempBranch,并使用checkout()方法切换到tempBranch分支;
S1.4、对于待分类的Pull Request,根据S1.1中抽取到的信息可以获得该PullRequest所在的分支信息ref;
S1.5、在临时分支tempBranch上合并分支信息ref。
4.根据权利要求2所述的基于程序分析的Pull Request功能分类方法,其特征是步骤2)中,基于程序分析的调用关系图获取方法的调用关系,对于程序代码,通过Soot静态分析框架,选择传递方式构造调用关系图Callgragh,遍历Callgragh直到调用的是第三方库提供的方法,将调用方法作为节点,调用关系作为边,将遍历到的节点和边保存到数据库中,每一条调用的完整记录信息为数据库主键id,调用类,调用方法,被调用类,被调用方法。
5.根据权利要求2所述的基于程序分析的Pull Request功能分类方法,其特征是步骤3)中,对于已经保存在数据库中的调用关系构建图的邻接表结构,作为文件间是否存在关系的统一表示,建立Pull Request包含的文件之间关系的图表示,具体包括以下步骤:
S3.1、从数据库中查询步骤2)中保存的本项目的所有调用关系集合;
S3.2、建立Map结构key,ListNode,key表示步骤1)中抽取的Pull Request修改的文件类;
S3.3、遍历S3.1中查询到的调用关系集合,如果集合的记录中调用类和Map结构中的key相同,则将记录中被调用类加入到key对应的List中;
S3.4、重复S3.3直到遍历完所有的调用关系集合。
6.根据权利要求2所述的基于程序分析的Pull Request功能分类方法,其特征是步骤4)中,基于图的深度优先遍历的算法遍历步骤3)中生成的图的邻接表结构,根据得到的遍历结果,可以将存在关系的多个文件聚类为同一个功能,对于不存在关系的单独文件跟据文件的后缀名统一处理,算法的具体步骤如下:
S4.1、遍历步骤3)中图的邻接表结构,记录每个节点的入度;
S4.2、选择入度为0的节点,基于图的深度优先遍历邻接表;
S4.3、重复S4.2,直到遍历到图中全部的节点,将节点的序列存放在结果集ListListNode中;
S4.4、如果图中不存在入度为0的节点,表明图中的节点相互之间都有调用关系,属于同一个功能,这时只要遍历一次就能够获取到图中所有的节点;
S4.5、遍历S4.3和S4.4得到的结果集,如果一条结果中包含不止一个文件,则将这条结果中的文件分类为一个功能,并将深度遍历的顺序作为功能的审阅顺序;
S4.6、对于结果只包含单独文件的情况,将所有只包含单独文件的结果记录下来;
S4.7、重复S4.6到S4.7,将单独文件按照文件的后缀名统一分类后得到最终的分类结果。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京邮电大学,未经南京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911321383.1/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种再生海岛丝POY工艺
- 下一篇:一种仿生鱼尾部推进转向装置