(參考博客:http://www.cnblogs.com/tjuyyb/p/4356404.html)
在黑盒測試中一個常用的測試方法就是等價類划分。等價類划分就是解決如何選擇適當的數據子集來代表整個數據集的問題,通過降低測試的數目去實現“合理的”覆蓋,覆蓋了更多的可能數據,以發現更多的軟件缺陷。
常用的等價類划分原則:
- 按區間划分
- 按數值划分
- 按數值集合划分
- 按限制條件或規則划分
- 按處理方式划分。
有效等價類
有效等價類指對於程序規格說明來說,是合理的、有意義的輸入數據構成的集合。
無效等價類
無效等價類和有效等價類相反,無效等價類是指對於軟件規格說明而言,沒有意義的、不合理的輸入數據集合。
建立等價類表,設計測試用例:
1)在分析需求規格說明的基礎上划分等價類,列出等價類表,為每一個等價類規定一個唯一的編號。
2)將程序可能的輸入數據分成若干個子集,從每個子集中選取一個有代表性的數據作為測試用例。
3)設計新的測試用例,使其盡可能多地覆蓋未覆蓋的有效等價類,按照這一步驟重復進行,直到所有的有效等價類都被覆蓋為止。
4)設計新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,按照這一步驟重復進行,直到所有的無效等價類都被覆蓋為止。
等價類划分方法應用測試實例:
按照限制條件或者規則划分等價類舉例:
- 文本框的非法輸入測試: 允許1到6個英文字符或數字,按OK結束。
| 有效等價類 | 無效等價類 | |
| 長度 | 1-6 | 0,7, … |
| 字符 | A-Z,a-z,0-9 | 英文/數字以外字符,控制字符,標點符號 |
測試用例:
| 編號 | 輸入 | 預期輸出 | 實際輸出 |
| Test1 | 請輸入您的名字 | 請輸入您的名字 | |
| Test2 | 09azAZ5 | 輸入字符長度應小於6 | 輸入字符長度應小於6 |
| Test3 | 0aA,./ | 請輸入合法字符 | 請輸入合法字符 |
| Test4 | 09AZaz | OK! | OK! |
注:Test1的輸入為空。
測試結果:


程序源代碼:
1 import javafx.application.Application; 2 import javafx.event.EventHandler; 3 import javafx.geometry.Pos; 4 import javafx.scene.Scene; 5 import javafx.scene.control.Button; 6 import javafx.scene.control.Label; 7 import javafx.scene.control.TextField; 8 import javafx.scene.input.MouseEvent; 9 import javafx.scene.layout.AnchorPane; 10 import javafx.scene.layout.HBox; 11 import javafx.scene.text.Text; 12 import javafx.stage.Stage; 13 14 public class test1 extends Application{ 15 public static void main(String[ ] args) { 16 test1.launch(args); 17 } 18 public void start(Stage primaryStage) { 19 primaryStage.setTitle("UserForm1"); 20 AnchorPane root = new AnchorPane(); 21 HBox hbox1 = new HBox(8); 22 final TextField textfield = new TextField(); 23 textfield.setPrefColumnCount(25); 24 textfield.setPrefWidth(180); 25 hbox1.setAlignment(Pos.CENTER_LEFT); 26 hbox1.getChildren().addAll(new Label("Name"),textfield); 27 HBox hbox2 = new HBox(20); 28 Button btn = new Button(); 29 btn.setText("OK"); 30 final Text text = new Text(); 31 btn.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){ 32 public void handle(MouseEvent event){ 33 String textString = textfield.getText().toString(); 34 char[] textChar = textString.toCharArray(); 35 System.out.println(textString); 36 if(textString==null||textString.length()<=0) 37 text.setText("請輸入您的名字"); 38 else if(textString.length()>6) 39 text.setText("輸入字符長度應小於6"); 40 else{ 41 for(int i=0;i<textString.length();i++) 42 { 43 if((textChar[i]>='0'&&textChar[i]<='9')|| 44 (textChar[i]>='a'&&textChar[i]<='z')|| 45 (textChar[i]>='A'&&textChar[i]<='Z')) 46 text.setText("OK!"); 47 else{ 48 text.setText("請輸入合法字符"); 49 break; 50 } 51 } 52 } 53 } 54 }); 55 hbox2.getChildren().addAll(btn,text); 56 AnchorPane.setTopAnchor(hbox1, 40.0); 57 AnchorPane.setLeftAnchor(hbox1, 10.0); 58 AnchorPane.setTopAnchor(hbox2, 90.0); 59 AnchorPane.setLeftAnchor(hbox2, 70.0); 60 root.getChildren().addAll(hbox1,hbox2); 61 primaryStage.setScene(new Scene(root, 250, 150)); 62 primaryStage.show(); 63 } 64 } // end of program
