黑盒测试等价类划分方法
(参考博客: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