Can you summarize the following document?
        
  在軟體工程學裡,重構程式碼一詞通常是指在不改變程式碼的外部行為情況下而修改原始碼,有時非正式地稱為「清理乾淨」。在極限程式設計或其他敏捷方法學中,重構常常是軟體開發迴圈的一部分:開發者輪流增加新的測試和功能,並重構程式碼來增進內部的清晰性和一致性。自動化的單元測試保證了重構不至於讓程式碼停止工作。  重構既不修正錯誤,又不增加新的功能性。反而它是用於提高程式碼的可讀性或者改變程式碼內部結構與設計,並且移除死程式碼,使其在將來更容易被維護。重構程式碼可以是結構層面抑或是語意層面,不同的重構手段施行時,可能是結構的調整或是語意的轉換,但前提是不影響程式碼在轉換前後的行為。特別是,在現有的程式的結構下,給一個程式增加一個新的行為可能會非常困難,因此開發人員可能先重構這部分程式碼,使加入新的行為變得容易。  一個重構的小范例是修改一個變數的名稱使其具有更明確的含義,例如從單個字母的「i」重構為「interestRate」(利率,圖一)。較複雜的重構是把一段if區塊中的程式碼變為一個子程式(圖二)。更復雜一點的重構是用多型性來替換codice_1 條件式。「清理」程式碼已經發生了幾十年,重構中最關鍵的認知是有意地「清理」程式碼,透過從已知的紀錄裡一些常用的重構方法清理程式碼,把它從增加新功能分開,然後個別的對程式碼進行測試(任何的行為改變都可能帶來錯誤)。新的實現切合實際需要以改善現有設計,並且不改變原軟體的意圖或行為。  重構面對業界調適接受方面的挑戰。首先,對重構長遠的影響需要更深入研究追蹤。再者,重構存於資料庫輪廓(database schema)的商業邏輯層幾乎是不可能或者非常困難的。最後,對介面造成影響的重構可能造成程式開發上的困境,除非程式設計師有對所有使用者介面的存取權。例如,程式設計師若改變某實體中的方法名稱,他要麼必須對整個專案裡頭所有連結到舊名的參考都加以編輯,要麼屈服於繼續維護使用舊名的殘株殘瓦介面。而該舊名的介面於內部呼叫該方法的新名。

  重構這個術語是從數字與多項式的因式分解類比而來。如,"x" − 1可以被分解為("x" + 1)("x" − 1),這樣揭示了前面的形式不可見的內部結構(如兩個根+1和−1)。同樣,在軟體重構中,在可見結構上的改變通常會揭示原始碼中「隱藏」的內部結構。  上面數學的例子展示了「重構」的問題。一個表示式不盡然客觀地或者處處比另一個更好。它們每個強調不同的方程式的觀點,故其實用便多多少少隨著個別不同使用情況,以及各個數學家個性與風格變動。這個問題於軟體開發領域亦然;個別程式設計師可能對某既定演算法理想的程式形式實現會有不同的意見。  為了簡化測試,重構是分步驟完成的。當重構結束後,任何行為上的變化無疑都是錯誤並可透過除錯該程式的新行為個別修正。  馬丁·福勒的著作《重構》是一個經典參考書。雖然重構已經非正式的使用了很多年了,威廉·歐普迪克在1993年的博士論文卻是第一篇著名的關於的重構的文章,即使所有的理論與機制長久以來就以程式轉換系統存在。所有這些資源提供了一種常用重構方法的型錄索引──所有重構方法需要描述,包括怎樣辨識你需要(或者不需要)套用該方法,以及如何套用的問題。

  下面是不完整的程式碼重構清單。長一點的清單可以在福勒的重構書找到。因為研究者們繼續努力不懈的發明以及實現重構,完整清單可能永遠都不存在。

  許多軟體編輯器與整合環境支援重構自動化,又稱為重構瀏覽器。列舉如下:

  首先使用「重構」一辭於出版文獻是於一篇文章:《Refactoring: An Aid in Designing Application Frameworks and Evolving Object-Oriented Systems", "Proceedings of the Symposium on Object Oriented Programming Emphasizing Practical Applications (SOOPPA)》,1990年9月,由William F. Opdyke與Ralph E. Johnson聯名出版。William Opdyke的博士論文於「重構:物件導向框架」,伊利諾大學,1992年出版。「重構」術語幾乎至其後確定。  就英文新造字學來說,程式碼重構(Refactoring)清楚地來自數學上的分解(factoring)。
程式碼重構(英語:code refactoring)指對軟體程式碼做任何更動以增加可讀性或者簡化結構而不影響輸出結果。