内容简介:收到人邮出版社的《重构》第二版精装版赠书,一本值得反复阅读,韦编三绝的书。最近看到身边很多人都买了这本书,二十年后已经畅销不衰,无愧于经典之作。然而,昨晚重看了前两章,想想和十年前自己看这两章的理解和体会对比,突然有点担心——如果重构这本书能掀起一个小小的浪潮,而很多人又是第一次读的话,那最近线上的问题和事故是不是也会迎来一个小小的高峰。为什么这么说呢?软件开发是一门工程技术,其中任何一个技术或技能如果孤立地看都会是管中窥豹,只见一斑。任何一个作者在写书时都有一些前提和细节,然而经常是要不作者没说清楚,要不
收到人邮出版社的《重构》第二版精装版赠书,一本值得反复阅读,韦编三绝的书。最近看到身边很多人都买了这本书,二十年后已经畅销不衰,无愧于经典之作。然而,昨晚重看了前两章,想想和十年前自己看这两章的理解和体会对比,突然有点担心——如果重构这本书能掀起一个小小的浪潮,而很多人又是第一次读的话,那最近线上的问题和事故是不是也会迎来一个小小的高峰。
为什么这么说呢?
软件开发是一门工程技术,其中任何一个技术或技能如果孤立地看都会是管中窥豹,只见一斑。任何一个作者在写书时都有一些前提和细节,然而经常是要不作者没说清楚,要不读者直奔主题而忽略了这些前提和细节,结果是东施效颦,适得其反,照猫画虎不成反类犬。
我在和很多人交流重构的时候发现,大家非常注重重构的结果,即重构前后的代码是什么样的,但会忽略重构的姿势。
高手重构的姿势
老马在书中强调频繁且小步地进行重构:"犯错误是很容易的,至少我很容易犯错误……重构技术是以微小的步伐修改程序,如果你犯下错误,很容易便可发现……真的犯错后,只考虑一个很小的改动范围,这使得查错和修复问题易如反掌,如果我改动了太多的东西,犯错时就可能陷入麻烦的调试,并为此耗费大把时间。小步修改,以及它带来的频繁的反馈,正是防止混乱的关键“。
这个重构的过程可以用下图表示:
"这就是重构过程的精髓所在,小步修改,每次修改后就运行测试"。
然而,我们大部分人做不到。
不是我们做不到小步修改。
是我们做不到每次修改后就运行测试。准确的说是无法做到每次修改后运行 充分 的测试,这成本太高了。要做到这一点,除非修改部分的代码有充分的自动化单元测试代码覆盖。然而,我见过的大部分工程中,单测代码少的可怜。所以,我们的重构过程可能是这样的:
由于测试成本太高,导致以下两个问题:
-
重构的步子变大,这样可以少测试几次,但步子大了,容易累积错误,修改错误变得困难
-
更可怕的是步子大了,累积的错误也多,有些错误不容易及时发现,会在某个节点暴雷,如果是提测后上线前还算幸运,但如果是在上线后暴雷,重构的罪过就大了
所以,结论是,对一般人来说,重构非常危险。
给普通人的建议
如果做不到自动化单元测试覆盖,但为了避免危险,建议就是:不要对已经上线的代码进行重构,甚至,时间点再提前一点,不要在测试之后去重构。
写一段新的代码的时候,很难一开始就把代码写的很整洁,所以先怎么舒服怎么写,写的差不多了,能跑通了,这时候,先不要去做全面的人工测试,先去重构,先去整理代码,整理完后,在做全面的人工测试。这样可以省下人工回归测试的成本。
这是对一般开发人员最实用的重构姿势。按理想的重构姿势做,软件原有功能很少被破坏,所以有非常多的时机做重构,这来源于自动化测试的保障以及这种保障下的小步修改,这些是"防止混乱的关键";但对于实用的重构姿势, 你安全重构的机会只有测试前的这一次。所以,要无比珍惜 。
除了这种安全的重构的时机,还有一些相对比较安全的重构,如果你的情怀能支撑你冒一点风险的话。
比如修改一个线上BUG的时候。
首先,有时候重构有助于你改BUG。你根本看不懂那个BUG所处的"屎山"一样的代码块,俗称"不敢改",在修复BUG前重构一下可能会帮助你读懂它,然后你稍微变的敢改了。
其次,由于改一个线上BUG引入的新的BUG后果并不严重,我说的不是对系统来说不太严重,而是说对改BUG的人。大多数管理者能容忍这种改BUG引入的BUG,但难以容忍只为了改善代码可读性而引入的BUG。
最后,你改完BUG,总得回归测试一下吧,包括你自己,包括测试人员。如果引入了新的BUG,测试人员也能承担一部分责任。
不是教你学坏,实在是没有办法,除非你不介意在"屎山"上再贡献一些自己的力量。这种相对比较安全的重构孰是孰非,难以说清,我个人既不赞成也不反对。
大家还是用好唯一的那一次安全重构的机会吧。
取法乎上得乎其中
我是一个叶公好龙式的书法爱好者,我经常会照着字帖去临摹,但一直无法达到专业的水准。
有一次我看到老师教孩子写隶书,讲的是"蚕头燕尾" 笔法,一个笔画被拆的特别细,完全是一个技术活,没有一点写字的乐趣。但我从中明白了我无法达到专业的水准的原因。
但知道和做到还是有一段距离的,我依然无法静下心练这些笔法,我还是喜欢随意地按字帖去临摹。
我知道永远也达不到专业的水准了,但这些临摹确实让我的字变得比以前好看了。
对于大部分人来说,重构也是这样。
取法乎上得乎其中。
长 按 2 秒 , 识 别 二 维 码 , 关 注 我
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 强大的姿势感知模型用于姿势不变的人脸识别
- 从姿势到图像——基于人体姿势引导的时尚图像生成算法
- 行人重识别告别辅助姿势信息,港中文、商汤等提出姿势无关的特征提取GAN
- 穿越边界的姿势
- 日志打印的正确姿势!
- 修复缺陷的正确姿势
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++Templates中文版
David Vandevoorde、Nicolai M.Josuttis / 陈伟柱 / 人民邮电出版社 / 2008-2 / 69.00元
本书是C++模板编程的完全指南,旨在通过基本概念、常用技巧和应用实例3方面的有用资料,为读者打下C++模板知识的坚实基础。 全书共22章。第1章全面介绍了本书的内容结构和相关情况。第1部分(第2~7章)以教程的风格介绍了模板的基本概念,第2部分(第8~13章)阐述了模板的语言细节,第3部分(第14~18章)介绍了C++模板所支持的基本设计技术,第4部分(第19~22章)深入探讨了各种使用模板......一起来看看 《C++Templates中文版》 这本书的介绍吧!