Entre la gran cantidad de respuestas hasta ahora, nadie ha tocado el reparto de equivalencia y el análisis del valor límite , consideraciones vitales en la respuesta a la pregunta en cuestión. Todas las otras respuestas, aunque útiles, son cualitativas, pero es posible, y preferible, ser cuantitativas aquí. @fishtoaster proporciona algunas pautas concretas, solo asomándose bajo las coberturas de la cuantificación de la prueba, pero la división de equivalencia y el análisis del valor límite nos permiten hacerlo mejor.
En la partición de equivalencia , divide el conjunto de todas las entradas posibles en grupos según los resultados esperados. Cualquier entrada de un grupo producirá resultados equivalentes, por lo tanto, dichos grupos se denominan clases de equivalencia . (Tenga en cuenta que los resultados equivalentes no significan resultados idénticos).
Como un ejemplo simple, considere un programa que debería transformar los caracteres ASCII en minúsculas en caracteres en mayúsculas. Otros personajes deben sufrir una transformación de identidad, es decir, permanecer sin cambios. Aquí hay un posible desglose en clases de equivalencia:
| # | Equivalence class | Input | Output | # test cases |
+------------------------------------------------------------------------+
| 1 | Lowercase letter | a - z | A - Z | 26 |
| 2 | Uppercase letter | A - Z | A - Z | 26 |
| 3 | Non-alphabetic chars | 0-9!@#,/"... | 0-9!@#,/"... | 42 |
| 4 | Non-printable chars | ^C,^S,TAB... | ^C,^S,TAB... | 34 |
La última columna informa el número de casos de prueba si los enumera todos. Técnicamente, según la regla 1 de @ fishtoaster, incluiría 52 casos de prueba; todos los de las dos primeras filas indicadas anteriormente se incluyen en el "caso común". La regla 2 de @ fishtoaster agregaría también algunas o todas las filas 3 y 4 anteriores. Sin embargo, con la partición de equivalencia someter a prueba toda una caso de prueba en cada clase de equivalencia es suficiente. Si elige "a" o "g" o "w", está probando la misma ruta de código. Por lo tanto, tiene un total de 4 casos de prueba en lugar de 52+.
El análisis del valor límite recomienda un ligero refinamiento: esencialmente sugiere que no todos los miembros de una clase de equivalencia son, bueno, equivalentes. Es decir, los valores en los límites también deben considerarse dignos de un caso de prueba por derecho propio. (¡Una justificación fácil para esto es el infame error off-by-one !) Por lo tanto, para cada clase de equivalencia podría tener 3 entradas de prueba. Mirando el dominio de entrada anterior, y con cierto conocimiento de los valores ASCII, podría encontrar estas entradas de casos de prueba:
| # | Input | # test cases |
| 1 | a, w, z | 3 |
| 2 | A, E, Z | 3 |
| 3 | 0, 5, 9, !, @, *, ~ | 7 |
| 4 | nul, esc, space, del | 4 |
(Tan pronto como obtenga más de 3 valores límite que sugieran que tal vez quiera repensar sus delimitaciones de clase de equivalencia originales, pero esto fue lo suficientemente simple como para que no volviera a revisarlos). Por lo tanto, el análisis del valor límite nos lleva a solo 17 casos de prueba, con una alta confianza de cobertura completa, en comparación con 128 casos de prueba para realizar pruebas exhaustivas. (¡Sin mencionar que la combinatoria dicta que las pruebas exhaustivas son simplemente inviables para cualquier aplicación del mundo real!)