前面我們提到了,面對軟體工業時代的到來,我們的軟體企業陷入了一種更深的迷茫之中,一種「後有追兵,前有懸崖,進退兩難」的境地。後有追兵:面對維護了數十年之久的大型遺留系統,我們到底改還是不改?不改,面對越來越多的需求變更,我們維護的成本越來越高,變更變得越來越困難;面對不斷湧現的新技術,使我們的系統顯得越來越醜陋與落後;面對越來越多的競爭者,使我們面臨著被市場淘汰的風險。前有懸崖:原本執行得好好的軟體系統,湊合一下還可以執行幾年。一不小心改出問題了,企業立馬就歇菜兒了,面對大量的使用者投訴,企業四處救火,競爭對手趁火打劫,這是任何軟體企業都不能承受的巨大風險。難倒真的「熊掌和魚不能兼得」嗎?真的沒有一種方法,能夠既保證我們系統可以技術改造,又能有效地避免改造過程的風險嗎?有,那就是系統重構。
1.系統重構是那些系統架構師、技術大牛玩的高階玩意兒,咱普通屌絲不懂,跟咱沒啥關係。
2.系統重構就是改**,大改特改那種,整個重來一遍那種,這個比較**,比較容易改出事兒,還是不要輕易嘗試為妙。
3.我知道系統重構,也知道它能改善遺留系統,但我還是不敢輕易嘗試,因為改出問題來怎麼辦,還是算了吧。
然而我認為,現在我們對系統重構有太多的誤解,以至於我們還不怎麼了解它,就已經將它拒之門外。什麼是系統重構呢?它是一套嚴謹而安全的過程方法,它通過一系列行之有效的方法與措施,保證軟體在優化的同時,不會引入新的bug,保證軟體改造的質量。這一點在我後面一步一步的拆解中,你可以慢慢體會到。
我們先看看系統重構的概念。系統重構,就是在不改變軟體外部行為的基礎上,改變軟體內部的結構,使其更加易於閱讀、易於維護和易於變更[1]。
系統重構中乙個非常關鍵的前提就是「不改變軟體外部行為」,這個前提非常重要,它保證了我們在改造原有系統的同時,不會為原系統帶來新的bug,以確保改造的安全。這裡,什麼是「為原系統帶來新的bug」?我們必須為其做出乙個嚴格的定義,那就是「改變了軟體原有的外部行為」。也許你對此有些不太贊同,改變了軟體原有的外部行為,怎麼就能武斷地認為,是為原系統帶來了新的bug呢?為此我們來舉個例吧。
假如乙個系統的報表查詢功能,原來在**裡的返回結果中,日期是這樣表示的「2013-2-18」,經過系統改造以後變成這樣了「2013-2-18 00:00:00」,這是bug嗎?作為開發人員你可能認為這算什麼bug,但作為客戶那就是bug,因為它讓**變得難看,使用不再方便了。系統重構,對於客戶來說應當是完全透明的。我們為之做了很多任務作,而他們應當完全感覺不到它的存在。如果我們的重構做到了這一點,那麼我們的重構就必然是安全的、可靠的、沒有風險的。
更廣泛一些來說,如果我們開啟軟體內部,保證系統中的每個介面與改造前是等價的,也就是說,其輸入輸出在改造前後都是一致的。當我們的每個改造都是這樣進行的,則必然不會為系統帶來新的bug。這就是我們進行改造的保險索,它也是我現在所說的重構,與以往那種拿著**一陣瞎改的根本區別。
總而言之,系統重構不是那種冒著極大風險進行的**修改,而是必須保證修改前後輸入輸出的一致,這就是我們說的「不改變外部行為」。為此,貫穿整個重構過程的是不斷的測試。起初這種測試是手工測試,隨後逐漸轉變為自動化測試。每修改一點點就進行乙個測試,再修改一點點。測試,就是系統重構的保險索。
Refactoring 筆記 什麼是重構
聽說這本書好長時間了,一直沒有時間去讀,也可以說一直沒時間靜下心來去讀,如果靜不下心來讀,讀了也是白讀。本人記性雖好無奈忘性更好,唯有寄於文字,記錄於此。呵呵,廢話少說,下面開始.什麼是重構?重構就是指在不改變程式外在行為的前提下,對 做出修改,改進程式內部結構的過程。書中說到本質上說,重構就是在 ...
什麼是ERP系統
所謂erp是英文enterprise resource planning 企業資源計畫 的簡寫。它是從mrp 物料資源計畫 發展而來的新一代整合化管理資訊系統,它擴充套件了mrp的功能,其核心思想是 鏈管理,它跳出了傳統企業邊界,從 鏈範圍去優化企業的資源,是基於網路經濟時代的新一代資訊系統。它對於...
什麼是MIS系統?
所謂的mis系統,是管理資訊系統 management information system 系統。具我了解乙個完整的 mis應包括 輔助決策系統 dss 工業控制系統 ipc 辦公自動化系統 oa 以及資料庫 模型庫 方法庫 知識庫和與上級機關及外界交換資訊的介面。其中,特別是辦公自動化系統 oa...