專案必備技術之單元測試

換名換一年發表於2020-12-11

1.什麼是單元測試?

  • 單元測試是指對軟體中最小可測試單元進行檢查和驗證,通常而言,一個單元測試是用於判斷每個特定條件(或場景)下某個特定函式的行為,單元測試是由開發者編寫的。執行單元測試就是為了證明編寫的功能程式碼與我們期望保持一致。
  • 引申概念:方法級測試
    • 針對每一個單獨的小方法,在與程式其他部分相隔離得情況下進行測試,輸入引數,校驗出引數是否合乎預期,因此,不測資料庫操作,不測網路連線,不測依賴呼叫,以上場景全部mock掉。

2.測試的流程

  • 自頂向下
    在這裡插入圖片描述

  • 自底向上
    在這裡插入圖片描述

3.為什麼要進行單元測試?

  • 主要原因在於“左移”問題的發現與修復
  • 越早發現問題越好
    在這裡插入圖片描述
  • 其中藍色的曲線是軟體研發生命週期過程中缺陷的引入情況,從圖中我們可以看到,缺陷在最初的編碼階段是引入最多的
  • 黃色的實線是傳統的開發模式下問題的修復和發現情況,可以看到很多缺陷其實是後期階段才能發現的
  • 紫色的曲線是缺陷修復的成本,修復的成本卻是隨著軟體生命週期的推進指數級上升
  • 所以針對這種普遍存在的行業痛點,採用左移的方式,從一開始就避免缺陷和相關問題的引入,可以極大程度的保障軟體質量,減少缺陷修復成本,同時加速交付流程。

4.我們能從單元測試中得到什麼?

  • 測試更加充分
  • bug修復代價最少
  • 程式碼自review
  • 程式碼功能更具易用性
  • 迴歸測試
  • 快速定位bug

5.白盒測試技術

在這裡插入圖片描述

6.動態單元測試技術

  • 語句覆蓋:

    • 程式中每條語句至少被執行一次
    • 特點:可以很直觀的從原始碼中測到測試用例,無須細分每條判定表示式
    • 缺點:隱式邏輯分支無法測試
  • 判定覆蓋:

    • 每個判定至少有一次為真值,有一次為假值,即:程式中的每個分支至少執行一次,每個判斷的取真、取假至少執行一次
    • 特點:覆蓋強度幾乎增大一倍,測試用例簡單
    • 缺點:關注焦點是表示式邏輯值,而不是其中的每個條件,可能會遺漏部分測試路徑
  • 條件覆蓋:

    • 設計足夠多的測試用例,使得判定中的每個條件獲得各種可能的結果,即每個條件至少有一次為真值,有一次為假值
    • 特點:相對於判定覆蓋,增加了對符合判定情況的測試,增加了測試路徑
    • 缺點:需要足夠多的測試用例,條件覆蓋並不能保證判定覆蓋,測試用例低效
  • 判定/條件覆蓋

    • 設計足夠多的測試用例,使得判定中每個條件的所有可能結果至少出現一次,每個判定本身所有可能結果也至少出現一次
    • 特點:滿足判定覆蓋準則和條件覆蓋準則,彌補了二者的不足
    • 缺點:未考慮條件的組合情況,容易漏,會忽略條件中取或的情況
  • 組合覆蓋:

    • 使得每個判定條件結果的所有可能組合至少出現一次
    • 特點:多重條件覆蓋準則滿足判定覆蓋、條件覆蓋和判定/條件覆蓋準則
    • 缺點:線性的增加了測試用例的數量,也不能保證所有路徑被測試
  • 路徑覆蓋:

    • 覆蓋程式中所有可能的路徑
    • 特點:可以對程式進行徹底的測試,比前面五種的覆蓋面都要更加廣
    • 缺點:需要設計大量、複雜的測試用例,使得工作量呈指數級增長,特殊路徑無法測試

7.動態單元測試技術方法應用分佈場景

在這裡插入圖片描述

相關文章