測試用例設計
設計數據庫測試用例就是針對數據庫的功能和性能而設計的測試方案,並編入測試計划中。測試用例的設計既要考慮正常情況,也應考慮極限情況以及字段取最大值和最小值等邊界情況。因為測試的目的是暴露數據庫中隱藏的錯誤和缺陷,所以在設計測試用例時要充分考慮那些易於發現錯誤和缺陷的測試用例。好的測試用例應該有較高的發現錯誤和缺陷的概率。
白盒測試的測試用例設計
邏輯覆蓋法和基本路徑測試法是計算機軟件白盒測試用例設計的兩個重要方法。這兩個方法也適合存儲過程、觸發器、嵌入式SQL等數據庫程序的測試。
-
語句覆蓋
-
語句覆蓋 語句覆蓋是設計足夠多的測試用例,運行所測程序,使得程序中每條可執行語句至少被執行一次。不過,每條可執行語句至少執行一次是最基本的要求,但是它不能保證發現邏輯運算和程序邏輯錯誤,且並不是所有的分支被執行過。
-
例6-1 考慮圖6-2,語句覆蓋的測試用例如表6-1所示。注意,該組測試用例不能覆蓋判斷E為假的分支。而且,如果判斷C誤寫為X>2 or Y>3,該組測試用例仍能夠實現語句覆蓋,因此該組測試用例發現不了這個錯誤。
-
測試用例一般不是唯一的。例如,表6-2的測試用例也可以實現語句覆蓋。
-
-
判定覆蓋 判定覆蓋又稱分支覆蓋,是設計足夠多的測試用例,運行所測程序,使得程序中每個判斷的取真分支和取假分支分別至少執行一次。
-
例6-2 考慮圖6-2,其中C、E為判斷。判定覆蓋的測試用例如表6-3所示。
-
雖然判定覆蓋能夠保證所有判斷的取真分支和取假分支執行至少一次,但判定覆蓋不能保證發現條件表達式錯誤。例如,如果語句C誤寫為X>2 or Y>3,表6-3給出的測試用例仍能夠實現判定覆蓋,因此該組測試用例發現不了這個錯誤。
-
-
條件覆蓋 條件覆蓋是設計足夠多的測試用例,運行所測程序,使得每個判斷的每個條件成分取真值和假值分別至少執行一次。
- 例6-3 考慮圖6-2。首先對所有判斷的條件成分取值進行標記:v條件覆蓋的測試用例如表6-4所示。
-
判定-條件覆蓋 判定-條件覆蓋是設計足夠多的測試用例,同時滿足判定覆蓋和條件覆蓋。
- 例6-4 考慮圖6-2,並沿用例6-3的記號。判定-條件覆蓋的測試用例如表6-5所示。表6-5的測試用例同表6-3、表6-4是一樣的。可見,判定-條件覆蓋的測試用例仍不能保證條件表達式錯誤被檢出
-
條件組合覆蓋 條件組合覆蓋是設計足夠多的測試用例,運行所測程序,使得每個判斷中的所有條件成分取值組合至少執行一次。
- 例6-5 考慮圖6-2,並沿用例6-3的記號。判斷C的條件成分組合有4個:
- 組合覆蓋的測試用例可同時實現判定覆蓋、條件覆蓋和判定-條件覆蓋,但當判斷的條件成分過多時,測試用例的數量可能成幾何級數增長。例如,如果某個判斷有5個條件成分,因為每個條件成分有取真值、取假值兩種可能,則有25=32種組合方案。
- 另外,組合覆蓋的測試用例不一定能覆蓋全部程序路徑。這里,程序路徑(簡稱路徑)是指從程序入口(開始)到出口(結束)的任何路徑。
-
路徑覆蓋 路徑覆蓋是設計足夠多的測試用例,覆蓋程序中所有可能的路徑。
例6-6 考慮圖6-2。全部路徑為ACDEFG、ACDEG、ACBG。路徑覆蓋的測試用例如表6-7所示。表6-7的測試用例同表6-3是一樣的。
-
基本路徑測試法
- 基本路徑測試法是在程序控制流圖的基礎上,通過分析控制構造的環路復雜性,導出基本可執行路徑集合,從而設計測試用例的方法。
- 限於篇幅,本書對基本路徑測試法不作深入討論。有興趣的讀者可以參考軟件測試等方面的專著或教科書。
黑盒測試的測試用例設計-- 等價類划分法
-
一個數據的集合稱為關於程序輸入數據的等價類(簡稱為等價類),如果集合中的一個數據作為測試輸入數據不能發現該程序的錯誤,那么使用集合中的其他數據作為測試輸入數據也不能發現錯誤。所謂等價類划分法是把全部可能的輸入數據划分為若干等價類,從每個類中選取一個數據作為輸入數據來測試程序。
-
等價類划分法設計測試用例分為兩步:划分等價類、確定測試用例。
-
划分等價類和列出等價類表
- 等價類分為有效等價類和無效等價類。所謂有效等價類,指對於程序的需求規格說明而言是合理的、有意義的輸入數據構成的集合。利用有效等價類可檢驗程序是否實現了需求規格說明中所規定的功能和性能。不是有效等價類的數據的集合稱為無效等價類。設計測試用例時,要同時考慮這兩種等價類。因為軟件不僅要能接受合理的數據,也要能經受意外的考驗。這樣的測試才能確保軟件具有更高的可靠性。
- 划分等價類需要經驗,下述列出划分等價類的幾個原則:
- 如果輸入條件規定了取值范圍,則可以定義一個有效等價類和兩個無效等價類。例6-7 設在程序的需求規格說明中對輸入條件有一句話:“…… 班級的人數從1~99 ……”。有效等價類有一個:“1≤人數≤99”,無效等價類有兩個:“人數<1”、“人數>99”。
- 如果輸入條件規定了輸入值的集合,或者規定了“必須如何”的條件,則可以定義一個有效等價類和一個無效等價類。例6-8 設學生(學號,姓名,性別,所在系,班號,出生日期)關系規定性別屬性取值於集合{“男”,“女”}。v有效等價類有一個:{“男”,“女”},無效等價類有一個:除“男”、“女”外的所有字符串。
- 如果輸入條件是一個布爾量,則可以定義一個有效等價類和一個無效等價類。
- 如果規定了輸入數據的一組值,而且程序要對每個輸入值分別進行處理。這時可為每一個輸入值定義一個有效等價類,把這組輸入值之外的數據定義為一個無效等價類。v例6-9 設大學教師的職稱取值“教授”、“副教授”、“講師”和“助教”,職稱不同考核的標准不同,因而處理方式也不同。有效等價類有4個:“教授”、“副教授”、“講師”和“助教”,無效等價類有一個:除這4種職稱外的所有其他職稱。
- 如果規定了輸入數據必須遵守的規則,則可以定義一個有效等價類(符合規則)和若干個無效等價類(從不同角度違反規則)。例6-10 設學生選課關系“選修(學號,課程號,成績)”中的成績屬性滿足:0≤成績≤100且成績為整數。有效等價類有一個:“0≤成績≤100且成績為整數”,無效等價類有4個:“0≤成績≤100且成績為小數”、“成績<0且成績為數值”、“成績>100且成績為數值”、“成績取字符串”。
- 在已划分的等價類中,如果程序對某些數據的處理方式不同,則應考慮將該等價類進一步划分為更小的等價類。
-
確定測試用例 在確立了等價類之后,建立等價類表,列出所有划分出的等價類,如表6-8所示。
輸入條件 有效等價類 無效等價類 ... ... ... ... ... ... -
根據等價類表,按以下原則確定測試用例:
- 為每個等價類分配一個唯一的編號。
- 設計一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價類,重復這一步,直到所有的有效等價類都被覆蓋為止。
- 設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重復這一步,直到所有的無效等價類都被覆蓋為止。
這就是說,對每個無效等價類分別設計測試用例。之所以這樣做,是因為某些程序對某一輸入錯誤的檢查往往會屏蔽對其他輸入錯誤的檢查。
-
-
例子
例6-11 設“參加工作年月”滿足:年份為1950~2008,月份為1~12。輸入格式是連續輸入年、月,其中年占4位、月占兩位,如2008年1月輸入格式為:200801。
-
v第一步:划分等價類,等價類表如表6-9所示。
輸入條件 有效等價類及編號 無效等價類及編號 參加工作年月的類型及長度 6位數字字符(1) 有非數字字符(4) 少於6個數字字符 (5) 多於6個數字字符 (6) 年份范圍 在1950~2008之間 (2) 小於1950 (7) 大於2008 (8) 月份范圍 在1~12之間(3) 小於1 (9) 大於12 (10) -
第二步:確定測試用例。
-
編號為1、2、3的三個有效等價類用一個測試用例覆蓋,如表6-10所示。
序號 輸入 預期輸出 覆蓋等價類 1 200811 200811 (1)、(2)、(3) -
為每一個無效等價類至少設計一個測試用例
序號 輸入 預期輸出 覆蓋等價類 1 2001ab 無效輸入 (4) 2 2002 無效輸入 (5) 3 2002163 無效輸入 (6) 4 194012 無效輸入 (7) 5 200901 無效輸入 (8) 6 196000 無效輸入 (9) 7 200633 無效輸入 (10)
-
-
黑盒測試的測試用例設計-- 邊界值分析法
-
邊界是指程序輸入、輸出范圍的邊緣,邊界值是指程序輸入、輸出范圍的邊緣值。
-
在數據庫測試中,常見的邊界值有月份中的空值、1月、12月,發票中的空值、最低金額、最高金額,年齡中的空值、最小年齡、最大年齡,姓名中的空值、最短姓名、最長姓名,編號中的空值、最小編號、最大編號。
-
邊界值既可以是一元組,也可以是多元組。例如,設三角形的三條邊的長度分別為A、B和C。當A、B、C滿足:A>0,B>0,C>0,A+B>C,A+C>B,B+C>A,才能構成三角形。但如果把6個不等式中的任何一個大於號“>”錯寫成大於等於號“≥”,那就不能構成三角形。滿足上述6個不等式等號要求的A、B、C任何取值三元組均是構成三角形這一問題的邊界值。
-
測試實踐表明,大量的錯誤一般發生在輸入或輸出范圍的邊界上,而不是發生在輸入輸出范圍的內部。因此針對輸入、輸出的邊界設計測試用例顯得尤其重要。事實上,為檢驗程序在邊界附近的運行情況專門設計測試用例進行測試,常常取得良好的測試效果。
-
邊界值分析法是一種黑盒測試方法,是對等價類划分法的補充,其測試用例來自等價類的邊界。邊界值分析法與等價類划分法存在一定的差異。一是邊界值分析法不是選擇等價類的任意數據,而是選擇正好等於、剛剛大於或剛剛小於邊界值的數據。二是邊界值分析法不僅重視針對輸入邊界的測試用例設計,而且重視針對輸出邊界的測試用例設計。
-
應用邊界值分析法設計測試用例,需遵循以下幾條原則:
- 如果輸入條件規定了值的范圍,則應取剛達到這個范圍的邊界的值,以及剛剛超越這個范圍邊界的值作為測試輸入數據。
- 如果輸入條件規定了值的個數,則用最大個數、最小個數、比最小個數少1、比最大個數多1的數作為測試數據。
- 根據需求規格說明書中的每個輸出條件,使用前面的原則(1)。
- 根據需求規格說明書中的每個輸出條件,使用前面的原則(2)
- 如果需求規格說明書給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最后一個元素作為測試用例。
- 如果程序中使用了一個內部數據結構,則應當選擇這個內部數據結構邊界上的值作為測試用例。
- 分析需求規格說明,找出其他可能的邊界條件。
-
例6-12 函數x+sqrt(x)(x取實數)的邊界值分析法測試用例設計。輸入數據可以划分為兩個等價類:①有效等價類x≥0;②無效等價類x<0。等價類①的邊界為0和最大實數,等價類②的邊界為0和最小實數。應用邊界值分析法,各測試用例的輸入部分可設計為:最大實數、絕對值很小的正實數、0、絕對值很小的負實數、最小實數。
黑盒測試的測試用例設計-- 錯誤推測法
- 錯誤推測法就是根據測試人員的直覺與經驗,推測被測數據庫哪些地方容易出錯,並據此設計測試用例。它通常作為其他方法的一種輔助手段。即用其他方法設計測試用例,然后再根據錯誤推測法補充一些測試用例。
- 例如,設計一些非法、錯誤的輸入進行數據庫測試是很有意義的。如果需求分析中要求兩個學生的學號不相同,就輸入兩個相同的學號。如果需求分析中要求公司名稱不超過30個字符,就輸入31個字符。如果需求分析中要求職工號不為空,就輸入一個空職工號。如果需求分析中要求成績為數字,就輸入字母。如果需求分析中要求成績為整數,就輸入小數。如果需求分析中要求出生日期是時間敏感的,就看它在公元3000年是否還能正常工作。在一個表的外碼屬性中輸入了一個被參照表中不存在的數據。向一個表的數值型屬性中輸入多行很大的數字,當這些數字求和后再存儲到別的表時看是不是會出現錯誤。