NDepend is a Visual Studio add-in designed for intense code analysis with the goal of high code quality. NDepend uses a number of metrics and aggregates the data in pleasing static and active visual reports. My evaluation of NDepend will be broken up into several different parts. In the first part of the evaluation I looked at installing the add-in. And in the last part I went over my first impressions including an overview of the features. In this installment I provide a little more detail on a few of the features that I really like. Dependency Matrix The dependency matrix is one of the rich visual components provided with NDepend. At a glance it lets you know where you have coupling problems including cycles. It does this with number indicating the weight of the dependency and a color-coding that indicates the nature of the dependency. Green and blue cells are direct dependencies (with the difference being whether the relationship is from row-to-column or column-to-row). Black cells are the ones that you really want to know about. These indicate that you have a cycle. That is, type A refers to type B and type B also refers to Type A. But, that’s not the end of the story. A handy pop-up appears when you hover over the cell in question. It explains the color, the dependency, and provides several interesting links that will teach you more than you want to know about the dependency. You can double-click the problem cells to explode the dependency. That will show the dependencies on a method-by-method basis allowing you to more easily target and fix the problem. When you’re done you can click the back button on the toolbar. Dependency Graph The dependency graph is another component provided. It’s complementary to the dependency matrix, but it isn’t as easy to identify dependency issues using the window. On a positive note, it does provide more information than the matrix. My biggest issue with the dependency graph is determining what is shown. This was not readily obvious. I ended up using the navigation buttons to get an acceptable view. I would have liked to choose what I see. Once you see the types you want you can get a decent idea of coupling strength based on the width of the dependency lines. Double-arrowed lines are problematic and are shown in red. The size of the boxes will be related to the metric being displayed. This is controlled using the Box Size drop-down in the toolbar. Personally, I don’t find the size of the box to be helpful, so I change it to Constant Font. One nice thing about the display is that you can see the entire path of dependencies when you hover over a type. This is done by color-coding the dependencies and dependants. It would be nice if selecting the box for the type would lock the highlighting in place. I did find a perhaps unintended work-around to the color-coding. You can lock the color-coding in by hovering over the type, right-clicking, and then clicking on the canvas area to clear the pop-up menu. You can then do whatever with it including saving it to an image file with the color-coding. CQL NDepend uses a code query language (CQL) to work with your code just like it was a database. CQL cannot be confused with the robustness of T-SQL or even LINQ, but it represents an impressive attempt at providing an expressive way to enumerate and interrogate your code. There are two main windows you’ll use when working with CQL. The CQL Query Explorer allows you to define what queries (rules) are run as part of a report – I immediately unselected rules that I don’t want in my results. The CQL Query Edit window is where you can view or author your own rules. The explorer window is pretty self-explanatory, so I won’t mention it further other than to say that any queries you author will appear in the custom group. Authoring your own queries is really hard to screw-up. The Intellisense-like pop-ups tell you what you can do while making composition easy. I was able to create a query within two minutes of playing with the editor. My query warns if any types that are interfaces don’t start with an “I”. WARN IF Count > 0 IN SELECT TYPES WHERE IsInterface AND !NameLike “I” The results from the CQL Query Edit window are immediate. That fact makes it useful for ad hoc querying. It’s worth mentioning two things that could make the experience smoother. First, out of habit from using Visual Studio I expect to be able to scroll and press Tab to select an item in the list (like Intellisense). You have to press Enter when you scroll to the item you want. Second, the commands are case-sensitive. I don’t see a really good reason to enforce that. CQL has a lot of potential not just in enforcing code quality, but also enforcing architectural constraints that your enterprise has defined. Up Next My next update will be the final part of the evaluation. I will summarize my experience and provide my conclusions on the NDepend add-in. ** View Part 1 of the Evaluation ** ** View Part 2 of the Evaluation ** Disclaimer: Patrick Smacchia contacted me about reviewing NDepend. I received a free license in return for sharing my experiences and talking about the capabilities of the add-in on this site. There is no expectation of a positive review elicited from the author of NDepend.