Home / Blog

ALM со Scrum: практическое руководство для команд .NET

Carlos Casalicchio · June 30, 2026 ·7 мин чтения

ALM — это не просто инструменты, это дисциплина

Application Lifecycle Management (ALM) — это сквозная дисциплина управления программным обеспечением от замысла до вывода из эксплуатации. Для команд, работающих с .NET, ALM охватывает сбор требований, архитектуру, разработку, тестирование, развёртывание, сопровождение и управление — и всё это координируется через чётко определённый процесс.

Scrum задаёт итеративный каркас. ALM обеспечивает дисциплину. Вместе они дают командам .NET воспроизводимый путь от идеи до продакшена — с прозрачностью на каждом шаге.

Это руководство основано на более чем 15 годах опыта поставки проектов на .NET с использованием Scrum. Оно охватывает полный жизненный цикл, выбор инструментов (Azure DevOps, GitHub, Visual Studio) и метрики, которые действительно предсказывают успех поставки, — а не метрики ради галочки.

Каркас ALM: пять фаз, один ритм

ALM разбивает поставку ПО на пять взаимосвязанных фаз, которые напрямую соответствуют ритму Scrum:

Фаза Событие Scrum Ключевые артефакты Инструменты .NET
1. Требования и планирование Планирование спринта, уточнение бэклога Бэклог продукта, бэклог спринта, определение готовности (Definition of Done) Azure Boards, GitHub Issues, GitHub Projects
2. Разработка Ежедневный Scrum, выполнение спринта Работающее ПО, код-ревью, модульные тесты Visual Studio, VS Code, JetBrains Rider
3. Непрерывная интеграция Постоянно (при каждом коммите) Артефакты сборки, результаты тестов, отчёты о покрытии кода Azure Pipelines, GitHub Actions, TeamCity
4. Тестирование и качество Обзор спринта (демо) Планы тестирования, отчёты об ошибках, наборы регрессионных тестов xUnit, NUnit, Playwright, Selenium, SpecFlow
5. Релиз и эксплуатация Ретроспектива спринта Примечания к релизу, дашборды мониторинга, отчёты об инцидентах Azure DevOps Releases, Octopus Deploy, Docker, Kubernetes

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

Фаза 1: Требования и планирование, которые действительно работают

Бэклог продукта: больше, чем просто список

Здоровый бэклог продукта — это фундамент эффективного ALM. Для команд .NET каждый элемент бэклога должен включать:

  • Пользовательская история: «Как [роль], я хочу [функцию], чтобы [результат]».
  • Критерии приёмки: конкретные, проверяемые условия, определяющие «готово». Для ясности используйте формат Given/When/Then.
  • Технические заметки: архитектурные решения, изменения схемы базы данных, контракты API, влияние на NuGet-пакеты.
  • Оценка: стори-пойнты или идеальные часы. Мы рекомендуем стори-пойнты на основе сложности, трудозатрат и неопределённости — а не времени.
  • Зависимости: другие элементы бэклога, внешние сервисы, сторонние API или изменения инфраструктуры, от которых зависит данный элемент.

Планирование спринта: встреча обязательств

Планирование спринта состоит из двух частей:

Часть 1 — Что: владелец продукта представляет элементы бэклога с наивысшим приоритетом. Команда задаёт уточняющие вопросы и согласует объём. Результат: цель спринта — краткое, в одно предложение, описание того, что спринт поставляет.

Часть 2 — Как: команда разбивает каждый элемент бэклога на задачи (обычно по 2–8 часов каждая). Для проектов .NET задачи часто включают: миграцию базы данных, реализацию эндпоинта API, слой сервисов, модульные тесты, интеграционные тесты, компонент фронтенда, код-ревью и обновление документации.

