等价类测试与边界值测试

31

我理解等价类测试的工作原理。

它与边界值测试有何异同?

6个回答

74

等价类测试
等价类测试是当你有许多测试项(例如值)需要测试,但由于成本(时间/金钱)的原因,你没有时间对它们进行全部测试。因此,你将测试项分组成类别,其中每个类别中的所有项都应该完全相同。理论上,你只需要测试每个项中的一个来确保系统正常工作。
示例1
2岁以下儿童免费乘坐公交车。年轻人支付10美元,成年人支付15美元,老年人支付5美元。
类别:
价格:0 -> 年龄:0-1
价格:10 -> 年龄:2-14
价格:15 -> 年龄:15-64
价格:5 -> 年龄:65-无穷大

示例2(多个参数)
手机K80、J64和J54运行Java 5。K90和J99运行Java 6。但是有两个可能的浏览器FireFox和Opera,J型号运行FF,K型号运行O。
类别:
浏览器:FF, Java:5 -> 手机:J64,J54
浏览器:FF, Java:6 -> 手机:J99
浏览器:O, Java:5 -> 手机:K80
浏览器:O, Java:6 -> 手机:K90

等价类测试的危险
在测试书籍中很少提到但非常重要的一点是使用等价类测试时存在风险。
仅仅因为两个项/值应该在同一类别中且表现相同,并不意味着它们确实表现相同。

这意味着仅仅因为你测试了类中的一个值,并不代表该类中的所有值都表现相同。我的一个真实世界的例子是关于所有具有特定Java平台的手机。它们应该都是相同的,但实际上并不是这样。因此,仅仅测试类中的一个值是好的,但还不够好。EC测试是一个好工具,但它并不是万无一失的,使用时要小心。如果测试用例便宜快速(例如自动化),那么就测试更多,或者为什么不全部测试呢!
边界值测试
BV测试是指决定测试您已确定的每个类的边缘值。理论上,大多数缺陷在类的边缘周围。 举个例子
类:
价格:0 -> 年龄:0-1(边界值0、1)
价格:10 -> 年龄:2-14(边界值2、14)
价格:15 -> 年龄:15-64(边界值15、64)
价格:5 -> 年龄:65-无穷大(边界值65)
对边界值测试的批评
1)我和其他参加过课程的测试专业人士并不认为大多数缺陷隐藏在每个类的边缘周围。我从未见过任何证明这一点的研究。 2)您需要使用边界值测试的事实证明了EC测试存在缺陷,因为您测试了每个类的多个值。 3)当使用像整数这样的值时,很容易使用。但是,如果是以手机型号或浏览器版本等值作为类的边界值,该怎么办?
隐藏的边界值测试
一个类的边界值通常基于系统应该如何工作的规范。这都很好,但大多数系统包含没有在任何规范中解释的边界,您需要自己查找。例如:“在系统失败并崩溃之前,我可以将多少个字符放入测试字段中?”“数据文件可以变得多大使得读取变得非常慢而令人讨厌”。
现实世界的例子:- 在FireFox 3.5上的win 7中将一百万个字符粘贴到文本区域中会导致崩溃。 - ReCaptcha有一个16003个字符的限制,如果有人在字段中放入16004个或更多字符,系统是否能处理它返回的413错误呢?还是会出错? 摘要
EC测试和BV测试是很好的工具,建议使用,但它们并不完美,不要期望用它们找到所有缺陷。请运用您对系统的了解、智慧和直觉来尝试更多项目,并寻找其可能失败的其他方式。同时,也要注意隐蔽的边界!

20

边界值分析简单地意味着选择接近类别边界的值。因此,您仍然根据类别划分输入域,但是不要从类别中间选择值,而是使用边界值。

例如,如果输入条件为从20到70的范围,则您有三个输入类别:

  1. 小于20
  2. 介于20和70之间
  3. 大于70

因此,在进行边界值分析时,应选择输入=19、20、21、69、70、71。这种类型的分析可捕捉边界处的错误。


13
等价测试需要补充边界值测试。例如,对于一个取值介于1和12之间的函数进行等价测试(比如一年中的月份),分区将是:
  • 小于1的值(0、-1、-2),无效分区
  • 介于1-12之间的值,有效分区
  • 大于12的值,无效分区
  • 对于等价测试,从每个分区类中选择一个值作为测试输入就足够了。这意味着使用-2、6和15的值进行测试就足以测试函数的行为。但是这些值无法捕捉到经常发生的Off-by-one error
    通过边界值测试,测试输入将为:-1、0、1、11、12、13(在边界处),这将捕捉到off-by-one错误。
    我认为这两种测试方法互为补充。

    好多了 - 直截了当和清晰!谢谢 :) - Timur Fayzrakhmanov

    1

    边界值分析是等价类划分的一部分或子集。在边界值分析中,只选择边界上的值,而不是一些随机值。


    -1

    边界值分析克服了等价类划分的缺点。如果为移动电话号码(10位数字)指定固定长度,则:

    在这种情况下,下限是数字-1(即10-1=9) 上限是数字+1(即10+1=11)

    现在我们可以对9和11进行测试。


    -1

    动态测试类型 -

    1. 基于规范的测试

      A. 等价类划分

        A1. 边界值分析
      
        A2. 决策表
      
        A3. 用例测试
      
        A4. 状态转换测试
      
    2. 基于结构的测试

      A. 测试覆盖率

      B. 代码覆盖率

      C. 语句覆盖率

      D. 判定覆盖率

    3. 基于经验的测试

      A. 错误测试

      B. 探索性测试

    等价类划分 - 这是一种测试人员将测试条件划分为组和集合的技术。系统应该等效地处理它们,因此称为等价类。从每个分区测试一个条件将起到假设所有条件都在该分区中工作的作用。

    例如 >> 检查单个数字值的加法。即介于0和9之间的值。

    1. 小于-9的值,即-10,-11,…(无效分区)

    2. 小于0的值,即-1,-2,…直到-9(有效分区)

    3. 介于0-9之间的值,即0,1…直到9(有效分区)

    4. 大于9的值,即10,11(无效分区)

    对于每个分区的任意两个值进行加法测试就足够了。

    边界值测试 - 它基于在分区之间的边界进行测试。

    例如 >> 考虑以下组合。

    1. -9和-10的加法

    2. -10和-11的加法

    3. 0和-1的加法

    4. 0和1的加法

    5. 9和10的加法

    6. 11和10的加法


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接