1 介紹
重構在現代軟體開發過程中扮演著重要的角色,它能夠減輕軟體開發人員的 工作負擔,提高軟體開發的生產效率。為了闡明重構的重要性,我們在這裡引用 了developerWorks上David Carew提供的關於重構的教程中的一段話:
現在,一個開發人員的工作大部分在於對現有的代碼進行修改,而不是起草寫 新的代碼。簡單的修改可能包括對現有代碼進行添加。然而,多樣化的修改或擴 展的改變會使軟體內部結構開始惡化。重構改變軟體的內部結構使得軟體更容易 理解並且在不需要改變其顯著的行為的情況下使得修改的代價也更小。
在Java軟體開發過程中,通過使用Eclipse提供的重構工具,我們至少獲得了 以下好處:
1. 最終產品更為健壯:我們對程式碼的修改將不太可能出錯,出現遺漏修 改的可能變少,即使出現問題也能夠通過Undo功能回退到重構前的狀態。
2. 提高了生產效率。通常一次重構能夠完成對程式碼的多處改動。最為明 顯的例子可能是Eclipse提供的Rename重構,它能夠在修改名稱的同時相應的更 改所有的引用。
Eclipse 為我們提供了多種實用的重構功能,在軟體開發過程中使用這些重 構能夠給我們帶來極大的好處。然而,針對每個開發人員的特殊需要,總有一些 迫切需要的功能是不能通過已有的重構來獲得的。這個時候,我們可以對 Eclipse平台進行一些擴充,建立適應我們自己需要的重構。如果這個重構恰好 能夠符合大多數人的需要,我們也可以像其他Eclipse的contributor一樣,將我 們的重構貢獻給Eclipse社區。
接下來,我們將通過一個例子來展示如何在Eclipse中建立新的重構功能。我 們這裡建立的重構將用於遷移JUnit的測試案例。我們知道,在目前的版本的 JUnit中,一個用於測試的函數必須以字串"test"作為方法名稱的開始。而在 即將來到的JUnit 4中,一個"@Test"的Annotation被用於標明方法是一個測試方 法。我們將要建立的重構將完成這個遷移工作,即在所有的以"test"開始的方法 之前加上"@Test"標記。@Test Annotation還可以包含一個timeout屬性用來規定 方法的最大執行時間,我們在嚮導中提供了一個頁面供使用者選擇是否需要 timeout屬性。
2 結果預覽
為了給讀者一個直觀的感受,我們下面首先介紹本文中例子的實際運行效果 。在閱讀完本文之後,讀者朋友也能夠順利的完成類似的功能。
啟動例子程式提供的Refactor之後,我們獲得了一個由三個頁面組成的嚮導 。在第一個頁面中,使用者可以選擇是否需要timeout參數,並且使用者能夠設定 timeout參數的值。
圖 1 輸入參數
當使用者輸入參數完畢之後,通過單擊Next按鈕我們將進入下一個頁面。嚮導 將進行初始條件檢查和最終條件檢查,並將檢查的結果反饋給使用者。在圖 2中我 們可以看到,初始條件和最終條件都正常,因此我們可以進入下一步。
圖 2 顯示條件檢查