黑盒測試方法
黑盒測試使用范圍比較廣泛,
優點主要是站在用戶的角度進行測試,測試人員不需要了解程序實現的細節,相對白盒測試而言,黑盒測試的測試數據很容易生成,但是要測試到每一個輸入流幾乎是不可能的。
缺點就是不能針對特定的程序段,這樣很容易造成程序路徑的漏測,當程序非常復雜時其隱藏的問題很難發現。在實際工作中,由於黑盒測試的測試人員編程能力相對薄弱,所以大部分測試人員現在研究的都是介於白盒和黑盒之間,就是灰盒測試,也是常說的接口測試。
一、等價類划分 --掌握
1.1、概念
等價類划分,指的是一種典型的、重要的黑盒測試方法。其就是解決如何選擇適當的數據子集來代表整個數據集的問題,通過降低測試的數目去實現“合理的”覆蓋,以此發現更多的軟件缺陷。
等價類划分法是把程序的輸入域划分成若干部分(子集),然后從每個部分中選取少數代表性數據作為測試用例。每一類的代表性數據在測試中的作用等價於這一類中的其他值。因此,可以把全部輸入數據合理划分為若干等價類,在每一個等價類中取一個數據作為測試的輸入條件,就可以用少量代表性的測試數據.取得較好的測試結果。
等價類划分可有兩種不同的情況:有效等價類和無效等價類
有效等價類:是指對於程序的規格說明來說是合理的,有意義的輸入數據構成的集合.利用有效等價類可檢驗程序是否實現了規格說明中所規定的功能和性能。
無效等價類:與有效等價類的定義恰巧相反,不合理的、無效的輸入數據構成的集合。
設計測試用例時,要同時考慮這兩種等價類.因為,軟件不僅要能接收合理的數據,也要能經受意外的考驗.這樣的測試才能確保軟件具有更高的可靠性。
按照[輸入條件][有效等價類][無效等價類] 建立等價類表,列出所有划分出的等價類,為每一個等價類規定一個唯一的編號。
設計一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋地有效等價類,重復這一步.直到所有的有效等價類都被覆蓋為止。
設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重復這一步.直到所有的無效等價類都被覆蓋為止。
1.2、划分等價類的六大原則:
- 在輸入條件規定了取值范圍或值的個數的情況下,則可以確立一個有效等價類和兩個無效等價類。
例:手機號碼 - 在輸入條件規定了輸入值的集合或者規定了“必須如何”的條件的情況下,可確立一個有效等價類和一個無效等價類。
- 在輸入條件是一個布爾量的情況下,可確定一個有效等價類和一個無效等價類. 布爾量是一個二值枚舉類型, 一個布爾量具有兩種狀態: true 和 false 。
- 在規定了輸入數據的一組值(假定n個),並且程序要對每一個輸入值分別處理的情況下,可確立n個有效等價類和一個無效等價類。
例:輸入條件說明輸入字符為:中文、英文、數字三種之一,則分別取這三種這三個值作為三個有效等價類,另外把三種字符之外的任何字符作為無效等價類(特殊字符等,html標簽等)。 - 在規定了輸入數據必須遵守的規則的情況下,可確立一個有效等價類(符合規則)和若干個無效等價類(從不同角度違反規則)。
例:身份證號碼 - 在確知已划分的等價類中各元素在程序處理中的方式不同的情況下,則應再將該等價類進一步的划分為更小的等價類。
1.3、實例
假設要輸入一個日期,日期限定在1990年1月~2049年12月,並規定日期由6位數字字符組成,前4位表示年,后2位表示月。現用等價類划分法設計測試用例,來測試程序的"日期檢查功能"。
1)划分等價類並編號,下表等價類划分的結果
2)設計測試用例,以便覆蓋所有的有效等價類在表中列出了3個有效等價類,編號分別為①、⑤、⑧,設計的測試用例如下:
3)為每一個無效等價類設計一個測試用例,設計結果如下:
練習:
- 對手機號用 等價類划分設計一下用例
- 保險投保年齡 只允許18-60歲之內人投保
二、邊界值 --掌握
2.1 概念
邊界值分析法就是對輸入或輸出的邊界值進行測試的一種黑盒測試方法。通常邊界值分析法是作為對等價類划分法的補充,這種情況下,其測試用例來自等價類的邊界。
根據大量的測試統計數據,很多錯誤是發生在輸入或輸出范圍的邊界上,而不是發生在輸入/輸出范圍的中間區域。因此針對各種邊界情況設計測試用例,可以查出更多的錯誤。
使用邊界值分析方法設計測試用例,首先應確定邊界情況。通常輸入和輸出等價類的邊界,就是應着重測試的邊界情況。應當選取正好等於,剛剛大於或剛剛小於邊界的值作為測試數據,而不是選取等價類中的典型值或任意值作為測試數據。
2.2、邊界的確認
邊界值分析使用與等價類划分法相同的划分,只是邊界值分析假定錯誤更多地存在於划分的邊界上,因此在等價類的邊界上以及兩側的情況設計測試用例。
邊界值分析法與等價類分析法的區別:
1、邊界值分析不是從某等價類中隨便挑一個作為代表,而是使這個等價類的每個邊界都要作為測試條件。
2、邊界值分析不僅考慮輸入條件,還要考慮輸出空間產生的測試情況。輸入條件,還要考慮輸出空間產生的測試情況。
3、如果規定了輸入域的取值范圍,則選取剛好在范圍邊界的點,以及剛好超過邊界的點,作為測試的輸入數據。
4、如果規定了輸入值的個數,則用最大個數,最小個數,比最小個數少1,比最大個數多1的數作為測試數據。
5、如果規定了輸入是一個有序的集合,則選取集合的第一個元素和最后一個元素作為測試數據。
通常情況下,軟件測試所包含的邊界檢驗有幾種類型:數字、字符、位置、重量、大小、速度、方位、尺寸、空間等。相應地,以上類型的邊界值應該在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、 最短/最長、 空/滿等情況下。利用邊界值作為測試數據
2.3、案例分析
如某保險公司發布一個產品,規定投保年齡 只允許18-60歲之內的人投保
得出等價類
輸入值 | 有效等價類 | 無效等價類 |
---|---|---|
整數 | 18<= i <=60 | i<18 or i >60 |
小數 | 全部 | |
字符串 | 全部 |
由等價類抽取 設計邊界值
邊界 | 有效邊界 | 無效邊界 |
---|---|---|
整數18 | 18、19 | 17 |
整數60 | 59、60 | 61 |
小數全部 | 0.5、18.5 | |
字符串全部 | 啦啦 |
練習:
1.某登錄界面邏輯 用戶名輸入,規定只允許8-15個字母+數字任意組合
2.學生信息系統中有一個“考試成績”的輸入項,成績的取值范圍是0~100之間的整數,考試成績及格的分數線是60
三、判定表法 --熟悉
3.1、概念
判定表是把作為條件的所有輸入的各種組合值以及對應輸出值都羅列出來而形成的表格。它能夠將復雜的問題按照各種可能的情況全部列舉出來,簡明並避免遺漏。
因此,利用判定表能夠設計出完整的測試用例集合。在一些數據處理問題當中,某些操作的實施依賴於多個邏輯條件的組合,即:針對不同邏輯條件的組合值,分別執行不同的操作。判定表很適合於處理這類問題。
判定表分析法主要是分析和表達多種輸入條件下系統執行不同動作的技術。在程序設計發展的初期,判定表就已被當作編寫程序的輔助工具了,它可以把復雜的邏輯關系和多種條件組合的情況表達得很明確。判定表由四個部分組成
簡而言之:是根據判定條件列出所有可能的組合,當有n個條件時,就需要列出相應的2的n次方個測試用例。
3.2、案列解析一:
某登錄邏輯只有當用戶名和密碼輸入正確時 才登錄成功
-
先明確理解需求
-
畫出判定表
-
列出條件樁和動作樁
-
填寫條件項,對條件進行全組合
-
根據條件項的組合確定動作項 簡化、合並相似規則(有相同的動作
分析組合
username | password | 結果 |
---|---|---|
正確 | 錯誤 | 失敗 |
正確 | 正確 | 成功 |
錯誤 | 錯誤 | 失敗 |
錯誤 | 正確 | 成功 |
條件樁:列出問題中的所有條件。列出條件的次序無關緊要。
如案列里面的有兩個條件,條件一:用戶名 ,條件二:密碼
動作樁:列出問題中可能采取的操作。操作的排列順序沒有約束。
所有操作的輸出結果
條件項:列出條件對應的取值。所有可能情況下的真假值。
所有條件的組合
動作項:列出條件項的各種取值情況下應該采取的動作結果。
所有條件組合出現的結果
這樣我們每一條組合就是一條用例數據
練習:判斷一個某一年是不是閏年?其中閏年的判定條件為能被4整除但不能被100整除或者能被400整除。
四、場景法(流程分析法) --熟悉
4.1、概念
場景法又稱流程分析法,主要是針對測試場景類型。它是從白盒測試設計方法中的路徑覆蓋分析法演變過來的一種重要的方法。在白盒測試中,路徑就是指函數代碼的某個分支組合,路徑覆蓋法需要構造足夠的用例覆蓋函數的所有代碼路徑。在黑盒測試中,若將軟件系統的某個流程看成路徑的話,則可以針對該路徑使用路徑分析的方法設計測試用例。
在測試一個軟件的時候,在場景法中,測試流程是軟件功能按照正確的事件流實現的一條正確流程,那么我們把這個稱為該軟件的基本流;而凡是出現故障或缺陷的過程,就用備選流加以標注,這樣的話,備選流就可以是從基本流來的,或是由備選流中引出的。
在實際工作中,流程分析法是比較容易理解和執行的,它是主要通過流程對系統的功能點或業務流程進行描述,可以展示測試效果。流程分析法一般包含基本流和備選流,從一個流程開始,通過描述經過的路徑來遍歷所有的基本流和備選流。
- 基本流:是指程序的主流程,是實現業務流程最簡單的路徑。
- 備選流:是指實現業務流程時,因錯誤操作或者是異常操作,導致最終未達到目的流程。
流程1:基本流
流程2:基本流→備選流1
流程3:基本流→備選流1→備選流2
流程4:基本流→備選流3
流程5:基本流→備選流3→備選流1
流程6:基本流→備選流3→備選流1→備選流2
流程7:基本流→備選流4
流程8:基本流→備選流3→備選流4
直線表示基本流;其他曲線表示為備選流。由圖可以看到,一個備選流可以從基本流開始;也可以從備選流開始。備選流的終點,可以是一個流程的出口,也可以是回到基本流,還可以是匯入其他的備選流。
4.2、案例解析
在銀行ATM取款機的取款 流程進行測試。
分析得出流程
每一個流程 我們就可以轉換為一條測試用例
練習:
一個需要輸入用戶名和密碼的登陸並付款購物功能,其中如果密碼錯誤3次會鎖定用戶
五、因果圖法 --了解
5.1、概念
一種適合於描述多種條件的組合、相應產生多個動作的形式來進行測試用例的設計,以及輸入與輸出之間有依賴關系 因果圖(邏輯模型)
因果圖相輔 判定表 ,因為最后因果圖 還是要轉換成判斷表用例
優點:
1、能夠幫助我們按照一定步驟,高效的選擇測試用例,設計多個輸入條件組合用例。
2、因果圖分析還能為我們指出,軟件規格說明描述中存在的問題
缺點:
輸入條件與輸出結果的因果關系,有時難以從軟件需求規格說明書得到。
即時得到了這些因果關系,也會因為因果關系復雜導致因果圖非常龐大,測試用例數目及其龐大
其中
因果圖的 “因” —輸入條件
因果圖的 “果” —輸出結果
5.2、 因果圖幾種符合邏輯
因果符號有恆等、非、或、與四種表示方法,如圖所示,其中c1表示輸入的狀態,即原因、e1表示輸出的狀態,即結果。
c1和e1均可取值0或1(0表示某狀態不出現,1表示某狀態出現)
5.3、約束符號
約束是指輸入與輸入之間存在的某些依賴關系,稱為約束。約束符號有互斥、包含、唯一、要求、屏蔽五種表示方法,其中前面四種是針對輸入條件的約束,最后一種強制只針對輸出條件的約束。
如下圖:其中a、b、c分別代表條件。條件的取值0或1(0表示某狀態不出現,1表示某狀態出現)。
-
互斥:在所有輸入條件中,至多有一個可能發生。即a、b、c 最多只有一個為1,不能同時為1,但可以同時為0。
-
包含:在所有輸入條件中,至少有一個發生。即a、b、c最少有一個為1,不能同時為0,但可以同時為1。
-
唯一:在所有輸入條件中,有且只有一個發生。即a、b、c,只有一個為1,不能同時為1,也不能同時為0。
-
要求:在所有輸入條件中,只要有一個發生,則要求其他條件也發生。即a和b,a為1時,要求b也為1。
-
屏蔽:是針對結果的約束關系,當一個結果發生,強制另一個結果不發生
5.4、構造測試用例
-
① 分析需求中描述的原因和結果,給每個原因和結果賦予一個編號。
-
② 根據這些關系畫出因果圖
-
③ 因果圖上用一些記號表明約束條件或限制條件
-
④ 把因果圖轉換成判定表
-
⑤ 將判定表的每一列作為依據設計測試用例
5.5、案列解析
有一個單價為5毛的 飲料自動售貨機允許投入5角和1元的硬幣,用戶可通過“橙汁”和“啤酒”按鈕選擇飲料,售貨機中無零錢找時提示燈亮。默認零錢為5毛
當用戶投入5角硬幣並押下“橙汁”或“啤酒”按鈕后,售貨機送出相應的飲料。
當用戶投入1元硬幣並押下“橙汁”或“啤酒”按鈕后,如果售貨機有零錢找,則送出相應的飲料,並退還5角硬幣;如果售貨機沒有零錢找,則飲料不送出,並且退還1元硬幣。
分析規格說明,列出原因和結果
根據規格說明,反映原因的輸入條件有:投入1元硬幣,投入5角硬幣,押下“橙汁”按鈕,押下“啤酒”按鈕。反映結果的輸出條件有:退還1元硬幣,退還5角硬幣,送出“橙汁”飲料,送出“啤酒”飲料。由於“售貨機有零錢找”是在投入1元硬幣時判斷是否能找零錢的依據,所以也可把它看作是一個輸入條件,即原因。與之對應的結果是售貨機指示燈亮(或暗)。
分析如下:
輸入:
1——售貨機有零錢找
2——投入1元硬幣
3——投入5角硬幣
4——押下橙汁按鈕
5——押下啤酒按鈕
輸出:
21——售貨機〖零錢找完〗燈亮
22——退還1元硬幣
23——退還5角硬幣
24——送出橙汁飲料
25——送出啤酒飲料
得出以下 因果圖
其中中間結點的含義如下:
結點11表示投入1元硬幣且押下飲料按鈕。
結點12表示押下“橙汁”或“啤酒”按鈕。
結點13表示應找5角硬幣且售貨機有零錢找。
結點14表示錢已付清。
由於原因2和3不能同時發生,原因4和5也不能同時發生,所以需加約束條件E,如上圖。
在因果圖中加上約束條件、根據因果圖畫出判定表
陰影部分表示因違反約束條件,不可能出現情況,故刪去
第16 和第32列 因什么動作也沒做 也刪去
最后可根據剩下的16列作為確定測試用例
六、錯誤推測法 了解
錯誤推測方法是指基於對被測試軟件系統設計的理解、過往經驗以及個人直覺,推測出軟件可能存在的缺陷,從而有針對性地設計測試用例的方法。這個方法強調的是對被測試軟件 的需求理解以及設計實現的細節把握,當然還有個人的能力。
錯誤推測法和目前非常流行的“探索式測試方法”的基本思想和理念是不謀而合的,這類方法在目前的敏捷開發模式下的投入產出比很高,因此被廣泛應用。但是,這個方法的缺點也 顯而易見,那就是難以系統化,並且過度依賴個人能力。