Agregar nuevas funciones a una aplicación antigua

7

Escribí una aplicación .NET para Windows usando Framework 3.5. En ese momento, 3.5 era muy nuevo y solo tenía conocimiento del marco 2.0. Debido a la fecha límite, no usé ninguna característica nueva de la versión 3.5 y entregué la aplicación. No hubo tiempo.

Ahora son dos años y la aplicación. funciona bien, pero mis clientes han solicitado nuevas funciones. Hay una gran escala necesaria. El nuevo código que escribí hasta ahora utiliza muchas características nuevas de .NET 3.5 y me estoy concentrando en reducir el tamaño del nuevo código.

El problema es que las nuevas clases que quiero escribir a veces crean métodos redundantes para hacer lo mismo. No estoy molestando el viejo código.

¿Cómo gestionar? Si sustituyo las clases antiguas por otras nuevas, se corre el riesgo de funcionalidad y se necesitan pruebas exhaustivas nuevamente. Si no lo hago, el tamaño del proyecto está aumentando.

    
pregunta RPK 30.10.2010 - 20:20

2 respuestas

7

Enviamos una serie de aplicaciones de Windows. Algunas de las partes de cada aplicación utilizan .NET2, algunas 3.5 y una aplicación sigue siendo VB6. Tenemos que hacer actualizaciones anuales porque la ley tributaria cambia cada año (muchos de nuestros usuarios son contadores y actuarios). El código de refactorización cada año es una práctica estándar para nosotros. Cuando agregamos .NET 3.5, queríamos WCF y Linq, y iremos agregando más cosas a medida que pase el tiempo (y tenemos tiempo de aprender lo que queremos agregar).

  

Si sustituyo las clases antiguas por las nuevas, se corre el riesgo de funcionalidad y se necesitan pruebas exhaustivas nuevamente. Si no lo hago, el tamaño del proyecto está aumentando.

Recomiendo agregar pruebas de unidad a su solución. A muchos desarrolladores no les gusta hacer pruebas, incluso pruebas automatizadas. Tenemos algunos que comentan las pruebas que ahora fallan debido a que su nuevo código rompe algún caso antiguo.

Tres buenos libros son:
Desarrollo de aplicaciones de Brownfield en .Net y
Trabajando efectivamente con el código heredado
Software orientado a objetos en crecimiento, guiado por pruebas

Si no puede pagar las versiones de Visual Studio que incluyen pruebas de unidad, entonces recomiendo otros libros sobre el uso de herramientas externas para la prueba:
Entrega experta de .NET mediante NAnt y CruiseControl.NET
Si bien este libro fue escrito para .NET 1.1, todavía tiene información útil.

Una práctica que recomiendo fuertemente es la "integración continua". El propósito de esto es para algunos procesos que se ejecutan cada vez que se registra el código para compilar y probar el código. Si bien es complicado y molesto configurarlo al principio, hace las cosas muy fáciles y muy repetibles más adelante. Si mantiene la puntuación, la integración continua le permite responder "sí" a las preguntas 2 y amp; 3 en la Joel Test .

    
respondido por el Tangurena 30.10.2010 - 21:11
5

Si le preocupan las pruebas exhaustivas, es probable que esto signifique que las pruebas no están automatizadas a nivel de código. No hay pruebas automáticas = mucho dolor (y puedo hablar por experiencia allí). Su primer paso debería ser poner algunas pruebas de detección básicas en torno al código existente que está pensando en modificar usando algo como NUnit. Ahora realice los cambios que desea realizar al reemplazar el código anterior con el nuevo código y asegúrese de que todo siga funcionando.

No confunda estas pruebas de detección con las pruebas unitarias: están ahí para verificar que el código ya implementado está haciendo lo que usted desea antes de comenzar y no es necesario que sigan las reglas habituales de prueba. . Afortunadamente, a medida que cambie y actualice el código, introducirá pruebas de unidad significativas, en cuyo punto las pruebas de detección pueden (y deben) eliminarse.

El libro Cómo trabajar con eficacia con el código heredado contiene muchos detalles sobre las diversas técnicas que puede utilizar en tu situación. También puede considerar obtener una gran cantidad de cobertura de código rápido utilizando uno de los marcos de prueba de aceptación, como Cucumber o Robot Framework - o incluso (si es una aplicación web) alguna reproducción de grabación rápida y sucia selenio (nuevamente, prepárese para eliminar estas pruebas iniciales una vez que tenga una cobertura de prueba significativa con más pruebas de aceptación mantenibles).

Finalmente, no se crucifique a sí mismo para reducir el tamaño del código; concéntrese en resolver los problemas uno por uno y refactorice las cosas malas como sea necesario.

    
respondido por el FinnNk 30.10.2010 - 20:49

Lea otras preguntas en las etiquetas