1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chenyanlong-PlagiarismDetection4C

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Исходный код программы можно рассматривать как последовательность токенов (Token String). Сравнивая последовательности токенов, можно получить информацию о степени схожести. Для электронных версий кода, сданных студентами, проводится проверка на схожесть, и в конце концов выдается результат вычисления схожести, а затем, на основе заданного порога, определяется, является ли схожий код плагиатом.

Проверка схожести программного кода отличается от проверки схожести обычного текста тем, что текст проверяется на основе количества повторений в определенном диапазоне текста, в то время как коды, написанные студентами, обычно просты. Ключевые слова и системные функции языка программирования, а также имена классов из системных библиотек не должны учитываться при проверке схожести, а следует учитывать особенности самого кода.Научная, передовая и уникальная сторона проекта Учитывая специфику исходного кода программ, данный проект сосредоточен на следующих аспектах: Анализ общих методов копирования кода студентами, чтобы найти наиболее подходящие образцы для будущего анализа и проверки. Извлечение структурных особенностей исходного кода программы, разбиение программы на последовательности ключевых слов, последовательности пользовательских переменных, последовательности пользовательских функций и т.д.## Исследование и применение методов проверки схожести программного кода

Основные идеи и цели проекта

На основе особенностей программных языков создать программную систему для проверки схожести программного кода, которая может вычислять степень схожести кода, поданного каждым студентом на задание, с кодом других студентов. Если степень схожести превышает заданный порог, то код считается списанным. Использование такой системы позволяет эффективно предотвращать списывание кода студентами, а также уменьшает трудозатраты преподавателей при ручной проверке.Проверка схожести программного кода отличается от проверки схожести обычного текста тем, что текст проверяется на основе количества повторяющихся фрагментов в тексте, тогда как коды, написанные студентами, обычно содержат большое количество ключевых слов языка программирования, системных функций и имен классов из библиотек, которые не следует учитывать при проверке схожести. Вместо этого следует учитывать специфические характеристики кода.

Исходный код программы можно рассматривать как последовательность токенов (Token String). Сравнивая эти последовательности, можно получить информацию о степени схожести. Для каждой пары поданных студентами электронных версий кода проводится проверка на схожесть, и в конце концов выдается результат вычисления схожести, который затем используется для определения, является ли код списанным на основе заданного порога.### Научная, передовая и уникальная сторона проекта Учитывая специфические особенности исходного кода программ, данный проект направлен на следующие аспекты:

  1. Анализ общих методов списывания кода студентами, чтобы найти наиболее подходящие образцы для будущего анализа и проверки.
  2. Извлечение структурных характеристик исходного кода программ, включая последовательности ключевых слов, последовательности пользовательских переменных, последовательности пользовательских функций, отношения вызова функций и отношения соответствия скобок, и вычисление степени схожести для каждого из них. Затем используются образцы для определения весов для каждой степени схожести, и в конце концов определяется общий вес кода.
  3. Если в классе 30 студентов, то потребуется 30*29/2=435 сравнений. Для повышения эффективности можно использовать многоядерные процессоры компьютера и многопоточное программирование, чтобы сократить время выполнения.
  4. Использование существующих лучших алгоритмов для сравнения текста: алгоритм сравнения строк, который обладает следующими характеристиками: 1) быстродействие: скорость сравнения символов может быть выполнена линейно; 2) низкое потребление памяти.
  5. После завершения данного проекта можно будет создать сайт для сдачи заданий, на котором будет размещена программа проекта в качестве серверного приложения.При сдаче студентами кода программа автоматически проверяет степень схожести, и если она превышает порог, код не может быть сдан.### Реальное значение Значение проверки схожести исходного кода программ заключается в следующем:
  6. Может быть использована для выявления списывания при выполнении заданий по программированию студентами.
  7. Может быть использована для автоматической проверки и оценки заданий по программированию на экзаменах.
  8. Может быть использована для выявления списывания при проверке коммерческого программного обеспечения.

Обзор зарубежных и отечественных исследований по аналогичной теме

С конца 1970-х годов ученые начали изучать программное обеспечение для предотвращения копирования программ, и со временем появились несколько представительных систем. Ниже приведены краткие обзоры зарубежных и отечественных систем обнаружения копирования исходного кода программ.

