2010-01-12 2 views
23

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

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

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

+1

Возможно, вы захотите добавить теги (например, платформа/язык/технология NDepend для), чтобы этот вопрос появлялся на любимых тегах людей. –

ответ

28

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

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

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

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

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

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

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

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

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

+2

+1 Вы нажимаете на все большие точки использования инструмента. Я добавлю, что диаграммы зависимостей весьма полезны для высокоуровневого представления вашей структуры кода. –

4

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

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

4

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

8

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

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

2

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

2

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

Смежные вопросы