2010-12-02 3 views
1

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

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

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

ответ

3

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

Краткий список можно найти по адресу: Duplicate code (Wikipedia).

+0

Этот инструмент понимает сложную логику, написанную двумя способами? – TalentTuner 2010-12-02 03:45:17

+0

@ Саураб, я сомневаюсь, что ... вы говорите об автоматических формальных доказательствах эквивалентности. Я думаю, что здесь упоминается обнаружение синтаксических вариаций. – Serguei 2010-12-02 04:00:42

0

Повторяющиеся методы определяются как же кода в теле метода

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

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

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

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

1

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

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

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