Page tree
Skip to end of metadata
Go to start of metadata


Alexander Forbes offers integrated retirement, investment, life and insurance solutions to create, grow and protect wealth and assets.

Great Migrations worked with Alexander Forbes to design and implement and end-to-end upgrade solution producing an integrated build-complete C# system with a specific set of custom upgrade features.

In addition to developing the upgrade solution to help automate the rewriting process, Great Migrations developed an automated UI testing tool and test scripts to help automated the functional testing process.

Project Highlights

System Metrics

FILES187K LOC Logic and 89K LOC GUI in 327 Files: 259 Forms, 2 MDIForm, 35 Classes, and 16 Modules organized into 15 VBPs.
BINARIES5 EXEs, 10 DLLs, 0 Controls, 0 OLE EXEs,       
MEMBERS8,079 unique subprograms: 2052 subroutines, 1276 functions, 404 properties , 148 externs , 4199 event handlers.   
UI240 unique UI containers containing 9612 instances of 45 different kinds of controls.    
COM242,613 calls to external COM components. The diversity of COM members is 759 unique members from 159 types in 17 COM components. 
WIN32225 calls to 66 unique entry-point APIs from 10 libraries. API Calls are made from 24 different user procedures.  

Upgrade Features

COM to .NET replacements:

  • ADODB: upgraded to MigrationSupport.DataLib (an ADODB emulation based on System.Data and delivered as C# source)
  • CDO: upgraded to System.Net.Mail
  • Excel: upgraded to Microsoft.Office.Interop.Excel
  • Ieframe: upgraded to WinForms.WebBrowser
  • MSACAL: upgraded to System.Windows.Forms.MonthCalendar
  • MSComCtlLib: upgraded to System.Windows.Forms controls (StatusBar, ListView, TabStrip, ProgressBar, ImageList)
  • MSComCtl2: upgraded DTPicker, MonthView, UpdownControl to Winforms Controls (DateTimePicker, MonthCalender, NumericUpDown)
  • MSHierarchicalFlexGridLib: upgraded to MigrationSupport.UI.Grid (a Grid control derived from WinForms.DataGridView and delivered as C# source)
  • MSFlexGridLib: upgraded to MigrationSupport.UI.Grid using MSHFlxGrid rules
  • MSMask: upgraded MaskEdBox to WinForms.MaskedTextBox
  • TabDlg: upgraded to MigrationSupport.UI.TabControl (a TabDlg emulation delivered as C# source)
  • RichTextLib: upgraded to RichTextBox to WinForms RichTextBox
  • Scrrun: upgraded to System.IO
  • ShdocVw: upgraded Migrate ShDocvwCtl.WebBrowser to WinForms.WebBrowser
  • Word: upgraded to Microsoft.Office.Interop.Word
  • In-house .NET: upgraded to use .NET directly instead of Interop

Trace Logging

The upgrade solution used out Trace Logging feature. This feature instruments the VB6 code such that a record to a log file is written whenever execution enters or exits a method. Translating the instrumented VB6 code produces an instrumented .NET code as well. This technique, along with careful side-by-side testing, helps us analyze behind-the-scenes differences between the VB6 and .NET code.

Extension Methods

The upgrade solution used our Lightweight Object-Oriented C# coding standard that uses various extension methods to more accurately emulate VB6 semantics.

Automated UI Testing

A significant deliverable from the project was automated UI testing procedures for the test cases provided by the client.  GM developed an automated testing framework based on Microsoft Test and the Coded UI Testing framework distributed with Microsoft Visual Studio 2013 Premium Edition. We refer to this as gmTest. gmTest employs a high-level scripting language called GM Testing Language (gmTL) to describe the steps of each test case. Because of the dynamic nature of gmTest, gmTL scripts are much easier to write and maintain than those written in any other test automation language.