Dependency Graph

Online documentation:

Dependency Matrix

Online documentation:

Visualizing Code Metrics through Treemaping

With the Online documentation, understand how Treemaping can help you see patterns in your code base, that would be hard to spot with other ways.

Abstractness versus Instability Diagram

The Abstractness versus Instability Diagram helps to detect which assemblies are potentially painful to maintain (i.e concrete and stable) and which assemblies are potentially useless (i.e abstract and instable).

Online documentation:

For beginners: Where to start

Code queries and rules results are truncated to list a maximum of 25 code elements in this report

Does this report gets too large?

NDepend 7.Current (v2024.1.0.9728) \ Main
NDepend 7.Current (v2024.1.0.9728) \ Main \ Rules
NDepend 7.Current (v2024.1.0.9728) \ Main \ Quality Gates
NDepend 7.Current (v2024.1.0.9728) \ Main \ Quality Gates \ Quality Gates
NDepend 7.Current (v2024.1.0.9728) \ Main \ Metrics \ Application Statistics
NDepend 7.Current (v2024.1.0.9728) \ Main \ Metrics \ Assemblies Metrics
NDepend 7.Current (v2024.1.0.9728) \ Main \ Metrics \ Namespaces Metrics
NDepend 7.Current (v2024.1.0.9728) \ Main \ Metrics \ Types Metrics
NDepend 7.Current (v2024.1.0.9728) \ Main \ Assemblies Dependencies
NDepend 7.Current (v2024.1.0.9728) \ Main \ Namespaces Dependencies
NDepend 7.Current (v2024.1.0.9728) \ Main \ Types Dependencies
NDepend 7.Current (v2024.1.0.9728) \ Main \ Build Order
NDepend 7.Current (v2024.1.0.9728) \ Main \ Abstractness vs. Instability
report date20 Mar 2024 14:40:20
analysis duration00:21.931
ndepend version 2024.1.0   Professional Developer/Build-Machine Edition
baselineCompare with project {NDepend 2023.2.3} most recent analysis result (analysis result obtained on 20 Mar 2024 12:06:09)
code coverage data Loaded! Code Coverage metrics, Queries and Rules relative to code Coverage, can be used.

Diagrams

;TinyComponentDependenciesDiagram.png
Dependency Graph
View as ?fullscaled
;TinyComponentDependenciesMatrix.png
Dependency Matrix
View as ?fullscaled
;TinyVisualNDependView.png
Treemap Metric View
View as ?fullscaled
;TinyAbstractnessVSInstability.png
Abstractness vs. Instability

Application Metrics

Note: Further Application Statistics are available.
# Lines of Code
237 725   ;TrendIconGrayUp.png   +4 253
49 321   (NotMyCode)   ;TrendIconGrayUp.png   +872
Estimated Dev Effort   5 685d   ;TrendIconGrayUp.png   +92d
# Types
4 933   ;TrendIconGrayUp.png   +56
23   Assemblies   ;TrendIconGrayConstant.png   no diff
585   Namespaces   ;TrendIconGrayUp.png   +6
34 030   Methods   ;TrendIconGrayUp.png   +335
12 782   Fields   ;TrendIconGrayUp.png   +241
4 816   Source Files   ;TrendIconGrayUp.png   +38
694 188   Line Feed   ;TrendIconGrayUp.png   +9 312
8 843   Third-Party Elements   ;TrendIconGrayUp.png   +50
Comment
34.3%   ;TrendIconGrayDown.png   from 34.45%
124 126   Lines of Comment   ;TrendIconGrayUp.png   +1 410
Debt
0%   ;TrendIconGreenDown.png   from 0.00022%
Rating   A
Debt   0min 0s   ;TrendIconGreenDown.png   -(5min)
Annual Interest   0min 0s   ;TrendIconGreenDown.png   -(40min)
Breaking Point   0ms   ;TrendIconGrayDown.png   -52d
Coverage
87.35%   ;TrendIconGreenUp.png   from 87.18%
   ;PercentageCoveragePie.png
200 325   Lines of Code Covered   ;TrendIconGreenUp.png   +4 081
29 009   Lines of Code Not Covered   ;TrendIconRedUp.png   +154
8 391   Lines of Code Uncoverable   ;TrendIconGrayUp.png   +18
Method Complexity
801   Max   ;TrendIconGrayConstant.png   no diff
2.68   Average   ;TrendIconRedUp.png   +0.0097
Quality Gates
;StatusQGFail.pngFail0
;StatusQGWarn.pngWarn0
;StatusQGPass.pngPass11
Rules
;StatusWarningCritical.pngCritical0
;StatusWarning.pngViolated0-1
;StatusBigOk.pngOk230
Issues
;Empty.pngAll0-2
;Severity_Blocker.pngBlocker0
;Severity_Critical.pngCritical0
;Severity_High.pngHigh0-2
;Severity_Medium.pngMedium0
;Severity_Low.pngLow0
;Empty.pngSuppressed1 002
23
  • The number of projects with no issues.
  • Sort the column #Un-resolved ascending to list these files first.
