大型系統的重構

banq發表於2010-01-26
軟體是有生命的,隨著時間推移,軟體規模不斷擴大,大家會發現新功能難以新增擴充套件,系統變得改一動百,老程式設計師開始辭職,這些都是說明軟體系統必須重構了,Refactoring Large Software Systems一文以親身經歷談論一個大型系統的重構經驗。

大型軟體的生命週期如下圖:

大型系統的重構

成熟Maturity期初期:效能好,各方面功能都很穩定,可以順利增加許多新功能,BUG能夠控制修復。但是當到了
Infeasibility階段就開始惡化,出現如下各種情況:
1.無法加入新功能。每次加入新功能都是非常費力,導致新功能實現時間延長,專案不斷拖延。
2.每個BUG修復帶來新的BUG,改正了老問題,卻帶來了新問題。
3.原先架構受到損害,被各種程式設計師改得面目全非。
4.散發程式碼臭味,重複方法 長方法。參考Martin Fowler的重構一書。
5.測試覆蓋面不足,無法保證原先功能正常。隨著新功能擴充套件複雜,老功能是否正常都無法保證。

他們提出重構方法:
1.重新設計redesign應用:一個完全重新設計和應用的重新實現。重新建模,從分析開始重新設計,程式碼重寫。
2.重新實現Reimplementation:What不動,重新首先HOW:重寫程式碼 進行可伸縮性的重構,增加並行非同步執行。

成功重構的條件是:
1.Team :人員多少,期待一兩個不現實。
2.經驗:大型規模系統重構必須由經驗豐富擔任,紮實架構設計功底是必須的。
3.動機:不同於開發新功能,學習新知識,重構是程式碼質量更好。(類似做後勤,吃力不討好,但是非常重要)
4.帶頭工程師:雖然都是高手,還是選出一個高高手帶頭,必須非常熟悉原來系統。

如何確保重構目標實現?
1.靈活:重構是一個長期任務,需要不斷根據客戶需要改變。
2.持續整合:需要Build伺服器,每日整合
3.自動測試:確保應用程式的行為並沒有改變的生命線

具體方法是:評估和總體規劃
1.評估出原來系統問題:例如沒有分層
2.提出解決問題的規劃:分層,清理表現層,用通用框架替代自己做的。
下圖是他們重構專案的一個步驟圖,從原來耦合無層到後來分層:

大型系統的重構

重構不是一次性戰鬥,是長期艱鉅任務,邊開發邊重構才不致於痾病成積。這是一個針對不斷惡化的戰鬥。

大型系統的重構

相關文章