20
1 Eugenio Jacobo hernández Valdelamar. 2005. 1 Migración de una aplicación en VB 6 a VB .Net Eugenio Jacobo Hernández Valdelamar 2005 v.1.0 Resumen: En este trabajo se documentan algunas de las experiencias que se tuvieron en el proceso de migración de una aplicación hecha en VB6 a la plataforma .Net El objetivo es mostrar diferentes enfoques del proceso de migración, y como las herramientas de automatización pueden acelerar este proceso. ------------------------------------------------------------------------------------------------ Eugenio Jacobo Hernández Valdelamar es Maestro en Ciencias de la Computación por la Fundación Arturo Rosenblueth. Actualmente dirige el desarrollo de productos de software educativo en el proyecto Galileo de la Fundación Arturo Rosenblueth.

Migración de aplicaciones VB6 a VBNet

Embed Size (px)

DESCRIPTION

E J Hernández Valdelamar, 2005. Notas sobre la migración de aplicaciones V6 a VB.Net (VS 2003).

Citation preview

Page 1: Migración de aplicaciones VB6 a VBNet

1

Eugenio Jacobo hernández Valdelamar. 2005. 1

Migración de una

aplicación en VB 6 a

VB .Net

Eugenio Jacobo Hernández Valdelamar

2005

v.1.0

Resumen:

En este trabajo se documentan algunas de las experiencias que se tuvieron en el proceso de migración de una aplicación hecha en VB6 a la plataforma .Net

El objetivo es mostrar diferentes enfoques del proceso de migración, y como las herramientas de automatización pueden acelerar este proceso.

------------------------------------------------------------------------------------------------

Eugenio Jacobo Hernández Valdelamar es Maestro en Ciencias de la Computación por la Fundación Arturo Rosenblueth. Actualmente dirige el desarrollo de productos de software educativo en el proyecto Galileo de la Fundación Arturo Rosenblueth.

Page 2: Migración de aplicaciones VB6 a VBNet

2

Eugenio Jacobo hernández Valdelamar. 2005. 2

Antecedentes

� Se desarrollo un prototipo funcional del

sistema llamado Calculadora Polinomial

en VB 6.

� El modelado del sistema se hizo usando

OOP.

� La aplicación funciona de manera estable

en su última versión.

El equipo de desarrollo Galileo MS ha estado desarrollando desde noviembre una línea de productos de software para el apoyo del estudio de las matemáticas en el nivel medio superior y superior.

Las líneas de trabajo son:

•Álgebra

•Geometría analítica

•Cálculo diferencial e integral

El resultado han sido 2 herramientas muy potentes:

* Laboratorio de Geometría Analítica.

* Laboratorio de Funciones.

Para complementar la línea se inicio el desarrollo de una nueva herramienta llamada la Calculadora Polinomial para apoyar en el estudio del álgebra a nivel de secundaria y medio superior.

Es en este caso donde se desea migrar la aplicación, originalmente desarrollada en VB6 a .Net

Page 3: Migración de aplicaciones VB6 a VBNet

3

Eugenio Jacobo hernández Valdelamar. 2005. 3

Objetivo

� Migrar el sistema en VB 6 a VB .Net

� Hipótesis: La migración puede acelerarse

usando el asistente de actualización con

el que cuenta el Visual Studio 2003

Se tiene como antecedente el desarrollo 2 sistemas:

•Laboratorio de Geometría Analítica (LGA) , desarrollado en .Net con VB y C#.

•Laboratorio de Funciones (LF) desarrollado en VB 6.

Para el LGA lo primero que se hizo fue migrar el componente de graficación que se tenía en VB6 a VB .Net. La migración implico una reingeniería del componente. El componente de graficación se rehizo en 2 semanas.

El LGA implantó una arquitectura de objetos que permite realizar construcciones de objetos geométricos, que no eran posibles en pruebas de concepto anteriores. El LGA se implementó en 3 semanas.

Aprovechando la arquitectura del LGA, se rediseño el LF; re-usando código del LGA el LF se migró a .Net en 2 semanas.

En el caso de la Calculadora Polinomial (CP) el prototipo funcional se hizo en VB6, pero el objetivo es que toda la línea de productos Galileo de matemáticas para nivel medio y superior se implementen en .Net

Aprovechando que el prototipo de la CP es estable, se tomó la decisión de migrarlo a .Net, pero en esta ocasión se decidió usar las herramientas de automatización con las que cuenta el Visual Studio .Net 2003.

Page 4: Migración de aplicaciones VB6 a VBNet

4

Eugenio Jacobo hernández Valdelamar. 2005. 4

Para ayudar a los desarrolladores a migrar sus proyectos de VB 6.0 a VB .NET, Microsoft creó el Asistente de Actualización (Visual Basic Upgrade Wizard). Este asistente es invocado automáticamente cuando se trata de abrir un proyecto de VB 6.0. este asistente trata de convertir el proyecto de VB 6.0 a uno de VB .NET.

En la mayoría de los casos las diferencias entre VB 6.0 y VB .NET son demasiadas para que el asistente las traduzca.

