Написання специфікації вимог до веб-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Написання специфікації вимог до веб-застосунку
Середня
~2-3 робочих дні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Написання специфікації вимог до веб-застосунку

Специфікація вимог (Software Requirements Specification, SRS) відрізняється від технічного завдання (ТЗ) за аудиторією та глибиною: ТЗ — контракт із замовником на рівні «що робить система», SRS — інструмент для розробників та тестувальників на рівні «як саме система це робить». У реальних проектах документи часто об'єднуються, але важливо розуміти різницю в деталізації.

Класифікація вимог

Вимоги поділяються на три категорії, і важливо їх не плутати:

Функціональні (FR) — що система може робити. «Користувач може скинути пароль через email».

Нефункціональні (NFR) — характеристики поведінки системи. «Сторінка входу повинна відповідати за 200ms при 500 одночасних користувачах».

Обмеження — зовнішні умови, які неможливо змінити. «Інтеграція тільки з російськими платіжними шлюзами», «сумісність з GDPR», «розгортання в закритому контурі без доступу до інтернету».

Формат опису функціональних вимог

Найкращий формат для розробників — User Story + Acceptance Criteria + технічні деталі:

## FR-047: Двофакторна аутентифікація (TOTP)

**Як** зареєстрований користувач,
**Я хочу** включити 2FA через додаток-аутентифікатор,
**Щоб** захистити обліковий запис від несанкціонованого доступу.

### Acceptance Criteria

**Включення 2FA:**
- AC-047-1: При переході в настройки безпеки відображається розділ «Двофакторна аутентифікація»
- AC-047-2: При натисканні «Включити» система генерує TOTP-секрет (RFC 6238, SHA-1, 6 цифр, 30 сек.)
- AC-047-3: QR-код для Google Authenticator / Authy відображається правильно
- AC-047-4: Після введення першого правильного коду 2FA активується
- AC-047-5: Система видає 10 одноразових резервних кодів (8 символів, a-z0-9)

**Вхід з 2FA:**
- AC-047-6: Після введення правильного пароля з'являється форма введення коду
- AC-047-7: Код приймається з допуском ±1 часового вікна (90 сек. назад або вперед)
- AC-047-8: Неправильний код — помилка, лічильник спроб (+1), ліміт 5 спроб
- AC-047-9: Резервний код приймається як 2FA, після використання інвалідується

**Відключення:**
- AC-047-10: Для відключення 2FA потрібен поточний пароль + дійсний 2FA-код

### Технічні деталі

**API:**

POST /api/auth/2fa/setup → { secret, qr_url, backup_codes } POST /api/auth/2fa/verify Body: { code } → { enabled: true } POST /api/auth/2fa/disable Body: { password, code } POST /api/auth/2fa/challenge Body: { code | backup_code } → { token }


**Зберігання:**
- `totp_secret` шифрується AES-256-GCM перед збереженням у БД
- Ключ шифрування — з KMS, не зберігається в коді
- `backup_codes` — bcrypt-хеші, не plaintext

**Міграція БД:**
```sql
ALTER TABLE users
  ADD COLUMN totp_secret_enc  TEXT,
  ADD COLUMN totp_enabled     BOOLEAN NOT NULL DEFAULT FALSE,
  ADD COLUMN totp_verified_at TIMESTAMPTZ;

CREATE TABLE totp_backup_codes (
  id         UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id    UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  code_hash  TEXT NOT NULL,
  used_at    TIMESTAMPTZ,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

Пов'язані вимоги: FR-001 (Реєстрація), FR-002 (Вхід), NFR-SEC-003

Залежності: бібліотека otplib або аналог, що підтримує RFC 6238


### Нефункціональні вимоги: як зробити їх вимірюваними

Невимірювані NFR марні: «система повинна бути швидкою» — неможливо перевірити. Всі NFR мають мати конкретну метрику, умову вимірювання та джерело даних.

```markdown
## NFR-PERF-001: Продуктивність API

