Jaka jest różnica między obudową krawędzi, obudową narożną, obudową podstawową i obudową brzegową?

86

Nie jestem rodzimym językiem angielskim. W moim ojczystym języku zdaję sobie sprawę z niektórych terminów odnoszących się do warunku sprawdzonego w celu zatrzymania rekurencji oraz warunku sprawdzonego pod kątem ekstremalnych, mało prawdopodobnych lub bardzo prostych przypadków. W języku angielskim spotkałem się z terminami „przypadek na krawędzi”, „przypadek na rogu”, „przypadek na granicy” i „przypadek podstawowy”, ale nie potrafię do końca zrozumieć różnic i które są używane w odniesieniu do czego; Chciałbym uzyskać podsumowanie różnic między nimi.

W szczególności byłbym bardzo szczęśliwy, gdyby ktoś mógł dostarczyć adnotacje do wierszy w poniższym przykładzie kodu:

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

Myślę, że to:

  1. Kontrola poczytalności
  2. Kontrola wejścia
  3. Przypadek graniczny? Edge case? Narożna skrzynka?
  4. Podstawa? Przypadek graniczny?
  5. Narożna skrzynka? Edge case?
Dąb
źródło
4
Wierzę, że krawędź i granica są ogólnie takie same. Ale odnoszą się one do testowania, a nie do sprawdzania warunków w kodzie.
Richard
@Richard Testowanie nie kod? Nie rozumiem tego - czy masz odniesienie na poparcie faktu, że uważasz, że te warunki nie dotyczą kodu?
Brad Thomas

Odpowiedzi:

94

Nie jestem też native speakerem angielskiego. Ale według Wikipedii:

  • Przypadek zbocza występuje przy ekstremalnym (maksymalnym lub minimalnym) parametrze roboczym.
  • Przypadek narożny występuje poza normalnymi parametrami roboczymi , szczególnie gdy wiele zmiennych środowiskowych lub warunki znajdują się jednocześnie na ekstremalnych poziomach, mimo że każdy parametr znajduje się w określonym zakresie dla tego parametru . („Poza normalnymi parametrami roboczymi” oczywiście oznacza coś w rodzaju „poza typową kombinacją parametrów operacyjnych”, a nie ściśle „poza dozwolonymi parametrami roboczymi”. Oznacza to, że nadal znajdujesz się w prawidłowej przestrzeni parametrów, ale blisko jej rogu.)
  • Przypadek granicy występuje, gdy jedno z danych wejściowych znajduje się na poziomie lub powyżej maksymalnych lub minimalnych limitów.
  • Przypadek podstawowy to miejsce, w którym kończy się Rekurencja .

Tak więc nomenklatura wydaje się całkowicie zagmatwana, chociaż wielkość liter w rogu wydaje się oznaczać coś innego (połączenie wartości) niż przypadki krawędzi i granic, które są zdecydowanie synonimami. Prawdopodobnie bezpiecznie jest powiedzieć, że przypadki krawędzi, narożników i granic są takie same we wspólnej mowie. Ktoś może chcieć powiedzieć coś innego przez każdego z nich, ale prawie nie ma wspólnej zgody.

Twoje 1) i 2) są tym, co napisałeś, 3) jest przypadkiem krawędzi / granicy, 4) jest przypadkiem podstawowym, a 5) jest przypadkiem specjalnym.

Joonas Pulakka
źródło
To bardzo przydatna odpowiedź do zrozumienia pojęć kryjących się za każdym słowem technicznym.
Jignesh Fadadu
25

Niezależnie od różnic między słowami to, czego użyjesz do opisania testu, zależy od semantyki (znaczenia) testu, a nie dokładnego kodu - w podanym przykładzie nie jest oczywiste, co oznacza każdy z testów. Poza tym oto jak je rozumiem:

  • Kontrola poczytalności = Czy to w ogóle ma sens? Na przykład, jeśli aplikacja wyświetla tylko liczby całkowite sqrt(-1)i log(-1)jest niezdefiniowana.
  • Kontrola wejścia = Testuje dane wejściowe użytkownika, w przeciwieństwie do wewnętrznej struktury danych lub danych wyjściowych funkcji. Na przykład podczas [ $# -gt 0 ]sprawdzania Bash , że masz co najmniej jeden parametr wejściowy, który może być również sprawdzeniem poprawności dla polecenia takiego jak findlub mail.
  • Kontrola zbocza / granicy = maksymalne lub minimalne dane wejściowe, które mają zapewnić prawidłowy wynik . Na przykład funkcja, która dodaje jeden do liczby, będzie miała zakres działania od <MIN_INT> do <MAX_INT> - 1, ponieważ użytkownik nie może wprowadzić danych mniejszych niż <MIN_INT>, a wyjść większych niż <MAX_INT> nie będą przydatne.
  • Sprawdzanie wielkości liter w rogu = bardziej złożona kontrola granic (narożnik jest dwuwymiarową granicą), na przykład łączenie <MIN_INT> i <MAX_INT> w obliczeniach.
  • Sprawdzenie przypadku specjalnego = na przykład nieoczywiste, nieograniczone wartości specjalnelog(1 + the smallest floating point number) .
l0b0
źródło
Niewymyślnym nit: logₑ-1 jest iπ. W pythonimport cmath; assert(cmath.log(-1) == 3.141592653589793j)
Bob Stein