エッジケース、コーナーケース、ベースケース、境界ケースの違いは何ですか?


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
エッジと境界は一般的に同じだと思います。ただし、コード内の条件をチェックするのではなく、テストを参照します。
リチャード

@Richard Testingはコードではありませんか?それは私の理解ではありません-これらの用語はコードに適用されないと信じているという事実をサポートする参照がありますか?
ブラッドトーマス

回答:


94

私もネイティブスピーカーではありません。しかし、ウィキペディアによると:

  • エッジケース、極端な(最大または最小)動作パラメーターで発生します。
  • コーナーケースは通常の動作パラメーターの外で発生します。特に、各パラメーターがそのパラメーターに指定された範囲内にあるにもかかわらず、複数の環境変数または条件が同時に極端なレベルにある場合に発生します。(「通常の動作パラメータの外側」とは、厳密には「許容される動作パラメータの外側」ではなく、「動作パラメータの典型的な組み合わせの外側」のようなものです。
  • 境界の場合、入力の1つが上限または下限を超えている場合に発生します。
  • 基本ケースは、再帰が終了する場所です。

したがって、コーナーケースは、エッジと境界のケースとは少し異なるもの(値の組み合わせ)を意味しているように見えますが、これらは間違いなく同義語です。エッジ、コーナー、境界のケースは、一般的なスピーチでは同じことであると言うのはおそらく安全です。誰かがそれぞれ別のことを言うこともできますが、共通の合意はほとんどありません。

あなたの1)と2)はあなたが書いたもの、3)はエッジ/境界のケース、4)はベースケース、5)は特別なケースです。


これは、各専門用語の背後にある概念を理解するのに非常に役立つ答えです。
Jignesh Fadadu

25

単語の違いに関係なく、テストを記述するために使用するものは、正確なコードではなく、テストのセマンティクス(意味)に依存します-例では、各テストの意味が明らかではありません。それはさておき、ここに私がそれらを理解する方法があります:

  • 健全性チェック= これは理にかなっていますか?たとえば、アプリケーションは整数のみを出力した場合、sqrt(-1)およびlog(-1)定義されていません。
  • 入力チェック= 何らかの内部データ構造または関数の出力とは対照的に、ユーザー入力をテストします。たとえば、Bashでは、[ $# -gt 0 ]少なくとも1つの入力パラメーターを取得したことを確認します。これは、findまたはなどのコマンドの健全性チェックでもありますmail
  • エッジ/境界チェック= 正しい出力を生成することが期待される最大または最小入力。たとえば、数値に1を加算するだけの関数は、<MIN_INT>から<MAX_INT>-1までの動作範囲を持ちます。これは、<MIN_INT>より小さい入力をユーザーが提供できず、<MAX_INT>より大きい出力を出力できるためです。役に立ちません。
  • コーナーケースチェック=より複雑な境界チェック(コーナーは2次元境界)。たとえば、計算で<MIN_INT>と<MAX_INT>を組み合わせます。
  • 専用ケースチェック=非明らかに、非境界特別な値例えば、log(1 + the smallest floating point number)

洗練されていないnit:logₑ-1はiπです。Pythonでimport cmath; assert(cmath.log(-1) == 3.141592653589793j)
ボブスタイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.