# Шаблон плану рефакторингу

Використовуйте цей шаблон для документування та відстеження вашого рефакторингу.

---

## Інформація про проєкт

| Поле | Значення |
|------|----------|
| **Проєкт/Модуль** | [Назва проєкту] |
| **Цільові файли** | [Список файлів для рефакторингу] |
| **Дата створення** | [Дата] |
| **Автор** | [Імʼя] |
| **Статус** | Чернетка / На перегляді / Затверджено / В роботі / Завершено |

---

## Загальний опис

### Цілі
- [ ] [Основна ціль: напр., Покращити читабельність обробки платежів]
- [ ] [Другорядна ціль: напр., Зменшити дублювання коду]
- [ ] [Третинна ціль: напр., Покращити тестовність]

### Обмеження
- [ ] [Обмеження 1: напр., Не можна змінювати публічний API]
- [ ] [Обмеження 2: напр., Зберегти зворотну сумісність]
- [ ] [Обмеження 3: напр., Без змін схеми БД]

### Рівень ризику
- [ ] Низький — незначні зміни, добре протестований код
- [ ] Середній — помірні зміни, деякий ризик
- [ ] Високий — значні зміни, потрібна ретельна увага

---

## Контрольний список перед рефакторингом

### Оцінка покриття тестами

| Метрика | Поточне | Ціль | Статус |
|---------|---------|------|--------|
| Покриття юніт-тестами | __% | ≥80% | |
| Інтеграційні тести | Так/Ні | Так | |
| Усі тести проходять | Так/Ні | Так | |

### Потрібно перед початком
- [ ] Усі тести проходять
- [ ] Код переглянутий та зрозумілий
- [ ] Резервне копіювання/контроль версій налаштовано
- [ ] Затвердження користувача отримано

---

## Виявлені запахи коду

### Резюме

| # | Запах | Розташування | Серйозність | Пріоритет |
|---|-------|-------------|-------------|-----------|
| 1 | [напр., Long Method] | [файл:рядок] | Високий | P1 |
| 2 | [напр., Duplicate Code] | [файл:рядок] | Середній | P2 |
| 3 | [напр., Feature Envy] | [файл:рядок] | Низький | P3 |

### Детальний аналіз

#### Запах #1: [Назва]

**Розташування**: `path/to/file.js:45-120`

**Опис**: [Детальний опис проблеми]

**Вплив**:
- [Вплив 1]
- [Вплив 2]

**Запропоноване рішення**: [Короткий огляд виправлення]

---

## Фази рефакторингу

### Фаза A: Швидкі перемоги (Низький ризик)

**Ціль**: Прості покращення з негайною цінністю

**Орієнтовні зміни**: [X файлів, Y методів]

**Потрібне затвердження користувача**: Так / Ні

| # | Завдання | Файл | Рефакторинг | Статус |
|---|---------|------|-------------|--------|
| A1 | Перейменувати змінну `x` на `userCount` | utils.js:15 | Rename Variable | [ ] |
| A2 | Видалити невикористаний `oldHandler()` | api.js:89 | Remove Dead Code | [ ] |
| A3 | Витягти дубльовану валідацію | form.js:23,67 | Extract Method | [ ] |

**План відкату**: Відкатити коміти A1-A3

---

### Фаза B: Структурні покращення (Середній ризик)

**Ціль**: Покращити організацію та ясність коду

**Орієнтовні зміни**: [X файлів, Y методів]

**Потрібне затвердження користувача**: Так

**Залежності**: Фаза A має бути завершена

| # | Завдання | Файл | Рефакторинг | Статус |
|---|---------|------|-------------|--------|
| B1 | Витягти `calculatePrice()` з довгого методу | order.js:45 | Extract Method | [ ] |
| B2 | Ввести обʼєкт параметрів `OrderDetails` | order.js:12 | Introduce Parameter Object | [ ] |
| B3 | Перемістити `formatAddress()` до класу Address | customer.js:78 | Move Method | [ ] |

**План відкату**: Відкатити до коміту після Фази A

---

### Фаза C: Архітектурні зміни (Вищий ризик)

