Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Тестирование на схожесть кода  (Прочитано 445 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3311
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Тестирование на схожесть кода
« : 12 Январь 2012, 17:09:36 »
Нужна программка для поиска кусков кода, "сворованных" из другого проекта. Причём программка должна не просто diff делать понятно дело, а чуть более интелектуально подходить к вопросу. Переменные там переименованные уметь определять и прочие плюшки. Задача понятна - понять, есть ли что-то из GPL проекта в не-GPL)) Да, язык - PHP+JavaScript+XML.
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн Charles Malaheenee

  • Активист
  • *
  • Сообщений: 756
  • Учтите, мы можем дать и вредный совет.
    • Просмотр профиля
Re: Тестирование на схожесть кода
« Ответ #1 : 12 Январь 2012, 17:25:01 »
А как быть с задачами, которые можно сделать только одним путем? Код здесь будет одинаков, хоть тресни.
Debian Sid (XFCE) x 2; Debian Sid (Openbox) x 1.
Все мы где-то, когда-то и в чем-то были новичками.

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3311
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Тестирование на схожесть кода
« Ответ #2 : 12 Январь 2012, 17:30:23 »
Да это я уже сам решу)) Мне надо только чтобы были показаны потенциально схожие куски кода, чтобы в ручную не анализировать все файлы.
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3538
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
    • LinkedIn
Re: Тестирование на схожесть кода
« Ответ #3 : 12 Январь 2012, 18:11:20 »
если сравнивать просто куски кода (а не алгоритмы, которые реализует код), то можно рассматривать исходники как почти обычный текст. Нужно только определиться, насколько большие должны быть куски (нет особого смысла искать совпадающие строки типа $i=0;), брать группу из n строк из одного и искать в другом. Многое от исторического контекста зависит, конечно. Если человек сознательно нарушал, то мог переменные переименовать и строки переставить, тогда нужно чуть более хитрые алгоритмы использовать.
Не опускай рук, а то пропустишь в бороду

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Тестирование на схожесть кода
« Ответ #4 : 13 Январь 2012, 11:14:41 »
Что насчет такого?

unsigned x = 0;
__m128i x0, x1, x2, x3, x4, x5, x6, x7;
__m128i *pshuffle128 = (__m128i *)shuffle;
__m128i *pMask = (__m128i *)mask;

if (cpu & CPU_CAPABILITY_SSSE3) {
  for (; x < (width & ~31); x += 32) {
    uint8_t *dst1 = dstv + x;
    uint8_t *dst2 = dstu + x;
    __m128i *pSrc = (__m128i *)(src + 2 * x);
            // синтаксис AT&T: cmd    source,       destination
            // asm volatile (
    x7 = _mm_loadu_si128(pshuffle128);// "movdqu (%[shuffle]), %%xmm7\n"
    x0 = _mm_load_si128(pSrc + 0);    // "movdqa  0(%[src]),   %%xmm0\n"
    x1 = _mm_load_si128(pSrc + 1);    // "movdqa 16(%[src]),   %%xmm1\n"
    x2 = _mm_load_si128(pSrc + 2);    // "movdqa 32(%[src]),   %%xmm2\n"
    x3 = _mm_load_si128(pSrc + 3);    // "movdqa 48(%[src]),   %%xmm3\n"
    x0 = _mm_shuffle_epi8(x0, x7);    // "pshufb  %%xmm7, %%xmm0\n"
    x1 = _mm_shuffle_epi8(x1, x7);    // "pshufb  %%xmm7, %%xmm1\n"

....

      // : : [dst1]"r"(&dstu[x]), [dst2]"r"(&dstv[x]), [src]"r"(&src[2*x]), [shuffle]"r"(shuffle) : "memory");
}
Справа в комментах - исходный код из VLC, там еще #define-ы были, я их подставил. Слева - эквивалентный, если верить MSDN, код для MSVC++. Результат работы, по крайней мере, тот же.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.058 секунд. Запросов: 25.