论文笔记-代码坏味检测

代码坏味检测

代码坏味检测是什么?

代码坏味检测是软件重构中的一个重要步骤。它不会妨碍程序的预期功能,但是会随着时间的推移对软件系统造成一定的缺陷,导致高额的维护成本。

软件维护过程中的软件重构环节可以有助于提高软件质量,软件重构可以种族软件应用程序的内部结构而不改变其外部行为。重构的三个步骤:确定软件应该重构的位置;确定哪些重构应该应用于已识别的位置;评估重构对软件质量的影响。代码坏味一词出现在确定软件应该重构的位置这一环节

22种代码味道

Martin Fowler在《Refactoring: Improving the Design of Existing Code》书中总结22种代码坏味

类内味道

1、Measured Smells(可度量的味道)
(1)Long Method(过长方法)
(2)Large Class(过大类)
一个类试图做太多的事情,通常会出现太多的实例变量
(3)Long Parameter List(过长的参数列)
一个方法需要传递太多的参数。
(4)Comments(过多的注释)
在非必要的情况下不要写注释。当你觉得需要去写一段注释时,你首先应该尝试去重构代码,这将使任何注释都变得是多余的

2、Unneccessary Complexity(不必要的复杂性)
(5) Speculative Generality(夸夸其谈的未来性)
如果一个装置【一个设计或实现方案】会被用到,那就值得去做;如果用不到,就不值得。用不到的装置会成为拦路石,因此需要将它搬移。

3、Duplication(重复)
(6)Duplication Code(重复代码)
在一个以上的地方发现重复的代码结构
(7)Alternative Classes with Different Interfaces(异曲同工的类)
不同的类做相同的事情,却拥有不同的签名,主要是指方法签名不同。

4、Conditional Logic(条件逻辑)
(8)Switch Statements(Switch惊悚现身)
Switch语句通常会导致代码重复。大多数时候,一看到Switch语句应该考虑使用多态来替换

类间味道

1、Data(数据)
(9)Primitive Obsession(基本偏执类型)
在软件中,基本类型被过度使用。在某些场合下,应该使用一些小的类来代替这些基本类型。
(10) Data Class(纯稚的数据类)
这些类拥有一些字段【成员变量】,并提供了对应的Getter和Setter方法,除此以外一无所有。这些类只是一些不会说话的数据容器, 而且它们必定会被其他类过分琐细地操作。
(11) Data Clumps(数据泥团)
一些数据项同时出现在多个地方:例如一对类中的值域【成员变量】,多个方法签名中的参数等。
(12) Temporary Field(令人迷惑的暂时值域)
有时候你会看到一个对象的实例变量仅为某些特定的场合而设。这样的代码将导致难以理解,因为你期望一个对象需要它所有的变量

2、Inheritance(继承)
(13) Refused Bequest(被拒绝的遗赠)
子类继承父类的方法和数据,但是它们只需要使用其中的一部分。
(14) Inappropriate Intimacy(狎昵关系)
有时候,类之间的关系变得非常亲密,并且需要花费大量时间来探究彼此之间的私有成分
(15) Lazy Class(冗赘类)
你所创建的每个类都需要花钱去维护和理解。一个类如果不值其身价,它就应该消失。

3、Responsibility(职责)
(16) Feature Envy(依恋情节、特征嫉妒)
对象的全部要点在于它是一种封装数据以及施加于这些数据的处理过程的技术。依恋情节是指一个方法对别的类的兴趣高过它本身所在的类
(17) Message Chains(过度耦合的消息链)
你看到的消息链是这样的:当一个客户端向一个对象请求另一个对象,然后再向后者请求另一个对象,然后再请求另一个对象,如此反复。这种方式的导航意味着客户端将与整个导航结构紧密耦合在一起。一旦对象之间的联系发生任何改变,将导致客户端也不得不做出相应的修改。
(18) Middle Man(中间转手人)
当你审查一个类的接口时发现其中有一半的方法都委托给了其他类,这也许就意味着存在问题了。

4、Accommodating Change(协调变化)
(19) Divergent Change(发散式变化)
如果某个类经常因为不同的原因在不同的方向上发生变化就会产生发散式变化。也就是说,一个类拥有多个引起它发生变化的原因。
(20) Shotgun Surgery(霰弹式修改)
霰弹式修改与发散式变化类似,却又存在相反的一面。每次进行某种修改时,你都必须对多个不同的类进行很多对应的小修改。
(21) Parallel Inheritance Hierarchies(平行继承体系)
平行继承体系是霰弹式修改的一个特例。在这种情况下,当你为某个类增加一个子类时,你不得不为另一个类也相应增加一个子类。你也许能够识别到这种味道,因为一个继承体系中类的类名前缀与另一个体系中的类名前缀一样。

5、Library Classes(库类)
(22) Incomplete Library Class(不完善的程序库类)
库类在使用时一定要小心,特别是在我们不知道一个库是否完整时。

有哪些方面的工作已经做了?

有哪些方面的工作可以做?

《基于深度学习的代码坏味检测方法》

软件质量高、好的软件结构是高内聚低耦合的。

文章研究要点:
1、本文选取六种代码坏味:过紧的耦合、分散的耦合、散弹式修改、特征嫉妒、上帝类、数据类
2、生成用于代码坏味检测的数据集(测试集--使用iPlasma工具提取软件项目的度量,使用工具进行标记并手动验证。训练集--使用欠采样和过采样算法处理标记数据中的数据不均衡情况)
3、深度学习模型进行代码坏味检测。注意力机制用来分配权重,CNN提取特征
4、系统集成

代码坏味:

代码坏味分为三类:应用程序级,类级,方法级。本文共检测了六种代码坏味,分别为过紧的耦合分散的耦合散弹式修改特征嫉妒上帝类数据类

posted @   菜鸟C_5022  阅读(242)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示