1. 程式人生 > >測試用例設計1

測試用例設計1

測試用例的設計方法(全) 等價類劃分方法:     一.方法簡介 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)設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重複這一步,直到所有的無效等價類都被覆蓋為止。    二.實戰演習 1.某程式規定:"輸入三個整數 a 、 b 、 c 分別作為三邊的邊長構成三角形。通過程式判定所構成的三角形的型別,當此三角形為一般三角形、等腰三角形及等邊三角形時,分別作計算 … “。用等價類劃分方法為該程式進行測試用例設計。(三角形問題的複雜之處在於輸入與輸出之間的關係比較複雜。)   分析題目中給出和隱含的對輸入條件的要求:    (1)整數    (2)三個數    (3)非零數   (4)正數      (5)兩邊之和大於第三邊     (6)等腰     (7)等邊     如果 a 、 b 、 c 滿足條件( 1 ) ~ ( 4 ),則輸出下列四種情況之一:    1)如果不滿足條件(5),則程式輸出為 " 非三角形 " 。    2)如果三條邊相等即滿足條件(7),則程式輸出為 " 等邊三角形 " 。    3)如果只有兩條邊相等、即滿足條件(6),則程式輸出為 " 等腰三角形 " 。    4)如果三條邊都不相等,則程式輸出為 " 一般三角形 " 。     列出等價類表並編號   覆蓋有效等價類的測試用例:     a      b      c              覆蓋等價類號碼     3      4      5             (1)–(7)     4      4      5             (1)–(7),(8)     4      5      5             (1)–(7),(9)         5      4      5             (1)–(7),(10)     4      4      4             (1)–(7),(11)    覆蓋無效等價類的測試用例:   2.設有一個檔案管理系統,要求使用者輸入以年月表示的日期。假設日期限定在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     無效輸入          ⑥     200401     無效輸入          ⑦     200100     無效輸入          ⑨     200113     無效輸入          ⑩      3.NextDate 函式包含三個變數:month 、 day 和 year ,函式的輸出為輸入日期後一天的日期。 例如,輸入為2006年3月 7日,則函式的輸出為 2006年3月8日 。要求輸入變數 month 、 day 和 year 均為整數值,並且滿足下列條件:   ①1≤month≤12   ②1≤day≤31   ③1920≤year≤2050     1)有效等價類為:     M1={月份:1≤月份≤12}     D1={日期:1≤日期≤31}     Y1={年:1812≤年≤2012}   2)若條件 ① ~ ③中任何一個條件失效,則 NextDate 函式都會產生一個輸出,指明相應的變數超出取值範圍,比如"month 的值不在 1-12 範圍當中 " 。顯然還存在著大量的 year 、 month 、 day 的無效組合, NextDate 函式將這些組合作統一的輸出: " 無效輸入日期 " 。其無效等價類為:     M2={月份:月份<1}     M3={月份:月份>12}     D2={日期:日期<1}     D3={日期:日期>31}     Y2={年:年<1812}     Y3={年:年>2012}   弱一般等價類測試用例   月份    日期       年               預期輸出    6       15        1912           1912年6月16日   強一般等價類測試用例同弱一般等價類測試用例   注:弱–有單缺陷假設;健壯–考慮了無效值       (一)弱健壯等價類測試   用例ID   月份  日期    年          預期輸出   WR1      6      15    1912      1912年6月16日   WR2     -1     15    1912      月份不在1~12中   WR3     13     15    1912      月份不在1~12中   WR4      6      -1    1912      日期不在1~31中   WR5      6      32    1912      日期不在1~31中   WR6      6      15    1811      年份不在1812~2012中   WR7      6      15    2013      年份不在1812~2012中   (二)強健壯等價類測試   用例ID   月份    日期      年          預期輸出   SR1       -1      15       1912      月份不在1~12中   SR2        6      -1        1912      日期不在1~31中   SR3        6      15       1811      年份不在1812~2012中   SR4       -1      -1       1912      兩個無效一個有效   SR5        6      -1        1811      兩個無效一個有效   SR6       -1      15       1811      兩個無效一個有效   SR7       -1      -1       1811      三個無效    4.佣金問題等價類測試用例,它是根據佣金函式的輸出值域定義等價類,來改進測試用例集合。 輸出銷售額≤1000元     佣金10% 1000<銷售額≤1800     佣金=100+(銷售額-1000)15% 銷售額>1800              佣金=220+(銷售額-1800)20% 測試用例         槍機(45)    槍托(30)      槍管(25)          銷售額     佣金     1               5             5                5                  500        50     2              15           15              15                 1500       175     3              25           25              25                 2500       360 根據輸出域選擇輸入值,使落在輸出域等價類內,可以結合弱健壯測試用例結合。 邊界值分析方法: 一.方法簡介 1.定義:邊界值分析法就是對輸入或輸出的邊界值進行測試的一種黑盒測試方法。通常邊界值分析法是作為對等價類劃分法的補充,這種情況下,其測試用例來自等價類的邊界。  2.與等價劃分的區別   1)邊界值分析不是從某等價類中隨便挑一個作為代表,而是使這個等價類的每個邊界都要作為測試條件。   2)邊界值分析不僅考慮輸入條件,還要考慮輸出空間產生的測試情況。 3.邊界值分析方法的考慮:   長期的測試工作經驗告訴我們,大量的錯誤是發生在輸入或輸出範圍的邊界上,而不是發生在輸入輸出範圍的內部。因此針對各種邊界情況設計測試用例,可以查出更多的錯誤。   使用邊界值分析方法設計測試用例,首先應確定邊界情況。通常輸入和輸出等價類的邊界,就是應著重測試的邊界情況。應當選取正好等於,剛剛大於或剛剛小於邊界的值作為測試資料,而不是選取等價類中的典型值或任意值作為測試資料。 4.常見的邊界值   1)對16-bit 的整數而言 32767 和 -32768 是邊界   2)螢幕上游標在最左上、最右下位置   3)報表的第一行和最後一行   4)陣列元素的第一個和最後一個   5)迴圈的第 0 次、第 1 次和倒數第 2 次、最後一次 5.邊界值分析   1)邊界值分析使用與等價類劃分法相同的劃分,只是邊界值分析假定錯誤更多地存在於劃分的邊界上,因此在等價類的邊界上以及兩側的情況設計測試用例。     例:測試計算平方根的函式         --輸入:實數         --輸出:實數         --規格說明:當輸入一個0或比0大的數的時候,返回其正平方根;當輸入一個小於0的數時,顯示錯誤資訊"平方根非法-輸入值小於0"並返回0;庫函式Print-Line可以用來輸出錯誤資訊。            2)等價類劃分:     I.可以考慮作出如下劃分:       a、輸入 (i)<0 和 (ii)>=0       b、輸出 (a)>=0 和 (b) Error     II.測試用例有兩個:       a、輸入4,輸出2。對應於 (ii) 和 (a) 。       b、輸入-10,輸出0和錯誤提示。對應於 (i) 和 (b) 。   3)邊界值分析:     劃分(ii)的邊界為0和最大正實數;劃分(i)的邊界為最小負實數和0。由此得到以下測試用例:     a、輸入 {最小負實數}     b、輸入 {絕對值很小的負數}     c、輸入 0     d、輸入 {絕對值很小的正數}     e、輸入 {最大正實數}        4)通常情況下,軟體測試所包含的邊界檢驗有幾種型別:數字、字元、位置、重量、大小、速度、方位、尺寸、空間等。   5)相應地,以上型別的邊界值應該在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、  最短/最長、 空/滿等情況下。   6)利用邊界值作為測試資料 項 邊界值 測試用例的設計思路 字元 起始-1個字元/結束+1個字元 假設一個文字輸入區域允許輸入1個到255個字元,輸入1個和255個字元作為有效等價類;輸入0個和256個字元作為無效等價類,這幾個數值都屬於邊界條件值。 數值 最小值-1/最大值+1 假設某軟體的資料輸入域要求輸入5位的資料值,可以使用10000作為最小值、99999作為最大值;然後使用剛好小於5位和大於5位的 數值來作為邊界條件。 空間 小於空餘空間一點/大於滿空間一點 例如在用U盤儲存資料時,使用比剩餘磁碟空間大一點(幾KB)的檔案作為邊界條件。 7)內部邊界值分析:     在多數情況下,邊界值條件是基於應用程式的功能設計而需要考慮的因素,可以從軟體的規格說明或常識中得到,也是終端使用者可以很容易發現問題的。然而,在測試用例設計過程中,某些邊界值條件是不需要呈現給使用者的,或者說使用者是很難注意到的,但同時確實屬於檢驗範疇內的邊界條件,稱為內部邊界值條件或子邊界值條件。     內部邊界值條件主要有下面幾種:     a)數值的邊界值檢驗:計算機是基於二進位制進行工作的,因此,軟體的任何數值運算都有一定的範圍限制。 項 範圍或值 位(bit) 0或者1 位元組(byte) 0——225 字(word) 0~65535(單字)或 0~4294967295(雙字) 千(K) 1024 兆(M) 1048576 吉(G) 1073741824 b)字元的邊界值檢驗:在計算機軟體中,字元也是很重要的表示元素,其中ASCII和Unicode是常見的編碼方式。下表中列出了一些常用字元對應的ASCII碼值。 字元 ASCII碼值 字元 ASCII碼值 空 (null) 0 A 65 空格 (space) 32 a 97 斜槓 ( / ) 47 Z 90 0 48 z 122 冒號 ( : ) 58 單引號 ( ‘ ) 96 @ 64     c)其它邊界值檢驗      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)分析規格說明,找出其它可能的邊界條件。 二.實戰演習 1.現有一個學生標準化考試批閱試卷,產生成績報告的程式。其規格說明如下:程式的輸入檔案由一些有80個字元的記錄組成,如右圖所示,所有記錄分為3組:   ①標題:這一組只有一個記錄,其內容為輸出成績報告的名字。   ②試卷各題標準答案記錄:每個記錄均在第80個字元處標以數字"2"。該組的第一個記錄的第1至第3個字元為題目編號(取值為1一999)。第10至第59個字元給出第1至第50題的答案(每個合法字元表示一個答案)。該組的第2,第3……個記錄相應為第51至第100,第101至第150,…題的答案。   ③每個學生的答卷描述:該組中每個記錄的第80個字元均為數字"3"。每個學生的答卷在若干個記錄中給出。如甲的首記錄第1至第9字元給出學生姓名及學號,第10至第59字元列出的是甲所做的第1至第50題的答案。若試題數超過50,則第2,第3……紀錄分別給出他的第51至第100,第101至第150……題的解答。然後是學生乙的答卷記錄。   ④學生人數不超過200,試題數不超過999。    ⑤程式的輸出有4個報告:     a)按學號排列的成績單,列出每個學生的成績、名次。     b)按學生成績排序的成績單。     c)平均分數及標準偏差的報告。     d)試題分析報告。按試題號排序,列出各題學生答對的百分比。    解答:分別考慮輸入條件和輸出條件,以及邊界條件。給出下表所示的輸入條件及相應的測試用例。       輸出條件及相應的測試用例表。       2.三角形問題的邊界值分析測試用例 在三角形問題描述中,除了要求邊長是整數外,沒有給出其它的限制條件。在此,我們將三角形每邊邊長的取範圍值設值為[1, 100] 。   3.NextDate函式的邊界值分析測試用例 在NextDate函式中,隱含規定了變數mouth和變數day的取值範圍為1≤mouth≤12和1≤day≤31,並設定變數year的取值範圍為1912≤year≤2050 。       錯誤推測方法 一.    方法簡介 1.         定義:基於經驗和直覺推測程式中所有可能存在的各種錯誤, 從而有針對性的設計測試用例的方法。 2.         錯誤推測方法的基本思想: 列舉出程式中所有可能有的錯誤和容易發生錯誤的特殊情況,根據他們選擇測試用例。 1)        例如, 輸入資料和輸出資料為0的情況;輸入表格為空格或輸入表格只有一行。 這些都是容易發生錯誤的情況。可選擇這些情況下的例子作為測試用例。 2)        例如,前面例子中成績報告的程式,採用錯誤推測法還可補充設計一些測試用例: I.          程式是否把空格作為回答 II.       在回答記錄中混有標準答案記錄 III.     除了標題記錄外,還有一些的記錄最後一個字元即不是2也不是3 IV.     有兩個學生的學號相同 V.        試題數是負數。 3)    再如,測試一個對線性表(比如陣列)進行排序的程式,可推測列出以下幾項需要特別測試的情況: I.          輸入的線性表為空表; II.       表中只含有一個元素; III.     輸入表中所有元素已排好序; IV.     輸入表已按逆序排好; V.        輸入表中部分或全部元素相同。 二.    實戰演習     暫無     因果圖方法 一.    方法簡介 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)把判定表的每一列拿出來作為依據,設計測試用例。 二. 實戰演習 1. 某軟體規格說明書包含這樣的要求:第一列字元必須是A或B,第二列字元必須是一個數字,在此情況下進行檔案的修改,但如果第一列字元不正確,則給出資訊L;如果第二列字元不是數字,則給出資訊M。 解答: 1) 根據題意,原因和結果如下:        原因:           1——第一列字元是A;           2——第一列字元是B;           3——第二列字元是一數字。        結果:           21——修改檔案;           22 ——給出資訊L;           23——給出資訊M。 2) 其對應的因果圖如下: 11為中間節點;考慮到原因1和原因2不可能同時為1,因此在因果圖上施加E約束。   3)根據因果圖建立判定表。          表中8種情況的左面兩列情況中,原因①和原因②同時為1,這是不可能出現的,故應排除這兩種情況。表的最下一欄給出了6種情況的測試用例,這是我們所需要的資料。 2.有一個處理單價為5角錢的飲料的自動售貨機軟體測試用例的設計。其規格說明如下:若投入5角錢或1元錢的硬幣,押下〖橙汁〗或〖啤酒〗的按鈕,則相應的飲料就送出來。若售貨機沒有零錢找,則一個顯示〖零錢找完〗的紅燈亮,這時在投入1元硬幣並押下按鈕後,飲料不送出來而且1元硬幣也退出來;若有零錢找,則顯示〖零錢找完〗的紅燈滅,在送出飲料的同時退還5角硬幣。 1) 分析這一段說明,列出原因和結果 原因: 1.售貨機有零錢找 2.投入1元硬幣 3.投入5角硬幣 4.押下橙汁按鈕 5.押下啤酒按鈕 結果: 21.售貨機〖零錢找完〗燈亮    22.退還1元硬幣 23.退還5角硬幣              24.送出橙汁飲料 25.送出啤酒飲料 2)畫出因果圖,如圖所示。所有原因結點列在左邊,所有結果結點列在右邊。建立中間結點,表示處理的中間狀態。中間結點: 11. 投入1元硬幣且押下飲料按鈕                 12. 押下〖橙汁〗或〖啤酒〗的按鈕                 13. 應當找5角零錢並且售貨機有零錢找                 14. 錢已付清   3)轉換成判定表:   4) 在判定表中,陰影部分表示因違反約束條件的不可能出現的情況,刪去。第16列與第32列因什麼動作也沒做,也刪去。最後可根據剩下的16列作為確定測試用例的依據。   判定表驅動分析方法 一.    方法簡介 1.定義:判定表是分析和表達多邏輯條件下執行不同操作的情況的工具。 2.判定表的優點 能夠將複雜的問題按照各種可能的情況全部列舉出來,簡明並避免遺漏。因此,利用判定表能夠設計出完整的測試用例集合。 在一些資料處理問題當中,某些操作的實施依賴於多個邏輯條件的組合,即:針對不同邏輯條件的組合值,分別執行不同的操作。判定表很適合於處理這類問題。 3.“閱讀指南”判定表   4.  判定表通常由四個部分組成如下圖所示。   1)條件樁(Condition Stub):列出了問題得所有條件。通常認為列出的條件的次序無關緊要。 2)動作樁(Action Stub):列出了問題規定可能採取的操作。這些操作的排列順序沒有約束。 3)條件項(Condition Entry):列出針對它左列條件的取值。在所有可能情況下的真假值。 4)動作項(Action Entry):列出在條件項的各種取值情況下應該採取的動作。 5.規則及規則合併 1)規則:任何一個條件組合的特定取值及其相應要執行的操作稱為規則。在判定表中貫穿條件項和動作項的一列就是一條規則。顯然,判定表中列出多少組條件取值,也就有多少條規則,既條件項和動作項有多少列。 2)化簡:就是規則合併有兩條或多條規則具有相同的動作,並且其條件項之間存在著極為相似的關係。 6.規則及規則合併舉例 1)如下圖左端,兩規則動作項一樣,條件項類似,在1、2條件項分別取Y、N時,無論條件3取何值,都執行同一操作。即要執行的動作與條件3無關。於是可合併。“-”表示與取值無關。   2)與上類似,下圖中,無關條件項“-”可包含其他條件項取值,具有相同動作的規則可合併。   3)化簡後的讀書指南判定表   1 2 3 4 問 題 你覺得疲倦嗎? - - Y N 你對內容感興趣嗎? Y Y N N 書中內容使你胡塗嗎? Y N - -   建 議 請回到本章開頭重讀 x       繼續讀下去   X     跳到下一章去讀       x 停止閱讀,請休息     x   7.判定表的建立步驟:(根據軟體規格說明) 1)確定規則的個數.假如有n個條件。每個條件有兩個取值(0,1),故有2n種規則。 2)列出所有的條件樁和動作樁。 3)填入條件項。 4)填入動作項。等到初始判定表。 5)簡化.合併相似規則(相同動作)。 二. 實戰演習 1.問題要求:”……對功率大於50馬力的機器、維修記錄不全或已執行10年以上的機器,應給予優先的維修處理……” 。這裡假定,“維修記錄不全”和“優先維修處理”均已在別處有更嚴格的定義 。請建立判定表。 解答: ①確定規則的個數:這裡有3個條件,每個條件有兩個取值,故應有2

