`
wenjinglian
  • 浏览: 817823 次
  • 性别: Icon_minigender_1
  • 来自: 株洲->深圳
社区版块
存档分类
最新评论

如何避免重构带来的危险

阅读更多

 

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

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

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

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

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

如何降低重构的风险

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

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

小粒度重构

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

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

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

[本文英文原文链接:Avoid the dangers of refactoring ]

 

外刊IT评论 http://www.aqee.net/ 

分享到:
评论

相关推荐

    重构代码很危险:如何避免重构带来的危险

    重构代码很危险:如何避免重构带来的危险?重构代码很危险,它会给测试工作增加巨大的负担。除非你的程序需要重构,一定不要轻易重构代码。我这里所说的并不是把一个for循环改成while循环,  重构代码很危险,它会给...

    5G前景展望系列:变革关键服务, 促进经济复苏,迎接大重构时代 -WEF pwc.rar

    医生可以实时进行远程手术,自动驾驶汽车能够迅速做出决策,避免潜在危险,从而大大提高效率和安全性。 其次,5G将推动工业4.0的发展。在智能制造领域,5G可以实现设备间的高速通讯,使工厂自动化水平达到前所未有...

    【面向3D图像重构的100G-FMCW-MIMO雷达】.pdf

    在未知地形或能见度不佳的情况下驾驶直升机时,获取着陆地点的信息至关重要,以避免危险情况的发生。例如,在恶劣天气条件下,旋翼产生的风力可能会扬起沙尘、雪花等颗粒,形成遮挡视线的云团,即所谓的“棕色云”...

    轉移到微服務架構的必經之路-資料庫重構.pptx

    这些策略采用渐进式的方式,避免了一刀切的危险。 然而,当涉及到数据库时,重构的挑战变得更为复杂。数据库通常具有强关联性和事务处理的需求,这与微服务的理念相冲突。是否可以将数据库“微服务化”成为了一个...

    20140219_自我批判,不断超越1

    总的来说,华为此次组织变革的目的是强化IT技术能力,贴近客户需求,优化全球资源配置,并实现区域化和本地化运营,以抓住云计算和ICT融合带来的商业机遇,确保公司的持续健康和可持续增长。同时,华为也意识到...

    PHP_diseval_extension-master

    然而,由于安全和性能问题,`eval()`在很多情况下被视为潜在的危险。... 1. **`eval()`的危险性**: - **安全风险**:`eval()`可以...通过这个扩展,开发者可以在保证安全性和性能的同时,避免`eval()`带来的潜在问题。

    工业机器人研究现状及发展趋势.pdf

    独立移动的可重构模块化机器人可以在危险环境中高效工作,而自组装和自重构的模块化机器人则展现了未来的无限可能性。 工业机器人的发展趋势展现出以下几个方向:首先,智能化程度将进一步提高,包括深度学习、人工...

    关于机械自动化在汽车制造中的应用.rar

    7. **灵活性与可重构性**:现代自动化系统设计时考虑了模块化和可重构性,使得生产线能够快速调整以适应产品多样化和市场需求变化。 8. **安全与环保**:自动化降低了工人在危险环境下的工作时间,提高了工作安全性...

    yag:另一个java函数grep。 Grep 可能的“危险”功能。 使用 Eclipse JDT

    "Grep的可能‘危险’功能"暗示了在特定情况下,使用此工具可能会对代码或项目带来潜在风险,可能是由于误用或者不适当的配置导致的。 【描述解析】 描述中提到的是"另一个java函数grep",意味着YAG不仅仅是一个简单...

    关于反思的名言警句关于反思的句子.rar

    ” - 这警示我们,虽然IT技术带来了巨大的便利,但也可能带来隐私泄露、网络安全等问题。我们需要反思技术的使用,确保其在尊重用户隐私和维护网络安全的前提下发展。 4. “教育不是填满桶,而是点燃火焰。” - 在...

    两轮自平衡车的执行器故障和异常运行诊断-外文论文翻译.doc

    这些信号可以用来预测和识别可能的故障,从而提前采取措施避免潜在危险。 在文献中,研究人员已经提出多种故障检测方法,如Hwang等人提出的执行器硬件故障识别,以及采用迭代算法控制器的设计来纠正驱动器错误。...

    五自由度工业机器人设计.doc

    世界机器人的发展趋势包括工业机器人性能不断提高、机械结构向模块化、可重构化发展、工业机器人控制系统向基于PC机的开放型控制器方向发展、机器人中的传感器作用日益重要、虚拟现实技术在机器人中的作用等。...

    熔岩矿洞数据包 1.17.1

    熔岩矿洞数据包在此基础上进一步拓展,为玩家带来了更密集、更危险的熔岩区域,使得矿石采集和地下探索充满了风险与机遇。 数据包的核心是“pack.mcmeta”文件,它是数据包的元数据文件,包含了关于数据包的信息,...

    机器人伦理学的兴起及其道德地位问题研究.pdf

    智能机器人不仅在物理层面上,例如执行复杂或危险的工作,还在社交情感层面上影响着人类社会。随着技术的进步,机器人可能会展现出更高级别的社会能力,进一步强化它们在人类生活中的作用。 机器人伦理学的产生与...

    人工智能在钢箱梁焊接中的发展.pdf

    这种技术避免了焊接作业时的危险和不便,提高了工作效率,并确保了焊接任务的顺利完成。示教编程由于其快捷高效的操作简便性,在钢箱梁焊接中经常被应用到规则性重复性的焊接位置。 焊缝跟踪技术则通过一系列传感器...

    高压输电线路带电检修机器人的研制.pdf

    通过使用机器人代替人工进行带电检修作业,不仅能够有效避免操作人员直接暴露在危险的高空高压环境中,还能够提高作业效率和质量,减少停电带来的经济损失。 在这一领域,日本九州电力公司已经取得了一定的成果,...

    机器人综述14328.pptx

    4. **模块化与可重构**:机器人设计将趋向模块化,方便根据不同任务快速调整和重构。 5. **物联网集成**:机器人将更好地融入物联网,实现与其他设备的无缝交互。 综上所述,机器人技术涵盖机械、电子、控制、人工...

    敏捷开发中的安全实践.pdf

    1. 安全早介入:在软件开发生命周期的早期阶段就将安全考虑进去,以避免后期进行大规模的重构。 2. 安全自动化:利用自动化工具集成安全测试到持续集成/持续部署(CI/CD)流程中,确保每次代码变更都经过安全检查。 ...

    HTML代码过滤技术

    这些规则可能包括删除特定的标签,如`<script>`和`<iframe>`,或者移除具有潜在危险性的属性,如`style`和`href`中的JavaScript链接。 4. 编码转换:为了防止编码绕过,需要对某些特殊字符进行转义,例如将`转换为`...

Global site tag (gtag.js) - Google Analytics