软件测试——等价类划分

Equivalence Class Partitioning

  一、等价类划分

 

  所谓等价类是指输入域的某个互不相交的子集合,所有等价类的并集便是整个输入域。目的在于测试用例的无冗余性。

  二、划分等价类( valid / invalid )

  (1)有效等价类:检验程序是否实现了规格说明预先规定的功能和性能。

  (2)无效等价类:检查软件功能和性能的实现是否有不符合规格说明要求的地方。

  三、常用的等价类划分原则

  (1)按区间划分

    可以确定一个有效等价类、两个无效等价类。

  (2)按数值划分

    如果输入条件规定了输入数据的一组可能的值,而且程序是用不同的方式处理每一种值,则可为每一种值划分一个有效等价类,并划分一个无效等价类。

  (3)按数值集合划分

    规格说明中规定了输入值的集合,则可以确定一个有效等价类,并划分一个无效等价类。

  (4)按限制条件或规则划分

    规格说明中规定了输入数据必须遵守的规则和限制条件,则可以确立一个有效等价类(符合规则)和若干个(≥ 1)无效等价类(不同角度的违反规则)。

  (5)细分等价类

    如果我们确知,已划分的某等价类中的各元素(例子)在程序中的处理方式是不同的,则应据此将此等价类进一步划分成更小的等价类。

  四、等价类测试用例设计

  (1)在确立了等价类之后,可列出所有划分出的等价类表。

  (2)为每一个等价类规定一个唯一的编号。

  (3)设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,直到测试用例覆盖了所有的有效等价类。

  (4)设计一个新的测试用例,使其覆盖且只覆盖一个尚未覆盖的无效等价类。重复这一步,直到测试用例覆盖了所有的无效等价类。

  五、等价类划分方法的应用

  EditBox允许1到6个英文字符或数字,按OK结束

  有效等价类:

    长度:1到6 字符:a-z,A-Z,0-9

  无效等价类:

    长度:0,7 字符:英文/数字以外字符,控制字符,标点符号

编号 输入 输出
1 abcdef 符合要求
2 abc123 符合要求
3 354301 符合要求
4   不符合要求
5 akdfnafks 不符合要求
6 ,.,.*& 不符合要求

  测试截图:

  源代码:

 1 import javafx.application.Application;
 2 import javafx.event.ActionEvent;
 3 import javafx.event.EventHandler;
 4 import javafx.scene.Scene;
 5 import javafx.scene.control.Button;
 6 import javafx.scene.control.TextField;
 7 import javafx.scene.layout.AnchorPane;
 8 import javafx.scene.text.Text;
 9 import javafx.stage.Stage;
10 
11 
12 public class Equivalence extends Application{
13     
14     public static void main(String arg0[]){
15         Equivalence.launch(arg0);
16     }
17 
18     @Override
19     public void start(Stage stage) throws Exception {
20         stage.setTitle("Equivalence class");
21         AnchorPane root = new AnchorPane();
22         
23         Text message = new Text("请输入:");
24         root.getChildren().add(message);
25         AnchorPane.setTopAnchor(message, 50.0);
26         AnchorPane.setLeftAnchor(message, 80.0);
27         
28         final TextField textInput = new TextField();
29         root.getChildren().add(textInput);
30         AnchorPane.setTopAnchor(textInput, 70.0);
31         AnchorPane.setLeftAnchor(textInput, 33.0);
32         
33         Button submit = new Button();
34         submit.setText("确定");
35         root.getChildren().add(submit);
36         AnchorPane.setTopAnchor(submit, 100.0);
37         AnchorPane.setLeftAnchor(submit, 77.0);
38         
39         submit.setOnAction(new EventHandler<ActionEvent>() {
40             public void handle(ActionEvent arg0) {
41                 System.out.println(textInput.getText().toString().length());
42                 if(checkString(textInput.getText().toString())){
43                      Stage newStage = new Stage();
44                      AnchorPane newRoot = new AnchorPane();
45                      
46                      Text result = new Text("符合要求~");
47                      newRoot.getChildren().add(result);
48                      AnchorPane.setTopAnchor(result, 20.0);
49                      AnchorPane.setLeftAnchor(result, 30.0);
50                      
51                      
52                      newStage.setScene(new Scene(newRoot, 50, 50));
53                      newStage.show();
54                 }else{
55                     Stage newStage = new Stage();
56                      AnchorPane newRoot = new AnchorPane();
57                      
58                      Text result = new Text("不符合要求~");
59                      newRoot.getChildren().add(result);
60                      AnchorPane.setTopAnchor(result, 20.0);
61                      AnchorPane.setLeftAnchor(result, 25.0);
62                      
63                      
64                      newStage.setScene(new Scene(newRoot, 50, 50));
65                      newStage.show();
66                 }
67                 
68             }
69         });
70         
71         stage.setScene(new Scene(root, 200,200));
72         stage.show();
73     }
74     
75     public boolean checkString(String str){
76         if(str.length() == 0 || str.length() >= 7){
77             return false;
78         }
79         
80         char arr[] = new char[str.length()];
81         arr = str.toCharArray();
82         
83         for(int i = 0; i < str.length(); i++){
84             if((arr[i] >= 'a' && arr[i] <= 'z')||(arr[i] >= 'A' && arr[i] <= 'Z')||(arr[i] >= '0' && arr[i] <= '9'));
85             else{
86                 return false;
87             }
88         }
89         
90         return true;
91     }
92     
93 }

 

posted on 2015-03-22 11:55  四班&吴迪  阅读(669)  评论(0编辑  收藏  举报