No puedo contar el número de veces que leo declaraciones en la línea de "las pruebas unitarias son una fuente muy importante de documentación del código bajo prueba". No niego que sean ciertas.
Pero personalmente no me he encontrado usándolos como documentación, nunca. Para los marcos típicos que uso, las declaraciones de métodos documentan su comportamiento y eso es todo lo que necesito. Y supongo que la unidad prueba la copia de seguridad de todo lo que se indica en esa documentación, más probablemente algunas cosas más internas, por lo que, por un lado, duplica la ducumentación, mientras que por el otro puede agregar algo más que es irrelevante.
Entonces la pregunta es: ¿cuándo se usan las pruebas unitarias como documentación? Cuando los comentarios no cubren todo? ¿Por desarrolladores que extienden la fuente? ¿Y qué exponen que puede ser útil y relevante que la documentación en sí no puede exponer?
fuente
Respuestas:
NO son una documentación de referencia ABSOLUTA
Tenga en cuenta que gran parte de lo siguiente también se aplica a los comentarios, ya que pueden desincronizarse con el código, como las pruebas (aunque es menos exigible).
Entonces, al final, la mejor manera de entender el código es tener un código de trabajo legible .
Si es posible y no se escriben secciones de código de bajo nivel cableadas o condiciones particularmente complicadas, la documentación adicional será crucial.
PERO TODAVÍA son un complemento de documentación ÚTIL
Sin embargo, cuando tengo dudas sobre lo que hace una clase en particular, especialmente si es bastante larga, oscura y falta de comentarios (ya sabes el tipo ...), trato de encontrar rápidamente su (s) clase (s) de prueba y compruebo:
Además, si se escriben usando un estilo BDD , dan una definición bastante buena del contrato de la clase . Abra su IDE (o use grep) para ver solo nombres de métodos y tada: tiene una lista de comportamientos.
Las regresiones y los errores también necesitan pruebas
Además, es una buena práctica escribir pruebas de regresión y de informes de errores: arreglas algo, escribes una prueba para reproducir el caso. Al mirar hacia atrás, es una buena manera de encontrar el informe de error relevante y todos los detalles sobre un problema anterior, por ejemplo.
Yo diría que son un buen complemento para la documentación real, y al menos un recurso valioso a este respecto. Es una buena herramienta, si se usa correctamente. Si comienzas a probar temprano en tu proyecto y lo conviertes en un hábito, PODRÍA ser una muy buena documentación de referencia. En un proyecto existente con malos hábitos de codificación que ya huelen la base del código, trátelos con cuidado.
fuente
Una interpretación es que las pruebas unitarias son "documentación ejecutable". Puede ejecutar las pruebas unitarias contra el código y le dirá si todavía está funcionando como cuando las pruebas se escribieron para aprobar, o no. De esa manera, la unidad prueba el "documento" de la funcionalidad del sistema en algún momento, de forma ejecutable.
Por otro lado, también rara vez he leído el código de prueba de la unidad como "documentación" para comprender la funcionalidad. Una prueba de una sola unidad es demasiado localizada, específica y abstracta para poder decirle mucho sobre el sistema real que está detrás de la clase que se está probando.
fuente
Si por documentación quiere decir que quiero algo para descubrir cómo funciona el código , las pruebas unitarias son pequeños ejemplos perfectos de cómo funcionan las unidades del código en los casos esperados , de borde y de error (también conocidos como errores ). Además, sus pruebas podrían crearse antes de que se escriba el código, lo que subyace a lo que debe hacer el código desde el punto de vista comercial / de requisitos.
¿Están reemplazando la documentación? No.
¿Son una adición útil a la documentación? Sí.
fuente
Veo pruebas unitarias como:
Hasta cierto punto, pueden verse como un complemento de una documentación existente, pero no como la documentación.
fuente
Voy a responder tu pregunta preguntándote otra.
¿Con qué frecuencia al trabajar con una nueva API / rutina ha ayudado a buscar un ejemplo de código de lo que está tratando de usar? ¿No puede cambiar a google para buscar en línea muestras de código?
Eso es exactamente cuando usaría pruebas unitarias como documentación.
Sospecho que hay bastantes razones por las que las pruebas unitarias no tienden a usarse como documentación, aunque podrían ser un excelente complemento para la documentación más tradicional:
fuente
TL; las pruebas de unidad DR y los comentarios de API son complementarios: algunas cosas se describen mejor en código y otras en prosa.
Las pruebas unitarias son principalmente útiles para documentar casos especiales y condiciones de borde que son difíciles (y engorrosos) de describir en los comentarios de la API. Además, los comentarios de la API generalmente se dirigen a las personas que desean utilizar la API.
Si desea modificar el código, generalmente hay mucho más que necesita saber, y algo de eso es difícil de poner en los comentarios (y estos comentarios quedan obsoletos rápidamente). En ese caso, una prueba unitaria también funciona como documentación.
Un ejemplo: tiene un método m
(a, b)
que realiza un cierto cálculo. Debido a los requisitos de compatibilidad con versiones anteriores, debe incluir entradas de casos especiales dea=0
ya=-1
, pero solo sib
es NULL. Poner eso en un comentario es complicado, detallado y es probable que quede obsoleto si el requisito se elimina más adelante.Si realiza algunas pruebas unitarias que verifican el comportamiento de
m(0, NULL)
,m(-1, x)
obtiene varios beneficios:fuente