写点什么

重构:“为什么”和“怎么做”

  • 2008-04-09
  • 本文字数:1252 字

    阅读完需:约 4 分钟

近日在“敏捷中国”讨论组展开了一系列关于重构的讨论。一种观点认为,对代码的重构是程序员出于对代码美感的追求而进行的行为。

重构更多的是基于激情,把代码做为艺术品来雕琢。但是不少软件公司工作环境可以很快摧残这种热情。

然而作为软件开发工作的一部分,重构行为显然不应该被归结于“激情”和“艺术”。之所以有这种想法,往往是由于没有一种有效的方式来衡量重构行为的成本和收益,从而不能有效地组织和管理重构行为。在同一组讨论中就有人提出了这个问题:

我想了解一下,大家是否把重构的时间放到 sprint 的估算里。假设到了代码用户案例测试通过了,操作文档也完成了,如果没有时间重构代码,你们会怎么办?重构的时间,跟追求的度成正比,怎么估算重构的成本?

来自 ThoughtWorks 的熊节认为,重构的收益体现为修改成本的降低,因此也是可衡量的。

从商业的角度,每段代码,每次修改都带来一定的商业价值,同时每段新代码,每次修改都有它的成本,这个成本随代码质量的下降而上升。当代码质量烂到一定程度,修改代码的成本超过收益,这个软件就没办法继续发展了。重构也有它的成本,它带来的收益是降低修改代码的成本。如果你发现一个程序员一方面抱怨面对变化的需求他不敢动手改代码,另一方面又不想通过重构改善代码质量,你就知道这里必定有什么问题了。

在一篇题为“在大型遗留系统基础上运作重构项目”的文章中,熊节详细说明了如何权衡重构的成本和收益:

  1. 和别的任何 story 一样,重构的 story(以及其他“技术债”类型的 story)也应该符合 INVEST 的标准。尤其是,它们的工作量应该得到估算,它们应该按照业务价值排列优先级。因为归根到底,重构(以及其他任何开发任务)都归结为“花在代码上的成本”与“对业务创造的价值”之间的权衡。
  2. 按照定义,重构意味着“在不改变功能性行为的前提下改进代码的组织结构”。如果代码基础本身脆弱而没有测试覆盖,重构的成本就会很高,因为你需要花很大力气来确认自己的修改没有改变功能性行为。
  3. 如果偿还“技术债”的成本非常高,那么与之对应的业务价值就必须更高,否则偿还这些债务就将得不偿失。其结果是:一段代码,从程序员的角度看来越糟糕,从商业的角度来说就越不应该去动它。
  4. 综上所述,如果有人说“这一大堆代码都需要重构”,这样的说法很有可能是值得商榷的。你需要把重构划分成细粒度的、可控的 story,为这些重构 story 制定验收标准,评估它们的优先级,估算它们的工作量,然后逐一实现它们,并且放弃一些得不偿失的重构。

这篇文章还介绍了对遗留系统进行重构的步骤:

经过这个咨询项目,eMAN 产品开发团队在原有代码的基础上划分了细粒度的重构 story,建立了持续集成环境,并按照共同探索出的节奏,以测试为驱动、以代码质量为导向,不断重构以改进代码质量,并且积累了一些常见问题的解决办法,为大规模遗留系统的重构找出了一条切实可行的路子。

和所有的敏捷实践一样,重构的原则说起来很简单,但实际操作起来总是会有很多困难,需要经验和权衡。你在尝试重构时遇到困难了吗?你有自己的重构经验想要与整个社区分享吗?

2008-04-09 23:481736

评论

发布
暂无评论
发现更多内容

阿里内推强推的并发编程学习笔记,原理+实战+面试题,面面俱到!

小小怪下士

Java 程序员 并发编程

TiDB 7.4 发版:正式兼容 MySQL 8.0

编程猫

独立站成跨境电商终极答案,解锁中小企业吃透红利方式

YG科技

中小企业开发小程序易做大“怨种”?试试这款轻量应用服务器

YG科技

“创新启变 聚焦增长”极狐(GitLab)媒体沟通会,共话智能时代软件开发新生态

极客天地

华为云耀云服务器L实例_ 为跨境电商提升“钞”能力

轶天下事

轻量云服务器成中小企业网站香饽饽,腾讯云、华为云、阿里云如何选购到合适?

YG科技

大模型背景下软件工程的机遇与挑战

CODING DevOps

想做跨境电商不知道如何搭建网站?看这篇教程就够了

平平无奇爱好科技

力压阿里云轻量服务器,华为云耀云服务器L实例如何成为中小企业的“新欢”

轶天下事

Disruptor在流程编排中的应用与探索

ZA技术社区

金融科技 众安保险 ZA技术社区 keji

文心4.0,启动大模型时代的飞轮效应

脑极体

AI

通过观测云快速了解真实用户体验

Yestodorrow

可观测性 用户增长 业务增长 真实用户体验

主打一个遥遥领先,这款轻量应用服务器真是太“硬”了

平平无奇爱好科技

中小企业数字化既要效率又要效益,这款轻量云服务器打破悖论

YG科技

数字化转型与架构-架构设计篇|系统组件有哪些?

数字随行

数字化转型

网络安全(黑客)自学方向

网络安全学海

程序员 黑客 网络安全 信息安全 渗透测试

跬智信息(Kyligence)入选 IDC《中国数据智能市场生态图谱V4.0》

Kyligence

数据分析 指标平台

中小企业数字化人才困境重重,华为云耀云服务器L实例妙手回春

平平无奇爱好科技

传统ERP云服务器高不可攀,华为云耀云服务器L实例可以“交个朋友”

轶天下事

腾讯云轻量应用服务器到期?赶紧换新上市的华为云耀云服务器L实例吧!

轶天下事

All IN数字化?华为云耀云服务器L实例让中小企业没有后顾之忧

YG科技

9款好用的在线流程图软件推荐!

彭宏豪95

效率 流程图 在线工具 科技 流程图绘制

使用指南|如何将 GreptimeDB 数据保存在阿里云 OSS

Greptime 格睿科技

数据库 阿里云 云原生 Greptime GreptimeDB

被誉为轻量云服务器“鼻祖”的腾讯云,遇到最硬核对手

平平无奇爱好科技

后起之秀 虽迟未晚!这款轻量云服务器乱拳打死老师傅

YG科技

不想续费百度云,这款轻量应用服务器完美替代

轶天下事

敏捷思维和免费敏捷管理工具

顿顿顿

敏捷项目管理 敏捷开发管理工具 scrum工具 scrum敏捷工具 敏捷开发工具

拒绝“反向打工”,这款轻量云服务器才是经济周期下中小企业良心之选!

YG科技

快收藏!中小电商企业必用的ERP软件ODooo“奶妈级”教程来了

平平无奇爱好科技

跨境电商项目还在冷启动?请收好这份“破冰”秘籍

YG科技

重构:“为什么”和“怎么做”_研发效能_林芷薰_InfoQ精选文章