2010-07-08 11 views
12

La situación: millones de líneas de código, más de cien desarrolladores y defectos frecuentes. Queremos evitar repitiendo defectos y queremos mejorar el diseño del código (¿quién no?).¿Cómo se puede implementar el desarrollo impulsado por prueba con el código heredado?

Desarrollo controlado por prueba (prueba de la primera unidad, luego código) suena ideal: escriba un caso de prueba para cada función.

Pero, con tanto código escrito, ¿cómo se puede implementar TDD? ¿Por dónde comienzas - con funciones de bajo nivel?

¿O somos demasiado tarde para iniciar TDD?

Respuesta

21

Comience con Working Effectively with Legacy Code.

No es realmente TDD si está comenzando con el código heredado, pero toda su codificación puede ser TDD. Al abordar un nuevo problema, escribe una prueba para ello. Si no puede, debido a que las clases heredadas son demasiado difíciles de probar, entonces comience a escribir pruebas para ellas, cortando bits y cubriendo los bits con pruebas.

Refactor the Low-Hanging Fruit.

Para evitar la repetición de defectos: dado un defecto de ejemplo, escriba una prueba que lo demuestre. Podría ser una prueba relativamente amplia que solo simula la actividad del usuario; aún no es una prueba unitaria Asegúrate de que la prueba falla. Haz tu investigación; averiguar por qué la prueba está fallando. Ahora, esto es importante, antes de corregir el error, escriba una prueba unitaria que demuestre el error. Solucione el error, y ahora tiene dos pruebas, al menos una de ellas rápida, que lo protegen de las regresiones.

+2

+1: La clave aquí es * no * probar y actualizar de forma exhaustiva las pruebas unitarias. – Richard

+1

@Carl - buen resumen. Me gusta especialmente cómo obtuvo una prueba de unidad y un texto de sistema del defecto. – Wikis

+0

@Richard - Estoy desconcertado - ¿no es eso lo opuesto a lo que Carl está diciendo? – Wikis

2

Desde que Carl sugirió un libro, voy a sugerir otro: Art of Unit Testing de Roy Osherove tiene un capítulo completo sobre "Trabajar con código heredado". Todavía no he leído ese capítulo, pero los primeros 5 capítulos son excelentes, y estoy deseando que llegue.

+0

FYI Disfruté la comparación de Osherove de las definiciones de código heredado: "código fuente relacionado con la tecnología que ya no admite" "cualquier aplicación anterior bajo mantenimiento" "código que funciona" "código que no tiene pruebas" (del libro de Feathers) – orbfish

+0

@Carl gracias por el enlace C2, eso es gracioso. – orbfish

+0

@Orbfish - Gracias por la sugerencia. Tal vez cuando lo haya leído, ¿volverá y compartirá algunas ideas? – Wikis

Cuestiones relacionadas