[心得] 重構與需求

看板Soft_Job作者 (西亞加拉)時間13年前 (2011/04/16 13:50), 編輯推噓5(5015)
留言20則, 9人參與, 最新討論串1/1
重構一下成了顯學,開個新標題好了 我現在相信,要發動真正的重構,必須要執行重構的人對於被重構的東西有絕對的掌握力 這裡所謂的「掌握」包含很多層面 -看得懂那段 code 在幹麻 -知道客戶需要那段 code 幫他做到什麼(這跟上一點常常是兩回事!) -確切知道那段 code 會被哪些作業流程使用到 -公司前輩或長官願意讓你做 -重構後的變更,甚至出問題時,會造成多少程式流程與公司內部政治上的影響 大規模的修改不會只是技術問題,那還是政治問題,但寫 code 的人通常不太關心政治 這其實很危險,輕則名聲臭掉,重則搶不到公司資源 尤其是有些東西只看程式怎麼看都不合理,但是他剛好會吐出使用者要的東西 不論是自己程度太差看不懂還是原本作者歪打正著,一但程式改「對」了,可能對使用 者來說會發現程式被改「壞」了 怎麼能不改,明明那段程式就亂七八糟啊 可是,使用者跟開發者的需求真的就是不一樣 出錢的是使用者,不是開發者 說到需求不同,我舉個例子 「印包裝標籤」這種只是把資料撈出來印在貼紙上,不影響資料流的動作,開發的時候 並沒有特別去關注。實際上線後發現資料也是正確的,只是字形跟大小跟樣本標籤不 同。這聽起來好像沒什麼,想說可以慢慢修就沒去在意。 可是對使用者的客戶來說問題可大了 問題有多大?大概就像家裡汽車牌照的字型與法令規定的不同還被警察發現這麼大... 甚麼一片蛋糕根本是騙人的, the cake is a lie. 當然這也跟 spec / QA 不夠明確有關,不過在 spec / QA 強悍的地方,我想出現麵條 程式的機會也不會這麼高。 有點扯遠了,我想表達的是,只看 code 的話根本不會知道這會造成這麼大的問題。 所以只看 code 就作 refactor 很可能會搞死人 (苦笑) 出錢的是使用者,每天在用的是使用者。系統是用來迎合他們的需求,不是我的 這個道理聽起來很簡單,但是落實到生活之中(?)其實很困難 另外是對 code 的修改權。很多時候一堆麵條糨糊之所以會誕生,不是因為中間經手 的都是笨蛋,而是因為經手人可能只有一半是所謂的笨蛋,另一半胸懷壯志 可是胸懷壯志卻只有權限作半套,那就糟糕了 笨蛋 pattern 你可能要話三個月熟悉,聰明 pattern 可能要一個月 兩個混在一起可能要半年 這就跟喝茶一樣,要嘛不喝,要嘛喝完,在那邊半套會讓人心火難平 而且起來的火也同樣是歸藍趴火 只有自己有能力,有時間,有權限作整套的時候才作。而且最好是把工時算在使用者 變更需求的時候一起做。節省部門成本,改爛了還可以虧使用者說「都是你改這個改 那個變來變去的,這樣系統很不穩」 是啊,這樣等於是變相的欺騙,還不算是善意的謊言。但是有助於自己名聲的維持,且 使用者在提需求時也會更仔細思考需求是否合理。 而且維持自己在使用者之間的名聲,對於你要推動一些使用者不想做的工作時很有幫助 就當作用撒旦的手做上帝的事吧 當然啦,如果使用者提的需求是修改銷售系統,結果改壞掉的是人資系統,那你的名聲 絕對會臭掉..... 我的工作形態跟板上大多數人不同,我們沒有SD/SA之類的角色,也沒有 QA。大多數 時候就是由系統管理人(例如我)跟對應的使用者兩三個人做討論,然後開單進行修改 在這種狀況下我的工作會比大多數程式開發者更貼近實際業務流程,也要處理更多 政治或人際問題。一開始到這個位子上的時候受到了強大的文化衝擊 不過待久了,我覺得還滿有趣的... 尤其是我對自己的系統有完全的掌握力,也比大多數的 PG 更清楚業務的真貌 當然啦,權力越大責任也越大,不過不是責任制所以沒問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.184.216.237

04/16 18:13, , 1F
推一個分享
04/16 18:13, 1F

04/16 18:22, , 2F
政治問題+1
04/16 18:22, 2F

04/17 10:49, , 3F
這就是人生,別光看code,不然會害死自已的~
04/17 10:49, 3F

04/17 18:49, , 4F
refactoring應該提一下測試程式的 :P
04/17 18:49, 4F

04/17 20:46, , 5F
只有樓上說到重點...
04/17 20:46, 5F

04/17 20:50, , 6F
refactor的保證是unit test,unit test的成功是
04/17 20:50, 6F

04/17 20:51, , 7F
fucntion的細粒度,及良好的design
04/17 20:51, 7F

04/17 20:52, , 8F
良好的design取決的你的觀念,如DIP,MVC
04/17 20:52, 8F

04/18 00:45, , 9F
之所以不提測試是因為,敝公司的測試流程爛到爆炸...Orz
04/18 00:45, 9F

04/18 00:46, , 10F
所謂的測試就是在測試機上做一次業務流程,其他的就靠PG
04/18 00:46, 10F

04/18 00:46, , 11F
自己華麗的跟自己戰鬥...
04/18 00:46, 11F

04/18 09:37, , 12F
其實下一個問題應該來討論一下怎麼做test是低成本跟有效的
04/18 09:37, 12F

04/18 09:37, , 13F
不講test很多時候是因為公司不願意做,如果講 test也是口號
04/18 09:37, 13F

04/18 09:37, , 14F
式的說說而沒有具體導入經驗分享,那講十年也只是空講。
04/18 09:37, 14F

04/18 09:38, , 15F
板上一定有板友(包括我在內)都對test不算陌生也深瞭其中
04/18 09:38, 15F

04/18 09:38, , 16F
滋味,有機會我們再來開這個話題來聊一下test的優劣。
04/18 09:38, 16F

04/21 08:29, , 17F
沒有測試你根本不能保證重構後和重構前功能一致
04/21 08:29, 17F

04/21 08:30, , 18F
這不叫重構 這叫做重寫
04/21 08:30, 18F

02/16 16:40, , 19F
謝謝指教.^^....&&我當然有測試啊,不然怎麼知道改完的結果
02/16 16:40, 19F

02/16 16:41, , 20F
....推錯@@
02/16 16:41, 20F
文章代碼(AID): #1DgIuRbz (Soft_Job)