Skip to content

Specification

Vadim Dyachkov edited this page Mar 10, 2020 · 1 revision

Поиск заимствований в проектах на Java

Введение

  • Студенты самостоятельно реализуют одинаковый семестровый курсовой проект
  • Проект состоит из последовательных этапов с фиксированным deadline
  • Каждый этап является надстройкой над предыдущим
  • Решение каждого этапа присылается студентом в виде pull request (PR) в открытый репозиторий на GitHub
  • Автоматически прогоняются модульные тесты (TravisCI) для текущего этапа и результат публикуется в PR
  • Автоматически производится статический анализ кода (FindBugs, PMD, checkstyle через CodeClimate) и результат публикуется в PR
  • В случае успеха предыдущих этапов преподаватель проводит code review и пишет замечания
  • Через несколько итераций PR закрывается с положительным или отрицательным результатом

Проблемы

Некоторые студенты заимствуют решения у товарищей и студентов прошлых лет:

  • Цель образовательного процесса не достигается
  • Оценки недостаточно объективны

Цель

Автоматизация аналитического процесса поиска заимствований:

  • Больше самостоятельных реализаций — лучше качество образовательного процесса
  • Определение степени заимствований — более объективная оценка

Задачи

  • UI с аутентификацией для конфигурирования отслеживаемых репозиториев
  • Интеграция с GitHub — trigger процесса поиска на создание pull request (PR)
  • Извлечение исходного кода потенциальных кандидатов (текущий этап и решения прошлых лет)
  • Определение степени заимствований между кандидатами и исследуемым PR
  • Ранжирование источников заимствований
  • Формирование отчёта о заимствованиях
  • Публикация отчёта в PR

Ограничения

  • Проекты на языке Java (13)
  • До 50 студентов
  • До 10 этапов
  • Объём каждого решения до 10 KLOC (без тестов)

Модель данных

  • Организация на GitHub
  • Проект/курс/репозиторий
  • Учебный год
  • Этап
  • Индивидуальное решение/pull request

Требования

Объект анализа

  • Diff между двумя решениями последовательных этапов одного студента

UI/админка

  • Аутентификация для изменений
  • Публичный доступ на чтение
  • Конфигурация организаций и репозиториев
  • Ссылки на результаты анализа

Ранжирование кандидатов

  • Доля “совпадений”
  • Boost более ранних решений текущего этапа

Аналитический отчёт

  • Граф pull request’ов с метаинформацией и весами дуг-заимствований
  • Diff по клику на дугу

Результат

  • Публичный Web Service в Облаке
  • Функциональные тесты в “песочнице”
  • Исходники сервиса на GitHub
  • Инструкция по развёртыванию