2013-05-24 2 views
0

Несмотря на то, что это не настоящий вопрос с кодом, я все еще спрашиваю его здесь. Потому что я задаюсь вопросом: как вы, ребята, работаете в кодовой базе SOAD, что каждое небольшое изменение ломает несколько функций и классов? То, что каждое небольшое изменение, которое вы делаете или пытаетесь реорганизовать, заставляет ВСЕ взорваться в вашем лице.Работа с непригодной кодовой базой

Подумайте: круговая зависимость, двойная включает (C++), простые целые числа вместо перечислений для коммутаторов, внутреннюю библиотеку, зависящую от приложения, которое изначально было создано на эту библиотеку, потоки призраков, начиная с библиотеки, в основном, но в классе библиотеки, выполняющем черную магию в фоновом режиме, синглтоны в библиотеке, называемые ALL OVER, место в приложении, длинные и непонятные операторы switch, несогласованное именование переменных, очень плохая орфография в именах переменных, и список продолжается и дальше.

Каждый раз, когда я хочу добавить функцию, я вижу, что фундамент для этой функции является неполным, неустойчивым, неподъемным и не подходит для расширения. Каждый раз, когда я смотрю на код, я застрял почти мгновенно, и кажется, что добавление функции невозможно без рефакторинга ВСЕ.

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

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

Не похоже, что полный рефактор - это вариант, люди на 100% неохотно делают это, и это я против 29 других. Каждый раз, когда я начинаю смотреть на код, я чувствую желание ударить себя по лицу в стену, съесть свое лицо, удалить проект и никогда не смотреть на него снова из кипящей ненависти, разочарования и отталкивания высказываний от других высказываний «но он работает сейчас, я не вижу проблемы ». Как вы относитесь к таким вещам? Я мог бы действительно использовать некоторые советы для моего здравомыслия.

ответ

1

Рефакторинг - это хорошо, но для этого есть основополагающее предположение - есть много хороших тестов.

Имеет ли ваша база кода достаточное количество единичных тестов, которые четко описывают обязанности каждого метода? Если нет, вы должны начать писать их. Не начните с большого взрыва.

Определите функциональную часть пилота - и напишите для них подробные единичные испытания. Руководством, чтобы оценить, достаточно ли написано тестов, является охват кода (хотя это всего лишь руководство). Теперь используйте рефакторинг на функциональной части, имея в виду принципы SOLID.

+0

Спасибо, что ознакомили меня с принципом SOLID, я никогда не слышал об этом раньше. Это похоже на контрольный список всех вещей, которые поступили неправильно. Большинство классов выполняют множественные и неоднозначные вещи, все открыто для модификации, но НЕ для расширения, не так много подтипов происходит, есть огромные интерфейсы, которые неясны в их работе, и вместо инъекции зависимости они использовали Singletons. Что вы имеете в виду с большим ударом? –

+0

Начиная с большого взрыва означает рефакторинг всех модулей. Скорее, вы должны атаковать базу кода одним функциональным модулем за раз (например, пространство имен в C++/C# или пакете на Java). В случае, если что-то пойдет не так, проще сузить и сдержать проблему. – aquaraga

+0

Жаль, что в кодовой базе нет пространств имен. Это действительно катастрофа. Начиная с Big Bang - это то, что я сделал пару дней назад, и я только что закончил. Мне долго приходилось хорошо, но я думаю, что снова схватил кодовую базу. Спасибо за Ваш ответ. Я отмечу это как принято. –