Algunos comentarios en foros de desarrolladores mencionan que al ser un proceso tedioso el de arreglar las conversiones, es mejor recodificar todo VB .NET

Esta hipótesis también será tomada en cuenta.

Page 5: Migración de aplicaciones VB6 a VBNet

5

Eugenio Jacobo hernández Valdelamar. 2005. 5

Al seleccionar el proyecto en VB6 se ejecuta el asistente de actualización, el cual presenta la información de los procesos que se realizarán. Estos son:

•Crear un nuevo proyecto a donde el proyecto original será actualizado.

•Copiar los archivos de formas y clases al nuevo proyecto, y convertirlos al nuevo formato.

•Crear un reporte de la actualización y agregarlo al nuevo proyecto.

Page 6: Migración de aplicaciones VB6 a VBNet

6

Eugenio Jacobo hernández Valdelamar. 2005. 6

En el paso 2, asistente detecta el tipo de proyecto de VB6 del que se trata. En este caso es un proyecto de aplicación Windows.

El asistente pregunta a que tipo de proyecto se desea actualizar. La única opción en este caso es un EXE.

Page 7: Migración de aplicaciones VB6 a VBNet

7

Eugenio Jacobo hernández Valdelamar. 2005. 7

El paso 3 consiste en especificar la ruta donde el nuevo proyecto en VB .Net será almacenado.

Page 8: Migración de aplicaciones VB6 a VBNet

8

Eugenio Jacobo hernández Valdelamar. 2005. 8

En el paso 4, el asistente avisa que cuenta con toda la información necesaria para realizar la actualización.

Page 9: Migración de aplicaciones VB6 a VBNet

9

Eugenio Jacobo hernández Valdelamar. 2005. 9

En el paso 5, el asistente realiza la actualización de todos los archivos del proyecto de VB6.

Page 10: Migración de aplicaciones VB6 a VBNet

10

Eugenio Jacobo hernández Valdelamar. 2005. 10

Al terminar el proceso de actualización, se abre el nuevo proyecto en VB .Net

En el Solution Explorer pueden apreciarse todos los archivos migrados, así como el reporte de actualización (_UpgradeReport.html)

Page 11: Migración de aplicaciones VB6 a VBNet

11

Eugenio Jacobo hernández Valdelamar. 2005. 11

El reporte de actualización contiene una relación de los archivos del proyecto que se actualizaron, junto con las incidencias que se presentaron durante la actualización del código. Esta información es relativa a cuestiones como los rangos en los índices de los arreglos, tipos de datos, acceso a propiedades de otros objetos, propiedades de objetos de VB6 no soportadas en .Net, etc.

Es importante consultar este reporte para solucionar estos problemas.

Page 12: Migración de aplicaciones VB6 a VBNet

12

Eugenio Jacobo hernández Valdelamar. 2005. 12

En la ventana de tareas (Tasks) se encuentran todos los errores generados por llamadas de VB6 que no pudieron convertirse. En este caso, muchos de los mensajes tienen que ver con el manejo de gráficos del control de graficación, que hacen referencia a objetos como Line, PSet, etc.

Además de estos hay una lista de mensaje de UPGRADES (algunos tienen que ver con conversiones de tipos de datos).

Page 13: Migración de aplicaciones VB6 a VBNet

13

Eugenio Jacobo hernández Valdelamar. 2005. 13

En el caso de métodos como:

Public Property exponente() As Object Get 'UPGRADE_WARNING: Couldn't resolve default property of object exponente. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"' exponente = exp End Get Set(ByVal Value As Object) 'UPGRADE_WARNING: Couldn't resolve default property of object vNewValue. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"' exp = Value End Set End Property

Los warnings se refieren a problemas de conversión de tipos.

Al aplicar la opción Build solution, todos los Upgrades marcados en azul en la lista de tareas desaparecen (bajo de 131 a 94 tareas), y en este caso solo quedan pendientes las referencias al control encargado del despliegue gráfico, el cual utiliza operaciones como Line.x1, PSet(), etc, las cuales han cambiado en el soporte de gráficos de .Net.

En este caso hay 2 opciones: (1) rastrear y componer cada uno de los mensajes teniendo en cuenta que el API ha cambiado o (2) rehacer el control mencionado.

Page 14: Migración de aplicaciones VB6 a VBNet

14

Eugenio Jacobo hernández Valdelamar. 2005. 14

Así que se quita el control creado por el asistente del proyecto. Obviamente las referencias al control causan errores.

Page 15: Migración de aplicaciones VB6 a VBNet

15

Eugenio Jacobo hernández Valdelamar. 2005. 15

VB 6

VB .Net

Cuando todo parecía estar listo para funcionar, la siguiente sorpresa es que la aplicación no funciona bien. Ahora la causa del problema es el control ListBox. El asistente genera una llamada del tipo VB6.SetItemString… que no realiza la operación adecuada.

Esto fue aprovechado para hacer un poco de refactoring, pues el método encargado de refrescar los datos causaba un ciclo recursivo en .Net, tal como estaba codificado en VB 6.

