Was ist der Unterschied zwischen einem Kantenfall, einem Eckfall, einem Basisfall und einem Grenzfall?

86

Ich bin kein englischer Muttersprachler. In meiner Muttersprache sind mir einige Begriffe bekannt, die sich auf die Bedingung beziehen, die zum Stoppen einer Rekursion geprüft wurde, und auf die Bedingung, die für extreme, unwahrscheinliche oder sehr einfache Fälle geprüft wurde. Auf Englisch bin ich auf die Begriffe "Kantenfall", "Eckfall", "Grenzfall" und "Basisfall" gestoßen, aber ich kann die Unterschiede nicht ganz herausfinden, und was wird verwendet, um sich auf was zu beziehen; Ich würde gerne eine Zusammenfassung der Unterschiede zwischen ihnen bekommen.

Insbesondere würde ich mich sehr freuen, wenn jemand Anmerkungen für die Zeilen im folgenden Codebeispiel bereitstellen könnte:

    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);
    }

Ich denke es ist:

  1. Gesundheitsüberprüfung
  2. Eingabeprüfung
  3. Grenzfall? Edge-Fall? Eckkoffer?
  4. Basisfall? Grenzfall?
  5. Eckkoffer? Edge-Fall?
Eiche
quelle
4
Ich glaube, Rand und Grenze sind im Allgemeinen gleich. Sie beziehen sich jedoch auf das Testen und nicht auf das Überprüfen von Bedingungen im Code.
Richard
@ Richard Testing nicht Code? Ich verstehe das nicht. Haben Sie einen Verweis, der die Tatsache bestätigt, dass diese Begriffe Ihrer Meinung nach nicht für Code gelten?
Brad Thomas

Antworten:

94

Ich bin auch keine englische Muttersprachlerin. Aber laut Wikipedia:

  • Der Flankenfall tritt bei einem extremen (maximalen oder minimalen) Betriebsparameter auf.
  • Der Eckfall tritt außerhalb der normalen Betriebsparameter auf , insbesondere wenn sich mehrere Umgebungsvariablen oder -bedingungen gleichzeitig auf extremen Niveaus befinden, obwohl jeder Parameter innerhalb des für diesen Parameter angegebenen Bereichs liegt . ("Außerhalb der normalen Betriebsparameter" bedeutet offensichtlich etwas wie "Außerhalb der typischen Kombination von Betriebsparametern", nicht ausschließlich "Außerhalb der zulässigen Betriebsparameter". Das heißt, Sie befinden sich immer noch im gültigen Parameterbereich, aber in der Nähe seiner Ecke.)
  • Ein Grenzfall liegt vor, wenn sich einer der Eingänge an oder knapp über den Maximal- oder Minimalgrenzen befindet.
  • Base Fall ist , wo Rekursion endet.

Die Nomenklatur scheint also völlig verwirrt zu sein, obwohl der Eckfall etwas anderes zu bedeuten scheint (eine Kombination von Werten) als Rand- und Grenzfälle, die definitiv Synonyme sind. Es ist wahrscheinlich sicher zu sagen, dass Kanten-, Ecken- und Grenzfälle in der allgemeinen Sprache dasselbe sind. Jemand könnte bedeuten, von jedem etwas anderes zu sagen, aber es gibt kaum eine gemeinsame Vereinbarung.

Ihre 1) und 2) sind das, was Sie geschrieben haben, 3) ist ein Rand- / Grenzfall, 4) ist ein Basisfall und 5) ist ein Sonderfall.

Joonas Pulakka
quelle
Dies ist eine sehr nützliche Antwort, um die Konzepte hinter den einzelnen technischen Wörtern zu verstehen.
Jignesh Fadadu
25

Unabhängig von den Unterschieden zwischen den Wörtern hängt die Beschreibung eines Tests von der Semantik (Bedeutung) des Tests und nicht vom genauen Code ab. Davon abgesehen verstehe ich sie wie folgt:

  • Sanity Check = Ist das überhaupt sinnvoll? Zum Beispiel, wenn Ihre Anwendung nur Ganzzahlen ausgibt sqrt(-1)und log(-1)undefiniert ist.
  • Eingabeprüfung = Prüft die Benutzereingabe im Gegensatz zu einer internen Datenstruktur oder der Ausgabe einer Funktion. Beispielsweise wird in Bash [ $# -gt 0 ]überprüft, ob Sie mindestens einen Eingabeparameter haben, bei dem es sich auch um eine Sicherheitsüberprüfung für einen Befehl wie findoder handeln kann mail.
  • Edge / Boundary Check = Die maximale oder minimale Eingabe, bei der eine korrekte Ausgabe erwartet wird . Zum Beispiel hat eine Funktion, die nur eine zu einer Zahl hinzufügt, einen Betriebsbereich von <MIN_INT> bis <MAX_INT> - 1, da Eingaben kleiner als <MIN_INT> vom Benutzer nicht bereitgestellt und Ausgaben größer als <MAX_INT> ausgegeben werden können wird nicht nützlich sein.
  • Eckfallprüfung = Eine komplexere Grenzprüfung (eine Ecke ist eine zweidimensionale Grenze), zum Beispiel die Kombination von <MIN_INT> und <MAX_INT> in einer Berechnung.
  • Sonderfallprüfung = Zum Beispiel nicht offensichtliche, nicht grenzüberschreitende Sonderwertelog(1 + the smallest floating point number) .
l0b0
quelle
Ein ungekünsteltes nit: log 1-1 ist iπ. In Pythonimport cmath; assert(cmath.log(-1) == 3.141592653589793j)
Bob Stein