Structural Analysis for Java
A technology that analyzes structural dependencies of Java applications, measures stability, detects structural "anti-patterns," and more.
Date Posted: March 1, 2004
|
|
 |
 |
|
 |  Structural Analysis for Java ensures that only one instance is running per machine. If you would like to run multiple SA4J applications, you must install it on a different machine.
| | |
 |  Specify the archives and directories in the Your Code tab, then add third-party libraries/classpath archives in the Classpath/Third-Party code tab.
| | |
 |  Click on Options -> Project Config in the menu, make changes, and click on OK.
| | |
 |  SA4J looks at the method signatures, fields, and inheritance in order to extract the relationships between classes in your code.
| | |
 |  Classes, interfaces, and packages.
| | |
 |  SA4J looks for extends, implements, uses (method argument or returned from the method), and contains relationships.
| | |
 |  Local butterflies are the objects with many immediate dependents. Typically they would be basic interfaces, abstract base classes, and utilities. Local butterflies are very important, even though they are not necessarily problematic. If you change a local butterfly, the immediate local impact will be significant.
| | |
 |  Local breakables are the objects with many immediate dependencies. Local breakables are typically undesirable because they "know too much." Refactoring a local breakable into several classes will distribute the dependencies and improve the stability of the system overall.
| | |
 |  Local hubs are the objects with many immediate dependencies and dependents. In a sense, hubs are both butterflies and breakables. Local hubs are typically undesirable because they act as amplifiers of the change throughout the system. Refactoring a local hub into several classes will distribute the dependencies and improve the stability of the system overall.
| | |
 |  Global butterflies are the objects with a large number of global dependents. Generally they are basic interfaces, abstract base classes, and utilities. Global butterflies are very important, even though they are not necessarily problematic. If you change a global butterfly, the overall global impact will be significant.
| | |
 |  Global breakables are the objects with large number of global dependencies. Global breakables often break when anything in the system is changed. Typically, these would be implementations of the highest-level concepts in your system. Having many global breakables in your system is rather undesirable, because it implies high instability.
| | |
 |  Global hubs are hybrids of global breakables and global butterflies. As breakables they are often affected when anything is changed, and as butterflies they affect a significant percentage of the system. Global hubs can be very harmful for your system. They indicate that a system is not conceptualized well and that it is highly unstable.
| | |
 |  Tangles are a bunch of intermingled circular dependencies. If any object in a tangle is changed, all of the other objects in that tangle are affected. The bigger the tangle is, the more significant its negative impact will be on the rest of the system. Tangles are first candidates for refactoring. By looking at the weakest links within them, you can break them down into smaller, acyclic parts.
| |
|
|
 |
|
View screenshots:
 |
| |