Re: [討論] 重構跟kpi的考量

作者: leo5916267 (小葉)   2022-02-27 00:32:59
※ 引述《VScode (VSisBestIDEinTheWorld)》之銘言:
: 假設以下情境
: 有個功能A、B都會用到相同邏輯,且有兩份重覆的code
: (沒有unit test保護,而且年久失修 要加入unit test會需要更多時程)
: 現在要加入C,也會用到相同邏輯
: 身為合格的工程師 應該會把ABC重覆的部份提取出來
: 而不是讓這邏輯重覆三次
: 但以公司營運的角度來看 這次專案就只會測試C的部份
: 不應該動到A、B
: 這時就要冒著A、B壞掉風險重構,或是因為來不及加入unit test
: 就乾脆讓相同邏輯存在三個地方
: 身為專業工程師,我很想選擇重構
: 但過去的經驗告訴我
: 絕對要以kpi為最優先考量
: 於是程式充滿了註解、重覆片段
: 雖然靠著筆記、git log,能還原當時寫code的思路
: 但這些髒code就會永遠留存在程式裡
: 想問大家遇到這情況會怎麼做?
我覺得有個盲點就是 重複程式碼的邏輯
我的經驗是在需求還沒穩定前
一樣的程式碼複製到不同地方才是最佳解
你根本不知道什麼時候 某個地方要用的邏輯不同 一但要改寫的邏輯不通
你就會被共用的程式碼卡住
就如你提到的案例 你只能砍掉重寫
不然你就要很痛苦的把問題解決這時你就會寫出 共用的難以維護的程式碼 ,這反而比重複程式碼還糟糕,看了很痛苦要改還要花大量時間 測試哪邊會壞掉
另一種方式就是 C 不要共用的程式碼 獨立寫一份
之後找時間把 共用程式碼放回AB
你這樣反而會乾淨很多 通常能拆出去的程式碼是無屬性的
不然只是目前剛好有一樣的邏輯 而不是可以共用的程式碼
作者: Gaitz (喵喵喵)   2022-02-27 01:10:00
這麼說來你們會在所謂的需求穩定後,停下來大規模的重寫重構改好架構?還是最後根本沒有時間而且又要開發新需求,然後說需求沒有穩定?永遠沒有做好?有新需求會被共用的地方卡住這件事聽起來很奇怪,覺得單一責任原則沒有做好。
作者: accessdenied (存取違規)   2022-02-27 01:16:00
不贊成。初期就這樣做,只會遺留一大堆90%相似只有10%客製的程式碼,然後未來修改,只敢全文搜索 findreplace而且,一旦分開管理,我保證沒人有勇氣統整回來
作者: xenorock (KingMorris)   2022-02-27 01:27:00
我看法同樓上,沒有先Design好,分割完全,全部搞在一起後面有的痛苦
作者: t64141 (榕樹)   2022-02-27 01:33:00
初期到處貼你要有把握後期能整理,不然後面維護的人就會變下一個原原po,很容易惡性循環的至於被共用卡住的問題,遇到特例難以擴充再另外實作就好,維護時因為特例而重複比初期就到處貼的副作用小多了
作者: MyNion (Nion Lee)   2022-02-27 02:23:00
我覺得你會被卡住,就代表一開始方法&功能就沒拆好了將程式模組化,增添彈性的接口供外部呼叫如果這樣還不行,那就代表從一開始這兩者就毫無相同之處本來就要分開寫了
作者: TakiDog (多奇狗)   2022-02-27 02:39:00
程式碼要增加很容易,要減少太難,那為何一開始不規劃好
作者: labbat (labbat)   2022-02-27 03:06:00
本來只要做加法函數,結果做成通用算數函數不如一開始就設計通用算數函數 改壞了也只是大家一起壞掉
作者: geroge0820 (可.....可惡)   2022-02-27 03:14:00
推文完全文不對題... 重點是需求還不穩定這件事吧
作者: wulouise (在線上!=在電腦前)   2022-02-27 09:40:00
可以共用的code怎麼可能會大到需求改變就一堆特例通常都是srp沒處理好才在怕改A錯B
作者: handsomeLin (DoGLin)   2022-02-27 11:28:00
如果會有發現重複code然後還複製貼上的話就是design不行
作者: kkes0001 (kkes0308)   2022-02-27 11:48:00
絕對不要這樣做
作者: foreverk (文藝青年)   2022-02-27 13:42:00
會被共用程式碼卡住,就代表沒抽乾淨,應該要去釐清邏輯,而不是跑去貼一堆重複code然後事後才要處理吧,本末倒置會覺得要花大量時間測試,就代表一開始你就沒有寫好unit test
作者: srwhite (魯蛇阿白)   2022-02-27 13:50:00
反了吧應該先寫一起等真的有不同要複製再複製啊
作者: t64141 (榕樹)   2022-02-27 14:46:00
需求不穩定不是重點,一開始到處複製,需求變化過程要改就已經需要到處翻找了,即使等需求確定後也是要面臨重構的問題,萬一屆時已經上線更悲劇
作者: neo5277 (I am an agent of chaos)   2022-02-27 15:17:00
這篇是用接案公司的想法出發寫MVP的時候吧?
作者: viper9709 (阿達)   2022-02-28 00:08:00
對系統還不夠了解時,這才是比較實用的+1
作者: Nonsense8 (胡說)   2022-02-28 10:19:00
樓主沒說錯,這適用於未上線的專案,如果老闆在開發中要求大改,主管有責任爭取上線後重構時間。甚至需求大改也不是老闆的責任,尤其市場上沒有其他競品可以參考時,才會不時在開發中更改需求但原文的情境應該是上線後營運很久的專案,就不適合這種作法了

Links booklink

Contact Us: admin [ a t ] ucptt.com