United Guaranty (UG) has thousands of individual programs scattered across several platforms, and these programs comprise about 83 actual applications. Most of the programs are stored on their AS/400 in a single library, and many of these had components that resided on other platforms, including Novell, Windows NT, OS/2, or AIX.
For UG's Year 2000 effort, we needed to be able to take those several thousand objects and logically group them by application in order to effectively manage the conversion effort. We also had the following additional business needs:
We needed to be able to group these applications across platforms, a feature not supported by any of the tools we reviewed for the job.
We needed to be able to track our remediation progress and log additional information about specific applications or objects.
An interesting consideration is that an "application" is a fairly abstract term in the case of the architecture used on UG's AS/400... it's not a case where individual source components are compiled through a makefile into a single executable or binary. Instead, programs and modules are free to call each other as they will, and sometimes the same physical component "belongs" to many applications. We needed to be able to assign individual objects to remediation teams without duplication.
I created a Repository for UG that met all of our requirements above. Given a two-week design schedule, I created a prototype in Visual FoxPro, with the intention of upsizing the application to Oracle. Other considerations prevented us from ever upsizing the program, but we found that Visual FoxPro 5.0 was more than adequate to the task.
The application consists of platform-specific data-collection agents and the FoxPro database and User-Interface. The data collection agents scan the file system of the servers and place what information could be found into data files which are downloaded to the FoxPro server. In the case of the AS/400, we use display program references to gather further information about the way in which these objects interact (which programs call which, or which programs use which data objects).
All of this information is pulled into FoxPro tables, and the FoxPro clustering program examines the data, eliminates duplicates or extraneous data, and optimizes the clustering so that any single cluster is neither too small nor too large to effectively manage. The information is presented through both the company Intranet via Lotus Notes (readable with any Web browser), and a user-friendly Windows interface. One of my favorite features of the Windows interface is a graphical representation of the inter-relationships between the various application components.
Many different reports can be generated by the users: A application, or "test" cluster, report is available to list ALL of the components of an application, sorted by type, in order to assist in creating test environments. A "work" cluster report lists only those components assigned to a particular team for project tracking purposes. If the user needs specific information not contained in one of the predefined reports, an SQL query generator is available. I also included links to modified versions of my simulated command prompt (COMMAND.PRG) and script processor (SCRIPT.PRG) to handle 90% of the users' unforeseen programmatic analysis needs without recompiling. Another of the interesting components of this application is the Application Resource applet. UG had IS employees complete a questionnaire in which they rated themselves on their proficiency on each of the many applications, as well as on non-application specifics like languages, tools, and platforms. This information had sat dormant in multiple Word documents until I had the Repository read it into tables and categorize it for reporting purposes. This now allows us to assign resources to applications based on a "best fit", where language, application, and platform knowledge are taken into account.