代码重构的必要性分析及实施建议

代码重构在软件开发过程中,是一项重要非紧急的工作。但大多数情况下,人们都会因为其非紧急,而忽略其重要性。等到代码重构演变成重要且紧急的工作时,一般就只有放弃了,因为由于长期的技术欠债,此时代码已经变得无法扩展,成为一堆僵死的代码。

代码重构的重要性

代码重构是为了使代码具有很好的可读性、可维护性、可扩展性、可重用性。

为什么要进行代码重构?

代码在演化过程中,会由于各种不同的原因,不断产生bad smell。如果不及时清理,bad smell会不断积累,代码逐渐腐化,最终导致代码不可用。

代码腐化产生的可能原因

  1. 为了赶进度,开发人员牺牲了质量。
  2. 业务分析不透彻、技术设计不深入。
  3. 开发人员经验和意识欠缺。
  4. 对设计方案的评审和代码走查重视不够,或者根本就没有这个环节。
  5. 没有专人从业务、技术、人员等各方面拉通全盘考虑。
  6. 前期无法预测后面所有的变化。
  7. 技术团队对使用的相关技术掌握得不够,无法最优化地使用。
  8. 由于软件开发本身的客观规律,代码腐化本身就不可避免。

何时进行重构?

开发人员应该具有随时重构的意识,只要发现bad smell,就应该尝试重构。如果因为有其它原因,暂时无法重构的,我的建议是不超过两个月进行一次系统的重构。

重构涉及的相关人员

开发人员

开发人员是重构的具体执行者,需要具备很高的素质,才能做好重构工作。个人认为,比较重要的素质包括以下几方面:

1.技能

包括技术敏感度、重构的套路方法、系统思考的能力等。

2.责任心

要有很好的质量意识,随时保持对代码出现bad smell的警惕。

3.稳定的情绪

这应该是属于管理层面的问题。如果开发人员的情绪出现的波动,就不会就主动将工作做得更好。

测试人员

测试人员要与开发人员配合,通过各种测试手段和测试用例,降低或避免因重构而引入新的bug。

需求分析人员

需求分析人员除了理清基本的业务逻辑之外,还要能够将各业务进行拆分,理清业务的本质和各业务之间的相互关系。

当有新的需求引入,而导致之前的业务关系有变化时,尤其要重视。此时需求分析人员要与设计、开发、测试人员共同讨论,理清可能会对之前的代码产生哪些冲击,可能会带来哪方面的问题。

系统设计人员

系统设计人员要有非常强的系统思维,同时对业务和技术都能够掌控,这样才能将各功能划分的更清晰、更合理。

上级主管

上级主管不会直接参与重构,但如果上级主管不能够理解重构的重要性,则重构的工作开展到什么程度,完全由开发人员自己的经验、责任心来决定。

虽然重构是非常重要的,但由于重构的效果是偏隐性和长期的,如果重构工作得不到上级主管的认同,则开发人员的重构积极性会被严重挫伤。

等到代码不断腐化以至僵死,开发人员可能就会选择拍屁股走人,这时上级主管也会受到伤害。

为什么重构总是知易行难

这是我个人的感受,不代表所有情况。就我个人的经验,有以下原因:

1.人的惰性

虽然很多时候,开发人员都已经知道了该怎么重构,才能让代码具有更好的扩展性和重用性,但不重构而直接拷贝之前的代码再作简单的修改这样更省事。

2.能力的限制

重构这个概念大家都知道,但真正要能够及时识别出代码中的重构点,并采用最优的方法进行重构,则对能力的要求非常高。不同水平的人,体现在重构上的差别非常大。

这种能力的提升,主要是需要开发人员对自己的代码质量有很高的要求,并不断修炼。

3.没有合适的主导人员

合适的主导人员,在技术上要能够识别出重构点和重构时机,并能自己或者指导开发人员进行有效的重构。在沟通协调上,要能够争取到上级主管的支持和其它业务部门的谅解。

4.缺乏制度的保证

如果能够在制度上,将重构工作常态化,并配以合理的考核机制和主导人员,则我们开发出的软件产品将具有更高的质量、更长的生命周期、带来更大的价值。

原文地址:https://www.cnblogs.com/toothlou/p/8120466.html

时间: 2024-10-19 10:56:36

代码重构的必要性分析及实施建议的相关文章

编码规范和代码重构的一些建议

