Я унаследовал существующую кодовую базу для продукта, который предосудительно небрежен. Фундаментальный дизайн крайне неадекватен, что, к сожалению, я мало что могу сделать без полного рефакторинга (ВЫСОКАЯ связь, НИЗКОЕ сцепление, безудержное дублирование кода, отсутствие технической проектной документации, интеграционные тесты вместо модульных тестов). Продукт имеет историю, высокую подверженность критически настроенным клиентам «дойной коровы» с минимальной терпимостью к риску, технический долг, который заставит греков покраснеть, ОЧЕНЬ большую кодовую базу и сложность, а также утомленный пораженческий подход к ошибкам со стороны команды до мне.
Старая команда перепрыгнула корабль в другое подразделение, чтобы у них была возможность разрушить другой проект. Я очень редко сталкиваюсь с неудачей проекта технической некомпетентности, а не с ошибкой управления проектом, но это действительно один из таких случаев.
На данный момент я один, но у меня много времени, свободы решения и будущего руководства, а также возможность создать команду с нуля, чтобы помочь мне.
Мой вопрос состоит в том, чтобы собрать мнение о рефакторинге с низким уровнем воздействия на подобный проект, когда у вас есть немного свободного времени на этапе сбора функциональных требований. Есть тысячи предупреждений компилятора, почти все они неиспользуемые импорты, непрочитанные локальные переменные, отсутствие проверки типов и небезопасных приведений. Форматирование кода настолько нечитаемо и небрежно, что похоже на то, что кодер страдал болезнью Паркинсона и не мог контролировать количество нажатий клавиши пробела в любой строке. Другие базы данных и файловые ресурсы обычно открываются и никогда не закрываются безопасно. Бессмысленные аргументы метода, дублирующие методы, которые делают то же самое, и т.д ..
В то время как я жду требований для следующей функции, я убираю вещи с низким уровнем риска и размышляю, тратит ли я свое время или поступаю правильно. Что если новая функция означает удаление кода, на который я потратил время раньше? Я собираюсь начать Agile-подход и понимаю, что это приемлемо и нормально для постоянного рефакторинга во время Agile-разработки.
Можете ли вы вспомнить какие-либо положительные или отрицательные последствия того, что я сделаю это, что вы хотели бы добавить?