Me gusta esta pregunta Si no debe hacer esto aquí, ¿dónde puede hacer preguntas sobre recomendaciones de libros de programación?
guettli
Respuestas:
18
Personalmente, descubrí que leer un ensayo JUnit o dos enfatizando que "usted escribe la prueba antes del código" fue suficiente para comenzar.
La parte más importante para aprender esta tecnología es escribir MUCHO código basado en pruebas , porque debes cambiar algunas de las formas más básicas de pensar en escribir código. Cosas como:
Escribir la prueba antes del código te hace pensar por adelantado cómo invocarás tu código y recuperarás el resultado. Esto significa que primero diseñas la API en función de cómo la usarás. Esto frecuentemente resulta en una mejor API.
Su estilo de codificación cambiará porque NECESITARÁ pensar de manera más modular, para poder probar partes del código en lugar de solo todo.
También llegará a un punto en el que podrá extraer con confianza una parte importante e insertar una nueva parte en lugar de comportarse igual, porque su prueba pasó. Lo hice recientemente con una biblioteca de análisis de fechas, ya que el original era demasiado indulgente.
El mejor lugar para comenzar con poco, es con sus rutinas de servicios públicos. La próxima vez que necesite uno, simplemente diseñe eso con pruebas primero, escriba muchas pruebas que cubran todos sus casos de uso oficiales (incluido lo que debería suceder con valores nulos pasados, etc.), y cuando se implementen todos los casos de uso, debería poder usar directamente en su código, y tenga la seguridad de que funciona como se espera.
También es mi experiencia que las buenas pruebas pueden hacer un trabajo adicional como documentación, porque tiene un código muy conciso que dice exactamente cómo se comporta el código en diversas situaciones, lo que puede demostrarse fácilmente que es correcto (barra verde). Con comentarios cuidadosos no lo haces mucho mejor que eso.
Para Java, la versión 4 de jUnit es realmente agradable.
En mi opinión, TDD se trata más de hacer que el código sea comprobable que de escribir pruebas.
Claro que puede escribir una prueba antes de codificar, pero la razón por la que se escribe la prueba es para que pueda codificar, lo que no le impedirá escribir código que es difícil de probar.
Si está interesado en el concepto y desea obtener más información, simplemente comente, y lo guiaré en la dirección de una presentación grabada sobre el tema de Google.
Continúe y agregue el enlace de presentación de Google. Creo que el representante de Eric no permite comentar todavía.
ocodo
+1 @Slomojo: Cierto, así que vota la pregunta ... para empujarlo a más de 15 repeticiones si recuerdo correctamente. Voy a mirar alrededor para ver el video.
errores el
1
@blunders ... lo llevé a 11!
ocodo
+1 @Slomojo: para votar arriba, encontré y agregué el enlace a Google Tech Talk en mi respuesta. ¡Aclamaciones!
errores el
8
Además de algunos de los libros ya mencionados, puedo recomendar Crecer software orientado a objetos guiado por pruebas . Todavía no he terminado de leerlo, pero es una lectura digna, que incluye la historia de un proyecto TDD completo y realista, no solo ejemplos de código simplificado.
Creo que este es mi libro favorito y el que más afectó mi forma de trabajar, no solo sobre TDD sino también sobre Software Dev en general. También tengo que admitir que no leí muchos libros de TDD, así que tal vez no confíes tanto en mí.
El libro de Beck está bien considerado, pero no comencé con las pruebas unitarias hasta que leí "Marcos de prueba unitaria". Hago algo de TDD, pero también agrego pruebas al código anterior que tengo que mantener (cuando puedo).
Editar: Además, una vez que lo maneje, le recomiendo usarlo en un proyecto actual de inmediato. Para mí fue cuando ocurrió el verdadero aprendizaje, y creo que el libro "Unit Test Framework" fue un mejor libro de referencia para este propósito. (Estaba usando nunit con C #).
Si bien no se trata principalmente de TDD (aunque lo toca, así como el diseño para la comprobabilidad), The Art of Unit Testing es un libro que recomendaría porque le enseña a escribir buenas pruebas.
Más específicamente, enseña cómo crear pruebas confiables, mantenibles y legibles. Creo que esta es la sección más importante del libro, aparte de quizás lo básico sobre pruebas unitarias y marcos de aislamiento. Es obvio que si las pruebas unitarias se convierten en un punto de dolor o agregan fricción al trabajo de un desarrollador, entonces cualquier éxito o beneficio de ellas será limitado. Si uno invierte el tiempo y el esfuerzo para crear las pruebas, entonces (s) debería ser capaz de obtener el mayor rendimiento de esa inversión.
Respuestas:
Personalmente, descubrí que leer un ensayo JUnit o dos enfatizando que "usted escribe la prueba antes del código" fue suficiente para comenzar.
La parte más importante para aprender esta tecnología es escribir MUCHO código basado en pruebas , porque debes cambiar algunas de las formas más básicas de pensar en escribir código. Cosas como:
El mejor lugar para comenzar con poco, es con sus rutinas de servicios públicos. La próxima vez que necesite uno, simplemente diseñe eso con pruebas primero, escriba muchas pruebas que cubran todos sus casos de uso oficiales (incluido lo que debería suceder con valores nulos pasados, etc.), y cuando se implementen todos los casos de uso, debería poder usar directamente en su código, y tenga la seguridad de que funciona como se espera.
También es mi experiencia que las buenas pruebas pueden hacer un trabajo adicional como documentación, porque tiene un código muy conciso que dice exactamente cómo se comporta el código en diversas situaciones, lo que puede demostrarse fácilmente que es correcto (barra verde). Con comentarios cuidadosos no lo haces mucho mejor que eso.
Para Java, la versión 4 de jUnit es realmente agradable.
fuente
En mi opinión, TDD se trata más de hacer que el código sea comprobable que de escribir pruebas.
Claro que puede escribir una prueba antes de codificar, pero la razón por la que se escribe la prueba es para que pueda codificar, lo que no le impedirá escribir código que es difícil de probar.
Eche un vistazo a esto para tener una mejor idea de lo que quiero decir: mi teoría unificada de los errores
Si está interesado en el concepto y desea obtener más información, simplemente comente, y lo guiaré en la dirección de una presentación grabada sobre el tema de Google.
ACTUALIZAR:
Cómo escribir código limpio y comprobable
Miško Hevery presentando (por GoogleTechTalks ) en Google en Nueva York y patrocinado por el grupo de Ingeniería de Productividad de Google
fuente
Además de algunos de los libros ya mencionados, puedo recomendar Crecer software orientado a objetos guiado por pruebas . Todavía no he terminado de leerlo, pero es una lectura digna, que incluye la historia de un proyecto TDD completo y realista, no solo ejemplos de código simplificado.
fuente
He leído dos libros:
Desarrollo guiado por pruebas: por ejemplo, por Kent Beck y
Marcos de prueba de la unidad de Paul Hamil
El libro de Beck está bien considerado, pero no comencé con las pruebas unitarias hasta que leí "Marcos de prueba unitaria". Hago algo de TDD, pero también agrego pruebas al código anterior que tengo que mantener (cuando puedo).
Editar: Además, una vez que lo maneje, le recomiendo usarlo en un proyecto actual de inmediato. Para mí fue cuando ocurrió el verdadero aprendizaje, y creo que el libro "Unit Test Framework" fue un mejor libro de referencia para este propósito. (Estaba usando nunit con C #).
fuente
Si bien no se trata principalmente de TDD (aunque lo toca, así como el diseño para la comprobabilidad), The Art of Unit Testing es un libro que recomendaría porque le enseña a escribir buenas pruebas.
Más específicamente, enseña cómo crear pruebas confiables, mantenibles y legibles. Creo que esta es la sección más importante del libro, aparte de quizás lo básico sobre pruebas unitarias y marcos de aislamiento. Es obvio que si las pruebas unitarias se convierten en un punto de dolor o agregan fricción al trabajo de un desarrollador, entonces cualquier éxito o beneficio de ellas será limitado. Si uno invierte el tiempo y el esfuerzo para crear las pruebas, entonces (s) debería ser capaz de obtener el mayor rendimiento de esa inversión.
fuente