Frequently Asked Questions#

How do I detect circular dependencies?#

There are several ways to do this:

  • Simply select a subsystem and tag all the cycles within the selected subsystems. High level cycles are tagged using one tag and low level cycles are tagged using another tag. Generally, high level cycles are of concern. You invoke the Tag Cycles menu item, by right clicking on the selected subsystem or by invoking it from a menu item in Tools.

  • You can select a subsystem and generate a Project Report to find all cycles within a selected subsystem. In order to find all cycles in a project, simply select $root.

  • DSM Component (or Reachability or As Early As Possible or As Late As Possible) Partitioning will also identify cyclically connected subsystems. Chose a subsystem within which you want to see the circular dependencies. Expand it so you see all its children. Select the partition button on the tool bar (or right click and chose the partition menu item). All the dependencies above the diagonal are guaranteed to be part of circular dependencies.

How do I generate a report for all circular dependencies?#

Bring up the project report dialog by Reports–>Project Report, make sure the ‘cycles’ checkbox is selected and click OK. Once a report is generated, you can peruse it in Lattix, view it in your browser or export it to a xml, html, xls or text file. The following types of cycle reports can be generated:

  • Cycles: A report of cycles at every level of the hierarchy is generated.

  • Low Level Cycles: A report of cycles between all the leaf partitions is generated. The hierarchy is ignored.

  • Low Level Cycles with Members: A report on the cycles that result from recursive calls is generated.

How do I move the Repository from one directory to another?#

Follow these steps to move the Repository:

  • Uninstall Lattix Web.

  • Copy the Repository directory to the new location.

  • Reinstall Lattix Web (specify the new location of the Repository during the installation).

How do I see all the dependencies associated with a subsystem?#

In order to see all the dependencies associated with a subsystem, just select the row header or the column header of that subsystem. You will see all the dependencies of this subsystems and who uses this subsystem in the Usage tab.

How do I see the dependencies between two subsystems?#

In order to see the dependencies between two subsystems, expand the DSM to show those two subsystems. Now select the cell whose column corresponds to the subsystem that makes uses of the other subsystems and whose row corresponds to the subsystem which provides to the other subsystems.

How do I see which external libraries are used?#

You can see all the external libraries which are used by selecting $root. The Uses pane will show you all the external libraries which are being used.

How do I see who uses each of the external libraries?#

Select $root. The Uses pane shows you all the external libraries which are being used. Select any of the external libraries and you will see all the subsystems which use that external library.

How do I drag-n-drop subsystems?#

Select the subsystem to be moved. Move your cursor within that subsystem close to the top or bottom boundary. You will see the cursor change to a move icon. Keeping the right mouse button pressed drag the subsystem to where you want to insert it. As you drag it you can put it between two subsystems when the boundary between those two subsystems is highlighted. You can insert it into a subsystem when the entire boundary of a subsystem is highlighted.

Can I get a list of all the architectural changes I made?#

You can see the architectural changes in the Work List tab. The Work List can be exported using Reports –> Project Report in all the file formats supported by Lattix.

How do I export the images?#

You can export the DSM image and the conceptual architecture image through the Reports –> Export dialog. Choose File Type to be JPEG or PNG and click on Save.

How do I filter for a specific dependency type?#

You filter for a specific dependency type by selecting View –> Filter Dependencies.

How do I check if the architecture has been violated by new changes?#

Lattix shows you the architectural violations in a project in the Violations tab. If you have changed your project, simply update your current project to see the new Violations. The Update Report will also show you the change in violations - new violations that may have been introduced or old violations that may have been fixed by the changed. You update a project by Project –> Project Update. You can also use the command line utilities to update the project and generate reports.

How do I update the dependency model and discover any possible rule violations at build time?#

Run the command line utility Lattix LDC as part of your build script. LDC does a project update and produces an Update report which shows you what’s changed including violations. To see how to integrate Lattix LDC into your build system please read the User Manual.

How do I configure an external source editor/viewer into Lattix?#

To use an external editor, first configure the editor as an external viewer. Then specify the editor id of the external viewer in the module specific preference.

