<分区>
一旦我可以悬赏,我将放弃 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) 或 r
;< .. AND (..OR..)
的案例,AND 和 OR“交换”;例如,p AND (q OR r)
的dnf可以是(p AND q) OR (p AND r)
;- 在树中的一条路径上有两次相同的运算符,即。
.. 或 ( .. AND ( .. 或 .. ))
; - 特别是,在
.. 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)
。
完成这些测试后,我对代码做了一些简单的更改。显然我破坏了代码,因为套件失败了。虽然这意味着我的测试对我有帮助,但让我担心的是只有一个测试发现了问题。那只是一个测试用例,如果我没有,我会错过一个错误。那么有多少 bug 我什至连一次测试都没有?
那么,什么是好的测试用例?