Безпечний рефакторинг — послідовність малих кроків
Інкрементальний рефакторинг не є масштабним «покращенням всього класу». Кожен крок має одну мету, safety net, обмежену область, точкову перевірку та окремий rollback.
- Сформулюйте одну вузьку структурну мету.
- Перевірте CLAUDE.md, harness, тести та characterization.
- Обмежте запит до конкретного методу або файлу.
- Забороніть зміни public API, повідомлень, залежностей і сторонніх файлів.
- Виконайте мінімальну зміну.
- Запустіть affected test, build або lint.
- Прочитайте повний diff.
- Створіть окремий коміт після підтвердження.
Приклад вузького запиту
Goal: extract validation from finalizeOrder
Allowed: one service file and its focused tests
Must preserve: public API, messages, order of business checks
Forbidden: dependency updates, formatting sweep, unrelated cleanup
Check: focused tests plus local harness
Stop: if another module or contract must change Diff важливіший за відчуття безпеки
Reviewer-agent може класифікувати результат як збереження поведінки, зміну поведінки або недостатність даних. Це додаткова перевірка, а не заміна людському огляду.
- перевірте межі файлів і модуля;
- знайдіть зайві зміни та перейменування;
- перевірте public API і повідомлення;
- зіставте кожен рядок із метою кроку;
- не приймайте незрозумілий diff лише тому, що тести зелені.
Коли зупинитися та відкотитися
| Сигнал | Дія |
|---|---|
| Змінено файл поза модулем | Зупинити й звузити scope |
| Diff значно більший за мету | Прибрати зайве або повернутися до плану |
| Тести падають після повторної спроби | Діагностувати, не нашаровувати patch |
| Незрозуміле призначення рядків | Повернутися до останнього checkpoint |
| Знайдено bugfix або зміну контракту | Оформити окрему задачу |
Пауза після кожного коміту
Рефакторинг завершується паузою після окремого коміту. Наступна трансформація починається з нового плану й нового циклу, а не як продовження нескінченного cleanup.
Канонічне джерело уроку · JavaRush
Відкрити матеріал JavaRush