2014-10-10 142 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