Re: [讨论] 重构跟kpi的考量

楼主: HZYSoft (PCMan)   2022-02-26 23:43:33
※ 引述《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 的商业价值,
来决定事情的先后顺序,帮助产品获得成功。
好的外科医师,手术开刀,目标是病人要治好,而不是手术成功,病人死亡。
作者: accessdenied (存取违规)   2022-02-27 00:26:00
讲得太好!
作者: GLaDOS1105 (HAHAHA)   2022-02-27 00:57:00
推这篇
作者: Raymond0710 (雷门)   2022-02-27 01:01:00
正确观念!推PCMan
作者: worf   2022-02-27 02:06:00
有道理
作者: netburst (133 134 592)   2022-02-27 02:08:00
就是因为东西常常不上线 才狂重构啊
作者: za075056 (za075056)   2022-02-27 09:54:00
作者: xvid (DivX)   2022-02-27 12:31:00
作者: MelLynce   2022-02-27 13:37:00
作者: wahaha279 (哇哈哈:3)   2022-02-27 13:54:00
作者: viper9709 (阿达)   2022-02-28 00:02:00
推这篇
作者: wulouise (在线上!=在电脑前)   2022-02-28 00:12:00
商业价值真的是重点
作者: cool9203 (看我翘翘的)   2022-02-28 06:49:00
推pcman!!
作者: FatFatPig (胖胖の猪)   2022-02-28 08:38:00
作者: shieldsky (Gray wolf)   2022-02-28 09:09:00
推这篇!
作者: ccnancy (茶茶茶)   2022-02-28 17:53:00
推 谢谢分享
作者: sharku (明珠求瑕)   2022-02-28 19:35:00
作者: JackLeeing (纯粹爬爬文)   2022-02-28 21:04:00
作者: tomroy (离题辉。)   2022-03-01 15:52:00
作者: s29940 (阿赐)   2022-03-02 08:34:00
作者: assembler80   2022-03-02 10:10:00
作者: ches728ter (Chester)   2022-03-03 17:18:00
偷问哪种成功的手术是病人死亡的?
作者: repeat (You won't know)   2022-03-06 21:52:00
作者: rrefK31 (RK31)   2022-03-31 00:44:00

Links booklink

Contact Us: admin [ a t ] ucptt.com