Skip to content

Semester report

Anton Lamtev edited this page Jul 6, 2020 · 21 revisions

Реализованная функциональность

  • Авторизация через GitHub
    • OAuth2 GitHub access token хранится в БД
    • JSON Web Token используется для идентификации клиента сервером (модель c short lifetime access_token и long-lived refresh_token)
  • Создание проекта с помощью ссылки на GitHub репозиторий
    • Проверка прав на создание (только админскими+ правами в GitHub репозитории можно создавать проект в нашем сервисе)
    • Подтягивание существующих PR
    • Установка web-хука, который срабатывает при обновлении PR
  • Обработка на сервере web-хука, с последующими обновлением данных в БД и запуском детектирования клонов. Информация о клонах так же помещается в БД.
  • Отображение на главной странице созданных проектов
  • Отображение списка PR для каждого из проектов (в порядке убывания даты обновления)
  • Для каждого PR можно посмотреть
    • Сводную информацию
    • Дифф (Исходный код загружается с помощью JGit)
    • Найденных клонов (Клоны ищутся с помощью сжатого суффиксного дерева А. Сухинина)
    • Дифф с другим PR из этого проекта
  • Для read-only доступа авторизация не требуется

Нереализованная функциональность

  • Конфигурирование отслеживаемых репозиториев
  • Извлечение исходного кода потенциальных кандидатов из решений прошлых лет
  • Определение степени заимствований между кандидатами и исследуемым PR
  • Ранжирование источников заимствований
  • Формирование отчёта о заимствованиях (пока только список клонов в виде диффа)
  • Публикация отчёта в PR
  • Аналитический отчет
    • Граф pull request’ов с метаинформацией и весами дуг-заимствований (есть наработки на стороне UI)
    • Diff по клику на дугу

Известные проблемы

  • Отсутствие возможности поиска клонов "по кнопке", а также при создании проекта для уже существующих ПР.
  • При постановке детектору клонов задачи, в качестве источников поиска клонов ему передаются файлы, которые находятся в репозиториях с состоянием коммитов, которые соответствуют Пулл-реквестам, обновленным раньше исследуемого на плагиат. То есть не происходит поиск клонов среди промежуточных коммитов пулл-реквестов.
  • Повторный запуск клон детектора не является идемпотентной операцией, то есть дубликаты клонов будут записываться в БД
  • Суффиксное дерево строится каждый раз заново на каждый триггер веб хуком. Количество используемой памяти тут никак не контролируется. Более того это так же неэффективно по времени. Наверное, стоит иметь по 1 суффиксному дереву на 1 проект

Кто что делал

Гапоненко Дарья

  1. Обзор GitHub API - страница на wiki
  2. Невлитый в develop PR "Pull-requests parser"
    • В теории - обработка веб хука и выполнение запросов к GitHub API для получения данных об PR без сохранения в БД, а также загрузка захардкоженых файлов с помощью JGit без дальшейших действий с ними.
    • +313 −5
    • Не все замечания инспекций Code-climate исправлены
    • Не все замечания от коллег исправлены
    • 19 коммитов с 16 апреля по 27 мая
    • Перед промежуточным дедлайном заявленная в этом ПР функциональность была реализована другим разработчиком
    • TODO потраченное время на ресерч и кодинг

Дьячков Вадим

Крылов Иван

Ламтев Антон

Ширяев Марк

Clone this wiki locally