作者srwhite (阿白)
看板Soft_Job
標題[請益] 何時會決定要重構程式
時間Mon Nov 12 02:04:38 2018
事情是這樣的
小弟最近接到使用者需求
要增加幾個跟之前很像的功能
舊的那隻程式已經歷經許多測試 目前正穩定的運作中
但最初的需求很單純
因此設計得不是很有彈性 不利於擴充及更改
第一次接到需求的時候
我想了一下覺得重構有點麻煩
於是直接複製了一份然後改了需要改的地方
變成兩隻有八成像的程式 各做各的
但最近又要再增加一個
於是我開始猶豫該不該整個打掉重構
避免程式碼繼續這樣擴張下去 感覺很不專業
之後再有需求也比較好調整
但如果複製改一改大概只要一個小時
打掉重構可能要一個禮拜 還不保證會不會有甚麼多出來的bug
想請教大家在類似的情況
都用哪些標準來決定甚麼時候應該重構
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.156.195
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1541959482.A.056.html
1F:→ kissmickey: 上面看你沒事找事做的時候 11/12 02:20
2F:→ alog: 做事情是這樣 如果你覺得某些事你這樣做可以省到後面很多時 11/12 02:26
3F:→ alog: 間你可以做 但實際效果沒有符合預期/有機會搞砸/婊到別人/ 11/12 02:26
4F:→ alog: 自己扛責/你沒有你想像中的專業有把握 你就不該隨便亂動已經 11/12 02:26
5F:→ alog: 跑的很穩定的東西 11/12 02:26
6F:→ alog: 還有不要用感覺來判斷專不專業 應該要仔細分析優缺點再來抓 11/12 02:28
7F:→ alog: 一個正確的作法 11/12 02:28
8F:推 gs8613789: 沒事做的時候 11/12 08:25
9F:推 Masakiad: 你的狀況應該是因為沒寫測試案例才會覺得重構容易有bug 11/12 08:36
10F:推 t64141: 維護越來越痛苦的時候 11/12 09:04
11F:推 ripple0129: 寫久了都會有感覺哪邊是應該要事先提出來復用的部分, 11/12 09:06
12F:→ ripple0129: 很不科學但是真的是很吃肌肉記憶 11/12 09:06
13F:→ ripple0129: 抽象一點的說就是會自動分類可變動與不可變動的部分吧 11/12 09:08
14F:推 s89162504: 千萬不要refactor 除非你吃飽了沒事幹 11/12 09:09
15F:→ t64141: 然後不要習慣複製貼上改一行,很可怕 11/12 09:21
16F:推 Argos: 看了上面一堆人排斥重構 就知道台灣軟體業只會繼續腐爛 11/12 09:41
17F:推 MixBear: 重構是持續進行的 比如你現在這時候遇到這狀況 就要拉正 11/12 09:41
18F:→ MixBear: ,而不是持續放任歪樓 11/12 09:41
19F:→ Argos: 重構這種事有時根本就舉手之勞而已 順手改一點改一點 11/12 09:42
20F:→ Argos: 老實說 會不會想去重構 跟工程師自身的修養有很大的關係 11/12 09:43
21F:→ Argos: 你夠不夠認真看待你的專業 就決定你對重構的態度 11/12 09:43
22F:→ Argos: 回到現實面 你要重構當然要跟上級討論並且獲得許可及時間 11/12 09:44
23F:→ Argos: 如果上面管理方都同意 你當然應該要開始重構 11/12 09:44
24F:→ Argos: 但這件事應該是由工程師自己發現問題 並主動向上面提出 11/12 09:44
25F:推 MixBear: 最討厭維護複製貼上一堆相似程式,然後同樣邏輯要改漏東 11/12 09:45
26F:→ MixBear: 漏西的 11/12 09:45
27F:→ Argos: 如果上面死都不願給時程 那你還有藉口讓它放著爛沒關係 11/12 09:45
28F:推 MixBear: 造成後人不便,自己也常埋地雷的程式片段 11/12 09:46
29F:→ Argos: 而不是聽到要改Legacy就避之為恐不及 11/12 09:47
30F:推 menshuei: 大部分只會重建不會重構。 11/12 09:47
31F:→ Argos: 我講的是態度方面 至於執行細節 原本Legacy連測試都沒 怎麼 11/12 09:48
32F:→ Argos: 改 嚴格來說都不算是重構就是了 XD 11/12 09:48
33F:推 ghmsxtwo: 離職前 11/12 09:49
35F:→ x000032001: 推文就推文 推一張圖幹嘛? 11/12 10:16
36F:→ benqm300: 字太多有時會被切斷跳行 11/12 10:19
37F:噓 alihue: 一堆人排斥重構,然後又嫌台灣軟體業爛 11/12 10:40
38F:→ alihue: 反正到最後也是牽拖到老闆,不檢討自己 11/12 10:41
39F:→ alihue: 市面上很多重構的方法,包含寫完整的測試與ci/cd,確定你 11/12 10:42
40F:→ alihue: 在可控的風險下重構。不重構只會讓後人東補西補,踩地雷 11/12 10:43
41F:→ alihue: 讓台灣的軟體缺一個比一個還屎 11/12 10:43
42F:→ vi000246: 重構沒那麼簡單 做得好沒人理 出錯被釘到死 11/12 10:45
43F:→ vi000246: 這是政治問題 不是軟體問題 11/12 10:45
44F:推 devilkool: 新學到東西然後想起過去的code寫得有夠爛時 11/12 10:49
45F:推 cphe: 打掉重練政治問題比較多,做久就知道為什麼,有時候不是你想 11/12 11:05
46F:→ cphe: 做就有辦法執行 11/12 11:05
47F:→ cphe: 除非上面決策的人打從心裡想這麼做 11/12 11:05
48F:→ testPtt: 重構最基本要有明確的spec 11/12 11:13
49F:→ IDL: 想離職時 11/12 11:24
50F:→ alihue: 重構是一群小修改的集合...稍微抽出method或rename都算 11/12 11:36
52F:→ alihue: 雖然繁中譯本已經絕版,但簡體書大家也可以加減看一下 11/12 11:39
53F:→ alihue: 作者就是定義重構的人 11/12 11:40
54F:→ alihue: Its essence is applying a series of small 11/12 11:41
55F:→ alihue: behavior-preserving transformations, each of which 11/12 11:42
56F:→ alihue: "too small to be worth doing". 11/12 11:42
57F:→ vi000246: 我是會考慮重構對我是否Z>B 如果以後能省很多時間 11/12 11:48
58F:→ vi000246: 我就會重構 而不是以公司角度考量 11/12 11:49
59F:推 Argos: 政治的確才是真正的問題 但我上面在說的是工程師本身的態度 11/12 12:01
60F:→ Argos: 一堆人就是寧可放在那邊爛也不想去動 甚至上面給你時間叫你 11/12 12:02
61F:→ Argos: 改你都千推萬推找一堆藉口 這種就是垃圾 軟體界的毒瘤 11/12 12:02
62F:→ Argos: 你想重構但上面不給你時間和資源那就算了阿 至少你提過了 11/12 12:03
63F:→ Argos: 有想要重構的態度出來就行了 至少在這種心態下 你新產出的 11/12 12:03
64F:→ Argos: 程式不會差到哪裡去 因為過去的垃圾你都看不順眼了 11/12 12:03
65F:→ Argos: 但如果懶得去管過去垃圾 那非常有可能未來也是繼續出垃圾 11/12 12:04
66F:推 a926: 重構很難? 11/12 12:06
67F:→ alog: 沒有人排斥重構 是你本不該就隨便亂動已經final的code 這種 11/12 13:33
68F:→ alog: 都是團體內有共同共識考量到長期維護同案/持續上線營運的才 11/12 13:33
69F:→ alog: 會慢慢修改 你一人專案或完全你負責要怎樣改都是你的事 11/12 13:33
70F:→ alog: 只要是在合理的時間範圍完成你要自high/練功都行 11/12 13:34
71F:→ alog: 重構都是會發生在有必要做的時候 而有必要做的時機是在你真 11/12 13:37
72F:→ alog: 的有看到明確的問題時候 11/12 13:37
73F:→ alog: 你知道怎麼改比較正確 跟獲得更大效益 11/12 13:37
74F:→ alog: 不是你在那裡自high想改就在那裡下刀動手 11/12 13:38
75F:→ alog: 小弟做系統幫專案做重構改了數百組核心也寫了數百組測試不 11/12 13:39
76F:→ alog: 知道這個心得不知道夠不夠格 11/12 13:39
77F:→ alog: 上次一位只是改個function覺得沒問題也測過了上線直接當天 11/12 13:40
78F:→ alog: 飛起來 你以為沒壓力啊 11/12 13:40
79F:→ robber1234: 加薪的時候 11/12 13:41
80F:→ alog: 我剛好朋友也有主力的產品 一個系統的營收是用千萬在計算 開 11/12 13:42
81F:→ alog: 個 Basecamp 看到滿滿記載要重構的地方 都是有原因跟理由的 11/12 13:42
82F:→ alog: 真的從來沒看過用感覺在做事 幹這件事的人已經飛上去了 11/12 13:43
83F:→ alog: (上述那位) 11/12 13:43
84F:→ massrelay: 需要花多久時間才是重點 11/12 14:19
85F:推 diabloevagto: 要離職的時候,重構爆掉就不用救了 11/12 18:11
86F:推 iamshiao: 隨時 11/12 18:12
87F:推 SHANGOYANYI: cp改一改就好了 別沒事找事 沒人會感謝你的 11/12 18:53
88F:推 YAYA6655: 退休後 11/12 22:06
89F:推 clamperni: 神明託夢說改就改 11/12 22:14
90F:推 solonwu: 有把握不會出包的話我會重構 11/12 22:39
91F:→ windlll: 舊的不動,新的慢慢寫,然後拿之前的test跑三次 11/12 23:09
92F:→ windlll: 確定沒問題後才拿出來 11/12 23:09
93F:推 new122851: 自己的扣才會 別人的扣一不小心沒用好 自找麻煩 11/13 00:21
94F:推 ppHomer: 重構有很多層次 只是約分/提出一個共用的func 也算重構 11/13 11:50
95F:→ ppHomer: 將某變數或函式 rename成比較有意義看得懂的名稱也是重構 11/13 11:53
96F:→ ppHomer: 將重覆出現的字串 改成const variable來使用也是重構 11/13 11:54
97F:→ ppHomer: 雖然都是小小的整理 都算是重構, 也都需要進行測試 11/13 11:56
98F:→ vul3kuo: 長官看你都準時下班的時候 11/13 13:27
99F:→ bobju: 既然你會猶豫,那就是想得不夠徹底,想到你決定要做(或不要), 11/13 15:45
100F:→ bobju: 那就對了 11/13 15:45
101F:推 tvbic: Never 11/13 19:43
102F:→ loadingN: 吃飽太閒? 自己開個branch去玩啦 11/14 01:15
103F:推 lnmlee: 你想要長期領養這隻野貓的時候你就會想為他洗澡 11/15 15:10
104F:推 ak2840: 打掉就不是重構了 那是重練 11/16 14:46
105F:噓 THEWORLDS: 複製一份 11/18 09:33
106F:→ lp2650056: 大程式重構...?呵呵 11/26 16:08