軟體測試方法之所以沒能完全標準化和統一化,主要原因是因為軟體產業產品到軟體測試有各式各樣的軟體。但是目前仍有很多各樣軟體測試方法都基本可用的常用概念和方法。我們這裡介紹的思路和方法就是可用於多數應用軟體的測試。有六個有關軟體測試方法的基本概念是很重要的:白箱測試,黑箱測試,灰箱測試,有效用例和無效用例,邊界條件以及等價類別測試。
白箱測試或白盒測試(White-box testing 或glass-box testing)是通過程式的原始碼進行測試而不使用使用者介面。這種類型的測試需要從代碼句法發現內部代碼在演算法,溢出,路徑,條件等等中的缺點或者錯誤,進而加以修正。
黑箱測試或黑箱測試(Black-box testing)是通過使用整個軟體或某種軟體功能來嚴格地測試, 而並沒有通過檢查程式的原始碼或者很清楚地瞭解該軟體或某種軟體功能的原始碼程式具體是怎樣設計的。測試人員通過輸入他們的資料然後看輸出的結果從而瞭解軟體怎樣工作。通常測試人員在進行測試時不僅使用肯定出正確結果的輸入資料,而且還會使用有挑戰性的輸入資料以及可能結果會出錯的輸入資料以便瞭解軟體怎樣處理各種類型的資料。
灰箱測試或灰盒測試(Gray-box testing):灰箱測試就像黑箱測試一樣是通過使用者介面測試,但是測試人員已經有所瞭解該軟體或某種軟體功能的原始碼程式具體是怎樣設計的。甚至於還讀過部分原始碼。 因此測試人員可以有的放矢地進行某種確定的條件/功能的測試。這樣做的意義在於:如果你知道產品內部的設計和對產品有透過使用者介面的深入瞭解,你就能夠更有效和深入地從使用者介面來測試它的各項效能。
有效用例(Valid case)或者叫合法輸入用例:是那些已知軟體程式能正確地處理的測試案例。一般是指軟體輸入的測試案例。比如說,在 Microsoft Excel 中,用鍵盤輸入“=1+1”, 看到的結果是“2”。 這裡輸入的有效用例是“=1+1”。無效用例(Invalid case有人叫不合法輸入用例)或者出錯用例(error case):是那些事先就知道軟體程式不支援處理的測試案例。比如說在 Microsoft Excel 中,用鍵盤輸入“=a+1”, 看到的結果是“#NAME?”。這裡輸入的“=a+1”既是無效用例同時也是出錯用例。
邊界條件(Boundary Cases):環繞邊界值的測試。通常意味著最大值,最小值或者所設計軟體能夠處理的最長的字串等等。比如說某軟體字型的字型大小支援範圍是:從8到72。那麼邊界測試案例應該包括:小於8, 等於8, 等於72 和大於72。
等價類別(equivalent classes):等價類別測試案例指的是如果有很多測試案例執行再多也不會找到新的中的缺陷。因為雖然輸入和輸出結果有所不同,但是它們都通過同樣的軟體的原始碼路徑。通常只要一個原始碼程式的路徑是用於處理一定數值範圍內的所有數值,那麼除了邊界值以外,在邊界值範圍以內的所有數值一般都屬於等價類別。因為如果軟體程式能正確處理一個值,也就意味著該程式能正確處理在這個範圍內的除了邊界值以外的其他任何有效輸入值。我們來用以上軟體字型的字型大小來舉例說明。軟體支援的字型大小範圍是:從8到72。那麼8和72之間的所有支援的字型大小都可以被認為是等價類別的測試案例。再比如:測試超連結時兩個用例http://www.yahoo.com/ 和 http://www.yahoo2.com/ 也是等價類別的測試案例。
?
軟體測試的基本方法
軟體測試方法在不同的書籍中可能有不同的分類,不同的叫法和不同的解釋。比如,從測試人員角度看,可分為手動測試和自動化的測試。從原始碼的角度可分為單元測試和功能測試。從理論定義來分,可分為黑箱測試,白箱測試和灰箱測試。這裡要討論的基本軟體測試方法主要側重於軟體功能的黑箱測試方法:功能測試(Functionality Test),可接受性測試(Acceptance Test),使用者介面(User interface或UI)測試,Ad hoc一般指‘探討或開放’型測試,邊界條件測試(Boundary Condition),效能測試(Performance Test),迴歸測試(Regression Test),強力測試(Stress Test),配置和安裝測試(Configuration and Setup Test),相容性測試(Comparability Test),國際化支援測試(International Sufficiency)以及本地化語言測試(Localization)。
功能測試:驗證測試軟體功能能否正常按照它的設計工作。看運行軟體時的期望行為是否符合原設計。比如,測試Microsoft Excel插入->符號的功能包括測試能夠在Microsoft Excel所選儲存格中正確地插入符號並且顯示正確符號?能否正確顯示使用不同的字型的符號?
可接受性測試:是在把測試的版本交付測試部門大範圍測試以前進行的對最準系統的簡單測試。因為在把測試的版本交付測試部門大範圍測試以前應該先驗證該版本對於所測試的功能基本上比較穩定。必須滿足一些最低要求。比如不會很容易程式就掛起或崩潰。如果一個新版本沒通過可測試性的驗證,就應該阻攔測試部門花時間在該測試版本上測試。同時還要找到造成該版本不穩定的主要缺陷並督促儘快加以修正。
使用者介面測試:分析軟體使用者介面的設計是否合乎使用者期望或要求。它常常包括菜單,對話方塊及對話方塊上所有按鈕,文字,出錯提示,協助資訊(Menu 和Help content)等方面的測試。比如,測試Microsoft Excel中插入符號功能所用的對話方塊的大小,所有按鈕是否對齊,字串字型大小,出錯資訊內容和字型大小,工具列位置/表徵圖等等。
‘探索或開放’型的測試:不是按部就班的按照一個又一個正式的測試案例來進行,也不局限於測試案例特定的步驟。這種測試是測試人員在理解該軟體功能的基礎上運用靈活多樣的想象力和創造力去類比使用者的需求來使用該軟體的多種功能。通常涉及很多的測試案例或者通過更複雜的步驟來使用該軟體。
邊界條件測試:是環繞邊界值的測試。通常意味著測試軟體各功能是否能正確處理最大值,最小值或者所設計軟體能夠處理的最長的字串等等。
效能測試是:通常驗證軟體的效能在正常環境和系統條件下重複使用是否還能滿足效能指標。或者執行同樣任務時新版本不比舊版本慢。一般還檢查系統記憶容量在運行程式時會不會流失(memory leak)。比如,驗證程式儲存一個巨大的檔案新版本不比舊版本慢。
迴歸測試:根據修複好了的缺陷再重新進行的測試。目的在於驗證以前出現過但已經修複好的缺陷不再重新出現。一般指對某已知修正的缺陷再次圍繞它原來出現時的步驟重新測試。通常確定所需的再測試的範圍時是比較困難的,特別當臨近產品發布日期時。因為為了修正某缺陷時必需更改原始碼,因而就有可能影響這部分原始碼所控制的功能。所以在驗證修好的缺陷時不僅要服從缺陷原來出現時的步驟重新測試,而且還要測試有可能受影響的所有功能。因此應當鼓勵對所有迴歸測試用例進行自動化。
強力測試:它通常驗證軟體的效能在各種極端的環境和系統條件下是否還能正常工作。或者說是驗證軟體的效能在各種極端環境和系統條件下的承受能力。比如,在最低的硬碟空間或系統記憶容量條件下,驗證程式重複執行開啟和儲存一個巨大的檔案1000次後也不會崩潰或死機。
整合與相容性測試:驗證該功能能夠如預期的那樣與其他程式或者構件協調工作。相容性經常意味著新舊版本之間的協調,也包括測試的產品與其它產品的相容使用。比如用同樣產品的新版本時不影響與用舊版本使用者之間儲存檔案,格式,和其他資料等操作。
裝配/安裝/配置測試:驗證軟體程式在不同廠家的硬體上,所支援的不同語言的新舊版本平台上,和不同方式安裝的軟體都能夠如預期的那樣正確運行。比如,把英文版的 Microsoft Office 2003安裝在韓文版 的Windows Me 上,再驗證所有功能都正常運行。
國際化支援測試:驗證軟體程式在不同國家或地區的平台上也能夠如預期的那樣運行,而且還可以按照原設計尊重和支援使用當地常用的日期,字型,文字表示,特殊格式等等。比如,用英文版的 Windows XP 和 Microsoft Word 能否展示阿拉伯字串?用阿拉伯版的 Windows XP 和 阿拉伯版的Microsoft Word 能否展示阿拉伯字串?又比如,日文版的Microsoft Excel對話方塊是否顯示正確翻譯的日語?一旦來說執行國際化支援測試的測試人員往往需要基本上瞭解這些國家或地區的語言要求和期望行為是什麼。
本地化語言測試:要驗證所有已計劃要發布的不同語言版本軟體如預期的那樣被正確地翻譯成當地語言。這類測試一般包括驗證菜單,對話方塊,出錯資訊,協助內容等所有使用者介面上的文字都能夠顯示正確翻譯好的當地文字。