Антипаттерны планирования, которых стоит избегать:

  • Задачи вроде «Написать код для функции X» — слишком расплывчато. Разбейте их на конкретные результаты.
  • Планирование на 100% загрузки — оставляйте запас в 20–30% на незапланированную работу, ошибки и совместную работу.
  • Игнорирование технического долга — выделяйте хотя бы один элемент бэклога за спринт на рефакторинг или сокращение долга.

Фаза 2: Разработка — где код встречается с процессом

Стратегия ветвления для команд .NET

Мы рекомендуем модель разработки на основе ствола (trunk-based) с короткоживущими функциональными ветками:

master (always deployable)
  └── feature/dotnet9-migration (1-3 days)
  └── feature/payment-plugin-pix (1-3 days)
  └── fix/checkout-null-reference (hours)

Правила:

  • Создавайте ветку от последнего master, вливайте обратно максимум в течение 3 дней.
  • Один PR на функцию или ошибку. Небольшие PR ревьюятся быстрее и вливаются раньше.
  • Каждый PR должен пройти CI (сборка + тесты) до ревью.
  • Требуйте хотя бы одно одобрение. Все замечания ревью должны быть устранены до слияния.
  • Используйте squash-merge, чтобы история master оставалась чистой.

Стандарты код-ревью для .NET

Код-ревью должно проверять:

  • Корректность: реализует ли код критерии приёмки? Обработаны ли граничные случаи?
  • Безопасность: никаких зашитых секретов. Валидация ввода. Защита от SQL-инъекций. Правильные проверки авторизации на эндпоинтах.
  • Производительность: никаких N+1-запросов. Асинхронность на всём пути. Уместное кэширование. Пулинг соединений.
  • Тестируемость: логика находится во внедряемых сервисах, а не в статических методах или контроллерах. Зависимости абстрагированы за интерфейсами.
  • Соглашения: соответствие принятым в проекте соглашениям об именовании, структуре папок и стандартам кодирования.

Ежедневный Scrum: не отчёт о статусе

Ежедневный Scrum — это встреча для координации, а не инструмент микроменеджмента. Каждый участник команды отвечает: что я завершил вчера, что я завершу сегодня и что меня блокирует? Если возникает препятствие, Scrum-мастер устраняет его — вне ежедневного Scrum. Встреча должна занимать 15 минут, а не 45.

Фаза 3: Непрерывная интеграция — автоматизируйте всё

CI-пайплайн для проектов .NET

Каждый коммит в функциональную ветку должен запускать:

  1. Restore: dotnet restore — разрешает зависимости NuGet. Кэшируйте пакеты для скорости.
  2. Build: dotnet build --configuration Release --no-restore — компиляция с оптимизациями. Считайте предупреждения ошибками.
  3. Test: dotnet test --no-build --configuration Release — запуск всех модульных и интеграционных тестов. Прерывайте сборку при провале теста.
  4. Analyze: запустите StyleCop, SonarQube или анализаторы .NET. Блокируйте слияние, если появляются новые предупреждения.
  5. Package: для библиотек: dotnet pack. Для приложений: dotnet publish. Для Docker: docker build.

Пример: YAML-пайплайн Azure DevOps

