筆者按: 在這一學期的軟件測試課程學習中,我逐漸接觸到了軟件測試的相關知識,實現了從較為關注軟件編寫與實現等前端內容到逐漸理解軟件測試等項目后期環節的跨
越與 轉變。而在軟件測試領域,我們經常會聽到測試框架這個名詞,那什么是測試框架?它在軟件測試中起到什么樣的作用?我將就自己淺薄的學習心得,在這里為大
家做一個簡單的分析與交流。
正文: 我們先來看一下百度百科給出的關於“框架”一詞的定義:“框架(framework)是一個基本概念上的結構,用於去解決或者處理復雜的問題。” 那么如果我們將框架
這一概念引入到軟件領域,可以給出什么樣的一般性概念呢?筆者在對比了多種解釋之后,認為以下的這種解釋較為概括與全面:框架是整個或部分系統的可重用設計,
表現為一組抽象構件及構件實例間交互的方法。
針對以上的定義,我認為關鍵詞在兩個詞上:“可重用”與“交互”。如果想要深刻理解這兩個詞的意義,我認為,在這里我們應該深究以下我們為什么需要在軟件測試
領域中引入測試框架的概念,隨着軟件項目的逐漸增大,軟件測試在軟件開發中的地位顯得越來越重要。如果軟件項目沒有良好的測試流程,隨着系統的增大,無論項目
管理人員還是軟件開發人員都會對項目的前景失去信心,甚至會對項目的目標產生分歧,因為長期以來沒有對程序代碼和系統設計進行有效的控制,很多問題都被暫時掩
蓋或逐漸演化成其他的問題。軟件開發周期越長,就會使得問題進化的版本越多,最后造成的結果是“剪不斷,理還亂”。而測試框架的好處在於:提高開發速度,提升測
試代碼的執行效率;提高軟件代碼質量,同時引入重構概念,讓代碼更干凈和富有彈性;提升系統的可信賴度,作為回歸測試的一種實現方法支持修復后“再測試”,確保
代碼的正確性。常用的測試框架分類包括自動化測試框架和單元測試框架。根據所用開發平台不同,也可使用不同的測試框架展開測試。
關於“可重用”,我認為我們可以將軟件測試框架簡單地理解為:測試框架不是一個現成的完備的系統,而是一個半成品,測試工程師可以結合自己的測試對象的測試
需求,將其轉化為對自己可用的測試用例。打一個簡單的比方,測試框架就好比一個搭建好的舞台,而測試工程師(舞者)就這一在這個開放的、標准化的搭建好的舞台
上跳出自己想要跳出的舞蹈。軟件測試框架提取了軟件測試系統中的共性部分而形成的體系結構,在其基礎上進行軟件測試,只要調整部分內容就可以滿足自己的需求,可
以有效地降低開發成本,縮短開發時間。這就是軟件測試框架“可重用”屬性的意義所在。
關於“交互”,我們知道,現在常用的測試框架有自動化測試框架和單元測試框架,自動化測試是為了代替目前較多的手動測試,而單元測試則是單元測試是整個測試
流程中最基礎的部分,它們要求程序員盡可能早地發現問題,並給予控制,這是其一。另外,如果集成測試出現問題,它們可以幫助診斷。這樣就為在軟件開發流程中建
立高效的事件反應機制打下了堅實基礎。 如果測試框架中無法實現構建的交互,單元測試就會變得艱難而難以開展,由此可見測試框架中“交互”一詞的重要意義。
筆者結合自己學習到的知識,在這里給出單元測試框架的一個例子:JUnit,關於其他的種類的測試框架的具體實例,有興趣的讀者可以查閱相關論文,升入研究。
JUnit 是 Java 社區中知名度最高的單元測試工具;CppUnit 是個基於 LGPL 的開源項目,最初版本移植自 JUnit,是一個非常優秀的開源測試框架。
使用JUnit時,主要都是通過繼承TestCase類別來撰寫測試用例,使用testXXX()名稱來撰寫單元測試。
用JUnit寫測試真正所需要的就三件事:
1.一個import語句引入所有junit.framework.*下的類。
2.一個extends語句讓你的類從TestCase繼承。
3.一個調用super(string)的構造函數。
功能類MathTool:
JUnit提供了一些輔助函數,用於幫助你確定某個被測試函數是否工作正常。通常而言,我們把所有這些函數統稱為斷言。斷言是單元測試最基本的組成部分。
1. assertEquals([String message], expected,actual)
比較兩個基本類型或對象是否相等(expected和actual是原始類型數值(primitive value)或者必須為實現比較而具有equal方法);
2.assertFalse([String message],boolean condition)
對布爾值求值,看它是否為“真“;
3.assertTrue([String message],boolean condition)
對布爾值求值,看它是否為“假“;
4.assertNull([String message],java.lang.Object object)
檢查對象是否為“空“;
5.assertNotNull([String message],java.lang.Object object)
檢查對象是否不為“空”;
6.assertSame([String message],expected,actual)
檢查兩個對象是否為同一實例;
7.assertNotSame([String message],expected,actual)
檢查兩個對象是否不為同一實例;
8. fail( String message )
使測試立即失敗,其中 message 參數使可選的。這種斷言通常被用於標記某個不應該到達的分支(例如,在一個預期發生的異常之后)
相關知識:
白盒與黑盒框架