基于软件演化的代码坏味检测与评估

 2021-12-20 08:12

论文总字数:28623字

摘 要

软件良好的设计质量能使维护和重用变得更加容易和方便,而如果代码中存在各种各样的坏味,那么必将导致软件整体设计质量降低。代码坏味道是因为不良设计或编码而引入程序的影响软件结构的代码。

本文先从对代码坏味道的理解出发,介绍了代码坏味道的定义与分类,接着介绍了几种常见的代码坏味道的检测方法与现有的几种检测工具。在几种代码坏味道检测方法中,选取了基于抽象语法树的检测方法,对抽象语法树的获取与访问也进行了阐述。

本文选取了五种代码坏味道进行研究,详细介绍了这五种代码坏味道的定义,产生的原因和症状及其对软件的影响,探讨了这五种代码坏味道的检测方法以及给出了重构建议。对开源项目JHotDraw的六个版本进行了代码坏味道的检测,检测出版本代码行数,包、类、方法等数量及五种代码坏味道的数量等信息,并对其进行了分析与评估,结果表明,对后续版本的演化结果的预测比较准确。最后,对算法的进一步改进提出了一些想法。

关键词:软件演化,代码坏味道,代码坏味道的检测,代码坏味道的评估

Abstract

Good quality software design allows maintenance and reuse easier and more convenient, but if there are a variety of code smells, then they will lead to lower overall software design quality. Code smell is a piece of code that is poor design or affecting software structure.

This paper begins with the understanding of code smell, introduces the definition and classification of code smell, then introduces several common detection methods and several existing detection tools. From the several detection methods,select a method based on the abstract syntax tree.Then describe the abstract syntax tree’s getting and access.

This paper selects five code smells to study ,introduces the definition of the five code smells in detail, and their causes and symptoms and their impact on the software. We discuss the detection of the five code smells, and gives their reconstruction recommendations.We detect the open source projects named JHotDraw’s , and get the quantity of information like the line of code, the number of packages, classes, methods, and the five code smells, and their analyzes and assessments. The results show that the results of the follow-up version of evolution predictions are more accurate. Finally,we put forward some ideas to further improving of the algorithms.

KEY WORDS: evaluation software evolution, code smell, code smell detection , code smell evaluation

目 录

基于软件演化的代码坏味检测与评估 2

摘 要 2

Abstract 3

第1章 绪论 6

1.1 代码坏味道的理解 6

1.1.1 引言 6

1.1.2 代码坏味道的描述 6

1.1.3 代码坏味道的分类 7

1.2 代码坏味道的检测方法 7

1.2.1 基于文本的检测方法 7

1.2.2 基于度量的检测方法 7

1.2.3 基于聚类的检测方法 7

1.2.4 基于模糊逻辑和概率的检测方法 7

1.2.5 基于抽象语法树的检测方法 8

1.3 代码坏味道的检测工具 8

1.3.1 坏味道检测工具的重要性 8

1.3.2 坏味道检测工具介绍 8

第2章 总体设计 10

2.1 抽象语法树(AST) 10

2.1.1 抽象语法树(AST)介绍 10

2.1.2 抽象语法树(AST)的获取 11

2.1.3 抽象语法树(AST)的访问 11

2.2 研究框架 11

第3章 代码坏味道识别工具的开发 13

3.1 Switch语句(Switch Statements) 13

3.1.1 定义 13

3.1.2 检测算法 14

3.1.3 重构建议 15

3.2 消息链(Message Chains) 15

3.2.1 定义 15

3.2.2 检测算法 16

3.2.3 重构建议 17

3.3 依恋情结(Feature Envy) 17

3.3.1 定义 17

3.3.2 检测算法 17

3.3.3 重构建议 18

3.4 过大的类(Large Class) 18

3.4.1 定义 18

3.4.2 检测算法 19

3.4.3 重构建议 19

3.5 过长的方法(Long Method) 20

3.5.1 定义 20

3.5.2 检测算法 20

3.5.3 重构建议 20

第4章 实验结果与分析 22

第5章 总结和展望 26

参考文献(References) 27

致谢 28

绪论

代码坏味道的理解

引言

软件系统自发布后,软件生命周期通常不会停止。用户在使用软件的过程中,对软件产生新的需求,对原有软件的一些不足之处产生意见,加上计算机硬件的改进,导致了软件的升级换代,因此软件变更是无法避免的,软件的性能与可维护性需要进一步改进。软件演化(Software Evolution)指在软件系统的生命周期内维护软件的行为和过程。软件演化是一个比较复杂的过程,首先软件开发人员数量的增加不一定会导致软件开发效率的增加,人员数量的增加会增加软件开发过程中的交流难度;其次随着用户需求的改变,会使软件产生修改,软件修改又会继续促进用户需求的改变,在修改的过程中,会使软件产生新的错误,因此常常在软件发布新版本后,补丁接踵而来。在软件演化的过程中,软件系统的内部结构会经受不断的修改,这种修改使源代码更加复杂,也使得软件偏离了最初的设计。这种软件设计缺陷可能是软件需求分析不充分和软件初始设计不合理所致。

代码坏味道的描述

