http://blog.jobbole.com/30049/

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

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

● 对于你来说,它的逻辑看起来过于复杂,你没有花时间去分析它。

● 你不理解为什么前任程序员要这样编写。

● 你着手的是一个很重要的系统,而且时间很紧。

● 你是团队里的新成员,或新接触这个项目,或这种语言。

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

● 现有的代码对它要实现的功能显得过于复杂,并且你分析过它。

● 修改后的代码远比现存的代码逻辑要清晰。

● 你有足够的时间,人手,财力来支持对项目进行回归测试。

● 现有的代码陈旧无效率。

○无人认领的,写的很烂的代码都属于此类。

● 跟你的一位同事谈论对这部分程序进行重构的好处和存在的风险,你们两个都赞成重构。

如何降低重构的风险

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

● 使用自动化的回归测试,快速的验证你的修改。这非常重要,如果没有准备自动化测试,你应该在做任何修改前建好它。

● 尽量让你的重构处于很短的开发周期,产品更新发布周期也尽可能短。

● 把你重构的代码和其它程序隔离开,这样能让你更容易找到出问题的地方。

● 为你的重构活动准备测试计划,包括回归测试,功能测试,反向测试,负载测试,性能测试和用户确认测试。

● 投入全部精力来研究其中的逻辑,不要分心做其它事情。

● 在需要的地方使用设计模式。不要为了设计模式而增加设计模式。设计模式应该用在合适的时间和合适地方。

小粒度重构

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

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

● 《重构:改善既有代码的设计》

● 《代码整洁之道》

● 《Working Effectively with Legacy Code》

● 《程序员的职业素养》

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

转载于:https://www.cnblogs.com/code-style/p/3336240.html

如何避免重构带来的危险相关推荐

  1. 微信团队分享:微信支付代码重构带来的移动端软件架构上的思考

    本文原文由微信客户端高级工程师方秋枋原创发表于WeMobileDev公众号,收录时有修订和加工,感谢作者的无私分享. 1.引言 作为一个重要业务,微信支付在客户端上面临着各种问题. 其中最核心问题就是 ...

  2. 由Mifare 1卡破解带来的危险以及应对方法

    今年年初以来,一个消息的传出震惊了整个IC卡行业.最近,德国和美国的研究人员成功地破解了NXP的Mifare1芯片的安全算法.Mifare1芯片主要用于门禁系统访问控制卡,以及一些小额支付卡,应用范围 ...

  3. 外刊IT网站经典计算机开发,评论,总结文章汇总共享

    全部文章 ·        2013年十二月 (19) ·        25: 辞掉你的工作,去开发一个应用:我的创业故事 (5) ·        24: 你是一个努力工作的程序员吗?还是一个懒惰 ...

  4. 不要写完代码就束之高阁,适当地优化代码结构,能够为以后的开发带来许多方便,这《重构:改善既有代码的设计》就向你介绍了这方面的技巧,说得非常详细。...

    "不要写完代码就束之高阁,适当地优化代码结构,能够为以后的开发带来许多方便,这<重构:改善既有代码的设计>就向你介绍了这方面的技巧,说得非常详细." "程序几 ...

  5. Maven实战(二)——POM重构之增还是删

    重构是广大开发者再熟悉不过的技术,在Martin Fowler的<重构--改善既有代码的设计>一书中,其定义为"重构(名词):对软件内部结构的一种调整,目的是在不改变软件之可察行 ...

  6. 系统重构的原则代码重构的原则

    作者:[美]马丁•福勒(Martin Fowler) 译者:熊节, 林从羽 前一章所举的例子应该已经让你对重构有了一个良好的感觉.现在,我们应该回头看看重构的一些大原则. ##2.1 何谓重构 一线的 ...

  7. 人人都要懂的代码重构

    0 目录 1 心得体会 2 理解重构 2.1 为什么要做重构?因为代码腐化 2.2 为什么代码会腐化 2.2.1 破窗效应(Broken windows theory)和惯性 2.2.2 技术债务(T ...

  8. 一个关于Java程序安全意识重构的工具

    一个关于Java程序安全意识重构的工具 丸山胜久 日本立命馆大学计算机科学系 maru@cs.ritsumei.ac.jp 大森孝之 日本立命馆大学计算机科学系 takayuki@fse.cs.rit ...

  9. 重构:一项常常被忽略的基本功

    摘要: 每一个程序员都应该读的一本书. 原文:重构:一项常常被忽略的基本功 作者:hengg Fundebug经授权转载,版权归原作者所有. 五月初的时候朋友和我说<重构>出第 2 版了, ...

最新文章

  1. python3和Python2的区别
  2. [动态库]动态库生成和使用以及Makefile编写
  3. dpkg:处理 xxx (--configure)时出错解决办法
  4. maximo 自定义高级数据选择对话框(非表域实现)
  5. 课程 | 《知识图谱》第二期重磅来袭!
  6. CDOJ--1850
  7. TextView的跑马灯效果(AS开发实战第二章学习笔记)
  8. webpack入门总结1
  9. IDEA背景颜色及背景图片设置
  10. SQLServer安装时哪些功能是必需的(sql server 2016安装时选择哪些功能)
  11. bat计算机清理原理,如何一键清除系统垃圾bat,教您如何清理
  12. 10行java代码实现email代码表白感恩节必备~
  13. win10--笔记本能连上手机热点,但不能连接WIFI
  14. 反编译so库破解so
  15. 人工智能实验-使用遗传算法求函数最值
  16. 行人与车辆检测计数人脸识别
  17. POJ - 1375
  18. 2020京东校园招聘笔试编码题小分享--大小写切换
  19. OC中的^怎么理解?
  20. 《四平青年》是部好电影

热门文章

  1. 树莓派siri homekit_利用树莓派Zero自制一款Homekit摄像头,看上去挺酷,手痒了吗?...
  2. antd自定义分页器_自定义分页器
  3. python3.8.5是python3吗_Python 升级到3.8.5
  4. 求整型数组所有子串的和中的最大值
  5. Ant Design Pro 网络请求,视图绑定model并且渲染到页面 umi-request
  6. ext前后台数据传输的标准化
  7. puppeteer爬虫的奇妙之旅
  8. jstl c:choose、c:when和c:otherwise标签
  9. 新疆弃光量下降14% 弃光问题仍然难解
  10. python3 的 round 函数的 练习