使系统适应变化之重构(6)—Android开发进阶

发表于:2016-6-28 11:18

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:何红辉    来源:51Testing软件测试网原创

  第11章  使系统适应变化-重构
  重构是使用一系列手法,在不改变行为的前提下调整其内部结构。这里需要注意的地方有两点,首先是重构前后软件的行为应该保持一致,当前前提是这个行为是正确的,否则我们的重构就相当于引入了Bug;其次是重构要修改代码的内部结构,使得代码变得更简单、清晰。通过重构,使得已经腐化的软件系统慢慢回到正确的轨道,使我们的软件系统持续、健康的发展。
  被大家熟知的重构手法有数十种,本章我们只介绍一些比较常用的重构手法,使大家对重构有一个大致的了解,更多的资料大家可以参考重构的权威书籍《重构:改善既有代码的设计》。
  11.1  为什么要重构
  我们平时的工作已经够忙了,为什么还要修改能够工作的代码来给自己增加工作量呢?这就提出了一个问题,我们为什么要重构,或者说重构能够带给我们什么好处。
  需要注意的是,我们重构的目标是优化现有的代码,也就是说我们要让现有的代码具有更好、更清晰的结构,提升它的可读性、可维护性、可扩展性。当我们的软件系统结构变得清晰时,我们后续的维护工作就会越来越容易,这样我们往后的工作量就会越来越少。试想一下,如果你的代码杂乱不堪,当你需要添加一个功能时,你需要跨越很多个类型进行修改,而每看到一段旧代码你都需要经过一番思考、回忆、咨询同伴才知道这段代码的大体含义,当你修改了这段代码时你心里还不是很明确那个函数的具体逻辑。此时,你相当于掉进了焦油坑,你的工作只是在这个大坑里挣扎,里面有太多的不确定性,导致新功能难以增加,出现Bug难以修复,加班越来越多。
  要避免上述说的一切,重构这一步是至关重要。因为不可能在我们设计第一版时我们的软件、代码结构就是完全正确的,我们的软件结构会随着系统的升级而演化。此时我们就需要不断地的重构代码以使系统适应变化,因此重构的优点就是我们能够使软件系统保持清晰、简单、可扩展的特性,有了这些特性就能够让我们的开发速度更快,而在重构过程中我们也会发现旧代码的问题,从而处理掉旧代码的Bug。在这个过程中我们对整个系统又更加了解了,对于我们后续的工作也很有帮助。
  良好设计是维持软件开发速度的根本。重构可以帮助你更快速地开发软件,因为,它能将"腐化"的系统拉回正轨,它甚至还可以提高设计质量。当谈论重构时,常常有人问我应该怎样安排重构时间表,这又提出了另一个问题:何时进行重构?
  11.2 什么时候重构
  在我看来,重构并不是一件需要安排一个特定的时间来做的事,除非当前系统已经"腐化"到了非常严重的程度,否则重构应该随时随地进行。你不应该为重构而重构,重构应该伴随在你的开发中,不断地开发、不断地重构,在开发的过程中持续重构以保持软件的优良结构。
  虽然我们不建议单独找时间来进行重构,但仍有一些时间节点是我们做重构的好时机。
  最常见的重构时机就是我想给软件添加新特性的时候。此时,重构的第一个原因往往是为了帮助我理解需要修改的代码。这些代码可能是别人写的,也可能是我自己写的。当我发现我并不能很快速、直接地理解这段代码时,我就会考虑重构。之所以这么做是因为这段代码并不是那么容易理解,而我需要通过重构让它变得更简单、清晰。
  另一个时机是在调试程序时进行重构。此时进行重构多半是为了让代码更具可读性。当我看着代码并努力理解它的时候,说明它还不够清晰,这可能也是为什么我们需要调试这段代码的原因。你可以这么想:如果收到一份 Bug 报告,这就是需要重构的信号,因为代码还不够清晰,导致引入了Bug。
  很多公司有review代码的机制,因为这种机制可以改善代码质量,也有助于在开发团队中传播知识,使缺乏经验的工程师能够从经验丰富的工程师身上学到知识。我的代码也许对我自己来说很清晰,但在他人看来可能并不是这样。从多个角度看问题可能会发现问题所在,因为做review代码的人可能对于软件中的一些细节并不了解,他只关注局部足够清晰。当审核人员发现某个模块没有达到要求时,那么说明这里也正是需要重构的地方。此时,与审核人员探讨如何重构不仅能够使系统更加清晰,也能够向资深人士学习到更多的知识,增进同事之间的交流。
  结对编程是review代码的升级版,把代码复审的积极性发挥到了极致。两名工程师坐在一起使用同一台计算机进行工作,A写代码时B同时在旁边进行讨论、实时review代码,如果发现问题,A和B进行及时沟通,并且商量重构策略,最后改进代码。通过结对编程的形式能够显著改善代码的质量,因为它将软件开发、重构、多人讨论结合到一起,结对编程时也会避免走入知识的盲区,在代码的可读性、可维护性上也会有更多的考虑,这种形式下开发出来的软件具有更高的可靠性。
本文选自《Android开发进阶—从小工到专家》第十一章,本站经人民邮电出版社和作者的授权。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
如何写单元测试(5)—Android开发进阶
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号