Faced with a complex system that you need to understand better in order to enable effective maintenance or modernization? During a recent project, I decided to use a freely-available source code analysis tool called Code-Navigator after testing several other similar tools. Many of the open source tools available in this space are unfortunately specific to Java analysis, and I needed a tool that could analyze about 1200 legacy COBOL programs across 7 functional areas that were understood to be compartmentalized into functional-specific subsystems. And more detailed information about the system was just not available since the technical staff was relatively new and the documentation either contained discrepancies or was out-of-date.
Pareto is alive and well. Code-Navigator automated about 80% of the process to discover almost 12000 relationships (program-to-program call dependencies) between the programs. According to the documentation, the source code for Code-Navigator was built upon an earlier product called Source-Navigator. My understanding is that at some point both of these products were open-sourced by Red Hat. Developer support is very positive, as a developer at the project responded very quickly (the same day) to a post of mine by fixing a bug. Initially, the software was not very intuitive, but it grew on me after working with it a couple days. Everything (source code broken down by keyword, relationship, etc) was stored in 17 MySQL tables for further analysis. The initial cross-reference step took about 100 minutes, but since all the resultant data was stored in MySQL, subsequent analysis was very fast.
This analysis, which would have otherwise taken weeks, enabled me to demonstrate to the client that no true subsystems exist since the core enterprise programs are so tightly coupled. The great thing about Code-Navigator is that it is not simply a grep tool (although it does provide a convenient “Powergrep” tool), but intelligent software that understands the programming languages in which one works (e.g. it understood the difference between different types of COBOL calls as I was specifically looking for program calls). In addition, it supports other languages, such as Java, C#, and VB, although there are a lot more tool options in this space for modern languages such as these.