Я автор CloneDR. Прочитайте следующее понимание моего уклона.
Важно понимать различия в методах обнаружения инструментов обнаружения клонов и, как следствие, качество результатов.
ConQAT является представителем так называемых «основанных на токене» детекторов. Они соответствуют последовательностям языковых токенов (операторы, идентификаторы, скобки, ключевые слова и т. Д.). Хорошая новость в том, что они довольно быстрые (это не большая проблема; вы не запускаете обнаружение клонов каждые 30 секунд, достаточно одной недели в неделю). ). Они найдут некоторые клоны, которые почти отсутствуют, в том смысле, что другой идентификатор или константа заменяет идентификатор в клоне. Плохая новость заключается в том, что они не понимают структуру вашего кода и, следовательно, хотят сообщать о таких вещах, как
} void ID ( ID
как клоны. Это побеждено тем, что детекторы охотятся только за очень длинными последовательностями токенов (обычно 30 или более), что означает, что детекторы на основе токенов не могут находить небольшие, но интересные клоны, не утопая вас в ложных срабатываниях, подобных описанным выше.
CloneDR работает, анализируя код (даже для Ada) точно так же, как компилятор, создавая деревья абстрактного синтаксиса и сопоставляя деревья вплоть до точки различия. Он не может предложить клона, который глупо пересекает границы структуры. Он найдет почти промахи того же рода, что и детекторы на основе токенов, но это выходит за рамки этого. CloneDR найдет последовательные замены («анти-унификаторы»), что означает, что клоны могут быть объяснены небольшим количеством параметров, которые использовались во многих местах в клоне, и он найдет варианты в коде, в которых несоответствия больше, чем одиночный токен, например, выражения, операторы, объявления, даже блоки. Таким образом, он дает меньше ложных срабатываний и лучшие ответы. Независимые исследовательские отчеты, в которых сравниваются типы детекторов клонов, в частности, включая CloneDR, согласуются с этим анализом .
Более подробное обсуждение можно найти по ссылке Clone Doctor, которую вы перечислили выше. Вы можете увидеть примеры обнаруженных клонов для многих языков (но у нас нет отчета Ada на веб-сайте).
РЕДАКТИРОВАТЬ 19 марта 2012 г .:
Теперь вы можете скачать пробную копию Ada95 CloneDR .