当前位置:主页 > 科技论文 > 软件论文 >

语句分裂变更模式的识别

发布时间:2021-10-17 13:29
  现代软件的开发和维护大多都是基于版本控制系统进行的,这很大程度提高了多名开发人员协作开发软件的工作效率,但想要达到最好的协作开发效果,就要求每一位参与软件开发及维护的人员都要很好的理解软件各版本的代码变更,但是多种代码变更模式的相互掺杂使得对于这些代码变更的理解变得十分困难,为了解决这一问题,研究人员开始对常见的代码变更模式进行研究,例如对重构和缺陷修复等典型代码变更模式的研究已形成较为成熟完善的理论体系,并通过将这些研究成果运用于代码变更模式的自动识别,实现了这些变更模式的定位及相互分离,从而帮助开发人员高效的阅读和理解代码变更。语句分裂变更模式是一种常见的将一条代码语句分裂改写成多条语句的代码变更模式,该模式一般是将原有代码语句中较为复杂的表达式赋值给新变量之后,再用此变量替换原句中的这一表达式,该模式类似于代码重构模式中的替换算法,不同的是替换算法是一种函数体层面的重构手法,而语句分裂变更模式则是一种应用更为广泛的代码语句层面的代码变更模式,除此之外在分裂变更的过程中也会经常在不同的部分增加新的内容,这使得语句分裂变更模式呈现出多种不同的形式,原有语句的功能也很可能会因此发生变化... 

【文章来源】:齐鲁工业大学山东省

【文章页数】:80 页

【学位级别】:硕士

【部分图文】:

语句分裂变更模式的识别


语句分裂变更模式的研究方案

序列,源数据,数据库,工具


齐鲁工业大学硕士学位论文17图3.2MySql数据库中的源数据集在获取了上述源数据集后,接下来就要对其进行人工筛选,找出包含语句分裂变更模式的变更信息,作为语句分裂变更模式的变更数据集,为此本文利用git项目客户端管理工具SourceTree2对源数据集进行人工筛选,首先将源数据集克隆到该工具中,如图3.3所示克隆后源数据集中的各种相关信息就会通过该工具的可视化界面被完整而清晰的展示出来,界面的上方是每次更改提交的标签、时间、作者以及提交号,左下方是本次提交的更改中涉及到的源文件名,右下方则是展示对每个源文件的更改具体内容。图3.3SourceTree可视化变更信息展示图3.3中右下方的变更内容展示是通过文本差异化分析工具实现的,文本差异分析工具将更改前后的源文件视为字符串,通过计算公共子序列来判别发生变动的文本,并将这些文本信息以及对应的行号以代码变更块(hunk)为2SourceTree:https://www.sourcetreeapp.com/

数据库表,数据集,语句,代码


齐鲁工业大学硕士学位论文19表3.1四个源数据集的人工筛选结果项目名称抽取时间段提交次数文件个数语句分裂变更模式代码块个数JEditmavenguiceEclipse1998/09/27~2012/08/082003/09/02-2014/01/292006/08/23-2013/12/122001/06/23~2013/10/166275884510041912314163051117273461016521315经过对4个开源项目源数据集的人工筛选,从中获取到了包含语句分裂变更模式的代码变更块hunk的数据集,并且以表格的形式记录下了每个hunk的提交号和文件名,最后再将该表格存入数据库中如图3.5所示,每个项目的筛选情况如下:JEdit项目中包含了对1416个项目文件的6275次更改,从中获取到101个语句分裂变更模式的代码变更块;maven项目中包含了对3051个项目文件的8845次更改,从中获取到65个语句分裂变更模式的代码变更块;guice项目中包含了对1172个项目文件的1004次更改,从中获取到21个语句分裂变更模式的代码变更块;Eclipse项目中包含了对7346个项目文件的19123次更改,从中获取到315个语句分裂变更模式的代码变更块。图3.5人工筛选数据集的数据库表3.3语句分裂变更模式两种形式的定义基于对上述人工筛选出的语句分裂变更模式hunk数据集文本特征的分析,发现该模式存在两种基本形式,本文将这两种形式分别命名为拆分形式和替换形式,对于这两种形式的研究是以文本差异分析工具输出的代码变更块(hunk)为单位的,所以首先要对hunk进行定义。定义1:代码变更块hunk可以用四元组h=<L-,L+,R-,R+>的形式来表示,其中的元素L-和L+分别代表删除行和增加行的文本内容,元素R-和R+分别代表删除行和增加行的行号范围。

【参考文献】:
期刊论文
[1]代码坏味对软件演化影响的实证研究[J]. 章晓芳,朱灿.  软件学报. 2019(05)
[2]基于版本的多重软件重构自动检测技术研究[J]. 钟林辉,黄小明,薛良波,叶海涛.  江西师范大学学报(自然科学版). 2018(05)
[3]代码审查在软件工程实施中的重要性[J]. 井涛.  电子技术与软件工程. 2017(21)
[4]基于邻域三支决策粗糙集模型的软件缺陷预测方法[J]. 李伟湋,郭鸿昌.  数据采集与处理. 2017(01)
[5]基于双重维度发现代码变更模式的挖掘方法[J]. 左翔宇,刘婧,何璐璐.  计算机应用研究. 2017(08)
[6]面向设计的开源软件项目重构经验研究[J]. 阮航,陈恒,彭鑫,赵文耘.  计算机科学与探索. 2017(09)
[7]基于JavaCC的抽象语法树的构建与实现[J]. 黄松,黄玉,惠战伟.  计算机工程与设计. 2016(04)
[8]故障注入的软件代码缺陷模式[J]. 贺仁亚,唐龙利.  指挥信息系统与技术. 2015(06)
[9]大规模软件系统日志研究综述[J]. 廖湘科,李姗姗,董威,贾周阳,刘晓东,周书林.  软件学报. 2016(08)
[10]面向程序自动修复的缺陷分类方法研究[J]. 易昕,毛晓光,纪涛.  计算机应用研究. 2016(06)

硕士论文
[1]Pyreview:一个基于抽象语法树差异提取的Python源代码分析工具[D]. 李清言.南京大学 2016



本文编号:3441843

资料下载
论文发表

本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/3441843.html


Copyright(c)文论论文网All Rights Reserved | 网站地图 |

版权申明:资料由用户e4cb8***提供,本站仅收录摘要或目录,作者需要删除请E-mail邮箱bigeng88@qq.com