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?

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.


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) .

Niewymyślnym nit: logₑ-1 jest iπ. W pythonimport cmath; assert(cmath.log(-1) == 3.141592653589793j)
— Bob Stein
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.