Quelle est la différence entre un cas de bord, un cas de coin, un cas de base et un cas limite?

86

Je ne parle pas anglais Dans ma langue maternelle, je connais certains termes utilisés pour faire référence à la condition vérifiée pour arrêter une récursion et à la condition vérifiée pour des cas extrêmes, improbables ou super simples. En anglais, j'ai rencontré les termes "bord cas", "coin cas", "frontière cas" et "base cas", mais je ne peux pas vraiment comprendre les différences et lesquelles sont utilisées pour désigner quoi; J'aimerais avoir un résumé des différences entre eux.

En particulier, je serais très heureux si quelqu'un pouvait fournir des annotations pour les lignes de l'exemple de code suivant:

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

Je pense que c'est:

  1. Verification sanitaire
  2. Contrôle d'entrée
  3. Cas limite? Cas particulier? Affaire de coin?
  4. Cas de base? Boundary case?
  5. Affaire de coin? Cas particulier?
Chêne
la source
4
Je crois que bord et frontière sont généralement les mêmes. Mais ils font référence à des tests et non à la vérification des conditions dans le code.
Richard
@ Richard Test ne code pas? Ce n'est pas ce que je comprends - avez-vous une référence pour soutenir le fait que vous pensez que ces termes ne s'appliquent pas au code?
Brad Thomas

Réponses:

94

Je ne parle pas anglais non plus. Mais selon Wikipedia:

  • Le cas de bord se produit à un paramètre de fonctionnement extrême (maximum ou minimum).
  • Le cas du coin se situe en dehors des paramètres de fonctionnement normaux , en particulier lorsque plusieurs variables ou conditions d'environnement sont simultanément à des niveaux extrêmes, même si chaque paramètre se situe dans la plage spécifiée pour ce paramètre . (Le terme "paramètres de fonctionnement en dehors de la normale" signifie évidemment quelque chose comme "combinaison en dehors des paramètres de fonctionnement typiques", et non pas strictement "paramètres de fonctionnement en dehors autorisés". En d'autres termes, vous vous trouvez toujours dans l'espace de paramètres valide, mais près de son coin.)
  • Le cas limite se produit lorsque l'une des entrées est au niveau ou juste au-delà des limites maximale ou minimale.
  • Le cas de base est l'endroit où se termine la récursivité .

Ainsi, la nomenclature semble être totalement confuse, même si coin semble signifier quelque chose d'un peu différent (une combinaison de valeurs) que les cas d'arêtes et de limites, qui sont définitivement synonymes. Il est probablement prudent de dire que les cas de bord, de coin et de limite sont la même chose dans le langage courant. Quelqu'un pourrait vouloir dire une chose différente pour chacun d'eux, mais il n'y a pratiquement pas d'accord commun.

Vos 1) et 2) sont ce que vous avez écrit, 3) est un cas limite / frontière, 4) est un cas de base et 5) est un cas spécial.

Joonas Pulakka
la source
C'est une réponse très utile pour comprendre les concepts derrière chaque mot technique.
Jignesh Fadadu
25

Quelles que soient les différences entre les mots, ce que vous utiliseriez pour décrire un test dépend de la sémantique (sens) du test, et non du code exact. Dans l'exemple fourni, la signification de chacun des tests n'est pas claire. A part ça, voici comment je les comprends:

  • Vérification de la santé mentale = Est-ce que cela a du sens? Par exemple, si votre application ne génère que des entiers sqrt(-1)et si elle log(-1)n’est pas définie.
  • Contrôle d'entrée = Teste l'entrée utilisateur, par opposition à une structure de données interne ou à la sortie d'une fonction. Par exemple, dans Bash [ $# -gt 0 ]vérifie que vous avez au moins un paramètre d'entrée, qui peut également être un contrôle de cohérence pour une commande comme findou mail.
  • Contrôle de bord / limite = L' entrée maximum ou minimum qui devrait produire une sortie correcte . Par exemple, une fonction qui ajoute simplement un à un nombre aura une plage de fonctionnement allant de <MIN_INT> à <MAX_INT> - 1, car une entrée inférieure à <MIN_INT> ne peut pas être fournie par l'utilisateur et une sortie supérieure à <MAX_INT>. ne sera pas utile.
  • Contrôle de cas de coin = Contrôle de limite plus complexe (un coin est une limite à deux dimensions), par exemple en combinant <MIN_INT> et <MAX_INT> dans un calcul.
  • Vérification de cas spécial = Valeurs spéciales non évidentes, non limites , par exemple log(1 + the smallest floating point number).
l0b0
la source
Un nit non sophistiqué: logₑ-1 est iπ. En python,import cmath; assert(cmath.log(-1) == 3.141592653589793j)
Bob Stein