代码坏味道(code bad smell)是一种软件设计缺陷,它实际上是代码之中潜在问题的警示信号。不是所有的代码坏味道都是需要修改的,它是程序中出现的不良设计,但是我们还是要对所有的代码坏味道进行查询,对其中容易修改的、会对软件性能提升的部分作出相应的修改。代码坏味道与程序中具体的结构元素相关,且它的出现将导致代码难于理解。代码坏味道是一种软件设计问题,也称代码缺陷(code flaw)和反模式(anti-pattern)。随着软件的不断演化,软件的各个版本中的代码坏味道的数量,类型以及分布情况都可能会发生变化。因而,当软件发生演化时有必要对软件中代码坏味道进行重新检测。通过对代码坏味道的检测,还可以了解代码坏味道引入的原因和分布规律,从而对人们采用什么样的演化措施具有一定的指导意义。

此外,代码坏味道的类型和种类的变化也会影响软件维护的特性。这些软件维护特性包括:代码的可理解性、代码的易变更性(change proneness)和代码的易出错性。研究表明,单个代码坏味道不会显著性降低开发者的业绩,而一个类中若存在多个代码坏味道,则会明显降低开发者的业绩。另一方面,含有代码坏味道的软件部件(如package,class, method, field)可能更容易带来日后代码频繁的变更,也增加了这些部件出错的概率。因此,研究含有代码坏味道的部件与代码的易变更性、易出错性以及软件复杂度之间的关系,可以揭示代码坏味道对软件部件(如package,class, method, field)的危害程度,进而为软件开发者更好地推荐重构方案以消除代码坏味道,增强软件的可理解性和可修改性。由此可见,基于软件演化的代码坏味道检测及对软件影响的研究具有重要的理论和应用价值。

代码坏味道的分类

Fowler 首次对代码坏味道进行了分类,阐述了在程序设计中可能出现的22种代码坏味道,分别是接口不同的相似类(Alternative Classes with Different Interfaces) 、过多的注释(Comments)、数据类(Data Class) 、数据泥团(Data Clump)、发散式改变(Divergent Change)、重复性代码(Duplicated Code)、依恋情结(Feature Envy)、不当的紧密性(Inappropriate Intimacy) 、不完备的库类(Incomplete Library Class)、过大的类(Large Class)、懒惰类(Lazy Class)、过长的方法(Long Method)、过长的参数表(Long Parameter List)、消息链(Message Chains) 、中间人(Middle Man)、并行继承体系(Parallel Inheritance Hierarchies)、基本类型困扰(Primitive Obsession) 、拒收的遗赠(Refused Bequest)、霰弹式修改(Shotgun Surgery)、过分一般性(Speculative Generality) 、Switch语句(Switch Statements) 、临时字段(Temporary Field)。并且描述了这22种代码坏味道在代码中的不良表现,也给出了重构这22种代码坏味道的大致方法[1]。在Fowler提出的22种代码坏味道基础上,Kerievsky[2]补充了5种新的代码坏味道,包括条件逻辑太复杂、不恰当的暴露、解决方案蔓延、组合爆炸等。Abebe[3]从程序代码文本的角度考虑,对其中出现的不良问题,提出了5种新的代码坏味道,并对其进行了详细的描述。Wake等人[4]认为代码坏味道的分类不应该过于复杂,因此提出了一种简单的分类,将代码坏味道分为“类内坏味”和“类外坏味”两种。Mantyla [5]结合自身的开发经验和对代码坏味道的理解,将22种代码坏味道分为7种:过度膨胀(the bloaters)、面向对象滥用(the object orientation abusers)、妨碍修改(the change preventers)、可有可无情况(the dispensables)、封装问题(encapsulators)、高耦合(the couplers)以及其他情况(others)。当前,对代码坏味道的理解仍未达成共识,但是代码坏味道的各种分类方法增强了对代码坏味道的理解,明确了各种代码坏味道之间的关系,深入了对各种代码坏味道的研究。

代码坏味道的检测方法

基于文本的检测方法

基于文本的坏味检测使用文本检索技术,先对源代码进行词法分析,然后将得到一系列的token 串,这些token 串就是要检测的对象,最后通过文本检索技术进行分析,得到代码坏味道检测结果。这个检测方法能够检测出重复性代码、switch语句、平行继承体系、过多的注释这几种与源代码文本信息相关的代码坏味道,不过受文本检索技术的限制,其它代码坏味道不易检测出来。

基于度量的检测方法

基于度量的代码坏味道检测,首先要确定一部分可以代表程序特征的参数,然后从源代码中得到这些参数的具体数值,经过计算公式得到的结果与预先设定的阈值进行比较,最后得到结果,从而判断是否存在相应的代码坏味道。

基于聚类的检测方法

聚类是指将物理或抽象对象的集合分成由类似的对象组成的多个类的过程。通过设计算法,可以计算出一个程序中不同层次部分的内聚性和耦合性的数值,再跟预先设定的阈值进行比较,得到比较结果,虽然它与基于度量的代码坏味道检测一样,也是需要阈值,不过其受阈值的影响比较小,

剩余内容已隐藏,请支付后下载全文,论文总字数:28623字

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;