Navigation

Perspectives

The application uses several perspectives to display different views on software artefacts and their relationships. Actions in the toolbar and in the popup details dialogs can be used to switch to another perspective. These actions are drill down for displaying more details, and roll up for displaying less details and navigating to a more abstract view of the system. Currently, there are five different perspectives installed:
  1. The classes perspective shows types (classes, interfaces and enumerations) and their relationships (uses, extends and implements). This is the base perspective. This means that all other perspectives are created from this perspective. Note that this graph is based on runtime artefacts, not compilation units. In particular, inner classes are represented by separate nodes. The top-level classes perspective is very similar, but aggregates top-level classes together with their inner classes.
  2. The package perspective shows packages (namespaces) and their relationships. The relationships are computed by aggregating the relationships between classes in the respective packages.
  3. The package tangle and the class tangle perspectives are based on the package and class perspective, respectively. The nodes in these perspectives are the strongly connected components from the respective base perspectives. This means that these graphs are compacted, and tangles (aka big balls of mud) are displayed as single nodes.
  4. The jar perspective shows jars (libraries) and their relationships. It is only available if the program consists of multiple jars.

Selecting Elements

Selection can be used to display only the parts of the graph a user is interested in. By selecting elements, the user can navigate through the graph. Both nodes and edges can be selected. Multiple selection is supported as well.

single selection: click on node
multiple selection: alt+click
deselect: alt+click
move nodes, don't select: shift+click
display node or edge details: right mouse click

Besides manual selection using the mouse, query-based selection is supported as well through the selection action in the toolbar. This allows the user to define constraints on nodes and edges, and to select the nodes and edges satisfying those constraints. There are several pre-configured constraints that can be parameterised, and a general-purpose node filter that evaluates JavaScript expressions. Selected elements are highlighted using a gray underlay.

Filters

Filters can be used to exclude nodes and edges from the view, and therefore to reduce the number of visible elements. Filters can be set and unset using actions on the main toolbar. There are several pre-configured filters that can be parameterised, and a general-purpose node filter that evaluates JavaScript expressions.

Size of the Visible Graph

The graphs extracted from software packages can be large (systems with around 20,000 classes and 50,000 relationships are common), and it is impossible to display the entire graph in a web browser in a way that conveys useful information. Users can use different strategies to deal with this problem:
  1. Choosing a suitable perspective (rolling up to a more compact view).
  2. Selecting elements.
  3. Using filters.
If the number of elements to be displayed is still too large, some elements will be removed from the display and a warning will be displayed in the toolbar indicating that the view is incomplete. Users can change the maximum number of visible nodes by clicking on this warning.

Property Views

To display a dialog showing the properties of a node or edge, hover over the element with the mouse and click the right mouse button. The properties action in the toolbar can be used to display general information about the system that is being displayed and analysed, including the size of the graphs for the various perspectives.

System Analysis

Patterns

The systems can be analysed for the existence of several architectural antipatterns. The analysis runs on the server, the respective query URLs are displayed in the pattern toolbar that appears when a pattern is selected. If analysis is slow, the server might be overloaded. In this case, please rerun pattern analysis at another time. Once the server has returned the antipattern instances, the user can navigate through the result set using the arrows in the pattern toolbar. The maximum number of results for a query is currently set to 100 due to server resource constraints. The following set of antipatterns is currently supported (click on links for more details):
  1. Abstraction without Decoupling
  2. Strong Circular Dependencies
  3. Subtype Knowledge
  4. Degenerated Inheritance

Metrics

There are several metrics that can be used in filter and selection conditions. Instability (I) and Distance to Main Path (D) are two metrics for packages that can be used to measure extensibility, reusability and maintainability of packages. A detailed explanation can be found at [1].

Betweenness centrality (btwn) measures the importance of edges in the overall network.

Antipattern score (apsc) measures the number of antipatterns (see above for a list of patterns) an edge participates in. It measures how critical a particular edge is. It turns out that these edges provide very good starting points for architectural refactoring [2].

