¿"Trabajar eficazmente con código heredado" ayudará a alguien que trabaje con una aplicación portada de VB6 a VB.NET?

StackOverflow https://stackoverflow.com/questions/1029483

Pregunta

Me gustaría refactorizar una gran aplicación heredada originalmente escrita en Visual Basic 6.0 y posteriormente portado a .NET. Para hacer esto con confianza, quiero tener pruebas unitarias alrededor del código existente para poder comparar antes y después. ¿Cuál es la forma más fácil y efectiva de hacer esto?

Hay un libro llamado " Trabajo efectivo con código heredado " eso parece que podría ayudarme. Sin embargo, parece que solo trata con lenguajes orientados a objetos y Visual Basic 6.0 no es necesariamente OO. ¿Puede este libro todavía ayudarme? Espero que alguien que lo haya leído pueda responder por ello.

Específicamente, esta aplicación no utiliza clases distintas de los formularios en sí. Accede a la base de datos directamente desde los formularios, y no de manera consistente. Había varias personas trabajando en este proyecto, todos usando sus propios estilos sin ningún tipo de estándares.

Como dije, este proyecto ha sido portado a VB.NET. Sin embargo, solo se transfiere en el sentido de que se compila en Visual & nbsp; Studio & nbsp; 2008. Todos los conceptos de codificación son Visual Basic 6.0.

¿Fue útil?

Solución

No solo se trata de idiomas orientados a objetos (OO). Grandes secciones tratan sobre cómo lidiar con el código heredado en C.

Entonces sí, ¡cómpralo!


Hay un capítulo completo (Capítulo 19) llamado:

  

Mi proyecto no está orientado a objetos. ¿Cómo hago cambios seguros?

También hay vbUnit , un implementación de xUnit que puede ayudarlo a usar TDD con Visual Basic 6.0 .

En realidad, leí mal la pregunta y pensé que ibas a ir al puerto, no es que ya lo hayas hecho. En este caso, tiene un montón de 'legado' código VB.NET que esto es totalmente el libro para ti. Puede aprovechar las capacidades OO de VB.NET y usar el resto del libro.

Realmente no puedo recomendar más este libro.

Otros consejos

Sí; Los conceptos del libro son geniales y poderosos y se extienden más allá de la POO. Y VB6 puede estar orientado a objetos, aunque no es un lenguaje tan orientado a objetos como algunos.

Entre los conceptos más poderosos del libro está el de "costuras". esencialmente lugares donde puede dividir su código, inyectar pruebas o aislar o abstraer bits de funcionalidad. Este es solo uno de los conceptos que se aplica incluso al código de procedimiento.

Es posible que desee hacer las preguntas más específicas.

Si bien VB6 no es un lenguaje OO puro per se, hay suficientes elementos de OO que las cosas deberían ser familiares; Además, hay una serie de complementos de prueba de unidad para el IDE VB6.

Pero consideremos algunos de los componentes VB6 de alto nivel:

  • Los formularios SON objetos (puede crear nuevas instancias).
  • Los módulos se comportan como clases con solo métodos estáticos.
  • Clases y amp; Los controles de usuario están tan cerca de los objetos que obtendrá. La falta de constructor hace las cosas difíciles, pero es de esperar que el desarrollador original se haya quedado con Initialize o haya escrito un subs de Init consistente.
  • Los eventos en VB son impares; También es lo que probablemente te hará tropezar más. El código oculto y con estado que depende de un orden particular de eventos está, sin duda, disperso por todo el lugar.
  • Páginas de propiedades. Bueno, es lo que es.

Comience con las mejores prácticas de VB. Si la aplicación no se escribió teniendo en cuenta el código de mejores prácticas, creo que dar ese paso le ahorrará muchos problemas en el futuro.

Definitivamente tienes algo de trabajo para ti, pero aquí hay una estrategia a considerar antes de hacer CUALQUIER trabajo .NET.

Mueva la mayor parte del código FORM subyacente que pueda a una clase: un archivo de clase por formulario como inicio. En esencia, los controladores de eventos de formulario no deberían hacer nada más que llamadas proxy a métodos en una instancia de clase subyacente; obviamente, todos los métodos personalizados se pueden cambiar al archivo de clase.

Después de leer la guía de mejores prácticas (etc.) de Microsoft y otros para ayudarlo a prepararse para la migración de .NET, básicamente está preparado para los pequeños infiernos que tendrá que recodificar / refactorizar: molestias como manejo de errores, ordenamiento de eventos, objetos / variantes enlazados tarde, colecciones, etc.

Una palabra sobre el código manejado por error: es especialmente difícil duplicar los errores de espagueti, particularmente porque el codificador promedio de Visual Basic tenía una mala habilidad para usarlo como una lógica de flujo de control . Casi vale la pena separar cada bloque On Error en subrutinas separadas, si tiene más de dos en una rutina.

Una vez que se ha limpiado el código, también puede considerar refactorizar el código de Visual Basic en abstracciones sensibles (por ejemplo, una sola clase de adaptador de datos y conexión, etc.), pero será el mejor juez de eso.

Puede que no te guste este enfoque, así que definitivamente prueba las aguas con una forma.

Soy dueño de una copia que compré para intentar tener nuestro proyecto C / C ++ bajo control. Como eché de menos la funcionalidad que C # / .NET tiene para ofrecer.

Los libros son muy C / C ++ ish, pero, como dice John, existe el capítulo de trabajar sin objetos.

Pero, si como dice, su código se transfiere a .NET, ya no es el código de Visual Basic 6.0. .NET tiene muchas formas de Visual Basic / C # de permitirte conectar tu código y probar. Pero dicho esto, el libro le dará una buena visión general de las diferentes formas en que puede conectar una aplicación y las estrategias para tener un gran proyecto antiguo bajo control.

Sugeriría echar un vistazo a Refactorización: mejora del diseño del código existente , que es una excelente lectura obligatoria.

Puede que esté buscando algo similar a Refactorización profesional en Visual Basic . No lo he leído, pero parece aplicable.

Creo que encontrará que las pruebas de caracterización son las más beneficiosas. Deben ser automatizados. Sin pruebas de caracterización, tendrá que probar su aplicación / código manualmente ejecutándolo. Es muy fácil pasar por alto la prueba de la funcionalidad crítica al agregar un nuevo código. Esto viene de mi propia experiencia.

El método Sprout y la clase Sprout son importantes al agregar un nuevo código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top