Qual è la differenza tra una custodia perimetrale, una custodia ad angolo, una custodia di base e una custodia perimetrale?


86

Non sono di 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 semplicissimi. In inglese, ho incontrato i termini "caso limite", "caso angolare", "caso limite" e "caso base", ma non riesco a capire bene le differenze e che è usato per riferirsi a cosa; Mi piacerebbe avere un riepilogo 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);
    }

Penso che sia:

  1. Controllo sanitario
  2. Controllo di input
  3. Caso limite? Custodia per bordi? Custodia ad angolo?
  4. Caso base? Caso limite?
  5. Custodia ad angolo? Custodia per bordi?

4
Credo che margine e confine siano generalmente gli stessi. Ma si riferiscono al test, non al controllo delle condizioni nel codice.
Richard,

@Richard Test non codifica? Non è la mia comprensione - hai un riferimento a supporto del fatto che ritieni che questi termini non si applichino al codice?
Brad Thomas,

Risposte:


94

Non sono neanche un madrelingua inglese. Ma secondo Wikipedia:

  • Il caso limite si verifica con un parametro operativo estremo (massimo o minimo).
  • Il caso d'angolo si verifica al di fuori dei normali parametri operativi , in particolare quando più variabili o condizioni ambientali si trovano contemporaneamente a livelli estremi, anche se ciascun parametro rientra nell'intervallo specificato per quel parametro . (I "parametri operativi normali esterni" significano ovviamente qualcosa come "combinazione tipica esterna dei parametri operativi", non strettamente "parametri operativi consentiti esterni". Cioè, sei ancora all'interno dello spazio dei parametri valido, ma vicino al suo angolo.)
  • Il caso limite si verifica quando uno degli ingressi è pari o appena oltre i limiti massimo o minimo.
  • Il caso base è dove termina la ricorsione .

Quindi, la nomenclatura sembra essere totalmente confusa, anche se il caso angolare sembra significare qualcosa di un po 'diverso (una combinazione di valori) rispetto ai casi limite e limite, che sono sicuramente sinonimi. Probabilmente è sicuro dire che i casi limite, angolare e limite sono la stessa cosa nel discorso comune. Qualcuno potrebbe voler dire dire cose diverse 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.


Questa è una risposta molto utile per comprendere i concetti dietro ogni parola tecnica.
Jignesh Fadadu,

25

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 significhi ciascuno dei test. A parte questo, ecco come li capisco:

  • Sanity check = Ha senso? Ad esempio, se l'applicazione genera solo numeri interi sqrt(-1)e log(-1)non sono definiti.
  • Controllo input = Verifica l'input dell'utente, al contrario di una struttura di dati interna o dell'output di una funzione. Ad esempio, in Bash [ $# -gt 0 ]verifica di avere almeno un parametro di input, che potrebbe anche essere un controllo di integrità per un comando come findo mail.
  • Controllo Edge / Boundary = input massimo o minimo che dovrebbe produrre output corretto . Ad esempio, una funzione che aggiunge semplicemente uno a un numero avrà un intervallo operativo da <MIN_INT> a <MAX_INT> - 1, poiché l'input inferiore a <MIN_INT> non può essere fornito dall'utente e l'output maggiore di <MAX_INT> non sarà utile.
  • Controllo caso angolo = Un controllo limite 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 al limite , ad esempio log(1 + the smallest floating point number).

Un nit non sofisticato: logₑ-1 è iπ. In pitone,import cmath; assert(cmath.log(-1) == 3.141592653589793j)
Bob Stein,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.