Equivalence Class Partitioning(等价类划分)

    作为一个程序猿我们应该知道在软件测试过程中需要使用大量的测试用例,那么如何选择适当的测试用例来代表整个数据集,通过降低测试的数目去实现“合理的”覆盖,覆盖了更多的可能数据,以发现更多的软件缺陷呢。而本篇博客中讲解的等价类划分方法就是为了解决这一问题。

    等价类划分法是一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据(有效的和无效的)划分成若干个等价类。然后从每个部分中选取具有代表性的数据当做测试用例进行合理的分类,测试用例由有效等价类和无效等价类的代表组成,从而保证测试用例具有完整性和代表性。
    所谓等价类是指输入域的某个互不相交的子集合,所有等价类的并集便是整个输入域。目的在于测试用例的无冗余性。
划分等价类( valid / invalid )
(1)有效等价类:检验程序是否实现了规格说明预先规定的功能和性能。
(2)无效等价类:检查软件功能和性能的实现是否有不符合规格说明要求的地方。

一、等价类划分方法:

(1)按区间划分:可以确定一个有效等价类、两个无效等价类。

(2)按数值划分:如果输入条件规定了输入数据的一组可能的值,而且程序是用不同的方式处理每一种值,则可为每一种值划分一个有

                         效等价类,并划分一个无效等价类。

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

(4)按限制条件或规则划分:规格说明中规定了输入数据必须遵守的规则和限制条件,则可以确立一个有效等价类(符合规则)和若干

                                       个(≥ 1)无效等价类(不同角度的违反规则)。

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

                         分成更小的等价类。

二、等价类划分方法的应用

  具体实例:一个EditBox允许1到6个英文字符或数字,按OK结束

  有效等价类:

        长度:1到6

        字符:a-z,A-Z,0-9

  无效等价类:

        长度:0,7

        字符:英文/数字以外字符,控制字符,标点符号

  实现方法:在该例中我使用了javascript来验证输入的字符串,并给出相应的提示(具体方法见下面源代码)。JavaScript是一种属于

                网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态动能,为用户提供更流畅美观的浏览效

                果,在验证用户输入方面非常方便。                          

  测试用例:

        

编号 输入 预期输出
1 123 正确
2 abc 正确
3 123abc 正确
4   长度1到6
5 123abcd 长度1到6
6 123a!, 只允许为英文字符或数字

  部分测试结果图:

 

 

  源码:使用javascript验证输入内容是否符合要求,用正则表达式来判断输入内容是否为英文字符或数字

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     
12     <title>My JSP 'index.jsp' starting page</title>
13     <meta http-equiv="pragma" content="no-cache">
14     <meta http-equiv="cache-control" content="no-cache">
15     <meta http-equiv="expires" content="0">    
16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17     <meta http-equiv="description" content="This is my page">
18     <!--
19     <link rel="stylesheet" type="text/css" href="styles.css">
20     -->
21   </head>
22   
23   <body>
24   <center>
25     <p>允许1到6个英文字符或数字,按OK结束。</p>
26 
27 <input id="demo" type="text">
28 
29 <script>
30 function myFunction()
31 {
32 var x=document.getElementById("demo").value;
33 if(x.length<1||x.length>6)
34 {
35     alert("长度1到6");
36 }
37 else{
38     if(x.match(/^([a-zA-Z0-9])*$/))//正则表达式用来表示英文或数字 
39   { 
40   alert("正确");
41  }  
42  else 
43  { 
44   alert("只允许为英文字符或数字"); 
45 
46  }  
47 }
48 }
49 
50 </script>
51 
52 <button type="button" onclick="myFunction()">OK</button>
53 </center>
54   </body>
55 </html>