0
  • The number of projects with at least one unresolved issue but no new issue added since the baseline.
  • Sort the column #Un-resolved Issues to list these files first.
0
  • The number of projects with at least one new issue introduced since the baseline.
  • Sort the column #New Issues to list these files first.
;InfoSmall.png Clicking a project's name selects its associated source files under the Issues tab.
This occurs because the search pattern for the source files grid is set to the project's name.
Project Name#New Issues#Un- resolved#Fixed
New Debt
Debt%Cov#Types#Statements
;Project-CSharp.pngNDepend.Core ● 00|m100|00| 10min 0s0min 0s|c94|09| 94.45%|m100|00| 2 308|m100|00| 93 609​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.Analysis ● 00|m100|01| 10min 0s0min 0s|c98|04| 98.62%|m4|05| 109|m5|07| 4 749​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.SourcesZipper00|m0|03| 00min 0s0min 0s|c100|00| 100%|m0|22| 1|m0|21| 83​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.Platform.DotNet ● 00|m0|04| 00min 0s0min 0s|c98|03| 98.94%|m14|03| 344|m23|03| 22 415​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.TrendLogger ● 00|m0|02| 00min 0s0min 0s|c100|01| 100%|m0|21| 1|m0|20| 87​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.VisualStudioExtension3 ● 00|m0|05| 00min 0s0min 0s|c100|02| 100%|m1|11| 30|m1|12| 1 034​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.API ● 00|m0|06| 00min 0s0min 0s|c98|06| 98.03%|m13|04| 316|m9|04| 8 541​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.WebSite.4Tests ● 00|m0|07| 00min 0s0min 0s|c95|07| 95.75%|m4|06| 101|m6|05| 6 287​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.Console.MultiOS ● 00|m0|08| 00min 0s0min 0s|c95|08| 95.65%|m0|19| 3|m0|22| 42​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.SonarQube.RuleRunner ● 00|m0|09| 00min 0s0min 0s|c98|05| 98.15%|m0|15| 10|m0|15| 271​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.UI ● 00|m0|10| 00min 0s0min 0s|c83|10| 83.63%|m34|01| 804|m28|02| 26 624​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.TeamCity ● 00|m0|11| 00min 0s0min 0s|c82|11| 82.14%|m2|10| 50|m0|13| 812​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.VisualStudioExtension.Impl .NetFx ● 00|m0|12| 00min 0s0min 0s|c77|12| 77.91%|m0|13| 20|m1|10| 1 630​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.Platform.DotNet.NetFx ● 00|m0|13| 00min 0s0min 0s|c76|13| 76.65%|m2|09| 54|m5|06| 5 497​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.UI.NetFx ● 00|m0|14| 00min 0s0min 0s|c75|14| 75.13%|m26|02| 619|m61|01| 57 545​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.VisualStudioExtension .Installer ● 00|m0|15| 00min 0s0min 0s|c66|15| 66.84%|m0|17| 8|m0|18| 196​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.Console ● 00|m0|16| 00min 0s0min 0s|c66|16| 66.67%|m0|16| 9|m0|16| 234​​​​​​​​ ​​​​ ​
;Project-CSharp.pngVisualNDepend ● 00|m0|17| 00min 0s0min 0s|c65|17| 65.5%|m0|18| 8|m0|17| 200​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.VisualStudioExtension.Impl ● 00|m0|18| 00min 0s0min 0s|c40|18| 40.67%|m2|08| 63|m2|09| 2 274​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.ILSpy.Plugin ● 00|m0|19| 00min 0s0min 0s|c32|19| 32.31%|m1|12| 26|m1|11| 1 149​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.ReflectorAddIn00|m0|20| 00min 0s0min 0s|c16|20| 16.49%|m0|14| 13|m0|14| 655​​​​​​​​ ​​​​ ​
;Project-CSharp.pngVSCoverageToXml00|m0|21| 00min 0s0min 0s21N/A|m0|20| 2|m0|19| 100​​​​​​​​ ​​​​ ​
;Project-CSharp.pngNDepend.VisualStudioExtension .Common3 ● 00|m0|22| 00min 0s0min 0s22N/A|m3|07| 75|m3|08| 3 691​​​​​​​​ ​​​​ ​
;StatusQGPass.png11 pass
  • The number of Quality Gates that pass.
  • A Quality Gate passes if its value is lower than its warning threshold, and lower than its failure threshold.