**Ціль**: Усунути глибші структурні проблеми

**Орієнтовні зміни**: [X файлів, Y методів]

**Потрібне затвердження користувача**: Так

**Залежності**: Фази A та B мають бути завершені

| # | Завдання | Файл | Рефакторинг | Статус |
|---|---------|------|-------------|--------|
| C1 | Замінити switch цін на поліморфізм | pricing.js:30 | Replace Conditional with Polymorphism | [ ] |
| C2 | Витягти клас `NotificationService` | user.js:100 | Extract Class | [ ] |

**План відкату**: Відкатити до коміту після Фази B

---

## Детальні кроки рефакторингу

### Завдання [ID]: [Назва завдання]

**Усунений запах**: [Назва запаху]

**Техніка рефакторингу**: [Назва техніки]

**Рівень ризику**: Низький / Середній / Високий

#### Контекст

**До** (Поточний стан):
```javascript
// Вставте поточний код тут
```

**Після** (Очікуваний стан):
```javascript
// Вставте очікуваний код тут
```

#### Покрокова механіка

1. [ ] **Крок 1**: [Опис]
   - Тест: Запустити тести після цього кроку
   - Очікувано: Усі тести проходять

2. [ ] **Крок 2**: [Опис]
   - Тест: Запустити тести після цього кроку
   - Очікувано: Усі тести проходять

3. [ ] **Крок 3**: [Опис]
   - Тест: Запустити тести після цього кроку
   - Очікувано: Усі тести проходять

#### Верифікація

- [ ] Усі тести проходять
- [ ] Поведінка не змінилася
- [ ] Код компілюється
- [ ] Немає нових попереджень

#### Повідомлення коміту
```
refactor: [Опишіть рефакторинг]
```

---

## Відстеження прогресу

### Статус фаз

| Фаза | Статус | Розпочато | Завершено | Тести проходять |
|------|--------|-----------|-----------|-----------------|
| A | Не розпочато / В роботі / Готово | | | |
| B | Не розпочато / В роботі / Готово | | | |
| C | Не розпочато / В роботі / Готово | | | |

### Виявлені проблеми

| # | Проблема | Рішення | Статус |
|---|---------|---------|--------|
| 1 | [Опис] | [Як вирішено] | Відкрито / Вирішено |

---

## Порівняння метрик

### До рефакторингу

| Метрика | Файл 1 | Файл 2 | Загалом |
|---------|--------|--------|---------|
| Рядків коду | | | |
| Цикломатична складність | | | |
| Індекс супровідності | | | |
| Кількість методів | | | |
| Середня довжина методу | | | |

### Після рефакторингу

| Метрика | Файл 1 | Файл 2 | Загалом | Зміна |
|---------|--------|--------|---------|-------|
| Рядків коду | | | | |
| Цикломатична складність | | | | |
| Індекс супровідності | | | | |
| Кількість методів | | | | |
| Середня довжина методу | | | | |

---

## Контрольний список після рефакторингу

- [ ] Усі тести проходять
- [ ] Немає нових попереджень або помилок
- [ ] Код успішно компілюється
- [ ] Ручна верифікація завершена
- [ ] Документація оновлена (за потреби)
- [ ] Код переглянутий
- [ ] Метрики покращені
- [ ] Підпис користувача отриманий

---

## Отримані уроки

### Що пройшло добре
- [Пункт 1]
- [Пункт 2]

### Що можна покращити
- [Пункт 1]
- [Пункт 2]

### Рекомендації на майбутнє
- [Пункт 1]
- [Пункт 2]

---

## Затвердження

| Роль | Імʼя | Дата | Підпис |
|------|------|------|--------|
| Автор плану | | | |
| Технічний лід | | | |
| Власник продукту | | | |

---

## Додатки

### A. Повʼязана документація
- [Посилання на релевантні документи]

### B. Довідкові матеріали
- [Посилання на каталог запахів коду]
- [Посилання на каталог рефакторингів]

### C. Використані інструменти
- [Тестовий фреймворк]
- [Інструменти лінтингу]
- [Інструменти аналізу складності]
