Яков Сироткин (yakov_sirotkin) wrote,
Яков Сироткин
yakov_sirotkin

Рефакторинг: стратегия и тактика

Вася пришёл с утра на работу и стал чинить баг в сильно вонючем коде. Полдня у него ушло просто на то, чтобы понять, что же именно происходит. После этого появилась гипотетическая возможность ещё в пяти местах добавить проверки вида (o instanceof ...) и перейти к следующему багу, но ещё за полдня Вася отрефакторил код так, что все instanceof просто исчезли. Упростило ли это дальнейшую модификацию кода? Трудно сказать, потому что, как правило, мы не знаем, какие требования появятся в будущем: вдруг нам нужно будет маниакально экономить память и старый подход окажется более эффективным? А если в этом месте вообще не понадобится никогда ничего менять? Стал ли код более понятным от рефакторинга? Для Васи — однозначно нет, потому что в старом коде он тоже успел разобраться. Конечно, когда вместо Васи придёт Петя, то ему будет много проще разобраться в новом коде, но, к сожалению, часто работодатели предпочитают выжать по-быстрому максимум функциональности из Васи, а о том, что будет, когда он, гад такой, уйдёт — не задумываются. Опять же, может быть и не надо будет в этом месте трогать.

Итак, цели рефакторинга в классическом определении (повышение понятности и упрощение модификации) на практике мало убедительны для начальства, особенно если ему хочется чего-то срочного. Более того, эти цели действительно плохо измеримы. Честнее признать, что каждый выполняемый рефакторинг — это локальная задача по устранению источника неприятного запаха.

Рассмотрим теперь проект в целом: пусть в нём есть 100 серьёзных независимых багов. Тогда вам нужно определить для них приоритеты и начать исправлять их, попутно делая рефакторинг. При работе с изначальными багами вы всё время будете сталкиваться с новым вонючим кодом. Но начиная со 101-го код уже будет немного приведённым в порядок, сами баги станут не такими тяжёлыми и работать будет значительно легче. Таким образом, на продолжительном начальном этапе рефакторинг не облегчает жизнь разработчику, но потом происходит качественный скачок.
Tags: refactoring
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 23 comments