Why use Lattix Architect with Static Analysis

Lattix Architect and Lattix Web are great complements to your static analysis solution. If you have a software quality initiative, a clean architecture is essential. Decreasing the complexity of your software allows you to get better results from your static analysis tools. By understanding your software dependencies and coupling, you can pinpoint areas that need focus for testing.

Clean architecture leads to better quality

Since problems in architecture do not directly point to software bugs, there is often a tendency to fix bugs without regard to the overall design. If the tests work and the software functions correctly, why worry about the architecture? As a result, architecture erodes over time and the original design intent is lost. Software modules get coupled and become hard to understand and maintain. This leads to poor quality software. The consequences of software coupling have been documented in a number of research studies. Read our whitepaper “Business Value of a Clean Architecture” for more information.

Indeed, keeping the architecture clean may be one of the best ways to reduce defects and vulnerabilities and improve the maintainability of your software. Wipro, using Lattix Architect to monitor their architecture, observed a 56% reduction in the number of bugs, as well as a 45% productivity improvement in fixing bugs.1

Lower complexity means better static analysis results

The paper “Measuring the Effect of Code Complexity on Static Analysis Results” shows that detection rates of static analysis solutions decreased with increasing code complexity. Complex programs are more likely to contain unusual code constructs. This causes problems for static analysis tools not designed to handle these situations. One way to lower complexity is to use a tool like Lattix Architect to understand the dependencies and coupling between modules. Once you have that understanding, you can start to improve problem areas and thereby lower complexity.

Pinpoint areas of focus (many dependencies or highly coupled)

Understanding the software architecture helps you pinpoint areas that you should focus on for testing, including static analysis testing. If you see a module or namespace with many dependencies, it’s a good candidate for additional testing. The module or system can affect many different areas and would therefore have a high impact on the rest of the code.

The other areas of interest are tightly coupled systems. Tightly coupled systems tend to exhibit a number of negative characteristics. A change in one module in a tightly coupled system usually forces a ripple effect of changes across other modules. Creating new modules in a tightly coupled system is hard because of the increased dependencies. A particular module might be harder to reuse and/or test because dependent modules must be included.


Understanding your software architecture maximizes the effectiveness of your static analysis solution. If you are interested in understanding your software architecture, check out Lattix Architect. We also have integrations with Klocwork and Understand that allow you to import Klocwork/Understand data directly into Lattix Architect.

1. Your Journey To Lean: Continuous Improvement Supported By Tools

Lattix 7.0 Profiles

We released Lattix 7.0 last month and its been a hectic time.

Let's take a quick glance at history. Lattix 6.0 was released last year and was followed up by a point release every month, each adding significant new features and usability.

We now have the platform for the next round of improvements. I will discuss various new features of Lattix in my upcoming blog postings. Today we will talk about the concept of a Profile, new in Lattix 7.0.

Lattix 7.0 sports 4 different profiles:

What is Profile?

A profile is a configuration of Lattix that comprises of related modules, tools, scripts, and default settings to support a common usage pattern.

Consider just a few examples (these are just examples, each profile has many more capabilities):

  • You are doing C/C++ development. If you are working on a mobile device, you may also have an interest in understanding how your Java application uses JNI to call into C/C++ based services. If your code is strongly object oriented, you may be interested in combining source(cpp) and header(hpp) into a single abstraction.
  • You are applying Lattix to Java applications. It is highly probable that you also care about Spring, Hibernate, EJBs, Hibernate and other frameworks. You may even have an interest in databases.
  • Your primary environment is a .NET based enterprise. You want to understand how managed code interacts with unmanaged code. You may also want to understand how the schemas, tables, stored procedures of your SQL Server are organized.
  • You are an expert in DSMs. You use Lattix for its powerful restructuring and impact analysis capabilities. Your data is in Excel. You are used to different conventions for dependencies and ordering.

A profile makes Lattix easier to use and gives visibility to a host of related capabilities that are built into Lattix.

What if your use of Lattix does not correspond to one of these profiles? In that case, you always have the ALL profile, which makes all the modules, tools and scripts available. In fact, the intrepid users can create their own profile or alter an existing profile.

Lattix Repository and Web Application

Lattix 6.0 was released earlier this year. We have continued our tradition by adding a slew of new features and improvements to the new platform through successive releases. Lattix now includes support for additional languages, improvements to the database parsers, sports several new reports, and has a host of usability and performance improvements. However, none is more important than the new Repository and LattixWeb Application. Built with Tomcat, GWT and Flex, the web application is the platform for new capabilities and further improvements in the future.

