Visual Basic Upgrade Companion vs. Upgrade Wizard

The Upgrade Wizard is a migration tool that ships with Microsoft Visual Studio .NET
2003, 2005 and 2008 platforms. This tool was specifically designed to assist in
the upgrade process from Visual Basic 6.0 to Visual Basic.NET. It partially automates
the migration from VB6 to VB.NET by performing the refactoring needed to adapt most
of the simplest expressions and commands found in Visual Basic 6.0. It also contains
mappings from inherent VB6 libraries to .NET compliant equivalents. So it’s
basically a tool used to sketch the path to follow while upgrading from VB6 to VB.NET,
working as an assistant to demonstrate all the challenges during the whole migration
process. This way, the programmer will know where all the hardest spots while moving
to the .NET framework are. Beside the issues identification, the Upgrade Wizard
applies some automated translations over the VB6 code, reducing the time needed
for the upgrade process by generating target source code.
Alternatively, the Visual Basic Upgrade Companion (VBUC) is a significantly more
powerful migration tool, also dedicated to upgrade Visual Basic 6.0 applications
to the .NET platform. To start with, the VBUC is able to generate C# source code
as well as VB.NET. In the end, the Visual Basic Upgrade Companion’s architecture,
scope, and target audience are extremely different from the Upgrade Wizard’s.
(Note: You can read more on the conceptual differences between the Visual Basic
Upgrade Companion and the Upgrade Wizard at the
VB to .NET FAQ. Or keep reading this page for some specific differences
between both upgrade tools.)
The Upgrade Wizard is a valuable tool for VB6 to .NET migration projects; however,
there are several areas where the upgrade process can be highly improved. ArtinSoft
believes that many more code conversions can take place automatically through the
use of artificial intelligence, to greatly reduce the time and cost of any given
migration project, and here is where another main feature of the Visual Basic Upgrade
Companion kicks in: this tool not only offers additional standard functionality
but also excels in terms of customization. It has the ability to be customized according
to your needs, increasing even more the percentage of automation of your Visual
Basic 6.0 to .NET migration project.
Long time ago, ArtinSoft realized the market required a tool capable of handling
larger, more complex migration tasks, with all the implications this carries. Therefore,
the Visual Basic Upgrade Companion was conceived, incorporating the vast experience
acquired by ArtinSoft during years of successful migration projects.
One of the most common questions is how much effort will the Visual Basic Upgrade
Companion be able to reduce compared to the Upgrade Wizard? However,
there is no standard answer, since it depends on the characteristics of each application
to be migrated. Some data from real projects may be useful to shed some light on
the subject, but the precise numbers for each case can only be obtained after an
analysis of the VB 6.0 code and the customer’s target requirements. For example,
using the VBUC on a 600,000 LOC application allowed one of our
customers to save 15,000 hours. And that was using an older version
of the standard tool, that is, without any customization. Plus a comparison between
both tools cannot be based only on how much code does each converts automatically
from VB6 to VB.NET, or the percentage of migration automation, but also on the quality
of the resulting code. As you will read in the last chapters of this document, the
Visual Basic Upgrade Companion does further code analysis to detect patterns that
can be upgraded to more .NET-like, native structures, making the output more readable
and maintainable.
But let’s start with some of the productivity enhancements the Visual Basic
Upgrade Companion has vs. the Upgrade Wizard that will simplify your Visual Basic
6.0 to .NET conversion experience. You can read more about these and many other
features on the
Visual Basic Upgrade Companion page.
C# Generation: The Visual Basic Upgrade Companion is able to generate
C# directly from the Visual Basic 6.0 source code, as an alternative to Visual Basic
.NET. Since there are several differences between C# and VB6, the Visual Basic Upgrade
Companion applies special transformations for C# syntax, C# language constructions,
strict typing, event declaration and invocation, structured error handling, VB6
modules to classes, parameters (optional, default values, by-ref, out, paramarrays),
lower bounds to Zero, array dims and redims, default instances for forms, classes
and user controls, indexer properties, “with” statement, “return”
statements, interfaces support for C#, case sensitive corrections, brackets generation
for array access, variable initialization, and much more.
The Upgrade Wizard was designed to generate VB.NET source code only, meaning this
tool is unable to generate any other .NET compliant language, including C#.
(Read more about the Visual Basic Upgrade Companion’s C# generation
capability).
3rd Party Library Extensibility: The Visual Basic Upgrade Companion
can be customized so its core functionality is extended to satisfy your specific
VB6 to .NET migration needs. This feature allows you to automatically upgrade your
specific programming patterns, to add some new functionality on the upgraded application,
and to upgrade the ActiveX controls that you have in the original application to
.NET Framework components or newer versions of those specific third-party controls.
The Upgrade Wizard cannot be customized at all.
(Read more about the Visual Basic Upgrade Companion’s 3rd Party Library Extensibility).
Custom mappings: The Upgrade Wizard that ships with Visual Studio
.NET contains a series of maps for intrinsic VB6 libraries to be upgraded into .NET
constructions. These mappings are embedded into the application’s core and
can’t be neither modified nor extended.
The Upgrade Wizard that ships with Visual Studio .NET contains a series of maps
for intrinsic VB6 libraries to be upgraded into .NET constructions. These mappings
are embedded into the application’s core and can’t be modified.
The Visual Basic Upgrade Companion features a user-customizable mapping engine.
This means the user can specify particular transformations for element occurrences
in the original VB6 code, so that they can be converted (mapped) into specific library
elements, intrinsic or 3rd party.
Creating personalized mappings to handle conflictive or particular elements can
enhance the overall upgrade process precision.
(Read more about the Visual Basic Upgrade Companion’s
Custom Maps Extensibility).
Legacy Data Access Model to .NET: The Visual Basic Upgrade Companion
migrates the VB6 data access models (ADO, RDO, DAO, ADOR) to .NET equivalents, employing
special transformation rules and helper classes (for some specific source/target
combinations). On the other hand, the Upgrade Wizard generates a target application
that still uses those legacy data access models to communicate with the database
via COM Interop wrapper calls.
(Read more and see some code samples about the Visual Basic Upgrade Companion’s
legacy data access model to .NET functionality).
Structured Error Handling: The Visual Basic Upgrade Companion includes
features to remove unstructured “spaghetti” code and replace it with
structured flow control statements in .NET. All unused labels are removed from the
resulting code. Plus the most commonly used “On Error ” patterns
are currently recognized and replaced by the tool.
Meanwhile, the Upgrade Wizard migrates the application using the same “On
Error” statement patterns that Visual Basic 6.0 uses for error handling.
The Visual Basic Upgrade Companion generated code is easier to understand and conforms
to the coding standards used when programming with .NET languages.
(Read more and see some code samples about how the Visual Basic Upgrade Companion
supports
structured error handling).
Type inference: An Artificial Intelligence-based type inference
engine has been incorporated into the Visual Basic Upgrade Companion, which can
infer the most appropriate data types for variable parameters and return values,
avoiding the use of "generic" data types (i.e., Object). When an
Object or Variant variable is found, the Visual Basic Upgrade Companion declares
the variable with the appropriate type and avoids unnecessary Errors, Warnings and
Issues (EWIs) during the Visual Basic 6.0 to .NET process. Thus, by following the
type inference approach, the amount of manual work required to check for Upgrade
Warnings is drastically reduced.
On the other side, the Upgrade Wizard employs generic data types (object) and has
no type inference functionality.
(Read more and see some code samples about the Visual Basic Upgrade Companion’s
type
inference functionality).
.NET Native Libraries: Instead of upgrading VB6 code using the
Visual Basic Compatibility Libraries like the Upgrade Wizard does, the Visual Basic
Upgrade Companion promotes the use of .NET native libraries whenever possible.
There are several functions that when converted by the Upgrade Wizard, still rely
on the Visual Basic compatibility library. Once again, this does not mean that your
code will not compile; however, your code will be better off using the native libraries
that the .NET framework offers. By using native libraries, you are making your code
easier to read, easier to maintain, and in some cases, you will be improving the
performance of the application.
(Read more and see some code samples about how the Visual Basic Upgrade Companion
converts from VB6 to
.NET native libraries).
.NET Enumerations: Another important Visual Basic Upgrade Companion
feature, absent in the Upgrade Wizard, is the replacement of numeric literals assigned
to several control properties with .NET enumeration equivalents when possible, so
that the generated Visual Basic .NET code is more legible and maintainable.
Multi-Project Conversion: The Upgrade Wizard is able to convert
one single VB6 project file (*.vbp) at a time. Hence, if the user wants to upgrade
a complex VB6 application with this tool, several considerations must be taken in
order to accomplish full functional equivalence.
The Visual Basic Upgrade Companion allows the conversion of multiple Visual Basic
6.0 projects. It performs a separation between the pre-processing and migration
stages in order to fix problems like the use of by-ref parameters, interfaces, renaming
and typing among the different projects. The pre-processor environment solves the
references among projects and simplifies the overall migration process, because
those references included in the solution will be calculated and there will be no
error messages or warnings about missing members.
(Read more about how the Visual Basic Upgrade Companion supports VB6 multi-project conversions).
User declarations advanced refactoring: The Visual Basic Upgrade
Companion manages all the user declarations to perform tasks such as:
- Recognizing conflictive user-declaration names to assign new denominations to the
faulty identifier and all of its references.
These tasks improve the resulting source code readability and hasten the manual
change stage.
The Upgrade Wizard is able to detect some naming issues found during the upgrade
process and applies a simple renaming, but it is not able to refactor the resulting
code to comply with .NET naming convention standards.
Visual Basic Upgrade Companion vs. Upgrade Wizard in terms of quality of the generated
code
As you saw from the features described above, another big difference between the
Visual Basic Upgrade Companion and the Upgrade Wizard is the quality of the code
generated by each tool. Therefore, a comparison between both tools cannot be based
only on how much code does each converts automatically from VB6 to .NET, or the
percentage of migration automation, but also on the quality of the resulting code.
The Visual Basic Upgrade Companion does further code analysis to detect patterns
that can be upgraded to more .NET-like, native structures, making the output more
readable and maintainable. These improvements are separated in two large areas:
data type enhancements and grammar pattern transformations and detailed code improvements.
Data type enhancements
- Collections are upgraded to ArrayList or HashTable depending on their usage.
- Integer to enumerate: when integers are used where an enum name is expected, The
VBUC converts it to the corresponding VB6 enum field, and the maps it to the semantic
equivalent in .NET.
- IIF expressions: if the two expressions returned by the IIF have equivalent
types, only one coercion is generated for the whole IIF invocation. Otherwise
each expression is handled in the most appropriate way to make it match the expected
type.
- Several cases for conversions between types: objects to scalars (unboxing
cases), dates vs. strings, arrays to arrays, fixed strings, octals and hexadecimals,
etc.
- Advanced transformations for arrays in most Dim and ReDim scenarios.
- Integer data type variables can be optionally upgraded to Short or Integer depending
on their arithmetical usage.
- Enum Advanced conversions for:
- Enums in comparison operators.
- Enum values being transmitted as By-Ref.
- Coercions between Enums and other primitive data types.
- Transformations for fixed size strings.
Grammar pattern transformations and detailed code improvements
- New objects declarations including the initialization value.
- Long "If..ElseIf" constructs are upgraded to the "switch" construct
(“Select Case” in VB.NET), in order to improve performance and use better
programming practices.
- VBUC uses the "Return" keyword instead of the function name to set the
return value within a function.
- "For...Each" blocks are used instead of cycles that use iteration variables.
- Initialization values for variables are moved to the variable declaration.
- Typical nested "If" statements used in VB6 to produce short circuit evaluation
are upgraded to a single "If" statement with short circuit evaluation
operators (AndAlso and OrElse).
