No soy un hablante nativo de inglés. En mi idioma nativo, conozco algunos términos que se usan para referirse a la condición marcada para detener una recurrencia, y a la condición marcada para casos extremos, improbables o súper simples. En inglés, he encontrado los términos "caso de borde", "caso de esquina", "caso límite" y "caso base", pero no puedo entender las diferencias y cuál se usa para referirme a qué; Me encantaría obtener un resumen de las diferencias entre ellos.
En particular, estaría muy feliz 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 creo que es:
- Prueba de cordura
- Comprobación de entrada
- Caso límite? ¿Caso extremo? Caso de la esquina?
- ¿Caso base? Caso límite?
- Caso de la esquina? ¿Caso extremo?
terminology
Roble
fuente
fuente
Respuestas:
Tampoco soy un hablante nativo de inglés. Pero según Wikipedia:
Entonces, 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 borde, esquina y límite son lo mismo en el habla común. Alguien podría 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.
fuente
Independientemente de las diferencias entre las palabras, lo que usaría para describir una prueba depende de la semántica (significado) de la prueba, no del código exacto. En el ejemplo proporcionado, no es obvio qué significa cada una de las pruebas. Aparte de eso, así es como los entiendo:
sqrt(-1)
ylog(-1)
no están definidos.[ $# -gt 0 ]
verifica que haya obtenido al menos un parámetro de entrada, que también podría ser una verificación de cordura para un comando comofind
omail
.log(1 + the smallest floating point number)
.fuente
import cmath; assert(cmath.log(-1) == 3.141592653589793j)