← [Раздел](README.md) · [Главная](../README.md)

# Lab 02 — Чеклист NFR

## Цель

Составить **нефункциональные требования (NFR)** для ShopLite: доступность, производительность, безопасность, масштабирование — в **измеримом** виде (SLI/SLO), привязать к контейнерам из Lab 01.

## Предварительно

- [Lab 01 — C4](lab-01-c4-diagram.md)
- [Метрики и SLO](../08-observability/metriki-i-slo.md)

## Время

~75 минут

---

## Шаг 1 — Шаблон NFR

Создайте `docs/nfr/template.md`:

```markdown
| ID | Категория | Требование | Метрика (SLI) | Цель (SLO) | Контейнер | Проверка |
|----|-----------|------------|---------------|------------|-----------|----------|
| NFR-??? | | | | | | |
```

Категории: **Performance**, **Availability**, **Security**, **Scalability**, **Maintainability**, **Compliance**.

---

## Шаг 2 — Performance (минимум 3 NFR)

Примеры для адаптации:

| ID | Требование | SLI | SLO |
|----|------------|-----|-----|
| NFR-P01 | Быстрый каталог | p95 GET /products | < 300 ms |
| NFR-P02 | Оформление заказа | p95 POST /orders | < 800 ms |
| NFR-P03 | Поиск | p99 GET /search | < 1 s |

Колонка **Проверка**: k6 smoke, nightly load (ссылка на раздел 09).

---

## Шаг 3 — Availability (минимум 2 NFR)

| ID | Требование | SLO |
|----|------------|-----|
| NFR-A01 | Доступность витрины | 99.9% / 30 дней |
| NFR-A02 | RPO заказов | ≤ 5 мин |

Укажите **error budget** в процентах для NFR-A01.

---

## Шаг 4 — Security (минимум 4 NFR)

| ID | Требование | Проверка |
|----|------------|----------|
| NFR-S01 | TLS 1.2+ на gateway | SSL scan staging |
| NFR-S02 | Секреты не в Git | gitleaks в CI |
| NFR-S03 | RBAC admin API | Integration test |
| NFR-S04 | PII не в логах | Log schema review |

Пароли в примерах: `PLACEHOLDER`, не реальные.

---

## Шаг 5 — Scalability

| ID | Требование | Цель |
|----|------------|------|
| NFR-SC01 | Пиковый трафик Black Friday | 500 RPS каталог без нарушения NFR-P01 |
| NFR-SC02 | Горизонтальный scale API | HPA 2–20 pod |

Свяжите с [kubernetes-bazovo.md](../10-deploy/kubernetes-bazovo.md).

---

## Шаг 6 — Приоритизация MoSCoW

Файл `docs/nfr/priorities.md`:

```markdown
## Must
- NFR-A01, NFR-P01, NFR-S02

## Should
- NFR-P02, NFR-SC01

## Could
- NFR-P03

## Won't (v1)
- Multi-region active-active
```

---

## Шаг 7 — Traceability matrix

`docs/nfr/traceability.md` — таблица:

```markdown
| User story | NFR IDs |
|------------|---------|
| US-12 Оформить заказ | NFR-P02, NFR-A01, NFR-S04 |
```

Минимум **5 user stories** из головы или фиктивных.

---

## Шаг 8 — Ревью на измеримость

Для каждого NFR спросите:

1. Можно ли **автоматически** проверить?
2. Есть ли **владелец** метрики?
3. Понятен ли порог **без контекста**?

Перепишите размытые формулировки («быстро», «надёжно»).

---

## Шаг 9 — Коммит и журнал

```bash
git add docs/nfr
git commit -m "lab02: NFR checklist and traceability for ShopLite"
```

В `LAB-JOURNAL.md`: какой NFR сложнее всего сделать измеримым?

---

## Самопроверка

1. Чем NFR отличается от функционального требования?
2. Сколько NFR минимум по security в лабе?
3. Что такое traceability matrix?
4. Приведите пример плохой формулировки NFR и исправленную.

---

## Дальше

→ [Lab 03 — Docker Compose](lab-03-docker-compose.md)  
← [Lab 01 — C4](lab-01-c4-diagram.md)
