等价类划分(Equivalence Class Partitioning)

1. Equivalence Class Partitioning

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

2. 划分等价类(valid / invalid)

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

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

3. 常用的等价类划分原则

(1)按区间划分

(2)按数值划分

(3)按数值集合划分

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

(5)细分等价类

4. 等价类划分方法

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

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

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

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

5. 等价类划分方法的应用


 

编号    有效等价类      编号    无效等价类

1        长度1到6       3     长度小于1(即为0)

                  4     长度大于6

2     字符为a-z,A-Z,0-9    5     字符为英文/数字以外字符,控制字符,标点符号


UserForm1的测试用例:

No        输入      覆盖等价类        期望输出

1        abcdef      1,2            true

2        adcdefg                4,2                                  false

3                    3                                    false

4        123        1,2                                   true

5        123,.                     1,5                                  false

6        1234567     4,2                                  false


测试结果:

    

    


 

测试代码:

 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.layout.HBox;
 9 import javafx.scene.text.Text;
10 import javafx.stage.Stage;
11 
12 public class Test extends Application{
13       public static void main(String[] args) {
14          Test.launch(args);
15       } 
16       
17       public void start(Stage stage ){
18           stage.setTitle("UserForm1");          
19           AnchorPane root = new AnchorPane();
20           
21           HBox hbox = new HBox(8);
22           Text t1 = new Text("Name: ");
23           final TextField t2 = new TextField();
24           Button btn = new Button("OK");
25           hbox.getChildren().addAll(t1, t2, btn);
26           
27           btn.setOnAction(new EventHandler<ActionEvent>(){
28                 @Override
29                 public void handle(ActionEvent actEvt) {
30                     if(check(t2.getText().toString()))
31                         System.out.println("true");
32                     else
33                         System.out.println("false");
34                 }
35           });
36           
37           AnchorPane.setTopAnchor(hbox, 90.0);
38           AnchorPane.setLeftAnchor(hbox, 30.0);
39           root.getChildren().add(hbox);
40           
41           stage.setScene(new Scene(root, 300, 200));
42           stage.show(); 
43       }
44       
45       public boolean check(String s){
46           char array[] = new char[s.length()];
47           array = s.toCharArray();
48           if (s.length() < 1 || s.length() > 6)
49               return false;          
50           if (s.length() != 0){
51               for (int i = 0; i < s.length(); i++){
52                   if(!Character.isDigit(array[i]) && !Character.isAlphabetic(array[i]))
53                       return false;
54               }
55           }
56           return true;
57       }
58 }

 

posted @ 2015-03-22 13:31  Machuk  阅读(4281)  评论(0编辑  收藏  举报