zoukankan      html  css  js  c++  java
  • 等价类划分方法分析与应用

    在查了大量资料及看同学的博客之外,写下了这篇作业性质的博文。为避免重复的劳动,故此本文的一些内容直接引用他人的博客,不再赘述。

    等价类划分是一种典型的黑盒测试方法,用这一方法设计测试用例完全不考虑程序的内部结构,只根据对程序的要求和说明,即需求规格说明书。我们必须仔细分析和推敲说明书的各项需求,特别是功能需求。把说明书中对输入的要求和输出的要求区别开来并加以分解。

    1.等价类定义及划分原则

    此处附表达很全面的解雪君博文http://www.cnblogs.com/tju-crab/p/4355160.html,感谢此博主。

    2.强弱等价类测试例子

    此部分不属课程范围,但以增强见识为由,随附。不定面试就用到了呢。

    在寻找等价区间时,设法把软件的相似输入、输出、操作分成组,这些组就是等价区间。

    等价类的重要问题是它们构成的集合的划分,其中,划分是指互不相交的一组子集,这些子集的并是整个集合。这对于测试有两点非常重要的意义:表示整个集合这个事实提供了一种形式的完备性,而互不相交可保证一种形式的无冗余性。由于子集是由等价关系决定的,因此子集的元素都有一些共同点。等价类测试的思想是通过每个等价类中的一个元素标识测试用例。如果广泛选择等价类,则这样可以大大减低测试用例之间的冗余。

    为了便于理解,以下讨论涉及有两个变量X1和X2的函数F。如果函数F实现为一个程序,则输入变量X1和X2将拥有以下边界,以及边界内的区间:

    a≤X1≤d,区间为[a,b),[b,c),[c,d]                                

    e≤X2≤g,区间为[e,f),[f,g]

    其中方括号和圆括号分别表示闭区间和开区间的端点。X1,X2的无效值是X1<a,X1>d,X2<e,X2>g。以此作为例子,我们将进一步讨论等价类划分法。

    弱一般等价类测试(覆盖每个变量的定义域,而所用用例最少)

    采用上面给出的标记,弱一般等价类测试通过一个测试用例中的每个等价类(区间)的一个变量实现(请注意单边假设作用)。对于前面给出的例子,可得到如下图所示的弱等价类测试用例。

    等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地

    由函数的定义可知,带阴影的矩形中的任何点都是函数F的有效输入。这三个测试用例使用每个等价类中的一个值。我们以对称方式标识这些测试用例,于是得到外在的模式。事实上,永远都有等量的弱等价类测试用例,因为划分中的类对应最大子集数。

    强一般等价类测试

    强一般等价类测试基于多缺陷假设,因此需要等价类笛卡尔积的每个元素对应的测试用例,如下图所示:

    等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地

    请注意,这些测试用例的模式与命题逻辑中的真值表构造具有相似性。笛卡尔积可以保证两种意义上的“完备性”:一是覆盖所有的等价类,二是有可能的输入组合中的一个。

    事实上,“好的”等价类测试的关键是等价关系的选择。注意被“相同处理”的输入。在大多数情况下,等价类测试定义输入定义域的类。没有理由不能根据被测程序函数的输出值域定义等价关系,我们可以看到,这对于三角形问题是最简单的方法。

    弱健壮等价类测试

    这种测试的名称显然与直觉矛盾,且自相矛盾。怎么能够既弱又健壮呢?说它健壮,是因为这种测试考虑了无效值;说它弱,是因为有单缺陷假设。

    1、对于有效输入,使用每个有效类的一个值。(就像我们在所谓弱一般等价类测试中所做的一样。请注意,这些测试用例中的所有输入都是有效的。)

    2、对于无效输入,测试用例将拥有一个无效值,并保持其余的值都是等效的。(因此,“单缺陷”会造成测试用例失败。)

    按照这种策略产生的测试用例如下图所示:

    等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地

    健壮等价类测试有两个问题。第一个问题是,规格说明常常并没有定义无效测试用例所预期的输出是什么。(我们可以把这看作是规格说明的不足,但是这并不能解决问题。)因此,测试人员需要花费大量时间定义这些测试用例的输出。第二个问题是,强类型语言没有必要考虑无效输入。传统等价类测试是诸如FORTRAN和COBOL这样的语言占统治地位的年代的产物,因此那时这种错误很常见。事实上,正是由于经常出现这种错误,才促使人们实现强类型语言。

    对于第二个问题,应该是指对于纯编程语言而言的。在实际的项目中,由于人的因素(人总会犯错误,即使编程语言本身再怎么完美,诸如Java、Python、C++这样的强类型语言,也无法避免),以及业务的具体要求,无效输入往往要考虑业务因素,所以任何时刻都必须考虑无效输入。

    强健壮等价类测试

    至少这种测试的名称既不与直觉矛盾,也不自相矛盾,只是有些冗余。像以前的定义一样,健壮是指要考虑无效值,强是指多缺陷假设。

    我们从所有的等价类笛卡尔积的每个元素中获得测试用例,如下图所示:

    等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地下面我们将结合三角形问题,来实际应用等价类划分的方法。三角形问题是这样的经典,以至于虽然大家都知道它是经典问题,面试和笔试中还是会遇到。等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地

    例题:根据下面给出的规格说明,利用等价类划分的方法,给出足够的测试用例。“一个程序读入3个整数,把这3个数值看作一个三角形的3条边的长度值。这个程序要打印信息,说明这个三角形是不等边的、是等腰的、是等边的,或者不能构成三角形”。

    在描述问题时,我们提到有四种可能出现的输出:非三角形、不等边三角形、等腰三角形和等边三角形。可以使用这些输出标识如下所示的输出(值域)等价类:

    R1={<a,b,c>:有三条边a、b和c的等边三角形}

    R2={<a,b,c>:有三条边a、b和c的等腰三角形}

    R3={<a,b,c>:有三条边a、b和c的不等边三角形}

    R4={<a,b,c>:三条边a、b和c的不构成三角形}

    四个弱一般等价类测试用例是:

    等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地

    由于a、b和c没有有效区间,则强一般等价类测试用例与弱一般等价类测试用例相同。

    考虑a、b和c的无效值产生的以下额外弱健壮等价类测试用例:

    等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地

    以下是额外强健壮等价类测试用例三维立方的一个“角”:

    等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地

    请注意,预期输出如何完备地描述无效输入值。

    等价类测试显然对用来定义类的等价关系很敏感。如果在输入定义域上定义等价类,则可以得到更丰富的测试用例集合。三个整数a、b和c有些什么可能的取值呢?这些整数可以相等,有一对整数相等(有三种相等方式),或都不相等。

    D1={<a,b,c>:a=b=c},D2={<a,b,c>:a=b,a≠c},D3={<a,b,c>:a=c,a≠b}

    D4={<a,b,c>:b=c,a≠b},D5={<a,b,c>:a≠b,a≠c,b≠c}

    作为一个单独的问题,我们可以通过三角形的性质来判断三条边是否构成一个三角形。(例如,三元组<1,4,1>有一对相等的边,但是这些边不构成一个三角形。)

    D6={<a,b,c>:a≥b+c},D7={<a,b,c>:b≥a+c},D8={<a,b,c>:c≥a+b}

    如果我们要彻底一些,可以将“大于或等于”分解为两种不同的情况,这样D6就变成

    D6′={<a,b,c>:a=b+c},D6″={<a,b,c>:a>b+c},同样对于D7和D8也有类似的情况。

    列出等价类表,如下所示:

    等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地

    设计测试用例:输入顺序是[A,B,C],如下表所示:

    等价类划分法(弱一般等价类等划分方法) - kevinbest0702 - kevinbest0702的知识天地

    请记住,等价分配的目标是把可能的测试用例组合缩减到仍然足以满足软件测试需求为止。因为,选择了不完全测试,就要冒一定的风险,所以必须仔细选择分类。

    关于等价分配的最后一点要注意的是,这样做有可能不客观。科学有时也是一门艺术。测试同一个复杂软件的两个测试人员,可能会制定出两组不同的等价区间。只要审查等价区间的人认为它们都足以覆盖测试对象就可以了。

    3.EditBox

    • 允许1到6个英文字符或数字,按OK结束
    • 有效等价类和无效等价类
    有效等价类 无效等价类
    E1:长度:1到6 T1:长度:0,7
    E2:字符:a-z,A-Z,0-9 T2:字符:英文、数字以外字符,控制字符,标点符号

    测试用例设计,根据有效和无效等价类可以设计出6个测试用例

      
    编号 输入 预期输出
    Test1  daiA93  有效
    Test2 daiwenjing 无效
    Test3 @123 无效
    Test4 123回车键 无效
    Test5 (空) 无效
    Test6 123,45 无效

    想实现编码的,可参照博文http://www.cnblogs.com/dengye/p/4356777.html,只需简单修改即可。

    4.个人想法

    等价类划分方法比较简单,工作量也小。但考虑到软件测试的健壮性,还是与边界值分析法结合更好,而且不是每一种软件测试都适合等价类划分法。如今我们没有实际在公司干过这一行,暂没有实际经验可以添加。

  • 相关阅读:
    Jenkins-maven项目的构建、部署
    配置管理规范-互联网配置管理特点
    Jenkins-权限控制
    Jira-角色和用户组
    Jira-权限管理
    bat命令生成目录树(包含或不包含文件夹)
    登录QQ出现R6030-CRT not initialized,安装QQ 9.2.0可解决
    pointofix快捷键
    卸载Windows的弹窗广告可尝试使用“广告清道夫”
    激活Windows10专业工作站版
  • 原文地址:https://www.cnblogs.com/dulun/p/4357233.html
Copyright © 2011-2022 走看看