作者HZYSoft (PCMan)
看板Soft_Job
标题Re: [讨论] 重构跟kpi的考量
时间Sat Feb 26 23:43:33 2022
※ 引述《VScode (VSisBestIDEinTheWorld)》之铭言:
: 假设以下情境
: 有个功能A、B都会用到相同逻辑,且有两份重覆的code
: (没有unit test保护,而且年久失修 要加入unit test会需要更多时程)
: 现在要加入C,也会用到相同逻辑
: 身为合格的工程师 应该会把ABC重覆的部份提取出来
: 而不是让这逻辑重覆三次
: 但以公司营运的角度来看 这次专案就只会测试C的部份
: 不应该动到A、B
: 这时就要冒着A、B坏掉风险重构,或是因为来不及加入unit test
: 就乾脆让相同逻辑存在三个地方
: 身为专业工程师,我很想选择重构
: 但过去的经验告诉我
: 绝对要以kpi为最优先考量
: 於是程式充满了注解、重覆片段
: 虽然靠着笔记、git log,能还原当时写code的思路
: 但这些脏code就会永远留存在程式里
: 想问大家遇到这情况会怎麽做?
如果 A, B 都没有任何 tests,建议不要动他。
帮 C 实做这个功能的时候,把 unit test 写好写满,确保 C 是对的
行有余力,针对 A, B 的使用情境也加上 test case,确保未来在 A, B 确实能重用
(这点很重要,否则很容易程式长得很像你以为可以重用,实际上根本不能)
就先做到这样就好,确保 C 的品质,同时你获得了高品质的 reusable 模组
随着时间推演,有几种情况:
1. A, B 的生命周期已经结束,直接淘汰,不用 refactor (这超常发生)
2. A, B 只是在维护修 bug,不会再有新功能,那通常也不值得花时间去弄
但若经常造成 bugs 的地方,正是跟 C 共用的那段程式,
那 refactor 就很有商业价值,长官也不会反对你做。
这种时候 refactor A, B 会变成重要的工作,你就不会没时间做。
Refactor 完毕之後改善多少,就可以变成 Kpi,做起来名正言顺
3. 如果真的发展到有机会 refactor A, B,这时就先帮最主要商业逻辑加上
"大范围" 的 "integration tests" (不用花时间补写 A, B 的 unit tests)
接着把 A, B 重复的逻辑抽换成 C 的 (之前开发 C 已 unit test 过,确保正确)
抽换完毕後,大范围整合测试确认整体行为没改变,就可以收工了
上线後持续监测,万一遇到问题,直接 rollback 回上一版
专业的工程师,在开发的时候也会考虑实务面,以及这些 code 的商业价值,
来决定事情的先後顺序,帮助产品获得成功。
好的外科医师,手术开刀,目标是病人要治好,而不是手术成功,病人死亡。
--
Sent from PCMan on PCMan's PC
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.249.169.220 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1645890217.A.B0F.html
※ 编辑: HZYSoft (111.249.169.220 台湾), 02/26/2022 23:46:42
1F:推 accessdenied: 讲得太好! 02/27 00:26
2F:推 GLaDOS1105: 推这篇 02/27 00:57
3F:推 Raymond0710: 正确观念!推PCMan 02/27 01:01
4F:推 worf: 有道理 02/27 02:06
5F:→ netburst: 就是因为东西常常不上线 才狂重构啊 02/27 02:08
6F:推 za075056: 推 02/27 09:54
7F:推 xvid: 推 02/27 12:31
8F:推 MelLynce: 推 02/27 13:37
9F:推 wahaha279: 推 02/27 13:54
10F:推 viper9709: 推这篇 02/28 00:02
11F:推 wulouise: 商业价值真的是重点 02/28 00:12
12F:推 cool9203: 推pcman!! 02/28 06:49
13F:推 FatFatPig: 推 02/28 08:38
14F:推 shieldsky: 推这篇! 02/28 09:09
15F:推 ccnancy: 推 谢谢分享 02/28 17:53
16F:推 sharku: 推 02/28 19:35
17F:推 JackLeeing: 推 02/28 21:04
18F:推 tomroy: 推 03/01 15:52
19F:推 s29940: 推 03/02 08:34
20F:推 assembler80: 推 03/02 10:10
21F:→ ches728ter: 偷问哪种成功的手术是病人死亡的? 03/03 17:18
22F:推 repeat: 推 03/06 21:52
23F:推 rrefK31: 推 03/31 00:44