language agnostic - example - ¿Es TDD un exceso para pequeños proyectos?
test driven development español (16)
¿Exagerar? De ningún modo. Además del beneficio principal, que es escribir un código en el que puede confiar porque ha pensado en formas de romperlo, será más disciplinado y potencialmente más productivo con el desarrollo basado en pruebas. Recoge cualquiera de los libros de Pragmatic Programmer para obtener consejos e inspiración.
Recientemente he estado leyendo un poco acerca de TDD y cosas por el estilo y todavía no estoy del todo vendido. Hago muchos pequeños proyectos de hobby (solo yo) y me preocupa que tratar de hacer TDD sea excesivo para tal cosa. Aunque he visto pequeños proyectos de código abierto con como 3 desarrolladores que hacen TDD. (aunque he visto algunos proyectos unipersonales que también hacen TDD)
Entonces, ¿es TDD siempre algo bueno o en qué umbral tiene sentido usarlo?
Algo que he escuchado de un miembro de nuestro grupo Agile local es que a ella no le resulta útil la TDD en las etapas más tempranas del proyecto, donde básicamente está haciendo bocetos rápidos y no está realmente seguro de qué forma es la cosa. esta tomando todavia Pero tan pronto como tenga alguna idea de cómo se ven las interfaces, puede comenzar a usar pruebas para ayudarlo a definirlas.
TDD es otra herramienta, como la documentación, para mejorar la claridad del código. Esto es crítico cuando otras personas necesitan trabajar con su código, pero a muchos de nosotros nos resulta muy útil cuando miramos nuestro propio código. Alguna vez tuviste un proyecto de pasatiempo que elegiste de nuevo después de estar alejado de él por un tiempo, encontré un código extraño y me pregunté "¿por qué diablos escribí eso ?"
Aprovecharía la oportunidad de usar TDD con un pequeño proyecto solo para mojarme los pies. Sería una buena experiencia de aprendizaje, incluso si se da cuenta de que no es para usted.
Bueno, no es realmente la cantidad de personas lo que determina el TDD (al menos esto es lo que su pregunta infiere), sino el tamaño del proyecto.
Las ventajas de TDD son que todo el código que está desarrollando prácticamente será probado por unidades. De esa manera ahorrará muchos problemas al refactorizar más tarde. Por supuesto, esto es realmente necesario cuando su proyecto tiene un tamaño decente.
Creo que vale la pena TDD sin importar el tamaño (incluso si es una clase, ya que escribir las pruebas primero puede ayudarlo a crear un diseño más sano).
El lugar donde creo que no es necesario es cuando está construyendo un proyecto en el que no está seguro de lo que quiere y es poco probable que le interese la capacidad de mantenimiento. Encuentro que no hay CUALQUIER proyecto que se ajuste a esa categoría en el trabajo, pero he descubierto que ocasionalmente estoy desarrollando proyectos personales en los que este es el caso. En estos casos, por lo general estoy aprendiendo un nuevo marco y no tengo idea de lo que estoy haciendo desde el principio, por lo que es más probable que mis pruebas se rompan con el tiempo por razones incorrectas, lo que disminuye su valor.
Sin embargo, también reconozco que no usar TDD me está costando la capacidad de mantenimiento: una vez que sé lo que estoy haciendo, rápidamente recurro a rojo / verde / refactor.
Creo que vale la pena para la mayoría de cualquier proyecto. TDD y las consiguientes pruebas de regresión le permiten no solo determinar si los componentes funcionan a medida que los escribe, sino también al introducir cambios y refactorizaciones. Siempre que sus pruebas estén lo suficientemente completas, puede cubrir escenarios para casos de borde poco frecuentes / improbables y producir / mantener un código más confiable.
Avanzando a lo largo del ciclo de vida del proyecto, los ciclos de prueba continuos le ahorrarán la repetición manual de las pruebas y anularán la posibilidad obvia de repetirlas de manera incorrecta / incompleta.
Cuando piensa que los errores consiguientes que no espera podrían ocurrir como resultado de su código de escritura, TDD tiene sentido.
Desde mi experiencia personal puedo decir lo siguiente:
- Cada vez que comencé uno de mis pequeños proyectos personales de hobby, me comprometí a desarrollarlo utilizando TDD.
- Cada vez que no lo hice.
- Cada vez me arrepentí.
En mi experiencia, el 90% de las veces los que dudan de los beneficios no lo han probado.
Pruébalo, con una mente escéptica. Mida lo que espera obtener de él, antes y después.
Puedo apuntar a una manera de perder menos tiempo / desperdicio arreglando errores encontrados en la producción. Veo / mido una mejor productividad (tiempo de comercialización más rápido), mejoras en la calidad del código (a través de una variedad de métricas), una mayor coincidencia con los requisitos (es decir, menos retrabajo porque los requisitos no estaban claros), etc.
"Me siento" mejor acerca de los proyectos que usan TDD, pero luego estoy "infectado por la prueba". La moral del desarrollador en proyectos que usan TDD es generalmente más alta, como una opinión subjetiva.
Si no obtienes esos resultados, no lo uses. Si no se preocupa lo suficiente por esos resultados para medirlos, entonces use TDD o no para sentirse mejor.
TDD tiene una curva de aprendizaje. Si no está dispuesto a esforzarse para intentarlo seriamente, no se moleste.
Un pequeño proyecto es una excelente manera de intentarlo seriamente sin arriesgar mucho.
Los proyectos pequeños pueden tener la costumbre de convertirse en proyectos grandes sin que usted se dé cuenta, entonces desearía haber comenzado con TDD :)
Siempre encuentro una pregunta como esta graciosa. ¿Cuál es la alternativa? ¿Escribir código que solo compilas y nunca ejecutas para verificar su corrección? ¿Esperas hasta que despliegues a producción para descubrir si tu clase funciona?
Si nunca tuvimos una práctica llamada TDD, o antes de que se inventara JUnit en 1997, ¿no hubo pruebas de código? Por supuesto que hubo. Entonces, ¿por qué es tan importante ahora que tiene marcos de prueba para ayudarlo con esto?
Incluso un pequeño proyecto en un plazo ajustado no querrá esperar hasta la producción para averiguar si funciona. Escribe las pruebas.
No es necesario para ningún proyecto que sea "pequeño", pero defino "pequeño" como menos de una clase.
TDD brilla en pequeños proyectos. A menudo es mucho más fácil adherirse a TDD en un proyecto pequeño, y es un buen momento para practicar y obtener la disciplina necesaria para seguir a TDD.
En mi experiencia, los proyectos más grandes tienden a ser los que abandonan TDD en algún umbral. (No estoy sugiriendo que esto sea algo bueno).
Creo que los proyectos más grandes tienden a abandonarlo por un par de razones:
- La inexperiencia del desarrollador, ya sea en general o con TDD
- Restricciones de tiempo: los proyectos más grandes son intrínsecamente más complejos
- La complejidad agregada lleva a los vencimientos de fechas límite y las pruebas unitarias tienden a abandonarse primero
- Esto puede ser exacerbado por un equipo inexperto.
Todo tiene una curva costo-beneficio .
Ignorando muchos de los beneficios a menudo disputados de TDD, vale la pena si su implementación cambia con la frecuencia suficiente para que el beneficio de tener un conjunto de pruebas automatizado supere cualquier costo adicional que pueda implicar el desarrollo inicial.
Un proyecto desarrollado con un buen código OO es inherentemente adecuado para las pruebas, y posiblemente pueda adquirir un enfoque basado en pruebas más adelante en el estilo de desarrollo. En realidad, diría que cuando estás cayendo sobre las tecnologías emergentes con un presupuesto limitado, considerando que todo lo que es TDD es completamente opcional.
Yo diría que depende totalmente del marco de tiempo dado. Si tiene tiempo para gastar casi el doble del tiempo que normalmente necesita, entonces hágalo. Pero en mi opinión, la velocidad es en estos días uno de los factores más importantes (para empresas competitivas).
Yo y otros utilizamos TDD en cualquier proyecto que sea más que unas pocas líneas de código.
Una vez que obtienes el error de prueba, es difícil no usar TDD para nada. Personalmente he encontrado que mi código ha mejorado varias veces debido a TDD.