AIGC在金融场景是如何落地的? 了解详情
写点什么

如何抉择重构?

  • 2010-06-18
  • 本文字数:1304 字

    阅读完需:约 4 分钟

重构是一种改变软件系统的过程,在不修改代码外部行为的情况下,改善其内部结构。在大多数敏捷团队中,改善已有代码的想法是受欢迎的。毕竟,持续改善是这些团队为之奋斗的事情。但是,改善已有代码牵涉到时间和金钱。这样做值得吗?

重构涉及到的成本有这些:

  • 做重构的成本
  • 测试更改的成本
  • 更新测试和文档的成本

同时,如果单元测试以及测试工具没有达到标准,系统会有引入新缺陷的风险。 在极限编程项目中,总是假设项目有很好的单元测试,这种风险就很低。另一方面, 重构有一些好处

  • 添加新的功能不会破坏系统的结构
  • 可以提高对系统的理解
  • 更容易测试
  • 更容易找出、隔离以及修正缺陷

影响重构的决定有哪些参数呢?

John Virgolino 认为,用金钱去衡量重构带来的利益,这道数学题并不复杂

你无需做复杂的业务分析,保持其简单。重构需要多少时间?再乘以一个按小时或按天算的成本因子就可以了。 $60000 薪资 × 1.25 = $75000 负担成本

$75000 成本 / 12 个月 / 22 个工作日 = $297.61 (每天的成本)

现在,3 天时间做代码重构 × $297 = $891 重构成本(这就是你的投资)

下一次做代码改动时,之前没有重构的话需要 5 天时间(5 × $297 = $1485),而重构过的话只要 1 天时间就可以做相同的代码改动(1×$297 = $297)

$1485 - $297 = $1188(节省)- $891(初期投资)= $297.00 总共节约成本

此时,投资已经自我偿还了,而且未来会带来很多意外的成本节约,并且可用于提高其他产品、项目、文档、计费工作等等的生产率。

做类似定量分析的 Simon Johnson 认为, 重构后生产率必须有一定比例的提高, 这样才能调整重构成本,Simon 说:

对于重构,为了让它同把钱存在银行而言成为一种更好的投资,你必须提高 5-8% 或更高的生产率。这是一个相当大的要求,我非常怀疑这样的目标在实践中能否达成。如果你的机会成本远高于“帐户 B”描绘的数目,那么你最好把钱花在其他地方,比如新的功能或者减少缺陷的方法。

不过,除了成本,还有其他因素可能导致重构不是可行的策略。

Mark Needham 重构困境上做了评论,他举出了最后期限很紧张的项目作为例子。如果团队在某个指定时刻开始重构,他们不会看到重构带来的任何回报。Mark 认为,尽管重构有一些好处,但是,他很少看到仅仅由于重构让代码在今后易于维护,就赶上交付日期的情况。

John 也提出了类似的场景,那时重构可能不是一种好的选择

虽然总得来说,管理层可能也有很好的理由不做重构。这可能与金钱或时间都无关,可能是一个战略决策,甚至是合同的原因(比如政府工作)。确保你自己也了解整个故事。我也见过很多人在讨论你要在工作之余做重构。这无疑表明你对重构技术的信念和喜爱,但我不会在真空中做重构。我见到过程序员去做重构,结果导致团队其他成员和整个项目陷入混乱。

Mark 同时还指出,有时候项目周期可能太短了,不值得为重构投资。为这种项目做重构投资可能是徒劳无功的练习。

因此,尽管引入重构必然会有好处,是否决定在特定时间、特定情况下去做重构,必须谨慎对待。关键在于权衡利益,然后判定哪一个会带来最高的商业价值。

查看英文原文: The Decision to Refactor

2010-06-18 21:431807
用户头像

发布了 38 篇内容, 共 80120 次阅读, 收获喜欢 1 次。

关注

评论

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

对前端趋势的一些理解

葱小白

大前端

「 最佳内容公布」—— InfoQ 写作平台【 1 周年盛典 】

InfoQ写作社区官方

1 周年盛典 热门活动

MySQL多表查询详解

若尘

MySQL 查询

陪伴

小天同学

陪伴 育儿 个人感悟 4月日更

初入江湖,IT从业者应该如何选择?

云峰

微服务网关方案:Kong & Nacos

程序员架构进阶

架构 微服务 API网关 28天写作 4月日更

WebRTC基础知识详解

IT酷盖

签约计划

Java 并发基础(五):面试实战之多线程顺序打印

看山

Java并发

AI数据科学认证-2021年的最佳选择 John 易筋 ARTS 打卡 Week 44

John(易筋)

ARTS 打卡计划

Seldon 使用 (二):打包模型

托内多

tensorflow kubeflow Kubernetes PyTorch seldon

「架构师训练营 4 期」大作业一&二

凯迪

架构师训练营 4 期

嘉云公司研发效能平台实践

小江

研发效能 CI/CD

从石器时代到田园牧歌:如何对 API 统一建模

李宇飞

API

Android中的图像格式

如浴春风

android 音视频 安卓 签约计划

「 优秀主题征文名单公布 」—— InfoQ 写作平台【 1 周年盛典 】

InfoQ写作社区官方

1 周年盛典 热门活动

更简的并发代码,更强的并发控制

万俊峰Kevin

并发 go-zero Go 语言

AI数学基础之:确定图灵机和非确定图灵机

程序那些事

人工智能 AI 程序那些事 图灵机

重读《重构2》

顿晓

重构 4月日更

架构师训练营 4 期 大作业

引花眠

架构师训练营 4 期

TIOBE榜单四月已出:上古语言Fortran重回前20?

Bob

编程语言、 4月日更 Tiobe

最详细的基于 Prometheus 的 Azure 指标监控

耳东@Erdong

azure Prometheus 4月日更

浪潮签约“数字基建”合作伙伴共促工业互联网创新发展

浪潮云

工业互联网

「架构师训练营 4 期」大作业二

凯迪

架构师训练营 4 期

猫鼠游戏,一个刷票老千看在线投票项目的防范与取舍

ucsheep

安全 在线投票 防作弊 刷票

Python变量作用域与LEGB规则

大奎

语法 Python Monad 作用域

Spark原理与实战之部署模式与运行机制

小舰

spark Spark调优 4月日更

css

赫鲁小夫

4月日更

企业上云一张网,华为将在分析师大会上亮出哪些大招?

脑极体

模块二作业

c

架构实战营

浅析LSM-Tree存储模型

正向成长

LSM树 KV存储引擎

树莓派人表情识别

IT蜗壳-Tango

IT蜗壳教学 4月日更

  • 扫码添加小助手
    领取最新资料包
如何抉择重构?_研发效能_Vikas Hazrati_InfoQ精选文章