測試方法-白盒/黑盒
黑盒測試和白盒測試的區別?
- 白盒測試也稱為結構測試,是根據程式碼邏輯來設計的,主要用於檢測軟體編碼過程中的錯誤。程式設計師的程式設計經驗、對程式設計軟體的掌握程度、工作狀態等因素都會影響到程式設計質量,導致程式碼錯誤。
特點:程式碼覆蓋率高;覆蓋所有程式碼路徑難度大;業務功能可能覆蓋不全;測試開銷大;
- 黑盒測試又稱為功能測試,是根據業務需求來設計的,主要檢測軟體的每一個功能是否能夠正常使用。在測試過程中,將程式看成不能開啟的黑盒子,不考慮程式內部結構和特性的基礎上通過程式介面進行測試,檢查程式功能是否按照設計需求以及說明書的規定能夠正常開啟使用。
編寫測試用例的方法?
白盒測試用例設計方法包括邏輯覆蓋法、路徑測試法。
一、邏輯覆蓋法
(1)定義:是通過對程式邏輯結構的遍歷實現程式的覆蓋。
舉例:程式程式碼
int test(int x,int y,int magic){
if(x>0 && y>0){
A=x+y+10; //語句塊1
}else{
A=x+y-10; //語句塊2
}
if(magic<0){
A=0; //語句塊3
}
return A; //語句塊4
}
程式流程圖:
1.語句覆蓋法:設計測試用例,使得程式中每條語句至少被執行一次。
缺點:不能準確的判斷出運算中的邏輯關係錯誤。
2.判定覆蓋法:也叫分支覆蓋,設計測試用例使得程式中的每個判定的“真”和“假”都至少被執行一次。既:程式中的每個分支至少執行一次。
注:只要滿足了判定覆蓋標準就一定滿足語句覆蓋標準。
根據上程式碼設計測試用例:(100%判定覆蓋)
3.條件覆蓋:設計測試用例,使得判定中每個條件至少取一次真值,取一次取假值。
上述程式碼中有兩個判定,有三個條件。
4.判定條件覆蓋:設計測試用例,使得被測試程式中的每個判定本身的判定結果(真假)至少滿足一次,同時,每個判定中的條件的可能值(真假)也至少被滿足一次。即同時滿足100%判定覆蓋和100%條件覆蓋的標準。
判定條件覆蓋率:
- 案例程式碼中有2個判定,3個條件,4個判定結果,6個條件結果
- 設計測試用例執行了3個判定結果,5個條件結果,判定條件覆蓋率為(3+5)/(4+6)=80%
5.條件組合覆蓋:設計測試用例,使得被測試程式中的每個判定中條件結果的所有可能組合至少執行一次。
條件組合覆蓋能滿足判定覆蓋(也就滿足了語句覆蓋),條件覆蓋,判定條件覆蓋。
條件組合覆蓋率:
- 案例程式碼中有2個判定,3個條件(判定1中有2個條件,判定2中有1個條件),判定1的條件組合為4個,判定2的條件組合為2個
- 設計測試用例執行了5個條件組合,覆蓋率為5/(4+2)=83%
6.路徑覆蓋法:設計測試用例,覆蓋程式中所有可能的路徑。
例如:
- 案例程式碼中總共有4條路徑
- 設計測試用例執行了3條路徑,路徑覆蓋率為3/4=75%
黑盒測試用例設計方法包括等價類劃分法、邊界值分析法、判定表法、因果圖法、場景圖法、錯誤推測法、正交試驗設計法、功能圖法、等。
1.等價類法
(1)定義:依據需求將輸入劃分為若干等價類,從等價類中選定一個測試用例,如果該測試用例通過,則表明整個等價類通過測試。
(2)適用場景:對於等價類這個方法,一般適用於有無限多種輸入,我們不可能完成窮舉測試,等價類可以使我們用較少的測試用例儘可能多的將功能覆蓋。
(3)有效等價類和無效等價類
一般劃分為:有效等價類、無效等價類
有效等價類:有意義的輸入構成的集合,對於需求規格說明書是合法的;
無效等價類:不滿足需求的集合。
(4)按等價類劃分設計測試用例的原則:
- 分析需求,確定輸入資料型別。
- 使用規則劃分有效和無效等價類。
- 設計一個新的測試用例,使其儘可能多地覆蓋尚未被覆蓋的有效等 價類,重複這一步,直到所有的有效等價類都被覆蓋為止。
- 設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類, 重複這一步,直到所有的無效等價類都被覆蓋為止。
(5)案例:某地區座機電話號碼由兩部分組成,地區碼(3/4位)+電話號碼(7/8位)。
1.分析需求,確定輸入資料型別。
輸入 | 輸入 | 資料型別 |
座機電話號碼 | 地區碼 | 3/4位的數字 |
電話號碼 | 7/8位的數字 |
2.使用規則劃分有效和無效等價類。
輸入 | 輸入 | 長度 | 集合 | 組成規則 |
固定電話號碼 | 地區碼 | 3/4位 | 數字 | 以0開頭 |
電話號碼 | 7/8位 | 數字 | 以非0非1開頭 |
輸入 | 輸入 | 有效等價類 | 無效等價類 |
固定電話號碼 | 地區碼 |
1.以0開頭的3位數字 2.以0開頭的4位數字 |
3.以0開頭的小於3位的數字 4.以0開頭的大於4位的數字 5.以0開頭的包含非數字的3位字串 6.以非0開頭的3位字串 |
電話號碼 |
7.以非0非1開頭的7位數字 8.以非0非1開頭的8位數字 |
9.以非0非1開頭的小於7位的數字 10.以非0非1開頭的大於8位的數字 11.以非0非1開頭的包含非數字的7位字串 12.以0開頭的7位數字 13.以1開頭的7位數字 |
3.編寫測試用例,覆蓋有效等價類。
4.編寫測試用例,覆蓋無效等價類。
輸入 | 有效用例 | 無效用例 |
測試用例 |
012 3267765 覆蓋1、7 1234 23495827 覆蓋2、8 |
01 5678453 覆蓋3 01234 4567345 覆蓋4 0h1 4675347 覆蓋5 h34 7834758 覆蓋6 012 234233 覆蓋9 012 878734265 覆蓋10 012 2sd2390 覆蓋11 012 0123456 覆蓋12 012 1234565 覆蓋13 |
2.邊界值法
(1)定義:邊界值法是對輸入資料的邊界測試,是一種黑盒測試方法;一般來說邊界值法是對等價類劃分後的補充
(2)使用場景:容易在輸入或輸出範圍的邊界上發生錯誤,而不是在輸入範圍的內部。
(3)例:對於設定密碼的測試,要求密碼必須為6-15位
分析過程:有效等價類為>=6 && <=15 無效等價類為:<6 || >15
上點:6,15
離點:5 ,16(不用在測7、14,因為是閉區間,所以 7、14和6、15的性質是一樣的)
內點:10
設定邊界值:5、6、10、15、16
邊界值選定解釋:
A. 6和15作為有效等價類中的內容,又是邊界值,可以判定有效等價類的內容是否滿足要求
B. 但是6和15又很特殊,它不僅代表了有效等價類,還代表了邊界值,所以我們選定一個普通的有效等價類作為一個測試用例,如:10
C. 5和16作為無效等價類中的內容,又是邊界值(比4或者17更具有代表性),可以判定無效等價類的內容
(4)按邊界值劃分設計測試用例的原則:
- 分析需求,確定輸入資料型別。
- 使用規則劃分有效和無效等價類。
- 確認上點離點和內點。
- 設計一個新的測試用例,使其儘可能多地覆蓋尚未被覆蓋的有效等 價類,重複這一步,直到所有的有效等價類都被覆蓋為止。
- 設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類, 重複這一步,直到所有的無效等價類都被覆蓋為止。
3.判定表法
(1)定義:判定表,也叫決策表。是對多種輸入條件下軟體系統執行不同動作的分析工具,它可以把複雜的邏輯關係和多種組合的情況表達得具體明確。
(2)判定表的組成元素:
1.判定表通常由條件樁、條件項、動作樁、動作項組成。
2.條件樁:被測物件的所有輸入。
3.條件項:被測物件的輸入取值。
4.動作樁:被測物件可能採取的操作/表現。
5.動作項:在各個條件項的組合下,被測物件所採取的動作/表現。
例:三好學生中,思想品質、身體、學習對應的是條件樁。成為三好學生和沒成為三好學生便是動作樁。
(3)使用判定表法設計測試用例
- 定義條件樁與動作樁
- 設計優化判定表(全組合)
- 填寫動作項
- 簡化合並判定表
- 抽取用例(一條規則編寫一個測試用例)
(4)案例:支付寶個人賬戶註冊,第一項要求輸入手機號作為賬戶名,第二項要求輸入驗證碼,兩項都驗證成功後填寫賬戶資訊,但如果第一項校驗不正確,則報錯h(輸入手機號格式錯誤),如果第二項驗證不正確,則報錯m(驗證碼輸入錯誤)。
1 | 2 | 3 | 4 | ||
條件樁 | 第一項輸入手機號 | 1 | 1 | 0 | 0 |
第二項輸入驗證碼 | 1 | 0 | 1 | 0 | |
動作項 | 填寫賬戶資訊 | true | |||
報錯h | true | true | |||
報錯m | true | true |
4.因果圖法
(1)定義:是一種利用圖解法分析輸入的各種組合情況,從而設計測試用例的方法,它適合於檢查程式輸入條件的各種組合情況。
(2)因果圖法:因果圖法是一種適合於描述對於多種輸入條件組合的測試方法,根據輸入條件的組合、約束關係和輸出條件的因果關係,分析輸入條件的各種組合情況,從而設計測試用例的方法,它適合於檢查程式輸入條件涉及的各種組合情況。因果圖法一般和判定表結合使用,通過對映同時發生相互影響的多個輸入來確定判定條件。因果圖法最終生成的就是判定表,它適合於檢查程式輸入條件的各種組合情況。採用因果圖法能幫助我們按照一定的步驟選擇一組高效的測試用例,同時,還能指出程式規範中存在什麼問題,鑑別和製作因果圖。
(3)因果圖法和判定表法之間的區別:判定表法是將條件之間所有的組合形式都列舉出來,即規則數為2的n次方(n為條件數),而因果圖法則是先考慮輸入/輸出條件之間的關係,在根據分析的關係來轉化為判定表的規則,所以採用因果圖法整理出來的規則數是小於等於採用判定表法整理出來的規則數,也可以理解為因果圖法是基於判定表法的。
5.錯誤推測方法
(1)定義:基於經驗和直覺推測程式中所有可能存在的各種錯誤,從而有針對性的設計測試用例,列舉出程式中所有可能有的錯誤和容易發生錯誤的特殊情況,根據他們選擇測試用例. 例如, 在單元測試時曾列出的許多在模組中常見的錯誤. 以前產品測試中曾經發現的錯誤等,。還有, 輸入資料和輸出資料為0的情況。輸入表格為空格或輸入表格只有一行. 這些都是容易發生錯誤的情況。可選擇這些情況下的例子作為測試用例.總之,就是進行錯誤的操作。
(2)例:
1. 例如,輸入資料和輸出資料為0的情況;輸入表格為空格或輸入表格只有一行。這些都是容易發生錯誤的情況。可選擇這些情況下的例子作為測試用例。
2. 例如,前面例子中成績報告的程式,採用錯誤推測法還可補充設計一些測試用例:
1) 程式是否把空格作為回答
2) 在回答記錄中混有標準答案記錄
3) 除了標題記錄外,還有一些的記錄最後一個字元即不是2也不是3
4) 有兩個學生的學號相同
5) 試題數是負數
3. 例如,測試一個對線性表(比如陣列)進行排序的程式,可推測列出以下幾項需要特別測試的情況:
1) 輸入的線性表為空表;
2) 表中只含有一個元素;
3) 輸入表中所有元素已排好序;
4) 輸入表已按逆序排好;
5) 輸入表中部分或全部元素相同。
4. 例如,測試手機終端的通話功能,可以設計各種通話失敗的情況來補充測試用例:
1) 無SIM 卡插入時進行撥出(非緊急呼叫)
2) 插入已欠費SIM卡進行撥出
3) 射頻器件損壞或無訊號區域插入有效SIM卡撥出
4) 網路正常,插入有效SIM卡,撥出無效號碼(如1、888、333333、不輸入任何號碼等)
5) 網路正常,插入有效SIM卡,使用“快速撥號”功能撥出設定無效號碼的數字
6.場景圖法
(1)定義:
(2)場景圖法的組成:
(3)場景組合:
按上圖組合多個不同的場景:
場景1:基本流
場景2:基本流備選流1
場景3:基本流備選流1備選流2
場景4:基本流備選流3
場景5:基本流備選流3備選流1
場景6:基本流備選流3備選流1備選流2
場景7:基本流備選流4
場景8:基本流備選流3備選流4
(4)用例設計步驟:
- 分析需求,確定出軟體的基本流和各項備選流。
- 依據基本流和各項備選流,生成不同的場景。
- 針對生成的各場景,設計相應的測試用例。
- 重新稽核生成的測試用例,去掉多餘的部分,並針對最終確定出的測試用例,設計測試資料。
(5)下面是場景法的基本設計步驟:
- 根據說明,描述出程式的基本流及各項備選流
- 根據基本流和各項備選流生成不同的場景
- 對每一個場景生成相應的測試用例
- 對生成的所有測試用例重新複審,去掉多餘的測試用例,測試用例確定後,對每一個測試用例確定測試資料值