22=8種規則。 ②列出所有的條件茬和動作樁:   ③填入條件項。可從最後1行條件項開始,逐行向上填滿。如第三行是: Y N Y N Y N Y N,第二行是: Y Y N N Y Y N N等等。  ④填入動作樁和動作頂。這樣便得到形如圖的初始判定表。   1 2 3 4 5 6 7 8 條 件 功率大於50馬力嗎? Y Y Y Y N N N N 維修記錄不全嗎? Y Y N N Y Y N N 執行超過10年嗎? Y N Y N Y N Y N 動 作 進行優先處理 x x X   X   X   作其他處理       X   x   x 初始判定表 ⑤化簡。合併相似規則後得到圖。   1 2 3 4 5 條 件 功率大於50馬力嗎? Y Y Y N N 維修記錄不全嗎? Y N N - - 執行超過10年嗎? - Y N Y N 動 作 進行優先處理 x x   X   作其他處理     x   x 2.NextData函式的精簡決策表 M1={月份, 每月有30天} M2={月份, 每月有31天} M3={月份, 2月}                 有29=512條規則 D1={日期,1~28}                 12月末31日和其它31 D2={日期,29}                    日月份的31日處理不同 D3={日期,30}                    平年2月28日處理不同 D4={日期,31}                    於2月27日 Y1 ={年:年是閏年} Y2 ={年:年不是閏年} 改進為 M1={月份: 每月有30天} M2={月份: 每月有31天, 12月除外} M4={月份:12月} M3={月份: 2月} D1={日期:1<=日期<=27} D2={日期:28} D3={日期:29} D4={日期:30} D5={日期:31} Y1 ={年:年是閏年} Y2 ={年:年不是閏年} 輸入變數間存在大量邏輯關係的NextData決策表     3. 用決策表測試法測試以下程式:該程式有三個輸入變數month、day、year(month、day和year均為整數值,並且滿足:1≤month≤12和1≤day≤31),分別作為輸入日期的月份、日、年份,通過程式可以輸出該輸入日期在日曆上隔一天的日期。  例如,輸入為2004年11月29日,則該程式的輸出為2000年12月1日。 1)分析各種輸入情況,列出為輸入變數month、day、year劃分的有效等價類。 2)分析程式規格說明,結合以上等價類劃分的情況給出問題規定的可能採取的操作(即列出所有的動作樁)。 3)根據(1)和(2),畫出簡化後的決策表。 案例分析如下: 1)       month變數的有效等價類:  M1: {month=4,6,9,11}             M2: {month=1,3,5,7,8,10} M3: {month=12}                  M4: {month=2} 2)day變數的有效等價類:     D1:{1≤day≤26}         D2: {day=27}         D3: {day=28}                    D4: {day=29}                    D5: {day=30}                D6: {day=31} 3)year變數的有效等價類: Y1: {year是閏年}                Y2:  {year不是閏年} 4)考慮各種有效的輸入情況,程式中可能採取的操作有以下六種: a1: day+2                       a2: day=2                    a3: day=1  a4: month+1                     a5: month=1                  a6: year+1  4. 判定表在功能測試中的應用 1)一些軟體的功能需求可用判定表表達得非常清楚,在檢驗程式的功能時判定表也就成為一個不錯的工具。如果一個軟體的規格說明指出: I. 當條件1和條件2滿足,並且條件3和條件4不滿足,或者當條件1、3和條件4滿足時,要執行操作1。 II. 在任一個條件都不滿足時,要執行操作2。 III. 在條件1不滿足,而條件4被滿足時,要執行操作3。 根據規格說明得到如下判定表:   這裡,判定表只給出了16種規則中的8種。事實上,除這8條以外的一些規則是指當不能滿足指定的條件,執行3種操作時,要執行1個默許的操作。在沒必要時,判定表通常可略去這些規則。但如果用判定表來設計測試用例,就必須列出這些默許規則(如下表)。   規則5 規則6 規則7 規則8 條件1 - N Y Y 條件2 - Y Y N 條件3 Y N N N 條件4 N N Y - 默許操作 x x x x 默許的規則 2)判定表的優點和缺點 I.  優點:它能把複雜的問題按各種可能的情況一一列舉出來,簡明而易於理解,也可避免遺漏。 II. 缺點:不能表達重複執行的動作,例如迴圈結構。 3)B. Beizer 指出了適合使用判定表設計測試用例的條件: ①規格說明以判定表形式給出,或很容易轉換成判定表。 ②條件的排列順序不會也不影響執行哪些操作。 ③規則的排列順序不會也不影響執行哪些操作。 ④每當某一規則的條件已經滿足,並確定要執行的操作後,不必檢驗別的規則。 ⑤如果某一規則得到滿足要執行多個操作,這些操作的執行順序無關緊要。 B. Beizer提出這5個必要條件的目的是為了使操作的執行完全依賴於條件的組合。其實對於某些不滿足這幾條的判定表,同樣可以藉以設計測試用例,只不過尚需增加其它的測試用例罷了。     正交實驗設計方法 一.方法簡介 利用因果圖來設計測試用例時, 作為輸入條件的原因與輸出結果之間的因果關係,有時很難從軟體需求規格說明中得到。往往因果關係非常龐大,以至於據此因果圖而得到的測試用例數目多的驚人,給軟體測試帶來沉重的負擔,為了有效地,合理地減少測試的工時與費用,可利用正交實驗設計方法進行測試用例的設計。 正交實驗設計方法:依據Galois理論,從大量的(實驗)資料(測試例)中挑選適量的,有代表性的點(例),從而合理地安排實驗(測試)的一種科學實驗設計方法.類似的方法有:聚類分析方法,因子方法方法等. 利用正交實驗設計測試用例的步驟: 1.提取功能說明,構造因子–狀態表 把影響實驗指標的條件稱為因子.而影響實驗因子的條件叫因子的狀態.利用正交實驗設計方法來設計測試用例時,首先要根據被測試軟體的規格說明書找出影響其功能實現的操作物件和外部因素,把他們當作因子,而把各個因子的取值當作狀態.對軟體需求規格說明中的功能要求進行劃分,把整體的概要性的功能要求進行層層分解與展開,分解成具體的有相對獨立性的基本的功能要求.這樣就可以把被測試軟體中所有的因子都確定下來,併為確定個因子的權值提供參考的依據.確定因子與狀態是設計測試用例的關鍵.因此要求儘可能全面的正確的確定取值,以確保測試用例的設計作到完整與有效。 2.加權篩選,生成因素分析表 對因子與狀態的選擇可按其重要程度分別加權.可根據各個因子及狀態的作用大小,出現頻率的大小以及測試的需要,確定權值的大小。 3.利用正交表構造測試資料集 正交表的推導依據Galois理論(這裡省略,需要時可查數理統計方面的教材)。 利用正交實驗設計方法設計測試用例,比使用等價類劃分,邊界值分析,因果圖等方法有以下優點:節省測試工作工時;可控制生成的測試用例數量;測試用例具有一定的覆蓋率。 二. 實戰演習     暫無         功能圖分析方法 一.方法簡介 一個程式的功能說明通常由動態說明和靜態說明組成.動態說明描述了輸入資料的次序或轉移的次序.靜態說明描述了輸入條件與輸出條件之間的對應關係.對於較複雜的程式,由於存在大量的組合情況,因此,僅用靜態說明組成的規格說明對於測試來說往往是不夠的.必須用動態說明來補充功能說明.功能圖方法是用功能圖FD形式化地表示程式的功能說明,並機械地生成功能圖的測試用例. 功能圖模型由狀態遷移圖和邏輯功能模型構成.狀態遷移圖用於表示輸入資料序列以及相應的輸出資料.在狀態遷移圖中,由輸入資料和當前狀態決定輸出資料和後續狀態.邏輯功能模型用於表示在狀態中輸入條件和輸出條件之間的對應關係.邏輯功能模型只適合於描述靜態說明,輸出資料僅由輸入資料決定.測試用例則是由測試中經過的一系列狀態和在每個狀態中必須依靠輸入/輸出資料滿足的一對條件組成.功能圖方法其實是是一種黑盒白盒混合用例設計方法。 (功能圖方法中,要用到邏輯覆蓋和路徑測試的概念和方法,其屬白盒測試方法中 的內容.邏輯覆蓋是以程式內部的邏輯結構為基礎的測試用例設計方法.該方法要求測試人員對程式的邏輯結構有清楚的瞭解.由於覆蓋測試的目標不同,邏輯覆蓋可分為:語句覆蓋,判定覆蓋,判定-條件覆蓋,條件組合覆蓋及路徑覆蓋.下面我們指的邏輯覆蓋和路徑是功能或系統水平上的,以區別與白盒測試中的程式內部的.) 1.功能圖 功能圖由狀態遷移圖和布林函式組成.狀態遷移圖用狀態和遷移來描述.一個狀態指出資料輸入的位置(或時間),而遷移則指明狀態的改變.同時要依靠判定表或因果圖表示的邏輯功能.例,一個簡化的自動出納機ATM的功能圖。 2.測試用例生成方法 從功能圖生成測試用例,得到的測試用例數是可接受的. 問題的關鍵的是如何從狀態遷移圖中選取測試用例. 若用節點代替狀態,用弧線代替遷移,則狀態遷移圖就可轉化成一個程式的控制流程圖形式.問題就轉化為程式的路徑測試問題(如白盒測試)問題了. 3.測試用例生成規則 為了把狀態遷移(測試路徑)的測試用例與邏輯模型(區域性測試用例)的測試用例組合起來,從功能圖生成實用的測試用例,須定義下面的規則.在一個結構化的狀態遷移(SST)中,定義三種形式的迴圈:順序,選擇和重複.但分辨一個狀態遷移中的所有迴圈是有困難的.(其表示圖形省略)。 4.從功能圖生成測試用例的過程 1)生成區域性測試用例:在每個狀態中,從因果圖生成區域性測試用例.區域性測試用例由原因值(輸入資料)組合與對應的結果值(輸出資料或狀態)構成。 2)測試路徑生成:利用上面的規則(三種)生成從初始狀態到最後狀態的測試路徑。 3)測試用例合成:合成測試路徑與功能圖中每個狀態中的區域性測試用例.結果是初始狀態到最後狀態的一個狀態序列,以及每個狀態中輸入資料與對應輸出資料的組合。 5.測試用例的合成演算法:採用條件構造樹. 二.實戰演習       暫無       場景設計方發 一.方法簡介 現在的軟體幾乎都是用事件觸發來控制流程的,事件觸發時的情景便形成了場景,而同一事件不同的觸發順序和處理結果就形成事件流。這種在軟體設計方面的思想也可以引入到軟體測試中,可以比較生動地描繪出事件觸發時的情景,有利於測試設計者設計測試用例,同時使測試用例更容易理解和執行。 基本流和備選流:如下圖所示,圖中經過用例的每條路徑都用基本流和備選流來表示,直黑線表示基本流,是經過用例的最簡單的路徑。備選流用不同的色彩表示,一個備選流可能從基本流開始,在某個特定條件下執行,然後重新加入基本流中(如備選流1和3);也可能起源於另一個備選流(如備選流2),或者終止用例而不再重新加入到某個流(如備選流2和4)。   二.實戰演習 1. 例子描述 下圖所示是ATM例子的流程示意圖。       2.場景設計:下表所示是生成的場景。 表3-8 場景設計 場景1——成功提款 基本流   場景2——ATM內沒有現金 基本流 備選流2 場景3——ATM內現金不足 基本流 備選流3 場景4——PIN有誤(還有輸入機會) 基本流 備選流4 場景5——PIN有誤(不再有輸入機會) 基本流 備選流4 場景6——賬戶不存在/賬戶型別有誤 基本流 備選流5 場景7——賬戶餘額不足 基本流 備選流6 注:為方便起見,備選流3和6(場景3和7)內的迴圈以及迴圈組合未納入上表。 3.用例設計 對於這7個場景中的每一個場景都需要確定測試用例。可以採用矩陣或決策表來確定和管理測試用例。下面顯示了一種通用格式,其中各行代表各個測試用例,而各列則代表測試用例的資訊。本示例中,對於每個測試用例,存在一個測試用例ID、條件(或說明)、測試用例中涉及的所有資料元素(作為輸入或已經存在於資料庫中)以及預期結果。 表3-9 測試用例表     TC(測試用例)ID號 場景/條件 PIN 賬號 輸入(或選擇)的金額 賬面 金額 ATM內的金額 預期結果 CW1 場景1:成功提款 V V V V V 成功提款 CW2 場景2:ATM內沒有現金 V V V V I 提款選項不可用,用例結束 CW3 場景3:ATM內現金不足 V V V V I 警告訊息,返回基本流步驟6,輸入金額 CW4 場景4:PIN有誤(還有不止一次輸入機會) I V n/a V V 警告訊息,返回基本流步驟 4,輸入 PIN CW5 場景4:PIN有誤(還有一次輸入機會) I   V n/a V V 警告訊息,返回基本流步驟 4,輸入 PIN CW6 場景4:PIN有誤(不再有輸入機會) I V n/a V V 警告訊息,卡予保留,用例結束   4.資料設計 一旦確定了所有的測試用例,則應對這些用例進行復審和驗證以確保其準確且適度,並取消多餘或等效的測試用例。 測試用例一經認可,就可以確定實際資料值(在測試用例實施矩陣中)並且設定測試資料,如表3-10所示。 表3-10     測試用例表 TC(測試用例)ID號 場景/條件 PIN 賬號 輸入(或選擇)的金額 (元) 賬面 金額(元) ATM內的金額(元) 預期結果 CW1 場景1:成功提款 4987 809-498 50.00 500.00 2 000 成功提款。賬戶餘額被更新為450.00 CW2 場景2:ATM內沒有現金 4987 809-498 100.00 500.00 0.00 提款選項不可用,用例結束 CW3 場景3:ATM內現金不足 4987 809-498 100.00 500.00 70.00 警告訊息,返回基本流步驟6,輸入金額 CW4 場景4:PIN有誤(還有不止一次輸入機會) 4978 809-498 n/a 500.00 2 000 警告訊息,返回基本流步驟4,輸入PIN CW5 場景4:PIN有誤(還有一次輸入機會) 4978 809-498 n/a 500.00 2 000 警告訊息,返回基本流步驟4,輸入PIN CW6 場景4:PIN有誤(不再有輸入機會) 4978 809-498 n/a 500.00 2 000 警告訊息,卡予保留,用例結束   測試用例設計綜合策略 1. Myers提出了使用各種測試方法的綜合策略: 1)在任何情況下都必須使用邊界值分析方法,經驗表明用這種方法設計出測試用例發現程式錯誤的能力最強。 【文章來源:文斯測試技術研究中心 
http://blog.csdn.net/vincetest】
2)必要時用等價類劃分方法補充一些測試用例。 3)用錯誤推測法再追加一些測試用例。 4)對照程式邏輯,檢查已設計出的測試用例的邏輯覆蓋程度,如果沒有達到要求的覆蓋標準,應當再補充足夠的測試用例。 5)如果程式的功能說明中含有輸入條件的組合情況,則一開始就可選用因果圖法。 2.測試用例的設計步驟 【文章來源:文斯測試技術研究中心 http://blog.csdn.net/vincetest】 1)構造根據設計規格得出的基本功能測試用例; 2)邊界值測試用例; 3)狀態轉換測試用例; 4)錯誤猜測測試用例; 5)異常測試用例; 【文章來源:文斯測試技術研究中心 
http://blog.csdn.net/vincetest】
6)效能測試用例; 7)壓力測試用例。 3.優化測試用例的方法 1)利用設計測試用例的8種方法不斷的對測試用例進行分解與合併; 2)採用遺傳演算法理論進化測試用例; 3)在測試時利用發散思維構造測試用例。 做個快樂的自己。