測試用例設計指南
作者:京東物流 王玉坤
軟件測試設計是測試過程中重要的測試活動,怎麼樣設計測試用例能提高我們測試的效率和質量,從以下幾個方面做了簡單的講解。
1 測試用例設計原則
測試用例設計的基本原則包括:有效性、清晰性、可複用性、可維護性、完整性、兼容性、易操作性、可管理性、可評估性
- 有效性:測試用例步驟必須描述清晰,不能出現模稜兩可的以及重複的話語,測試用例應該按照一定的順序進行編寫,這樣執行的時候效率比較高。
- 清晰性:用例的操作步驟要描述清晰,包含清晰的輸入數據以及預期輸出,驗證點必須明確清晰,並能突出重點,對於流程性的用例建議按照流程順序進行用例安排,從第一個驗證點到最後一個驗證點,組成流程的開始到結束,方便測試執行。 測試用例包含前置條件的必須將前置條件描述清楚,包括入口等。
- 可複用性:可重複使用,並儘量將具有相似功能的測試用例抽象並歸類。
- 可維護性:測試用例因為業務需求發生變更的時候,需要及時更新維護測試用例,做到測試用例的實時性與有效性,測試用例需要細化和不斷的完善,是個循序漸進的過程。
- 完整性:用例是否完成並覆蓋所有需求點,做到對需求的完全理解。
- 兼容性:測試用例要包含新老版本的兼容、新老數據兼容、瀏覽器兼容等測試點。
- 可管理性:能夠檢測測試人員的測試進度、工作量等。
- 可評估性:測試用例的通過率和缺陷的數目是評估軟件質量的好壞的標準。
2 測試用例的生命週期
軟件測試用例的設計階段包含:需求分析、測試用例設計、測試用例實現、測試用例執行、測試用例管理
2.1 需求分析
測試用例過程的第一步是確定測什麼,標識出測試點,並且對測試點進行優先級的劃分。
2.2 測試用例設計
測試用例設計確定瞭如何來測試已經分析出的測試點。
測試設計的主要點是確定測試預期結果。為了確定測試預期結果,測試人員不僅需要關注測試輸出,同時也需要注意測試數據和測試環境的前後置條件。假如測試用例沒有測試的預期結果,則測試用例對於測試結果的對錯判斷是毫無意義的。
測試預期結果可以是各種各樣的,包括需要創建或者輸出的結果,也可以是需要更新或者變更的結果,也可以是刪除的結果。每個測試用例都應該清楚的描述測試的預期結果。這樣,就需要測試人員具有被測系統相關的豐富的知識和經驗,才可能對軟件系統的測試輸出作出正確的評估。假如測試輸出結果評估認為是正確的,那麼就可以作為測試用例的期望輸出結果。
2.3 測試用例實現
測試用例實現的過程包括準備測試腳本、測試輸入、測試數據以及預期結果等。測試腳本指的是按照標準的語法組織數據或者指令。測試執行之前,首先必須滿足測試前置條件,比如一個測試用例需要用到配置好的一些數據,那麼這個數據就必須提前創建等。
2.4 測試用例執行
通過運行測試用例來對被測系統進行測試。對於手動測試來説,主要參照測試用例的步驟來進行測試執行,比較預期結果和實際結果、並記錄測試過程中發現的問題。
對於自動化測試過程,執行時需要藉助測試工具,運行測試用例腳本等,記錄測試結果。
執行測試時如實際結果和預期結果是一樣的,則認為是通過的,如果不一樣,那用例執行失敗,或存在問題,對於用例執行失敗,需要進一步的檢查,確定是軟件問題還是用例的預期結果有問題,或者是數據問題,環境問題引起的,需要從不同的方面進行問題分析。
2.5 測試用例管理
1)測試用例組織
每一個項目,其測試用例的數目都非常多。如何來組織、跟蹤和維護測試用例是一件非常重要的事情。如何來組織測試用例,是測試成功與否的一個重要因素,也是提高測試效率的一個重要步驟。
測試用例的組織,可以用不同的方法來進行組織或者分類:
- 按照軟件功能模塊組織:軟件系統一般是根據軟件的功能模塊來進行工作任務分配的。因此,根據軟件功能模塊進行測試用例設計和執行等是很常用的一種方法。根據模塊來組織測試用例,可以保證測試用例能夠覆蓋每個系統模塊,達到較好的模塊測試覆蓋率。
- 按照測試用例優先級組織:測試用例是有優先級的。對於任何軟件,實現窮盡測試是不現實的。在有限的資源和時間內,首先應該執行優先級高的測試用例。
按照功能模塊進行劃分是最常用的,我們也可以結合起來使用,比如在按照功能模塊劃分的基礎上,再進行不同優先級的劃分。
2)測試用例跟蹤
測試用例的跟蹤主要是針對測試執行過程中測試用例的狀態來進行的,通過測試狀態的跟蹤和管理,從而實現測試過程和測試有效性的管理和評估。
- 測試用例執行的跟蹤:在測試執行的過程中,對測試用例的狀態進行跟蹤,可以有效的將測試過程量化。比如,執行一輪測試過程中,測試的測試用例數目是多少,測試用例中通過、未通過、未測試的比例各是多少。這些數據可以提供一些信息來判斷軟件項目執行的質量和執行進度,並對測試進度、狀態提供明確的數據,有利於測試進度和測試重點的控制。
3)測試用例維護
測試用例並不是一成不變的,當一個階段測試過程結束後,會發現一些測試用例編寫的不合理,或者需求發生了變化,這都需要對當前的一些測試用例進行修改和更新,從而使測試用例具有可複用性。
3 測試用例編寫要素
- 用例編號:用例的唯一標識
- 測試模塊:測試用例所屬模塊
- 用例標題:測試用例的簡要説明
- 前提條件:用例執行的前提
- 測試步驟:執行用例步驟
- 預期結果:應該得到的結果
- 優先級:用例重要程度
4 功能測試用例設計方法
4.1 等價類劃分法
等價類劃分法的定義
- 輸入具有代表性的數據子集
等價類劃分法分類
- 有效等價類:滿足需求的
- 無效等價類:不滿足需求的
適用範圍
- 具有單個輸入的功能
步驟
- 明確需求
- 確定有效和無效等價類
- 編寫測試用例
舉例
需求:下單若是函速達,需要允許快遞員修改,且限定包裹數必須為1,重量要<0.5kg。
4.2 邊界值分析法
邊界值的定義
- 對於輸入等價類和輸出等價類而言稍高於其邊界或者稍低於其邊界的一些特定情況
邊界值範圍
- 正好等於
- 剛剛好大於
- 剛剛好小於
邊界值分析法中的三個點
- 上點:邊界上的點
- 離點:距離邊界最近的點
- 內點:範圍內的點
舉例:1-100 ,上點:1 100 離點:0 99 2 101 內點:50
適用範圍
- 有輸入參數,且輸入類型或範圍長度有邊界時(適用於題目需求中有長度或者範圍的情況)
- 和等價類一起使用,適用於單個功能的輸入的情況
步驟
- 明確需求
- 確定有效和無效等價類
- 明確題目條件中的邊界值
- 編寫測試用例
舉例
4.3 判定表法
適用條件
- 判定表表示的是有多個輸入和多個輸出,而且輸入與輸入之間相互的組合關係,輸入和輸出之間有相互的制約和依賴關係
組成部分
- 條件樁:題目條件中的所有的測試輸入
- 動作樁:題目條件中的所有輸出
- 條件項:測試輸入的取值
- 動作項:測試輸出的取值
步驟
- 明確條件樁
- 明確動作樁
- 對條件樁進行全組合
- 明確每個組合對應的動作樁
- 設計測試用例
舉例
4.4 因果圖法
因果圖法定義
- 理論中是通向判定表的一箇中間過程
適用範圍
- 因果圖是一種利用圖解法來分析輸入的各種組合情況,從而設計測試用例的方法,它適用於檢查程序輸入條件的各種組合情況
因果圖法的核心
- 所謂的原因就是輸入,所謂的結果就是輸出。
- 因果圖的因 —輸入條件
- 因果圖的果 -輸入結果
因果圖基本符號
關係
- 恆等:若Ci是1,則ei也是1;否則ei是0
- 非:若ci是1,則ei是0;否則ei是1
- 或:若c1或c2或c3是1,則ei是1;否則ei是0
- 與:若c1和c2都是1,則ei是1;否則ei是0
步驟
- 標識輸入和輸出
- 畫出因果圖
- 將因果圖轉換為判定表
- 生成測試用例
舉例
需求:某軟件規格説明書包含這樣的要求:第一列字符必須是A或B,第二列字符必須是一個數字,在此情況下進行文件的修改,但如果第一列字符不正確,則給出信息L;如果第二列字符不是數字,則給出信息M。
轉化為判定表
最終轉化為測試用例。
4.5 正交分析法
定義
- 正交法又叫正交試驗法,又叫正交排列法,使用最小的測試過程集合獲得最大的測試覆蓋率,(測試用例的條數寫的少一點,而測出的bug多一點),正交試驗設計法,是從大量的試驗點中挑選出適量的,有代表性的點,應用依據伽羅瓦理論導出的“正交表”,合理安排試驗的一種科學的試驗設計方法。
正交表的概念:一種特製的表,一般的正交表標記為Ln(mk)
- n表示行數,也就是需要測試組合的次數
- k表示的列數,表示控件的個數(因素的個數,或是因子的個數)
- m是每個控件包含的取值個數(各因素的水平數,即各因素的狀態數)
如:L9( 34 )
有4個控件
每個控件有3個取值
9為需要測試的組合個數、有9條測試用例
叫4因素3水平
步驟
- 根據需求形成因子狀態表—-因子:控件名稱 狀態:每個控件對應的取值
- 確定所採用的正交表
- 將正交表中的數字用文字代替
- 一行就是一條測試用例
舉例
注意
如果各個因子的狀態數是不統一的,幾乎不可能出現均勻的情況時,選擇正交表為 等於或略大於因子數,狀態數,且試驗次數最少
生成正交試驗表的一些方法
在線生成:https://jaccz.github.io/pairwise/tools.html
輸入每個控件和控件的取值
生成的表
正交試驗的實例表可套用到用例中http://www.york.ac.uk/depts/maths/tables/orthogonal.htm
正交試驗的實例表可套用到用例中http://support.sas.com/techsup/technote/ts723_Designs.txt
4.6 場景法-流程圖法
定義
- 模擬用户操作時的場景,主要用於測試多個功能之間的組合使用情況
為什麼要用户場景法
- 用户角度:用户平時使用的不是單個功能,而是多個功能組合起來進行使用
- 測試人員角度:平時測試的都是單個功能點進行測試,為了保證測試的全面性,考慮多個功能之間組合測試的場景
場景法的適用範圍
- 多個功能之間的組合測試
- 往往在冒煙測試時經常使用
場景法中兩個重要的概念
- 基本流:按照正確的業務流程操作的一種路徑
- 備選流:出現錯誤的操作流程
步驟
- 確定項目角色
- 明確角色的常用功能
- 根據需求構建測試場景
- 一個場景就是一條case
5 安全性測試設計
安全測試是在軟件產品開發基本完成時,驗證產品是否符合安全需求定義和產品質量標準的過程。安全測試是檢查系統對非法侵入滲透的防範能力。
包含的測試點如下:
- sql注入
- 明文傳輸
- 越權訪問
- 短信郵箱驗證
- 鑑權缺失
- 密碼安全
- 數據健壯性等
- 應用健康度隱患刨析解決系列之數據庫時區設置
- 對於Vue3和Ts的心得和思考
- 一文詳解擴散模型:DDPM
- zookeeper的Leader選舉源碼解析
- 一文帶你搞懂如何優化慢SQL
- 京東金融Android瘦身探索與實踐
- 微前端框架single-spa子應用加載解析
- cookie時效無限延長方案
- 聊聊前端性能指標那些事兒
- Spring竟然可以創建“重複”名稱的bean?—一次項目中存在多個bean名稱重複問題的排查
- 京東金融Android瘦身探索與實踐
- Spring源碼核心剖析
- 深入淺出RPC服務 | 不同層的網絡協議
- 安全測試之探索windows遊戲掃雷
- 關於數據庫分庫分表的一點想法
- 對於Vue3和Ts的心得和思考
- Bitmap、RoaringBitmap原理分析
- 京東小程序CI工具實踐
- 測試用例設計指南
- 當你對 redis 説你中意的女孩是 Mia