| Метрика | Цільове значення | Умова вимірювання |
|---------|-----------------|-------------------|
| P50 latency | < 50ms | Навантаження 100 rps, 4 ядра CPU |
| P95 latency | < 200ms | Те ж |
| P99 latency | < 500ms | Те ж |
| Error rate | < 0.1% | Навантаження 100 rps, 10 хвилин |
| Throughput | ≥ 200 rps | До деградації P95 > 500ms |

**Інструмент перевірки:** k6 (сценарій у `tests/load/api-baseline.js`)
**Частота перевірки:** Перед кожним релізом на staging

## NFR-AVAIL-001: Доступність

- Uptime ≥ 99.5% на місяць (≤ 3.65 години простоїв)
- Планові простої: до 30 хвилин, у 02:00–04:00 UTC, з уведомленням за 48 годин
- RTO (Recovery Time Objective): ≤ 30 хвилин
- RPO (Recovery Point Objective): ≤ 1 година

**Вимірювання:** UptimeRobot (HTTP-перевірка щохвилини, 3 регіони)

## NFR-SEC-001: Управління сесіями

- JWT access token TTL: 15 хвилин
- Refresh token TTL: 30 днів,ротація при кожному використанні
- Максимум активних сесій на користувача: 5
- При компрометації: інвалідація всіх токенів користувача за O(1)

**Перевірка:** ручне тестування за чеклістом OWASP Session Management

Управління залежностями між вимогами

У реальних проектах вимоги залежать одна від одної. Граф залежностей допомагає зрозуміти порядок розробки:

FR-001 (Реєстрація)
  └→ FR-002 (Вхід)
       └→ FR-047 (2FA)
            └→ FR-048 (Резервні коди 2FA)
       └→ FR-003 (Відновлення пароля)
  └→ FR-010 (Email-верифікація)

FR-020 (Каталог товарів)
  └→ FR-021 (Кошик)
       └→ FR-022 (Оформлення замовлення)
            └→ INT-001 (Оплата ЮKassa)
            └→ INT-002 (Доставка SDEK)

Трасування вимог

SRS цінна, коли за будь-яким шматком коду можна сказати: «це реалізує FR-047». Це досягається через:

  1. Назив тестів за ідентифікаторами вимог:
describe('FR-047: TOTP 2FA', () => {
  it('AC-047-7: приймає код з допуском ±1 вікна', async () => {
    // ...
  });

  it('AC-047-8: блокує після 5 неправильних спроб', async () => {
    // ...
  });
});
  1. Коментарі до ключових рішень у коді:
// NFR-SEC-001: ротація refresh token при кожному використанні
async function refreshAccessToken(refreshToken: string) {
  const session = await validateAndInvalidateRefreshToken(refreshToken);
  const newRefreshToken = await createRefreshToken(session.userId);
  const accessToken = createAccessToken(session.userId);
  return { accessToken, refreshToken: newRefreshToken };
}

Ревю специфікації

Специфікація повинна пройти ревю у трьох груп:

  • Замовник / Product Owner: коректні ли бізнес-правила?
  • Розробники: реалізуємо ли це технічно, немає ли суперечностей?
  • QA: можна ли це протестувати, достатньо ли деталей?

Типові проблеми, які виявляє ревю:

  • Неоднозначність: «користувач може завантажити кілька файлів» — скільки максимум? Який розмір?
  • Суперечності: в одному місці «сортування за замовчуванням — за датою», в іншому — «за популярністю»
  • Пропущені сценарії: описаний happy path, не описані помилки

Терміни

SRS для застосунку з 40–60 функціональними вимогами — три-чотири тижні. Включає: аналіз бізнес-процесів, проведення структурованих інтерв'ю, написання, два раунди ревю, кінцеве затвердження. Документ не статичний — при змінах вимог версія оновлюється через PR.