测试“安全术语顺序”谓词

时间:2015-05-07 12:27:05

标签: testing prolog iso-prolog

在最近的一个问题(How to define (and name) the corresponding safe term comparison predicates in ISO Prolog?)中,@ false要求执行术语排序谓词lt/2,这是ISO内置(@<)/2的一种变体。

lt(T1,T2)的真值是稳定的w.r.t. T1T2中的任意变量绑定。

在各种答案中,提出了不同的实现(基于隐式/显式术语遍历)。在评论中提出了一些警告和提示,反例也是如此。

所以我的问题是:如何测试候选实施?有些蛮力的做法?还是更聪明的东西?

无论如何,请分享lt/2的自动测试机器!这是为了更大的利益

1 个答案:

答案 0 :(得分:1)

有两种测试策略:验证验证

验证:测试始终相同。首先,您需要指定要测试的内容。其次,您需要实现您想要测试的内容。

然后从实现中提取代码执行路径。对于规范中的每个代码执行路径,您可以得到所需的结果。

然后编写组合每个执行路径和所需结果的测试用例。不仅要测试正路径,还要测试负路径。

如果你的代码是递归的,理论上你有无限多的执行路径。

但您可能会发现子递归或多或少与另一个已经提出的测试用例相同。因此,在许多情况下,您也可以使用有限集进行测试。

验证可以让您放心。

验证:您可以使用一些正式的方法从规范中获得实现的正确性。

验证为您提供100%的保证。