抱歉,最近實在他忙了,剛剛更新了兩篇。後面我會盡快寫完這個系列。謝謝支持。算法
在第一彈中咱們介紹過,軟件的測試包含單元測試、集成測試、系統測試和迴歸測試四個階段。那麼,這裏咱們先來看下各個階段都使用怎樣的測試方法。編程
軟件測試,從測試方法上來區分能夠分爲黑盒測試、白盒測試和灰盒測試。markdown
黑盒測試數據結構
黑盒測試,也稱爲功能測試。測試者不瞭解程序的內部狀況,不需具有應用程序的代碼、內部結構和編程語言的專門知識。只知道程序的輸入、輸出和系統的功能,這是從用戶的角度針對軟件界面、功能及外部結構進行測試,而不考慮程序內部邏輯結構。測試案例是依應用系統應該作的功能,照規範、規格或要求等設計。測試者選擇有效輸入和無效輸入來驗證是否正確的輸出。 此測試方法可適合大部分的軟件測試,如集成測試以及系統測試。框架
黑盒測試主要是爲了發現如下幾類錯誤:編程語言
是否有不正確或遺漏的功能?ide
在接口上,輸入是否能正確的接受?可否輸出正確的結果?工具
是否有數據結構錯誤或外部信息(例如數據文件)訪問錯誤?性能
性能上是否可以知足要求?單元測試
是否有初始化或終止性錯誤?
白盒測試
白盒測試又稱透明盒測試、結構測試等。測試應用程序的內部結構或運做,而不是測試應用程序的功能(即黑盒測試)。在白盒測試時,以編程語言的角度來設計測試案例。測試者輸入數據驗證數據流在程序中的流動路徑,並肯定適當的輸出,相似測試電路中的節點。測試者瞭解待測試程序的內部結構、算法等信息,這是從程序設計者的角度對程序進行的測試。 白盒測試能夠應用於單元測試、集成測試和系統的軟件測試流程。
白盒測試主要是想對程序模塊進行以下檢查:
對程序模塊的全部獨立的執行路徑至少測試一遍。
對全部的邏輯斷定,取「真」與取「假」的兩種狀況都能至少測一遍。
在循環的邊界和運行的界限內執行循環體。
測試內部數據結構的有效性,等等。
灰盒測試
灰盒測試,是介於白盒測試與黑盒測試之間的一種測試,灰盒測試多用於集成測試階段,不只關注輸出、輸入的正確性,同時也關注程序內部的狀況。灰盒測試不像白盒那樣詳細、完整,但又比黑盒測試更關注程序的內部邏輯,經常是經過一些表徵性的現象、事件、標誌來判斷內部的運行狀態。
上面介紹了軟件測試中的黑盒、白盒和灰盒測試。白盒測試被普遍的使用在單元測試階段。
這裏咱們先來分析下,咱們要進行單元測試,須要作哪些事情?由於單元測試的主要手段是白盒測試,白盒測試的測試方法是:測試者輸入數據驗證數據流在程序中的流動路徑,並肯定適當的輸出。那麼整個測試流程大概須要包含如下幾個步驟:
public class Calculator{ public float divide(float divisor,float dividend){ return divisor/dividend; } }
咱們要在程序中驗證上面這個方法的正確性,通常會寫如下代碼來測試他:
public class CalculatorTest{ public static void main(String [] args){ Calculator calculator = new Calculator(); float result = calculator. divide(10.0,2.0); if(result == 5.0){ System.out.println("divide test ok"); }else{ System.out.println("divide test failed"); } } }
這只是對該方法測試的第一個測試,若是我想測試這個方法在被除數是0的狀況下會怎麼樣,那麼我就要再寫一個CalculatorTest2,而後重寫寫一個main方法,再從新定義一個Calculator對象,而後在調用divide方法的時候把第二個參數的值傳爲0。
其實上面的測試是存在很大問題的,由於在內存中並沒有法精確的存儲浮點數,當咱們把兩個浮點數相除的時候結果並不必定能夠精確的存儲下來,而咱們的逾期結果倒是一個精確值,這樣的比較可能會不相等的。可是這樣的狀況須要多個case纔有可能被發現。
因此,咱們在測試一個類中的一個方法的時候,可能要定義大量的類,而後須要分別執行,而且經過看控制檯的輸出才能確認結果。
這裏,請先記住這些問題,由於,接下來咱們要介紹的測試框架會幫咱們解決這些問題的。
一般,在沒有特定框架支持下,咱們在對一個方法進行單元測試的時候,無外乎是使用分支判斷、異常處理、流程控制等來控制代碼的執行,經過程序輸出來表示方法的執行成功和失敗。這樣存在的最大問題就是咱們每執行完一個單測以後,都要去控制檯看輸出才知道單元測試有沒有成功,這明顯是不合理的,由於單元測試是須要自動化執行的,程序沒辦法幫咱們檢查輸出是否正確的。
單元測試框架就解決了這個問題,一旦使用了框架,加入單元測試相對來講會簡單許多。一般,Java中經常使用的單元測試框架通常包含三個功能:測試工具、測試套件、測試運行器。
測試工具
測試套件
測試運行器
下一彈會重點介紹如何使用JUnit進行單元測試。關於JUnit的文章已經在個人博客中更新了,我會在這周內發到公衆號中。
白盒測試
黑盒測試
【軟件測試】 黑盒測試、白盒測試、灰盒測試
相關推薦單元測試第一彈——從軟件開發生命週期談單元測試無單測、不編碼——寫單元測試的重要性