From time to time I have used a tool called NDepend to help me analyze the codebase I have been working on. Most of the times in the past I have been working in codebases where I was part of the project from the beginning or near its inception. This time I get to work on a codebase that has been developed for a few years and most of the people who started the development is long gone.

CQL the Sensei that let you find your way

When working with code I always try to follow “The Boy Scout Rule” and leave the code in a better state than when I started. I usually do this by refactoring and cleaning up when I touch the code for specific reason like a change request or bug fix. But some times you gets some slack or have quality improvement time scheduled. When this happens how do you know what part to go work on first? You need someone to guide you.

This is the area where NDepend really shines. NDepend really is like a Sensei that shows you the way. There are the standard reports and you get things like:

Methods with the most lines of code

Methods with the highest cyclomatic complexity

Methods with the most parameters

Methods with too many local variables

And the list goes on and on. The amazing and greatest thing however is that theses reports are not static. The reports are built with CQL – Code Query Language. This is more or less like having a SQL database that you can query, but the database is your codebase! In my case I needed to modify the most lines of code query to exclude the “InitializeComponent” method to see what methods to look into.

Here is the CQL query I used and the result(method names renamed to protect the guilty ):

SELECTTOP10METHODS

WHERE!(NameLike“InitializeComponent”)

ORDERBYNbLinesOfCodeDESC

methods

# lines of code (LOC)

MethodName1

424

MethodName2

401

MethodName3

383

MethodName4

340

MethodName5

303

MethodName6

301

MethodName7

292

MethodName8

265

MethodName9

262

MethodName10

257

Sum:

3 228

Average:

322.8

Minimum:

257

Maximum:

424

Standard deviation:

57.844

Variance:

3 345

Here is one of the standard queries that gives me the most complex methods.

// <Name>Methods too complex (CyclomaticComplexity)</Name>

WARNIFCount>0INSELECTTOP10METHODSWHERE

CyclomaticComplexity>20

ORDERBYCyclomaticComplexityDESC

methods

Cyclomatic Complexity (CC)

Full Name

Method1

147

Assembly.Class.Method1

Method2

125

Assembly.Class.Method2

Method3

119

Assembly.Class.Method3

Method4

118

Assembly.Class.Method4

Method5

107

Assembly.Class.Method5

Method6

103

Assembly.Class.Method6

Method7

92

Assembly.Class.Method7

Method8

91

Assembly.Class.Method8

Method9

88

Assembly.Class.Method9

Method10

88

Assembly.Class.Method10

Sum:

1 078

Average:

107.8

Minimum:

88

Maximum:

147

Standard deviation:

18.443

Variance:

340.16

With the standard reports and CQL I have Sensei that guides me in my Kaizen work on the codebase.

Visualize your codebase

Queries and tables with the results are very useful but with NDepend you can go to the next level by visualizing you codebase.

This visualization shows the number of lines of code per method in all classes analyzed. It is very easy to spot the problem areas in the codebase.

This is another diagram that help me spot potential problem areas of the codebase.

NDepend is really a great tool to give you a feel for your codebase and where your focus areas for you code Kaizen should be. Give it a try.