使用PICT进行测试,但测试用例不完整
问题描述:
我正在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";
我随机得到这会导致一个等边三角形的值。我如何确保在正确的代码中也有这些值?
答
试试这个:
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";
的原因是,你的逻辑案件之间的重叠,你要明确你的条件,比如有针对每一种情况下只有一个结果。上面的例子工作;我验证了它。祝你好运!
答
您必须使用无条件限制(不变量)这是在PICT中可用。
在这种情况下,必须替换该行
IF (([Side1] = [Side2]) AND ([Side2] = [Side3]) AND ([Side3] = [Side1])) THEN [Type] = "equilateral";
与这一个:
[Side1] = [Side2] and [Side2] = [Side3] and [Side3] = [Side1];
因此生成的测试集将包含至少1等边三角形。
谢谢你的回答,但有2个问题为什么这不起作用。首先,如果这条线是真的,我想'类型'改变,但这不会发生。其次,通过添加这条线,这些条件必须是真实的,所以其他两种类型不会发生。这就是为什么:“不变式声明一个域的** ALWAYS-VALID **限制”。 – Kyra 2015-04-09 08:43:31