Promueve la idea de que el código debería ser perfecto y que no deberían existir errores
Definitivamente no. Promueve la idea de que tus pruebas no deben fallar, nada más y nada menos. Asumir que tener pruebas (incluso muchas de ellas) dice algo sobre "perfecto" o "sin errores" es una falacia. Decidir qué tan superficial o profunda deberían ser sus pruebas es una parte importante de escribir buenas pruebas, y la razón por la que tenemos categorías de pruebas separadas (pruebas de "unidad", pruebas de integración, "escenarios" en el sentido del pepino, etc.).
Es un desincentivo pensar en pruebas unitarias que fallarán. O, sin duda, realizar pruebas unitarias que serían difíciles de arreglar.
En el desarrollo guiado por pruebas, es obligatorio que todas las pruebas unitarias falle primero, antes de comenzar a codificar. Se llama "ciclo rojo-verde" (o "ciclo rojo-verde-refactor") por esta misma razón.
- Sin que la prueba falle, no sabe si la prueba realmente ha probado el código. Los dos podrían no estar relacionados en absoluto.
- Al cambiar el código a exactamente hacer que la prueba cambie de rojo a verde, nada más y nada menos, puede estar bastante seguro de que su código hace lo que se supone que debe hacer, y no una mucho más (que nunca podría necesitar).
Si en algún momento se superan todas las pruebas de unidad, entonces no hay un panorama general del estado del software en ningún momento. No hay una hoja de ruta / objetivo.
Las pruebas son más bien un micro-objetivo. En el desarrollo guiado por pruebas, el programador escribirá una prueba (singular) primero, y luego tendrá un objetivo claro para implementar algún código; luego la siguiente prueba, y así sucesivamente.
La función de las pruebas no debe estar completa antes de escribir el código.
Cuando se realiza correctamente, en un idioma y con una biblioteca de pruebas que se adapta bien a este enfoque, esto puede acelerar enormemente el desarrollo, ya que los mensajes de error (excepciones / stacktraces) pueden dirigir directamente al desarrollador hacia donde necesita. para realizar el trabajo siguiente.
Detiene la escritura de pruebas unitarias por adelantado, antes de la implementación.
No veo cómo esta declaración sería verdadera. Lo ideal es que las pruebas de escritura sean una parte de la implementación.
¿Me estoy perdiendo algo aquí? ¿Por qué las organizaciones esperan que todas las pruebas unitarias pasen?
Porque las organizaciones esperan que las pruebas tengan relevancia para el código. Escribir pruebas que sean exitosas significa que usted ha documentado alguna parte de su aplicación y ha probado que la aplicación hace lo que dice (la prueba). Nada más y nada menos.
Además, una parte muy importante de las pruebas es la "regresión". Desea poder desarrollar o refactorizar el nuevo código con confianza. Tener una gran cantidad de pruebas verdes te permite hacer eso.
Esto va desde el nivel organizativo hasta el psicológico. Un desarrollador que sabe que sus errores probablemente serán atrapados por las pruebas será mucho más libre para encontrar soluciones inteligentes y audaces para los problemas que necesita resolver. Por otro lado, un desarrollador que no tiene pruebas, después de algún tiempo, se quedará paralizado (debido al miedo) porque nunca sabe si un cambio que hace rompe el resto de la aplicación.
¿No es esto vivir en un mundo de sueños?
No. Trabajar con una aplicación basada en pruebas es pura alegría, a menos que simplemente no te guste el concepto por cualquier motivo ("más esfuerzo", etc., etc.) que podamos analizar en otra pregunta.
¿Y realmente no impide una comprensión real del código?
Absolutamente no, ¿por qué?
Encontrará muchos proyectos grandes de código abierto (para los que la gestión de la "comprensión" y los conocimientos técnicos sobre el código es un tema muy importante) que utilizan las pruebas como la documentación principal del software, aparte de Al ser pruebas, también se proporcionan ejemplos reales, funcionales y sintácticamente correctos para los usuarios o desarrolladores de la aplicación / biblioteca. Esto a menudo funciona espléndidamente.
Obviamente, escribir malas pruebas es malo. Pero eso no tiene nada que ver con la función de las pruebas en sí.