Многие зарубежные университеты создали собственные системы обнаружения копирования исходного кода программ, такие как система MOSS Стэнфордского университета (США), система JPlag Университета Карлсруэ (Германия), система SIM Университета Вичита (США) и система YAP3 Университета Сиднея (Австралия). Эти системы используют комбинацию методов подсчета атрибутов и структурных метрик для выявления копирования программ.В Китае исследования по обнаружению копирования исходного кода программ, а также по связанным с ними задачам, такими как программные задания и субъективные задания, также постепенно углубляются. Например, профессора Чжан Вендянь и Рень Дунвей из Университета полиции Китая разработали систему обнаружения копирования исходного кода на языке Паскаль, а Университет связи и информации в Пекине использовал метод структурных метрик на основе SML для вычисления сходства и реализовал соответствующую экспериментальную систему.Из текущего состояния исследований можно сделать вывод, что в Китае мало исследований по определению сходства программного кода, большинство исследований сосредоточено на китайской морфологии и семантике. Копирование программного кода отличается от копирования обычного текста, так как различные коды могут выполнять одну и ту же функцию. Некоторые умные копиисты используют различные техники для модификации кода, например, замена цикла for на цикл while или добавление множества промежуточных переменных, что снижает эффективность алгоритмов сравнения строк.

План и этапы реализации

  1. Предварительная обработка исходного кода: система должна фильтровать из исходного кода информацию, которая не влияет на выявление сходства, чтобы ускорить работу системы. Например, это могут быть комментарии, заголовочные файлы, бесполезные строки, пробелы и пустые строки. Этот процесс значительно уменьшает размер исходного кода, что ускоряет последующие этапы обработки. Предварительная обработка является относительно простой задачей, и в процессе сканирования можно также собирать некоторые атрибуты, которые могут быть полезны для последующего использования, без увеличения временной сложности.2. Преобразование исходного кода: основные шаги системы обнаружения копирования исходного кода на основе структурных метрик заключаются в преобразовании исходного кода в новую структуру с информацией о структуре. Системы, основанные на алгоритмах сравнения строк, анализируют синтаксис кода и преобразуют его в последовательность маркеров для удобства сравнения строк. Системы, основанные на алгоритмах сравнения графов, анализируют синтаксис кода на определенном языке и преобразуют его в узлы графа, добавляя ориентированные ребра между узлами в соответствии с потоком управления и зависимостями переменных.3. Анализ сходства: сходство между двумя отрезками кода вычисляется с использованием алгоритмов строкового соответствия и графического анализа сходства, что позволяет определить значение сходства sim.

  2. Оценка плагиата: для определения, является ли код плагиатом, используется метод, сочетающий методы структурного измерения и методы вычисления атрибутивных характеристик. Система предоставляет несколько пороговых значений для различных критериев оценки, что повышает точность.

Преобразование кода

После обработки Java-программой, избыточный код удаляется. Обработка происходит по мере чтения, то есть после чтения одной строки кода, она сразу обрабатывается. Отфильтрованный действительный код может быть передан на следующую стадию, то есть на стадию преобразования кода. В этой программе разделенный код сохраняется в ArrayList, таким образом, массив содержит статистические данные исходного кода. Затем ArrayList, содержащий статистические данные, сохраняется в ArrayList, который хранит информацию о SourceProgram. В этом массиве хранится вся информация о сравниваемых исходных программах (в настоящее время это количество появления 32 системных ключевых слов на языке C в исходном коде).Чтобы избежать бесполезных сравнений (файлы, сохраненные в определенном пути, по умолчанию уже прошли проверку исходного кода, и пороги между ними меньше заданного значения 0.90, что свидетельствует о том, что нет плагиата), сначала загружаются файлы, загруженные пользователем, и после обработки они сразу сохраняются в начало массива для сравнения. Затем они последовательно сравниваются с кодом внутри файла. Способ разделения: исходный код разделяется на основе особенностей языка C, используя регулярные выражения. Заданные разделители: ``, , , `;`, `(`, `)`, `&`, `|`, `пробел`. Информация в `ArrayList` исходного кода, согласно определенному `Map` (хранящему 32 ключевых слова и соответствующие им индексы массива), используется для определения и присвоения значений. Каждый раз, когда ключевое слово появляется, значение в соответствующем месте увеличивается на 1, и так далее.

Анализ сходства

В этом программе используется метод вычисления скорректированного косинусного сходства. AdjustedCosineSimilarity: ниже приведено выражение, которое представляет собой вычитание среднего значения оценки пользователя u для всех предметов из его оценки предмета i, что позволяет получить скорректированную оценку.s(i,j) представляет собой сходство между объектами i и j. Числитель представляет собой сумму произведений скорректированных оценок пользователей, которые одновременно оценили объекты i и j, а знаменатель представляет собой некоторую обработку скорректированных оценок для всех объектов. Ключевые слова в исходном коде рассматриваются как оценки студентов, и на основе этого выражения можно определить сходство оценок двух студентов для ключевых слов, то есть считается, что это сходство между двумя кодами. $$ s(i,j)=\frac{\sum_{{u\epsilon U}}(R{u,i}-\bar{R_{u}})(R_{u,j}-\bar{R_{u}})}{\sqrt{(\sum_{{u\epsilon U}}(R{u,i}-\bar{R_{u}}))^{2}}\sqrt{(\sum_{{u\epsilon U}}(R{u,j}-\bar{R_{u}}))^{2}}} $$ ! [acs. png](/acs. png) Измененная косинусная схожесть является алгоритмом колаборативной фильтрации на основе модели. Одним из преимуществ этого алгоритма является хорошая масштабируемость, что позволяет быстро обрабатывать большие объемы данных с минимальным использованием памяти.