The Lattix Repository supports continuous integration with the ability to populate the repository from both the LDM and the LDC command line utilities. Users can now use the web application to graph metrics, compare builds and examine the architecture - all from the browser. Most importantly, it brings architectural visibility to the entire team.

Traditionally, when a new developer joins the team, they start out with a small project or by fixing a bug. It helps them to understand their new development environment and how the project is organized. Most of the time there are no architectural rules or pictures to guide them in the process. Every new developer creates their own mental image of the project, which gets progressively refined over time as the developer’s understanding improves. This is a process that is repeated over and over with every new developer. Over time, every developer generates a view of the architecture that reflects their individual expertise and experience. Unfortunately, there is no way to ensure that these private views are consistent with each other. The net result is that the architecture erodes over time and architectural boundaries become defuse. Changes are difficult; it is hard to estimate the effort needed to support new requirements; and it takes a long time to test changes to the system.

The Repository and LattixWeb Application provides a way for developers to continuously refine and publish the architecture so that the entire team shares a consistent vision and the architecture reflects the actual implementation. Architectural violations are caught and fixed early and during development. Architectural evolution now becomes explicit. New developers understand the current architecture right at the start and team productivity improves significantly. Many of our customers have now started the process of publishing the architecture and monitoring its changes.

DSM with Context Sensitive Dependency Cells

Conceptual Architecture with Context Sensitive Boxes

Metrics: Graph of Number of Types

Metrics: Trend Intercomponent Cyclicality

If you too would like architecture to be explicit and clear, please contact us. With the broadest support for languages, frameworks and databases, we will be happy to work with you to implement a system of architecture management that dovetails with continuous integration and brings visibility that is beneficial to every stakeholder.

How good are our Mental Models?

I spent many years working with UML models in the 1990s. At that time, the hope was that software development, centered on a model, was the future of programming. It was thought that model and code were simply two views of the same system and that they could be kept synchronized. The actual progress of software development practices hasn't quite worked out this way. However, there are places where model driven development has been successful. And, there are modeling tools such as Rhapsody that are development environments for creating a complete application.

Most people think that Lattix is great for code; many know that it works with frameworks and database; however, only a few (including Peter Varhol) know that Lattix also allows you to work with UML models. Since UML is already a rich visual modeling language why would you want to look at UML models from within Lattix?

Just like code, large UML models are created by teams of developers; and, just like code, they can be hard to understand and maintain. Lattix allows me to capture the big picture view of these models, identify undesirable couplings, create new structure and measure the new model – all in a short time.

Furthermore, what is interesting about a UML model is that it frequently includes additional artifacts such as use case diagrams, sequence diagrams, requirements etc. Many of these abstractions reflect our mental model, but since many of them do not relate directly to code elements, we never really get to see how well defined they are.

This is a DSM for of a Rhapsody model that has been around for a long time. The coupling issues become readily apparent when you see it in Lattix.

Some could legitimately argue that if our mental model is not what is implemented then we shouldn’t really care. This is largely true – but the model that is expressed in UML is actually created for the purpose of development and has a strong influence on what is actually implemented. A sequence diagram may just be a picture initially but could end up as a specification for an implementation.

Having looked at hundreds of UML models, I must conclude that even if the code was an accurate reflection of our UML model, we would still have many of the same problems that we have today with software development.

Lattix 5.6.1 is now available

We are proud to announce the release of Lattix 5.6.1. This release is localized for Japanese and we are especially grateful to our partner TechMatrix in Japan for their diligence and their dedication to quality.

This is the sixth release since we first introduced Lattix 5.0 in May 2009 and every new release has included significant improvements. We firmly believe that none of this would be possible without the modularity of our architecture. Architecture has been strategic to our ability to make continuous enhancements. We use Lattix on itself, every day, to keep it that way.

I will have a lot more to say about architecture, modularity and Lattix in future.

Welcome to the Lattix Blog!

Welcome to the Lattix Blog!

Lattix pioneered the use of DSMs for managing software architecture, an approach that is now in every day use at companies all over the world.

This blog will focus on issues related to modularity, architecture, and complexity. I also hope to pass on tips and techniques that we have learned over the last 6 years on the effective use of Lattix.