三角形的等价划分 问题:根据下面给出的规格说明,利用等价类划分的方法,给出足够的测试用例。“一个程序读入3个整数,把这三个数值看做一个三角形的3条边的长度值。这个程序要打印出信息,说明这个三角形是不等边的、是等腰的、还是等边的。
我们都知道,组成三角形的条件是:三条边必须大于零,并且任意两边之和大于第三边。
我们来做一个假设,设三条边是:A、B、C。请看这是组成三角形的条件: A>0,B>0,C>0,A+B>C,A+C>B,B+C>A。来看看不能的吧:A<=0, B<=0,C<=0, B+C<=A, A+B<=C, A+C<=B。呵呵,完全相反的两个条件。
我们将能组成三角形的三个数分为一类,而不能的也分为一类。 现在回到测试用例上来,到底这个等价划分和测试用例有什么关系呢?如果有关系又是怎么体现的呢?
我们说判断一个三角形是不等边的或者等腰的或者是等边的,首先要判断的是三条边能不能组成三角形——等价划分。我们这里的用例设计也是按等价划分来实现的。
组成三角形的三边,要满足:A>0,B>0,C>0,A+B>C,A+C>B,B+C>A;
以上的条件要同时满足,既与的关系,所以在用例设计的时候,要同时满足这几个条件,比如:A=3 B=4 C=5,A=4 B=5 C=6,A=5 B=6 C=7。 以上这几个用例因为同时都满足组成三角形的条件,所以我们说它是等价的。因此,我们在设计用例的时候,如果是等价条件的用例,我们可以只取其中一个就可以了。
非组成三角形的三边,只要满足:A<=0,B<=0,C<=0, B+C<=A, A+B<=C, A+C<=B其中的一个条件就成立,条件是或的关系,我们的用例可以划分为六个等价类,既A<=0 B<=0,C<=0, B+C<=A, A+B<=C, A+C<=B各有一个用例所以我们的用列可以是:
A=-1 B=1 C=2,(A<=0),
A=1 B=-1 C=2,(B<=0),
A=1 B=2 C=-1,(C<=0),
A=1 B=2 C=8,(A+B<=C),
A=1 B=8 C=2,(A+C<=B),
A=8 B=2 C=1,(B+C<=A),
接下来看看等腰三角形和等边三角型的情况,组成这两中三角形的前提要满足成为三角形的条件+自身特点的条件。
等腰三角形:(A>0,B>0,C>0,A+B>C,A+C>B,B+C>A)+有两条边相等。:(A>0,B>0,C>0,A+B>C,A+C>B,B+C>A)&&(A=B)&&(B=C)&&(A=C);
既是或的关系,我们把它等价划分就是:
1 (A>0,B>0,C>0,A+B>C,A+C>B,B+C>A)||(A=B)
2 (A>0,B>0,C>0,A+B>C,A+C>B,B+C>A)||(C=B)
3 (A>0,B>0,C>0,A+B>C,A+C>B,B+C>A)||(A=C)
所以我们的用例用三个就可以了:
A=4 B=4 C=5 (1)
A=5 B=4 C=4 (2)
A=4 B=5 C=4 (3)
等边三角形:(A>0,B>0,C>0,A+B>C,A+C>B,B+C>A)||(A=B)|| (B=C)||(A=C)。以为是与的关系,所以我们的用例就用
A=5 B=5 C=5 或者 A=6 B=6 C=6 (但它们是等价的,只取一个)
相反的如果要证明他们不是等腰三角形或者不是等边三角形,那么等价划分的用例的个数就和上面的完全相反,等腰三角形的个数是一个,而等边的是三个因为:
非等腰三角形:
A> 0,B>0,C>0,A+B>C,A+C>B,B+C>A)||(A!=B||(B!=C)||(A!=C)
非等边三角形:
A>0,B>0,C>0,A+B>C,A+C>B,B+C>A)&&(A!=B)&&(B!=C)&&(A!=C)
我个人认为,等价划分可以用与或的关系来表达,因为“与”是要同时满足的,而“或”分两个或者更多的条件,可以再进行等价划分,直到划分为简单的“与”或者“与”||“与”的关系。
这里留个问题给大家,也是我的疑问,还是上面的题目
假设条件是:
A>0,B>0,C>0,A+B>C,A+C>B,B+C>A)&&(A=B)&&(B=C)
那么用例 (A=4 B=4 C= 5)和(A=4 B=5 C=5 )是不是等价的呢?
以上观点只是个人对等价划分的一些粗浅的认识,欢迎大家来讨论和学习。