语句包裹变更模式的识别方法研究
发布时间:2021-01-21 08:07
软件变更过程中,由于软件需求的变化以及软件维护的需要,大量的软件变更代码被提交到软件版本管理系统中,软件代码的结构也变得越来越复杂,使得软件开发人员理解变更代码变得困难,软件变更中掺杂了大量的代码变更模式,将这些模式与其他变更代码分离,将方便理解变更。本文对将一个语句或语句序列移动到一个或多个语法实体中的语句包裹模式进行了研究,做出了如下贡献:首先,由于当前还没有对于语句包裹模式的定义,本文从四个维度对语句包裹模式进行了分类;其次,提出了语句包裹模式的识别算法,算法首先识别发生移动的语句或语句序列,然后通过分析抽象语法树对语句包裹变更模式进行确认;最后,对提出的识别算法进行了实验验证,并对识别出的语句包裹模式进行了分类分析。识别算法首先使用基于文本的差异化分析工具获取代码变更前后版本文件的hunk,然后对存在相似代码行的语句包裹模式候选hunk进行了识别,由于代码克隆检测工具Simian对于语句包裹模式候选hunk的识别结果不理想,提出了基于LCS的语句包裹模式候选hunk识别算法,通过分析代码变更前后版本文件的抽象语法树提出了基于候选hunk和抽象语法树的语句包裹模式识别算法,并提出...
【文章来源】:齐鲁工业大学山东省
【文章页数】:81 页
【学位级别】:硕士
【部分图文】:
语法实体为if的语句包裹模式
第3章语句包裹模式识别方法概述14图3.1取自开源项目jEdit的Macros.java文件,提交号为16a39f4,在上图中,原文件的第154行到第158行代码移动到新版本文件的第155行到第159行的位置,在新版本文件的第153行添加了一个if条件语句,这种代码变更模式就是代码移动到if语法实体的语句包裹模式。在图3.1中,新版本文件的第154行到第160行为新增if语法实体的then部分的行范围,第162行到第178行为新增if语法实体的else部分的行范围。在图3.1中,语句或语句序列移动到了if的then部分,在其他的语句包裹变更模式中,还存在语句或语句序列移动到if的else部分的情况,这也属于语法实体为if的语句包裹变更模式。○2Try语法实体try语句包裹模式指的是语句或语句序列移动到try语法实体中的代码变更行为,分为移动到body分支、catch分支以及finally分支中,以try为语法实体的语句包裹模式如图3.2所示。图3.2try语句包裹模式示意图图3.2中的hunk取自开源项目jEdit的jEdit.java文件,提交号为3363129,原文件中的第3820行代码与新版本文件中第3842行代码是相同的,在新版本文件中的第3840行添加了try语句,原文件的第3820行代码在代码变更后移动到了新版本文件中的try语法结构的body分支中,这种代码变更模式为Try语句包裹变更模式。在图3.2中,新版本文件的第3841行到第3843行为body分支的行范围,第3845到第3850行为catch分支的行范围,在Try语句包裹模式的分类中还包括语句或语句序列移动到try的catch分支或finally分支的情况。○3For语法实体以for语句为语法实体的语句包裹模式如图3.3所示
齐鲁工业大学硕士学位论文15图3.3语法实体为for的语句包裹模式图3.3所示的hunk取自开源项目jEdit的IndentFoldHandler.java文件,提交号为f46579b,在上图中,原文件第56行到第61行代码移动到了新版本文件中的第61行到第64行的位置。这种代码变更行为就是语法实体为for的语句包裹变更模式。○4Switch语法实体以switch语句为语法实体的语句包裹模式如图3.4所示。图3.4语法实体为switch的语句包裹模式图3.4所示的hunk取自开源项目jEdit的BufferSetManager.java文件,提交号为4083efe,在上图中,原文件中的第230行到第231行移动到了新版本文件中的第171行到第172行的位置,这种变更行为就是语法实体为switch的语句包裹变更模式。语法实体为switch的语句包裹变更模式还包括语句移动到default分支的变更类型。○5Synchronized语法实体以Synchronized语句为语法实体的语句包裹模式如图3.5所示。
本文编号:2990797
【文章来源】:齐鲁工业大学山东省
【文章页数】:81 页
【学位级别】:硕士
【部分图文】:
语法实体为if的语句包裹模式
第3章语句包裹模式识别方法概述14图3.1取自开源项目jEdit的Macros.java文件,提交号为16a39f4,在上图中,原文件的第154行到第158行代码移动到新版本文件的第155行到第159行的位置,在新版本文件的第153行添加了一个if条件语句,这种代码变更模式就是代码移动到if语法实体的语句包裹模式。在图3.1中,新版本文件的第154行到第160行为新增if语法实体的then部分的行范围,第162行到第178行为新增if语法实体的else部分的行范围。在图3.1中,语句或语句序列移动到了if的then部分,在其他的语句包裹变更模式中,还存在语句或语句序列移动到if的else部分的情况,这也属于语法实体为if的语句包裹变更模式。○2Try语法实体try语句包裹模式指的是语句或语句序列移动到try语法实体中的代码变更行为,分为移动到body分支、catch分支以及finally分支中,以try为语法实体的语句包裹模式如图3.2所示。图3.2try语句包裹模式示意图图3.2中的hunk取自开源项目jEdit的jEdit.java文件,提交号为3363129,原文件中的第3820行代码与新版本文件中第3842行代码是相同的,在新版本文件中的第3840行添加了try语句,原文件的第3820行代码在代码变更后移动到了新版本文件中的try语法结构的body分支中,这种代码变更模式为Try语句包裹变更模式。在图3.2中,新版本文件的第3841行到第3843行为body分支的行范围,第3845到第3850行为catch分支的行范围,在Try语句包裹模式的分类中还包括语句或语句序列移动到try的catch分支或finally分支的情况。○3For语法实体以for语句为语法实体的语句包裹模式如图3.3所示
齐鲁工业大学硕士学位论文15图3.3语法实体为for的语句包裹模式图3.3所示的hunk取自开源项目jEdit的IndentFoldHandler.java文件,提交号为f46579b,在上图中,原文件第56行到第61行代码移动到了新版本文件中的第61行到第64行的位置。这种代码变更行为就是语法实体为for的语句包裹变更模式。○4Switch语法实体以switch语句为语法实体的语句包裹模式如图3.4所示。图3.4语法实体为switch的语句包裹模式图3.4所示的hunk取自开源项目jEdit的BufferSetManager.java文件,提交号为4083efe,在上图中,原文件中的第230行到第231行移动到了新版本文件中的第171行到第172行的位置,这种变更行为就是语法实体为switch的语句包裹变更模式。语法实体为switch的语句包裹变更模式还包括语句移动到default分支的变更类型。○5Synchronized语法实体以Synchronized语句为语法实体的语句包裹模式如图3.5所示。
本文编号:2990797
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/2990797.html