NDepend
Appearance
This article may be too technical for most readers to understand.(June 2022) |
Developer(s) | NDepend |
---|---|
Stable release | 2024.1
|
Operating system | Windows |
Type | Software quality |
License | Commercial, Proprietary |
Website | ndepend |
NDepend is a static analysis tool for C# and .NET code to manage code quality and security. The tool proposes a large number of features, from CI/CD Web Reporting to Quality Gate and Dependencies Visualization. For that reason, the community refers to it as the "Swiss Army Knife" for .NET Developers.
Features
[edit]
The main features of NDepend are:
- Interactive Web Reports about all Aspects of .NET Code Quality and Security Sample Reports Here. Reports can be built on any platform: Windows, Linux and MacOS
- [Roslyn Analyzers Issues Import https://www.ndepend.com/docs/reporting-roslyn-analyzers-issues]
- Quality Gates
- CI/CD Integration with Azure DevOps, GitHub Action, Bamboo, Jenkins, TeamCity, AppVeyor
- Dependency Visualization (using dependency graphs, and dependency matrix)
- Smart Technical Debt Estimation
- Declarative code rule over C# LINQ query (CQLinq).
- Software Metrics (NDepend currently supports more than 100 code metrics: Cyclomatic complexity; Afferent and Efferent Coupling; Relational Cohesion; Google page rank of .NET types; Percentage of code covered by tests, etc.)
- Code Coverage data import from Visual Studio coverage, dotCover, OpenCover, NCover, NCrunch.
- All results are compared against a baseline allowing the user to focus on newly identified issues.
- Integration with Visual Studio 2022, 2019, 2017, 2015, 2013, 2012, 2010, or can run as a standalone through VisualNDepend.exe, side by side with JetBrains Rider or Visual Studio Code.
Code rules through LINQ queries (CQLinq)
[edit]Live code queries and code rules through LINQ queries is the backbone of NDepend, all features use it extensively. Here are some sample code queries:
- Base class should not use derivatives:
// <Name>Base class should not use derivatives</Name>
warnif count > 0
from baseClass in JustMyCodeTypes
where baseClass.IsClass && baseClass.NbChildren > 0 // <-- for optimization!
let derivedClassesUsed = baseClass.DerivedTypes.UsedBy(baseClass)
where derivedClassesUsed.Count() > 0
select new { baseClass, derivedClassesUsed }
- Avoid making complex methods even more complex (source code cyclomatic complexity):
// <Name>Avoid making complex methods even more complex (source code cyclomatic complexity)</Name>
warnif count > 0
from m in JustMyCodeMethods where
!m.IsAbstract &&
m.IsPresentInBothBuilds() &&
m.CodeWasChanged()
let oldCC = m.OlderVersion().CyclomaticComplexity
where oldCC > 6 && m.CyclomaticComplexity > oldCC
select new { m,
oldCC,
newCC = m.CyclomaticComplexity,
oldLoc = m.OlderVersion().NbLinesOfCode,
newLoc = m.NbLinesOfCode,
}
Additionally, the tool provides a live CQLinq query editor with code completion and embedded documentation.
See also
[edit]External links
[edit]NDepend reviewed by the .NET community
[edit]- Exiting The Zone Of Pain: Static Analysis with NDepend.aspx (Program Manager, Microsoft) discusses NDepend
- Stack Overflow discussion: use of NDepend
- Abhishek Sur, on NDepend
- NDepend code metrics by Andre Loker
- Static analysis with NDepend by Henry Cordes
- Hendry Luk discusses Continuous software quality with NDepend
- Jim Holmes (Author of the book "Windows Developer Power Tools"), on NDepend.
- Mário Romano discusses Metrics and Dependency Matrix with NDepend
- Nates Stuff review
- Scott Mitchell (MSDN Magazine), Code Exploration using NDepend
- Travis Illig on NDepend
Books that mention NDepend
[edit]- Girish Suryanarayana, Ganesh Samarthyam, and Tushar Sharma. Refactoring for Software Design Smells: Managing Technical Debt (2014)
- Marcin Kawalerowicz and Craig Berntson. Continuous Integration in .NET (2010)
- James Avery and Jim Holmes. Windows developer power tools (2006)
- Patrick Cauldwell and Scott Hanselman. Code Leader: Using People, Tools, and Processes to Build Successful Software (2008)
- Yogesh Shetty and Samir Jayaswal. Practical .NET for financial markets (2006)
- Paul Duvall. Continuous Integration (2007)
- Rick Leinecker and Vanessa L. Williams. Visual Studio 2008 All-In-One Desk Reference For Dummies (2008)
- Patrick Smacchia. Practical .Net 2 and C# 2: Harness the Platform, the Language, the Framework (2006)