;StatusQGWarn.png0 warn
  • The number of Quality Gates that warn.
  • A Quality Gate warns if its value is equal to or higher than its warning threshold, but lower than its failure threshold.
;StatusQGFail.png0 fail
  • The number of Quality Gates that fail.
  • A Quality Gate fails if its value is equal to or higher than its failure threshold. If any, it means that the code is not ready for production. You have the option to stop the build process upon any Quality Gate failure.
;Info.png Quality Gates that measure diff cannot
be run on the baseline. Hence they
have blank trend and baseline value.
NameTrendBaseline StatusStatusGroup
;StatusQGPass.png   Percentage Coverage
;TrendIconGreenUp.png;StatusQGPass.png87.18 %;StatusQGPass.png87.35 %Quality Gates
;StatusQGPass.png   Percentage Coverage on New Code
;StatusQGPass.png94.68 %Quality Gates
;StatusQGPass.png   Percentage Coverage on Refactored Code
;StatusQGPass.png84.72 %Quality Gates
;StatusQGPass.png   Blocker Issues
;TrendIconGrayConstant.png;StatusQGPass.png0 issues;StatusQGPass.png0 issuesQuality Gates
;StatusQGPass.png   Critical Issues
;TrendIconGrayConstant.png;StatusQGPass.png0 issues;StatusQGPass.png0 issuesQuality Gates
;StatusQGPass.png   Critical Rules Violated
;TrendIconGrayConstant.png;StatusQGPass.png0 rules;StatusQGPass.png0 rulesQuality Gates
;StatusQGPass.png   Percentage Debt
;TrendIconGreenDown.png;StatusQGPass.png0.00022 %;StatusQGPass.png0 %Quality Gates
;StatusQGPass.png   New Debt since Baseline
;StatusQGPass.png-0.012 man-daysQuality Gates
;StatusQGPass.png   Debt Rating per Namespace
;TrendIconGrayConstant.png;StatusQGPass.png0 namespaces;StatusQGPass.png0 namespacesQuality Gates
;StatusQGPass.png   New Annual Interest since Baseline
;StatusQGPass.png-0.083 man-daysQuality Gates
;StatusQGPass.png   Treat Compiler Issues As Error
;TrendIconGrayConstant.png;StatusQGPass.png0 issues;StatusQGPass.png0 issuesQuality Gates
;StatusBigOk.png230 pass
  • The number of CQLinq rules that are not violated. Those rules are not listed below.
  • Notice that Roslyn Analyzers that pass are not imported. Thus, they are not counted in this number.
;StatusWarning.png0 violated The number of CQLinq rules and Roslyn Analyzers that are violated. They are listed below.;StatusWarningCritical.png0 violated
  • The number of CQLinq rules marked as critical that are violated. They are listed below with a top-left red tick.
  • By sorting the first column, violated critical rules can be listed first.
;InfoSmall.png
  • Number of Rules or Queries with Error (syntax error, exception thrown, time-out): 0

Size

% Coverage and % Debt

Issues

Rules

Quality Gates

Debt

Application Statistics

Stat # Occurences Avg StdDev Max
Properties on interfaces 627 interfaces 3.1913.36257 properties on NDepend.Helpers.Theming.ITheme
Methods on interfaces 627 interfaces 7.8616.79267 methods on NDepend.Helpers.Theming.ITheme
Arguments on methods on interfaces 4,928 methods 0.741.1413 arguments on NDepend.WebSite.Base.IDatabaseOperations.RegisterNewEvaluation2(Date,Date,String,LicenseKind,String,String,String,String,String,String,String,String,UserRole)
Public properties on classes 3,684 Classes 1.5812.02340 public properties on NDepend.Properties.IconsResources
Public methods on classes 3,684 classes 3.7214.11341 public methods on NDepend.Properties.IconsResources
Arguments on public methods on classes 13,717 methods 0.831.4237 arguments on NDepend.WebSite.Base.LicenseRecord.TryBuild_V7AndMore_LicenseRecord(String,String,LicenseKind,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,Int32,DateTime,Decimal,Decimal,String,String,Boolean,Boolean,Int32,Boolean,DateTime,DateTime,DateTime,Boolean,Expirable,LicenseRecord&,String&,String&)
IL instructions in non-abstract methods 32,064 methods 46.1293.534101 IL instructions in NDepend.Core.CodeQueryImpl.CQL.Parsing.ParserHelper.GetPossibleExpressionBeginningWith(String)
Cyclomatic complexity on non abstract Methods 32,064 Methods 3.5319.23 CC = 1890 for NDepend.Platform.DotNet.AnalysisImpl.DependencyResolver.DepthOfInheritanceComputer.GetDepthOfInheritanceFrameworkType(String)

