Photo by Jeffrey Betts on Unsplash
前言
在自動化的文章開始以前,小弟希望可以先說明一些軟體測試的各種內容,而這篇的內容小弟將會介紹驗證與確認的重要和靜態分析與動態測試以及白箱測試與黑箱測試,希望對 Quality Assurance Engineer (以下簡稱 QA) 有興趣的大哥大姐們有所幫助,另外小弟預計會再花兩個禮拜的時間結束軟體測試的介紹,因為這禮拜小弟還要補班,如果有疏忽之處還請各位大哥大姐多多擔待。
另外請先讓小弟向正在看著這篇文章的各位大哥大姐們說聲感謝 (◍•ᴗ•◍),在上一篇文章各位大哥大姐的關注與留言,小弟的文章獲得了新的標籤 "達標好文",讓小弟真是受寵若驚~ (๑• . •๑),往後還請各位大哥大姐多多關照。
軟體測試是甚麼
軟體測試是一項龐大且複雜的工程,然而更是品質控管最重要的關鍵,而以 QA 來說主要就是為了追求品質。
Verification & Validation
在進行軟體測試的時候主要會有兩點,驗證(Verification)與確認(Validation)。
Verification: Have you built the software right?
- 把事情做對 (確保軟體走在對的路上)。
- 確認是否符合規則、要求、規範和強制條件。
Validation: Have you built the right software?
- 做對的事情 (確保軟體是個對的產品)。
- 確認是否滿足客戶或其他利益相關者的需求。
Static Analysis & Dynamic Testing
而依照策略可以劃分靜態分析(Static Analysis)與動態測試(Dynamic Testing)。
Static Analysis
- 靜態分析 (不需執行被測試的程式)
- 掃描程式,對程式的資料流和控制流等訊息進行分析,找出系統的缺陷。
- 檢查軟體開發是否滿足所制訂的需求規格,並嘗試找出錯誤與及早修正。方法包含檢視、結構化逐步審查和主動審查等。可以分析包含建構計畫、需求規格、設計規格、程式碼及測試計畫書等。
Dynamic Testing
- 動態測試 (需要執行被測試的程式)
- 執行流程,輸入各種的測試範例,對其輸入與輸出的對應關係進行確認與分析。
- 透過單元測試、整合測試、系統測試與驗收測試等軟體測試階段,來檢查軟體介面、功能、與非功能需求的正確性。
Black Box & White Box
一般使用黑箱測試與白箱測試這兩種技術來設計測試案例。
White Box Test
白箱測試 (攤開程式碼的內部構造): 也稱架構測試或邏輯驅動測試。
在知道產品內部工作流程的情況下來檢測產品,其測試原則為:
- 確保每條獨立路徑至少必須完成執行一次。
- 所有包含邏輯判斷的程式都須要確實執行。
舉個例子:
上述的程式內容為簡略的判斷輸入後的三邊長是否可以組合成一個三角形。
- 需要完成上述第一點至少就必須有三個測試路徑,測試的行數分別是
- 路徑1: 1 > 2 > 3 (行)
- 路徑2: 1 > 2 > 4 > 5 (行)
- 路徑3: 1 > 2 > 4 > 6 (行)
- 後續的第二點與第三點我們就可以帶入多種輸入測試,執行每種路徑
- 邏輯1(第2行): (a, b, c) = (-1, 2, 3)
- 邏輯2(第2行): (a, b, c) = (1, -2, 3)
- 邏輯3(第2行): (a, b, c) = (1, 2, -3)
- 邏輯4(第2行): (a, b, c) = (-1, -2, -3)
- 邏輯5(第4行): (a, b, c) = (2, 2, 3)
- 邏輯6(第4行): (a, b, c) = (2, 3, 2)
- 邏輯7(第4行): (a, b, c) = (3, 2, 2)
- 邏輯8(第2、4行): (a, b, c) = (2, 2, 2)
Black Box Test
黑箱測試 (覆蓋程式碼的內部構造): 也稱功能測試或資料驅動測試。
在不知道產品內部工作流程的情況下來檢測產品,其測試原則為:
- 邊界測試: 依照需求規格,輸入最小與最大臨界值進行測試。
- 等效測試: 依照需求規格,了解結果類型調整輸入進行測試。
- 錯誤測試: 依照需求規格,輸入各種有可能的錯誤進行測試。
舉個例子:
上述的程式內容烏漆墨黑所以只能根據需求規格進行測試。
從上述的需求規格中,可以知道的有
- 輸入範圍是 1 到 1000
- 輸出類行為 正三角形 與 非三角形
- 而藉由上述的需求規格就可以完成第一點到第三點的測試了
- 邊界1: (a, b, c) = (1, 1, 1)
- 邊界2: (a, b, c) = (1000, 1000, 1000)
- 等效1(正三角): (a, b, c) = (666, 666, 666)
- 等效2(非三角): (a, b, c) = (8, 8, 88)
- 錯誤1: (a, b, c) = (0, 0, 0)
- 錯誤2: (a, b, c) = (1001, 1001, 1001)
- 錯誤3: (a, b, c) = (10, 10, 5)
結尾
就這樣,以上是這篇所介紹的內容,如果有疑問或是有錯誤,還請各位大哥大姐提點。
希望這篇的內容可以幫助到想了解軟體測試或是想成為 QA 工程師的人。
在此感謝各位大哥大姐的關注,小弟將繼續往下週邁進。 ─=≡Σ((( つ•̀ω•́)つ