Hace poco hice una pregunta sobre las pruebas en el desarrollo de juegos , esto es, por cierto, cómo supe de esto. Las respuestas allí señalaron algunas desventajas curiosas y específicas:
- Es costoso hacerlo cuando su código debe estar altamente acoplado .
- Es difícil hacerlo cuando debe conocer las diversas plataformas de hardware, cuando debe analizar la salida para el usuario y el resultado del código solo tiene sentido en un contexto más amplio .
- Las pruebas de UI y UX son muy difíciles .
- Y notablemente, las pruebas automatizadas pueden ser más caras y menos efectivas que un grupo de beta testers de muy bajo costo (o gratuitos) .
El cuarto punto me hace recordar alguna experiencia mía. Trabajé en una empresa muy delgada, orientada a XP, administrada por Scrum, donde las pruebas unitarias eran muy recomendables. Sin embargo, en su camino hacia un estilo más delgado y menos burocrático, la compañía simplemente descuidó la construcción de un equipo de control de calidad: no teníamos evaluadores. Con tanta frecuencia, los clientes encontraron errores triviales usando algunos sistemas, incluso con una cobertura de prueba de> 95%. Entonces agregaría otro punto:
- Las pruebas automatizadas pueden hacerle sentir que el control de calidad y las pruebas no son importantes.
Además, en esos días estaba pensando en la documentación y reflexioné sobre una hipótesis que puede ser válida (en menor medida) para las pruebas dos. Simplemente sentí que el código evoluciona tan rápido que es bastante difícil hacer documentación que siga esa velocidad, por lo que es más valioso pasar tiempo haciendo que el código sea legible que escribir documentación pesada y fácilmente obsoleta. (Por supuesto, esto no se aplica a las API, sino solo a la implementación interna). La prueba sufre un poco del mismo problema: puede ser demasiado lenta para escribir en comparación con el código probado. OTOH, es un problema menor porque las pruebas advierten que están desactualizadas, mientras que su documentación permanecerá en silencio siempre que no la vuelva a leer con mucho cuidado .
Finalmente, a veces encuentro un problema: las pruebas automatizadas pueden depender de las herramientas, y esas herramientas pueden estar mal escritas. Comencé un proyecto usando XUL hace algún tiempo y, hombre, es doloroso escribir pruebas unitarias para dicha plataforma. Comencé otra aplicación usando Objective-C, Cocoa y Xcode 3 y el modelo de prueba era básicamente un montón de soluciones.
Tengo otras experiencias sobre las desventajas de las pruebas automatizadas, pero la mayoría de ellas se enumeran en otras respuestas. No obstante, soy un defensor vehemente de las pruebas automatizadas. Esto ahorró mucho trabajo y dolor de cabeza y siempre lo recomiendo por defecto. Creo que esas desventajas son solo simples detalles en comparación con los beneficios de las pruebas automatizadas. (Es importante proclamar siempre su fe después de comentar herejías para evitar el auto da fé).