一、等價類劃分
1、定義:把所有可能的輸入數據,即程序的輸入域劃分成若干子集,然後從每一個子集中選取少數數據代表整個子集來設計測試用例。
2、劃分等價類
等價類是指某個輸入域的子集合。在該子集合中,各個輸入數據對於揭露程序中的錯誤都是等效的,併合理地假定:測試某等價類的代表值就等於對這一類其它值的測試,因此,可以把全部輸入數據合理劃分爲若干等價類,在每一個等價類中取一個數據作爲測試的輸入條件就可以用少量代表性的測試數據取得較好的測試結果。等價類劃分可有兩種不同的情況:有效等價類和無效等價類。
1)有效等價類
是指對於程序的規格說明來說是合理的、有意義的輸入數據構成的集合。利用有效等價類可檢驗程序是否實現了規格說明中所規定的功能和性能。
2)無效等價類
與有效等價類的定義恰巧相反。無效等價類指對程序的規格說明是不合理的或無意義的輸入數據所構成的集合。對於具體的問題,無效等價類至少應有一個,也可能有多個。
設計測試用例時,要同時考慮這兩種等價類。因爲軟件不僅要能接收合理的數據,也要能經受意外的考驗,這樣的測試才能確保軟件具有更高的可靠性。
3.劃分等價類的標準:
1)完備測試、避免冗餘;
2)劃分等價類重要的是:集合的劃分,劃分爲互不相交的一組子集,而子集的並是整個集合;
3)並是整個集合:完備性;
4)子集互不相交:保證一種形式的無冗餘性;
5)同一類中標識(選擇)一個測試用例,同一等價類中,往往處理相同,相同處理映射到"相同的執行路徑"。
4.劃分等價類的方法
1)在輸入條件規定了取值範圍或值的個數的情況下,則可以確立一個有效等價類和兩個無效等價類。如:輸入值是學生成績,範圍是0~100;
2)在輸入條件規定了輸入值的集合或者規定了"必須如何"的條件的情況下,可確立一個有效等價類和一個無效等價類;
3)在輸入條件是一個布爾量的情況下,可確定一個有效等價類和一個無效等價類。
4)在規定了輸入數據的一組值(假定n個),並且程序要對每一個輸入值分別處理的情況下,可確立n個有效等價類和一個無效等價類。
例:輸入條件說明學歷可爲:專科、本科、碩士、博士四種之一,則分別取這四種這四個值作爲四個有效等價類,另外把四種學歷之外的任何學歷作爲無效等價類。
5)在規定了輸入數據必須遵守的規則的情況下,可確立一個有效等價類(符合規則)和若干個無效等價類(從不同角度違反規則);
6)在確知已劃分的等價類中各元素在程序處理中的方式不同的情況下,則應再將該等價類進一步的劃分爲更小的等價類。
5.設計測試用例
在確立了等價類後,可建立等價類表,列出所有劃分出的等價類輸入條件:有效等價類、無效等價類,然後從劃分出的等價類中按以下三個原則設計測試用例:
1)爲每一個等價類規定一個唯一的編號;
2)設計一個新的測試用例,使其儘可能多地覆蓋尚未被覆蓋地有效等價類,重複這一步,直到所有的有效等價類都被覆蓋爲止;
3)設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重複這一步,直到所有的無效等價類都被覆蓋爲止。
6、實戰演習
設有一個檔案管理系統,要求用戶輸入以年月表示的日期。假設日期限定在1990年1月~2049年12月,並規定日期由6位數字字符組成,前4位表示年,後2位表示月。現用等價類劃分法設計測試用例,來測試程序的"日期檢查功能"。
1)劃分等價類並編號,下表等價類劃分的結果
輸入等價類 | 有效等價類 | 無效等價類 |
---|---|---|
日期類型及長度 | ①6位數字字符 | ②有非數字字符 ③少於6位數字字符 ④多於6位數字字符 |
年份範圍 | ⑤在1990~2049之間 | ⑥小於1990 ⑦大於2049 |
月份範圍 | ⑧在01~12之間 | ⑨等於00 ⑩大於12 |
2)設計測試用例,以便覆蓋所有的有效等價類在表中列出了3個有效等價類,編號分別爲①、⑤、⑧,設計的測試用例如下:
測試數據 期望結果 覆蓋的有效等價類
200211 輸入有效 ①、⑤、⑧
3)爲每一個無效等價類設計一個測試用例,設計結果如下:
測試數據 期望結果 覆蓋的無效等價類
95June 無效輸入 ②
20036 無效輸入 ③
2001006 無效輸入 ④
198912 無效輸入 ⑥
205001 無效輸入 ⑦
200100 無效輸入 ⑨
200113 無效輸入 ⑩
二、邊界值
1、定義:邊界值分析法就是對輸入或輸出的邊界值進行測試的一種黑盒測試方法。通常邊界值分析法是作爲對等價類劃分法的補充,這種情況下,其測試用例來自等價類的邊界。
2、與等價類的區別
1)邊界值分析不是從某等價類中隨便挑一個作爲代表,而是使這個等價類的每個邊界都要作爲測試條件。
2)邊界值分析不僅考慮輸入條件,還要考慮輸出空間產生的測試情況。
3.邊界值分析方法的考慮:
長期的測試工作經驗告訴我們,大量的錯誤是發生在輸入或輸出範圍的邊界上,而不是發生在輸入輸出範圍的內部。因此針對各種邊界情況設計測試用例,可以查出更多的錯誤。
使用邊界值分析方法設計測試用例,首先應確定邊界情況。通常輸入和輸出等價類的邊界,就是應着重測試的邊界情況。應當選取正好等於,剛剛大於或剛剛小於邊界的值作爲測試數據,而不是選取等價類中的典型值或任意值作爲測試數據。
4.常見的邊界值
1)對16-bit 的整數而言 32767 和 -32768 是邊界
2)屏幕上光標在最左上、最右下位置
3)報表的第一行和最後一行
4)數組元素的第一個和最後一個
5)循環的第 0 次、第 1 次和倒數第 2 次、最後一次
5.邊界值分析
1)邊界值分析使用與等價類劃分法相同的劃分,只是邊界值分析假定錯誤更多地存在於劃分的邊界上,因此在等價類的邊界上以及兩側的情況設計測試用例。
2)等價類劃分
3)邊界值分析
4)通常情況下,軟件測試所包含的邊界檢驗有幾種類型:數字、字符、位置、重量、大小、速度、方位、尺寸、空間等
5)相應地,以上類型的邊界值應該在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、 最短/最長、 空/滿等情況下。
6)利用邊界值作爲測試數據
7)內部邊界值分析
6.基於邊界值分析方法選擇測試用例的原則
1)如果輸入條件規定了值的範圍,則應取剛達到這個範圍的邊界的值,以及剛剛超越這個範圍邊界的值作爲測試輸入數據。
例如,如果程序的規格說明中規定:"重量在10公斤至50公斤範圍內的郵件,其郵費計算公式爲……"。作爲測試用例,我們應取10及50,還應取10.01,49.99,9.99及50.01等。
2)如果輸入條件規定了值的個數,則用最大個數,最小個數,比最小個數少一,比最大個數多一的數作爲測試數據。
比如,一個輸入文件應包括1~255個記錄,則測試用例可取1和255,還應取0及256等。
3)將規則1)和2)應用於輸出條件,即設計測試用例使輸出值達到邊界值及其左右的值。
例如,某程序的規格說明要求計算出"每月保險金扣除額爲0至1165.25元",其測試用例可取0.00及1165.24、還可取一0.01及1165.26等。
再如一程序屬於情報檢索系統,要求每次"最少顯示1條、最多顯示4條情報摘要",這時我們應考慮的測試用例包括1和4,還應包括0和5等。
4)如果程序的規格說明給出的輸入域或輸出域是有序集合,則應選取集合的第一個元素和最後一個元素作爲測試用例。
5)如果程序中使用了一個內部數據結構,則應當選擇這個內部數據結構的邊界上的值作爲測試用例。
6)分析規格說明,找出其它可能的邊界條件
7、實戰演習
繼續分析檔案管理系統的例子
輸入日期長度是6爲數字字符,6的邊界值是5、6、7
年份範圍是1990-2049之間,這個區間的邊界值是1989、1990、1991、2048、2049、2050
月份範圍是01-12之間,這個區間的邊界值是00、01、02、11、12、13
三、錯誤推測法
1、定義:基於經驗和直覺推測程序中所有可能存在的各種錯誤, 從而有針對性的設計測試用例的方法。
2、基本思想:列舉出程序中所有可能有的錯誤和容易發生錯誤的特殊情況,根據他們選擇測試用例。
四、因果圖法
1.定義:是一種利用圖解法分析輸入的各種組合情況,從而設計測試用例的方法,它適合於檢查程序輸入條件的各種組合情況。
2.因果圖法產生的背景:
等價類劃分法和邊界值分析方法都是着重考慮輸入條件,但沒有考慮輸入條件的各種組合、輸入條件之間的相互制約關係。這樣雖然各種輸入條件可能出錯的情況已經測試到了,但多個輸入條件組合起來可能出錯的情況卻被忽視了。
如果在測試時必須考慮輸入條件的各種組合,則可能的組合數目將是天文數字,因此必須考慮採用一種適合於描述多種條件的組合、相應產生多個動作的形式來進行測試用例的設計,這就需要利用因果圖(邏輯模型)。
3.因果圖介紹
1) 4種符號分別表示了規格說明中向4種因果關係。
2) 因果圖中使用了簡單的邏輯符號,以直線聯接左右結點。左結點表示輸入狀態(或稱原因),右結點表示輸出狀態(或稱結果)。
3) Ci表示原因,通常置於圖的左部;ei表示結果,通常在圖的右部。Ci和ei均可取值0或1,0表示某狀態不出現,1表示某狀態出現。
4. 因果圖概念
1) 關係
①恆等:若ci是1,則ei也是1;否則ei爲0。
②非:若ci是1,則ei是0;否則ei是1。
③或:若c1或c2或c3是1,則ei是1;否則ei爲0。“或”可有任意個輸入。
④與:若c1和c2都是1,則ei爲1;否則ei爲0。“與”也可有任意個輸入。
2) 約束
輸入狀態相互之間還可能存在某些依賴關係,稱爲約束。例如, 某些輸入條件本身不可能同時出現。輸出狀態之間也往往存在約束。在因果圖中,用特定的符號標明這些約束。
A.輸入條件的約束有以下4類:
① E約束(異):a和b中至多有一個可能爲1,即a和b不能同時爲1。
② I約束(或):a、b和c中至少有一個必須是1,即 a、b 和c不能同時爲0。
③ O約束(唯一);a和b必須有一個,且僅有1個爲1。
④R約束(要求):a是1時,b必須是1,即不可能a是1時b是0。
B.輸出條件約束類型
輸出條件的約束只有M約束(強制):若結果a是1,則結果b強制爲0。
5. 採用因果圖法設計測試用例的步驟:
1)分析軟件規格說明描述中, 那些是原因(即輸入條件或輸入條件的等價類),那些是結果(即輸出條件), 並給每個原因和結果賦予一個標識符。
2)分析軟件規格說明描述中的語義,找出原因與結果之間, 原因與原因之間對應的關係,根據這些關係,畫出因果圖。
3)由於語法或環境限制, 有些原因與原因之間,原因與結果之間的組合情況不可能出現,爲表明這些特殊情況, 在因果圖上用一些記號表明約束或限制條件。
4)把因果圖轉換爲判定表。
5)把判定表的每一列拿出來作爲依據,設計測試用例。
6、實戰演習
軟件規格說明書包含這樣的要求:第一列字符必須是A或B,第二列字符必須是一個數字,在此情況下進行文件的修改,但如果第一列字符不正確,則給出信息L;如果第二列字符不是數字,則給出信息M。
1) 根據題意,原因和結果如下:
原因:
1——第一列字符是A;
2——第一列字符是B;
3——第二列字符是一數字。
結果:
21——修改文件;
22 ——給出信息L;
23——給出信息M。
2) 其對應的因果圖如下:11爲中間節點;考慮到原因1和原因2不可能同時爲1,因此在因果圖上施加E約束。
3)根據因果圖建立判定表。
五、判定表驅動分析法
1.定義:判定表是分析和表達多邏輯條件下執行不同操作的情況的工具。
2.判定表的優點
能夠將複雜的問題按照各種可能的情況全部列舉出來,簡明並避免遺漏。因此,利用判定表能夠設計出完整的測試用例集合。
在一些數據處理問題當中,某些操作的實施依賴於多個邏輯條件的組合,即:針對不同邏輯條件的組合值,分別執行不同的操作。判定表很適合於處理這類問題。
3. 判定表通常由四個部分組成如下所示
1)條件樁(Condition Stub):列出了問題的所有條件。通常認爲列出的條件的次序無關緊要。
2)動作樁(Action Stub):列出了問題規定可能採取的操作。這些操作的排列順序沒有約束。
3)條件項(Condition Entry):列出針對它左列條件的取值。在所有可能情況下的真假值。
4)動作項(Action Entry):列出在條件項的各種取值情況下應該採取的動作。
4.規則及規則合併
1)規則:任何一個條件組合的特定取值及其相應要執行的操作稱爲規則。在判定表中貫穿條件項和動作項的一列就是一條規則。顯然,判定表中列出多少組條件取值,也就有多少條規則,既條件項和動作項有多少列。
2)化簡:就是規則合併有兩條或多條規則具有相同的動作,並且其條件項之間存在着極爲相似的關係。
5.判定表的建立步驟:(根據軟件規格說明)
1)確定規則的個數.假如有n個條件。每個條件有兩個取值(0,1),故有2n種規則。
2)列出所有的條件樁和動作樁。
3)填入條件項。
4)填入動作。
5)簡化.合併相似規則(相同動作)。
6、實戰演習
根據因果圖對軟件說明書分析得出判定表如下
表中8種情況的左面兩列情況中,原因①和原因②同時爲1,這是不可能出現的,故應排除這兩種情況。
把判定表的每一列拿出來作爲依據,設計測試用例
我們把表的最下一欄給出了6種情況的測試用例,這是我們所需要的數據。
總結:判定表的優點和缺點
I. 優點:它能把複雜的問題按各種可能的情況一一列舉出來,簡明而易於理解,也可避免遺漏。
II. 缺點:不能表達重複執行的動作,例如循環結構。
3)B. Beizer 指出了適合使用判定表設計測試用例的條件:
①規格說明以判定表形式給出,或很容易轉換成判定表。
②條件的排列順序不會也不影響執行哪些操作。
③規則的排列順序不會也不影響執行哪些操作。
④每當某一規則的條件已經滿足,並確定要執行的操作後,不必檢驗別的規則。
⑤如果某一規則得到滿足要執行多個操作,這些操作的執行順序無關緊要。
B. Beizer提出這5個必要條件的目的是爲了使操作的執行完全依賴於條件的組合。其實對於某些不滿足這幾條的判定表,同樣可以藉以設計測試用例,只不過尚需增加其它的測試用例罷了。
六、正交排列驅動法
1、應用場合
有很多控件,每個控件有很多個取值,要考慮不同控件不同取值之間的組合。並且組合數較大,而且沒有必要爲每一種組合編寫用例。在這種情況下,我們就不採用因果圖法來設計測試用例,而是選擇正交排列法。
正交排列法核心思想是從大量的數據中挑選適量的、有代表性的點進行測試。
正交排列法與因果圖法的區別:
因果圖法要求控件較少,並且要求把所有的組合測試全面。
正交排列法適用於組合數量巨大,而且沒必要測全。
2.正交表
一種特製的表,一般的正交表記爲:
n是表的行數,也就是測試組合的次數
K是表的列數,表示控件的個數(因素的個數,或銀子個數)
m表示每個控件包含的取值。
注:表不需要自己設計,可以上網查找使用。
3.正交排列法的方法步驟
a.分析需求有多少個控件組合,每個控件的取值列出表格。
b.選擇正確的正交表:
1).根據控件的個數,確定列數K。
2).根據每個控件的取值個數,確定m。
3).確定m,k後,可以查表,確定n,以及這個表。
c.把控件名稱和控件的取值映射到正交表中
1).把正交表的列名分別用控件名稱替代
2).把正交表的內容替換爲控件的取值
d.設計編寫用例---把正交表的每一行轉換成1條用例。
這個方案是測試使用的最少數據組合量,也是經過數學推理最優化的。當然條件允許的情況下,多測一點組合就更好了。
4.正交表的侷限性
正交表數據量有限,現有的正交表要求控件取值基本一樣,在實際中很難遇到。
七、場景設計法
1、定義:通過運用場景法來對系統的功能點或業務流程進行描述,從而提高測試效果的一種方法。用例場景來測試需求是指模擬特定場景邊界發生的事情,通過事件來觸發某個動作的發生,觀察事件的最終結果,從而用來發現需求中存在的問題。
2、簡介:現在的軟件幾乎都是用事件觸發來控制流程的,事件觸發時的情景便形成了場景,而同一事件不同的觸發順序和處理結果就形成事件流。這種在軟件設計方面的思想也可以引入到軟件測試中,可以比較生動地描繪出事件觸發時的情景,有利於測試設計者設計測試用例,同時使測試用例更容易理解和執行。
3、基本流和備選流:在測試一個軟件的時候,在場景法中,測試流程是軟件功能按照正確的事件流實現的一條正確流程,那麼我們把這個成爲軟件的基本流;而凡是出現故障或缺陷的過程,就用備選流加以標註,這樣的話,備選流就可以是從基本流來的,或是由備選流中引出的。所以在進行圖示的時候,就會發現每個事件流的顏色是不同的。
圖中經過用例的每條路徑都用基本流和備選流來表示,直黑線表示基本流,是經過用例的最簡單的路徑。備選流用不同的色彩表示,一個備選流可能從基本流開始,在某個特定條件下執行,然後重新加入基本流中(如備選流1和3);也可能起源於另一個備選流(如備選流2),或者終止用例而不再重新加入到某個流(如備選流2和4)。
4、實戰演習
有一個在線購物的實例,用戶進入一個在線購物網站進行購物,選購物品後,進行在線購買,這時需要使用帳號登錄,登錄成功後,進行付錢交易,交易成功後,生成訂購單,完成整個購物過程。
1)根據說明,描述出程序的基本流及各項備選流
基本流:登錄網站,選購物品,賬號登錄,付錢交易,生成訂單
備選流:無賬號,賬號或密碼錯誤,賬號沒有錢,賬號餘額不足 用戶退出系統
2)根據基本流和各項備選流生成不同的場景
場景1:登錄網站,選購物品,賬號登錄,無賬號
場景2:登錄網站,選購物品,賬號登錄,賬號或密碼錯誤
場景3:登錄網站,選購物品,賬號登錄,付錢交易,賬號沒有錢
場景4:登錄網站,選購物品,賬號登錄,付錢交易,賬號餘額不足
場景5:登錄網站,選購物品,賬號登錄,付錢交易,生成訂單
場景6:登錄網站,選購物品,賬號登錄,用戶退出系統
3)根據場景生成相應的測試用例
4)根據上表,設計數據,填入數據
總結:以上方法中較常用的有等價類劃分,邊界值、場景法,然後各種方法可能結合使用,如等價類劃分常與邊界值結合使用,因果圖常與判定表結合使用。
參考文章網址如下:
1 https://blog.csdn.net/u010312649/article/details/79070329
2 https://blog.csdn.net/chun_xiaolin001/article/details/81288558
3 https://blog.csdn.net/wang122188/article/details/7106619