边缘情况,拐角情况,基础情况和边界情况之间有什么区别?


86

我不是英语母语人士。在我的母语中,我知道一些术语用来表示检查条件以停止递归,以及用于极端,不太可能或非常简单的情况的条件。在英语中,我遇到过“边缘情况”,“拐角情况”,“边界情况”和“基本情况”,但是我不太清楚它们之间的区别,以及用来指代什么。我很想总结一下它们之间的区别。

特别是,如果有人可以为以下代码示例中的行提供注释,我将非常高兴:

    int transmogrify(int n) {
1.      assert(n <= 1000000);
2.      if (n < 0) return -1;
3.      if (n == 1000000) return PRE_CALC;
4.      if (n == 0) return n+1;            // For stopping the recursion
5.      if (n == 1251) return 3077;
        return transmogrify(n-1);
    }

认为是:

  1. 完整性检查
  2. 输入检查
  3. 边界情况?边缘情况?角箱?
  4. 基本情况?边界情况?
  5. 角箱?边缘情况?

4
我相信边缘和边界通常是相同的。但是它们指的是测试,而不是检查代码中的条件。
理查德

@理查德测试不是代码?那不是我的理解-您是否有参考资料来支持您认为这些术语不适用于代码的事实?
布拉德·托马斯

Answers:


94

我也不是说英语的人。但是根据维基百科:

  • 边缘情况发生在极限(最大或最小)操作参数下。
  • 极端情况发生在正常运行参数之外,特别是当多个环境变量或条件同时处于极端水平时,即使每个参数都在该参数的指定范围内。(“正常操作参数之外”显然意味着类似于“操作参数的典型组合之外”,而不是严格意义上的“允许的外部操作参数”。也就是说,您仍在有效参数空间之内,但在其角落附近。)
  • 当输入之一达到或刚好超过最大或最小限制时,就会发生边界情况
  • 基本情况递归结束的地方。

因此,术语命名似乎完全是混乱的,即使拐角处的情况似乎与边缘和边界处的情况有些不同(值的组合),这绝对是同义词。可以肯定地说边缘,拐角和边界情况在普通语言中是同一回事。可能每个人都说不同的话,但是几乎没有共识。

您的1)和2)是您编写的内容,3)是边缘/边界情况,4)是基本情况,5)是特例。


这对于理解每个技术词汇背后的概念非常有用。
Jignesh Fadadu '18 -10-17

25

无论单词之间有什么区别,用于描述测试的内容取决于测试的语义(含义),而不取决于确切的代码-在提供的示例中,每个测试的含义并不明显。除此之外,这就是我对它们的理解:

  • 健全性检查= 这是否还有意义?例如,如果您的应用程序仅输出整数,sqrt(-1)并且log(-1)未定义。
  • 输入检查=测试用户输入,而不是某些内部数据结构或函数的输出。例如,在Bash [ $# -gt 0 ]检查中,您至少有一个输入参数,这也可以是对诸如find或的命令的完整性检查mail
  • 边缘/边界检查= 期望产生正确输出最大或最小输入。例如,一个仅将数字加一个的函数的操作范围为<MIN_INT>到<MAX_INT>-1,因为用户无法提供小于<MIN_INT>的输入,而输出大于<MAX_INT>不会有用。
  • 拐角案例检查=更复杂的边界检查(拐角是二维边界),例如在计算中组合<MIN_INT>和<MAX_INT>。
  • 特殊情况检查= 例如,非显而易见的,非边界的特殊值log(1 + the smallest floating point number)

一个简单的尼特:logₑ-1是iπ。在python中,import cmath; assert(cmath.log(-1) == 3.141592653589793j)
Bob Stein
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.