Как вы находите дубликаты методов? - PullRequest
1 голос
/ 02 декабря 2010

Без изучения каждого метода, как я могу найти дубликаты методов в классе?Дублирующиеся методы определяются как один и тот же код в теле метода и, вероятно, но не гарантируется, той же сигнатурой метода.

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

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

Ответы [ 3 ]

3 голосов
/ 02 декабря 2010

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

Краткий список можно найти по адресу Дубликат кода (Википедия) .

1 голос
/ 02 декабря 2010

Я бы использовал анализатор сходства, такой как Simian (http://www.redhillconsulting.com.au/products/simian/). Да, это коммерческий продукт, но недорогой по сравнению со стоимостью разработки чего-либо самостоятельно. Он найдет скопированный / вставленный код и не обязательно по границам метода. Если кто-то копирует / вставляет один и тот же цикл foreach дюжину раз, он тоже найдет это.

N.B. Я никоим образом не работаю и не связан с RedHill Consulting, производителями Simian. Я только что использовал их продукт в прошлом, и поэтому он пришел мне на ум.

0 голосов
/ 02 декабря 2010

Дублирующиеся методы определены как один и тот же код в теле метода

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

вероятно, но не гарантировано, тот же метод подписи

возможна одна и та же сигнатура метода с другим именем метода, но компилятор C # не может использовать одно и то же имя метода с той же сигнатурой

Наилучшим способом является установление правил и обзоров кода.

...