trigger:
  branches:
    include:
      - master
      - feature/*
      - fix/*

pool:
  vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'

steps:
- task: UseDotNet@2
  inputs:
    version: '9.x'

- script: dotnet restore
  displayName: 'Restore packages'

- script: dotnet build --configuration $(buildConfiguration) --no-restore
  displayName: 'Build solution'

- script: dotnet test --no-build --configuration $(buildConfiguration) --collect:"XPlat Code Coverage"
  displayName: 'Run tests'

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'

Тесты верификации сборки (BVT)

Помимо модульных тестов, включите небольшой набор дымовых тестов (smoke tests), выполняемых в рамках CI, — они проверяют, что приложение запускается, база данных подключается, основные эндпоинты API возвращают 200, а критичные пользовательские сценарии работают. Такие тесты ловят проблемы окружения и конфигурации, которые модульные тесты увидеть не могут.

Фаза 4: Тестирование и качество — за пределами «на моей машине работает»

Пирамида тестирования в .NET

Уровень Что тестирует Инструмент Целевое покрытие
Модульные тесты Отдельные методы и классы xUnit, NUnit, MSTest 80%+ покрытия строк бизнес-логики
Интеграционные тесты База данных, API, файловый ввод-вывод, внешние сервисы xUnit + TestContainers, WebApplicationFactory Все критичные точки интеграции
Тесты API/контрактов Контракты API, JSON-схемы, HTTP-коды состояния xUnit + HttpClient, Pact Все публичные эндпоинты API
E2E-тесты Полные пользовательские сценарии в браузере Playwright, Selenium Критичные пути (оформление заказа, вход, CRUD)
Тесты производительности Время отклика, пропускная способность, использование ресурсов BenchmarkDotNet, k6, JMeter Ключевые эндпоинты под нагрузкой

Принцип тестирования: пишите тесты на самом низком уровне, который даёт вам уверенность. Не каждой функции нужен E2E-тест — хорошо протестированный слой сервисов с интеграционными тестами для слоя базы данных ловит большинство ошибок быстрее и надёжнее, чем автоматизация браузера.

Обзор спринта: демонстрация работающего ПО

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

Фаза 5: Релиз и эксплуатация — от «готово» до «развёрнуто»

Управление релизами для .NET

Релизы должны быть скучными — автоматизированными, предсказуемыми и обратимыми. Вот процесс, который мы используем в SplatDev:

  1. Повышение версии: семантическое версионирование (MAJOR.MINOR.PATCH). Повышайте версию по ходу спринта, когда функции завершаются, а не в момент релиза.
  2. Релизная ветка: отделяется от master с тегом версии. В релизные ветки вливаются только хотфиксы.
  3. Развёртывание на staging: автоматическое развёртывание в среду staging, зеркалирующую продакшен. Запустите регрессионный набор.
  4. Дымовой тест: ручная проверка критичных путей на staging. Зафиксируйте доказательства скриншотами.
  5. Развёртывание в продакшен: сине-зелёное (blue-green) или канареечное развёртывание. Отслеживайте частоту ошибок, время отклика и бизнес-метрики в течение 30 минут после развёртывания.
  6. Проверка после развёртывания: подтвердите развёртывание по чек-листу релиза. Обновите примечания к релизу.

Мониторинг: знайте раньше, чем вам скажут пользователи

Мониторинг продакшена — часть ALM: вы не закончили, когда развернули, вы закончили, когда убедились, что система здорова. Ключевые метрики для приложений .NET:

  • Ошибки приложения: необработанные исключения, ответы 500. Оповещайте немедленно.
  • Время отклика: задержка P50, P95, P99 по каждому эндпоинту. Оповещайте при деградации.
  • Пропускная способность: запросов в секунду. Оповещайте при аномалиях.
  • Использование ресурсов: CPU, память, паузы сборщика мусора (GC), исчерпание пула потоков. Следите за утечками.
  • Бизнес-метрики: размещённые заказы, обработанные платежи, завершённые регистрации. Это ваши настоящие индикаторы здоровья.

Используйте Application Insights (Azure), Datadog или Prometheus + Grafana для мониторинга .NET. Логируйте в систему структурированного логирования (Serilog + Seq/Elasticsearch) — никогда не отлаживайтесь по выводу консоли из продакшена.

Метрики Scrum, которые действительно предсказывают успех

Большинство метрик Scrum — это метрики ради галочки. Вот те, что коррелируют с результатами поставки:

Lead time и cycle time

Lead time: время от создания элемента бэклога до развёртывания. Cycle time: время от начала работы до развёртывания. Чем короче, тем всегда лучше — это означает меньшие партии, более быструю обратную связь и меньше незавершённой работы. Цель: cycle time менее 5 дней для большинства элементов.

Диаграмма сгорания спринта (с осторожностью)

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

Пропущенные дефекты

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

Частота развёртываний

Как часто вы развёртываете в продакшен. Элитные исполнители развёртывают несколько раз в день. Для большинства команд .NET хорошая цель — развёртывать хотя бы раз за спринт. Если вы развёртываете реже, вы накапливаете слишком много риска в одной партии.

Ретроспектива спринта: циклы обратной связи, которые действительно что-то меняют

Ретроспектива — самая важная церемония Scrum и при этом чаще всего пропускаемая. Проводите её каждый спринт. Задавайте три вопроса: что прошло хорошо, что прошло плохо, что мы изменим в следующем спринте? А затем — что критически важно — выберите ОДИН пункт действия и выполните его. Ничто не убивает ценность ретроспективы быстрее, чем обсуждение одних и тех же проблем спринт за спринтом без каких-либо изменений.

Инструментарий: ALM-стек для .NET

Azure DevOps (рекомендуется для корпоративных команд .NET)

Azure DevOps предоставляет интегрированный набор ALM: Azure Boards (управление бэклогом, планирование спринтов, доски), Azure Repos (хостинг Git с политиками веток), Azure Pipelines (CI/CD с первоклассной поддержкой .NET), Azure Test Plans (ручное и исследовательское тестирование) и Azure Artifacts (хостинг NuGet-пакетов). Для команд, уже работающих в Azure, интеграция бесшовна.

GitHub + GitHub Actions (рекомендуется для open-source и современных команд)

GitHub предоставляет Projects для управления бэклогом, Issues для отслеживания работы, Actions для CI/CD и Packages для хостинга NuGet. GitHub Advanced Security добавляет сканирование кода, сканирование секретов и проверку зависимостей. Для команд, которым не нужна глубина Azure Boards, GitHub предлагает более простой, ориентированный на разработчика опыт.

Visual Studio + VS Code

Visual Studio Enterprise включает функции ALM: диаграммы архитектуры, IntelliTest (автоматическую генерацию тестов), проверку зависимостей в реальном времени и обнаружение клонов кода. Для команд, которые ценят эти инструменты, лицензия Enterprise окупается за счёт сокращения времени на отладку.

С чего начать: 30-дневный план внедрения ALM

  1. Неделя 1: настройте свой инструментарий — Azure DevOps или GitHub, CI-пайплайн, фреймворк тестирования. Определите своё определение готовности.
  2. Неделя 2: наполните бэклог продукта. Проведите первое планирование спринта. Установите ритм ежедневного Scrum.
  3. Неделя 3: завершите первый спринт. Продемонстрируйте работающее ПО. Проведите ретроспективу. Измерьте базовые значения cycle time и пропущенных дефектов.
  4. Неделя 4: разверните в продакшен (или на staging, если этого требуют политики). Проанализируйте метрики. Скорректируйте процесс на основе ретроспективы. Повторите.

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

Как SplatDev выполняет поставку с ALM + Scrum

Мы поставляем проекты на .NET с 2009 года — ещё до того, как Scrum стал массовым, и до появления Azure DevOps. Наша консалтинговая практика по ALM помогает командам внедрять практики, описанные в этом руководстве: управление бэклогом, дисциплину спринтов, настройку CI/CD-пайплайнов, автоматизацию тестирования и управление релизами.

Мы предоставляем ALM-консалтинг для команд .NET любого размера — от стартапа из 3 человек до корпоративной команды из 50 человек. Наши проекты обычно включают: оценку процессов, настройку инструментов, коучинг по спринтам (мы проводим 2–3 спринта вместе с вашей командой) и переход к самостоятельности.

Хотите поставлять ПО на .NET быстрее, с меньшим числом ошибок и меньшим стрессом? Давайте обсудим ваш текущий процесс и то, где ALM + Scrum могут дать наибольший эффект.

Получить ALM-консалтинг

Или свяжитесь с нами: [email protected]

Want more articles like this?

Subscribe for updates on .NET, Umbraco, nopCommerce, and software engineering.

Get in touch →