Результаты

С помощью Java можно извлекать ключевые слова из исходного кода на C, затем выполнять их статистический анализ и, используя метод измерения измененной косинусной схожести, вычислять степень схожести между двумя исходными кодами.С помощью JavaFX реализована функция сравнения текста, аналогичная UltraCompare (UC), с подсветкой совпадающих текстов; результаты схожести, вычисленные с помощью Java, сохраняются в промежуточном файле, а затем JavaFX загружает их и отображает в виде круговой диаграммы, а также позволяет просматривать информацию о схожих группах.

Инновации

На основе предыдущих исследований введена статистика по частоте слов (для ключевых слов языка C и системных функций), что позволяет при низкой точности и быстром отклике программы минимизировать вероятность ложноположительных результатов. В отличие от существующего программного обеспечения UltraCompare (UC), данное программное обеспечение является бесплатным, имеет простой код, ориентировано на конкретные задачи и имеет быстрый отклик.

Промежуточный отчет о проблемах

Предварительная обработка исходного кода При обработке комментариев программа использует метод иерархической проверки, то есть однократные комментарии могут быть обработаны непосредственно, а многострочные комментарии рассматриваются как уровень вложенности, при этом соответствующие переменные устанавливаются в true, и они остаются таковыми до тех пор, пока не будут установлены в false.При тестировании кода структуры данных автор обнаружил, что у некоторых студентов возникают проблемы с соответствием фигурных скобок, что связано с использованием */ в printf-выражении, например: printf("Please input +-*/\n");. Автор хотел, чтобы пользователи вводили операции сложения, вычитания, умножения и деления, но при сравнении строк возникают ошибки. Для удовлетворения различных стилей написания кода студентами, программа выполняет несколько проверок при определении начала и конца комментариев. В приведенном выше примере при проверке на наличие /* или */ происходит срез и начинается статистический анализ, что приводит к ошибкам в результатах. Аналогичная проблема возникает, когда студент вставляет в комментарий: /*. . . . . . // вложенный комментарий */, и программа, сначала проверяющая однократные комментарии, возвращает null, что приводит к ошибкам в статистических данных. Проверка схожести При запуске на Windows, поданный код последовательно сравнивается, и если полученное сходство превышает пороговое значение, процесс немедленно завершается. При запуске на Ubuntu сравнение всех файлов в указанной папке завершается только после полного анализа. Основное сравнение осуществляется на основе времени создания файлов, а не их названий.Ввиду ограниченности знаний автора, используется простой метод измерения сходства, который позволяет четко определить сходство кода выше 95%. В будущем выбор метода будет зависеть от рекомендаций научного руководителя и уровня знаний автора. В процессе проекта автор изучает другие методы измерения сходства, такие как коэффициент корреляции Пирсона, который имеет схожее значение порога. Оценка плагиата Без предоставления статистического анализа, временно используется предполагаемое значение, и пороговое значение 0.90 используется для определения плагиата. Меры и схемы для повышения

  1. Расширение области проверки кода, включая системные функции, пользовательские функции, глобальные переменные и т. д.
  2. Улучшение точности проверки кода, постоянное улучшение алгоритмов для соответствия различным случаям кода и плагиата.
  3. Установка пороговых значений, которые должны быть более тщательно проанализированы, с учетом различных случаев плагиата, чтобы получить более точные значения.
  4. Улучшение производительности программы, автор должен изучить многопоточное программирование для более эффективного использования процессора системы и повышения производительности программы.

Результаты исследования

Интерфейс выбора пользовательских действий (рис.1): основной интерфейс для выбора действий пользователя, предоставляющий два метода просмотра сходства, один из которых показывает детальную информацию сравнения двух выбранных кодов, другой — распределение сходства для всего класса. Можно просмотреть детальную информацию группировки в определенном диапазоне.

Детальный интерфейс для сравнения кода (рис. 2, подобен UltraCompare): пользователь вводит два исходных кода на языке C, после нажатия кнопки "Начать" можно увидеть результат сравнения: цифры представляют строки исходного файла, красный цвет используется для успешного соответствия текста, черный цвет — для неудачного соответствия, "---" — для вставки строки, которая не соответствует.