首先推荐两个工具,一个是Resharper 一个是dotcover 代码应在注释较少的前提下能让别人读的懂,而不是只能让机器读的懂 如果自己都觉得自己写的代码丑,那么请您重构 尽可能的避免重复代码 必要的时候可以使用静态变量来保存查询出来的数据,建议将静态变量设置为只读的并且私有的,通过只读属性来访问它 区别对待静态变量和静态属性 静态属性中直接调用方法,不会带来性能的提升,而静态变量可以 谨慎使用可读的.非私有的静态变量或属性 代码的暴露程度尽可能的低(能用internal不用protecte

编写高质量代码改善C#程序的157个建议——建议91:可见字段应该重构为属性

建议91:可见字段应该重构为属性 字段和属性的本质区别就是属性是方法. 查看下面这个Person类型: class Person { public string Name { get; set; } } 经过编译器编译后,针对属性Name实际会生成一个private字段和两个public方法: [CompilerGenerated] private string <Name>k__BackingField; [CompilerGenerated] public void set_Name(st

CSS代码重构

CSS代码重构的目的 我们写CSS代码时,不仅仅只是完成页面设计的效果,还应该让CSS代码易于管理,维护.我们对CSS代码重构主要有两个目的:1.提高代码性能2.提高代码的可维护性 提高代码性能 提高CSS代码性能主要有两个点:1.提高页面的加载性能提高页面的加载性能,简单说就是减小CSS文件的大小,提高页面的加载速度,尽可以的利用http缓存2.提高CSS代码性能不同的CSS代码,浏览器对其解析的速度也是不一样的,如何提高浏览器解析CSS代码的速度也是我们要考虑的 提高代码的可维护性 提高CS

CSS代码重构与优化之路

写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多,如果没有及时对CSS代码进行维护,CSS代码不断会越来越多.CSS代码交错复杂,像一张庞大的蜘蛛网分布在网站的各个位置,你不知道修改这行代码会有什么影响,所以如果有修改或增加新功能时,开发人员往往不敢去删除旧的冗余的代码,而保险地增加新代码,最终的坏处就是项目中的CSS会越来越多,最终陷入无底洞. CSS代码重构的目的 我们写CSS代码时,不仅仅只是完成页面设计的效果,还应该让CSS代码易于管理,维护.我们对CSS

我的代码重构经验

说明 本文在<MDU某产品OMCI模块代码质量现状分析>一文的基础上,分享作者对该模块进行重构时的实践经验. 具体的重构手段可参考<代码大全2>或<重构:改善既有代码的设计>,本文不再班门弄斧,而侧重重构时一些粗浅的“方法论”,旨在提高重构效率. 作者未采用重量级的重构工具,仅用到Source Insight的”Smart Rename”功能.也未使用CUnit等单元测试工具,而是通过在线调测和自动化测试保证代码的正确性. 一 背景 MDU系列产品从他处接手,OMCI模

智能车间规划和实施建议

1 应用背景 最近一段时间,笔者帮助很多客户做了智能车间或数字化车间的规划,感觉各行各业对数字化车间和智能车间的建设热情很高,一上来就说要建设什么系统,要达到设计.工艺和生产一体化,物流.信息流和资金流一致等目标.这些都没错,但仔细分析,发现这些应该是实施智能车间带来的效果,完全作为目标显然丢失了智能制造和信息化的"初心".而且,很多人对信息化理解有偏差,将"信息化"理解成"信息系统的规划和应用",其实信息化更是孕育着企业商业模式.生产模式.运营

NET代码重构

记一次.NET代码重构 好久没写代码了,终于好不容易接到了开发任务,一看时间还挺充足的,我就慢慢整吧,若是遇上赶进度,基本上直接是功能优先,完全不考虑设计.你可以认为我完全没有追求,当身后有鞭子使劲赶的时候,神马设计都是浮云,按时上线才是王道,毕竟领导是不会关注过程和代码质量的,领导只看结果,这也许就是我等天朝码农的悲哀. 需求:是这样的,要开发一个短信发送的模板,不同客户可能会使用不同的模板,而不同的客户使用的变量参数也是不同的.之前为了应急,线上已经完成了一个短信模板发送短信的功能,短信模板

代码重构(一):函数重构规则

重构是项目做到 一定程度后必然要做的事情.代码重构,可以改善既有的代码设计,增强既有工程的可扩充.可维护性.随着项目需求的不断迭代,需求的不断更新,我们在项目中 所写的代码也在时时刻刻的在变化之中.在一次新的需求中,你添加了某些功能模块,但这些功能模块有可能在下一次需求中不在适用.或者你因为需求迭代与变 更,使你原有的方法或者类变得臃肿,以及各个模块或者层次之间耦合度增加.此时,你要考虑重构了. 重构,在<重构,改善既有代码的设计>这本经典的书中给出了定义,大概就是:在不改变代码对外的表现的情

编写高质量代码改善java程序的151个建议——导航开篇

2014-05-16 09:08 by Jeff Li 前言 系列文章:[传送门] 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,惨不忍睹是吧.确实,人和代码一样都在成长,都在变好当中.有时候只是实现功能的编程,长进不了呀. 博客提供的好处就可以交流,讨论的学习方法你们应该知道. 在这里,我会陆陆续续的进行对<编写高质量代码改善java程序的151个建议>看法,希望大家点击交流. 正文 看这本书原因   1.项目做的只是实现功能,然而没有好好