Перейти к основному содержимому

code_review_processing

Общее описание

Проект представляет собой систему для автоматизированной обработки кодового ревью в IT компании. Основная задача системы — упрощение и автоматизация процесса ревью кода, а также интеграция с внешними системами управления задачами и контроля версий.

Описание модулей проекта

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

Общая логика работы системы

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

Интеграция с внешними системами

Система интегрирована с:

  1. Системами управления задачами (например, Redmine): для получения информации о задачах, связанных с кодовым ревью.
  2. Системами контроля версий (например, GitLab): для работы с репозиториями и запросами на слияние (merge requests).

Цель проекта - автоматизировать процесс кодового ревью, упростив управление им и обеспечив более эффективное взаимодействие между разработчиками и системами управления задачами и контроля версий.

Сценарий использования

Представим, что в компании используется система управления проектами Redmine и система контроля версий GitLab. Ваша задача - автоматизировать процесс ревью кода с использованием этого проекта.

Пример использования:

  1. Настройка: Сначала вы настраиваете систему, указывая в настройках Redmine и GitLab соответствующие URL и токены доступа.

  2. Отслеживание задач на ревью: Система автоматически отслеживает задачи в Redmine, требующие код-ревью.

  3. Обработка запросов на слияние (Merge Requests) в GitLab: Как только появляется задача на ревью, система извлекает информацию о соответствующем запросе на слияние из GitLab.

  4. Назначение рецензентов: Система автоматически назначает рецензентов для проверки кода, используя предопределенные идентификаторы пользователей.

  5. Управление сроками: Если обсуждения в запросе на слияние не завершены или иная проблема, система может изменять статус задачи в Redmine, например, возвращая её на доработку.

  6. Отчетность: После завершения ревью, система фиксирует время, затраченное на обработку каждого запроса, и предоставляет данные для отчетности.

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

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

В проекте используется следующая модель данных:

  1. CodeReviewSetting: Настройки для ревью кода.
    • tracker (OneToOneField на Tracker): Связь с трекером задач.
    • tracker_project_name_regex (CharField): Регулярное выражение для имени проекта в трекере.
    • gitlab_url (CharField): URL для GitLab.
    • gitlab_token (CharField): Токен для доступа к GitLab.
    • merge_request_field_id (IntegerField): ID поля запроса на слияние в системе трекинга задач.
    • review_deadline_date_field_id (IntegerField): ID поля с дедлайном ревью в системе трекинга задач.
    • status_testing_needed, status_review_needed, status_reopen (IntegerField): ID статусов задач.
    • default_tester_user_id (IntegerField): ID пользователя, заданного по умолчанию для тестирования.
    • service_user_ids (CharField): Идентификаторы пользователей сервиса.
    • reviewers_field_id (IntegerField): ID поля с рецензентами.
    • mandatory_reviewer_ids (CharField): Обязательные ID рецензентов.
    • deadline_in_work_days (IntegerField): Срок выполнения задачи в рабочих днях.

Эта модель данных отражает основные параметры для настройки и управления процессом ревью кода в рамках интеграции с Redmine и GitLab. Она позволяет настроить фильтрацию задач, обработку запросов на слияние, назначение рецензентов, а также управление сроками и статусами задач.

Диаграмма состояний

Анализ кода проекта

Проанализировав представленный код, можно выделить несколько ключевых моментов:

  1. Структура и организация кода: Код хорошо структурирован, разделён на модули и соответствующие файлы, что облегчает его понимание и поддержку.

  2. Функции обработки: Основная логика обработки запросов на ревью кода реализована в функциях вроде trackers_processing, issues_processing. Эти функции достаточно объёмные и могут быть оптимизированы путём разделения на более мелкие, специализированные функции. Например, функция issues_processing обрабатывает множество аспектов, от получения данных из Redmine до обработки merge request из GitLab.

  3. Магические числа и строки: В коде присутствуют магические числа и строки (например, в models.py используются числовые значения для статусов). Лучше заменить их на константы с понятными именами, что улучшит читаемость и поддержку кода.

  4. Обработка исключений: В декораторах (например, supress_issue_processing_errors) реализована обработка исключений. Однако, в некоторых местах кода, где могут возникнуть исключения, явной обработки нет. Стоит добавить более детальную обработку исключений в критических местах.

  5. Код-ревью и тестирование: Код выглядит так, будто прошёл качественное ревью и тестирование. Он организован и написан так, что его легко читать и понимать.

  6. Оценка времени на разработку: Для опытной команды разработки создание такого проекта могло бы занять около 3-4 недель, учитывая время на планирование, разработку, тестирование и рефакторинг.

  7. Оценка проекта по 10-балльной шкале: Я бы оценил данный проект на 8 из 10. Код хорошо структурирован и написан, но есть место для небольших улучшений в области рефакторинга и обработки исключений.