一、等价类划分
所谓等价类是指输入域的某个互不相交的子集合,所有等价类的并集便是整个输入域。目的在于测试用例的无冗余性。
二、划分等价类( valid / invalid )
(1)有效等价类:检验程序是否实现了规格说明预先规定的功能和性能。
(2)无效等价类:检查软件功能和性能的实现是否有不符合规格说明要求的地方。
三、常用的等价类划分原则
(1)按区间划分
可以确定一个有效等价类、两个无效等价类。
(2)按数值划分
如果输入条件规定了输入数据的一组可能的值,而且程序是用不同的方式处理每一种值,则可为每一种值划分一个有效等价类,并划分一个无效等价类。
(3)按数值集合划分
规格说明中规定了输入值的集合,则可以确定一个有效等价类,并划分一个无效等价类。
(4)按限制条件或规则划分
规格说明中规定了输入数据必须遵守的规则和限制条件,则可以确立一个有效等价类(符合规则)和若干个(≥ 1)无效等价类(不同角度的违反规则)。
(5)细分等价类
如果我们确知,已划分的某等价类中的各元素(例子)在程序中的处理方式是不同的,则应据此将此等价类进一步划分成更小的等价类。
四、等价类测试用例设计
(1)在确立了等价类之后,可列出所有划分出的等价类表。
(2)为每一个等价类规定一个唯一的编号。
(3)设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,直到测试用例覆盖了所有的有效等价类。
(4)设计一个新的测试用例,使其覆盖且只覆盖一个尚未覆盖的无效等价类。重复这一步,直到测试用例覆盖了所有的无效等价类。
五、等价类划分方法应用
EditBox允许1到6个英文字符或数字,按OK结束
1.划分有效和无效等价类
(1)有效等价类:
长度:1到6 字符:a-z,A-Z,0-9
(2)无效等价类:
长度:0,7 字符:英文/数字以外字符,控制字符,标点符号
2.代码实现
- <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
- <%@page import = "java.sql.*" %>
- <%@page import = "java.io.PrintWriter" %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'index.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <form action="http://localhost:8080/experience34/index.jsp" method="post">
- <br><br><center><h1>等价类划分方法测试</h1></center>
- <br><br><h3><center>
- <label for="random" class="col-md-5 control-label">用户名:</label>
- <input type="text" id="name" name="name">
- <button type="submit" class="btn btn-info btn-md" name="yes">确认</button>
- </h3></center>
- </form>
- <%System.out.println(request.getParameter("yes"));
- if(request.getParameter("yes")!= null){
- System.out.println("Succeed");
- if(request.getParameter("name").equals("") || request.getParameter("name").length()>=7){
- %>
- <br><br><center><font color='red'>您的输入不合法1</center>
- <%
- }
- else{
- /*var content = document.getElementById("name").value;
- var reg1 = /[a-zA-Z]/g;
- var letterCount = 0;
- letterCount = content.match(reg1).length;
- var reg2 = /\d/g;
- var numberCount = 0;
- numberCount = content.match(reg2).length;
- int i = letterCount + numberCount;
- if(i!=request.getParameter("name").length()){*/
- /*boolean isDigit = false;
- boolean isLetter = false;
- for(int i = 0; i < request.getParameter("name").length(); i++){
- if(request.getParameter("name").isDigit(request.getParameter("name").charAt(i))){
- isDigit = true;
- }
- if(request.getParameter("name").isLetter(request.getParameter("name").charAt(i))){
- isLetter = true;
- }
- if(isDigit || isLetter){*/
- char arr[] = new char[request.getParameter("name").length()];
- arr = request.getParameter("name").toCharArray();
- for(int i = 0; i < request.getParameter("name").length(); i++){
- if((arr[i] >= 'a' && arr[i] <= 'z')||(arr[i] >= 'A' && arr[i] <= 'Z')||(arr[i] >= '0' && arr[i] <= '9'));
- else{
- %>
- <br><br><center><font color='red'>您的输入不合法2</center>
- <%
- }
- %>
- <br><br><center><font color='green'>您的输入合法</center>
- <%
- }}
- } %>
- </body>
- </html>
3.测试用例
编号 | 测试用例 | 结果 |
1 | null | 输入不合法 |
2 | 1111111111111 | 输入不合法 |
3 | asw234 | 输入合法 |
4 | 22222 | 输入合法 |
5 | wsd | 输入合法 |
6 | !.,3w | 输入不合法 |
4.结果图