Есть ли инструмент для поиска неучтенных функций (мертвый, устаревший код) в приложении C #? [закрыто]

17

Я хочу удалить foo (), если foo () не вызывается из любого места.

    
задан Corey Trager 15.09.2008 в 20:46
источник

7 ответов

21

Жандарм будет обнаруживать частные методы, не имеющие нисходящих абонентов. Доступна кросс-платформа, а последняя версия обрабатывает « AvoidUncalledPrivateCodeRule ».

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

(отредактируйте: добавлена ​​информация о жандарме, которая фактически делает то, что задал вопрошающий)

    
ответ дан user7116 15.09.2008 в 20:47
источник
7

NDepend также сообщит о потенциально неиспользуемом коде.

    
ответ дан Ian Nelson 15.09.2008 в 21:38
источник
4

Имейте в виду, что Resharper (и, вероятно, другие подобные инструменты) не будет выделять неиспользуемые методы, если методы отмечены как public . Инструмент анализа статического кода не сможет проверить, будут ли методы вашей сборки использоваться другими сборками вне вашего решения. Таким образом, первым шагом в отмене неиспользуемых методов является уменьшение их видимости до private или internal .

    
ответ дан Helen Toomik 15.09.2008 в 21:04
источник
3

Да, MZ-Tools addin имеет функцию просмотра мертвого кода.

    
ответ дан Scott Dorman 15.09.2008 в 20:48
источник
3

Resharper делает это, а не только с помощью методов. Он также делает это с использованием операторов, переменных и т. Д.

    
ответ дан Kent Boogaart 15.09.2008 в 20:47
источник
3

Инструмент NDepend может помочь найти неиспользуемый код в базе данных .NET. Отказ от ответственности: я являюсь разработчиком этого инструмента.

NDepend предлагает написать Правило кода над запросом LINQ (CQLinq) . Примерно 200 правил кода по умолчанию , 3 из которых посвящены неиспользуемому / мертвому коду обнаружение:

NDepend интегрирован в Visual Studio, поэтому эти правила могут быть проверены / просмотрены / отредактированы прямо внутри IDE . Инструмент также может быть интегрирован в ваш процесс CI, и он может создавать отчеты , в которых будут отображаться нарушения правил и элементы кода. / р>

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

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

В дополнение к использованию этих 3 правил я бы посоветовал измерить охват кода тестами и стремиться к полному охвату. Часто вы увидите, что код, который не может быть охвачен тестами, на самом деле является кодом unused / dead , который можно безопасно отбросить. Это особенно полезно в сложных алгоритмах, где неясно, доступна ли ветвь кода или нет.

    
ответ дан Patrick from NDepend team 19.10.2010 в 15:19
источник
1

Хорошо, если VS не делает этого изначально, простым методом является щелчок правой кнопкой мыши по методу и выбор «найти все ссылки». Если есть только 1 ссылка (где она объявлена), она, скорее всего, больше не используется.

    
ответ дан RedDeckWins 15.09.2008 в 20:48
источник