在提出了边界值测试以后为什么还要提出等价类测试?自相琢磨一下边界值测试的问题。
第一:边界值测试的测试用例过分冗余。举个例子来说,三角形问题假设每个边的范围是[1,200],肯定会至少存在如下的三个测试用例:<1,1,1>和<100,100,100>还肯定会有<200,200,200>,看到这三个测试用例我们自然会很敏感的想到,这三个测试用例的数据特点决定了这三个测试用例应该是走的一样的流程,也就是说后两个测试用例应该不会比第一个测试用例再测出什么新的问题来。所以这三个测试用例至少存在两个是冗余的。
第二:测试的完备性。也就是说测试用例是不是能够覆盖到所有的情况上来。仔细考虑一下三角形边界值取值{不考虑最坏情况的边界值测试,因为不是单缺陷假设},所产生的测试用例是否覆盖了"不等边三角形"这种情况。答案是显然的,边界值测试在测试的完备性上也是有问题的。
因此基于上述所阐述的情况之下,提出了等价类测试。
通过上述的第一个阐述,应该可以建立起一个等价类的初步印象,我们试图将所有的测试用例划分成不同的等价类,利用每个等价类中的一个测试用例来代表这个等价类中的其他所有测试用例。如一所述<1,1,1>、<100,100,100>、<200,200,200>可以认为是一组等价类,我们只要用一个测试用例就可以取代这一组类中所有的测试用例了。
在阐述等价类的几种测试模型之前,先搞清楚两个概念:强/弱, 一般/健壮
在等价类测试当中,强指的是多缺陷假设,而弱指的是单缺陷假设,前者表明了一个笛卡尔乘积的概念
在等价类测试当中,一般指的就是正常值,即不需要考虑异常者,而健壮性则刚好相反。
弱一般等价类测试(单缺陷假设,不讨论异常区域)
![20110310_b9d6a2b9606d8ed16a3fz6inDKUyFnvs.jpg](http://file.itpub.net/attachment/day_110310/20110310_b9d6a2b9606d8ed16a3fz6inDKUyFnvs.jpg)
1.jpg
如上图所示,很显然,横坐标分为三个等价类[a,b]、[b,c]、[c,d],而纵坐标分为二个等价类[g,f]、[f,e],其中 大于g小于“e”和大于“d”小于“a”的区域称为异常区域。再结合这个模型的名字来考虑,弱一般等价类,首先弱说明这是个单缺陷假设,所以不需要进行笛卡尔积的测试,第二方面是一般性的等价类,也就是说不会测试异常区域。下面我们来看下三个红点所代表的意义(从左往右),第一个红点测试了[a,b]和[e,f]区域,而第二个红点测试了[g,f]和[b,c]两个等价类区域,经过这两个测试用例很显然还有一个等价类区域没有进行测试,那就是[c,d]区域,为了测试这个区域我们便有了第三个红点,这个红点在[f,e]或者[g,f]区域都没有关系,因为他主要测试的是[c,d]这个域。这便是弱一般等价类测试的用例数,一共三个。
强一般等价类(多缺陷假设 不考虑异常区域)
![20110310_88dff33a4f56695f1e8bXH5qvZ7j3urk.jpg](http://file.itpub.net/attachment/day_110310/20110310_88dff33a4f56695f1e8bXH5qvZ7j3urk.jpg)
2.jpg
注意强代表笛卡尔乘积。
弱健壮等价类(单缺陷,要考虑异常区域)
![20110310_5f03ef0c9bd4142f72bdg4pqmPVnb50W.jpg](http://file.itpub.net/attachment/day_110310/20110310_5f03ef0c9bd4142f72bdg4pqmPVnb50W.jpg)
3.jpg
类比与弱一般等价类测试,对比理解。
则最后一个 强健壮等价类测试,不难理解,肯定是如下的图,一个全笛卡尔乘积。
![20110310_811f44e1b13b5f40870d8DXeM6fxDj8C.jpg](http://file.itpub.net/attachment/day_110310/20110310_811f44e1b13b5f40870d8DXeM6fxDj8C.jpg)
4.jpg
如上述所示,等价类测试的四种基本模型已经阐述完毕,最后用一个例子来阐述一下:
问题是:确定下一天是什么时间的一个函数nextDay()函数的测试.{1810~2019年}
我们可以化成下面的一个等价类:
Ma={月份:每月30天} Mb={月份:每月31天} Mc={月份:此月是2月}
D1={日期:1<=日期<=28} D2={日期:日期=29天} D3={日期:日期=30} D4={日期:日期=31}
Y1={年:年=2000}, Y2={年:年=平年}, Y3={年:年=闰年}
如此划分的等价类,通过上述的模型,强一般等价类会产生36个测试用例,明显小于边界值测试。
当然,你也可以通过其他的方式来划分等价类,不同的划分产生的等价类的数目是显然不一致的,所以对测试工程师的要求比较高一点.带来的好处是完备性和简洁性.
等价类测试的几点注意:
1、等价类测试的弱形式一般不如对应的强形式的测试全面。
2、如果语言是强类型的,异常值会引发错误,则无必要采用健壮形式。
3、如果错误条件非常重要,则进行健壮形式测试是合适的
4、如果输入数据以离散值区间和集合定义,则等价类测试是合适的。
5、在发现"合适"的等价关系之前,可能要进行多次尝试。
6、强和弱形式等价类测试之间的区别,有助于区别累进测试和回归测试。
等价类的关键就是寻找"等价类"!!!
第一:边界值测试的测试用例过分冗余。举个例子来说,三角形问题假设每个边的范围是[1,200],肯定会至少存在如下的三个测试用例:<1,1,1>和<100,100,100>还肯定会有<200,200,200>,看到这三个测试用例我们自然会很敏感的想到,这三个测试用例的数据特点决定了这三个测试用例应该是走的一样的流程,也就是说后两个测试用例应该不会比第一个测试用例再测出什么新的问题来。所以这三个测试用例至少存在两个是冗余的。
第二:测试的完备性。也就是说测试用例是不是能够覆盖到所有的情况上来。仔细考虑一下三角形边界值取值{不考虑最坏情况的边界值测试,因为不是单缺陷假设},所产生的测试用例是否覆盖了"不等边三角形"这种情况。答案是显然的,边界值测试在测试的完备性上也是有问题的。
因此基于上述所阐述的情况之下,提出了等价类测试。
通过上述的第一个阐述,应该可以建立起一个等价类的初步印象,我们试图将所有的测试用例划分成不同的等价类,利用每个等价类中的一个测试用例来代表这个等价类中的其他所有测试用例。如一所述<1,1,1>、<100,100,100>、<200,200,200>可以认为是一组等价类,我们只要用一个测试用例就可以取代这一组类中所有的测试用例了。
在阐述等价类的几种测试模型之前,先搞清楚两个概念:强/弱, 一般/健壮
在等价类测试当中,强指的是多缺陷假设,而弱指的是单缺陷假设,前者表明了一个笛卡尔乘积的概念
在等价类测试当中,一般指的就是正常值,即不需要考虑异常者,而健壮性则刚好相反。
弱一般等价类测试(单缺陷假设,不讨论异常区域)
![20110310_b9d6a2b9606d8ed16a3fz6inDKUyFnvs.jpg](http://file.itpub.net/attachment/day_110310/20110310_b9d6a2b9606d8ed16a3fz6inDKUyFnvs.jpg)
1.jpg
如上图所示,很显然,横坐标分为三个等价类[a,b]、[b,c]、[c,d],而纵坐标分为二个等价类[g,f]、[f,e],其中 大于g小于“e”和大于“d”小于“a”的区域称为异常区域。再结合这个模型的名字来考虑,弱一般等价类,首先弱说明这是个单缺陷假设,所以不需要进行笛卡尔积的测试,第二方面是一般性的等价类,也就是说不会测试异常区域。下面我们来看下三个红点所代表的意义(从左往右),第一个红点测试了[a,b]和[e,f]区域,而第二个红点测试了[g,f]和[b,c]两个等价类区域,经过这两个测试用例很显然还有一个等价类区域没有进行测试,那就是[c,d]区域,为了测试这个区域我们便有了第三个红点,这个红点在[f,e]或者[g,f]区域都没有关系,因为他主要测试的是[c,d]这个域。这便是弱一般等价类测试的用例数,一共三个。
强一般等价类(多缺陷假设 不考虑异常区域)
![20110310_88dff33a4f56695f1e8bXH5qvZ7j3urk.jpg](http://file.itpub.net/attachment/day_110310/20110310_88dff33a4f56695f1e8bXH5qvZ7j3urk.jpg)
2.jpg
注意强代表笛卡尔乘积。
弱健壮等价类(单缺陷,要考虑异常区域)
![20110310_5f03ef0c9bd4142f72bdg4pqmPVnb50W.jpg](http://file.itpub.net/attachment/day_110310/20110310_5f03ef0c9bd4142f72bdg4pqmPVnb50W.jpg)
3.jpg
类比与弱一般等价类测试,对比理解。
则最后一个 强健壮等价类测试,不难理解,肯定是如下的图,一个全笛卡尔乘积。
![20110310_811f44e1b13b5f40870d8DXeM6fxDj8C.jpg](http://file.itpub.net/attachment/day_110310/20110310_811f44e1b13b5f40870d8DXeM6fxDj8C.jpg)
4.jpg
如上述所示,等价类测试的四种基本模型已经阐述完毕,最后用一个例子来阐述一下:
问题是:确定下一天是什么时间的一个函数nextDay()函数的测试.{1810~2019年}
我们可以化成下面的一个等价类:
Ma={月份:每月30天} Mb={月份:每月31天} Mc={月份:此月是2月}
D1={日期:1<=日期<=28} D2={日期:日期=29天} D3={日期:日期=30} D4={日期:日期=31}
Y1={年:年=2000}, Y2={年:年=平年}, Y3={年:年=闰年}
如此划分的等价类,通过上述的模型,强一般等价类会产生36个测试用例,明显小于边界值测试。
当然,你也可以通过其他的方式来划分等价类,不同的划分产生的等价类的数目是显然不一致的,所以对测试工程师的要求比较高一点.带来的好处是完备性和简洁性.
等价类测试的几点注意:
1、等价类测试的弱形式一般不如对应的强形式的测试全面。
2、如果语言是强类型的,异常值会引发错误,则无必要采用健壮形式。
3、如果错误条件非常重要,则进行健壮形式测试是合适的
4、如果输入数据以离散值区间和集合定义,则等价类测试是合适的。
5、在发现"合适"的等价关系之前,可能要进行多次尝试。
6、强和弱形式等价类测试之间的区别,有助于区别累进测试和回归测试。
等价类的关键就是寻找"等价类"!!!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11379785/viewspace-690509/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11379785/viewspace-690509/