I’m regularly brought in to a client site when their applications are nearing completion. Usually, it’s for taking a look at performance problems or for completing some features that the existing staff couldn’t get to in time. In either case, understanding a Java program’s structure becomes very important. Today’s modern IDEs (my favorite is Intellij IDEA) do a great job of showing class structures and letting us browse through existing classes, interfaces, and packages with the ease of simple mouse clicks. However, I’ve found a nice tool by IBM that helps to truly comprehend structural information for discovery of complexity, potential side affects created by changes, and other facts necessary for maintenance of existing code as opposed to the creation of new code. If you need to understand someone else’s code and the relationships of packages, classes, and interfaces, I’d recommend taking a look at the IBM Structural Analysis for Java (S4J) toolkit.
From the IBM website: “S4J detects structural “anti-patterns” (suspicious design elements) and provides dependency web browsing for detailed exploration of anti-patterns in the dependency web. SA4J also enables ‘what if’ analysis in order to assess the impact of change on the functionality of the application; and it offers guidelines for package re-factoring.”