2012-01-02 3 views
2

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

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

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

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

весь класс выглядит так, что мне хочется просто переписать его

include Long::AndUglyModule 

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

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

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

+0

все это относительное – clyfe

+0

Это полностью зависит. Тот, который вы показываете, представляет собой тривиальный тест/спецификацию, но он также не имеет отношения к функциональности (за исключением, возможно, удаления возврата). Лучше сосредоточиться на вещах, которые действительно имеют значение, по крайней мере, вначале. –

ответ

2

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

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

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

Существует еще многое, что можно сказать, но это то, что сразу же относится к «мелкому рефакторингу».

Вывод:

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

+0

Как вы справляетесь с отсутствием тестов? – Fran

+0

Всегда недостает документации. Случай использования в прецеденте обрабатывается и документируется. Например, при запросе на изменение экран задокументирован, код просматривается и документируется, и выполняется несколько тестов. Иногда более важным или выполнимым, чем тест, является написание кода для создания отчета с подробностями и обнаружением ошибок («Я понял, как эти данные собраны»). –