Hace poco más de un año tuve la suerte de poder tomarme un descanso de 9 meses en el trabajo. Decidí que en ese tiempo perfeccionaría mis habilidades de C #. Comencé a trabajar en un montón de proyectos y me obligué a seguir TDD.
Fue un proceso bastante esclarecedor.
Al principio fue difícil, pero con el tiempo aprendí a escribir código más comprobable (que, como resulta, tiende a ser un código más SÓLIDO) y en el proceso también agudicé mi habilidad de diseño OO.
Ahora estoy de vuelta en la fuerza laboral y estoy notando algo extraño.
Prefiero no seguir TDD.
Creo que TDD me ralentiza y en realidad hace que sea más difícil diseñar una aplicación limpia.
En cambio, he adoptado un enfoque ligeramente (masivo) diferente:
- Elige una porción vertical de trabajo
- Desarrollar un prototipo funcional.
- Refactorizar hasta que todo esté bien y ordenado
- Siéntese y aprecie el código maravillosamente SOLIDO y comprobable que he escrito.
Es posible que haya notado que el paso 1 no era "definir la superficie pública de mi objetivo de prueba" y el paso 2 no era "probar el bejesus fuera de dicha superficie pública". Es posible que también haya notado que ninguno de los pasos involucra pruebas. Estoy escribiendo código comprobable, pero no lo estoy probando ... todavía.
Ahora, me gustaría dejar en claro que en realidad no estoy renunciando a ningún tipo de prueba. El código que estoy escribiendo funciona . Funciona porque lo estoy probando manualmente.
También me gustaría dejar en claro que tampoco renunciaré a todas las pruebas automatizadas. Aquí es donde mi proceso es diferente. Y es por eso que hago esta pregunta.
TDD en teoría. No en la práctica.
Mi proceso ha evolucionado un poco y he logrado un equilibrio entre TDD y ninguna prueba que encuentro muy productiva y también razonablemente segura. Va de la siguiente manera:
- Implemente una porción de trabajo vertical que funcione con las pruebas en mente, pero no escriba ninguna prueba.
- Si en el futuro (por ejemplo, un mes después) ese segmento necesita modificación
- Escriba pruebas unitarias, pruebas de integración, pruebas de comportamiento, etc. que garanticen que la porción de trabajo sea correcta
- Modifica el código
- Si esa porción no necesita modificación,
- Hacer nada
Simplemente cambiando la carga de escribir pruebas desde antes de escribir el código hasta antes de modificar el código, he podido producir mucho más código de trabajo. Y, cuando llego a escribir pruebas, escribo muchas menos, pero cubro casi tanto terreno (mayor ROI).
Me gusta este proceso, pero me preocupa que no pueda escalar bien. Su éxito depende de que los desarrolladores sean diligentes al escribir pruebas antes de cambiar las cosas. Y eso parece un riesgo bastante grande. Pero, TDD tiene el mismo riesgo.
Entonces, ¿voy al infierno de [BT] DD, o esta es una forma común de codificación y prueba pragmática?
Me gustaría seguir trabajando de esta manera. ¿Qué puedo hacer para que este proceso funcione a largo plazo?
Nota:Soy el único desarrollador de mis proyectos y soy responsable de todo: recopilación de requisitos, diseño, arquitectura, pruebas, implementación, etc. Sospecho que es por eso que mi proceso está funcionando.
If that slice doesn't need modification. lizkeogh.com/2012/06/24/beyond-test-driven-development