kickstarter_processing
Общее описание проекта
Основная задача системы - автоматизировать процессы обработки в рамках инструмента управления задачами.
Описание модулей проекта
-
Модель данных: Включает определения объектов
KickstarterRedvoiceSettingиRightsSupport, обрабатывающих настройки задач и права доступа. -
Обработка задач: В этом модуле реализованы функции для обработки исходящих задач, включая их блокировку, отложенную обработку и обработку связанных задач.
-
Интеграция с системами управления задачами: Система интегрирована с внешними системами управления задачами, такими как Redmine.
-
Тестирование: Включает тесты для проверки логики обработки задач.
-
Утилиты: Вспомогательные инструменты для работы с внешними системами управления задачами и их настройками.
Общая логика работы системы
Система автоматически обрабатывает задачи по расписанию CRON. Это включает проверку статусов задач, обработку блокированных, отложенных и связанных задач. При обнаружении изменений система взаимодействует с внешними системами управления задачами для обновления статусов, переназначения или открытия задач.
Интеграции с внешними системами
Система интегрирована с внешними системами управления задачами (например, Redmine) через API. Это позволяет автоматически обрабатывать задачи на основе их статусов и связей, обновлять информацию о задачах и управлять ими в соответствии с бизнес-правилами проекта.
Действия в системе
Изучив код проекта, я выявил следующие действия, доступные в системе. Эти действия соответствуют функциям, определенным в исходном коде:
-
Инициализация задачи: Подготовка и начальная настройка задачи перед ее обработкой.
-
Проверка статуса задачи: Определение текущего состояния задачи, в том числе ее активности и возможности для дальнейшей обработки.
-
Обновление задачи: Изменение статуса или других параметров задачи в соответствии с выполненными действиями или внешними изменениями.
-
Блокировка/разблокировка задачи: Установка или снятие блокировки задачи для предотвращения или разрешения ее обработки.
-
Отложенная обработка задачи: Настройка задачи на выполнение в заданное время или при наступлении определенных условий.
-
Обработка связанных задач: Управление задачами, связанными с текущей задачей, включая их обновление и синхронизацию.
-
Взаимодействие с внешними системами управления задачами: Обмен информацией с системами типа Redmine через API для синхронизации состояний задач.
-
Логирование действий: Запись информации о выполненных действиях и их результатах для аудита и отладки системы.
-
Тестирование функционала: Выполнение тестовых сценариев для проверки корректности работы системы и ее компонентов.
Сценарий использования
Представим ситуацию в компании, занимающейся разработкой программного обеспечения, где используется система управления проектами на базе Redmine.
Сценарий: В проекте задачи распределены между командами разработчиков, тестировщиков и дизайнеров. Одна из ключевых задач, назначенная разработчику, зависит от завершения предварительной работы дизайнера. Система "kickstarter_processing" автоматически отслеживает статус задач дизайнера и, как только задача дизайнера завершается, система обновляет статус задачи разработчика с "заблокировано" на "в работе". Это обеспечивает плавный переход между этапами работы без необходимости ручного вмешательства менеджера проекта.
Таким образом, система позволяет сэкономить время менеджеров проектов, автоматизируя процесс управления зависимостями между задачами, и обеспечивает более эффективное и организованное управление проектами.
Модель данных
В проекте определены следующие сущности и поля:
-
KickstarterRedvoiceSetting - Настройки для обработки задач.
tracker- Ссылка на объект Tracker, представляющий систему учета задач.tracker_ticket- Идентификатор задачи в системе учета.status_blocked,status_closed,status_rejected,status_reopen,status_draft,status_postponed- Целочисленные поля, представляющие различные статусы задач.postponed_until- Целочисленное поле, указывающее дату, до которой задача отложена.
-
RightsSupport - Сущность для управления правами доступа.
id- Уникальный идентификатор.
Эти сущности используются для хранения конфигураций и прав доступа, необходимых для обработки задач в системе.
Диаграмма Состояний
Диаграмма состояний представляет собой следующие основные состояния задач и переходы между ними:
- Открыто: начальное состояние; задача может быть переведена в состояние "заблокировано", "отложено" или "закрыто".
- Заблокировано: задача ожидает разблокирования, которое происходит автоматически при изменении статуса блокирующих задач.
- Отложено: задача находится в ожидании до определённой даты, после которой она может быть автоматически переоткрыта.
- Закрыто: конечное состояние задачи; задача не может быть изменена без специального запроса на переоткрытие.
Анализ кода проекта
Оценка проекта: Код получает 7 из 10.
Обзор: Проект представляет собой Django-приложение для обработки задач в системе управления проектами (например, Redmine). Функционал включает управление статусами задач, обработку связанных задач, а также работу с отложенными и блокированными задачами.
Конкретные замечания:
-
Модели Django:
- В
models.py, для моделиKickstarterRedvoiceSettingзаданы поля со статусами какIntegerField. Это может привести к ошибкам, так как значения статусов не самодокументируемы. Лучше использоватьChoiceFieldс явно определенными значениями для большей ясности и избегания магических чисел. Например:STATUS_CHOICES = [
(7, 'Blocked'),
(8, 'Closed'),
# и так далее...
]
status_blocked = models.IntegerField(choices=STATUS_CHOICES, default=7)
- В
-
Обработка исключений:
- В
processing.pyиспользуется широкий перехват исключений, например,except Exception. Это плохая практика, так как может скрыть неожиданные ошибки. Рекомендуется перехватывать только те исключения, которые действительно ожидаемы в данном контексте.
- В
-
Декораторы:
- В
processing_decorators.py, декораторыsupress_kickstarter_processing_errorsиsupress_issue_updateиспользуются для подавления и обработки ошибок. Хотя это может быть уместно, лучше было бы логировать такие ошибки и отправлять уведомления, чтобы обеспечить возможность отслеживания и устранения проблем.
- В
Рекомендации по улучшению:
-
Рефакторинг:
- Провести рефакторинг с целью улучшения читаемости и поддерживаемости кода. Например, выделить повторяющиеся блоки кода в отдельные функции или методы.
-
Тестирование:
- Расширить тестовое покрытие, чтобы убедиться в корректности работы всех компонентов системы, особенно в обработке исключений и в сценариях использования декораторов.
Оценка времени на разработку: Для опытной команды разработчиков написание такого проек та может занять около 2-3 недель. Это включает в себя время на планирование, разработку, тестирование и рефакторинг. Важно учитывать, что время может варьироваться в зависимости от сложности бизнес-логики и требований к качеству кода.