一旦我可以悬赏,我将放弃 100 分,给第一个发明测试用例的海报,打破了我将命题逻辑语句规范化为析取范式的常规。我将省略代码,因为它很长,无论如何您都可以将例程视为黑匣子。
形式是析取范式,当它是文字(p
, NOT p
)的析取时:实际上,这与 CNF 是对偶的。例子:
(NOT p AND q AND r) OR s OR (NOT t)
p OR q
p OR q OR r OR s OR t
p AND q
p AND q AND r
p
NOT p
尽管
p AND (q OR r)
p OR (q AND (r OR s))
NOT (p AND q)
不在DNF中。
至于我自己提出的测试用例,我可以将它们分为
- 使用 DNF 中已有的简单公式进行冒烟测试,例如:
p
,NOT p
,(p AND q) or r
; - 的情况下
.. AND (..OR..)
,与和或“交换”;例如,p AND (q OR r)
的 dnf 可以是(p AND q) OR (p AND r)
; - 在树中的路径上有两次相同的运算符,即。
.. OR ( .. AND ( .. OR .. ))
; - 特别是,中间没有其他运算符
.. OR ( .. OR .. )
; - 在公式的不同位置有多个否定,
... NOT NOT p
,NOT NOT (.. AND ..)
; - 看起来更像一棵树的公式,
(.. OR ..) AND (.. AND ..)
而不仅仅是一个列表p AND (q AND (r AND ...))
; - 其中运算符有两个以上的操作数
(...) AND (p OR q OR r OR s)
。
完成这些测试后,我对代码进行了一些简单的更改。显然我破坏了代码,因为套件失败了。虽然这意味着我的测试对我有帮助,但让我担心的是只有我的一项测试发现了问题。这只是一个测试用例,如果我没有,我会错过一个错误。那么有多少错误我什至没有一次测试呢?
那么,什么是一些好的测试用例呢?