美文网首页Unity探路营
如何着手进行重构?

如何着手进行重构?

作者: 洪智 | 来源:发表于2020-11-25 10:58 被阅读0次

洪流学堂,让你快人几步。
本篇内容来自洪流读书会精选内容。

前面我们已经知道了重构是什么、为什么应该重构、选择何时何处进行重构这三个问题,今天我们来解决第四个问题:如何着手进行重构?

重构前我们需要哪些准备工作?

重构前,先检查自己是否有一套可靠的测试集,这些测试必不可少,因为尽管遵循重构手法可以使我们避免绝大多数引入bug的情形,但程序员毕竟是人,是人就有可能犯错。程序越大,在修改中不小心破坏其它代码的可能性就越大。在数字时代,软件本身即是强大和脆弱的矛盾体。

测试过程中重要的是测试程序对于结果的报告方式。通常它们要么变红,要么变绿,变红的就列出失败清单以显示问题出现的型号。注意测试本身需要自我检验的能力,这样能节约很多进行代码比对的时间。目前的测试框架都提供支持编写和运行能够自检的测试,这样还是能节省很多时间的。

构建测试集的4个关键注意事项

第一 要注意自我测试代码的价值

确保所有测试都完全自动化,让他们检查自己的测试结果。一套测试就是一个强大的bug侦测器,能够大大缩减查找bug所需的时间。

第二 要注意测试频率

当我为类似的既有代码编写测试时,发现一切正常工作固然是好,但我天然持怀疑精神。特别是有很多测试运行时,我总会担心测试没有按我期望的方式检查结果,从而没办法在世界出错的时候抓到bug。

频繁的运行测试,对于你正在处理的代码,与其对应的测试至少每隔几分钟就要运行一次,每天至少运行一次所有的测试。一个真实的系统可能拥有数千个测试。好的测试框架应该能帮我简单快速地运行这些测试,一旦出错,我能马上看到。尽管这种反馈非常简单,但对于自测试代码频繁的运行测试,要么是检验新代码的进展,要么是检查重构过程是否出错。

第三 测试边界条件

前面的测试都聚焦于正常行为上,与此同时把测试推到这些条件的边界处也是不错的实践,这可以检查操作出错时软件的表现。考虑可能出错的边界条件,把测试火力集中在那儿。

比如当我拿到一个集合,我总想看看集合为空时会发生什么;如果是数值类型,0会是不错的边界条件。

不要因为测试无法捕捉所有的bug就不写测试,因为测试的确可以捕捉到大多数bug。

第四 测试的深度

一个常见的问题是,“要写多少测试才算足够?”这个问题没有很好的衡量标准。有些人拥护以测试覆盖率作为指标,但测试覆盖率的分析只能识别出那些未被测试覆盖的代码,而不能用来衡量一个测试集的质量高低。

一个测试集是否足够好,最好的衡量标准其实是主观的,请你试问自己;如果有人在代码里引入了一个缺陷,你有多大的自信它能被测试集揪出来?这种信心难以被定量分析,盲目自信不应该在内,但自测试代码的全部目标,就是要帮你获得此种信心。如果我重构完代码,看见全部变绿的测试就可以十分自信没有引入额外的bug,这样我就可以高兴地说,我已经有了一套足够好的测试。

测试同样可能过犹不及。测试写得太多的一个征兆是,相比要改的代码,我在改动测试上花费了更多时间——并且我能感到测试在拖慢我。不过尽管过度测试时有发生,相比测试不足的情况还是少得多。

总结

至此我们将马丁福勒的这本《重构-改善既有代码的设计》(第2版)解读完毕。希望你可以鞭策自己以及整个团队:在一开始的时候,就不写或者少写那种味道很坏的代码。还应该激励自己,深入地理解架构、理解业务、理解需求,减少因设计失误而导致徒劳无益的反复重构。

扩展阅读

【扩展学习】洪流学堂回复读书会可以阅读本系列所有文章


我是大智,你的技术探路者,下次见!

别走!点赞收藏哦!

好,你可以走了。

相关文章

  • 如何着手进行重构?

    洪流学堂,让你快人几步。本篇内容来自洪流读书会精选内容。 前面我们已经知道了重构是什么、为什么应该重构、选择何时何...

  • 如何进行重构

    1.1、起点 首先上一个简单的事例: 这是一个影片出租店用的程序,计算每一位顾客的消费金额并打印详单。操作者告诉程...

  • 如何让进行代码重构?

    提炼函数 在JavaScript开发中,我们大部分时间都在与函数打交道,所以我们希望这些函数有着良好的命名,函数体...

  • 代码重构和编程技巧笔记

    具体是否需要重构,以及如何进行重构,这需要根据系统的类型、项目工期、人力等外界因素一起决定。 1、提炼函数 避免出...

  • 重构代码之美

    什么是重构; 为什么要重构; 什么时候重构; 怎样避免重构的现象; 重构的难点在哪里; 如何来实施代码重构; 重构...

  • 如何深度重构UIViewController实例-直播界面

    如何深度重构UIViewController实例-直播界面 如何深度重构UIViewController实例-直播界面

  • 单元测试

    不管是开发还是重构, 这个过程都会涉及到重构的概念 , 看看这个概念要怎么进行处理? 如何简历更好的单元测试; 使...

  • 《重构》一书总结(二)

    《重构》一书总结(二) 重构的重点,在于对那些代码进行重构,如果重构不当,反而适得其反。 重构代码终结如下 1.D...

  • 2016/12/20 最好的生活还是更好的生活

    如何爱上写作?只能是持续不断地进行写作练习,写自己的心情,用文字重构世界如何爱上画画? 只能是持续不断地进行练习,...

  • 重构代码:如何避免写出过长的函数

    大家刚开始编程的时候都会写几百行的函数,结果同事看得很头疼,最终不得不进行重构。 可是重构之前你必须深刻理解如何避...

网友评论

    本文标题:如何着手进行重构?

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