程式碼的可攜性 第6回:如何面對與避免Legacy Code

大多的程式人都不愛他人遺留下來的程式碼(有些人甚至是用「痛恨」等更激烈的字眼),尤其是當這些程式碼的原作者已經離職而且無法聯絡上。這樣的程式碼,有人將它們稱為「Legacy Code」,中文則譯為「既有程式碼」。

這類的程式碼的特性,並不是在於它存活了很長一段時間,而是在於已經沒有人能夠理解甚至進一步修改。從這邊可以觀察出來,Legacy Code造成的困擾,正是在這兩個面向上──一個是理解,另一個則是修改。


既有程式碼可能代表著組織長久的經驗及智慧
Legacy Code固然會造成困擾,但是它偏偏又存在。大多數的軟體開發組織,都難免面臨開發成員來來去去的情況,只要有人離開,這人所負責的程式碼,便搖身一變成為Legacy Code。

尚在維護的系統毋需多言,只要還在線上運行一天,就不能因為有人離職而把它廢掉。而共用程式碼,對於開發組織的價值同樣很大,因為它代表組織長久以來的許多經驗及智慧的結晶。這些程式碼,通常代表著可重複使用的程式碼,使用它們可以大幅提升生產力。而這生產力的來源,不單只是因為它減少了撰寫程式的時間,同時這些程式碼經過反覆地運用,早已久經測試、百鍊成鋼。

這些程式碼累積了許多的經驗,長期以來的考驗及修改,有能力應付各種可能的情況。


砍掉重練未必是最好的選擇
Legacy Code無法拋棄,然而也讓人退避三舍,因為之所以會被稱為「Legacy」,是因為已經沒有人熟悉、能夠很有把握地修改。但只要我們還無法捨棄、作廢,終究必須試著和它和平相處,甚至進一步善用它的力量。

面對Legacy Code的第一個難題,就是了解並熟悉這些既有的程式碼。程式人都不愛了解別人所寫下的程式碼,寧願重寫。這是因為重寫新的程式碼,能夠有機會運用新的技術,另一方面,心中又會有那種「昨日種種譬如昨日死」的痛快感覺。

把一切打掉全新做起,就像毀壞一切的大革命,將建立起全新的國度,而在新的國度裡,一切都是那麼美好。不過,事實上,大多數人寫的程式碼一旦過了「保存期限」,終是落到慢慢「腐敗」的局面,新的世界並未來到,而程式人只是選擇再一次「砍掉重練」。


借助極限編程的作法,避免程式碼成為Legacy Code
對Legacy Code的了解與熟悉,是處理Legacy Code的基本功課,一點都不了解,就別說要做什麼處理了。

從技術的角度來處理這個議題,可以從兩個方向努力:加強閱讀程式碼的技巧及提升所寫程式碼的可讀性。

那麼,從管理上又要如何協助面對Legacy Code呢?簡單來說,就是從管理上盡量避免程式碼變成Legacy Code,也就是避免程式碼變得「沒有人能夠理解甚至修改」。

著名的極限編程(eXtreme Programming,XP)對此便多有著墨。或許你的組織並不是採用極限編程或者是其他輕量級的開發方法,但這精神也值得多加借鏡。

XP的12項實務中,系統隱喻(System Metaphor)、程式共享(Collective Ownership)、搭檔編程(Pair Programming)、以及編程標準(Coding Standards)等,都能避免程式碼漸漸成為Legacy Code。

關鍵在於,首先,它建立起組織裡共同而且持續性的符號及撰寫風格,使得每個程式人寫出來的程式碼幾無分別,其次,避免特定程式碼總是由特定人所維護。

這兩個關鍵是有關聯的,倘若不能做到所有程式人都使用相同的符號(主要是命名方式)以及撰寫風格,那麼同一份程式碼,便很難交由其他人維護或改寫。兩人搭檔編程的作用,不僅在於讓一人專職監看,同時也有利於內含在程式碼中的資訊及知識在組織中流動。

搭檔編程不見得廣為眾人所接受,但是它的基本精神值得參考。組織除了可以透過分散程式碼的撰寫及維護責任之外,也可以透過其他的方式,讓程式碼中的資訊及知識,有效地在組織之中流動。

大家都知道,由於時間的限制,工作的交接通常僅具形式,缺乏實質作用。因此,程式碼的撰寫及維護責任,倘若能平均的分散在組織中,而且資訊及知識也能有效流動,這便是一個長期持續作用的事情,即便有人員異動,程式碼也不容易成為Legacy Code,因為沒有任何人是任何程式碼的唯一主人。

《詳細內文請見iThome電腦報417期(www.ithome.com.tw),天瓏、誠品、何嘉仁、搜主義、敦煌、法雅客、Page one書店均有銷售》


417期其他精采內容:
.封面故事:政府廣發工商憑證,企業線上交易如何運用?
.焦點新聞:共同供應契約資訊類招標流程改變
.焦點新聞:趨勢揭露半年後推雲端專用伺服器
.CIO TALK:改造IT體質 和成欣業勒緊腰帶也要導入ERP
.IT人甘苦談:熱愛極簡主義介面風格的程式人
.產品測試:KVM切換器:宏正自動Kn4140v
.產品測試:內接式磁碟陣列:銳銨InTANK MR2020-2S-S2
.iT邦幫忙:FTP出現資料上傳異常現象,該如何解決?/如何架設內部郵件伺服器?/
在中國上網如何避開封鎖?/如何控管員工帶到公司的筆電?/如何評估視訊會議的實用性和適用的設備?/建置AD前,如何規畫、重整公司的電腦?