知识卡片
软件重构的定义与需求变更的间接关系
内容
重构最早由Opdyke在博士论文中提出,定义为”面向对象领域的行为保持的重建的变体”;Fowler进一步把重构拆成名词和动词两种含义:重构(名词)是对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高可理解性、降低修改成本;重构(动词)是使用一系列重构手法,在不改变可观察行为的前提下调整结构。软件重构针对的对象覆盖架构设计、详细设计、接口设计、代码设计、算法设计,主要分软件架构重构(又称架构重建)和代码重构两类——架构重构的需求来源于架构级”坏味道”和设计技术债,目的是通过整体结构或组织方式的重构消除它们;代码重构的需求来源于代码”坏味道”和代码技术债。理解重构与需求变更之间的关系是一个容易被误读的问题:因为重构定义要求”不改变软件外部行为”,意味着重构过程中不能添加任何新功能,所以重构的直接原因是提高软件的内部质量,表面上看似乎与用户的功能(业务)需求变更没有直接关系,只与非功能需求(尤其是质量需求)直接相关;但书中指出这里其实存在一层间接关系——软件系统总是处在演化过程中,结构良好的系统能很容易适应新变化,结构不好的系统必须先通过重构优化、才能适应新的业务需求,从这个角度看,用户业务需求变更也是重构发生的原因之一,只是这层因果关系是间接的:需求变更→(若架构结构不良)→需要重构→(重构后)→才能真正承接住这次需求变更。Kerievsky认为重构有四点原因:使新代码的增加更容易、改善既有代码设计、对代码理解更透彻、提高编程的趣味性——总体而言,重构是通过不断改善内部结构来减少软件复杂性,使软件更易理解和维护。
参考来源
- 位置:《软件架构理论与实践》第16章《软件架构重构》"16.1 引言"及"16.2.1 软件重构概念"节(源文件:_epub-src/OEBPS/text00128.html、text00129.html)
- 结论依据:原文说明"软件重构的直接原因是需要提高软件的内部质量……一方面,软件重构似乎与用户的功能(或业务)需求变更没有直接关系……但是存在着间接关系。例如,软件系统总是处在演化过程中,结构良好的系统能够很容易适应新的变化,结构不好的系统必须通过软件重构进行优化,使之适应新的业务需求",直接支撑本卡片结论。
- 原始内容:重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。重构(动词):使用一系列重构的手法,在不改变软件可观察行为的前提下,调整其结构。