Шаблон плану рефакторингу
Використовуйте цей шаблон для документування та відстеження вашого рефакторингу.
Інформація про проєкт
| Поле | Значення |
|---|---|
| Проєкт/Модуль | [Назва проєкту] |
| Цільові файли | [Список файлів для рефакторингу] |
| Дата створення | [Дата] |
| Автор | [Імʼя] |
| Статус | Чернетка / На перегляді / Затверджено / В роботі / Завершено |
Загальний опис
Цілі
- [Основна ціль: напр., Покращити читабельність обробки платежів]
- [Другорядна ціль: напр., Зменшити дублювання коду]
- [Третинна ціль: напр., Покращити тестовність]
Обмеження
- [Обмеження 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]: [Назва завдання]
Усунений запах: [Назва запаху]
Техніка рефакторингу: [Назва техніки]
Рівень ризику: Низький / Середній / Високий
Контекст
До (Поточний стан):
// Вставте поточний код тутПісля (Очікуваний стан):
// Вставте очікуваний код тутПокрокова механіка
Крок 1: [Опис]
- Тест: Запустити тести після цього кроку
- Очікувано: Усі тести проходять
Крок 2: [Опис]
- Тест: Запустити тести після цього кроку
- Очікувано: Усі тести проходять
Крок 3: [Опис]
- Тест: Запустити тести після цього кроку
- Очікувано: Усі тести проходять
Верифікація
- Усі тести проходять
- Поведінка не змінилася
- Код компілюється
- Немає нових попереджень
Повідомлення коміту
refactor: [Опишіть рефакторинг]Відстеження прогресу
Статус фаз
| Фаза | Статус | Розпочато | Завершено | Тести проходять |
|---|---|---|---|---|
| A | Не розпочато / В роботі / Готово | |||
| B | Не розпочато / В роботі / Готово | |||
| C | Не розпочато / В роботі / Готово |
Виявлені проблеми
| # | Проблема | Рішення | Статус |
|---|---|---|---|
| 1 | [Опис] | [Як вирішено] | Відкрито / Вирішено |
Порівняння метрик
До рефакторингу
| Метрика | Файл 1 | Файл 2 | Загалом |
|---|---|---|---|
| Рядків коду | |||
| Цикломатична складність | |||
| Індекс супровідності | |||
| Кількість методів | |||
| Середня довжина методу |
Після рефакторингу
| Метрика | Файл 1 | Файл 2 | Загалом | Зміна |
|---|---|---|---|---|
| Рядків коду | ||||
| Цикломатична складність | ||||
| Індекс супровідності | ||||
| Кількість методів | ||||
| Середня довжина методу |
Контрольний список після рефакторингу
- Усі тести проходять
- Немає нових попереджень або помилок
- Код успішно компілюється
- Ручна верифікація завершена
- Документація оновлена (за потреби)
- Код переглянутий
- Метрики покращені
- Підпис користувача отриманий
Отримані уроки
Що пройшло добре
- [Пункт 1]
- [Пункт 2]
Що можна покращити
- [Пункт 1]
- [Пункт 2]
Рекомендації на майбутнє
- [Пункт 1]
- [Пункт 2]
Затвердження
| Роль | Імʼя | Дата | Підпис |
|---|---|---|---|
| Автор плану | |||
| Технічний лід | |||
| Власник продукту |
Додатки
A. Повʼязана документація
- [Посилання на релевантні документи]
B. Довідкові матеріали
- [Посилання на каталог запахів коду]
- [Посилання на каталог рефакторингів]
C. Використані інструменти
- [Тестовий фреймворк]
- [Інструменти лінтингу]
- [Інструменти аналізу складності]

