I would like here to
clarify from where NDepend analysis
takes its inputs. Indeed, it might sounds mysterious how NDepend can infer
comment metrics from assemblies for example. The trick is that the analysis
is fetching data from 4 different places: .NET assemblies, .NET PDB files, C#
source files and coverage files.
Here are some remarks:
- The 2 orange rows on the
left reflect the fact that PDB files location are inferred from assemblies
files location, and source files are referenced from PDB files. Coverage files
location cannot be inferred and must be specified.
- A PDB file does not need
to reside in the same folder as its corresponding assembly. NDepend will try first
to find the PDB in the same folder and if not found, it will try to find it in
any of the folders specified.
- Not all C# source files needed
to build a .NET assembly are referenced from the PDB file. Only those
containing some non-abstract methods are referenced. However NDepend uses a
heuristic to find the corresponding Visual Studio project file from the
referenced PDB files. If the VS project file is found, NDepend can then know
about all source files referenced by the project.
- In case the server used
to build the assemblies is not the same as the server that performs the NDepend
analysis, there is the possibility to rebase the location of source files as
- The bulk of data used by
NDepend comes from assemblies themselves. Only the number of lines of code
is computed from PDB files. The lines of code computation is explained here.
- Source files are parsed
to obtain metrics relative to comments: PercentageComment,
- NDepend computes the Cyclomatic
Complexity from the IL code. If source files are available it computes also the Cyclomatic Complexity from
the source code.
Experience shows that IL CC is a bit larger than the Source code CC. Indeed, a
C# ‘if’ expression yields one IL jump. A C# ‘for’ loop yields two different
offsets targeted by a branch IL instruction while a ‘foreach’ C# loop yields
- So far only C# source
files can be parsed by NDepend and in the future we plan to parse also VB.NET
source files. Notice that because the number of lines of code is computed from
PDB files, this metric is available for all .NET languages.
- If some PDB files and/or
some source files are missing, NDepend will warn about it but won’t stop the
analysis. As the bulk of data is inferred from assemblies themselves it is still
useful to analyze assemblies only, especially tier assemblies not released with
- You can read the Coverage
FAQ to know more about NCover
coverage XML files. Coverage metrics values are inferred from these files,
NbLinesOfCodeNotCovered. As PDB and source files, coverage files are optional.
- Finally, NDepend will
detect and warn about any synchronization issue between assemblies, and PDB
files, sources files and coverage files.