NDepend
NDepend — инструмент статического анализа для кода на C# и платформе .NET, предназначенный для управления качеством и безопасностью программного кода. Программа предлагает широкий спектр функций: от CI/CD-отчётов в веб-интерфейсе до реализации систем Quality Gate и визуализации зависимостей. Благодаря этому в сообществе её иногда называют «швейцарским ножом» для .NET-разработчиков.
Общие сведения
| NDepend | |
|---|---|
| Тип | Анализатор качества кода |
| Разработчик | NDepend |
| Операционная система | Windows |
| Последняя версия | 2025.1 |
| Лицензия | коммерческая, проприетарная |
| Сайт | ndepend.com |
Возможности
Основные возможности NDepend включают:
- Интерактивные веб-отчёты по всем аспектам качества и безопасности кода .NET[1]. Отчёты могут быть созданы на любой платформе: Windows, Linux и macOS
- Импорт данных о проблемах от Roslyn-анализаторов[2].
- Система Quality Gates для оценки соответствия кода стандартам[3].
- Интеграция с системами CI/CD: Azure DevOps, GitHub Action, Bamboo, Jenkins, TeamCity, AppVeyor
- Визуализация зависимостей (с помощью графов зависимостей и матриц зависимостей)
- Оценка технического долга[4].
- Декларативные правила кода на основе C# LINQ-запросов (CQLinq)[5].
- Метрики кода (поддерживается более 100 метрик: цикломатическая сложность, афферентные и эфферентные сцепления, реляционная связность, Google page rank для .NET-типов, процент покрытия тестами и др.)
- Импорт данных о покрытии кода тестами из Visual Studio coverage, dotCover, OpenCover, NCover, NCrunch[6].
- Сравнение результатов анализа с эталонной версией для фокусировки на новых проблемах[7].
- Интеграция с Visual Studio 2022, 2019, 2017, 2015, 2013, 2012, 2010 или запуск как отдельного приложения VisualNDepend.exe, а также совместная работа с JetBrains Rider и Visual Studio Code.
Правила кода через LINQ-запросы (CQLinq)
Живые кодовые запросы и правила кода на LINQ-запросах лежат в основе NDepend: практически все функции опираются на этот механизм. Примеры запросов:
- Базовый класс не должен использовать производные:
// <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 }
- Избегать увеличения сложности уже сложных методов (цикломатическая сложность):
// <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,
}
Кроме того, в программе реализован интерактивный редактор CQLinq-запросов с автодополнением и встроенной документацией.
