Кто занимается сбором нефункциональных требований (NFR)?

«Кто занимается сбором нефункциональных требований (NFR)?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сбор нефункциональных требований — кросс-функциональная задача, в которой участвуют несколько технических ролей.

Основные участники и их вклад:

  1. Архитектор / Технический лид

    • Определяет требования к масштабируемости, отказоустойчивости и общей архитектуре.
    • Пример: "Система должна горизонтально масштабироваться под нагрузку в 10k RPS".
  2. DevOps / SRE-инженер

    • Формулирует требования к деплою, мониторингу, логированию и инфраструктуре.
    • Пример: "Время восстановления сервиса (MTTR) должно быть не более 5 минут".
  3. QA-инженер (Performance/Security)

    • Определяет требования к производительности, нагрузочному тестированию и безопасности.
    • Пример: "Время отклика 95-го перцентиля для API должно быть < 200 мс".
  4. Бизнес-аналитик / Менеджер продукта

    • Собирает бизнес-ожидания, которые трансформируются в NFR (например, требования к uptime SLA).

Пример документации и валидации NFR:

// NFR: "Время ответа эндпоинта GET /api/orders не должно превышать 150 мс"
@SpringBootTest
@AutoConfigureMockMvc
public class OrderApiPerformanceTest {

    @Test
    public void getOrder_ResponseTimeUnderThreshold() throws Exception {
        for (int i = 0; i < 1000; i++) {
            long startTime = System.currentTimeMillis();
            mockMvc.perform(get("/api/orders/1"));
            long responseTime = System.currentTimeMillis() - startTime;

            assertThat(responseTime)
                .as("Response time for request #%d", i)
                .isLessThan(150); // Проверка против NFR
        }
    }
}

NFR должны быть измеримы, тестируемы и зафиксированы в документации (Confluence, ADR) и трекере задач (Jira).