重构:高手的姿势你学不会

栏目: 编程工具 · 发布时间: 5年前

内容简介:收到人邮出版社的《重构》第二版精装版赠书,一本值得反复阅读,韦编三绝的书。最近看到身边很多人都买了这本书,二十年后已经畅销不衰,无愧于经典之作。然而,昨晚重看了前两章,想想和十年前自己看这两章的理解和体会对比,突然有点担心——如果重构这本书能掀起一个小小的浪潮,而很多人又是第一次读的话,那最近线上的问题和事故是不是也会迎来一个小小的高峰。为什么这么说呢?软件开发是一门工程技术,其中任何一个技术或技能如果孤立地看都会是管中窥豹,只见一斑。任何一个作者在写书时都有一些前提和细节,然而经常是要不作者没说清楚,要不

收到人邮出版社的《重构》第二版精装版赠书,一本值得反复阅读,韦编三绝的书。最近看到身边很多人都买了这本书,二十年后已经畅销不衰,无愧于经典之作。然而,昨晚重看了前两章,想想和十年前自己看这两章的理解和体会对比,突然有点担心——如果重构这本书能掀起一个小小的浪潮,而很多人又是第一次读的话,那最近线上的问题和事故是不是也会迎来一个小小的高峰。

为什么这么说呢?

软件开发是一门工程技术,其中任何一个技术或技能如果孤立地看都会是管中窥豹,只见一斑。任何一个作者在写书时都有一些前提和细节,然而经常是要不作者没说清楚,要不读者直奔主题而忽略了这些前提和细节,结果是东施效颦,适得其反,照猫画虎不成反类犬。

我在和很多人交流重构的时候发现,大家非常注重重构的结果,即重构前后的代码是什么样的,但会忽略重构的姿势。

高手重构的姿势

老马在书中强调频繁且小步地进行重构:"犯错误是很容易的,至少我很容易犯错误……重构技术是以微小的步伐修改程序,如果你犯下错误,很容易便可发现……真的犯错后,只考虑一个很小的改动范围,这使得查错和修复问题易如反掌,如果我改动了太多的东西,犯错时就可能陷入麻烦的调试,并为此耗费大把时间。小步修改,以及它带来的频繁的反馈,正是防止混乱的关键“。

这个重构的过程可以用下图表示:

重构:高手的姿势你学不会

"这就是重构过程的精髓所在,小步修改,每次修改后就运行测试"。

然而,我们大部分人做不到。

不是我们做不到小步修改。

是我们做不到每次修改后就运行测试。准确的说是无法做到每次修改后运行 充分 的测试,这成本太高了。要做到这一点,除非修改部分的代码有充分的自动化单元测试代码覆盖。然而,我见过的大部分工程中,单测代码少的可怜。所以,我们的重构过程可能是这样的:

重构:高手的姿势你学不会

由于测试成本太高,导致以下两个问题:

  • 重构的步子变大,这样可以少测试几次,但步子大了,容易累积错误,修改错误变得困难

  • 更可怕的是步子大了,累积的错误也多,有些错误不容易及时发现,会在某个节点暴雷,如果是提测后上线前还算幸运,但如果是在上线后暴雷,重构的罪过就大了

所以,结论是,对一般人来说,重构非常危险。

给普通人的建议

如果做不到自动化单元测试覆盖,但为了避免危险,建议就是:不要对已经上线的代码进行重构,甚至,时间点再提前一点,不要在测试之后去重构。

写一段新的代码的时候,很难一开始就把代码写的很整洁,所以先怎么舒服怎么写,写的差不多了,能跑通了,这时候,先不要去做全面的人工测试,先去重构,先去整理代码,整理完后,在做全面的人工测试。这样可以省下人工回归测试的成本。

这是对一般开发人员最实用的重构姿势。按理想的重构姿势做,软件原有功能很少被破坏,所以有非常多的时机做重构,这来源于自动化测试的保障以及这种保障下的小步修改,这些是"防止混乱的关键";但对于实用的重构姿势, 你安全重构的机会只有测试前的这一次。所以,要无比珍惜

除了这种安全的重构的时机,还有一些相对比较安全的重构,如果你的情怀能支撑你冒一点风险的话。

比如修改一个线上BUG的时候。

首先,有时候重构有助于你改BUG。你根本看不懂那个BUG所处的"屎山"一样的代码块,俗称"不敢改",在修复BUG前重构一下可能会帮助你读懂它,然后你稍微变的敢改了。

其次,由于改一个线上BUG引入的新的BUG后果并不严重,我说的不是对系统来说不太严重,而是说对改BUG的人。大多数管理者能容忍这种改BUG引入的BUG,但难以容忍只为了改善代码可读性而引入的BUG。

最后,你改完BUG,总得回归测试一下吧,包括你自己,包括测试人员。如果引入了新的BUG,测试人员也能承担一部分责任。

不是教你学坏,实在是没有办法,除非你不介意在"屎山"上再贡献一些自己的力量。这种相对比较安全的重构孰是孰非,难以说清,我个人既不赞成也不反对。

大家还是用好唯一的那一次安全重构的机会吧。

取法乎上得乎其中

我是一个叶公好龙式的书法爱好者,我经常会照着字帖去临摹,但一直无法达到专业的水准。

有一次我看到老师教孩子写隶书,讲的是"蚕头燕尾" 笔法,一个笔画被拆的特别细,完全是一个技术活,没有一点写字的乐趣。但我从中明白了我无法达到专业的水准的原因。

重构:高手的姿势你学不会

但知道和做到还是有一段距离的,我依然无法静下心练这些笔法,我还是喜欢随意地按字帖去临摹。

我知道永远也达不到专业的水准了,但这些临摹确实让我的字变得比以前好看了。

对于大部分人来说,重构也是这样。

取法乎上得乎其中。

重构:高手的姿势你学不会

2


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Spring Into HTML and CSS

Spring Into HTML and CSS

Molly E. Holzschlag / Addison-Wesley Professional / 2005-5-2 / USD 34.99

The fastest route to true HTML/CSS mastery! Need to build a web site? Or update one? Or just create some effective new web content? Maybe you just need to update your skills, do the job better. Welco......一起来看看 《Spring Into HTML and CSS》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具