目标程序
较上次增加两个相同的输入框
使用方法介绍
- 因果图法
在Introduction to Software Testing by Paul一书中,将软件测试的覆盖标准划分为四类,logical expressions,syntactic descriptions,graphs,input domain characterizations,就我所学的内容来看,等价类划分属于input domain characterizations,控制流与数据流测试属于graphs,而因果图法属于logical expressions。它从用自然语言书写的程序规格说明的描述中找出因(输入条件)和果(输出或程序状态的改变),可以通过因果图转换为判定表。
- 步骤
- 列出因和果
- 画出因果图
- 根据因果图画出判定表
- 如变量太多,可先将判定表进行简化,之后设计测试用例
原因与结果
原因编号 |
内容 |
|
---|---|---|
C1 |
第一个输入框未输入 |
|
C2 |
第二个输入框未输入 |
|
C3 |
第三个输入框未输入 |
|
B1 |
第一个输入框输入错误 |
|
B2 |
第二个输入框输入错误 |
|
B3 |
第三个输入框输入错误 |
|
结果编号 |
输出动作 |
需求 |
Ef1 |
第一个输入框后显示错误信息 |
C1 或 B1 |
Ef2 |
第二个输入框后显示错误信息 |
C2 或 B2 |
Ef3 |
第三个输入框后显示错误信息 |
C3 或 B3 |
Ef4 |
显示“success” |
三个输入框均正确输入 |
因果图
判定表
编号 |
||||||
原因 |
C1 |
0 |
0 |
1 |
1 |
0 |
C2 |
0 |
0 |
0 |
1 |
0 |
|
C3 |
0 |
0 |
0 |
1 |
0 |
|
B1 |
0 |
0 |
0 |
0 |
1 |
|
B2 |
0 |
0 |
0 |
0 |
1 |
|
B3 |
0 |
1 |
0 |
0 |
1 |
|
中间结果 |
M1 |
0 |
0 |
1 |
1 |
1 |
M2 |
0 |
0 |
0 |
1 |
1 |
|
M3 |
0 |
1 |
0 |
1 |
1 |
|
M4 |
0 |
1 |
1 |
1 |
1 |
|
结果 |
Ef1 |
0 |
0 |
1 |
1 |
1 |
Ef2 |
0 |
0 |
0 |
1 |
1 |
|
Ef3 |
0 |
1 |
0 |
1 |
1 |
|
Ef4 |
1 |
0 |
0 |
0 |
0 |
程序代码
程序代码
package addTNA;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollBar;
import javafx.scene.control.TextField;
import javafx.scene.layout.Background;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.TilePane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class CopyOfName extends Application {
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
Group root = new Group();
Label label1 = new Label("Name:");
Label label2 = new Label("Name:");
Label label3 = new Label("Name:");
TextField Name1 = new TextField();
TextField Name2 = new TextField();
TextField Name3 = new TextField();
Label label12 = new Label("请输入1-6个英文字母或数字");
Label label22 = new Label("请输入1-6个英文字母或数字");
Label label32 = new Label("请输入1-6个英文字母或数字");
label12.setOpacity(0);
label22.setOpacity(0);
label32.setOpacity(0);
label12.setTextFill(Color.RED);
label22.setTextFill(Color.RED);
label32.setTextFill(Color.RED);
Name1.setMaxWidth(100);
Name2.setMaxWidth(100);
Name3.setMaxWidth(100);
HBox hb1 = new HBox();
hb1.getChildren().add(label1);
hb1.getChildren().add(Name1);
hb1.getChildren().add(label12);
hb1.setSpacing(10);
HBox hb2 = new HBox();
hb2.getChildren().add(label2);
hb2.getChildren().add(Name2);
hb2.getChildren().add(label22);
hb2.setSpacing(10);
HBox hb3 = new HBox();
hb3.getChildren().add(label3);
hb3.getChildren().add(Name3);
hb3.getChildren().add(label32);
hb3.setSpacing(10);
VBox vb = new VBox();
Button confirm = new Button("confirm");
vb.getChildren().addAll(hb1,hb2,hb3);
vb.getChildren().add(confirm);
vb.setSpacing(20);
vb.setLayoutX(20);
vb.setLayoutY(40);
root.getStylesheets().add("ad.css");
File file = new File("xiaoshuo/ad.css");
System.out.println(file.exists());
confirm.setOnAction(new EventHandler(){
public void handle(ActionEvent arg0) {
// TODO Auto-generated method stub
BorderPane al = new BorderPane();
Text t = new Text("success");
StringBuffer s1 = new StringBuffer(Name1.getText());
StringBuffer s2 = new StringBuffer(Name2.getText());
StringBuffer s3 = new StringBuffer(Name3.getText());
System.out.println(s1);
Pattern pattern = Pattern.compile("[0-9a-zA-Z]+");
boolean b1 = pattern.matcher(s1).matches();
boolean b2 = pattern.matcher(s2).matches();
boolean b3 = pattern.matcher(s3).matches();
if(!b1 || s1.length()>=7){
label12.setOpacity(1);
}else{
label12.setOpacity(0);
}
if(!b2 || s2.length()>=7){
label22.setOpacity(1);
}else{
label22.setOpacity(0);
}
if(!b3 || s3.length()>=7){
label32.setOpacity(1);
}else{
label32.setOpacity(0);
}
Button back = new Button("confirm");
al.setTop(t);
al.setAlignment(t, Pos.CENTER);
al.setAlignment(back, Pos.CENTER);
al.setCenter(back);
al.setLayoutX(70);
al.setLayoutY(70);
root.getChildren().add(al);
//al.getStyleClass().add("ba");
vb.setOpacity(0.3);
back.setOnAction(new EventHandler(){
@Override
public void handle(ActionEvent arg0) {
// TODO Auto-generated method stub
root.getChildren().remove(al);
vb.setOpacity(1.0);
}});
}
});
root.getChildren().add(vb);
Scene scene = new Scene(root, 400, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
}