Re: [請益] 這種情況要怎麼重構

看板Soft_Job作者 (阿ㄆㄧㄚˇ)時間3年前 (2020/06/25 09:46), 3年前編輯推噓15(15031)
留言46則, 18人參與, 3年前最新討論串4/5 (看更多)
我這篇寫的跟原原PO的狀況無關 ※ 引述《tbpfs ( http://pse.is/tbpfs )》之銘言: : 其實我真的不懂為什麼要急著重構 : 有好處嗎? : 一般而言,重構都是發生在農閒的時候 重構有好處, 而且有不得不做的狀況 我曾經遇到效能瓶頸, 發現是在整個流程順序上只要重新調整並安插幾個預處理的階段就能大幅提升效能 但原本的code就不是很clean, 隨便一個method破500行, 一個class有7、80個method 有二十多個boolean變數當作flag在控制狀態(但其實只要用3個變數就能搞定) 並且沒有unit test作保護 所以: 1. 花時間補unit test、再重構 2. 重寫 2當然最不實際, 1很多公司也不會認同, 所以最後就是直接做重構, 效能最後當然是有出來, 可讀性也提升很多 但老實講, 做的真的很痛苦 平時順手整理code那當然是舉手之勞 用千行來計的重構絕對不想再做一次, 重構完bug還算你頭上, 爽只有爽到別人而已 很多老鳥應該都知道了,這邊建議剛出社會的新鮮人: 就算你知道重構能夠大幅提升效能改善可讀性, 也要裝作不知道, 更不要主動提出重構 被你重構code的人可能會不爽你, 自己做了工作還變多 錢還是一樣, 爽只有爽到其他同事而已 公司大家寫哪種code就跟著寫哪種, 寫爛code搞得難維護更顯得你重要, 反正pm也不懂 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.112.12 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1593049606.A.118.html

06/25 10:32, 3年前 , 1F
我個人很難對這種無可奈何妥協,所以我寧願改的很痛
06/25 10:32, 1F

06/25 10:32, 3年前 , 2F
苦,我也不寫糞扣,反正大不了就開除我也沒差
06/25 10:32, 2F

06/25 10:36, 3年前 , 3F
大家好像很害怕重構 如果是以TDD開發的話 重構只是其中
06/25 10:36, 3F
就我所知國內不少公司是沒有在run tdd, 就算有, 稍有年紀的公司還是會有legacy code

06/25 10:36, 3年前 , 4F
一個步驟而已 如果重構沒有建立在單元測試上 那重構可能
06/25 10:36, 4F

06/25 10:36, 3年前 , 5F
會提早結束你的職業生涯
06/25 10:36, 5F
重構當然還是從簡單的整理開始做起, snippet內的邏輯是能夠確認的; 我覺得把單元測試與重構的成功與否畫上等號是有點詭異的 ※ 編輯: EricTCartman (36.231.112.12 臺灣), 06/25/2020 10:47:11

06/25 11:07, 3年前 , 6F
台灣應該是要重構就塊陶吧= = 單元測試只能保護你加
06/25 11:07, 6F

06/25 11:07, 3年前 , 7F
功能的時候不要弄壞
06/25 11:07, 7F

06/25 11:10, 3年前 , 8F
依據Martin Fowler的定義「在不改變軟體外部行為的前提
06/25 11:10, 8F

06/25 11:10, 3年前 , 9F
下,改變其內部結構,使其更容易理解且易於修改 」,我
06/25 11:10, 9F

06/25 11:10, 3年前 , 10F
的認知是重構並不是效能優化而是增加可閱讀性,如果沒有
06/25 11:10, 10F

06/25 11:10, 3年前 , 11F
以單元測試案例為基礎,那麼重構就是在增加引入bug的機
06/25 11:10, 11F

06/25 11:10, 3年前 , 12F
06/25 11:10, 12F
假設有10000行code, 流程會參考某個物件的狀態而變化, 今天重構其中100行, 在這100行內改變該物件的狀態, 補了測試也證明該單元沒有錯 但除此之外還有9900行, 實務上你也會把那9900行的測試補完才繼續重構嗎? ※ 編輯: EricTCartman (36.231.112.12 臺灣), 06/25/2020 11:22:56

06/25 11:21, 3年前 , 13F
原po的例子應該是他要先重構別人的code才有辦法加優化的功
06/25 11:21, 13F

06/25 11:21, 3年前 , 14F
能進去,這種就常常改也不是,不改也不是。但是”在台灣”
06/25 11:21, 14F

06/25 11:21, 3年前 , 15F
,要嘛重構就默默做完不要聲張,頂多就是簽入時留個到此一
06/25 11:21, 15F

06/25 11:21, 3年前 , 16F
遊註解深藏功與名,要嘛就是你位置足夠高,可以主導架構或
06/25 11:21, 16F

06/25 11:21, 3年前 , 17F
專案方向跟時程,不然很多時候都是自找麻煩。
06/25 11:21, 17F

06/25 11:36, 3年前 , 18F
只能在開發相關功能時順手改 這樣才會測到比較保險
06/25 11:36, 18F

06/25 11:45, 3年前 , 19F
如果我要重構1萬行的程式 我還是會先寫單元測試 但如果
06/25 11:45, 19F

06/25 11:45, 3年前 , 20F
考慮時程壓力 這種技術債的東西誰接誰倒楣
06/25 11:45, 20F

06/25 12:03, 3年前 , 21F
推先寫測試再重構,上線沒寫測試重構根本搞事
06/25 12:03, 21F

06/25 12:05, 3年前 , 22F
有測試重構才舒服啊,改完跑測試全過就舒坦,但寫測試才
06/25 12:05, 22F

06/25 12:05, 3年前 , 23F
是真正地獄XD
06/25 12:05, 23F

06/25 12:07, 3年前 , 24F
另外接收別人的code重構 ,根本吃力不討好
06/25 12:07, 24F

06/25 12:11, 3年前 , 25F
雖然閉著眼睛良心上很痛苦...
06/25 12:11, 25F

06/25 12:12, 3年前 , 26F
但是也只能等產品整個周命期過..
06/25 12:12, 26F

06/25 12:14, 3年前 , 27F
我有看過拿著重構去跟公司要時間的人,通常都是.....
06/25 12:14, 27F

06/25 12:15, 3年前 , 28F
上面會說你想重構是你的事情 但時間到東西還是要出來
06/25 12:15, 28F

06/25 12:15, 3年前 , 29F
個人滿喜歡加新功能時順便重構 還好本來就有unit test
06/25 12:15, 29F

06/25 12:25, 3年前 , 30F
重構如果不算考績, 然後還被靠腰說那是你自己平常就要維
06/25 12:25, 30F

06/25 12:25, 3年前 , 31F
護的 你就不會想重構了
06/25 12:25, 31F

06/25 12:26, 3年前 , 32F
但有些code一整包雜在一起,很難在重構前先有單元測試..
06/25 12:26, 32F

06/25 12:26, 3年前 , 33F
我們公司反而很鼓勵重構,因為產品已經發展成熟沒什麼事
06/25 12:26, 33F

06/25 12:26, 3年前 , 34F
做,只好常常重構來硬擠出一點事做
06/25 12:26, 34F

06/25 12:27, 3年前 , 35F
測試如果寫得比待測程式更複雜,也只會增加維護困難吧..
06/25 12:27, 35F

06/25 12:45, 3年前 , 36F
這才是職場真實環境
06/25 12:45, 36F

06/25 14:44, 3年前 , 37F
增改需求時順便重構,這樣出 bug 比較好解釋,否則就只能
06/25 14:44, 37F

06/25 14:44, 3年前 , 38F
特別找出維護/效能上的改善點來說
06/25 14:44, 38F

06/25 17:08, 3年前 , 39F
這跟重構的定義不一樣吧 根本不是重構 已經是為了效能提升
06/25 17:08, 39F

06/25 17:08, 3年前 , 40F
做的新功能了
06/25 17:08, 40F
不是重構; 但沒重構很難做改善. 重構途中也有可能踢掉重複、冗餘的計算部分

06/25 17:09, 3年前 , 41F
這只說明你們公司在開發 feature 根本沒有做測試而已 XD
06/25 17:09, 41F
是針對10年前的code進行效能提升, 我不覺得提升效能算是做一個新feature legacy code沒做測試這是大家都知道的事

06/25 18:10, 3年前 , 42F
是說寫 test 也只能測到已知的問題, 我意見跟樓上一樣,
06/25 18:10, 42F

06/25 18:10, 3年前 , 43F
這是重新開發新功能了. XD
06/25 18:10, 43F

06/25 18:11, 3年前 , 44F
另外重構不會碰到一萬行還是一千行的問題,重構就是涵蓋問題
06/25 18:11, 44F

06/25 18:11, 3年前 , 45F
一萬行或一千行沒有差別, 做法都是一樣的.
06/25 18:11, 45F
做法一樣, 時間跟規模不會一樣, 這你認同吧 ※ 編輯: EricTCartman (36.231.112.12 臺灣), 06/25/2020 21:01:02

06/27 01:27, 3年前 , 46F
推一樓
06/27 01:27, 46F
文章代碼(AID): #1Uz0864O (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1Uz0864O (Soft_Job)