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

18

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

    
задан Corey Trager 15.09.2008 в 20:46
источник
  • Есть ли один для стандартного C? –  Paul Hargreaves 15.09.2008 в 20:47
  • PC-Lint и шина найдут неописанные методы и переменные. –  user7116 15.09.2008 в 20:51

7 ответов

21

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

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

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

    
ответ дан user7116 15.09.2008 в 20:47
источник
  • Это (CA1811) не будет работать для всех видов методов, например. статические общедоступные методы. –  JRoppert 15.09.2008 в 20:56
  • Также это отличный инструмент в целом –  RedDeckWins 15.09.2008 в 22:21
  • @JRoppert: Я думаю, это потому, что он не может сказать в количестве проходов, сделанных FxCop, если он действительно не указан. Resharper все время падает для меня, поэтому использовать это не может быть и речи. Хороший момент. –  user7116 15.09.2008 в 23:33
  • Я просто попробовал FxCop. Он не обнаруживает неиспользованные общедоступные методы, в чем меня в основном интересовали. –  Corey Trager 16.09.2008 в 13:52
  • @Corey Trager: это библиотека классов или исполняемый файл? Ожидается, что общедоступные методы не будут использоваться в библиотеках классов. Что касается исполняемых файлов, то в этом случае нет свободного решения, кроме ответа Дастина. –  user7116 16.09.2008 в 14:41
Показать остальные комментарии
7

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

    
ответ дан Ian Nelson 15.09.2008 в 21:38
источник
  • Мне нравится NDepend, но это сложно оправдать, но это хорошо работает с TeamCity и большинством других агентов сборки. –  Dan Atkinson 14.06.2011 в 14:43
4

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

    
ответ дан Helen Toomik 15.09.2008 в 21:04
источник
  • Анализ решения ReSharper будет обнаруживать неиспользуемые объявления не-частного типа или участника. –  TrueWill 19.03.2012 в 02:06
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
источник
  • Слишком утомительно делать это один за другим. Я искал инструмент, который будет прокручивать весь код. –  Corey Trager 16.09.2008 в 13:58