Просмотр распределения сходства класса в виде графика (рис. 3): пользователь выбирает текст, содержащий результаты сравнения кода класса, после нажатия кнопки "Начать" можно увидеть круговую диаграмму сходства. В левой панели инструментов можно просмотреть конкретную информацию для каждого диапазона, такие как общее количество людей, информация о группах сходства, например: demo1, demo2 имеют сходство 0.91.

! project show - Экспериментальные тесты: Входящий размер кода составляет 120 строк действующего кода:

  1. Изменение комментариев и пустых строк: случайное добавление 10 комментариев, случайное включение в код result = 1.0 сравнение занимает 72ms 2.Переименование идентификаторов; переименование 12 переменных типа int в коде result = 1.0 сравнение занимает 71ms
  2. Перестановка блоков кода; перемещение тела функции (16 строк) перед main функцией: result = 1.0 сравнение занимает 55ms
  3. Перестановка строк внутри блока кода; перемешивание порядка 10 строк кода внутри блока: result = 1.0 сравнение занимает 55ms
  4. Изменение порядка операторов или операндов в выражении, изменение типа данных: 21 переменная типа int, случайное изменение 4 из них на double: result = 0.987 сравнение занимает 46ms
  5. Изменение типа данных, 21 переменная типа int, случайное изменение 10 из них на double: result = 0.895 сравнение занимает 53ms
  6. Добавление избыточных операторов или переменных; случайное добавление 5 переменных типа double в функции: result = 0.993 сравнение занимает 53ms
  7. Эквивалентная замена структур управления; в примере кода 4 цикла while: замена 2 из них на циклы for: result = 0.967 сравнение занимает 46ms замена 4 из них на циклы for: result = 0.938 сравнение занимает 42ms
  8. Среднее время сравнения для кода с эффективным поведением в 120 строк: время сравнения двух кодов: 103ms время сравнения одного кода с 32 кодами: 217ms; время сравнения одного кода с 28 кодами: 209ms - Инновации: Введение метода статистического подсчёта частоты слов, что позволяет быстро реагировать при низких требованиях к точности и высокой схожести двух файлов, а также минимизировать вероятность ложноположительных результатов. Программа выдаёт высокие результаты даже при простых изменениях кода в диапазоне от 10% до 0% и выше.
  • Прикладная ценность: Идентификация плагиата в домашних заданиях по программированию; применение в автоматическом оценивании заданий по программированию.

Описание проекта

Ситуация: Школа поощряет студентов подавать заявки на инновационные проекты. В качестве классного старосты я решил использовать метод сравнения схожести кода для уменьшения явления взаимного использования кода в курсе программирования. Задача: Из-за ограниченного времени проект был подан и завершён мной в одиночку. Действия: Сначала я изучил литературу по методам сравнения схожести кода, проанализировал их достоинства и недостатки, выбрал подходящий метод и провёл исследование, завершив проект в течение года. Результат: Проект был успешно одобрен школой и успешно завершён. К сожалению, он не был доведён до усовершенствования и использования.

Список литературы

[1]. Тянь Чжунzhou, Лيو Цянь, Чжень Цинхуа, et al. Обзор исследований по выявлению копирования программного обеспечения [J].Журнал информационной безопасности, 2016, 1(3). [2]. Сюй Хао, Янь Хайхуа, Гуо Тао, et al. Технологии обнаружения схожести кода: обзор исследований [J]. Журнал компьютерных наук, 2010, 37(8): 9-14. [3]. Ван Фэй. Исследование техники анализа схожести исходного кода программного обеспечения и системы его применения [D]. Университет связи и информации Китая, 2013. [4]. Чжао Яньбо. Исследование технологии выявления копирования кода программ на основе абстрактного синтаксического дерева [D]. 2011. [5]. Цзу Бо. Исследование методов измерения схожести кода программ [D]. Университет инженерии и технологий Чанчжоу, 2015. [6]. Дэн Айпин. Исследование технологии выявления копирования исходного кода программ [D]. Университет Хунань, 2008. [7]. Ву Фэй. Исследование метода выявления копирования кода программ на основе N-gram [D]. 2012. [8]. Ван Гуан. Исследование метода оценки схожести кода Java [D]. 2008.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Исследование и применение методов проверки схожести программного кода Основные идеи и цели проекта На основе особенностей программных языков создать программное обеспечение для проверки схожести программного кода. Это позволит вычислять степень схожести кода, сданных студентами для одного и того же задания, и при достижении определенного порога ... Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/chenyanlong-PlagiarismDetection4C.git
git@api.gitlife.ru:oschina-mirror/chenyanlong-PlagiarismDetection4C.git
oschina-mirror
chenyanlong-PlagiarismDetection4C
chenyanlong-PlagiarismDetection4C
master