[发明专利]一种面向软件代码单元和代码度量的代码变更序列方法有效
申请号: | 202010077082.5 | 申请日: | 2020-01-23 |
公开(公告)号: | CN111290777B | 公开(公告)日: | 2021-09-17 |
发明(设计)人: | 吴毅坚;彭鑫;陈碧欢 | 申请(专利权)人: | 复旦大学 |
主分类号: | G06F8/71 | 分类号: | G06F8/71 |
代理公司: | 上海正旦专利代理有限公司 31200 | 代理人: | 陆飞;陆尤 |
地址: | 200433 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 软件 代码 单元 度量 变更 序列 方法 | ||
1.一种面向软件代码单元和代码度量的代码变更序列方法,其特征在于,对于给定的软件代码单元或度量,在代码版本库中自动分析相关的代码修改,输出代码修改历史中造成给定代码单元内容或度量值变化的相关提交,具体步骤如下:
(1)对代码变更序列起点版本v中的所有代码单元,给定唯一标识;
(2)对给定版本v的给定代码单元集合E或给定代码单元的软件度量集M,获取所给定代码单元所在文件及其起止行号,即代码范围Rc,其中c是给定版本v的代码提交;
(3)分析代码提交c前的代码修改,得到代码范围Rc中所有行号在代码提交c之前的行号范围Ro;
(4)通过代码差异分析技术,分析代码提交c前后代码范围Ro和行号范围Rc内的代码对应关系,建立前后行号范围内所有代码单元的对应;若Ro与Rc范围内代码存在差异或代码提交前软件度量集M的度量值与代码提交后的度量值不同,则将代码提交c的基本信息加入代码变更序列结果;其中,基本信息包括代码提交唯一编号、提交者、代码修改内容、提交说明信息;
(5)从代码提交c开始取相邻前一次代码提交c’,作为给定版本,重复步骤(2)-(5),直到取完所有的演化历史提交或者到达给定的分析时间起点;
(6)输出代码变更序列结果,该结果包含所有涉及给定代码单元集合E修改或使软件度量集M度量值发生变化的提交。
2. 根据权利要求1所述的方法,其特征在于,步骤(1)中,代码中所有语句均给定一个唯一标识,并通过代码提交历史中的代码修改信息建立前后版本的追踪关系;每个代码单元表示为一个四元组S(id, startLine, endLine, parentElementId);其中,id为代码单元的全局唯一标识, startLine和endLine为代码单元的起止行号,parentElementId为该代码单元直接隶属的上层代码单元的唯一标识;通过parentElementId级联查询可获取该段代码所在的文件;这里,代码单元包括语句、方法、文件。
3.根据权利要求1所述的方法,其特征在于,步骤(3)中,先获取代码提交c所涉及的文件集F,然后判定步骤(2)中确定的Rc范围是否在文件集F的任意一个文件中;若是,则分析所在文件在提交前后代码差异实现代码行映射,获取Ro;若否,则说明c并未修改待切片的代码,取下一个代码提交c’,回到步骤(2)。
4.根据权利要求3中所述的方法,其特征在于,通过语句级差异比较为Ro中的代码单元确定唯一标识,映射成功的代码单元具有与Rc中对应代码单元的唯一标识,即实现映射;未能建立映射的代码单元,则分配新的代码单元唯一标识。
5.根据权利要求1所述的方法,其特征在于,步骤(4)中,采用以下规则判定Ro与Rc范围内的代码是否存在差异:若Ro与Rc范围内的代码单元唯一标识及其出现的顺序完全相同,则不存在差异;否则,认为存在差异。
6.根据权利要求1所述的方法,其特征在于,步骤(4)中,采用以下规则判定Ro与Rc范围内的代码是否在软件度量集M上存在度量值差异:若Ro和Rc范围内代码无差异,则软件度量集M上的度量值无差异;否则,对Ro和Rc范围内的代码快照测量软件度量集M的取值,若取值相同则认为不存在差异,否则,认为存在差异。
7.根据权利要求1所述的方法,其特征在于,步骤(5)中应对指定时间范围内的每个提交做相应的检测。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于复旦大学,未经复旦大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010077082.5/1.html,转载请声明来源钻瓜专利网。