白盒測試實驗

實驗1白盒測試

實驗一 白盒測試用例設計

班級: B12531 學號: [1**********] 姓名: 劉志峰

一. 實驗目的

1.掌握白盒測試用例設計方法;

2.綜合運用所學的白盒測試方法設計進行測試用例設計; 3.掌握測試用例的編寫方法。

二. 實驗內容及要求

1.使用邏輯覆蓋法測試以下程序段。

private void DoWork(int x, int y, int z) 1 {

2 int k = 0, j = 0;

3 if ((x > 3) && (z < 10)) 4 {

5 k = x * y - 1;

6 j = (int)Math.Sqrt(k); 7 }

8 if ((x == 4) || (y > 5)) 9 j = x * y + 10; 10 j = j % 3;

11 lbResult.Text = "k=" + k.ToString() +" j=" +j.ToString () ; 12 }

說明:程序段中每行開頭的數字是對每條語句的編號。 要求:

(1) 畫出程序的控制流圖(用題中給出的語句編號表示)。

(2) 分別以語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋設計測試用例,并寫出每個測試用例的執行路徑(用題中給出的語句編號表示)。

(3) 執行測試用例,并記錄測試結果。 (4) 根據控制流圖計算程序的環路復雜度,導出基本路徑集合并根據基本路徑集合設計測試

用例。

2.已知C源程序如下:[2009.9四級軟件測試題] # include struct ydate {

int day; int month; int year;

}

int leap(struct ydate d) 1. {

2. if((d.year%4==0 && d.year%100!=0)||(d.year % 400==0)) 3. return 1; 4. else

5. return 0; 6. }

int numdays(struct ydate d) 7. {

8. int day;

9. static int daytab[]={31,28,31,30,31,30,31,31,30,31,30,31}; 10. if(leap(d) && d.month==2) 11. day=29; 12. else

13. day=daytab[d.month-1]; 14. return day; 15. }

int main(void) 16. {

17. struct ydate today,tomorrow; 18. printf(“format of date is:year,month,day 輸入的年、月、日之間應用逗號隔開\n”); 19. printf(“ today is:”);

20. scanf(“%d,%d,%d”,&today.year,&today.month,&today.day);

21. while((0>=today.year || today.year>65535 ||0>=today.month ||today.month>12) ||

0>=today.day || today.day>numdays(today)) 22. {

23. printf(“input date error! Reenter the day!\n”); 24. printf(“ today is:”);

25. Scanf(“%d,%d,%d”,&today.year,&today.month,&today.day); 26. }

27. if(today.day!=numdays(today)) 28. {

29. tomorrow.year=today.year; 30. tomorrow.month=today.month; 31. tomorrow.day=today.day+1; 32. }

33. else if(today.month==12) 34. {

35. tomorrow.year=today.year+1; 36. tomorrow.month=1; 37. tomorrow.day=1; 38. } 39. else

40. {

41. tomorrow.year=today.year;

42. tomorrow.month=today.month+1; 43. tomorrow.day=1; 44. }

45. printf(“tomorrow is: %d,%d,%d\n\n”,tomorrow.year,tomorrow.month,

tomorrow.day); 46. }

(1) 畫出該程序中所有函數的的控制流圖; (2) 設計一組測試用例,使該程序所有函數的語句覆蓋率和分支覆蓋率均能達到100%。如果

認為該程序的語句或分支覆蓋率無法達到100%,請說明原因。

三. 實驗結果

1. 實驗結果: (1)控制流圖

3.1 x>3 3.2 z<10 8.1 x=4 8.2 y>5

判定覆蓋:

條件組合覆蓋:

(3)

環路復雜度為:5

基本路徑集合:

1)1-2-3.1-8.1-8.2-10-11-12 2)1-2-3.1-8.1-8.2-9-10-11-12 3)1-2-3.1-8.1-9-10-11-12 4)1-2-3.1-3.2-8.1-9-10-11-12

5)1-2-3.1-3.2-4-5-6-7-8.1-9-10-11-12

測試用例表:

2. 實驗結果: (1)控制流圖

2.1: d.year%4 10.1: leap(d) 2.2: d.year%100 10.2: d.month == 2

2.3: d.year%400 == 0

(2)測試用例表:

== ==

0 0

四. 實驗總結

通過本次實驗我了解到了控制流圖的畫法和測試用例的寫法。

實驗1白盒測試

實驗一 白盒測試用例設計

班級: 11511 學號: [1**********] 姓名: 張琳靜

一. 實驗目的

1.掌握白盒測試用例設計方法;

2.綜合運用所學的白盒測試方法設計進行測試用例設計; 3.掌握測試用例的編寫方法。