The "show graph properties" function displays the sizes (nodes and relationships) for the several perspectives. It also shows two system wide metrics that measure the modularity of the graph with respect to packages and jars (containers). The basic idea of this metric is measure the density of relationships within modules (packages or jars in this case) compared to links between modules. This metrics are scaled to [-1,1], a value close to 1 means that most of the relationships are within modules (corresponding to the design principle of high cohesion within modules), while only a few relationships are between modules (corresponding to the design principle of low coupling between modules). For a more detailed discussion, see [3].

Two metrics are used in the tangle perspectives to measure the strength of the tangles. Both metrics are normalised to values between 0 and 1, higher values imply that it is more difficult to break up the tangle. Density measures the density of edges within a tangle, scaled to value between 0 (min possible number of edges) to 1 (max possible number of edges). Tangledness measures the length of circles within the tangle. Here we compute for each edge connecting two nodes A and B the length of the shortest path that connects B back to A. The metric is the average of these values scaled to [0,1] (using min-max normalisation).

References

  1. Robert Martin (1994): OO Design Quality Metrics. An Analysis of Dependencies.
  2. Jens Dietrich, Catherine McCartin, Ewan Tempero, Syed M. Ali Shah (2012): On the Existence of High-Impact Refactoring Opportunities in Programs. ACSC'2012. In Press.
  3. Mark E. J. Newman (2006): "Modularity and community structure in networks". Proceedings of the National Academy of Scences USA 103 (23): 8577–8696. doi:10.1073.

Reference

Class Perspective

Node Properties

PropertyTypeDescription
namestringthe local name of the class (or interface or enumeration)
namespacestringthe package name
containerstringthe name of the jar file or directory where the byte code is stored
typestring'class', 'interface' or'enumeration'
abstractbooleantrue for interfaces and abstract classes, false otherwise
ctangleintclass tangle id
ptangleintpackage tangle id

Edge Properties

PropertyTypeDescription
srcstringthe fully qualified name of the source node
tarstringthe fully qualified name of the source node
typestring'extends', 'implements' or 'uses'
btwnsdoublebetweenness centrality - see metrics for details
apscintantipattern score - see metrics for details

Top-level Classes Perspective

Same as class perspective.

Package Perspective

Node Properties

PropertyTypeDescription
namestringthe name of the package
containerstringthe name of the jar file(s) containing this package
ptangleintpackage tangle id
sizeintnumber of classes in this package
metrics.Caintafferent couplings
metrics.Ceintefferent couplings
metrics.Adoubleabstractness - ratio abstract/non abstract types
metrics.Idoubleinstability - ratio abstract/non abstract types
metrics.Ddoubledistance to main path

Edge Properties

PropertyTypeDescription
srcstringthe name of the source package
tarstringthe name of the target package
strengthintthe number of class dependencies creating this dependency

Class Tangles Perspective

Node Properties

PropertyTypeDescription
namestringthe id of the tangle
sizeintnumber of classes in this tangle
densitydoublesee metrics for details
tanglednessdoublesee metrics for details

Edge Properties

PropertyTypeDescription
srcstringthe name of the source tangle
tarstringthe name of the target tangle
strengthintthe number of class dependencies creating this dependency

Package Tangles Perspective

Node Properties

PropertyTypeDescription
namestringthe id of the tangle
sizeintnumber of packages in this tangle
densitydoublesee metrics for details
tanglednessdoublesee metrics for details

Edge Properties

PropertyTypeDescription
srcstringthe name of the source tangle
tarstringthe name of the target tangle
strengthintthe number of class dependencies creating this dependency

Jar Perspective

Node Properties

PropertyTypeDescription
namestringthe name of the jar
sizeintnumber of classes in this jar

Edge Properties

PropertyTypeDescription
srcstringthe name of the source jar
tarstringthe name of the target jar
strengthintthe number of class dependencies creating this dependency

Contact

The requested resource (/contact.html) is not available