Ответ
Нефункциональные требования (NFR) определяют как система должна работать, а не что она делает. Их тестирование требует специализированных методов и метрик.
Основные типы NFR и подходы к их тестированию:
| Тип требования | Цель тестирования | Методы и инструменты | Ключевые метрики |
|---|---|---|---|
| Производительность | Оценить скорость, стабильность и масштабируемость. | Нагрузочное (Load), стресс- (Stress), объемное (Volume) тестирование. Инструменты: JMeter, k6, Gatling. |
Время отклика (Response Time), пропускная способность (RPS/TPS), утилизация ресурсов (CPU, RAM). |
| Надежность | Проверить отказоустойчивость и способность к восстановлению. | Тестирование восстановления после сбоев, Chaos Engineering. Инструменты: Chaos Monkey, Gremlin. |
Время наработки на отказ (MTTF), время восстановления (MTTR), доступность (Availability, e.g., 99.9%). |
| Безопасность | Выявить уязвимости и слабые места. | Статический/динамический анализ кода (SAST/DAST), пентесты. Инструменты: OWASP ZAP, Burp Suite, SonarQube. |
Количество/серьезность найденных уязвимостей (по CVSS), покрытие OWASP Top-10. |
| Совместимость | Убедиться в работе в разных окружениях. | Кроссбраузерное, кроссплатформенное тестирование. Инструменты: Selenium, Playwright, BrowserStack. |
% поддерживаемых комбинаций браузер/ОС/устройство, где функционал работает корректно. |
| Удобство использования | Оценить удобство и понятность интерфейса. | Юзабилити-сессии, A/B-тестирование, экспертные оценки. Инструменты: Hotjar, UserTesting. |
Время выполнения задачи, показатель ошибок пользователя, результаты опросов (NPS, SUS). |
Пример базовой проверки производительности на Python:
import requests
import time
def test_api_response_time():
"""Проверяет, что время отклика API не превышает 500 мс."""
url = "https://api.example.com/v1/data"
headers = {"Authorization": "Bearer token123"}
start_time = time.perf_counter()
response = requests.get(url, headers=headers)
elapsed_time = (time.perf_counter() - start_time) * 1000 # в мс
assert response.status_code == 200, f"HTTP {response.status_code}"
assert elapsed_time < 500, f"Время отклика {elapsed_time:.2f} мс превышает лимит"
print(f"Успех: {elapsed_time:.2f} мс")
Важно: Тестирование NFR должно быть измеримым (на основе метрик) и повторяемым (интегрировано в CI/CD).