了解 Framework for Integrated Tests (FIT) 的基本概念,并使用 Extended FIT Eclipse 插件著手為 Eclipse 開發人員測試 FIT 表。本文是由兩部分組成的系列文章的第一部分,向您介紹 FIT 并展示如何在基于 Eclipse 的環境中使用它。
自從大型計算機誕生以來,軟件工程師就關心著兩個主要問題:第一,業務如何通過應用程序與其所需內容通信;第二,工程師如何驗證他們是否正在構建滿足業務需要的正確軟件。多年來,為了解決這些關心的問題,已探索了許多方法和框架,但直到出現 Framework for Integrated Tests (FIT) 以后,才找到了解決這些問題的簡便而直觀的方法。
FIT 是一種通用的開放框架,您可以方便地對它進行擴展,來表示各種測試。本文介紹如何結合使用 FIT 與 Eclipse 來解決軟件開發中的幾個問題。首先簡要介紹一下 FIT 如何解決軟件工程中的固有問題。
FIT 促進了企業各利益相關者 (stake holder) 和開發人員之間的溝通,從而使他們更精確地關注必須完成的任務。此功能可幫助每個人避免不明確的業務需求,有助于確保開發人員有的放矢地解決業務問題。此外,FIT 還支持因系統升級而導致的不可避免的代碼重組,從而減少維護、擴展或更改代碼的難度,并減少代碼膨脹和軟件熵 (software entropy)。最后,FIT 通過確保團隊能夠立即知道組件何時完成,以及何時錯誤地中斷完成的工作,從而提高了軟件的總體質量。
FIT 和 JUnit
如果您使用的是 JUnit,則最重要問題是:必須停止編寫 JUnit 測試用例嗎?回答當然是否。FIT 不是用于補充 JUnit 測試的;它具有更高級別的功能,即集成測試(參見圖 1)。
您仍可以開發 JUnit 測試。但是,另外還需要使用 FIT 表創建 FIT 測試。
![]() ![]() |
![]()
|
FIT 和FIT 表
對于 JUnit,它是一個測試用例。對于 IBM Rational Unified Process® (RUP®),它是一個使用用例。對于 FIT,它是一個表。表在 FIT 提高利益相關者之間的溝通能力、軟件靈活性和軟件穩定性方面扮演著重要角色。
在日報上,無論是棒球比賽的最后得分,還是股票價格,表都是簡單而又有效的溝通方法。因此,FIT 創建者選擇表作為精良武器,使用戶能夠通過示例與軟件行為進行通信。這減少了責任不明的情況,并由用戶負責明確地定義軟件系統。
靈活性(允許進行更改)是現代軟件系統的重要特征。持續增長的競爭力迫使業務用戶不斷添加更多的特性和功能。FIT 測試通過定義更改,并確保軟件修改不影響以前滿足的需求,從而幫助增加了靈活性。FIT 表作為一種機制,用來傳達所開發軟件的結果,它在軟件開發過程中像一盞指路明燈,并側重于業務價值。
但是,隨著靈活性的提高和不斷進行的更改,失去穩定性的風險也在增加。FIT 表通過確保將底層系統的任何更改(包括重構和增強)立即以可視方式傳達給該系統的各利益相關者,可以幫助恢復“被測系統 (SUT)”所需的平衡。
![]() ![]() |
![]()
|
使用 FIT 進行測試計算
按照給定業務規則進行測試計算是軟件測試的重要組成部分。采用表和具體示例的形式溝通業務需求可以幫助您了解所需內容。
示例:FIT 計算表
此示例中計算測試的業務規則是:
將價值 500 美元的美國獎學金授予“學術評估測驗 (SAT)”分數至少為 2000 的學生,每超過 100 分增加 500 美元。表中的示例數據摸擬了 SAT 分數和所得獎學金之間關系的幾種情形。例如,如果分數為 2300,則獎學金為 2000 美元。
表 1 是 FIT 表的一個示例,它摸擬了此業務規則的預期行為。該規則計算了學生根據他們的 SAT 分數應得到的獎學金。
CalculateScholarship | |
Score | Scholarship() |
1000 | 0 |
1999 | 0 |
2000 | 500 |
2050 | 500 |
2100 | 1000 |
2200 | 1500 |
2300 | 2000 |
2350 | 2000 |
2400 | 2500 |
表中的第一行顯示要測試的 fixture 名稱。fixture
類的作用相當于驅動程序,確定如何根據 SUT 來測試表中的示例數據集。在本示例中,fixture 是 CalculateScholarship
。
因為本示例涉及一個 ColumnFixture
表,所以第二行會標識給定的和計算的字段列名稱。在本示例中,Score 列表示輸入值,Scholarship() 列表示預期的計算結果。
![]() ![]() |
![]()
|
為 ColumnFixture 表創建一個 FIT fixture
要讓框架能夠處理表 1,必須創建一個 fixture,或創建一個中間 Test Adapter
類,告訴 FIT 如何與您的軟件通信。清單 1 顯示了 CalculateScholarship
fixture。
|
此 fixture 將調用清單 2 中顯示的 SUT ScholarshipSystem
類,然后調用該類上的 calculateScholarship()
方法。
|
您可以根據測試的內容對不同類型的 fixture 進行擴展。在上面的示例中,我使用 ColumnFixture
將表中的列映射為 fixture 中的變量和方法。
表中的兩個列對應于 fixture 中的變量。包含預期結果的第二列對應于 fixture 中的 scholarship()
方法。為計算結果,我將 ScholarshipSystem
類用作 SUT。
![]() ![]() |
![]()
|
在 Eclipse 中使用 FIT 測試
為了演示如何在 Eclipse 環境中使用 FIT,我使用了 Extended FIT Eclipse 插件,它提供了一個簡單的用戶界面 (UI),用于加載 FIT 輸入和輸出文件。此插件基于 FIT Library 基本插件。
安裝 Extended FIT Eclipse 插件
要安裝 Extended FIT Eclipse 插件,請完成下列操作步驟:
現在,您會看到一個新的 FIT 菜單和 Run FIT 工具欄按鈕(參見圖 2)。如果是這樣,則表明您已成功安裝了 Extended FIT Eclipse 插件。
Extended FIT Eclipse 插件與 FIT .jar 文件捆綁在一起,所以您無需單獨安裝 FIT .jar 文件就可以運行測試。但是,要開發自已的 fixture,可能需要將 FIT .jar 文件添加到您的構建路徑中。
![]() |
|
使用 Extended FIT Eclipse 插件
若要使用 Extended FIT Eclipse 插件,您需要三個文件:
注意:當創建自定義 fixture 類時,一定要使用您喜歡的構建工具將它們捆綁為一個 .jar 文件。Extended FIT Eclipse 插件需要此 .jar 文件的位置才能運行 FIT 測試。
有了 Extended FIT Eclipse 插件所需的所有文件后,您可以通過完成以下操作步驟來著手運行 FIT 測試:
FIT 采用 .html 文件作為輸入文件;因此,應將輸入文件名配置為與之相同(參見圖 3)。
Extended FIT Eclipse 插件功能
用于 Eclipse 的 Extended FIT Eclipse 插件的作用相當于簡單的包裝,充當底層 FIT 庫的一個委派。單擊 Run FIT 后,Extended FIT Eclipse 插件通過將所選輸入和輸出文件作為參數傳遞給 FIT FileRunner
類來調用并運行該類。FIT FileRunner
類會依次解析輸入文件,并將 FIT 運行的結果寫入您選擇的輸出文件中。如果一切順利,就會在窗口中顯示運行結果。
![]() ![]() |
![]()
|
展望
在本文中,您了解到 FIT 如何讓用戶和工程師就他們的軟件架起溝通的橋梁。通過創建切實的示例,用戶可以讓工程師清楚地了解他們必須構建什么內容。您還了解到如何將 FIT 和 Eclipse 完美地結合在一起,不但讓開發人員可以編寫 fixture,而且可以運行 FIT 表來驗證他們的軟件。通過擴展核心 FIT Eclipse 插件,您了解到如何使用 Eclipse 執行基于計算規則的 FIT 測試,同時它也可以方便地應用于其他形式的 FIT 測試。
在本系列文章的下一篇中,您將了解如何構建 Extended Eclipse FIT 插件。還將學習如何使用 FIT 在 Eclipse 的“插件開發環境 (PDE)”中測試插件本身。