MyRules
000

    UIRefactoring
    000

      Quality Gates
      1100

      ;QGPass.png   Quality Gate Pass:    Percentage Coverage
      • Quality Gate Description:

      Code coverage is a measure used to describe the degree to which the source code of a program is tested by a particular test suite. A program with high code coverage, measured as a percentage, has had more of its source code executed during testing which suggests it has a lower chance of containing undetected software bugs compared to a program with low code coverage.

      Code coverage is certainly the most important quality code metric. But coverage is not enough the team needs to ensure that results are checked at test-time. These checks can be done both in test code, and in application code through assertions. The important part is that a test must fail explicitly when a check gets unvalidated during the test execution.

      This quality gate define a warn threshold (70%) and a fail threshold (80%). These are indicative thresholds and in practice the more the better. To achieve high coverage and low risk, make sure that new and refactored classes gets 100% covered by tests and that the application and test code contains as many checks/assertions as possible.

      Scalar Result: 87.35 %

      ;QGPass.png   Quality Gate Pass:    Percentage Coverage on New Code
      • Quality Gate Description:

      New Code is defined as methods added since the baseline.

      To achieve high code coverage it is essential that new code gets properly tested and covered by tests. It is advised that all non-UI new classes gets 100% covered.

      Typically 90% of a class is easy to cover by tests and 10% is hard to reach through tests. It means that this 10% remaining is not easily testable, which means it is not well designed, which often means that this code is especially error-prone. This is the reason why it is important to reach 100% coverage for a class, to make sure that potentially error-prone code gets tested.

      Scalar Result: 94.68 %

      ;QGPass.png   Quality Gate Pass:    Percentage Coverage on Refactored Code

      Scalar Result: 84.72 %

      ;QGPass.png   Quality Gate Pass:    Blocker Issues
      • Quality Gate Description:

      An issue with the severity Blocker cannot move to production, it must be fixed.

      The severity of an issue is either defined explicitly in the rule source code, either inferred from the issue annual interest and thresholds defined in the NDepend Project Properties > Issue and Debt.

      No issue matched

      ;QGPass.png   Quality Gate Pass:    Critical Issues
      • Quality Gate Description:

      An issue with a severity level Critical shouldn't move to production. It still can for business imperative needs purposes, but at worst it must be fixed during the next iterations.

      The severity of an issue is either defined explicitly in the rule source code, either inferred from the issue annual interest and thresholds defined in the NDepend Project Properties > Issue and Debt.

      No issue matched

      ;QGPass.png   Quality Gate Pass:    Critical Rules Violated

      No rule matched

      ;QGPass.png   Quality Gate Pass:    Percentage Debt

      Scalar Result: 0 %

      ;QGPass.png   Quality Gate Pass:    New Debt since Baseline
      • Quality Gate Description:

      This Quality Gate fails if the estimated effort to fix new or worsened issues (what is called the New Debt since Baseline) is higher than 2 man-days.

      This Quality Gate warns if this estimated effort is positive.

      Debt documentation: https://www.ndepend.com/docs/technical-debt#Debt

      Scalar Result: -0.012 man-days

      ;QGPass.png   Quality Gate Pass:    Debt Rating per Namespace

      No namespace matched

      ;QGPass.png   Quality Gate Pass:    New Annual Interest since Baseline

      Scalar Result: -0.083 man-days

      ;QGPass.png   Quality Gate Pass:    Treat Compiler Issues As Error

      No issue matched

      Code Smells
      000

        Hot Spots
        000

          Code Smells Regression
          000

            Object Oriented Design
            000

              Design
              000

                Architecture
                000

                  API Breaking Changes
                  000

                    Code Coverage
                    000

                      Dead Code
                      000

                        ;GroupHierarchy.png
                        Security
                        000

                          Immutability
                          000

                            Naming Conventions
                            000

                              Source Files Organization
                              000

                                ;GroupHierarchy.png
                                .NET Framework Usage
                                000

                                  Defining JustMyCode
                                  000

                                    ;GroupHierarchy.png
                                    Trend Metrics
                                    000

                                      Code Diff Summary
                                      000

                                        Roslyn Analyzers
                                        000

                                          Failed to load rule file : RuleFile22.ndrules
                                          000

                                            Rules in : RuleFile.ndrules
                                            000

                                              ;GroupHierarchy.png
                                              Rules extracted from Source Code
                                              000

                                                Abstractness versus Instability Diagram

                                                The Abstractness versus Instability Diagram helps to detect which assemblies are potentially painful to maintain (i.e concrete and stable) and which assemblies are potentially useless (i.e abstract and instable).

                                                • Abstractness: If an assembly contains many abstract types (i.e interfaces and abstract classes) and few concrete types, it is considered as abstract.
                                                • Instability: An assembly is considered stable if its types are used by a lot of types from other assemblies. In this context stable means painful to modify.

                                                Online documentation: