Мне пришлось провести рефакторинг большого приложения на C #, и я обнаружил множество функций, которые никогда не используются. Как я могу проверить наличие неиспользуемого кода и удалить все неиспользуемые функции?
c#
.net
refactoring
Andre
источник
источник
Ответы:
Да, ReSharper делает это. Щелкните правой кнопкой мыши по вашему решению и выберите «Поиск проблем с кодом». Одним из результатов является «Неиспользованные символы». Это покажет вам классы, методы и т. Д., Которые не используются.
источник
Это отличный вопрос, но имейте в виду, что вы здесь в опасной воде. Когда вы удаляете код, вы должны быть уверены, что часто его компилируете и тестируете.
На ум приходит один отличный инструмент:
NDepend - этот инструмент просто потрясающий. Пройдет немного времени, и после первых 10 минут я думаю, что большинство разработчиков просто скажут: «Винт!» и удалите приложение. Как только вы почувствуете NDepend, вы получите удивительное представление о том, как связаны ваши приложения. Проверьте это: http://www.ndepend.com/ . Самое главное, этот инструмент позволит вам просматривать методы, которые не имеют прямых вызовов. Он также покажет вам обратное, полное дерево вызовов для любого метода в сборке (или даже между сборками).
Какой бы инструмент вы ни выбрали, его не стоит воспринимать легкомысленно. Особенно, если вы имеете дело с открытыми методами в сборках библиотечных типов, поскольку вы никогда не узнаете, когда приложение ссылается на них.
источник
Решарпер хорош для этого, как говорили другие. Однако будьте осторожны, эти инструменты не находят ваш код, который используется отражением, например, не могут знать, не используется ли какой-либо код отражением.
источник
Как указал Джефф инструмент NDepend может помочь найти неиспользуемые методы, поля и типы.
Чтобы уточнить, NDepend предлагает написать Code Rule поверх LINQ Query (CQLinq) . Предложено около 200 правил кода по умолчанию , 3 из которых посвящены неиспользованному / мертвому коду обнаружения
В основном такое правило для обнаружения неиспользуемого метода, например, выглядит так:
Но это правило наивно и будет возвращать тривиальные ложные срабатывания. Во многих ситуациях метод никогда не вызывается, но он не используется (точка входа, конструктор класса, финализатор ...), поэтому 3 правила по умолчанию более проработаны:
NDepend интегрируется в Visual Studio 2017,2015, 2013, 2012, 2010, поэтому эти правила можно проверять / просматривать / редактировать прямо в IDE . Инструмент также может быть интегрирован в процесс CI и может создавать отчеты, которые будут отображать нарушенные правила и элементы кода виновника. NDepend также имеет расширение VS Team Services .
Если вы нажмете эти 3 ссылки выше на исходный код этих правил, вы увидите, что те, которые касаются типов и методов, немного сложны. Это потому, что они обнаруживают не только неиспользуемые типы и методы, но также типы и методы, используемые только неиспользуемыми мертвыми типами и методами (рекурсивными).
Это статический анализ , отсюда и префикс « Потенциально» в именах правил. Если элемент кода используется только для отражения, эти правила могут рассматривать его как неиспользуемый, что не так.
В дополнение к использованию этих трех правил, я бы посоветовал измерять покрытие кода тестами и стремиться к полному охвату. Часто вы увидите, что код, который не может быть покрыт тестами, на самом деле не используется / мертв кодом, который можно безопасно отбросить. Это особенно полезно в сложных алгоритмах, где неясно, достижима ли ветвь кода или нет.
Отказ от ответственности: я работаю на NDepend.
источник
Я бы также упомянул, что использование МОК, иначе Unity, может ввести в заблуждение эти оценки. Возможно, я допустил ошибку, но некоторые очень важные классы, экземпляры которых создаются через Unity, похоже, не имеют экземпляров, насколько ReSharper может сказать. Если бы я следовал рекомендациям ReSharper, меня бы не стало!
источник
ReSharper отлично справляется с поиском неиспользуемого кода.
В VS IDE вы можете щелкнуть правой кнопкой мыши по определению и выбрать «Найти все ссылки», хотя это работает только на уровне решения.
источник
Правда заключается в том, что инструмент никогда не сможет дать вам 100% точный ответ, но инструмент покрытия может дать вам неплохой результат за деньги.
Если вы учитываете комплексный набор модульных тестов, вы можете использовать инструмент покрытия тестов, чтобы точно определить, какие строки кода не были выполнены во время выполнения теста. Вам все равно придется анализировать код вручную: либо устраните то, что вы считаете мертвым кодом, либо напишите тест, чтобы улучшить охват тестированием.
Одним из таких инструментов является NCover с предшественником с открытым исходным кодом на Sourceforge . Другой альтернативой является PartCover .
Проверьте этот ответ на stackoverflow.
источник
Я сталкивался с AXTools CODESMART .. Попробуйте это один раз. Используйте анализатор кода в разделе обзоров. Он перечислит мертвые локальные и глобальные функции наряду с другими проблемами.
источник
FXCop - это анализатор кода ... Он делает гораздо больше, чем просто находит неиспользуемый код. Некоторое время я использовал FXCop, и его рекомендации были настолько потеряны, что я его удалил.
Я думаю, что NDepend выглядит как более вероятный кандидат.
источник