Рефакторинг старого кода - PullRequest
2 голосов
/ 02 января 2012

Я работаю над довольно большим традиционным Rails-приложением.Большая часть кода просто ужасна, и я пытаюсь сделать его лучше, когда прохожу его.

Проблема в том, нет тестов и почти всенеправильно .До сих пор я просмотрел код и сделал много написанных от руки заметок о том, что необходимо реорганизовать, чтобы потом я смог сделать это, когда смогу добавлять тесты.

Но есть вещи, которыепросто так просто и кричать для быстрого рефакторинга.Например:

def isValid(valid)
    name = Long::AndUglyModule::UglyClass.getvalid(valid)
    return name
end

весь класс выглядит следующим образом, поэтому я хочу просто переписать его на

include Long::AndUglyModule

def is_valid(valid)
  UglyClass.getvalid(valid)
end

проблема в том, что я боюсь допустить некоторые тонкие ошибки,С другой стороны, работа с кодом, который выглядит следующим образом, вызывает у меня множество головных болей.

Лучше просто сделать простой рефакторинг мгновенно или оставить код как есть до тех пор, пока мне действительно не придется работатьс ним или поменять напрямую?

1 Ответ

2 голосов
/ 02 января 2012

У меня большой опыт работы с огромным унаследованным кодом и полным рефакторингом.

  • Разрешить гибрид нового и старого.
  • Четко разделите обе базы кода.
  • Записывать исключения.
  • Делать старый код более красивым может быть 10000% пустой тратой времени.
  • Рефакторинг первым, где это имеет смысл: удалить HTML-фреймы, декларативную навигацию.Небольшие функции для громоздких конструкций.
  • Создайте приложение для обработки исходного кода, переведя антипаттерн в код для улучшения кода.Также необходимо найти и заменить регулярное выражение из нескольких источников, \ 1 для распознавания повторения.
  • Ввести методы, в которых старый код был слишком длинным.
  • Сокращенный код: скопированные и отредактированные фрагменты в класс бизнес-логикивсе вместе.
  • Исходный процесс.

Прежде всего: начните со статистики, КБ, количества строк, обработанного процента, временной шкалы.С помощью электронной таблицы Google можно сообщить о прогрессе и рассчитать дату окончания.Этот устаревший код занимает много времени, но он недооценен, поэтому убедитесь, что у вас есть хорошая документация.

Можно сказать гораздо больше, но это то, что непосредственно относится к «небольшому рефакторингу».

Заключение:

Никто действительно не может и не должен ничего делать против врожденного побуждения программиста реорганизовывать мелкие фрагменты, но рефакторинг должен быть либо преобразованием по нескольким источникам и вхождениям, либо в одноразовом использовании.случай исправлен или изменен.

...