重複的危害

重複的危害---《程序員修煉之道》節選

作爲程序員,我們收集、組織、維護和利用知識,我們在規範中記載知識,在運行的代碼中使其活躍起來並將其用於提供測試過程中所需的檢查。

遺憾的是,知識並不穩定,它變化--常常很快。你對需求的理解可能會隨着與客戶的會談而發生變化,政府改變規章制度,有些商業邏輯過時了,測試也許表明所選擇的算法無法工作。所有這些不穩定都意味着我們要把很大一部分時間花在維護上,重新組織和表達我們系統中的知識。

大多數人都以爲維護是在應用發佈時開始的。維護就意味着修正bug和增強特性。我們認爲這些人錯了。程序員持續不斷地維護。我們的理解逐日變化,當我們設計或編碼時,出現了新的需求,環境或許變了,不管原因是什麼,維護都不是時有時無的活動,而是整個開發過程中的例行事務。

當我們進行維護時,我們必須找到並改變事物的表示--那些嵌在應用知識中的知識膠囊。問題是,在我們開發的規範、過程和程序中很容易重複表述知識,而當我們這樣做時,我們是在向維護的噩夢發出邀請--在應用發佈之前就會開始的噩夢。

我們覺得,可靠地開發軟件,並讓我們的開發更易於理解和維護的唯一途徑,是遵循我們稱之爲DRY的原則:
系統中的每一項知識都必須具有單一、無歧義、權威的表示。
我們稱之爲DRY--Don't repeat yourself!

與此不同的做法是在兩個或者更多地方表達同一事物。如果你改變其中一處,你必須記得改變其他各處。這不是你能否記住的問題,而是你何時忘記的問題。

重複是怎樣發生的

我們所見到的大多數重複都可歸入下列範疇:
1、強加的重複(imposed duplication)。開發者覺得他們無可選擇--環境似乎要求重複。
2、無意的重複(inadvertent duplication)。開發者沒有意識到他們在重複信息。
3、無奈的重複(impatient duplication)。開發者偷懶,他們重複,因爲那樣似乎更容易。
4、開發者之間的重複(interdeveloper duplication)。同一團隊(或不同團隊)的幾個人重複了同樣的信息。


心得體會:
一般來說,我們的軟件都是具有一定的生命週期的,那麼維護、升級就是軟件生命週期中非常重要一部分。重複的知識在系統中多個地方表示,會給維護工作帶來極大的麻煩和風險。當然,造成重複的原因很多,誠如上面節選的段落所列出來的那些原因。但是,我們仍能夠採取一些有效的措施來避免重複,譬如採用元數據記錄一些配置信息,項目組定義一套良好的規範,增加開發者之間的交流,做好充分的文檔記錄等等。書中的一句話說得特別好,“這不是你能否記住的問題,而是你何時忘記的問題”。因爲維護都是發生在不得不修改的時候,通常這些時候我們都會充滿各種壓力,那麼如果恰巧你忘了更改多處重複知識中的一處,那麼風險就產生了。有時候簡短的測試並不能發現這些潛在的風險,那麼這個風險就會流入客戶手中。

總的來說,重複的知識會給維護帶來很多危害,除非你的系統永遠不需要維護,而通常這種情況是不會發生的。在開發過程中我們要盡力採取各種措施來避免重複。


發佈了23 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章