¿Cuál es la diferencia entre un caso de borde, un caso de esquina, un caso de base y un caso de límite?

70

No soy un hablante nativo de inglés. En mi idioma nativo, soy consciente de algunos términos que se usan para referirse a la condición verificada para detener una recursión, y a la condición verificada para casos extremos, improbables o súper simples. En inglés, he encontrado los términos "caso de borde", "caso de esquina", "caso de límite" y "caso base", pero no puedo entender las diferencias y cuál se usa para referirse a qué; Me encantaría obtener un resumen de las diferencias entre ellos.

En particular, estaría muy contento si alguien pudiera proporcionar anotaciones para las líneas en el siguiente ejemplo de código:

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

Yo pienso es:

  1. control de cordura
  2. Comprobación de entrada
  3. caso límite? ¿Caso extremo? ¿Caso de la esquina?
  4. Caso base? Caso de límites?
  5. caso de la esquina? Caso de borde?
pregunta Oak 16.12.2011 - 14:47

2 respuestas

78

Tampoco soy un hablante nativo de inglés. Pero según Wikipedia:

  • caso de Edge se produce en un parámetro de operación extremo (máximo o mínimo).
  • Caso de esquina se produce fuera de los parámetros operativos normales , específicamente cuando hay múltiples variables o condiciones ambientales están simultáneamente en niveles extremos, aunque cada parámetro se encuentre dentro del rango especificado para ese parámetro . (Los "parámetros operativos normales externos" obviamente significan algo como "una combinación típica de parámetros operativos externos", no estrictamente "parámetros operativos permitidos externos". Es decir, todavía se encuentra dentro del espacio de parámetros válidos, pero cerca de su esquina.)
  • Caso de límites se produce cuando una de las entradas se encuentra en o justo por encima de los límites máximo o mínimo.
  • Caso base es donde Recursión termina.

Por lo tanto, la nomenclatura parece estar totalmente confundida, aunque el caso de esquina parece significar algo un poco diferente (una combinación de valores) que los casos de borde y límite, que definitivamente son sinónimos. Probablemente sea seguro decir que los casos de bordes, esquinas y límites son lo mismo en el lenguaje común. Alguien podría querer decir algo diferente por cada uno de ellos, pero casi no hay un acuerdo común.

Su 1) y 2) son lo que escribió, 3) es un caso de borde / límite, 4) es un caso base, y 5) es un caso especial.

    
respondido por el Joonas Pulakka 16.12.2011 - 14:58
24

Independientemente de las diferencias entre las palabras, lo que utilizaría para describir una prueba depende de la semántica (significado) de la prueba, no del código exacto. En el ejemplo, no es obvio qué significa cada una de las pruebas Aparte de eso, así es como los entiendo:

  • Comprobación de validez = ¿Tiene esto sentido? Por ejemplo, si su aplicación solo genera números enteros, sqrt(-1) y log(-1) no están definidos .
  • Comprobación de entrada = Prueba la entrada del usuario, a diferencia de alguna estructura de datos interna o la salida de una función. Por ejemplo, en Bash [ $# -gt 0 ] comprueba que tienes al menos un parámetro de entrada, que también podría ser una comprobación de validez para un comando como find o mail .
  • Comprobación de borde / límite = La entrada máxima o mínima que se espera produzca la salida correcta . Por ejemplo, una función que solo agrega uno a un número tendrá un rango operativo de < MIN_INT > a < MAX_INT > - 1, ya que la entrada es menor que < MIN_INT > no puede ser proporcionado por el usuario y tiene una salida mayor que < MAX_INT > no será útil.
  • Comprobación de caso de esquina = Una comprobación de límite más compleja (una esquina es un límite bidimensional), por ejemplo combinando < MIN_INT > y < MAX_INT > en un cálculo.
  • Comprobación de casos especiales = No obvio, sin límite valores especiales , por ejemplo log(1 + the smallest floating point number) .
respondido por el l0b0 16.12.2011 - 15:24

Lea otras preguntas en las etiquetas