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

Планирование конструирования — PERT, CPM, оценки

Руководителю Разработчику Аналитику

Планирование — не «нарисовать Gantt и забыть»

Планирование конструирования — это не «красивая диаграмма для начальника». Это ответы на вопросы, без которых разработчик сидит в неопределённости: что кодировать завтра, что блокирует релиз, сколько времени заложить на интеграцию с банком.

Мини-словарь

ТерминПо-человечески
WBSДерево задач: от «релиз 1.0» до «написать JWT middleware»
ГанттКалендарь: кто что делает какие дни
CPMНаходит цепочку задач без запаса — задержка там сдвигает весь проект
PERTТри оценки (оптимист/реалист/пессимист) для неизвестной задачи
Float (резерв)Сколько можно задержать задачу без срыва дедлайна проекта
VelocityСколько story points команда реально закрывает за спринт
Planning PokerКоманда сравнивает сложность задач относительно друг друга

На стадии конструирования план отвечает на четыре вопроса:

  1. Что кодировать — декомпозиция до модулей и задач (WBS).
  2. В каком порядке — зависимости между API, миграциями, интеграциями.
  3. Сколько времени — оценки с учётом неопределённости.
  4. Где узкое место — критический путь и буфер на баги/review.

Базовые оценки времени — 112; параметрические (COCOMO, Function Points) — 7-13/1. Здесь — сетевое планирование и связь с Agile-оценками.

Календарь ≠ человеко-часы

Три разработчика по 40 часов параллельно дают 120 человеко-часов, но только 40 календарных при полной загрузке. Gantt показывает календарь; WBS-сумма — трудозатраты.


WBS — от проекта к задачам кодирования

Work Breakdown Structure — иерархия работ «сверху вниз»: продукт → подсистемы → модули → листовые задачи, которые можно оценить и назначить.

Интернет-магазин (релиз 1.0)
├── Модуль Auth
│ ├── API login / refresh
│ ├── JWT middleware
│ ├── Миграция users
│ └── Unit-тесты auth
├── Модуль Catalog
│ ├── CRUD товаров
│ ├── Поиск и фильтры
│ └── Integration с Auth
├── Модуль Billing
│ ├── Платёжный адаптер
│ └── Webhook обработка
└── Инфраструктура
├── CI pipeline
└── Staging deploy

Правила хорошего WBS:

ПравилоЗачем
Лист оцениваем (часы, points)Иначе план — декорация
У задачи один ответственныйНет «все и никто»
Лист ≤ 1–2 недели работы одного человекаИначе скрытые риски
Имена глагольные («Реализовать…», «Покрыть тестами…»)Понятен результат

На конструировании листья WBS часто совпадают с модулями из §2: граница задачи ≈ граница merge request.


Диаграмма Ганта

Диаграмма Ганта — календарная шкала: горизонтальные полоски = длительность задач; стрелки = зависимости «B после A».

ЭлементСмысл
ПолоскаДлительность задачи в календарных днях
Параллельные полоскиРесурсы работают одновременно
Milestone (ромб)«Alpha-сборка», «Заморозка API», «Code freeze»
BaselineЗафиксированный план для сравнения с фактом

Инструменты: MS Project, GanttProject, Jira Advanced Roadmaps, YouTrack, Notion timeline, GitLab milestones.

Ограничение Gantt: хорошо показывает когда, но слабо — логику зависимостей на больших графах. Для поиска критического пути используют сетевую диаграмму (CPM/PERT).


CPM — метод критического пути

Critical Path Method (CPM) строит ориентированный граф задач и находит самую длинную цепочку без резерва времени.

  • Критический путь — последовательность, задержка любой задачи на которой сдвигает дедлайн проекта.
  • Резерв (float, slack) — сколько можно задержать некритическую задачу без вреда для финиша.

Мини-пример с расчётом

Задачи (дни): A(3)B(4)D(2) и параллельно A(3)C(5)D(2).

B(4)
↗ ↘
Start → A(3) → D(2) → Finish
↘ ↗
C(5)
ПутьСуммаКритический?
A → B → D3 + 4 + 2 = 9Да
A → C → D3 + 5 + 2 = 10Да (длиннее!)

Критический путь: A → C → D (10 дней). У B есть float = 10 − 9 = 1 день (можно начать на день позже или растянуть на день).

Forward / backward pass (для экзамена)

ОбозначениеСмысл
ES (Early Start)Раньшее начало
EF (Early Finish)ES + длительность
LS (Late Start)Позднее начало без сдвига проекта
LF (Late Finish)Позднее окончание
FloatLS − ES (или LF − EF)

Для конструирования: критический путь часто проходит через ядро домена, интеграцию и миграции данных — их недооценка срывает релиз, даже если «мелочь по UI» готова раньше.


PERT — три оценки длительности

Program Evaluation and Review Technique — когда длительность неизвестна точно (новая технология, внешний API, сложный refactor).

ОценкаСмысл
O (optimistic)Минимум при удачном стечении
M (most likely)Наиболее вероятная
P (pessimistic)Максимум при проблемах

Ожидаемая длительность (бета-распределение):

TE = (O + 4M + P) / 6

