Quali sono le differenze tra un caso limite, un caso angolo, un caso base e un caso limite?

71

Non sono un madrelingua inglese. Nella mia lingua madre sono a conoscenza di alcuni termini usati per riferirsi alla condizione controllata per fermare una ricorsione, e alla condizione controllata per casi estremi, improbabili o super-semplici. In inglese, ho incontrato i termini "edge case", "corner case", "boundary case" e "base case", ma non riesco a capire le differenze e che è usato per riferirsi a cosa; Mi piacerebbe avere qualche riassunto delle differenze tra di loro.

In particolare, sarei molto felice se qualcuno potesse fornire annotazioni per le righe nel seguente esempio di codice:

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

I penso è:

  1. Controllo Sanity
  2. Controllo input
  3. Caso limite? Edge case? Caso d'angolo?
  4. caso base? Caso limite?
  5. Caso d'angolo? Edge case?
posta Oak 16.12.2011 - 14:47
fonte

2 risposte

80

Non sono nemmeno un madrelingua inglese. Ma secondo Wikipedia:

  • Edge case si verifica con un parametro operativo estremo (massimo o minimo).
  • Caso d'angolo si verifica al di fuori dei normali parametri operativi , in particolare quando più variabili o condizioni ambientali sono simultaneamente a livelli estremi, anche se ogni parametro rientra nell'intervallo specificato per quel parametro . (I "parametri operativi normali esterni" ovviamente indicano qualcosa come "al di fuori della tipica combinazione di parametri operativi", non strettamente "all'esterno dei parametri operativi consentiti". Cioè, sei ancora nello spazio parametrico valido, ma vicino al suo angolo.)
  • Caso limite si verifica quando uno degli input è o appena oltre i limiti massimi o minimi.
  • Il caso base è dove Ricorsione termina.

Quindi, la nomenclatura sembra essere totalmente confusa, anche se il caso d'angolo sembra significare qualcosa di un po 'diverso (una combinazione di valori) rispetto a casi limite e limite, che sono sicuramente sinonimi. Probabilmente è sicuro dire che i casi limite, angolo e limite sono la stessa cosa nel linguaggio comune. Qualcuno potrebbe voler dire qualcosa di diverso da ognuno di loro, ma non c'è quasi nessun accordo comune.

I tuoi 1) e 2) sono ciò che hai scritto, 3) è un caso limite / limite, 4) è un caso base, e 5) è un caso speciale.

    
risposta data 16.12.2011 - 14:58
fonte
24

Indipendentemente dalle differenze tra le parole, ciò che useresti per descrivere un test dipende dalla semantica (significato) del test, non dal codice esatto - Nell'esempio fornito non è ovvio cosa significano ciascuno dei test. A parte questo, ecco come li capisco:

  • Sanity check = Questo ha senso? Ad esempio, se la tua applicazione produce solo interi, sqrt(-1) e log(-1) non sono definiti .
  • Controllo input = verifica l'input dell'utente, al contrario di una struttura dati interna o l'output di una funzione. Ad esempio, in Bash [ $# -gt 0 ] controlla di avere almeno un parametro di input, che potrebbe anche essere un controllo di integrità per un comando come find o mail .
  • Controllo bordo / limite = L'ingresso massimo o minimo che si prevede produca l'output corretto . Ad esempio, una funzione che aggiunge solo uno a un numero avrà un intervallo operativo compreso tra < MIN_INT > a < MAX_INT > - 1, poiché l'input è inferiore a < MIN_INT > non può essere fornito dall'utente e ha un'uscita maggiore di < MAX_INT > non sarà utile.
  • Controllo del caso d'angolo = Un controllo di confine più complesso (un angolo è un confine bidimensionale), ad esempio combinando < MIN_INT > e < MAX_INT > in un calcolo.
  • Controllo caso speciale = valori speciali non ovvi, non limitati , ad esempio log(1 + the smallest floating point number) .
risposta data 16.12.2011 - 15:24
fonte

Leggi altre domande sui tag