testing - DNF规范化测试用例 : break my code with your test case

标签 testing boolean-logic

<分区>

一旦我可以悬赏,我将放弃 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 中已有的简单公式进行冒烟测试,例如:pNOT 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 pNOT NOT (.. AND ..);
  • 看起来更像树的公式 (.. OR ..) AND (.. AND ..) 而不仅仅是列表 p AND (q AND (r AND . ..));
  • 其中运算符有两个以上的操作数 (...) AND (p OR q OR r OR s)

完成这些测试后,我对代码做了一些简单的更改。显然我破坏了代码,因为套件失败了。虽然这意味着我的测试对我有帮助,但让我担心的是只有一个测试发现了问题。那只是一个测试用例,如果我没有,我会错过一个错误。那么有多少 bug 我什至连一次测试都没有?

那么,什么是好的测试用例?

最佳答案

考虑使用 Fuzz testing .

1) 生成随机语句“((A AND B) OR B)”并将它们传递给您的 DNF 标准化器。 2) 遍历输入的所有可能值 (AB=00, 01, 11, 10),在评估原始表达式和简化后的答案时测试答案。 3)如果发现任何不好的结果,请大声提示。

唯一棘手的一点是生成随机语句。我会用递归来做。简单的第一遍看起来像这样:

gen_one: return one of "A", "B", "NOT A", "NOT B"
gen_op: return one of "AND", "OR", "NOR", "NAND"
genstatement:
  if rand < 10%
    return gen_one()
  else
    return "(" + genstatement() + gen_op + genstatement() + ")"

关于testing - DNF规范化测试用例 : break my code with your test case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16223311/

相关文章:

testing - 从 test_helper 编译失败

android - 如何自动化游戏应用程序?

php - 测试非 UTF-8 字符串

boolean-logic - 来自电路的 bool 方程

language-features - 使用 AND 或 && 有什么优点?

python - 如何在正则表达式中使用 bool OR

testing - 结构化 UAT 方法

c++ - 如何对卡诺图中的单元格进行分类

Mac 上 xcode 的 C++ bool 逻辑语法

.net - "Oh noes!"南希测试异常