【外刊IT评论网】如何避免重构带来的危险

标签: 心得体会 重构 | 发表时间:2012-11-08 00:04 | 作者:Aqee
出处:http://www.aqee.net

重构代码很危险,它会给测试工作增加巨大的负担。除非你的程序需要重构,一定不要轻易重构代码。我这里所说的并不是把一个for循环改成while循环,或把一个StringBuffer改成StringBuilder,我说的是大动作,例如重写一个方法,一个函数,甚至整个类或包。如果你缺乏对一个方法或一个类的了解,那你重构它的条件就不充分。即使你有一个天才的计划,你也需要和团队一起设计其中重大的修改。

当属于下列情况时,你不该重构

  • 对于你来说,它的逻辑看起来过于复杂,你没有花时间去分析它。
  • 你不理解为什么前任程序员要这样编写。
  • 你着手的是一个很重要的系统,而且时间很紧。
  • 你是团队里的新成员,或新接触这个项目,或这种语言。

当属于下列情况时,你可以重构

  • 现有的代码对它要实现的功能显得过于复杂,并且你分析过它。
  • 修改后的代码远比现存的代码逻辑要清晰。
  • 你有足够的时间,人手,财力来支持对项目进行回归测试。
  • 现有的代码陈旧无效率。
    • 无人认领的,写的很烂的代码都属于此类。
  • 跟你的一位同事谈论对这部分程序进行重构的好处和存在的风险,你们两个都赞成重构。

如何降低重构的风险

权衡一下对一段代码进行重构的利与弊,找出降低风险的方法。调试一段你经过重构但却使产品崩溃的代码,这对你来说将会是在这个行业中最有压力的事情。

  • 使用自动化的回归测试,快速的验证你的修改。这非常重要,如果没有准备自动化测试,你应该在做任何修改前建好它。
  • 尽量让你的重构处于很短的开发周期,产品更新发布周期也尽可能短。
  • 把你重构的代码和其它程序隔离开,这样能让你更容易找到出问题的地方。
  • 为你的重构活动准备测试计划,包括回归测试,功能测试,反向测试,负载测试,性能测试和用户确认测试。
  • 投入全部精力来研究其中的逻辑,不要分心做其它事情。
  • 在需要的地方使用设计模式。不要为了设计模式而增加设计模式。设计模式应该用在合适的时间和合适地方。

小粒度重构

当你在开封一个方法时,如果你发现其中有一部分可以改进,那你就该考虑它,改进它。整洁的代码是我们需要的,因为写的很烂的代码我们到处可见。和你的同事讨论它们,当有人要修改你的代码时不要固守己见。重构,然后回归测试,然后才提交代码。没有人希望自己提交的代码会弄垮系统。

下面是一些比较有深度的阅读材料。

忍住你的欲望,不要试图重构你不理解的代码。多问问题,努力能清楚他们为什么要把程序写成这样。也许他们有很好的理由。如果你找到一段很古老的代码,很有可能它们是按照古老的方式写的。每天都在新增的API,模式,需求和新领会都会让这些老的方式显得陈旧。不断努力学习新的技术,但不要为了要使用这些技术而过于热心的在重构中使用它们。


本文来自 外刊IT评论网( www.aqee.net),原始地址: 如何避免重构带来的危险


相关 [it 重构] 推荐:

代码重构

- - ITeye博客
随着程序的演化,我们有必要重新思考早先的决策,并重写部分代码. 代码需要演化;它不是静态的事物. 重写、重做和重新架构代码合起来,称为重构.    当你遇到绊脚石  ---  代码不在合适,你注意到有两样东西其实应该合并或是其他任何对你来说是"错误"的东西  -------- . 如果代码具备以下特征,你都应该考虑重构代码:.

Sunny谈重构

- - CSDN博客架构设计推荐文章
       按照软件工程大神Martin Fowler的定义, 重构就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,进而提高软件的可扩展性和可维护性. 这是重构的定义,简单来说就是不改变软件的功能,优化软件设计和代码,让软件更易于扩展和维护,当然也包括易于复用.

