8.11.1.2.  Focus

The primary goal of the focus is to reduce the amount of visible elements and dependencies so that specific aspects of the software system can be analyzed more easily. Several focus operations are available that can be applied to 1 or more elements or dependencies. To apply a focus operation simply select elements or dependencies and choose a focus operation from the context menu.

Remove From Focus

The simplest form of reducing the amount of visible elements/dependencies is to remove elements/dependencies from the view, that are currently not of interest. Select the elements/dependencies, right click to bring up the context menu and choose 'Remove From Focus'.

Set Focus

Another way of reducing the amount of visible elements/dependencies is to explicitly focus elements/dependencies. Select the elements/dependencies, right click to bring up the context menu and choose 'Set Focus'.

Focus Dialog
Figure 8.23. Focus Dialog


The transitively options also let you include indirectly connected nodes per incoming/outgoing dependencies.

Difference between 'Transitively' and 'Transitively (programming element based)':

Out Transitively: The selected node(s), their interdependencies and all nodes used by the selected node(s) transitively are considered. Leaf nodes (either components or logical top-level programming elements) are treated as an indivisible unit.

Out Transitively (programming element based): The selected node(s), their interdependencies and all nodes used by the selected node(s) transitively are considered. Leaf nodes (either components or logical top-level programming elements) are not treated as an indivisible unit. Only the connected programming elements are used.

So when components/logical top-level programming elements are treated as indivisible units all those "units" are collected (shown) when any programming element (method,field,type,...) including nested elements uses any programming element of another "unit". That means you can see the interconnections based on those "units". The other programming element based modes only show the interconnections of programming elements.

When you are planning to make changes to 1 (or more) component(s) (source and header files combined in C,C++, source files in all other languages) with 'In Transitively' you would see all affected other components being able to assess the impact of those changes, useful to know what needs to be re-tested or simply to know the magnitude of the impact.

With 'Out Transitively' you would see the affected (connected) components which could help to see what (physically) belongs together and decide how to structure due to architectural aspects (i.e. which components might belong to the same architecture artifact) or even decide which refactorings to apply to bring related things closer together.

'Transitively (programming element based)': Using that mode you normally you see less elements since only the connected programming elements are used. Combining those modes with different dependency types allows you to see inheritance based connections or call bases connections and so forth.

NOTE: If only dependencies are selected only the 'Dependency Types' are available and not the 'Nodes' section.

Add To Focus

Select elements/dependencies, right click to bring up the context menu and choose 'Add To Focus' to potentially extend the visible elements dependencies.

Add to Focus Dialog
Figure 8.24. Add to Focus Dialog


When not all children of a selected element are currently visible the user can decide to include the not visible children as well by selecting the 'All Children' option.

Re-Adding Not Visible Elements

Once an element is removed from the view it is still possible the locate the element using the Find dialog (context menu 'Find Elements...') select it and use 'Reveal With Focus...'.

Clear Focus

When you have an applied focus, the context menu will show the 'Clear Focus' entry to clear the current focus.