functional-requirements

Функциональные требования: Основы

📚 18 вопросовПройти тест →
Лекция

Функциональные требования: Основы

functional-requirements

Функциональные требования: основы

Введение: заказ в приложении доставки 🍔

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

Проблема → решение

Проблема: если действия не описаны явно, команда трактует задачу по-разному, а QA не понимает, что проверять.
Решение: формулировать требования в виде проверяемых сценариев: актор, действие, условие, результат, обработка ошибок.
Вывод: чем точнее описано поведение, тем меньше переделок.

Чем помогает и как работает

Функциональные требования помогают:
  • синхронизировать ожидания бизнеса и команды;
  • декомпозировать задачу на понятные этапы реализации;
  • построить прозрачные критерии тестирования.
Как это работает:
  1. Определяем актора и бизнес-цель.
  2. Описываем действие системы и ожидаемый результат.
  3. Добавляем условия, ограничения и ошибки.
  4. Привязываем критерии приёмки и тест-кейсы.
Вывод: функциональные требования превращают идею в рабочий план разработки.

Ключевые термины (простыми словами)

  • Functional requirement (FR) — требование к действию системы.
  • Actor — инициатор действия (пользователь, админ, внешняя система).
  • Use case — сценарий с шагами и вариантами развития.
  • User story — короткая формулировка ценности для роли.
  • Business rule — правило, влияющее на поведение.
  • Acceptance criteria — условия, по которым требование считается выполненным.
  • Alternative flow — альтернативный путь сценария.
  • Error flow — поведение при ошибке.
Вывод: без общей терминологии требования быстро становятся неоднозначными.

1. Что такое функциональное требование

Назначение: зафиксировать конкретное действие системы, которое несёт ценность пользователю.
Пример:
Студент может записаться на курс из карточки курса.
🔎 Как это происходит на практике:
  1. Определяется пользовательская задача.
  2. Формулируется действие системы.
  3. Проверяется, что действие можно протестировать.
Когда использовать: всегда, когда описывается поведение системы для пользователя или интеграции.
Вывод: функциональное требование описывает действие, а не пожелание.

2. Формула хорошего FR

Назначение: писать требования одинаково и без двусмысленности.
Шаблон: Актор → Действие → Объект → Результат
Пример:
Авторизованный студент может добавить курс в избранное и видеть его в разделе «Мои курсы».
🔎 Как это происходит на практике:
  1. Указываем конкретного актора.
  2. Фиксируем одно действие.
  3. Добавляем ожидаемый результат после действия.
Когда использовать: при записи каждого функционального требования в бэклог или спецификацию.
Вывод: шаблон снижает риск «размытых» формулировок.

3. User Story и Use Case: когда что выбрать

Назначение: выбрать подходящий формат описания требования.
Пример User Story:
Как студент, хочу записаться на курс, чтобы начать обучение без помощи поддержки.
Пример Use Case:
Актор: студентОсновной сценарий: открыть карточку курса → нажать «Записаться» → получить подтверждениеАльтернативный сценарий: мест нет → показать сообщение об ошибке
🔎 Как это происходит на практике:
  1. Для быстрой фиксации ценности пишем User Story.
  2. Для сложных сценариев с ветвлениями оформляем Use Case.
  3. Связываем Story и Case с критериями приёмки.
Когда использовать: Story — на продуктовой фазе, Use Case — при детальной аналитике.
Вывод: Story и Use Case дополняют друг друга, а не конкурируют.

4. Бизнес-правила и исключения

Назначение: зафиксировать условия, влияющие на поведение функции.
Пример:
Запись на курс доступна только авторизованным пользователям.Если мест нет, система показывает сообщение «Мест нет».
🔎 Как это происходит на практике:
  1. Определяются обязательные условия доступа.
  2. Выявляются типовые исключения.
  3. Для каждой ошибки формулируется реакция системы.
Когда использовать: для всех сценариев, где есть ограничения, лимиты, права или внешние зависимости.
Вывод: полноценное FR описывает не только успешный, но и ошибочный путь.

5. Критерии приёмки (Given/When/Then)

Назначение: сделать требование объективно проверяемым.
Пример:
Дано: студент авторизован.Когда: нажимает «Записаться».Тогда: курс появляется в «Мои курсы».
🔎 Как это происходит на практике:
  1. Для каждого Must-требования пишутся критерии.
  2. QA согласует их с аналитиком и продуктом.
  3. По критериям строятся тест-кейсы.
Когда использовать: всегда перед передачей требований в разработку.
Вывод: без критериев приёмки требование нельзя считать готовым.

6. Гранулярность: одно FR = одно действие

Назначение: упростить реализацию, оценку и тестирование.
Пример:
Плохо: пользователь регистрируется и оплачивает курс.Хорошо:FR-1: пользователь регистрируется.FR-2: пользователь оплачивает курс.
🔎 Как это происходит на практике:
  1. На ревью ищем «склеенные» требования.
  2. Разбиваем их на отдельные действия.
  3. Каждому действию даём свой ID и приоритет.
Когда использовать: при декомпозиции эпиков в stories и tasks.
Вывод: маленькие требования легче реализовать без ошибок.

7. Приоритеты и трассируемость

Назначение: понимать порядок реализации и связь с тестами.
Пример:
FR-1 (Must): запись на курсFR-2 (Should): отмена записиFR-3 (Could): повторная запись в один клик
🔎 Как это происходит на практике:
  1. Требования получают уникальный ID.
  2. Добавляется приоритет.
  3. Указывается связь с задачей и тест-кейсом.
Когда использовать: при планировании релизов и контроле готовности.
Вывод: приоритет и трассируемость делают работу команды управляемой.

Сравнение: слабое и сильное FR

КритерийСлабое FRСильное FR
Формулировка«Сделать удобно»«Студент может записаться в 2 шага»
ПроверяемостьНетЕсть критерии
ОшибкиНе описаныЕсть error flow
ГраницыРазмытыЕсть актор и результат

Часто спрашивают на собеседованиях

  • Чем функциональные требования отличаются от нефункциональных?
  • В каких случаях достаточно User Story, а когда нужен Use Case?
  • Почему одно требование должно содержать одно действие?
  • Как написать хорошие acceptance criteria?
  • Как проверять полноту функциональных требований?
Вывод: на интервью важно показать умение писать проверяемые FR, а не только знание терминов.

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

Ошибка 1: Размытые формулировки

❌ «Система должна быть удобной» ✅ «Студент может записаться на курс из карточки курса»

Ошибка 2: Нет актора

❌ «Можно отменить запись» ✅ «Студент может отменить запись до старта курса»

Ошибка 3: Нет обработки ошибки

❌ описан только успешный путь ✅ добавлены альтернативные и ошибочные сценарии

Ошибка 4: Нет критериев приёмки

❌ неясно, как проверять ✅ Given/When/Then для ключевых FR

Best Practices

  • Формулируйте FR через актор, действие и результат.
  • Разделяйте успешный, альтернативный и ошибочный пути.
  • Пишите критерии приёмки сразу вместе с FR.
  • Дробите сложные требования на независимые элементы.
  • Фиксируйте ID, приоритет и связи с тестами.

Заключение

🎯 Функциональные требования описывают поведение системы.
🎯 Сильное FR всегда однозначно и проверяемо.
🎯 Хорошая структура FR ускоряет разработку и уменьшает число дефектов.
Теперь вы можете писать функциональные требования так, чтобы они реально работали в разработке и тестировании.
🎯

Проверьте знания

Закрепите материал — пройдите тест по теме «Функциональные требования: Основы»

Пройти тест →