Teoría
Existe una idea errónea de que las pruebas unitarias son para probar "unidades" .
Las pruebas unitarias, así como todas las demás pruebas, prueban la funcionalidad . Simplemente no se puede probar nada más.
Sin embargo, la funcionalidad de un sistema complejo a menudo no se puede probar de manera efectiva.
Digamos que un usuario presiona el botón "Eliminar" y no sucede nada. ¿Por qué? Un error puede estar dentro de una base de datos, una conexión puede estar rota, una lógica central puede funcionar mal, o incluso una operación puede tener éxito pero la interfaz no se actualizó correctamente. Cada capa puede contener muchas funciones que se llaman entre sí, y no siempre está claro dónde está el error.
Las pruebas unitarias se basan en un paradigma de separar componentes y probarlos individualmente.
Una vez más, no garantiza que todo el sistema funcione, pero simplifica las pruebas.
TDD no es un requisito en sí mismo. Simplifica la codificación al obligar a un desarrollador a responder primero, "¿qué voy a codificar realmente?".
Costos
Muchos piensan que al no escribir exámenes, ahorran su tiempo. Incorrecto. Pensando estratégicamente, el costo de un error aumenta exponencialmente con el tiempo desde la aparición hasta la detección.
Supongamos que comete un error en su código y lo detecta y corrige el mismo día. El costo es de $ X .
Supongamos que el error no se detecta y pasa a la compilación interna semanal. Afortunadamente, el control de calidad lo detectó, provocó un error en el rastreador de errores, el tema fue objeto de una discusión de 5 minutos en una reunión de 5 personas, etc. Finalmente, lo solucionó. El costo es la suma de la mano de obra gastada por todos, y puede ser $ 3 * X en este caso.
¿Qué pasa si el error fue a la prueba beta e involucra a más personas? Digamos Vamos, $ 10 * X .
Si permanece sin ser detectado durante mucho tiempo, acudió a 1,000 clientes (¡con suerte, no a un millón!), 10 de ellos lo detectaron, plantearon una discusión con su personal de soporte, algunos pueden llamar a su jefe, sus compañeros de equipo intentan reproducirlo , etc., etc. Finalmente, el error regresa a usted y lo arregla. ¿Cuánto en total? Así más de $ 50 * X .
Como puede ver, tarde o temprano un error volverá a usted (o su colega). La única diferencia es cuándo sucede y cuánto costaría.
Las pruebas unitarias acortan el ciclo de vida de los errores y, por lo tanto, reducen los costos.
Pro
- Las pruebas unitarias permiten al desarrollador codificar mejor . Tan simple como eso.
- Te dejan ahorrar tu tiempo;
- Disminuyen los costos;
- Las pruebas unitarias conviven con el código que prueban. Ante cualquier solicitud de cambio (que ocurre todo el tiempo), las pruebas se adaptarán.
Contras
Puedo ver una sola excusa para no escribir exámenes. Si está escribiendo un prototipo, por ejemplo, algo que nunca irá a las otras personas. O tal vez estás escribiendo algo para un solo uso.