二. 實驗內容及要求

1.使用邏輯覆蓋法測試以下程序段。

private void DoWork(int x, int y, int z) 1 {

2 int k = 0, j = 0;

3 if ((x > 3) && (z

5 k = x * y - 1;

6 j = (int)Math.Sqrt(k); 7 }

8 if ((x == 4) || (y > 5)) 9 j = x * y + 10; 10 j = j % 3;

11 lbResult.Text = "k=" + k.ToString() +" j=" +j.ToString () ; 12 }

說明:程序段中每行開頭的數字是對每條語句的編號。 要求:

(1) 畫出程序的控制流圖(用題中給出的語句編號表示)。

(2) 分別以語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋和路徑覆蓋法設計測試用例,并寫出每個測試用例的執行路徑(用題中給出的語句編號表示)。

(3) 執行測試用例,并記錄測試結果。 2.基本路徑測試

按要求對下面的代碼進行測試。代碼功能是:用折半查找在元素呈升序排列的數組中查找值為 key的元素。代碼如下:

1 2 3 4 5 6

private int BinSearch(int [] array,int key) {

int mid,low,high; low=0;

high = array.Length - 1; while (low

7 mid = (low + high) / 2; 8 if (key == array[mid]) 9 return mid;

10 else if (key

13 low = mid + 1; 14 }

15 return -1; 16 }

(1) 畫出該程序的控制流圖; (2) 計算該程序的環路復雜度;

(3) 用基本路徑測試法設計測試路徑,之后為各測試路徑設計測試用例,并記錄執行結果。

三. 實驗結果

1. 實驗結果: (1)控制流圖

判定-

條件覆蓋:

條件組合覆蓋:

路徑覆蓋

:

2. 實驗結果: (1)控制流圖

(2)環路復雜度V(G)=4 (3)基本路徑為:

路徑1:1,2,3,4,5,15,16

路徑2:1,2,3,4,5,6,7,8,9,16

路徑3:1,2,3,4,5,6,7,8,10,11,14,5,15,16 路徑4:1,2,3,4,5,6,7,8,10,12,13,14,5,15,16

測試用例表:

四. 實驗總結

在此次實驗過程中,開始的時候,由于粗心犯了很多錯誤,也由于我對語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋和路徑覆蓋法設計測試用例方法的不熟悉,所以導致效率很低,書寫測試用例中出現很多錯誤,通過同學的幫助已經解決,通過這次白盒測試用例的實驗,我對的重測試用例方法更加熟悉,也在犯錯誤的過程中,加深了對軟件測試的理解,一個合格的軟件測試員應時刻把不斷測試和盡早測試作為首要原則,實現客戶需求。

白盒測試實驗

實驗題1.

編寫判斷是否為閏年的程序,①畫出程序流程圖②轉換成控制流圖③得到控制流矩陣④參考課件分別設計語句覆蓋、判定覆蓋、條件覆蓋、判定---條件覆蓋和路徑覆蓋的測試用例。 實驗題2. 參考以下流程圖,編寫判斷三角形的函數。并對其進行如下操作: ① 轉換成控制流圖 ② 得到控制流矩陣

③ 參考課件分別設計語句覆蓋、判定覆蓋、條件覆蓋、判定---條件覆蓋和路徑覆蓋的測試用例。

實驗題3. 程序流程圖如下,并對其進行如下操作: ① 轉換成控制流圖 ② 得到控制流矩陣

③ 參考課件分別設計語句覆蓋、判定覆蓋、條件覆蓋、判定---條件覆蓋和路徑覆蓋的測試用例。

備注: 下課之前 以word文檔形式(班級+學號+姓名)發到 [email protected]

實驗題1.

判斷是否是潤年程序代碼: package ww;

import java.util.Scanner; public class Tes { public static void main(String[] args) { Scanner in = new Scanner(System.in); int year = in.nextInt(); /* 閏年的條件是: ① 能被4整除,但不能被100整除; ② 能被100整除,又能被400整除。*/ System.out.println("請輸入年份:"); Scanner sc=new Scanner(System.in); sc.nextInt(); if(year%4==0&&year%100!=0||year%400==0) { System.out.println("是閏年"); }else{ System.out.println("不是閏年"); } } }

程序流程圖:

控制流圖:

a

b

d

e f g

k m

語句覆蓋:int year = 2016;int year =2017;int year=2018; 判定覆蓋:

實驗題2.

#include #include void main() {

int a,b,c;

bool flag = false;

scanf("%d%d%d",&a,&b,&c); if((a+b)>c&&(b+c)>a&&(a+c)>b) { flag =true; if(flag){

if(a != b && b != c) { printf("不等邊三角形。"); } else{ printf("等腰三角形。"); } } } else {

printf("不構成三角形。"); } }

控制流程圖:

b

f

h ⑦ ⑧

實驗題3.

#include #include void main() {

int age,comm; string sex;

scanf("%d%d%s",&comm,&age,&sex); if(age>25&&sex='m') {

if(age>50||comm>2000) { printf("end"); } else{ comm-=200;

} } else {

comm+=150; } }