Стандартное отклонение:

σ = (P − O) / 6

Числовой пример

Задача «Интеграция с платёжным шлюзом»:

OMP
3 дня5 дней12 дней

TE = (3 + 4×5 + 12) / 6 = 35/6 ≈ 5,8 дня

σ = (12 − 3) / 6 = 1,5 дня

Как читать TE: вес 4 у «наиболее вероятной» оценки M — она сильнее влияет на результат. Широкий разброс O=3 и P=12 говорит о риске: закладывайте буфер в план (неделя 8 в примере релиза ниже).

σ — разброс: чем больше, тем неопределённее задача; на совещании стоит разбить её на spike «подключиться к sandbox банка» и отдельно «боевую интеграцию».

Та же формула — метод трёх точек в 112. PERT добавляет сетевой контекст: TE подставляют в узлы графа, затем ищут критический путь уже по ожидаемым, а не только детерминированным длительностям.

Когда PERT, когда одна цифра

PERT — задача с высокой неопределённостью (первый раз с технологией). Одна оценка M — типовой CRUD по шаблону. Planning Poker — относительная сложность в Agile, потом перевод в часы через velocity.


Стратегии планирования конструирования

СтратегияСутьКогда
Top-downСрок фиксирован → режем scope / добавляем людей (осторожно: закон Брукса)Контракт с дедлайном
Bottom-upСумма оценок WBS → календарь + параллелизмВнутренний продукт
Critical chainБуфер на цепочку, а не на каждую задачуМного зависимостей
Rolling waveДетально планируем ближайшие 2–4 недели, дальше — грубоAgile, неясный хвост релиза
Milestone-drivenЖёсткие точки: «API freeze», «feature complete»Инкременты + V-модель

На практике гибрид: rolling wave внутри спринта + milestone на релиз + CPM для интеграционной недели.


Planning Poker и конструирование

Planning Poker — командная оценка относительной сложности (story points), не календарных дней. Связка с конструированием:

ШагДействие
1Story оценили в points (Poker)
2Разработчик раскладывает на технические подзадачи (API, миграция, тесты)
3Подзадачи суммируются в часы и сверяются с velocity команды
4Если не влезает — режем story или выносим spike

Spike (исследование) — отдельная задача с time-box, часто с PERT-оценкой (широкий разброс O/P).

Отличие от PERT: Poker сравнивает сложность («эта story как прошлая X»); PERT — время одной задачи с разбросом.


Планирование тестирования параллельно (V-модель)

Тест-план не после кода — иначе V-модель только на бумаге.

Фаза конструированияПараллельно в QA
Детальный проект модуляЧерновик модульных кейсов
Написание unit-тестов (dev)Review сценариев на «дыры»
Сборка инкремента / alphaIntegration, smoke, regression
Feature freezeSystem, нагрузка, security
Release candidateUAT, приёмка

См. тест-план, ПМИ, пирамиду тестов.


Разбор — релиз интернет-магазина за 8 недель

Команда: 2 backend, 1 frontend, 1 QA. Billing — интеграция с банком (PERT: O=5, M=8, P=15 → TE≈9 дней) и критический путь.

НеделяКонструированиеТест / QAРиск
1Каркас CI, Auth APITest plan Auth
2Auth frontend, JWTUnit + smoke Auth
3–4Catalog API + UIIntegration catalogПараллельно с Auth hardening
5Billing (критический путь)Regression 1–4Задержка здесь = срыв всего
6NFR: кэш, логи, rate limitLoad smoke
7Документация API, tag releaseUAT сценарии
8Буфер / hotfixПриёмкаБез буфера неделя 8 = 0

Урок: если Billing сдвинулся на +1 неделю, без недели 8 как буфера срывается приёмка. Float у некритичных задач (например, «улучшить фильтры») можно жертвовать, чтобы подтянуть Billing.


Связь с управлением конфигурацией и релизом

План конструирования включает точки заморозки:

  • API freeze — контракты не меняются без versioning.
  • Code freeze — только bugfix в релизную ветку.
  • SCM tag — воспроизводимая сборка.

Подробнее — 7-13/3 (SCM, релизы).


Типичные ошибки

  1. Нет критического пути — оптимизируют некритичные задачи (иконки), пока горит интеграция.
  2. 100% загрузка людей — нет буфера на review, баги, sick leave.
  3. Тест «в конце» — regression за два дня перед prod.
  4. Один Gantt на год без обновления — план расходится с реальностью после первого change request.
  5. Points без декомпозиции — story «8 points» без tech tasks; в спринте внезапно «не успели миграцию».

Частые вопросы на экзамене

Чем CPM отличается от Gantt?
Gantt — календарное представление; CPM — логика зависимостей и поиск критического пути (часто оба используют вместе).

Что такое float?
Запас времени у некритической задачи; у критической float = 0.

Зачем Planning Poker, если есть PERT?
Poker — относительная оценка в команде Agile; PERT — абсолютное время с разбросом для отдельных рискованных задач.


Куда читать дальше

ТемаМатериал
Модели ЖЦ3
COCOMO, PM7-13/1
SCM, релизы7-13/3
Оценка в команде112

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).