目錄
1. 測試基礎概念
2. 測試方法分類
3. 測試階段
真題示例:
題目1
題目2
題目3
4. 測試策略
5. 測試用例設計
?真題示例:?
6. 調試與度量
?真題示例:
1. 測試基礎概念
- 定義:系統測試是為發現錯誤而執行程序的過程,成功的測試是發現尚未暴露的錯誤。
- 測試原則:
- 盡早并持續測試
- 避免由開發人員執行測試
- 設計測試時需明確輸入和預期輸出
- 包含有效和無效的測試用例
- 檢查程序是否完成正確功能,避免多余行為
- 嚴格遵循測試計劃,保存測試用例
2. 測試方法分類
- 靜態測試(不運行程序):
- 方法:人工檢查、代碼審查、代碼走查
- 作用:可發現30%-70%的邏輯和編碼錯誤
- 動態測試(運行程序):
- 黑盒測試(功能測試):基于輸入輸出,不關注代碼結構
- 白盒測試(結構測試):基于代碼邏輯設計用例
3. 測試階段
- 單元測試(模塊測試):
- 測試對象:獨立模塊
- 依據:詳細設計文檔
- 集成測試:
- 測試對象:模塊間接口
- 依據:概要設計文檔
- 確認測試(驗證需求一致性):
- 類型:內部測試、Alpha測試(開發環境)、Beta測試(用戶環境)、驗收測試
- 系統測試:
- 測試對象:完整系統
- 內容:功能、性能、安全性等
- 配置項測試:驗證軟件配置項是否符合需求規格說明書(SRS)
- 回歸測試:確保變更后原有功能不受影響
真題示例:
題目1
軟件確認測試也稱為有效性測試,主要驗證( )。確認測試計劃通常是在需求分析階段完成的。
A. 系統中各個單元模塊之間的協作性
B. 軟件與硬件在實際運行環境中能否有效集成
C. 軟件功能、性能及其它特性是否與用戶需求一致
D. 程序模塊能否正確實現詳細設計說明中的功能、性能和設計約束等要求
題目2
根據用戶的參與程度不同,軟件確認測試通常包括( )。
A. 黑盒測試和白盒測試
B. 一次性組裝測試和增量式組裝測試
C. 內部測試、Alpha、Beta和驗收測試
D. 功能測試、性能測試、用戶界面測試和安全性測試
題目3
軟件測試一般分為兩個大類:動態測試和靜態測試。前者通過運行程序發現錯誤,包括( )等方法;后者采用人工和計算機輔助靜態分析的手段對程序進行檢測,包括( )等方法。
A. 邊界值分析、邏輯覆蓋、基本路徑 B. 桌面檢查、邏輯覆蓋、錯誤推測
C. 桌面檢查、代碼審查、代碼走查 D. 錯誤推測、代碼審查、基本路徑
- 題目1:軟件確認測試主要是驗證軟件功能、性能及其它特性是否與用戶需求一致。A選項系統中各個單元模塊之間的協作性是集成測試關注的;B選項軟件與硬件在實際運行環境中能否有效集成是系統測試中可能涉及的硬件 - 軟件集成相關內容;D選項程序模塊能否正確實現詳細設計說明中的功能、性能和設計約束等要求是單元測試關注的。
- 題目2:根據用戶參與程度不同,軟件確認測試通常包括內部測試、Alpha(在開發環境下,由部分用戶參與)、Beta(在用戶實際環境下,由大量用戶參與)和驗收測試(用戶最終對軟件進行驗收)。A選項黑盒測試和白盒測試是按照測試的方法分類;B選項一次性組裝測試和增量式組裝測試是集成測試的策略;D選項功能測試、性能測試、用戶界面測試和安全性測試是軟件測試的不同類型,并非按用戶參與程度分類。
- 題目3:動態測試通過運行程序發現錯誤,包括邊界值分析、邏輯覆蓋、基本路徑等方法。靜態測試采用人工和計算機輔助靜態分析的手段對程序進行檢測,包括桌面檢查、代碼審查、代碼走查等方法。邏輯覆蓋是動態測試方法,錯誤推測雖然在測試中會用到,但不是靜態測試特有的典型方法。
4. 測試策略
- 自底向上:從底層模塊開始,需驅動模塊
- 自頂向下:從系統層開始,需樁模塊
- 三明治策略:結合自底向上和自頂向下
5. 測試用例設計
- 黑盒測試:
- 黑盒測試用例定義:將程序視為一個黑盒子,僅知曉輸入輸出,不了解內部代碼,據此設計測試用例。
- 等價類劃分:依據某種特性對所有數據進行歸類,從每類數據中選取一個代表。設計原則為,新測試用例應盡可能多地覆蓋未被覆蓋的有效等價類,直至所有有效等價類被覆蓋;新測試用例應僅覆蓋一個未被覆蓋的無效等價類,直至所有無效等價類被覆蓋。
- 邊界值劃分:選取每類數據的邊界值作為測試用例。邊界值一般是范圍的兩端值,以及在此范圍之外且與該范圍間隔最小的兩個值,如年齡范圍0 - 150的邊界值為0、150、 - 1、151。
- 錯誤推測:憑借經驗推測可能產生問題的地方,以此作為測試用例進行測試,無固定方法。
- 因果圖:通過一個結果反推原因的方法,需根據具體結果具體分析,無固定方法。
- 白盒測試:
- 知道程序的代碼邏輯,按照程序的代碼語句,來設計覆蓋代碼分支的測試用例,覆蓋級別從低至高分為下面幾種:
- 語句覆蓋(SC):執行所有語句
- 判定覆蓋(DC):覆蓋所有判斷分支
- 條件覆蓋(CC):每個條件取真/假
- 條件判定組合覆蓋(CDC):同時滿足DC和CC
- 路徑覆蓋:覆蓋所有可行路徑(最高級別)
?真題示例:?
招聘系統要求求職的人年齡在20歲到60歲之間(含),學歷為本科、碩士或者博士,專業為計算機科學與技術、通信工程或者電子工程。其中( )不是好的測試用例。
A. (20,本科, 電子工程) B. (18,本科, 通信工程)
C. (18, 大專, 電子工程) D. (25, 碩士, 生物學)
好的測試用例應該盡可能覆蓋各種邊界情況、有效等價類和無效等價類。招聘系統要求年齡在20 - 60歲(含),學歷為本科、碩士或博士,專業為計算機科學與技術、通信工程或電子工程。
- (20,本科, 電子工程) 是完全符合招聘系統要求的有效測試用例。
- (18,本科, 通信工程) 年齡不滿足要求,屬于無效等價類測試用例,可測試年齡邊界情況。
- (18, 大專, 電子工程) 年齡和學歷都不滿足要求,而新測試用例應僅覆蓋一個未被覆蓋的無效等價類。
- (25, 碩士, 生物學) 專業不滿足要求,屬于無效等價類測試用例,可測試專業的無效情況。
以下關于測試的敘述中,正確的是( )。
A.實際上,可以采用窮舉測試來發現軟件中的所有錯誤
B.錯誤很多的程序段在修改后錯誤一般會非常少
C.測試可以用來證明軟件沒有錯誤
D.白盒測試技術中,路徑覆蓋法往往能比語句覆蓋法發現更多的錯誤
- 窮舉測試也叫完全測試,即把程序所有可能的執行路徑都檢查一遍的測試。但由于軟件系統的復雜性和輸入的多樣性,在實際中幾乎不可能采用窮舉測試來發現軟件中的所有錯誤
- 錯誤很多的程序段往往存在更多的潛在問題和隱藏的邏輯錯誤,即使進行了修改,由于代碼結構本身的復雜性和可能存在的耦合性等問題,修改后不一定錯誤就非常少,甚至可能引入新的錯誤
- 測試的目的是盡可能地發現軟件中的錯誤,而不能證明軟件沒有錯誤。即使經過大量的測試沒有發現錯誤,也不能說明軟件就沒有潛在的錯誤
- 白盒測試中,語句覆蓋是指設計足夠的測試用例,使得程序中的每條語句至少被執行一次;路徑覆蓋是指設計足夠的測試用例,覆蓋程序中所有可能的路徑。路徑覆蓋比語句覆蓋的覆蓋程度更高,能測試更多的程序邏輯,往往能比語句覆蓋法發現更多的錯誤
采用白盒測試方法對下圖進行測試,設計了4個測試用例:①(x=0, y=3),②( x=1, y=2),③(x=-1, y=2),④(x=3,y=1)。至少需要測試用例①②才能完成(35)覆蓋,至少需要測試用例①②③或①②④才能完成(36)覆蓋。
A. 語句 B. 條件 C. 判定/條件 D. 路徑
A. 語句 B. 條件 C. 判定/條件 D. 路徑
(35)語句覆蓋
語句覆蓋是指設計足夠的測試用例,使得程序中的每條語句至少被執行一次。
- 對于測試用例①?
(x = 0, y = 3)
:- 第一個判斷條件?
(x = 0) && (y > 2)
?為真,執行語句?A
。
- 第一個判斷條件?
- 對于測試用例②?
(x = 1, y = 2)
:- 第一個判斷條件?
(x = 0) && (y > 2)
?為假,進入第二個判斷條件?(x < 1) || (y = 1)
,此條件也為假,執行語句?B
。 通過測試用例①和②,程序中的語句?A
?和語句?B
?都能被執行到,滿足語句覆蓋。
- 第一個判斷條件?
(36)判定/條件覆蓋
判定/條件覆蓋要求設計足夠的測試用例,使得判斷中每個條件的所有可能取值至少出現一次,并且每個判定本身的所有可能判定結果(真/假)也至少出現一次。
- 對于測試用例①?
(x = 0, y = 3)
:- 第一個判斷條件?
(x = 0) && (y > 2)
?中,x = 0
?為真,y > 2
?為真,整個判定為真。
- 第一個判斷條件?
- 對于測試用例②?
(x = 1, y = 2)
:- 第一個判斷條件?
(x = 0) && (y > 2)
?中,x = 0
?為假,y > 2
?為假,整個判定為假;第二個判斷條件?(x < 1) || (y = 1)
?中,x < 1
?為假,y = 1
?為假,整個判定為假。
- 第一個判斷條件?
- 對于測試用例③?
(x = -1, y = 2)
:- 第一個判斷條件?
(x = 0) && (y > 2)
?為假,進入第二個判斷條件?(x < 1) || (y = 1)
,其中?x < 1
?為真,y = 1
?為假,整個判定為真。 或者測試用例④?(x = 3, y = 1)
: - 第一個判斷條件?
(x = 0) && (y > 2)
?為假,進入第二個判斷條件?(x < 1) || (y = 1)
,其中?x < 1
?為假,y = 1
?為真,整個判定為真。
- 第一個判斷條件?
6. 調試與度量
- 調試:定位錯誤原因并修復,方法包括:
- 蠻力法、回溯法、原因排除法(演繹法、歸納法、二分法)
- 軟件度量:
- 軟件的屬性分類:
- 外部屬性:面向管理者和用戶,可直接測量,一般表現為性能指標。
- 內部屬性:屬于軟件產品本身的屬性,例如可靠性等,只能通過間接方式測量。
- McCabe度量法:
- 定義:又稱為環路復雜度。
- 計算方法:對于有向圖,若有向邊數為m,節點數為n,則環路復雜度為m - n + 2。
- 記憶與應用要點:m和n含義不能混淆,可借助最簡單的環路作為特殊值來記憶公式;對于程序流程圖,每個分支邊(連線)是一條有向邊,每條語句(語句框)是一個頂點。
- 軟件的屬性分類:
?真題示例:
下圖用白盒測試方法進行測試,圖中有( )條路徑,采用McCabe度量計算該程序圖的環路復雜性為( )
A、3 B、4 C、5 D、6
A、3 B、4 C、5 D、6
- 計算圖中的路徑數量
- 路徑是從開始節點到結束節點的一條可執行的路線。
- 路徑1:開始→語句1→判斷1(N)→結束。
- 路徑2:開始→語句1→判斷1(Y)→語句2→判斷2(N)→語句3→語句6→結束。
- 路徑3:開始→語句1→判斷1(Y)→語句2→判斷2(Y)→判斷3(N)→語句5→語句6→結束。
- 路徑4:開始→語句1→判斷1(Y)→語句2→判斷2(Y)→判斷3(Y)→語句4→語句5→語句6→結束。
- 所以圖中有4條路徑。
- 采用McCabe度量計算該程序圖的環路復雜性
- V(G)=E - N+2P(E是流圖中邊的數量,N是流圖中節點的數量,P是強連通分量的數量,對于單連通圖,P = 1)。
- 判斷節點和語句節點作為流圖節點,連接它們的線作為流圖的邊。數得節點數量N = 11,邊的數量E = 13。
- 根據公式V(G)=E - N + 2P,因為是單連通圖P = 1,所以V(G)=13?- 11+2×1=4。
- 也可以用另一種方法,即V(G)=判定節點數 + 1,圖中有3個判定節點(判斷1、判斷2、判斷3),所以V(G)=3 + 1=4。