Arreglando este pequeño detalle la aplicación funciona perfectamente.

Page 16: Migración de aplicaciones VB6 a VBNet

16

Eugenio Jacobo hernández Valdelamar. 2005. 16

Resultados (1)

� Duración del proceso: 2 horas

� Incluyendo:

�El tiempo que tarda el asistente en generar el

código (5 minutos)

�Los cambios de componentes (25 minutos,

pues ya se había hecho la migración del

graficador)

�La depuración de código a causa del ListBox

Se confirma la hipótesis de que el proceso de migración se acelera usando la herramienta de actualización, pues como se comentó en un inicio, la migración manual de productos tardó entre 2-4 semanas.

En este caso se redujo a 2 horas de trabajo efectivo (incluyendo esta documentación).

Es un hecho que la estructura de objetos contribuyo a una actualización efectiva del código original. Se sugiere hacer una prueba de concepto con código estructurado para analizar los resultados.

Page 17: Migración de aplicaciones VB6 a VBNet

17

Eugenio Jacobo hernández Valdelamar. 2005. 17

Resultados (2)

� Elementos del proyecto en VB6� 1 forma principal

� 10 botones� 5 textbox� 2 labels� 1 scriptcontrol

� 1 forma de splash� 1 forma de operaciones� 1 componente de usuario� 3 clases� 1 modulo

� Elementos del proyecto en VB .Net� _UpgradeReport.htm� Assemblyinfo.vb� 1 forma principal

� 10 botones� 5 textbox� 2 labels� 1 scriptcontrol� 1 tooltip

� 1 forma de splash� 1 forma de operaciones� 1 componente de usuario� 3 clases� 1 modulo

La estructura de los proyectos es bastante similar. Las principales diferencias radican en el API de gráficos, información adicional que requiere .Net para el manejo de elementos del proyecto (AssemblyInfo), el manejo de tooltips (antes podían agregarse a cada componente como texto en una propiedad, y ahora el tooltip es un elemento autónomo.

Page 18: Migración de aplicaciones VB6 a VBNet

18

Eugenio Jacobo hernández Valdelamar. 2005. 18

Conclusiones

� El proceso de migración inicial es rápido y efectivo.

� El asistente demuestra su utilidad, al haber actualizado el código en cerca del 95%.

� Debe continuarse probando la aplicación para asegurar que la funcionalidad se mantuvo.

El asistente de actualización es útil, pero no debe esperarse un mapeo con el 100% de exactitud. Transformar hasta un 70% del código original puede ser bastante aceptable.

Para no confiarse, puede ser mejor realizar la migración de manera gradual a cada componente y clase, y realizar pruebas unitarias para asegurar la funcionalidad del código original.

Además, estudiar el código generado por el asistente es útil para aprender las diferencias que implica el framework .Net, así como la estructura de los programas.

Page 19: Migración de aplicaciones VB6 a VBNet

19

Eugenio Jacobo hernández Valdelamar. 2005. 19

Comentarios adicionales

� ¿Recodificar manualmente todo?: NO

necesariamente.

� Existen otro tipo de herramientas de

migración:

�TransKing

�C-Sharpener

�#develop

En cuanto al comentario de recodificar manualmente todo como alternativa al uso del asistente de actualización, es un pensamiento que ciertamente aparece al ver la ventana de tareas con los mensajes de advertencia y errores. Sin embargo, este no es un indicador certero para desistir en el uso del asistente. Debe realizarse una inspección detallada del código para evaluar que partes requieren rehacerse.

Por último, hay otras herramientas alternativas al asistente de actualización del VS .Net 2003, que pueden requerirse en caso de preferir a C# como lenguaje para desarrollo. Estas son:

•TransKing es una utilería que convierte proyectos de VB y VB.NET a C# (http://www.e-iceblue.com/)

•C-Sharpener For VB es un add-in para el Visual Studio que convierte automaticamente proyectos en Visual Basic .NET projects a C# (http://www.elegancetech.com/csvb.aspx?src=39)

•#develop (SharpDevelop) es un IDE gratuito para proyectos en C# y VB.NET . Cuenta con una utileria para realizar traducciones entre ambos lenguajes (http://www.icsharpcode.net/OpenSource/SD/)

•CSProjToVBProj (http://msdn.microsoft.com/msdnmag/issues/04/08/EndBracket/default.aspx)

Page 20: Migración de aplicaciones VB6 a VBNet

20

Eugenio Jacobo hernández Valdelamar. 2005. 20

Referencias

� Upgrading from Visual Basic 6.0 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vboriUpgradingFromVisualBasic60.asp

� DotNet Forums. Information for VB 6.0 Developers migrating to .NET http://www.dotnetforums.com/showthread.php?t=957

� C# to Visual Basic Translation Tool http://msdn.microsoft.com/msdnmag/issues/04/08/EndBracket/default.aspx

� From VB.NET to C# and Back Again http://www.4guysfromrolla.com/webtech/012702-1.shtml

� http://www.startvbdotnet.com/