2008-08-07 23 views
48

Mucha gente habla sobre escribir pruebas para su código antes de comenzar a escribir su código. Esta práctica se conoce generalmente como desarrollo impulsado por prueba o TDD para abreviar. ¿Qué beneficios obtengo al escribir software de esta manera? ¿Cómo empiezo con esta práctica?¿Por qué debería practicar Desarrollo controlado por prueba y cómo debería comenzar?

+0

Consulte mi respuesta a la misma pregunta ya hecha. [Una respuesta elaborada a esta pregunta] (http://stackoverflow.com/questions/62625/how-do-you-know-what-to-test-when-writing-unit-tests#69259) – eroijen

+0

Llego tarde aquí, pero me gustaría poner mi byte. El mejor enfoque para practicar TDD es usar Katas. Aquí hay buenos katas con pruebas: https://github.com/garora/TDD-Katas –

Respuesta

30

Hay una gran cantidad de beneficios:

  • Se obtiene información inmediata sobre si su código está funcionando, entonces puede encontrar errores más rápido
  • Al ver que la prueba pasa de rojo a verde, usted sabe que tiene una prueba de regresión funcional y código de trabajo
  • Usted gana confianza para refactorizar código existente, lo que significa que puede limpiar el código sin preocuparse por lo que podría romper
  • Al final tienen una serie de pruebas de regresión que se puede ejecutar durante automatizado construye para darle mayor confianza de que su código base es sólida

La mejor manera de empezar es comenzar simplemente. Hay un gran book by Kent Beck todo sobre el desarrollo impulsado por prueba. Simplemente comience con el nuevo código, no se preocupe por el código anterior ... siempre que sienta que necesita refactorizar algún código, escriba una prueba para la funcionalidad existente, luego refactorícela y asegúrese de que las pruebas se mantengan verdes. Además, lea this great article.

+2

expiró el enlace al último artículo (Sugerencias para pruebas unitarias). Aquí está el enlace al nuevo artículo: http://devver.wordpress.com/2008/07/07/tips-for-unit-testing/ –

3

La parte de beneficios tiene recently been covered, en cuanto a dónde empezar ... en un sistema pequeño y empresarial donde no hay demasiadas incógnitas por lo que los riesgos son bajos. Si aún no conoce un marco de prueba (como NUnit), comience por aprender eso. De lo contrario, comience por escribir su primera prueba :)

+0

¡El enlace está roto! –

0

En mi opinión, lo mejor es que claramente le permite ver si su código hace lo que se supone que debe. Esto puede parecer obvio, pero es muy fácil de ejecutar el mal camino de sus objetivos originales, como he encontrado en el pasado: p

2

Beneficios

  1. a encontrar la manera de compartimentar su código
  2. a determinar exactamente lo que usted quiere que su código para hacer
  3. Ya sabe lo que supone que actuar y, por el camino , si la refabricación rompe algo
  4. Le da la costumbre de asegurarse de que su código siempre sepa lo que se supone que debe hacer

Comenzando

Just do it. Escriba un caso de prueba de lo que desea hacer y luego escriba el código que debe pasar la prueba. Si pasas tu prueba, genial, puedes pasar a escribir casos en los que tu código siempre fallará (2 + 2 no debería ser igual a 5, por ejemplo).

Una vez que hayan pasado todas sus pruebas, escriba su lógica comercial real para hacer lo que quiera.

Si está empezando desde cero, asegúrese de encontrar un buen conjunto de pruebas que sea fácil de usar. Me gusta PHP, así que PHPUnit o SimpleTest funcionan bien. Casi todos los idiomas populares tienen disponible un conjunto de pruebas xUnit para ayudar a crear y automatizar las pruebas.

+0

Por cierto, "compartimentar su código" lo llevará a una muy buena arquitectura " gratis".Cuando rompe los códigos en pedazos para probarlos, termina con una mejor arquitectura. Es bastante gratis si tienes un poco de experiencia como arquitecto de software. – daitangio

0

Es posible que esté trabajando en un entorno ágil o en cascada. Tal vez tengas procedimientos bien definidos que fueron probados en combate a través de años de arduo trabajo, o tal vez acabas de comenzar tu propia puesta en marcha. No importa cuál era la situación, es probable que enfrentan al menos uno, si no más, de los siguientes dolores, problemas, o las causas para la entrega sin éxito:

  • parte de su equipo se mantiene fuera del circuito durante la creación de requisitos, especificaciones o historias de usuario
  • La mayoría, si no todos, de sus pruebas son manuales, o si no tiene pruebas en absoluto
  • pesar de que han automatizado las pruebas, que no detectan problemas reales
  • Las pruebas automáticas se escriben y se ejecutan cuando ya es demasiado tarde para proporcionar un valor real al proyecto
  • Siempre hay algo más urgente que dedicar tiempo a probar
  • Los equipos están divididos entre las pruebas, el desarrollo, y los departamentos de análisis funcional, y que a menudo no están sincronizados
  • Una incapacidad para refactorizar el código debido al temor de que algo se romperá
  • El coste de mantenimiento es demasiado alto
  • El tiempo de comercialización, es demasiado grande
  • Los clientes no sienten que lo que se ha entregado es lo que pedían
  • documentación es nunca hasta la fecha
  • Tienes miedo a implementar en la producción debido a que el resultado es desconocido
  • A menudo no somos capaces de desplegar a la producción ya que las pruebas de regresión toman demasiado tiempo para ejecutar
  • equipo está gastando demasiado tiempo tratando de averiguar lo algún método o una clase tiene

El desarrollo basado en pruebas no resuelve mágicamente todos estos problemas. En cambio, nos pone en el camino hacia la solución. No hay una solución mágica, pero si hay una práctica de desarrollo que puede marcar la diferencia en tantos niveles, esa práctica es TDD. El desarrollo impulsado por pruebas acelera el tiempo de comercialización, permite una refactorización más fácil, ayuda a crear un mejor diseño , y fomenta un acoplamiento más flexible. Además de los beneficios directos, el TDD es un requisito previo para muchas otras prácticas (la entrega continua es una de ellas). Un mejor diseño, un código bien redactado, una documentación más rápida para el momento de lanzamiento al mercado, actualizada y una sólida cobertura de prueba son algunos de los resultados que logrará al aplicar TDD.

Cuestiones relacionadas