热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

什么是系统重构

大话重构连载2:什么是系统重构前面我们提到了,面对软件工业时代的到来,我们的软件企业陷入了一种更深的迷茫之中,一种“后有追兵,前有悬崖,进退两难

大话重构连载2:什么是系统重构


前面我们提到了,面对软件工业时代的到来,我们的软件企业陷入了一种更深的迷茫之中,一种“后有追兵,前有悬崖,进退两难”的境地。后有追兵:面对维护了数十年之久的大型遗留系统,我们到底改还是不改?不改,面对越来越多的需求变更,我们维护的成本越来越高,变更变得越来越困难;面对不断涌现的新技术,使我们的系统显得越来越丑陋与落后;面对越来越多的竞争者,使我们面临着被市场淘汰的风险。前有悬崖:原本运行得好好的软件系统,凑合一下还可以运行几年。一不小心改出问题了,企业立马就歇菜儿了,面对大量的用户投诉,企业四处救火,竞争对手趁火打劫,这是任何软件企业都不能承受的巨大风险。难倒真的“熊掌和鱼不能兼得”吗?真的没有一种方法,能够既保证我们系统可以技术改造,又能有效地避免改造过程的风险吗?有,那就是系统重构。 

提到重构,许多人都讳莫如深、敬而远之。什么是系统重构呢?大家可能有很多的不同看法: 

1.系统重构是那些系统架构师、技术大牛玩的高端玩意儿,咱普通屌丝不懂,跟咱没啥关系。 
2.系统重构就是改代码,大改特改那种,整个重来一遍那种,这个比较邪恶,比较容易改出事儿,还是不要轻易尝试为妙。 
3.我知道系统重构,也知道它能改善遗留系统,但我还是不敢轻易尝试,因为改出问题来怎么办,还是算了吧。 

然而我认为,现在我们对系统重构有太多的误解,以至于我们还不怎么了解它,就已经将它拒之门外。什么是系统重构呢?它是一套严谨而安全的过程方法,它通过一系列行之有效的方法与措施,保证软件在优化的同时,不会引入新的BUG,保证软件改造的质量。这一点在我后面一步一步的拆解中,你可以慢慢体会到。 

我们先看看系统重构的概念。系统重构,就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更[1]。 

系统重构中一个非常关键的前提就是“不改变软件外部行为”,这个前提非常重要,它保证了我们在改造原有系统的同时,不会为原系统带来新的BUG,以确保改造的安全。这里,什么是“为原系统带来新的BUG”?我们必须为其做出一个严格的定义,那就是“改变了软件原有的外部行为”。也许你对此有些不太赞同,改变了软件原有的外部行为,怎么就能武断地认为,是为原系统带来了新的BUG呢?为此我们来举个例吧。 

假如一个系统的报表查询功能,原来在表格里的返回结果中,日期是这样表示的“2013-2-18”,经过系统改造以后变成这样了“2013-2-18 00:00:00”,这是BUG吗?作为开发人员你可能认为这算什么BUG,但作为客户那就是BUG,因为它让表格变得难看,使用不再方便了。系统重构,对于客户来说应当是完全透明的。我们为之做了很多工作,而他们应当完全感觉不到它的存在。如果我们的重构做到了这一点,那么我们的重构就必然是安全的、可靠的、没有风险的。 

更广泛一些来说,如果我们打开软件内部,保证系统中的每个接口与改造前是等价的,也就是说,其输入输出在改造前后都是一致的。当我们的每个改造都是这样进行的,则必然不会为系统带来新的BUG。这就是我们进行改造的保险索,它也是我现在所说的重构,与以往那种拿着代码一阵瞎改的根本区别。 

总而言之,系统重构不是那种冒着极大风险进行的代码修改,而是必须保证修改前后输入输出的一致,这就是我们说的“不改变外部行为”。为此,贯穿整个重构过程的是不断的测试。起初这种测试是手工测试,随后逐渐转变为自动化测试。每修改一点点就进行一个测试,再修改一点点。测试,就是系统重构的保险索。 

推荐阅读
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 优化版Windows 10 LTSC 21H2企业版:适用于低内存设备
    此版本为经过优化的Windows 10 LTSC 21H2企业版,特别适合低内存配置的计算机。它基于官方版本进行了精简和性能优化,确保在资源有限的情况下依然能够稳定运行。 ... [详细]
  • 当iOS设备越狱后,某些插件可能会导致系统崩溃(白苹果)。此时,可以通过进入安全模式来排查并删除有问题的插件。本文将详细介绍如何通过特定按键组合进入不加载MobileSubstrate的安全模式,并提供相关背景知识。 ... [详细]
author-avatar
sdauilk_299
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有