軟體測試的基本概念

Mrxuexi發表於2022-03-04

1 軟體測試的定義

1.1 定義

IEEE定義:“使用人工和自動手段來執行或測試某個系統的過程,其目的在於檢驗它是否滿足規定的需求,或是弄清預期結果與實際結果之間的差別”。

G.J.Myers(梅耶)在《軟體測試之藝術》書中描述:“程式測試是為了發現錯誤而執行程式的過程” 。

以上兩個概念提出的測試方法都是要執行系統(動態測試)才能得出結果,該方法一般在開發後期介入。

而實際上,優秀的軟體測試是:靜態測試+動態測試。靜態測試在開發前期介入。

經驗證明,儘早測試,有利於軟體的健康成長。當然,這與採用何種軟體開發週期密切相關。

1.2 軟體測試的原則

  • 站在使用者的角度,對產品進行全面測試。
  • 儘早、儘可能多地發現缺陷(bug),並負責跟蹤和分析產品中的問題。
  • 對不足之處提出質疑和改進意見。
  • 爭取零缺陷(zero-bug),做到足夠好(good-enough)。

1.3 值得學習的 10 項原則

1 所有測試的標準都是建立在使用者需求之上。
2 軟體測試必須基於 ”質量第一“ 的思想去開展各項工作。
3 事先定義好產品的質量標準。
4 軟體專案一啟動,軟體測試也就開始,而不是等程式寫完,才開始進行測試。
5 窮舉測試是不可能的。
6 第三方進行測試會更客觀,更有效。
7 軟體測試計劃是做好軟體測試工作的前提。
8 要設計合理的測試用例。
9 對發現錯誤較多的程式段,應進行更深入的測試。
10 重視文件,要善於儲存一切測試過程文件。

2 軟體缺陷(BUG)是什麼

2.1 Bug的定義

軟體缺陷,速稱Bug,包含各種偏差、謬誤或錯誤。

2.2 軟體企業如何儘量減少缺陷

  • 從專案計劃開始,制定合理可行的專案計劃,並監控專案執行過程,如果出現問題要及時調整;
  • 從需求獲取的角度,高度關注使用者軟體的用途,按照風險管理的要求,對不同使用者軟體,事先制定好質量的風險等級,以便為軟體測試提供原則和規範;
  • 從開發的角度,遵守標準、規範的開發方法流程;
  • 從測試工作的角度,選擇適合的測試方法設計測試用例,並確定軟體缺陷優先順序,便於處理複雜的缺陷修正過程。

2.3 缺陷修復的優先順序

  • 致命的(fatal)——非常嚴重的缺陷:致命的錯誤,造成系統或應用程式崩潰、當機、系統懸掛,或造成資料丟失、主要功能組完全喪失等。
  • 嚴重的(critical)——較嚴重的缺陷:嚴重錯誤,指主要功能或特性沒有實現,導致嚴重問題的錯誤宣告。
  • 一般的(major)——軟體一般缺陷:不太嚴重的錯誤,這樣的軟體缺陷雖然不影響系統的基本使用,但沒有很好地實現功能,沒有達到預期效果。如次要功能喪失,提示資訊不太準確,使用者介面差,操作時間長等。
  • 微小的(minor)——軟體細微缺陷:一些小問題,對功能幾乎沒有影響,產品及屬性仍可使用,如有個別錯別字、文字排列不整齊等。

2.4 Bug 的不同狀態

  • 啟用狀態(Active或Open):測試人員新報的bug,問題還沒有解決,或驗證後bug仍然存在。
  • 已修正狀態(Fixed或Resolved):開發人員針對存在的缺陷,修改程式,認為問題已解決問題。
  • 關閉或非啟用狀態(Close或Inactive):測試人員驗證已修改的bug後,確認bug已不存在的狀態。
  • 潛伏狀態:測試人員沒有發現,而該Bug確實存在。

2.5 軟體缺陷在開發週期不同階段的分佈

image-20220304103058613

​ 缺陷如果沒有在早期測試發現,後期發現可能會導致大規模的重新設計與編碼

image-20220304103211845

軟體缺陷隨著時間的推移帶來的成本越來越大!

3 軟體開發週期與測試

3.1 常用的軟體開發生命週期模型

  • 瀑布模型
  • 螺旋模型
  • RUP迭代模型
  • V模型
  • 敏捷開發模型
  • IBM IPD開發模型(跨部門團隊、縱橫矩陣式管理)

3.2 迭代開發模型

image-20220304105327933

3.3 V 模型——測試驅動模型

V模型的特徵——將測試環節引入模型,確立了提前測試、測試驅動開發的軟體開發理念。

image-20220304105425253

3.4 改進的 V 模型—— W 模型

image-20220304105510169

4 軟體測試階段

軟體測試也是一種軟體過程。

軟體測試是軟體開發過程中的重要內容之一,是軟體質量保證的關鍵。

4.1 測試階段

比較規範的軟體測試階段劃分如下:

image-20220304105837218

4.2 軟體測試流程

image-20220304111239881

image-20220304111256195

上圖總結:

image-20220304111355045

綜上所述,從軟體產品生命週期開始,軟體測試也就開始了。

5 軟體測試的工作範疇

  • 測試管理——編寫測試計劃,監控測試過程;

  • 測試設計——編寫測試方案、測試用例;

  • 測試執行——執行測試用例,生成缺陷報告;

    -檢視程式碼,評審開發文件(靜態測試);

    -執行系統進行測試(動態測試),發現軟體缺陷,提交缺陷報告,並確認缺陷最終得到了修正。

  • 通過各種測試指標測試度量軟體的質量

    -如測試覆蓋率、缺陷數量、缺陷解決比例等。

5.1 測試覆蓋率

5.1.1 對原始碼的測試覆蓋率

是指在系統測試過程中,所測試到的功能和非功能需求佔到需求總數的百分比。一般我們可以通過測試用例的執行率來衡量。一般有語句覆蓋、分支覆蓋、條件覆蓋、路徑覆蓋等方法。

一個通用的程式碼覆蓋標準是:對軟體關鍵模組的語句覆蓋率要達到100%,分支覆蓋要達到85%以上。

一些單元測試工具,如Junit、C++Test、Jtest等都能進行程式碼測試,並統計出程式碼的測試覆蓋率。

5.1.2 對需求的測試覆蓋率

是指在系統測試過程中,所測試到的功能和非功能需求佔到需求總數的百分比。

一般我們可以通過測試用例的執行率來衡量。

一個通用的需求文件覆蓋標準是:測試用例的執行率要在100%,即所有用例都要執行一遍,測試用例的通過率要達到95%以上。

相關文章