代码重构总结

- - 开源软件 - ITeye博客
重构:对软件内部结构的一种调整,目的是在不改变软件之可察行为前提下,提高其理解性,降低其修改成本. 创建一个新方法,命名以它做什么来命名,而不是怎么做来命名. 如果只是简单的委托,可以将方法内联. 被子类继承的方法不能内联. 如果一个临时变量只被简单的表达式赋值一次,就可以将它内联. 将这个临时变量申明为final.

代码坏味道——重构

- - CSDN博客推荐文章
1.    Duplicated Code(重复的代码). 臭味行列中首当其冲的就是Duplicated Code. 如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好. 最单纯的Duplicated Code就是[同一个class内的两个函数含有相同表达式(expression)].

【外刊IT评论网】什么是重构,什么不是重构

- - 外刊IT评论网
  有时候,会有程序员跑到我这里说他们不喜欢某个东西的设计,“我们需要给它来个全面的重构”,来纠正里面的错误.   重构(Refactoring)这个词最初由Martin Fowler 和 Kent Beck给下的定义,它是. 一种修改,使软件的内部结构更容易理解,在不改变软件的可见行为方式前提下使软件更容易变更…它是一种有节制的整理代码、使bug产生几率最小化的方法.

重构代码的7个阶段

- 风子 - 酷壳 - CoolShell.cn
你曾去想重构一个很老的模块,但是你只看了一眼你就恶心极了. 文档,奇怪的函数和类的命名,等等,整个模块就像一个带着脚镣的衣衫褴褛的人,虽然能走,但是其已经让人感到很不舒服. 面对这种情况,真正的程序员会是不会认输的,他们会接受挑战认真分析,那怕重写也在所不惜. 最终那个模块会被他们重构,就像以前和大家介绍过的那些令人销魂的编程方式中的屠宰式编程一样.

用Mikado方法重构遗留软件

- - InfoQ cn
在敏捷印度2012的一次研讨会上, Daniel Brolund介绍了 Mikado方法. 此方法主张敏捷团队在面临低质的遗留代码时,采用简单的方法,分成小部分逐步完成重构. 通常,当你想在遗留应用程序中做个简单的改动时,经常会有某些事情出错而使这个改动无法执行——如编译出错、验收测试失败(如果有验收测试.

重构时应避免过度思考

- - InfoQ cn
重构是一门在不改变软件外部行为情况下,改善既有代码内部结构的一门技术. 从表面来看,重构需要引入大量的思考行为,然而,过度地思考同样会产生不利的影响. Kent Beck提到,重构中面临 最大的挑战就是如何做到循序渐进,循序渐进指的是如何将工作分解为可控的步骤,并且每个步骤都易于管理. 重构步伐过快会导致不稳定代码的出现.

代码重构方向原则指导

- - 外刊IT评论
提示:如果您在阅读器里点击订阅本站的文章链接时发现有一个中转页,这说明你的订阅地址有误,本站的订阅地址(RSS)是:. http://www.aqee.net/feed/,请及时纠正. 重构是一种对软件进行修改的行为,但它并不改变软件的功能特征,而是通过让软件程序更清晰,更简洁和更条理来改进软件的质量.

代码重构:HTML与语义化

- - 标点符
在前端开发过程中,很多人谈到“模块化”,很少人特别关注“语义化”,简单的说大多数人更关注功能的实现,而忽视了实现的细节. 所谓HTML语义化,就是尽可能的理解要表达的内容,选择适合的HTML标签,将内容转换成浏览器认识的语言,通过浏览器传达信息给用户. 目前很多的前端书籍取名就叫精通DIV+CSS,让人感觉DIV可以搞定一切,但是DIV标签仅代表一个块状标记,HTML的每个标签都有它特定的意义,而语义化就是让我们在适当的位置用适当的标签,以更好的让人和机器(机器可理解为浏览器可理解为搜索引擎)都一目了然.