什么是代碼重構
編輯在計算機編程和軟件設計中,代碼重構是重構現有計算機代碼的過程——改變因式分解——而不改變其外部行為。重構旨在改進軟件的設計、結構和/或實現(其非功能屬性),同時保留其功能。重構的潛在優勢可能包括提高代碼的可讀性和降低復雜性;這些可以提高源代碼的可維護性并創建更簡單、更簡潔或更具表現力的內部架構或對象模型以提高可擴展性。重構的另一個潛在目標是提高性能。軟件工程師面臨著編寫執行速度更快或使用更少內存的程序的持續挑戰。
通常,重構應用一系列標準化的基本微重構,每一個(通常)都是計算機程序源代碼中的微小變化,要么保留軟件的行為,要么至少不修改其與功能要求的一致性。許多開發環境為執行這些基本重構的機械方面提供了自動化支持。如果做得好,代碼重構可以幫助軟件開發人員發現和修復隱藏或休眠的錯誤或漏洞通過簡化底層邏輯和消除不必要的復雜程度,在系統中實現。如果做得不好,它可能無法滿足不更改外部功能的要求,從而可能引入新的錯誤。
代碼重構的好處
編輯重構活動有兩大類好處。
- 可維護性。更容易修復錯誤,因為源代碼易于閱讀并且其作者的意圖易于掌握。這可以通過將大型單片例程減少為一組單獨的簡潔、命名良好、單一用途的方法來實現。可以通過將方法移至更合適的類或刪除誤導性注釋來實現。
- 可擴展性。如果應用程序使用可識別的設計模式,則更容易擴展應用程序的功能,并且它提供了一些以前可能不存在的靈活性。
性能工程可以消除程序中的低效率問題,即所謂的軟件膨脹,這是由旨在最小化應用程序開發時間而不是運行時間的傳統軟件開發策略引起的。性能工程還可以針對運行它的硬件定制軟件,例如,利用并行處理器和向量單元。
代碼重構的挑戰
編輯重構需要提取軟件系統結構、數據模型和應用程序內部依賴關系,以獲取現有軟件系統的知識。團隊的更替意味著對系統當前狀態以及離職開發人員做出的設計決策的了解缺失或不準確。進一步的代碼重構活動可能需要額外的努力來重新獲得這些知識。重構活動會產生架構修改,這些修改會惡化軟件系統的結構架構。這種惡化會影響架構屬性,例如可維護性和可理解性,這可能導致軟件系統的完全重新開發。
當使用提供有關算法和代碼執行序列的數據的工具和技術時,代碼重構活動受到軟件智能的保護。為軟件系統結構、數據模型和組件內依賴項的內部狀態提供可理解的格式是形成高級理解然后細化需要修改的內容以及如何修改的視圖的關鍵要素。
代碼重構的測試
編輯應該在重構之前設置自動單元測試,以確保例程仍然按預期運行。當使用單個原子提交執行時,單元測試甚至可以為大型重構帶來穩定性。允許跨多個項目的安全和原子重構的常用策略是將所有項目存儲在單個存儲庫中,稱為monorepo。
有了單元測試,重構就變成了一個迭代循環,即進行小程序轉換,對其進行測試以確保正確性,然后再進行另一個小轉換。如果在任何時候測試失敗,最后的小更改將被撤消并以不同的方式重復。通過許多小步驟,程序從原來的位置移動到您想要的位置。為了使這個非常迭代的過程變得實用,測試必須運行得非常快,否則程序員將不得不花費大部分時間等待測試完成。極限編程和其他敏捷軟件開發的支持者將此活動描述為軟件開發周期的一個組成部分。
技術
編輯以下是一些微重構的示例;其中一些可能僅適用于某些語言或語言類型。可以在MartinFowler的重構書和網站中找到更長的列表。許多開發環境為這些微重構提供自動化支持。例如,程序員可以單擊變量的名稱,然后從上下文菜單中選擇重構的“封裝字段”。然后,IDE會提示您提供其他詳細信息,通常是合理的默認值和代碼更改的預覽。在程序員確認后,它將在整個代碼中執行所需的更改。
- 允許更多理解的技術
- 程序依賴圖-數據和控制依賴的顯式表示
- 系統依賴圖-PDG之間過程調用的表示
- 軟件智能——對初始狀態進行逆向工程以了解現有的應用程序內依賴關系
- 允許更多抽象的技術
- 封裝字段——強制代碼使用getter和setter方法訪問字段
- 泛化類型——創建更通用的類型以允許更多的代碼共享
- 用狀態/策略替換類型檢查代碼
- 用多態性替換條件
- 將代碼分解成更多邏輯片段的技術
- 組件化將代碼分解為可重用的語義單元,這些單元呈現清晰、定義明確、易于使用的接口。
- 提取類將部分代碼從現有類移動到新類中。
- 提取方法,將較大方法的一部分轉換為新方法。通過將代碼分解成更小的部分,它更容易理解。這也適用于函數。
- 改進代碼名稱和位置的技術
- 移動方法或移動字段——移動到更合適的類或源文件
- 重命名方法或重命名字段-將名稱更改為更好地揭示其用途的新名稱
- Pullup–在面向對象編程(OOP)中,移動到超類
- 下推——在OOP中,移動到子類
- 自動克隆檢測
硬件重構
編輯雖然術語重構最初僅指對軟件代碼的重構,但近年來用硬件描述語言編寫的代碼也被重構了。術語硬件重構被用作在硬件描述語言中重構代碼的簡寫術語。由于大多數硬件工程師不認為硬件描述語言是編程語言,因此硬件重構將被視為與傳統代碼重構不同的領域。
Zeng和Huss提出了模擬硬件描述(在VHDL-AMS中)的自動重構。在他們的方法中,重構保留了硬件設計的模擬行為。改進的非功能測量是重構的代碼可以由標準綜合工具處理,而原始代碼不能。Synopsys的同事MikeKeating也研究了數字硬件描述語言的重構,盡管是手動重構。他的目標是讓復雜系統更容易理解,從而提高設計人員的生產力。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/131801/