The LSM is a very compact way to see a lot of structural information. Viewing options further help you to focus on the subset of information that you need at any time. You will generally make constant use of these options as you work on your containment model.

The LSM viewing options are available on the LSM toolbar. These let you set how items are arranged (auto-grouped) in the LSM, and which items and dependencies are displayed. Some of the commands are also available on the LSM context menu.

An exclamation mark is displayed top right of the LSM to remind you when you have used filtering or slicing to hide items or structure from the containment model:


LSM viewing options Show feedback dependencies causes any feedback (upward) dependencies to be displayed regardless of other viewing options. The LSM layout algorithm always tries to arrange items into rows so that all the dependencies flow downward. However this is not possible when there are cyclic dependencies between the items at a particular scope. In this case the algorithm works out the "minimum feedback set" of dependencies and arranges the items into rows so that only these dependencies flow upward. These are the dependencies that are controlled by this option.


Show dependencies options:

LSM viewing options just show dependencies from/to selected items.
LSM viewing options just show dependencies between selected items.
LSM viewing options show all dependencies.

Deselect this button to not show dependencies at all.

Tip - "Show feedback dependencies" LSM viewing optionsand "Show dependencies on selected" LSM viewing options is a good combination for most activities:


LSM viewing options Auto-group disconnected clusters - takes effect when some items or groups of items within a scope are disconnected. For example an expanded module may look like this:

Pressing the LSM viewing options option, the items might be organized like this:

The items have been organized into 3 groups containing 2, 5 and 3 items respectively. Since the groups are on the same row, we know that there are no dependencies between them. Also, because the items within the first 2 groups are arranged into more than one row, we know there ARE dependencies between them. Finally, the items in the rightmost group are on a single row, so we know there are NO dependencies between them. We can confirm this by showing all dependencies:

So this option organizes any disconnected clusters of siblings into separate groups, and then places any "orphans" - items with no local dependencies at all - into a rightmost group with a different icon.

Sometimes you recognize that this option has been selected when you expand a module and see something like this:

And as always you can expand (double-click) and explore the groups:

The notables view lets you easily find disconnected groups - select the "split" options. This lack of cohesion may indicate structural improvement. Since external modules may depend on one group but not others, the parent module (which inherits child dependencies) may have unnecessary external dependencies. This can be used to remove undesirable dependencies that involve just one group. For example:

The feedback dependency here is on just the group of 2 items. Since the 2 items have no other local dependencies, they could be removed from the test module to remove the incoming feedback dependency.


Auto-group according to interdependence or tag status:

LSM viewing optionsTangles - causes any tangled items at the same scope to be grouped together.

LSM viewing optionsCohesive clusters - causes items to be grouped according to their common dependencies and levels in the LSM. This is a great help in understanding Fat regions, and can help in the process of subdividing a Fat item into several smaller items, since the cohesive clusters are organized so as to never be tangled.

LSM viewing options Tangles and cohesive clusters - causes tangled items to be grouped together first, and then if there are many items in any scope, the items and tangles are further grouped according to their common dependencies and levels in the LSM.

LSM viewing optionsTagged items - places any tagged or partly tagged items in a separate group. Tagging is a great tool for analyzing dependencies, and grouping items tagged as interesting is often useful.

LSM viewing optionsTagged items plus any enclosed untagged items - places any tagged or partly tagged items in a separate group together with untagged items that are both used and used by tagged items.

Deselect this button to apply no auto-grouping.


Slicing:

When this option is deselected (the default), the LSM is organized by the complete containment model. Sometimes it is useful to see the underlying classes and their dependencies, without the containment structures. For example you may want to understand to what degree containment tangles are caused by the way classeshave been allocated to containers, versus the classes themselves being tangled. That's where this option helps. If you select the class slice, all the classes in the current (possibly filtered) model will be shown - levelized. You can similarly show the classes organized by just the leaf containers - i.e. without the containers-of-containers.

This is purely a viewing option and does not affect the underlying model. (It is possible to remove the containment structure from the model using the "flatten" commands). If either of the slice viewing option is selected, the exclamation warning will appear top right of the LSM.

Tip: Unless your LSM is filtered (see below), hierarchy slices are likely to be big. Extremely large maps can take time for Structure101 Studio to render, and anyway may not be hugely useful to see, unprocessed. Setting Auto-grouping viewing options before switching on a slice view can speed things up, and the result may be more useful. For example "autogroup by tangles and cohesive clusters" would organize your class slice something like this:

... which shows the overall shape of the levelized class structure, lets you see immediately where the class tangles are (group icons with red inside), and let's you drill in and chase dependencies as required.


Filtering commands:

Often you will find yourself working on a specific region of your containment model, where perhaps lots of what is shown in the LSM is not relevant for the task at hand. Structure101 Studio provides a rich filtering capability to help improve your signal-to-noise ratio. For example let's say you are working on the tangle in this view:

A lot of dependencies are coming into, out of, and across the tangled region you're working on, yet to reorganize the code so as to disentangle the containers, you don't need to see the items external to the tangle. In this situation you can select the tangle and click the "Filter in (isolate)" button to produce this view, which has all the information you need, and none of the information you don't:

You can hide items from the LSM in different ways using the filter commands described below. When items are hidden, only non-empty containers are included in the LSM. For example you could discover a class tangle in the class slice. You could isolate this and switch off slicing to reveal just the subset of the package/containment hierarchy that contains the tangle.

Filter in (isolate). Hides all but the selected items.

Filter out (hide). Hides the selected items.

Filter in (isolate) tagged items. Hides all but the items that are tagged. This is useful if, for example, you want to see the subset of the codebase that is needed by a particular item. In this case you could tag/used by/indirectly (context menu) and then click this button.

Filter out (hide) tagged items. Hides the items that are tagged.

Unfilter contents. Unhides any children/descendents of the selected item(s).

Unfilter all (clear filter). Unhides everything.

Previous filter. A undo/redo stack of filter states is retained. This command returns to the filter set prior to the most recent filter command. This is really useful, for example, when you are filtered on a problem region, and want to focus on a subset of the problem, analyze and address it, then return to the whole problem region again - but not unhide the whole codebase losing your focus. There can be many steps to creating the right filter set, so this is a great time saver!

Next filter. Takes you back to the filter set before the most recent "previous filter" command.

When any items have been hidden due to filtering (or hierarchy slicing), the warning exclamation mark appear on the LSM to remind you that you're not working with the whole project:


Viewing options menu.


LSM viewing options Maximize will make the LSM component the full size of the application window, giving users a broader canvas to visualize.