2014-10-10 117 views
0

我正在PICT中测试三角形问题。我正在测试一个三角形是等边三角形,等腰三角形还是斜角三角形。问题是我从来没有得到等边三角形。使用PICT进行测试,但测试用例不完整

Side1:  5,6,7,8,9,10 
Side2:  5,6,7,8,9,10 
Side3:  5,6,7,8,9,10 
Type:   equilateral, isosceles, scalene 

IF (([Side1] = [Side2]) OR ([Side2] = [Side3]) OR ([Side3] = [Side1])) THEN [Type] = "isosceles" ELSE [Type] = "scalene"; 
IF (([Side1] = [Side2]) AND ([Side2] = [Side3]) AND ([Side3] = [Side1])) THEN [Type] = "equilateral"; 

但随意的事情是,当我改变的最后一行到

IF (([Side1] = [Side2]) AND ([Side2] = [Side3]) AND ([Side3] = [Side1])) THEN [Type] = "isosceles"; 

我随机得到这会导致一个等边三角形的值。我如何确保在正确的代码中也有这些值?

回答

1

试试这个:

Side1:  5,6,7,8,9,10 
Side2:  5,6,7,8,9,10 
Side3:  5,6,7,8,9,10 
Type:   equilateral, isosceles, scalene 

IF (([Side1] = [Side2] AND [Side2] <> [Side3]) OR ([Side2] = [Side3] AND [Side3] <> [Side1]) OR ([Side3] = [Side1] AND [Side1] <> [Side2])) THEN [Type] = "isosceles"; 
IF (([Side1] = [Side2]) AND ([Side2] = [Side3])) THEN [Type] = "equilateral"; 
IF ([Side1] <> [Side2] AND [Side2] <> [Side3] and [Side3] <> [Side1]) THEN [Type] = "scalene"; 

的原因是,你的逻辑案件之间的重叠,你要明确你的条件,比如有针对每一种情况下只有一个结果。上面的例子工作;我验证了它。祝你好运!

0

您必须使用无条件限制(不变量)这是在PICT中可用。

在这种情况下,必须替换该行

IF (([Side1] = [Side2]) AND ([Side2] = [Side3]) AND ([Side3] = [Side1])) THEN [Type] = "equilateral"; 

与这一个:

[Side1] = [Side2] and [Side2] = [Side3] and [Side3] = [Side1]; 

因此生成的测试集将包含至少1等边三角形。

参考文档细节:http://www.amibugshare.com/pict/help.html

+0

谢谢你的回答,但有2个问题为什么这不起作用。首先,如果这条线是真的,我想'类型'改变,但这不会发生。其次,通过添加这条线,这些条件必须是真实的,所以其他两种类型不会发生。这就是为什么:“不变式声明一个域的** ALWAYS-VALID **限制”。 – Kyra 2015-04-09 08:43:31