Equivalence Class Partitioning等价类划分-黑盒测试

 一、等价类划分

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

 二、划分等价类( 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.代码实现

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <%@page import = "java.sql.*" %>
  3. <%@page import = "java.io.PrintWriter" %>
  4. <%
  5. String path = request.getContextPath();
  6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  7. %>
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  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. <body>
  23. <form action="http://localhost:8080/experience34/index.jsp" method="post">
  24. <br><br><center><h1>等价类划分方法测试</h1></center>
  25. <br><br><h3><center>
  26. <label for="random" class="col-md-5 control-label">用户名:</label>
  27. <input type="text" id="name" name="name">  
  28. <button type="submit" class="btn btn-info btn-md" name="yes">确认</button>
  29. </h3></center>
  30. </form>
  31. <%System.out.println(request.getParameter("yes"));
  32. if(request.getParameter("yes")!= null){
  33. System.out.println("Succeed");
  34. if(request.getParameter("name").equals("") || request.getParameter("name").length()>=7){
  35. %>
  36. <br><br><center><font color='red'>您的输入不合法1</center>
  37. <%
  38. }
  39. else{
  40. /*var content = document.getElementById("name").value;
  41. var reg1 = /[a-zA-Z]/g;
  42. var letterCount = 0;
  43. letterCount = content.match(reg1).length;
  44. var reg2 = /\d/g;
  45. var numberCount = 0;
  46. numberCount = content.match(reg2).length;
  47. int i = letterCount + numberCount;
  48. if(i!=request.getParameter("name").length()){*/
  49. /*boolean isDigit = false;
  50. boolean isLetter = false;
  51. for(int i = 0; i < request.getParameter("name").length(); i++){
  52. if(request.getParameter("name").isDigit(request.getParameter("name").charAt(i))){
  53. isDigit = true;
  54. }
  55. if(request.getParameter("name").isLetter(request.getParameter("name").charAt(i))){
  56. isLetter = true;
  57. }
  58. if(isDigit || isLetter){*/
  59. char arr[] = new char[request.getParameter("name").length()];
  60. arr = request.getParameter("name").toCharArray();
  61. for(int i = 0; i < request.getParameter("name").length(); i++){
  62. if((arr[i] >= 'a' && arr[i] <= 'z')||(arr[i] >= 'A' && arr[i] <= 'Z')||(arr[i] >= '0' && arr[i] <= '9'));
  63. else{
  64. %>
  65. <br><br><center><font color='red'>您的输入不合法2</center>
  66. <%
  67. }
  68. %>
  69. <br><br><center><font color='green'>您的输入合法</center>
  70. <%
  71. }}
  72. } %>
  73. </body>
  74. </html>

       3.测试用例

编号 测试用例 结果
1 null 输入不合法
2 1111111111111 输入不合法
3 asw234 输入合法
4 22222 输入合法
5 wsd 输入合法
6 !.,3w 输入不合法

 

 

       4.结果图

posted @ 2015-03-22 21:42  四班&王喆  阅读(397)  评论(0编辑  收藏  举报