Teamstudio Analyzer Under the Hood: What Does It Do and How Does It Work?

by Nigel Cheshire

When we founded Teamstudio in 1996, one of the first products we unleashed on the unsuspecting world was Teamstudio Analyzer. As such, Analyzer is one of our most, ahem, mature products still in production. It’s also one of our most successful products, with many thousands of copies in use in more than 60 countries all over the world.

And yet, Analyzer is also probably the most difficult product to describe, especially to anyone who isn’t familiar with the HCL Domino (formerly Lotus Notes) application development environment. One of the things that our products typically have in common is that, in general, the basic concept of what they do can is pretty easy to explain. CIAO! is version control for Domino. Delta finds differences between two application designs. Configurator? Search and replace. And so on. But Analyzer… what does it actually do? In this post, I’m going to attempt to answer that question by breaking it down into two subparts. If you’re not familiar with Analyzer, then a good way to explain what is does is by describing some examples of what it’s used for. Once I’ve done that, I’ll explain how Analyzer actually works.

Here are some examples of the sorts of things Analyzer can be useful for.

1. Helping to understand how an application design works

Despite Domino’s roots in the world of Rapid Application Development, Domino applications can be pretty complex. And, the code behind an application’s logic is divided amongst a number of different design elements (sometimes written in different languages). Which all means that, if you’re not the person who built the application in the first place (or even if you are), sometimes it can be really hard to figure out how the application fits together and generally what’s what.

Analyzer pulls all the design elements in a Domino app into their constituent parts, meticulously documenting them and extracting all the elements into a searchable format, making it much easier to navigate through the logic of the app. If the only other record of this information is held in the head of a developer who left the company 10 years ago, this can be really useful. Also, there is no need to keep a whole set of documentation current and worry about whether it’s been updated with the latest tweaks to the app. Whenever you run Analyzer, you get a complete and newly updated set of documentation of the application design.

2. Identifying dependencies in the design

Very closely related to the issue of documenting the design and exploring how the logic fits together is the issue of dependencies. This is where you may be looking at a particular part of the application design, perhaps because you need to make changes to it, and you’re wondering if the changes that you make might potentially break something else somewhere else in the design. Or maybe you’re even on a clean-up mission, looking to remove unnecessary parts of the app design to improve efficiency. Either way, you need to be absolutely sure that the view you’re about to delete isn’t used in an @DbLookup somewhere. Analyzer can help you with that.

3. Verifying compliance with standards and finding potential problems

Some organizations have coding standards that must be adhered to. Analyzer provides a way of defining a set of standards such that they can be tested programmatically against a Domino application, producing a list of violations of the standards very easily. There are some standards that are just common good practice, and Analyzer ships with a set of more than 30 of those rules baked into it. So that even without creating any of your own rules, you can find potential problems in your code right away. Simple example: out of the box Analyzer can identity visible, editable fields with no help text, or a categorized column in a view that doesn’t use twisties.

4. Identifying potential problems when upgrading to a new version of Domino

Mostly, new versions of Domino are backward-compatible with older versions. However, it’s not possible to completely avoid problems. For example, as new features are added to LotusScript, new reserved words have been added to the language. It’s a good idea to check older applications to make sure they don’t use those reserved words already. Analyzer makes this easy enough to do in any case, but we also have created a set of Upgrade Filters which are available with all of the version-to-version issues that we’ve identified covered.

Having talked about what Analyzer can do for you, let’s take a look at how it actually works.

To start with, Analyzer scans through the design of your HCL Domino database or template, reading every element of the design. It then creates a separate Domino database that contains all the constituent parts of that design. The resulting “analysis output” database contains a separate document for each design element - such as a form, view, subform, custom control, or XPage - with fields that represent each property or attribute of that design element. Because everything is represented in the fields of a Domino document, that makes it easy to search or build views to find what you are looking for or to highlight potential issues.

Analyzer’s auditing capabilities work by allowing you to define a set of criteria, also in a Domino database, that will be run against the analysis output as it is created. You can define your requirements and then apply them to the design of any database or template you choose. Analyzer also logs all quality checks for future reference, so you can build a full history of your code audits.

In summary, through comprehensive database documentation and built-in analysis tools, Analyzer tells the story of your application in concise detail. By automatically reviewing your code against pre-defined criteria and established best practices, Analyzer improves code quality and eliminates time-consuming code reviews.

If you have more questions about what Analyzer does and how it works, or if there’s anything else you want to talk to us about, click below to start a conversation. We love to chat!