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?
Respuesta
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.
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/ –
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 :)
¡El enlace está roto! –
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
Beneficios
- a encontrar la manera de compartimentar su código
- a determinar exactamente lo que usted quiere que su código para hacer
- Ya sabe lo que supone que actuar y, por el camino , si la refabricación rompe algo
- 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.
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
Buen arranque: Getting Started with Tdd in Java using Eclipse by Brett L. Schuchert
Es un conjunto de grabaciones de pantalla sobre TDD en Java y C# en. Está comenzando desde cero y enseñando los conceptos básicos de TDD.
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.
- 1. ¿Por qué debería usar Desarrollo controlado por características?
- 2. ¿Por qué debería usar Flex?
- 3. En desarrollo controlado por prueba PERO en MARCHA ATRÁS
- 4. ¿Por qué debería/no debería usar el operador "nuevo" para instanciar una clase, y por qué?
- 5. ¿Cómo debería uno comenzar a aprender desarrollo de aplicaciones web?
- 6. ¿Por qué debería aprender y usar puntales?
- 7. ¿Cuándo y por qué debería usar TStringBuilder?
- 8. ¿Por qué debería agregar dependencias de desarrollo a mi gemspec?
- 9. ¿Por qué debería usar "aplicar"?
- 10. ¿Por qué debería usar MXML?
- 11. ¿Por qué debería usar glBindAttribLocation?
- 12. Por qué * debería * usamos EventHandler
- 13. ¿Por qué debería aprender C++
- 14. ¿Por qué debería aprender COM?
- 15. ¿Por qué debería preocuparme por Entity Framework?
- 16. ¿Por qué debería usar Drools?
- 17. ¿Por qué debería usar @properties?
- 18. ¿Por qué debería preocuparme por las etiquetas ligeras y anotadas?
- 19. ¿Cómo debería comenzar a jugar con 3D?
- 20. Desarrollo de JavaScript: ¿cuándo debería comenzar a hacer pruebas unitarias?
- 21. ¿Con qué diagrama UML debería comenzar?
- 22. ¿Por dónde debería comenzar a construir un componente?
- 23. ¿Cuándo debería comenzar la automatización?
- 24. ¿Por qué debería probar mis HTMLHelpers?
- 25. ¿Por qué no debería usar marcos HTML?
- 26. ¿Con qué versión de C# (y .Net) debería comenzar?
- 27. ¿Qué es PDO y por qué debería usarlo?
- 28. ¿Qué es NHibernate y por qué debería usarlo?
- 29. ¿Qué es SproutCore y por qué debería importarme?
- 30. EF4.1 POCO: Por qué debería usar ICollection
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
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 –