美文网首页
没有测试保护的重构叫重构吗?

没有测试保护的重构叫重构吗?

作者: 袁慎建 | 来源:发表于2020-04-23 21:07 被阅读0次

问题是在问没有测试保护的重构叫Martin Folwer原滋原味的重构吗?那的先来回顾一下老马对重构的定义:

  1. 名词:在不改变软件外在的行为基础上,对代码结构做出的调整,从而提高代码的可理解性。
  2. 动词:在不改变软件外在的行为基础上,调整代码的内部结构,从而提高代码的可理解性。

如果你对代码进行了重构,如果破坏了系统的功能,那你这个只能叫修改,要想跟重构近一点,可以叫重写。当然,如果你很幸运,修改没有破坏系统的功能,那你就是在做重构了。

且慢,重构的过程中,我肯定会有破坏系统功能的时候呀,Martin Folwer和Kent Beck都难以保证不破坏系统功能的短暂时期吧。所以,如果按照原始的定义,那些说自己在做重构的人,有胡吹的嫌疑了。

所以,即便你有测试保护,你还是会破坏系统功能啊,但是你有测试,这些测试能不能让你快速知道系统功能是否破坏了?是你要思考的一个重点。

所以,重构有没有测试保护不重要,重要的是你重构之后,有没有一个快速反馈的机制。这个机制可以让你重构的代码在你进行下一个功能开发之前拿到反馈,反馈什么,反馈你刚才的重构有没有破坏原有的功能。

为什么这么讲?

有没有测试保护,测试要不要自动化等等,这都是操作层面的事情,操作层面的事情通常都是Case by Case的。那么回到问题的本质,重构是一项极限编程实践,极限编程的价值观和原则也是符合敏捷的价值观和原则的,重构也要能体现出敏捷的核心思想和原则 -- 快速有效的反馈。否则如果,你更改了代码,只有在跟别人的代码进行集成之后的时间才发现问题,那这就肯定不属于极限编程中的重构了。

所以,只要你能保证在你重构代码后能够快速获得系统没有被破坏的反馈,我觉得都算是重构。至于如何保证,那就有各种手段了,通常最为推荐的方式就是编写自动化测试。

我也听到过有人说 -- 没有测试(自动化)保护,所有代码都修改不叫重构,对于这种过于绝对化的观点,我一般笑而不语!回到重构本身的定义,回到敏捷的本质,你所做的是不是叫重构就一目了然了,跟你有没有测试没有直接关系,只是说自动化测试是业界推荐的一种方式。

留一个问题思考:

当你的自动化测试很慢,而且不稳定的时候,没法帮助你快速获得有效的反馈,而人工测试会更快,这种情况你会怎么做呢?

相关文章

  • 没有测试保护的重构叫重构吗?

    问题是在问没有测试保护的重构叫Martin Folwer原滋原味的重构吗?那的先来回顾一下老马对重构的定义: 名词...

  • APP重构之路(三) 引入单元测试

    APP重构之路(一) 网络请求框架 APP重构之路(二) Model的设计 APP重构之路(三) 引入单元测试 重...

  • Objective-C:写一份可测试的代码

    APP重构之路(一) 网络请求框架 APP重构之路(二) Model的设计 APP重构之路(三) 引入单元测试Ob...

  • idea常用快捷键记录

    跳转 搜索 重构|优化 测试

  • 重构

    重构要结合测试, 单元测试以及集成测试。 重构 依赖于测试: 我们是否引入了bug。 构建测试机制: 这个是很重要...

  • (转)重构 - 改善既有代码的设计

    重构 - 改善既有代码的设计 1 重构,第一个示例 重构前,先检查自己是否有一套可靠的测试集。这些测试必须有自我验...

  • 重构三部曲(一):思想准备篇

    一、概述 重构三部曲为:思想准备,单元测试,重构 思想准备的目的是明确:为什么要重构,重构的理论支撑是什么 单元测...

  • 简述页面重构、浏览器重绘与重排(回流)

    页面重构 (个人观点)页面任何的变化都可以称为页面重构:完全重构、细节调整。 注意:简单的外部组件、测试工具的使用...

  • Extract Method

    被重构的方法没有局部变量 重构前: 重构后: 步骤: 选中要重构的代码 android studio 快捷键 CM...

  • 前端项目重构的最佳实践

    预估风险,先做好自动化测试代码的完善 重构的目的和范围需要明确,不要盲目重构。前端代码的重构目的主要是提高代码的可...

网友评论

      本文标题:没有测试保护的重构叫重构吗?

      本文链接:https://www.haomeiwen.com/subject/vhoiihtx.html