Comments 8
Действительно полезно. Позже попробую.
0
Установил утилиту simian, и сделал небольшой пример
Но эта утилита не хочет видеть 2 одинаковых строки:
Я что то не так делаю?
#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» завершилась
Я что то не так делаю?
+1
Разобрался, нужно установить параметр threshold. который отвечает за количество совпадения строк.
По дефолту стоит 6 минимально.
минимально можно поставить 2.
-threshold=2
Как написано в документации то этот параметр может принимать значение integer >= 2
То есть больше или равно двум, но на практики он принимает значения больше двух, если у меня в коде 2 одинаковых строки он на них не реагирует, а если 3 одинаковых то он говорит что у меня 2 одинаковых строки… Может я что то не так сделал?
По дефолту стоит 6 минимально.
минимально можно поставить 2.
-threshold=2
Как написано в документации то этот параметр может принимать значение integer >= 2
То есть больше или равно двум, но на практики он принимает значения больше двух, если у меня в коде 2 одинаковых строки он на них не реагирует, а если 3 одинаковых то он говорит что у меня 2 одинаковых строки… Может я что то не так сделал?
0
В статье то же самое, всего семь строк, а treshold=6. Видимо дело в том, что для 3 одинаковых строк все-таки одна оригинал, а две другие — повторы. 2 одинаковых строки — один оригинал и один повтор. Ну, и так далее.
+1
В статью (в скриншот и код примера) закралась ошибка (текст статьи уже поправил). Спасибо за помощь. Еще раз проанализировал, как ведет себя программа. При 2-х найденных фрагментах повторах текст Find 4 duplicated lines в «summary» означает, что каждый повтор содержит 2 строки (всего четыре). Так что получается, что нет разделения на «оригинал» и «повтор». Еще раз прошу прощения, что ввел в заблуждение текстом статьи с ошибкой.
0
Пожалуйста, попробуйте вот этот фрагмент кода:
В каждом примере первая и последняя переменная int присутствует для того, чтобы «изолировать» фрагмент повтора. С настройкой -threshold=2 у меня при проверке выдало 2 повтора по 2 строки в каждом.
{
int bar;
int one;
int two;
int foo;
}
{
int foo;
int one;
int two;
int bar;
}
В каждом примере первая и последняя переменная int присутствует для того, чтобы «изолировать» фрагмент повтора. С настройкой -threshold=2 у меня при проверке выдало 2 повтора по 2 строки в каждом.
0
LONGMAN, поиск реализует утилита simian, автором которой является Simon Harris. Плагин вызывает процесс, которому передаются необходимые аргументы запуска и ожидает вывода. Получив результаты анализа в XML-структурированном виде плагин его парсит и представляет пользователю. Таким образом плагин является GUI-оболочкой для консольной утилиты. Так как код этой утилиты закрыт, то предположить алгоритм работы не представляется возможным. Предположу, что используется один из алгоритмов, представленных в статье Detecting duplicate code.
0
Sign up to leave a comment.
Плагин поиска дублирующегося кода для QtCreator