Безпечний рефакторинг — послідовність малих кроків

Інкрементальний рефакторинг не є масштабним «покращенням всього класу». Кожен крок має одну мету, safety net, обмежену область, точкову перевірку та окремий rollback.

  1. Сформулюйте одну вузьку структурну мету.
  2. Перевірте CLAUDE.md, harness, тести та characterization.
  3. Обмежте запит до конкретного методу або файлу.
  4. Забороніть зміни public API, повідомлень, залежностей і сторонніх файлів.
  5. Виконайте мінімальну зміну.
  6. Запустіть affected test, build або lint.
  7. Прочитайте повний diff.
  8. Створіть окремий коміт після підтвердження.

Приклад вузького запиту

Обмеження для Claude Code
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