在最近的一个问题(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. T1
和T2
中的任意变量绑定。
在各种答案中,提出了不同的实现(基于隐式/显式术语遍历)。在评论中提出了一些警告和提示,反例也是如此。
所以我的问题是:如何测试候选实施?有些蛮力的做法?还是更聪明的东西?
无论如何,请分享lt/2
的自动测试机器!这是为了更大的利益!
答案 0 :(得分:1)
有两种测试策略:验证和验证。
验证:测试始终相同。首先,您需要指定要测试的内容。其次,您需要实现您想要测试的内容。
然后从实现中提取代码执行路径。对于规范中的每个代码执行路径,您可以得到所需的结果。
然后编写组合每个执行路径和所需结果的测试用例。不仅要测试正路径,还要测试负路径。
如果你的代码是递归的,理论上你有无限多的执行路径。
但您可能会发现子递归或多或少与另一个已经提出的测试用例相同。因此,在许多情况下,您也可以使用有限集进行测试。
验证可以让您放心。
验证:您可以使用一些正式的方法从规范中获得实现的正确性。
验证为您提供100%的保证。