前面我们提到了,面对软件工业时代的到来,我们的软件企业陷入了一种更深的迷茫之中,一种“后有追兵,前有悬崖,进退两难”的境地。后有追兵:面对维护了数十年之久的大型遗留系统,我们到底改还是不改?不改,面对越来越多的需求变更,我们维护的成本越来越高,变更变得越来越困难;面对不断涌现的新技术,使我们的系统显得越来越丑陋与落后;面对越来越多的竞争者,使我们面临着被市场淘汰的风险。前有悬崖:原本运行得好好的软件系统,凑合一下还可以运行几年。一不小心改出问题了,企业立马就歇菜儿了,面对大量的用户投诉,企业四处救火,竞争对手趁火打劫,这是任何软件企业都不能承受的巨大风险。难倒真的“熊掌和鱼不能兼得”吗?真的没有一种方法,能够既保证我们系统可以技术改造,又能有效地避免改造过程的风险吗?有,那就是系统重构。
提到重构,许多人都讳莫如深、敬而远之。什么是系统重构呢?大家可能有很多的不同看法:
1.系统重构是那些系统架构师、技术大牛玩的高端玩意儿,咱普通屌丝不懂,跟咱没啥关系。
2.系统重构就是改代码,大改特改那种,整个重来一遍那种,这个比较邪恶,比较容易改出事儿,还是不要轻易尝试为妙。
3.我知道系统重构,也知道它能改善遗留系统,但我还是不敢轻易尝试,因为改出问题来怎么办,还是算了吧。
然而我认为,现在我们对系统重构有太多的误解,以至于我们还不怎么了解它,就已经将它拒之门外。什么是系统重构呢?它是一套严谨而安全的过程方法,它通过一系列行之有效的方法与措施,保证软件在优化的同时,不会引入新的BUG,保证软件改造的质量。这一点在我后面一步一步的拆解中,你可以慢慢体会到。
我们先看看系统重构的概念。系统重构,就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更[1]。
系统重构中一个非常关键的前提就是“不改变软件外部行为”,这个前提非常重要,它保证了我们在改造原有系统的同时,不会为原系统带来新的BUG,以确保改造的安全。这里,什么是“为原系统带来新的BUG”?我们必须为其做出一个严格的定义,那就是“改变了软件原有的外部行为”。也许你对此有些不太赞同,改变了软件原有的外部行为,怎么就能武断地认为,是为原系统带来了新的BUG呢?为此我们来举个例吧。
假如一个系统的报表查询功能,原来在表格里的返回结果中,日期是这样表示的“2013-2-18”,经过系统改造以后变成这样了“2013-2-18 00:00:00”,这是BUG吗?作为开发人员你可能认为这算什么BUG,但作为客户那就是BUG,因为它让表格变得难看,使用不再方便了。系统重构,对于客户来说应当是完全透明的。我们为之做了很多工作,而他们应当完全感觉不到它的存在。如果我们的重构做到了这一点,那么我们的重构就必然是安全的、可靠的、没有风险的。
更广泛一些来说,如果我们打开软件内部,保证系统中的每个接口与改造前是等价的,也就是说,其输入输出在改造前后都是一致的。当我们的每个改造都是这样进行的,则必然不会为系统带来新的BUG。这就是我们进行改造的保险索,它也是我现在所说的重构,与以往那种拿着代码一阵瞎改的根本区别。
总而言之,系统重构不是那种冒着极大风险进行的代码修改,而是必须保证修改前后输入输出的一致,这就是我们说的“不改变外部行为”。为此,贯穿整个重构过程的是不断的测试。起初这种测试是手工测试,随后逐渐转变为自动化测试。每修改一点点就进行一个测试,再修改一点点。测试,就是系统重构的保险索。
[1] Refactoring: a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior. ——引自《重构:改善既有代码的设计》
大话重构连载首页:
http://fangang.iteye.com/blog/2081995
特别说明:希望网友们在转载本文时,应当注明作者或出处,以示对作者的尊重,谢谢!
分享到:
相关推荐
大话存储2:存储系统架构与底层原理极限剖析》内容简介:网络存储是一个涉及计算机硬件以及网络协议/技术、操作系统以及专业软件等各方面综合知识的领域。目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对...
《大话存储:存储系统底层架构原理极限剖析(终极版)》是一本深入探讨存储技术的专业书籍,由一位对技术充满热情的作者精心撰写。这本书以其严谨的态度和丰富的想象力,揭示了存储系统的底层奥秘,旨在帮助读者全面...
通过本文档提供的影片出租店应用程序的案例,我们可以清晰地看到重构是如何逐步将一个复杂且难以维护的代码结构,转化为一个清晰、简洁且易于维护的系统。虽然重构本身不引入新功能,但它为软件的演化打下了坚实的...
大话存储:存储系统底层架构原理极限剖析(终极版)第4部分 大话存储:存储系统底层架构原理极限剖析(终极版)第4部分
"大话存储2:存储系统架构与底层原理极限剖析" 本节将对存储系统的基本概念、技术和架构进行详细介绍。存储系统是计算机系统中的一种复杂系统,主要负责数据的存储、管理和保护。它可以是一个独立的硬件设备,也...
大话存储:存储系统底层架构原理极限剖析(终极版)第3部分 大话存储:存储系统底层架构原理极限剖析(终极版)第3部分大话存储:存储系统底层架构原理极限剖析(终极版)第3部分
大话Oracle RAC:集群、高可用性、备份与恢复(带目录清晰中文完整版)
Android之大话设计模式——:抽象工厂模式借鉴.pdf
2. 存储系统的组成:详细解释了网络存储系统由计算机硬件、网络协议/技术、操作系统以及专业软件等多个方面构成的复杂系统。 3. 存储系统的基础技术:讨论了计算机IO基本概念、硬盘物理结构、盘片数据结构和工作...
大话Oracle RAC:集群、高可用性、备份与恢复。 此书被认为不可多得的好资料之一:大话Oracle RAC(PDF经典),看完之后深有感触,发出来共享一下。
《大话Oracle.RAC:集群、高可用性、备份与恢复(第2版)》是一部深入探讨Oracle数据库Real Application Clusters(RAC)技术的专业书籍,主要围绕Oracle RAC的集群架构、高可用性策略以及数据库的备份与恢复策略...
大话存储2 存储系统架构与底层原理极限剖析 大话存储2 存储系统架构与底层原理极限剖析
大话存储:存储系统底层架构原理极限剖析(终极版)_张冬2015.01_P989
《大话移动APP测试》是一本详尽介绍Android与iOS平台测试应用的指南,旨在帮助读者深入理解并掌握移动应用的测试技术。本书全面覆盖了移动端的测试领域,包括平台特性、设备兼容性、功能测试、性能测试、安全测试等...
Android之大话设计模式——:抽象工厂模式参考.pdf
### 大话西游2经济系统深度解析 #### 游戏中的货币系统 **名称与单位:** 在《大话西游2》中使用的货币被称为“大话币”,其基本单位为“两”。这一货币系统构成了游戏内经济体系的基础。 **存放与携带规则:** -...
共5个压缩包