The AWS Blu Insights dependencies analysis feature handles dozens of programming languages, cumulating hundreds of statements (~250) that trigger links between programs, files, objects, and more. The results obtained from the dependencies engines are based on official documentations (when available) and on concrete use cases (refactoring projects) with iterations on specific cases and new findings.
Over the years, we have significantly improved the outcomes, so that a high percentage of the dependencies are automatically detected with no need for a Codebase deep dive. However, supporting all the languages and all the statements within their respective options is a tremendous task as we are continuously surprised by the imagination of the developers of those legacy systems in missing and using all the documented and non documented options of known and unknown languages.
For this reason, we designed the dependencies analysis to allow you to benefit from the results without being blocked by missing statements or specific cases. AWS Blu Insights computes all the known statements which are documented by language and type (Cobol example) and offers a set of features to let you iterate over the results to meet the expected graph (e.g. Manage Types, Manage Extensions, Import/Export JSON).
It is also possible to use Workspace to look for a specific statement (e.g. using regular expressions). This is usually combined with extra (meta) information shared by the customer and imported as labels or workpackages. Furthermore, users can download the dependencies as a JSON file and re-upload it after editing using a text editor or any program written in your favorite language. Lately, we also introduced graph operations to speed up the editing by adding and deleting nodes and edges directly into the graph using an intuitive UI. Combined, these features allow to make progress on the assessment without waiting for the product team to handle all the findings (although we heavily recommend sharing them to continuously improve the engines).
With this work, we wanted to go a step further and recommend a list of potential missing links you may add to your graph within a few clicks. These links are “potential” as their detection does not rely on a specific rule based on the programming language, but on a generic finder looking for cross-references in files independently from their types.
How does it work?
When users request a specific dependencies analysis (e.g. Mainframe), AWS Blu Insights triggers the cross-reference scanning in parallel (no impact on performance as it runs in its own container and only takes a few minutes). Once the results are available, the extra links not detected by the dedicated analysis are proposed. You can analyze these potential missing links to explore missing nodes, isolated nodes, etc.
One main issue resulting from this approach is the amount of false positives. To address this issue, we filter out the dependencies only found in comment lines for COBOL and JCL. And we remove dependencies that only differ in the link direction between the two analyses.
You can start using this feature through the new option “Show more links” to display the list of potential missing links, their details (source, target, line of detection), preview the code, and more.
Note: Existing projects will need re-launching the dependencies analysis to enable the feature.
This option can be mainly used in two ways:
- Selecting a group of nodes and looking for potential missing dependencies for them.
- Selecting all the nodes (prefer doing this in subgraphs if the graph is large) and looking for all the potential parents of one node.
Show cases
In this first case, we want to know what are the potential dependencies of CBACT04C.cbl, to do so, we select the file and click on “Show more links”, then we cherry-pick from the selection of potential links, and finally save.
In this second case, we want to find all the potential parents of CARDFILE.jcl. So we select all the nodes, click on “Show more links”, and then filter on all matches for CARDFILE.jcl. We can add potential missing links the same way we have done it in case one.
We have observed excellent results, especially for languages which are not supported by the dedicated analysis (e.g. Shell). We would like to hear from you and get your feedback and suggestions.
Now, go build!