Aspectos de buenas pruebas unitarias

Este artículo es una sinopsis del libro " Principios de las pruebas unitarias ".





Comencemos enumerando las propiedades de las buenas pruebas unitarias.





Primero. Integrado en el ciclo de desarrollo. Solo las pruebas que utiliza activamente son útiles; de lo contrario, no tiene sentido escribirlos.





Segundo. Solo se prueban las partes más importantes de su código. No todo el código de trabajo merece la misma atención.





Tercero. Proporcione la máxima protección contra errores con costos mínimos de mantenimiento. Para hacer esto, necesita poder reconocer pruebas efectivas y escribirlas.





Sin embargo, reconocer y redactar una prueba eficaz son dos habilidades diferentes. Y para adquirir la segunda habilidad, primero debes dominar la primera. El resto de este artículo le mostrará cómo reconocer una prueba eficaz. También se considerará la pirámide de pruebas y pruebas de acuerdo con el principio de "caja negra" / "caja blanca".





Cuatro aspectos de las buenas pruebas unitarias

Una buena prueba unitaria debe tener los siguientes atributos: protección contra errores, resistencia a la refactorización, retroalimentación rápida y facilidad de mantenimiento.





Estos cuatro atributos son fundamentales. Se pueden utilizar para analizar cualquier prueba automatizada, ya sea unitaria, de integración o de un extremo a otro.





Comencemos con el primer atributo de una buena prueba unitaria: protección contra errores. Un error (o regresión) es un error de software. Como regla general, estos errores ocurren después de realizar cambios en el código.





Cuanta más funcionalidad, mayor será la probabilidad de que agregue un error a la nueva versión. Por eso es tan importante desarrollar una buena protección contra errores. Sin dicha protección, será imposible o muy difícil asegurar el crecimiento del proyecto a largo plazo debido al número de errores en constante aumento.





Para evaluar el rendimiento de una prueba en términos de protección contra errores, considere lo siguiente:





  • la cantidad de código ejecutado por la prueba;





  • la complejidad de este código;





  • la importancia de este código en términos de lógica empresarial.





, ,  . ,   (assertions).





, -. , -, —  .





, .   - -.





- — . ,   .





.   : . —   .





. :  , , . , , . , .





?   .  - .   ,     .





:





  • ,   .   .   .





  •   . -,   . , .





?

, , .  , .  :  . — ,  , .





— , . , ,   . — ,   .





Higo.  1 - La prueba de la izquierda está relacionada con el comportamiento observado del SUT, no con los detalles de implementación.  Esta prueba es más resistente a la refactorización que la prueba de la derecha.
. 1 – SUT, . ,

- ( ) .   , . - :   ,   .





, .   ( ),   , ( ).





, , , :   ( ).





Higo.  2 - Relación entre la protección contra errores y la resistencia a la refactorización
. 2 -

, , .   : . .     — II .





, :  , . . .





: , . :





  • ( , );





  • ( , ).





. 3,   . — (),   . —  (), .





Higo.  3 - Fórmula de precisión de la prueba
. 3 –

:  

  -. ,   .  . , ,   ,  .





. :





  • . .   , .





  • . , , .





.   «» :   , .





  , .   , .





? , . , —  , —  . :   .





, . ,   . ,  , .





— (end-to-end) . .  ,  , .





, . , , ,  .  - , .





: . ,   , . .





—  . ,  .





Higo.  4 - Prueba trivial que cubre una simple pieza de código
. 4 - ,

, . , ,   .   - ,   .





-  , , . :   , .





Higo.  5 - Lugares que toman las pruebas en relación entre sí
. 5 – ,

— — , (end-to-end) . - ,   .   . ,  .





.   ; . , .  , ,   . .





,   ; .   .





Higo.  6 - Compensaciones entre los atributos de una buena prueba
. 6 –

?  :   , .  . ,   . ,   .





- CAP. ,   : (consistency) , (availability), (partition tolerance).





:





1. CAP ;





2.   . —  , , - Amazon — .     .





  : -, , .





.   . , . , .   .   ,   .





Higo.  7 - La pirámide de pruebas prescribe una cierta proporción de pruebas unitarias, de integración y de extremo a extremo.
. 7 - -,
Higo.  8 - Los diferentes tipos de pruebas en la pirámide toman diferentes decisiones con respecto a la retroalimentación rápida y la protección contra errores
. 8 -

. :   ; - — ;   - .





, –  . :   . ,   .





. - ,   -, — .   ;   , ,  (, ). CRUD-  - .





— API, (, ).   . , .   ,   — .





« » « »

« » .   . , , , .





« »  . . ,   .





Higo.  9 - Ventajas y desventajas de las pruebas de caja negra y caja blanca
. 9 - « » « »

,   : , .   « ». — , -, — « »  , -.   -, .





  • -





  • Aspectos de buenas pruebas unitarias





  • ¿Para qué sirven las pruebas de integración?








All Articles