控制流程圖:

白盒測試實驗

實驗四 白盒測試

一、實驗目的

1. 掌握白盒測試技術,并能應用白盒測試技術設計測試用例。

2. 熟練使用Junit實施測試。

二、實驗設備

主流 PC 機一臺,要求安裝 windows 操作系統、Office、Eclipse 和 Junit。

三、實驗內容

1. 使用邏輯覆蓋測試方法測試以下程序段

voidDoWork ( int x, int y, int z ) {

1 int k=0, j=0;

2 if((x>3)&&(z

3 {

4 k=x*y-1;

5 j=sqrt(k);

6 }

7 if((x==4)||(y>5))

8 j=x*y+10;

9 j=j%3;

10 }

說明:程序段中每行開頭的數字(1—10)是對每條語句的編號。

(1)畫出程序的控制流圖(用題中給出的語句編號表示)。

(2)分別以語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋方 法設計測試用例,并寫出每個測試用例的執行路徑(用題中給出的語句編號表示)。

2. 計算生日是星期幾

已知公元1年1月1日是星期一。編寫一個程序,只要輸入年月日,就能回答那天是星 期幾。應用邏輯覆蓋方法和基本路徑測試方法為上面的問題設計測試用例。

四、實驗步驟

1. 根據白盒測試技術設計測試用例,主要考慮邏輯覆蓋測試(語句覆蓋、判斷覆蓋、 條件覆蓋、判斷/條件覆蓋、條件組合覆蓋、路徑覆蓋)和基本路徑測試技術。

2. 計算測試用例的分支覆蓋率、條件覆蓋率和語句覆蓋率等測試管理指標。

五、實驗要求

1. 根據題目要求編寫測試用例;

2. 撰寫實驗報告。

六、實驗思考

1. 在實際的白盒測試中,如何設計測試用例才能達到用最少的測試用例檢測出最多的缺陷?

2. 在進行用例設計時,如何考慮軟件測試用例的充分性和減少軟件測試用例的冗余性?

白盒測試實驗三

軟件測試基礎與實踐

實驗報告

白盒測試實驗三 機房

實驗名稱:實驗地點:實驗日期:學生姓名:學生學號:

一、實驗目的

(1)鞏固白盒測試知識,能應用數據流覆蓋方法設計測試用例; (2)學習測試用例的書寫。

二、實驗背景:

在 Web 服務等應用中,CGI(Common Gateway Interface)是用戶訪問服務器端 Web 頁面內容的一種傳輸標準。 在應用程序開發中,常常需要將 CGI 編碼的字符串解碼為普通的 ASCII 字符串。 程序 CgiDecode 正實現了此功能。

實驗 1:數據流測試技術實驗

運用數據流測試方法,對 CgiDecode 程序中的 decode()方法進行測試。 要求:

(1) 測試要考慮 decode()中 encoded, decoded, *eptr, eptr, *dptr, dptr, ok, c, digit_high, digit_low 變量; (2) 給出每個變量對應的 du-path;

(3) 根據變量的 du-path 設計測試用例,完成對 decode()的測試;

decode()函數的語句及其編號如下:

1 /** Translate a string from the CGI encoding to plain ascii text. 2 * '+' becomes space, %xx becomes byte with hex value xx, 3 * other alphanumeric characters map to themselves. 4 * Returns 0 for success, positive for erroneous input 5 * 1 = bad hexadecimal digit 6 */

7 int decode(char *encoded, char *decoded) 8 {

9 char *eptr = encoded; 10 char *dptr = decoded; 11 int ok=0; 12 while (*eptr) 13 { 14 char c; 15 c = *eptr; 16 if (c == '+')

17 { /* Case 1: '+' maps to blank */

19 } 20 else if (c == '%')

21 { /* Case 2: '%xx' is hex for character xx */ 22 int digit_high = getHexValue(*(++eptr)); 23 int digit_low = getHexValue(*(++eptr)); 24 if ( digit_high == -1 || digit_low==-1) { 25 /* *dptr='?'; */

26 ok=1; /* Bad return code */ 27 } else {

28 *dptr = 16* digit_high + digit_low; 29 }

30 } else {/* Case 3: All other characters map to themselves */ 31 *dptr = *eptr; 32 } 33 ++dptr; 34 ++eptr;

36 *dptr = '\0'; /* Null terminator for string */ 37 return ok; 38 }

流圖如圖所示(雙擊可打開和編輯)

Encoded

可能的路徑數為:1×1=1 P:7-9 測試用例:

Decoded

可能的路徑數為:1×1=1 P:7-9-10 測試用例:

*eptr

可能的路徑數為:4×5=20 P1:9-10-11-12 P2:9-10-11-12-14-15

P3:9-10-11-12-14-15-16-20-31 P4:9-10-11-12-14-15-16-20-22 P5:9-10-11-12-14-15-16-20-22-23 P6:22-23-24-28-33-34-12 P7:22-23-24-28-33-34-12-14-15

P8:22-23-24-28-33-34-12-14-15-16-20-31 P9:22 P10:22-23

P11:23-24-28-33-34-12 P12:23-24-28-33-34-12-14-15

P13:23-24-28-33-34-12-14-15-16-20-31 P14:23-24-28-33-34-12-14-15-16-20-22 P15:23 P16: 34-12 P17: 34-12-14-15 P18:34-12-14-15-16-20-31 P19:34-12-14-15-16-20-22 P20:34-12-14-15-16-20-22-23 約簡后得:

P1:9-10-11-12-14-15-16-20-31 P2:9-10-11-12-14-15-16-20-22-23 P3:22-23-24-28-33-34-12-14-15-16-20-31

P4:23-24-28-33-34-12-14-15-16-20-22 測試用例:

Eptr

可能的路徑數為:4×6=24 P1:9-10-11-12 P2:9-10-11-12-14-15

P3:9-10-11-12-14-15-16-20-31 P4:9-10-11-12-14-15-16-20-22 P5:9-10-11-12-14-15-16-20-22-23 P6:9-10-11-12-14-15-16-18-33-34 P7:22-23-24-28-33-34-12 P8:22-23-24-28-33-34-12-14-15

P9:22-23-24-28-33-34-12-14-15-16-20-31 P10:22 P11:22-23

P12:22-23-24-28-33-34 P13:23-24-28-33-34-12 P14:23-24-28-33-34-12-14-15

P15:23-24-28-33-34-12-14-15-16-20-31 P16:23-24-28-33-34-12-14-15-16-20-22

P17:23

P18:23-24-28-33-34 P19:34-12 P20:34-12-14-15

P21:34-12-14-15-16-20-31 P22:34-12-14-15-16-20-22 P23:34-12-14-15-16-20-22-23 P24:34 約簡后:

P1:9-10-11-12-14-15-16-20-31 P2:9-10-11-12-14-15-16-20-22-23 P3:9-10-11-12-14-15-16-18-33-34 P4:22-23-24-28-33-34-12-14-15-16-20-31 P5:23-24-28-33-34-12-14-15-16-20-22 測試用例:

*dptr 可能的路徑數為:0 測試用例:無 Dptr

可能的路徑數為:2×5=10 P1:10-11-12-14-15-16-18

P2:10-11-12-14-15-16-20-22-23-24-28

P3:10-11-12-14-15-16-20-31 P4:10-11-12-14-15-16-20-31-33-34-12-36 P5:10-11-12-14-15-16-20-31-33 P6:33-34-12-14-15-16-18

P7:33-34-12-14-15-16-20-22-23-24-28 P8:33-34-12-14-15-16-20-31 P9:33

P10:33-34-12-36

約簡后:

P1:10-11-12-14-15-16-18

P2:10-11-12-14-15-16-20-22-23-24-28 P3:10-11-12-14-15-16-20-31-33-34-12-36 P4:33-34-12-14-15-16-18

P5:33-34-12-14-15-16-20-22-23-24-28 P6:33-34-12-14-15-16-20-31 測試用例:

Ok

可能的路徑數為:1×2=2 P1:11-12-36-37 P2:26-33-34-12-36-37 測試用例:

C 可能的路徑數為:2×2=4

P1:14-15-16 P2:14-15-16-20 P3:15-16 P4:15-16-20 約簡后: P:14-15-16-20

測試用例:

digit_high

可能的路徑數為: 1×2=2 P1:22-23-24 P2:22-23-24-28 約簡后: P:22-23-24-28

測試用例:

digit_low 可能的路徑數為: 1×2=2

P1:23-24 P2:23-24-28 約簡后: P: 23-24-28

測試用例:

三、實驗體會

在白盒測試中數據流測試是一個很重要的測試方法,通過這次實驗, 加深了對數據流測試的理解,特別是在有指針的情況下,在指針發生變化的時候,會影響到相應的指針變量的值,這時候定義節點和使用節點會發生變化.應當注意.

掃一掃手機訪問

發表評論