Как стать автором
Обновить

Комментарии 8

Действительно полезно. Позже попробую.
Установил утилиту simian, и сделал небольшой пример

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
void f1()
{
    int x = 15;
    x+=x+25;
    x+=x+25;
}


Но эта утилита не хочет видеть 2 одинаковых строки:
Запускается внешняя утилита 'C:/Simian/bin/simian-2.3.35.exe' -failOnDuplication- -includes=**/*.cpp -includes=**/*.h -includes=*.cpp -includes=*.h -reportDuplicateText+ -ignoreStringCase-
Similarity Analyser 2.3.35 — www.harukizaemon.com/simian

Copyright © 2003-2013 Simon Harris. All rights reserved.

Simian is not free unless used solely for non-commercial or evaluation purposes.

{ignoreCharacterCase=true, ignoreCurlyBraces=true, ignoreIdentifierCase=true, ignoreModifiers=true, reportDuplicateText=true, th
reshold=6}

Found 0 duplicate lines in 0 blocks in 0 files

Processed a total of 57 significant (113 raw) lines in 3 files

Processing time: 0.227sec

«C:/Simian/bin/simian-2.3.35.exe» завершилась


Я что то не так делаю?
Разобрался, нужно установить параметр threshold. который отвечает за количество совпадения строк.
По дефолту стоит 6 минимально.
минимально можно поставить 2.
-threshold=2

Как написано в документации то этот параметр может принимать значение integer >= 2
То есть больше или равно двум, но на практики он принимает значения больше двух, если у меня в коде 2 одинаковых строки он на них не реагирует, а если 3 одинаковых то он говорит что у меня 2 одинаковых строки… Может я что то не так сделал?
В статье то же самое, всего семь строк, а treshold=6. Видимо дело в том, что для 3 одинаковых строк все-таки одна оригинал, а две другие — повторы. 2 одинаковых строки — один оригинал и один повтор. Ну, и так далее.
В статью (в скриншот и код примера) закралась ошибка (текст статьи уже поправил). Спасибо за помощь. Еще раз проанализировал, как ведет себя программа. При 2-х найденных фрагментах повторах текст Find 4 duplicated lines в «summary» означает, что каждый повтор содержит 2 строки (всего четыре). Так что получается, что нет разделения на «оригинал» и «повтор». Еще раз прошу прощения, что ввел в заблуждение текстом статьи с ошибкой.
Пожалуйста, попробуйте вот этот фрагмент кода:

    {
        int bar;
        int one;
        int two;
        int foo;
    }
    {
        int foo;
        int one;
        int two;
        int bar;
    }

В каждом примере первая и последняя переменная int присутствует для того, чтобы «изолировать» фрагмент повтора. С настройкой -threshold=2 у меня при проверке выдало 2 повтора по 2 строки в каждом.
snasoft можете коротко рассказать алгоритм пойска как реализован?
LONGMAN, поиск реализует утилита simian, автором которой является Simon Harris. Плагин вызывает процесс, которому передаются необходимые аргументы запуска и ожидает вывода. Получив результаты анализа в XML-структурированном виде плагин его парсит и представляет пользователю. Таким образом плагин является GUI-оболочкой для консольной утилиты. Так как код этой утилиты закрыт, то предположить алгоритм работы не представляется возможным. Предположу, что используется один из алгоритмов, представленных в статье Detecting duplicate code.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории