zoukankan      html  css  js  c++  java
  • 黑盒测试的等价类划分法软件测试

      黑盒测试中,最理想的就是穷举输入测试了,然而这在现实中是不可能办到的。于是,找到一种正确而有效且实用性强的测试方法也就很重要了。在常见的黑盒测试中,有一种叫做等价类划分法。

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

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

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

         

      划分等价类( valid / invalid )

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

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

      

          常用的等价类划分原则

      (1)按区间划分

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

      (2)按数值划分

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

      (3)按数值集合划分

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

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

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

      (5)细分等价类

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

      

      等价类测试用例设计

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

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

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

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

      软件测试:

      允许1到6个英文字符或数字,按提交结束。

      有效等价类:
      长度:1到6
      字符:a-z,A-Z,0-9

      无效等价类
      长度:0,7
      字符:英文/数字以外字符,控制字符,标点符号

      等价类划分

    编号 有效等价类 编号 无效等价类
    1 长度<6 5 长度=0或>7
    2 数字 6 控制字符,标点符号
    3 小写英文字母    
    4 大写英文字母    

      测试用例

     用例

    覆盖等价类  结果 
     asdf  1,3  
     ASfdsf 1,2,4   
     asd123 1,2,3   
     Ght555 1,2,3,4   
       5  
     123!s  1,2,3,6  
     yU12? 1,2,3,4,6  

    asdfghhh

    3,5  

      

      

    输入框与测试部分源码

     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 testing extends Application {
    13 
    14     public static void main(String[ ] args) {
    15         testing.launch( args );
    16     }
    17     public void start( Stage primaryStage ) {
    18         primaryStage.setTitle( "input testing" );
    19         AnchorPane root = new AnchorPane();
    20         
    21         Text text = new Text("请输入用户名");
    22         final Text text2 = new Text("");
    23         
    24         final TextField intext = new TextField("");
    25         intext.setMaxSize(140, 20);
    26         root.getChildren().addAll(text,text2,intext);        
    27         AnchorPane.setTopAnchor(text, 80.0);
    28         AnchorPane.setLeftAnchor(text, 110.0);       
    29         AnchorPane.setTopAnchor(text2, 160.0);
    30         AnchorPane.setLeftAnchor(text2, 70.0);       
    31         AnchorPane.setTopAnchor(intext, 100.0);
    32         AnchorPane.setLeftAnchor(intext, 70.0);        
    33         Button btn = new Button("提交");        
    34         root.getChildren().addAll(btn);
    35         AnchorPane.setTopAnchor(btn, 130.0);
    36         AnchorPane.setLeftAnchor(btn, 120.0);
    37        
    38         btn.setOnAction(new EventHandler<ActionEvent>() {
    39             public void handle(ActionEvent arg0) {
    40                 if(check(intext.getText().toString())){
    41                     text2.setText("输入正确");
    42                 }
    43                 else{    
    44                     text2.setText("输入错误");
    45                 }
    46             }
    47         });
    48       
    49         primaryStage.setScene(new Scene(root,300,300));
    50         primaryStage.show( );
    51         }
    52         public boolean check(String str){
    53             char array[] = new char[str.length()];
    54             array = str.toCharArray();
    55             if (str.length() < 1 || str.length() > 6)
    56                 return false;          
    57             if (str.length() != 0){
    58                 for (int i = 0; i < str.length(); i++){
    59                     if(!((array[i]>='a' && array[i]<='z')||(array[i]>='A' && array[i]<='Z')||(array[i]>='0' && array[i]<='9')))
    60                        return false;
    61                 }
    62             }
    63             return true;
    64       }
    65  
    66 }
  • 相关阅读:
    加入强调语气,使用<strong>和<em>标签
    了解<hx>标签,为你的网页添加标题
    开始学习<p>标签,添加段落
    <body>标签,网页上显示的内容放在这里
    语义化,让你的网页更好的被搜索引擎理解
    深入源码分析SpringMVC底层原理(二)
    设计模式是什么鬼(解释器)
    Java并发面试题
    漫画 | Spring AOP的底层原理是什么?
    漫画|你还记得原生的JDBC怎么连接数据库吗?
  • 原文地址:https://www.cnblogs.com/voidsh/p/4357415.html
Copyright © 2011-2022 走看看