Actualmente estoy leyendo dos libros excelentes "Trabajando eficazmente con código heredado" y "Código limpio".Refactorización y desarrollo impulsado por prueba
Me están haciendo pensar en la forma en que escribo y trabajo con código de formas completamente nuevas, pero uno de sus temas es el desarrollo basado en pruebas y la idea de sofocar todo con pruebas y realizar pruebas antes de realizar un cambio o implementar una nueva pieza de funcionalidad.
Esto ha dado lugar a dos preguntas:
Pregunta 1: Si estoy trabajando con el código heredado. De acuerdo con los libros, debería poner pruebas para asegurar que no estoy rompiendo nada. Considera que tengo un método de 500 líneas de largo. Asumiría que tendré un conjunto de métodos de prueba equivalentes para probar ese método. Cuando divido esta función, ¿creo nuevas pruebas para cada nuevo método/clase que resulte?
De acuerdo con "Código de limpieza", cualquier prueba que lleve más de 1/10 de segundo es una prueba que lleva demasiado tiempo. Tratando de probar un método antiguo de 500 líneas que va a las bases de datos y sabe Dios qué más podría tomar más de 1/10 de segundo. Si bien entiendo que necesitas romper las dependencias, lo que estoy teniendo problemas es la creación de la prueba inicial.
Pregunta 2: ¿Qué sucede cuando el código se vuelve a factorizar tanto que estructuralmente ya no se parece al código original (nuevos parámetros agregados/eliminados a métodos, etc.). ¿De esto se desprendería que las pruebas necesitarán volver a factorizar también? En ese caso, ¿podría alterar la funcionalidad del sistema mientras permite que las pruebas sigan pasando? ¿Las pruebas de refactorización son una medida apropiada para hacer en esta circunstancia?
Si bien está bien seguir con las suposiciones, me preguntaba si hay algún pensamiento/sugerencia sobre estos asuntos de una experiencia colectiva.
refactorización es la conservación del comportamiento - impuesto por sus pruebas. Entonces, si cambias el comportamiento a través de tus modificaciones, ya no estás refactorizando. Para el código heredado, agrega pruebas que actúan como un vicio para mantener el SUT en su lugar mientras mejora el diseño hacia la capacidad de prueba. Estas pruebas pueden ser lentas ... la guía de 0.1s es para pruebas de microtests/unit. La razón de esa directriz es que podría tener miles de pruebas tan pequeñas ... si toman 0.1 cada una, podría estar esperando mucho tiempo cada vez que las ejecute. – Gishu