You can configure any external viewer or source editor into Lattix. Bring up the View Preferences dialog by selecting View–>Preferences. Select External Viewer Configuration. Now click on the Add Button and specify the external viewer. There are three fields you will configure:

  • Editor Id: Specify a unique id string.

  • Command: Specify the editor command. For example enter ‘notepad.exe’ for configuring in notepad on Windows.

  • Arguments: Specify the input arguments to the editor. For example specify ‘${sourcefile}’ if you want the source file to come up in the editor.

To use VisualSlick editor, follow these steps:

  • Add Editor Id as VS

  • Add Command as c:\vslick\win\vs.exe

  • Add Arguments as ${sourcefile} “-#goto_line ${linenumber}”

To use the Eclipse editor, follow these steps (tested with Helios Service Release 1 Build id: 20100917-0705):

  • Add Editor Id as Eclipse

  • Add Command as c:\eclipse\eclipse.exe (Please specify the location of eclipse.exe, as appropriate for your configuration)

  • Add Arguments as –launcher.openFile ${sourcefile}

To use Notepad++ editor, follow these steps:

  • Add Editor Id as Notepad++

  • Add Command as c:\C:\notepad++\ansi\notepad++.exe

  • Add Arguments as ${sourcefile} -n${linenumber}

To use Microsoft Office, follow these steps:

  • Add Editor Id as Cmd

  • Add Command as cmd

  • Add Arguments as /c “start “” ${sourcefile}”

To use Microsoft Visual Studio, follow these steps:

  • Visual Studio has already been configured with the id “dotnet”. It is also configured as the editor for the NET module. For other modules, simply configure the “dotnet” editor id for that module.

To set the default editor for any module, you can set the editor id for that plugin through View–>Preferences–>Modules–>ModuleName Defaults–>External Editor.

How do I find all dependencies on one or more members in a project?#

For instance, in a C/C++ project I want to know all the functions that read/write to a global data variable.

  • Make sure that your project is member expanded. If not, select $root, right click, and choose Expand Members.

  • Select Search/Tags Dialog in the Navigator, right click and select Find (or use the shortcut ctrl-f). In the Search Dialog select Filter Atom Kind and choose Data (or the appropriate member kind for your module). Click on OK and you should see all the member of that kind tagged with the tag ‘search’.

  • Bring up the Impact Report, select Source as the ‘search’ tag. Select Show Members.

  • Run the report and you should see all the direct dependencies on the data members. You can save the report in any of the following formats: html, xls, xlsx, xml, or txt format.

How do I hide all subsystems of a specific type?#

For instance, I want to see a DSM which does not contain any header files.

You can hide all subsystems of a specific type by first tagging them and then hiding the entire tagged branch as follows:

  • Go to the Search/Tabs pane and click on New Search.

  • Click on the Filter Atom Kind button.

  • Specify Atom Kind as a header file. Click on OK to complete the search. All the partitions containing header atoms will be tagged. The Search/Tabs pane shows all the tagged elements organized as a tree.

  • Select $root in the Search/Tabs pane, right click and choose the menu item Hide Branch. All the tagged elements will now be removed from the model.

Lattix also allows you to hide all other items except the tagged elements. So, if you wanted to hide everything except for the header files, you could simply tag the partitions which contain header file atoms and then hide everything else.

To unhide the hidden elements, bring up View–>Hidden Subsystems dialog. Unselect $root, click on OK, and all the hidden subsystems will be brought back into the model.

What merge order should I use for multi-module projects?#

For instance, I have a project with Java, Hibernate and Oracle. What should the merge order be?

The merge order determines how the atoms will be merged. In this case the ultimate picture we want is the dependence of the Java application on the Oracle database. The Java module provides the Java atoms (class, interface, method, data member etc); and the Oracle module provides the Oracle atoms (schema, table, stored procedure, tigger etc). However, the Hibernate module provides atoms which are both Java and Oracle atoms such as Java classes and their related Oracle tables. Therefore, the merge order would be to put Hibernate at the end so that the Java atoms from Hibernate module would be merged with Java atoms from the Java module, and the Oracle elements from the Hibernate module would be merged with Oracle elements from the Oracle module.