可以獲得什麼?
理解什麼是白箱測試與黑箱測試,他們有哪些運用理論可以使用。
測試方法
測試方法是指在軟體開發過程中使用的測試技術、策略或過程。通常包括一系列的步驟和流程,以驗證軟體是否滿足特定的需求、規格和預期行為。在軟體測試中依照對於系統的了解程度,一般分為黑箱測試和白盒測試。
黑箱測試
黑箱測試(Black Box Testing)是一種測試方法,它不需要測試人員了解軟體的內部實作方式,也不需要具備程式碼和程式語言的專門知識。相反,它關注的是軟體的輸入和輸出,以確認軟體是否按照規格正確運作。這種測試方法主要是從使用者的角度對軟體介面、功能和外部結構進行測試,而不考慮程式內部的邏輯結構。
黑箱測試由於不關心軟體內部的程式碼,而是專注於確保軟體在不同情況下都能正確執行,所以適用於大部分的測試階段,包括整合測試、系統測試和驗收測試等。
典型的黑盒測試設計方法包括:
- 等價類劃分法:將輸入值劃分成不同的等價類別,以確保每個等價類都得到適當的測試。
- 邊界值分析法:測試輸入值的邊界情況,通常邊界值情況容易引起錯誤。
- 錯誤推測法:根據測試人員的經驗和直覺,推測可能的錯誤情況,然後進行測試。
- 因果圖法:建立因果圖,以確定可能導致錯誤的因素,然後進行測試。
- 判定表法:使用判定表來生成測試用例,根據不同的條件和動作進行組合。
- 正交試驗法:使用正交表格來生成測試用例,以測試不同的輸入組合。
- 功能圖法:創建功能圖,以描述軟體的功能和交互作用,然後生成測試用例。
- 場景法:根據不同的使用場景和使用者需求,創建測試用例。
-
優點
- 不需要瞭解程式邏輯,進入門檻低
- 適合用在大量的程式碼、複雜的系統中
-
缺點
- 低覆蓋率
- 測試人不會瞭解程式邏輯,無法知道程式是否有寫錯
白箱測試
白箱測試(White Box Testing)又稱透明盒測試(glass box testing)、結構測試(structural testing)是一種測試方法,其特點在於測試人員需要了解軟體的內部結構和程式碼。這種測試方法基於程式碼的內部邏輯進行測試案例的設計,以確保每個程式路徑都得到測試。
白箱測試的優勢在於能夠檢測程式碼及其邏輯,因此適用於多個測試階段,包括單元測試(unit testing)、整合測試(integration testing)以及系統測試。這種測試方法可以測試整合過程中每一個單元之間的路徑,也可以用於測試主系統與子系統之間的路徑。
白箱測試設計技術包括以下代碼覆蓋標準:
- 控制流測試(Control Flow Testing):以確保程式的各個可能路徑都被觸發和測試,包括不同的條件分支、循環等。這有助於確保程式在不同的控制流情況下都能正確執行。
- 資料流測試(Data Flow Testing):重點在於測試程式中的資料流動,以確保資料在程式中的傳遞和處理都是正確的。這有助於發現潛在的資料流問題,如未初始化的變數、資料競爭等等。
- 分支測試(Branch Testing)針對程式中的不同分支路徑進行測試,用以確保每條分支條件都得到適當的測試。有助於確保程式在各種條件下都能正確執行。
- 語句覆蓋(Statement Coverage):用來衡量在測試過程中程式中的每一條語句是否都被執行至少一次。這是一種較簡單的覆蓋標準,但不能保證所有可能的程式路徑都已經測試到。
- 判定覆蓋(Decision Coverage):是確保在測試過程中每個決策點(例如,if語句或迴圈的條件)的所有可能結果都被執行至少一次。較前者嚴謹。
- 修正條件/判定覆蓋(Modified Condition/Decision Coverage,MC/DC):MC/DC是一種更嚴格的白箱測試標準,主要用於高度可靠性的系統,如飛行控制軟體、醫療設備軟體。它要求每個判定式(Decision)的每個條件(Condition)得到充分測試,確保了更高的測試品質。
- 主要路徑測試(Primary Path Testing):主要路徑測試是一種白箱測試方法,它專注於測試程式中的主要路徑或主要執行路徑。主要路徑通常是程式中最重要的執行路徑,因此測試人員會確保這些路徑被充分測試。
- 路徑測試(Path Testing):目的在於測試程式中不同路徑組合。在設計測試案例,會盡量涵蓋所有可能的路徑,確保程式在各種情況下都能正確執行。這是一種複雜的測試方法,通常用於高度可靠性的系統。
-
優點
- 測試人員可以指出程式邏輯的缺陷
- 確保程式運作邏輯符合預期,以及每個步驟產生的資料都是正確
- 高覆蓋率
- 從原始碼層面測試提供可追溯性
- 容易實現自動化
-
缺點
- 需提供程式碼
- 測試者需要程式能力,也依賴期能力,能力越強越可以找出程式缺陷
- 根據測試層面的複雜性,白箱測試需要知識水平更高的程式設計師
- 花費時間較多
後記
測試的方法很多,僅列出一些比較常見的,還有一些細節沒有說明,這些後續自己的努力。畢竟每個測試方法,其背後有多稍論文支持著,無法用三言兩語就結束。
參考