Вопрос

Я пробовал себя в NDepend, читал несколько постов в блогах об этом и даже слышал подкаст.Я думаю, что NDepend может быть действительно полезным инструментом, но я все еще не вижу, где бы я мог его использовать.

Как вы это используете?Вы используете его, почему?Почему бы и нет?

Я хотел бы услышать о некоторых примерах из реального мира.

Это было полезно?

Решение

За последние несколько лет я широко использовал NDepend.По сути, это инструмент анализа зависимостей, и поэтому он может помочь вам во множестве проблем, связанных с зависимостями.

Одна из основных вещей, для которых я его использую, - это изучение зависимостей между моими сборками, типами и методами.Это помогает мне следить за тем, не вышла ли связь между типами из-под контроля, а также помогает мне определить возможности рефакторинга.

Приступая к масштабному рефакторингу, напримеризвлечение.перемещение типов в другие сборки, это позволяет вам увидеть, что от чего зависит, поэтому вам не нужно выполнять старое "переместите мои типы в другую сборку, затем попробуйте скомпилировать и посмотрите, что ломается".

NDepend также имеет отличную визуальную матрицу для просмотра такого рода информации.

Кроме того, у него есть фантастический язык запросов CQL, который позволяет вам писать пользовательские запросы.Это могут быть простые вещи, такие как "покажите мне все методы, которые вызывают этот метод", запросы на выделение мертвого кода, запросы на цикломатическую сложность, сцепление и т.д. и многое-многое другое.

В свою очередь, он может быть интегрирован в процесс сборки, так что вы можете получать предупреждения / сбои сборки на основе запросов CQL, таких как "сбой сборки, если метод содержит более 100 строк кода, но без комментариев" (это пример - я не утверждаю, что этот конкретный показатель хорош).

Он также может импортировать данные о покрытии кода и предоставить вам визуальное представление областей с небольшим покрытием кода, а также позволяет запускать запросы CQL к информации о покрытии кода (напримерпокажите мне методы с охватом кода менее 70%)

Вы также можете загрузить текущую сборку вашего проекта и предыдущую сборку и запускать запросы между ними, такие как "покажи мне все новое типы , которые имеют <покрытие кода 70%" - это поможет вам ввести более жесткие правила для существующих кодовых баз.

Это фантастический инструмент, и освоить его не так уж сложно.Вначале это пугает просто из-за огромного объема информации, которую оно вам дает, но настоятельно рекомендуется.

Другие советы

Я также нахожу это бесценным для понимания структуры сложных вызовов методов.Я могу вызывать все методы транзитивно, используя, например, определенный метод или поле, и могу посмотреть, возможны ли проблемы с циклическими вызовами, или нежелательными зависимостями, или путями, которые являются более запутанными, чем необходимо, и т.д.

График зависимостей также теперь интерактивный, поэтому я могу удалить методы, которые меня в данный момент не интересуют, и переместить другие, чтобы обеспечить хорошую визуализацию происходящего.

Я счел полезным визуализировать изменения между версиями сборок.Даже для моментального снимка изменений в данном выпуске...

Я думаю, что это прекрасно в среде непрерывной интеграции, где вы можете настраивать запросы CQL для измерения интересующих вас показателей кода (цикломатическая сложность, длинные методы и т.д.), А затем вы можете измерять свои улучшения в этих областях с течением времени.

На самом деле этот инструмент полезен, если у вас есть, напримеринтерфейс, который используется другой частью приложения, разработанной другим лицом / поставщиком.Каждый раз, когда вы хотите изменить интерфейс, вы должны выяснить, кто использует ваш интерфейс, чтобы избежать нарушения его кода (сборка не будет выполнена) Это применимо для более крупных проектов.

Этот инструмент полезен, когда ваше приложение содержит огромное количество сборок.Это помогает мне выяснить зависимости кода, а также изменения между выпусками

Я также использую NDepend для сравнения двух версий некоторой сборки.У NDepend есть эта превосходная функция.Это дает мне представление об изменениях и ходе работы в сборке, добавленных методах, удаленных методах и многом другом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top