1.1.3 · блок 1
Jira: задачи, истории и критерии приёмки
Jira: задачи, истории и критерии приёмки
Зачем это нужно
Когда над проектом работают пять человек, «спроси в чате» перестаёт работать. Jira — система учёта задач, где видно: *что* нужно сделать, *кто* делает, *в каком* статусе и *когда* должно быть готово. Для ML-курса Jira — тренажёр дисциплины: вы учитесь формулировать работу так, чтобы её понял не только вы, но и ревьюер, QA и PM.
Плохой тикет — «пофиксить модель». Хороший тикет — конкретная Story с acceptance criteria, по которым QA может однозначно сказать «принято» или «не принято».
Основные идеи
Иерархия задач в Jira:
- Epic — крупная цель на несколько спринтов. Пример: «Система рекомендаций товаров v1».
- Story (User Story) — ценность для пользователя или бизнеса. Формат: «Как [роль], я хочу [действие], чтобы [результат]». Пример: «Как покупатель, я хочу видеть 5 рекомендаций на странице товара, чтобы быстрее находить нужное».
- Task — техническая работа без прямой пользовательской формулировки. Пример: «Настроить cron для переобучения модели раз в сутки».
- Sub-task — часть Story или Task. Пример: «Написать unit-тест для preprocessing pipeline».
Acceptance Criteria (AC) — условия приёмки. Это не описание реализации, а проверяемые факты:
Given пользователь открыл карточку товара ID=123
When сервис рекомендаций доступен
Then API возвращает 5 item_id с latency < 100 ms
And каждый item_id существует в каталоге
AC пишет PM или аналитик совместно с инженером. DS/MLE добавляют технические критерии: «AUC на hold-out ≥ 0.85», «inference batch 1000 rows < 2 sec».
Как писать хороший тикет:
1. Заголовок — глагол + объект: «Добавить endpoint /recommend», не «Рекомендации».
2. Описание — контекст: зачем, ссылки на Confluence/ADR, ограничения.
3. AC — нумерованный список, каждый пункт тестируем.
4. Метки и компоненты — ml, backend, infra — для фильтрации.
5. Оценка — story points или часы; блокирующие связи (blocks / is blocked by).
Типичные ошибки студентов:
- AC описывает *как* делать («использовать XGBoost»), а не *что* должно работать.
- Один Epic на весь семестр без декомпозиции — доска не двигается.
- Закрытие Task без линка на PR — через месяц никто не найдёт код.
Как это выглядит на практике
Epic SHOP-10: Персональные рекомендации.
Story SHOP-42: API рекомендаций для главной страницы
- AC1:
GET /api/v1/recommendations?user_id=Xвозвращает JSON-массив из 10 sku. - AC2: При отсутствии истории пользователя — fallback на топ продаж.
- AC3: p95 latency ≤ 150 ms при 100 RPS (нагрузочный тест в CI).
- AC4: OpenAPI-спека обновлена в репозитории.
Sub-tasks:
- SHOP-43: MLE — упаковать модель в Docker-образ.
- SHOP-44: Backend — роутинг и кэш Redis.
- SHOP-45: QA — автотест по AC1–AC3.
В PR-description указывают: Fixes SHOP-42 — Jira автоматически свяжет коммит с задачей (если настроена интеграция).
Что сделать после занятия
- [ ] Создайте Epic и 2–3 Story для своего учебного проекта; у каждой Story — минимум 3 AC.
- [ ] Перепишите плохой тикет «Сделать ML» в Story + Task с конкретными AC.
- [ ] Добавьте Sub-task с оценкой времени и зависимостью
blocks.