複製貼上程式碼真的有問題嗎?

發表於2012-06-30

英文出處:Is Copy and Past Programming Really a Problem,翻譯:大愛資料

當你程式設計的時候,複製和貼上—將你現有的程式碼進行再利用,這是不必再重複編碼的最佳做法。這是一個技術債務的最佳例子:偷懶,草率和目光短淺,這會讓維護程式碼的長期成本增加。

但它同時也很自然,找一些已經在執行的程式碼,跟你所需要的非常像,複製,貼上,並用它作為起點。幾乎每個人都這麼幹過。因為有些時候,複製過來的程式碼不僅僅是方便,而且就算我們所需要的

首先要清楚我講得複製貼上的意思。不是說從網際網路上覆制程式碼,我指的是程式設計師重用程式碼的捷徑–當他們遇到的問題與他們之前在另外一個系統中遇到的問題類似的時候,他們開始用現有的程式碼副本,並加以改變。

在開發和設計階段的早期,複製和貼上並沒有什麼優勢。程式碼和設計仍可塑的,這時系統需要做的是建立一套正確的抽象。這個時候沒有什麼好複製的。當在你開發的後期時,你已經有大量的程式碼,你需要維護龐大的系統,複製和貼上就變得更加複雜。

 

為什麼要複製貼上?

程式設計師複製貼上,因為這樣可以節省時間。首先,你必須站在一個起點,你要知道你的程式碼要做什麼事?你所要做的就是那裡需要增加,哪裡需要修改。你就可以專注於理解不同點。這時你變得更加自由–你可以清理你不需要的程式碼。這一切都很主要。因為你可能不知道你需要保留的,你需要改變的,直到你進入更深的層面。

複製和貼上同樣可以降低風險。如果你改變和擴充套件現有的程式碼,至少它執行了一段時間,通常是更安全的,並且成本較低。

如果你正在構建一個新的 B2B 客戶介面,你會使用新的嗎?通常會採用現有的介面,作為新的起點。然後看看那裡需要改變,到年底的時候,你就有了 2 個介面,但通常需要一段的時間來理解這個程式碼是什麼?

找到一個共同的設計,正確的抽象和變化,以支援不同的現實和異常處理。你最終的程式碼可能變得無法理解,難以維護,直到不得不改變—因為原來的設計沒有預料到不同情況下的異常和擴充套件,重構只能到此結束,你需要一個全的設計和實施。

改變現有的程式碼,進行重構和擴充套件,將會讓你目前的工作增加風險和成本,你不能為了適應網上的新客戶而讓給老客戶帶來問題。你需要格外的小心,你不但要明白你將要做的事每個細節(新介面),而且要明白現有介面的每個細節,它的行為和假設。

如果你認為這些改變都能被自動化測試工具捕捉到,那你就很天真了—假設你已經有良好的自動化測試工具,你需要整合現有的介面測試,這可能需要花費數週甚至數月的時間。讓那些客戶花費這麼多的時間適應新介面,他們會不滿意,因為他們都已經習慣了。

現在就複製貼上,如果需要的話,過些日子要制定計劃來重構和重新設計,是明智的選擇。

複製貼上程式碼真的有問題嗎?

什麼時候該複製貼上?

1. 分叉 — 試探性的原因,如適應不同的平臺或者硬體

2. 模板 — 一些語言不支援某些庫或者共享函式,這時有必要複製貼上程式碼。

3. 定製 — 臨時的解決辦法,只要是臨時的。

4. 微軟克隆的做法 — 一個小組的程式碼給另外小組用。這時開源的通常做法,需要擴充套件來解決專有問題。

 

什麼時候複製貼上會變成問題?

什麼時候複製貼上會成為問題,有幾個主要因素。

首先,你對你複製的程式碼理解程度是多少,你穩定程度如何,有多少潛在的 bug。你總不想繼承別人的問題吧。

還要知道這個程式碼已經拷貝了多少份?根據“三則重構”(three strikes and you refactor)原則。因為你複製了什麼,並且加上改變,就帶來維護上的問題。這個維護的困難就是如何理清問題,因為 2 個版本不足以理解哪些是共有的,哪些是特殊的。

越多次的拷貝,越多的維護上的問題。多個版本的更改和修正增加了維護的風險和成本。保持程式碼的同步,需要在多個系統中改變它。

雖然一些工具可以幫助你來尋找複製和貼上的程式碼。隨著時間的推移,不同的程式設計師尋找複製的副本程式碼變得更加艱難。有些程式設計師建議離職時做好複製標記,以便後來的程式設計師維護。

Copy and Paste programming doesn’t come for free. But like a lot of other ideas and practices in software development, copy and paste programming isn’t right or wrong. It’s a tool that can be used properly, or abused.

複製貼上不是免費的。和軟體開發中的其它想法和實踐一樣,它沒用對錯之分。它是一個工具,你可以善用,也可以濫用。

Brian Foote, one of the people who first recognized the Big Ball of Mud problem in software design, says that copy and paste programming is the one form of reuse that programmers actually follow, because it works.

It’s important to recognize this. If we’re going to Copy and Paste, let’s do a responsible job of it.

意識到這些是非常重要的,假設我們有複製貼上,我們必須為我們的工作負責。

 

 

 

相關文章