Research, .net, y code">
Migración de Aplicaciones VB6 A VBNet
Migración de Aplicaciones VB6 A VBNet
Migración de Aplicaciones VB6 A VBNet
aplicación en VB 6 a
VB .Net
Eugenio Jacobo Hernández Valdelamar
2005
v.1.0
Eugenio Jacobo hernández Valdelamar. 2005. 1
Resumen:
------------------------------------------------------------------------------------------------
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.
1
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.
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
2
Objetivo
Migrar el sistema en VB 6 a VB .Net
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.
3
Eugenio Jacobo hernández Valdelamar. 2005. 4
En la mayoría de los casos las diferencias entre VB 6.0 y VB .NET son demasiadas
para que el asistente las traduzca.
4
Eugenio Jacobo hernández Valdelamar. 2005. 5
5
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.
6
Eugenio Jacobo hernández Valdelamar. 2005. 7
7
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.
8
Eugenio Jacobo hernández Valdelamar. 2005. 9
9
Eugenio Jacobo hernández Valdelamar. 2005. 10
En el Solution Explorer pueden apreciarse todos los archivos migrados, así como el
reporte de actualización (_UpgradeReport.html)
10
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.
11
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).
12
Eugenio Jacobo hernández Valdelamar. 2005. 13
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.
13
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.
14
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.
15
Resultados (1)
Duración del proceso: 2 horas
Incluyendo:
Eltiempo 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
16
Resultados (2)
Elementos del proyecto en Elementos del proyecto en
VB6 VB .Net
1 forma principal _UpgradeReport.htm
10 botones Assemblyinfo.vb
5 textbox 1 forma principal
2 labels 10 botones
1 scriptcontrol 5 textbox
1 forma de splash 2 labels
1 forma de operaciones 1 scriptcontrol
1 componente de usuario 1 tooltip
3 clases 1 forma de splash
1 modulo 1 forma de operaciones
1 componente de usuario
3 clases
1 modulo
17
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.
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.
18
Comentarios adicionales
¿Recodificar manualmente todo?: NO
necesariamente.
Existen otro tipo de herramientas de
migración:
TransKing
C-Sharpener
#develop
19
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/
20