NDepend

NDepend — инструмент статического анализа для кода на C# и платформе .NET, предназначенный для управления качеством и безопасностью программного кода. Программа предлагает широкий спектр функций: от CI/CD-отчётов в веб-интерфейсе до реализации систем Quality Gate и визуализации зависимостей. Благодаря этому в сообществе её иногда называют «швейцарским ножом» для .NET-разработчиков.

Общие сведения
NDepend
Тип Анализатор качества кода
Разработчик NDepend
Операционная система Windows
Последняя версия 2025.1
Лицензия коммерческая, проприетарная
Сайт ndepend.com

Возможности

undefined
ReportBig2023-Source.png
undefined

Основные возможности 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)

undefined

Живые кодовые запросы и правила кода на 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-запросов с автодополнением и встроенной документацией.

Примечания

Ссылки