A major non-admitted insurance carrier maintains and runs a comprehensive Insurance Information Management System (IIMS). IIMS is a business-critical desktop application supporting non-admitted insurance operations -- Policies, Claims, Agents, and Accounts -- for several hundred users across eight departments. The IIMS application has been in active use and ongoing maintenance since the late 1990s.
315K LOC Logic and 64K LOC GUI in 1,035 Files:
213 Forms, 1 MDIForm, 707 Classes, 4 UserControls, and 92 Modules organized into 17 VBPs.
4 EXEs, 13 DLLs
24,224 unique subprograms:
2,543 subroutines, 2,574 functions, 14,751 properties, 506 externs, 3,821 handlers, and 29 events.
216 unique UI containers containing 6,737 instances of 55 different kinds of controls.
85,714 calls to external COM components. The diversity of COM members is 1,554 unique members of 117 classes from 30 COM components.
256 calls to 98 unique entry-point APIs from 14 libraries. API Calls are made from 119 different user procedures.
GM assisted with the following four phases of the project:
- An Assessment, Definition, and Planning engagement
- A Standard Upgrade Phase resulting in an integrated, build-complete code of the entire system using a direct C# translation generated from the VB6 code and a C# stub framework generated for the external COM platform dependencies
- Two Proof-Of-Concept experiments demonstrating how the Standard Upgrade process can be improved to produce a runnable application with limited functionality
- A Custom Upgrade Phase implementing over 60 custom upgrade features and providing a clean, runnable .NET system ready for functional testing and transition to production
All four phases were completed in one year with a staffing level of one full-time GM resource, one full-time external .NET technical consultant from HMB, and one part-time client developer as well as support from client IT managers. In a parallel effort, our consulting partner, worked closely with the client to confirm functional scope, develop an automated UI testing process, and prepare for the transition to production.
Custom Upgrade Features
The collection of features integrated and delivered by the Custom Upgrade Solution are summarized below:
COM API/Control Upgrades
- ADODB: upgrade to System.Data and SqlClient [+]
- fpSpread: upgrade to WinForms.DataGridView [+]
- In-House .NET Interop Code: upgrade to direct Assembly References
- MSComCtl2.DTPicker: upgrade to WinForms.DateTimePicker
- ListView: upgrade to WinForms.ListView
- StatusBar: upgrade to WinForms.StatusBar [+]
- ToolBar: upgrade to WinForms. ToolBar
- TreeView: upgrade to WinForms.TreeView
- MSComDlg: upgrade to WinForms CommonDialog classes
- MSMAPI: upgrade to Microsoft.Office.Interop.Outlook
- MSMask: upgrade to WinForms.MaskedTextBox [+]
- MSXML: upgrade to System.Xml
- Outlook: upgrade to Microsoft.Office.Interop.Outlook
- RichTextBox: upgrade to WinForms.RichTextBox
- Scripting: upgrade to System.IO; Dictionary upgrade to strongly-typed Generic Dictionary<K,T>
- SysInfo: upgrade to .NET Framework calls
- TabControl: upgrade to Winforms.TabControl [+]
- Microsoft Word: remove
[+] .NET classes and controls were extended for better application compatibility and cleaner application code
- Class_Terminate: simplify
- VB6 Collections and Scripting.Dictionary: upgrade to strongly typed List<T>, Dictionary<K,T>, OrderedDictionary<K,T>
- Conditional Compilation: simplify
- Custom Data Binding: rework
- Error handling: upgrade to Try/Catch with new logging component
- Null/IsNull: upgrade to null or DBNull
- Variant/Object Type Inference: optimize
- Remove unused content: 75 whole files and 3,700 functions were removed
- Integrate hand-coded content: 13 whole files were replaced and 55 functions were re-authored
- Generate a VS2017 Solution integrating the full application stack: 14 generated projects and more than 60 preexisting, in-house .NET projects were integrated
- Replace Win32 wrapper functions with functionally-equivalent hand-coded functions using .NET APIs
Value Added Features
- Integrate gmStudio batch upgrade processing with a TFS DevOps Continuous Integration Pipeline
- Rework or remove various cases of technical debt
- Accept updates of the VB6/COM code corresponding to four (4) maintenance releases
- Create and maintain a Source Metrics Database in SQL Server for ongoing optimization of the work plan
At the end of the Custom Upgrade Phase, which was completed in six months, the gmStudio Upgrade Solution could be used to automatically rewrite the entire IIMS codebase to C# applying all of the custom upgrade features listed above. On a typical Windows 10 development machine, the entire process (of upgrading the full set of VBPs to an integrated Visual Studio Solution) runs, from start to finish, in under 2 minutes,.