所谓等价类是指输入域的某个互不相交的子集合,所有等价类的并集便是整个输入域。目的在于测试用例的无冗余性。
有效等价类:检验程序是否实现了规格说明预先规定的功能和性能。
无效等价类:检查软件功能和性能的实现是否有不符合规格说明要求的地方。
一、等价类的划分方法:
(1)按区间划分:可以确定一个有效等价类、两个无效等价类。
(2)按数值划分:如果输入条件规定了输入数据的一组可能的值,而且程序是用不同的方式处理每一种值,则可为每一种值划分一个有效等价类,并划分一个无效等价类。
(3)按数值集合划分:规格说明中规定了输入值的集合,则可以确定一个有效等价类,并划分一个无效等价类。
(4)按限制条件或规则划分:规格说明中规定了输入数据必须遵守的规则和限制条件,则可以确立一个有效等价类(符合规则)和若干个(≥ 1)无效等价类(不同角度的违反规则)。
(5)细分等价类:如果我们确知,已划分的某等价类中的各元素(例子)在程序中的处理方式是不同的,则应据此将此等价类进一步划分成更小的等价类。
二、等价类测试用例设计
(1)在确立了等价类之后,可列出所有划分出的等价类表。
(2)为每一个等价类规定一个唯一的编号。
(3)设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,直到测试用例覆盖了所有的有效等价类。
(4)设计一个新的测试用例,使其覆盖且只覆盖一个尚未覆盖的无效等价类。重复这一步,直到测试用例覆盖了所有的无效等价类。
三、针对EditBox问题给出答案
以输入条件划分等价类:
有效等价类 | 无效等价类 |
E1:长度为1到6 |
T1:长度为0 |
T2:长度大于6 | |
E2:字符为a-z,A-Z,0-9 | T3:字符为字母和数字以外字符 |
给出程序及截图:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Test1 extends Application {
public static boolean isRegularRptCode(String rptCode,String regEx) {
Pattern p1 = Pattern.compile(regEx);
Matcher m1 = p1.matcher(rptCode);
boolean rs1 = m1.matches();
return rs1;
}
public static void main(String[] args) {
Test1.launch(args);
}
public void start(Stage stage)throws Exception {
stage.setTitle("UserForm1");
AnchorPane root = new AnchorPane();
Scene scene = new Scene(root, 500, 150);
scene.setFill(Color.PINK);
Text name= new Text("姓名");
name.setFont(Font.font ("STXingKai", 36));
AnchorPane.setTopAnchor(name, 50.0);
AnchorPane.setLeftAnchor(name, 50.0);
final TextField tf=new TextField();
AnchorPane.setTopAnchor(tf, 57.0);
AnchorPane.setLeftAnchor(tf, 145.0);
Button button = new Button("OK");
AnchorPane.setTopAnchor(button, 57.0);
AnchorPane.setLeftAnchor(button, 350.0);
button.setOnAction( new EventHandler<ActionEvent>( ) {
public void handle(ActionEvent actEvt) {
final String name1;
name1=tf.getText();
if(name1.length()<1||name1.length()>6){
System.out.println("长度应为1-6");
}
else if(!isRegularRptCode(name1,"[a-z,A-Z,0-9]*")){
System.out.println("字符应为a-z,A-Z,0-9");
}
else{
System.out.println("OK");
}
}
} );
root.getChildren().addAll(name,tf,button);
stage.setScene(scene);
stage.show();
}
}
以下为几个测试用例:
编号 | 输入 | 控制台返回结果 |
E1,E2 | S1a2 | |
E1,T3 | da1.、 | |
E2,T1 | null | |
E2,T2 | fa1SFS3 |