• 软件测试——等价类划分


    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 }
  • 相关阅读:
    一个秒杀系统的设计
    2018年终总结-从我所在的团队回首一年技术变迁
    温习LOGO语言
    微信公众平台配置-笔记
    Spring mongotemplate使用
    三种方法实现MNIST 手写数字识别
    Python 实现0-1背包
    Python 实现快速排序和随机快速排序
    Spring+SpringMVC+Mybatis搭建的网站的处理流程总结
    Mybatis功能架构及执行流程
  • 原文地址:https://www.cnblogs.com/wuditju/p/4356968.html
Copyright © 2020-2023  润新知