Research, .net, y code">
Nothing Special   »   [go: up one dir, main page]

Migración de Aplicaciones VB6 A VBNet

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 20

Migración de una

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:

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.

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.

Eugenio Jacobo hernández Valdelamar. 2005. 2

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

2
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

Eugenio Jacobo hernández Valdelamar. 2005. 3

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.

3
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.

4
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.

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.

El asistente pregunta a que tipo de proyecto se desea actualizar. La única opción en


este caso es un EXE.

6
Eugenio Jacobo hernández Valdelamar. 2005. 7

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


almacenado.

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

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


VB6.

9
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)

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.

Es importante consultar este reporte para solucionar estos problemas.

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

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.

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

Eugenio Jacobo hernández Valdelamar. 2005. 15

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.

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

Eugenio Jacobo hernández Valdelamar. 2005. 16

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.

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

Eugenio Jacobo hernández Valdelamar. 2005. 17

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.

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.

Eugenio Jacobo hernández Valdelamar. 2005. 18

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.

18
Comentarios adicionales
 ¿Recodificar manualmente todo?: NO
necesariamente.
 Existen otro tipo de herramientas de
migración:
 TransKing
 C-Sharpener
 #develop

Eugenio Jacobo hernández Valdelamar. 2005. 19

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)

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/

Eugenio Jacobo hernández Valdelamar. 2005. 20

20

También podría gustarte