Как я могу сделать рефакторинг приоритетом для моей команды?


57

Кодовая база, с которой я работаю ежедневно, не имеет автоматических тестов, непоследовательных имен и множества комментариев, таких как «Почему это здесь?», «Не уверен, нужно ли это» или «Этот метод не назван правильно», и код изобилует «Журналы изменений», несмотря на то, что мы используем систему контроля версий. Достаточно сказать, что наша кодовая база может использовать рефакторинг.

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

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


Институт обзоров кода и проблема сама позаботится (почти)
dukeofgaming

4
Не рассматривайте рефакторинг как отдельную задачу - это не так.
Vetle

2
Изменения в коде заставляют меня хотеть плакать ... Прошу прощения за вашу потерю.
Марк Канлас

@Mark Canlas Раньше я думал так же, пока не наткнулся на 20-летнюю базу кода с буквально сотнями изменений в контроле исходного кода. Удачи в поиске того, почему (или даже если) конкретный блок кода был изменен с использованием только истории управления исходным кодом
Майкл Дж.

@ Майкл Что мешало? В целом, несколько операций по обвинению / аннотации должны дать вам право на соответствующий коммит, независимо от того, сколько изменений было внесено. («Сотни» изменений за 20 лет крошечные, кстати).
Марнен Лайбоу-Козер

Ответы:


51

«Лучше просить прощения, чем разрешения» - это правда.

Зачем беспокоиться об этом? Просто рефакторинг самых ужасных частей.

Вы уже знаете, какие ошибки самые дорогие , верно?

Если вы этого не сделаете, то шаг 1 состоит в том, чтобы точно и недвусмысленно определить наиболее дорогой, сложный, подверженный ошибкам код ошибки.

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

Затем исправьте что-то в этом списке проблем с высокой стоимостью .

Когда вам нужно попросить прощения, вы можете указать на снижение затрат.


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

Это значит выбрать одну вещь. Напишите юнит-тест. Исправить это одно. Вы сделали два улучшения. (1) написал тест и (2) исправил код.

Итерация.


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

15
«Зачем беспокоиться об этом? Просто рефакторинг самых ужасных частей». Это будет очень опасный совет без юнит-тестов. В сочетании с вашими другими советами просить прощения, а не разрешения, OP может просить прощения в значительной степени. Просто дождитесь открытия заявки из-за непреднамеренного изменения поведения, которое можно отследить до несанкционированного рефакторинга. Есть большая вероятность, что в этом виновата практика рефакторинга, а не отсутствие модульных тестов, и тогда это послужит вечным «доказательством» в этом офисе, что «рефакторинг - это зло».
PeterAllenWebb

2
Кроме того, я редко когда-либо видел компанию, которая использовала модульные тесты, так как же вы вообще начали проводить рефакторинг в такой ситуации? Кажется, это саморазрушительная нисходящая спираль: вы не можете рефакторинг, потому что у вас нет тестов, вы не можете писать тесты, потому что кодовая база слишком велика и / или нет времени вне написания новых функций, чтобы вернуться и написать тестирует код, который был написан годами, поэтому вы ничего не можете реорганизовать, поэтому код просто раздувается и вращается, пока не рухнет.
Уэйн Молина

8
В большинстве случаев ответом кажется: «Уходи и найди компетентных людей, которые понимают, как быть настоящим профессионалом, а не взломать». :)
Уэйн Молина

4
В какой-то момент ужасный или трудно поддерживаемый код сам по себе является ошибкой. Создавайте резервные позиции и назначайте им приоритет. Я работаю в гибкой среде, в которой мы время от времени проводим короткие стабилизационные спринты, когда клиент слишком просторен, чтобы дать нам подробности или отсутствует на тренировке. Мы не останавливаемся, потому что они недоступны. И когда начинается следующий спринт, у нас было время, чтобы ознакомиться с вкладами друг друга и быть более точными в наших оценках усилий. Вы просто должны начать с чего-то, даже маленького, и продолжать. Не усугубляйте это, продолжая стиль, пока вы на нем.
Эрик Норен

32

Следуйте правилу бойскаутов: оставьте лагерь (код) немного лучше, чем вы его нашли. Я ни разу не слышал, чтобы кто-то был написан за небольшие улучшения кода, «пока они были там».


7
Сильно зависит от того, насколько вы близки к сроку. Изменение библиотеки может сделать недействительным все предыдущее тестирование.

3
Хороший вопрос, @ Thorbjørn. Нечто подобное я бы не назвал «небольшим» улучшением, потому что оно имеет большой спектр влияния.
Карл Билефельдт

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

@ Thorbjørn Я бы сказал, что у вас должно быть хорошее представление о том, где используется эта функция. Если данный исходный файл компилируется для чего-то внутреннего, т. Е. У вас есть полный доступ ко всем его вызывающим, я не вижу проблемы с его исправлением и обновлением мест, где он вызывается по мере необходимости. Если исходный файл компилируется как часть библиотеки, где API не может быть изменен, вы можете по крайней мере исправить детали реализации.
Макс

Я видел комментарии типа «это нужно реорганизовать», когда проскальзывал код, который повторно используется в других местах, но там, где не очень понятно, какие это. Обычно разработчик не хочет тратить время на анализ последствий, и они добавляют комментарий, чтобы смягчить свою вину.
Джори Себрехтс

23

Я возьму, возможно, чрезмерно циничную точку зрения.

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

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

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


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

8
Это почти всегда лучший совет ИМО. Если компания не понимает, почему наличие качественного кода - это то, что следует поощрять, а не считать пустой тратой времени, это потерянное начинание - они недостаточно умны, чтобы понимать настоящее программирование.
Уэйн Молина

17

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

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

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

  1. Только когда-нибудь добавить здоровый код.
  2. Всегда исправляйте не очень здоровый код, как только вы его увидите.
  3. Если по причинам крайнего срока вы не можете выполнить 1 или 2, всегда имейте список проблем с «исправлением сразу после крайнего срока» и не принимайте никаких оправданий для того, чтобы не работать через этот список после крайнего срока.


Следующее замечание разработчиков неизменно гласит: «Но как нам получить время для этого - у нас сейчас нет времени?». Единственный правильный ответ (опять же ИМХО): «У вас нет времени НЕ делать этого». Если вы не будете поддерживать исправность кодовой базы, вы обнаружите, что время выполнения заказа будет увеличиваться и увеличиваться, графики становятся все более непредсказуемыми, ошибки становятся более неприятными, а ценность снижается.

Самое большое изменение отношения, которое вы должны произвести в команде разработчиков, заключается в том, что «качество» - это не то, что вы делаете в конкретный момент времени («когда у нас есть время для рефакторинга») - это то, что вы должны делать ВСЕ время.

Наконец, история предупреждения. Если нажать, я буду отрицать, что это когда-либо случалось. В компании, в которой я работал, существовало давнее приложение с большой устаревшей кодовой базой, созданное более 10 лет назад. Многие разработчики, в том числе и я, полагали, что эта устаревшая кодовая база была плохой или, по крайней мере, устаревшей, а не самой современной. Поэтому мы успешно лоббировали крупный проект по рефакторингу и начали проект по переписыванию, после чего мы верили, что все будет лучше.
Мы долго и упорно реализует почти все в новом и современном стиле, с использованием новых библиотек, новые возможности языка. Ближе к концу мы приложили огромные усилия, чтобы собрать все воедино, чтобы сделать возможным выпуск новой версии долгосрочного приложения с новой и улучшенной базой кода.
Как и ожидалось, в новом выпуске были некоторые проблемы с прорезыванием зубов из-за новых библиотек, с которыми мы еще не были знакомы, и некоторых взаимодействий в нашем коде, которые мы не предвидели. Тем не менее, нам, наконец, удалось получить релиз в соответствии с тем же стандартом, что и наши предыдущие выпуски. Мы вздохнули с облегчением от нашего «успеха». Затем подгруппа разработчиков вернулась к руководству с просьбой о новом проекте по рефакторингу, потому что наш новый код оказался не совсем серебряной пулей, как они ожидали, и они увидели некоторые возможности полностью переписать некоторые вещи ...

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


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

Эта статья очень удачная
Гарретт Холл

Смотрите также то, что вы никогда не должны делать от Джоэла Спольски.
Ян Худек

Я за совет: «У вас нет времени, чтобы НЕ рефакторировать». Но утверждать, что это проблема разработчика? Ты шутишь, что ли? Я не могу сказать вам, сколько раз руководство (не программисты) буквально вызывало меня в офис, чтобы сказать мне, чтобы я прекратил рефакторинг, оставил код в самой последней версии и быстро сделал что-то еще. У нас есть несколько разработчиков, постоянно утверждающих, что мы должны сделать рефакторинг, но руководство буквально не ценит это. Это часто встречается, когда менеджеры являются техническими работниками в какой-либо другой области, помимо программного обеспечения.
Ely

Ну, по моему опыту, это всегда проблема управления. Управление - это управление людьми, чтобы они правильно выполняли свою работу. Если программисты не выполняют свою работу должным образом (а не написание качественного кода означает именно это), тогда у нас адская проблема в управлении!
Кайзерлуди

12

Кто-то однажды сказал мне, что когда я иду на собеседование, я не должен забывать, что я также беру интервью у компании. Это место, где я хочу работать? Они делают обзоры кода? Есть ли у них автоматизированные интеграционные тесты? Модульные тесты? Что они думают о парном программировании? Лично я найду другую работу, и на этот раз тоже не забуду задать несколько вопросов.


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

5
@Wayne M: В этом случае немедленно начинайте искать новую работу. Если они лгали вам в интервью, как они будут относиться к вам позже?
Дэвид Торнли

1
Договорились, но, к сожалению, часто легче сказать, чем сделать.
Уэйн Молина

@WayneM Точно. Я испытал то же самое. Я спросил о творческих возможностях для проведения математических исследований в работе, и компания в основном соврала об этом, чтобы заставить меня принять, а затем увлекла меня проектами, которые, как мне казалось, я отсеял, задавая вопросы во время интервью. Рекомендация «искать новую работу» не имеет смысла - конечно, я сделаю это, но она не представляет никакого «решения» этой проблемы.
Ely

6

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

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

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


5

Если бы мне пришлось ввести одну практику, чтобы сделать вещи лучше в таком контексте, это были бы обзоры кода. Кодовые отзывы

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

Вам не нужно систематически проверять код, только когда вы сначала делаете большие / сложные части кода.

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


2
Это предполагает, что другие знакомы с хорошими практиками развития в первую очередь. Однажды у меня была работа, когда другие члены команды даже не знали, почему мой путь был более эффективным; Мой хорошо написанный код, который следовал SOLID и применяемым шаблонам проектирования, был фактически отвергнут в «обзоре кода», потому что он отличался, и старший разработчик не понимал его по сравнению с остальным стилем команды - просто использовать события code-behind и App_Code / папка.
Уэйн Молина

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

1
Мне когда-то сказали, что мой путь «более модный», но я должен был подать жалобу, что это было труднее понять. Другой способ - FWIW копировал файл из 300 строк, изменял две строки и фиксировал. Обоснование для копирования / вставки в этом случае (и, как обычно, по моему опыту): «таким образом, вы знаете, что ничего не сломали».
Кевин

4

Вот что я делаю в таких ситуациях (за 15 лет моей карьеры разработчика я сталкивался с таким кодом почти каждый день)

  1. Подавать пример - я проверяю код, к которому прикасаюсь. Я безжалостно удаляю старый закомментированный код и большие абзацы комментариев.
  2. Каждый раз меня просят пересмотреть изменение кода, без чего я не одобряю проверку кода.
  3. Люди постепенно видят изменения, когда код становится более компактным, более читабельным и, следовательно, менее глючным. Это требует времени, но постепенно вся команда ценит и принимает практику.

Руководство никогда не выделяет время для повторного факторинга кода (у них никогда не хватает ресурсов!), Поэтому делать это медленно и стабильно - правильный подход.


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

3

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

«Чистое рабочее место - это безопасное и производительное рабочее место», и каждый вклад в беспорядок усугубляет беспорядок экспоненциальным, а не линейным образом.

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


3

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

Программный лидер и команда выделяют время команды

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

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

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

Ранний выбор проекта создает порочный цикл для рефакторинга

Обслуживание программного обеспечения сложно. Вдвойне сложно, если другие члены организации делают выбор за ваш счет. Это неправильно, но это не ново. К нему обратился Барри Бём, один из наших великих авторов программного обеспечения, который выдвигает модель управления, которую он описывает как Теория В.

http://csse.usc.edu/csse/TECHRPTS/1989/usccse89-500/usccse89-500.pdf

Зачастую разработчики программного обеспечения вынуждены производить в соответствии с подходом управления Theory-X, который гласит, что рабочие в основном ленивы и не будут работать, если их не заставят подчиниться. Бём резюмирует и противопоставляет предложенную модель следующим образом:

«Вместо того чтобы характеризовать менеджера как автократа (Теория X), тренера (Теория Y) или фасилитатора (Теория Z), Теория W характеризует основную роль менеджера как посредника между его различными группами интересов и упаковщиком проектных решений. с условиями выигрыша для всех сторон. Помимо этого, менеджер также является целеустремленником, монитором прогресса в достижении целей и активистом в поиске повседневных конфликтных ситуаций между проектами типа «победа-поражение-поражение», противостояние им, и превращая их в беспроигрышные ситуации ".

Быстро и грязно часто просто грязно

Далее Бем указывает на причину, по которой разработчики из команды поддержки так несчастны.

«Создание быстрого и неаккуратного продукта может быть недорогой краткосрочной« победой »для разработчика и заказчика программного обеспечения, но это будет« неудачей »для пользователя и сопровождающего». Обратите внимание, что в модели Бёма клиент скорее является администратором контракта, а не конечным пользователем. В большинстве компаний считают менеджера по продукту суррогатом клиента или, возможно, человеком, который покупает продукт для его списка функций.

Мое решение состояло бы в том, чтобы не выпускать оригинальную команду разработчиков (или, по крайней мере, оригинального лидера), пока код не подвергнется рефакторингу, чтобы, по крайней мере, соответствовать стандартам кодирования.

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

Рефакторинг не подлежит обсуждению

Пожалуйста, не отступайте от своей роли менеджера программного обеспечения. У вас должны быть полномочия и свобода действий, чтобы использовать время вашей команды в процессе и улучшения продукта. В этой роли вам может потребоваться согласовать ваш выбор, чтобы сделать вашу команду более профессиональной. Однако, что касается процесса, не ведите переговоры с маркетингом, потому что, по моему опыту, это проигрышная игра. Договориться с инженерным управлением. Это показывает, что у тебя есть видение. Создание профессиональной команды разработчиков программного обеспечения является продолжением их роли и, скорее всего, будет восприниматься как беспроигрышный вариант.


2

Вы всегда можете просто подождать. В конце концов, команда пропустит достаточное количество сроков и выпустит программное обеспечение с недостаточным количеством ошибок, которое руководство поднимет и скажет, что, по словам Бога, что-то изменилось лучше!

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

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


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

1

Я думаю, что ответ на вопрос, как найти время, зависит от того, почему вы хотите провести рефакторинг кода.

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

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

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


1

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

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

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

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


1

Ваша главная проблема в том, что коды не видны достаточно.

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

Когда программист фиксирует изменение, Дженкинс запускает модульные тесты, запускает на нем инструмент анализа статического кода и генерирует веб-отчет, который все могут видеть, со статусом цвета светофора.

Когда качество кода видимо всем (особенно руководителю группы и боссу), а контроль версий и юнит-тесты необходимы, чтобы вы были спиной ... люди чувствуют побуждение к рефакторингу.


1

Код медленно продвигался по множеству мелких изменений. Это тоже нужно будет исправить.

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

Проведите собрание и определите постоянные стандарты кодирования.

Введите основные правила, которые будут использоваться по мере продвижения:

Всякий раз, когда новый код вводится в класс, должны быть написаны автоматические тесты, чтобы доказать, что класс работает (а не только новый код).

Всякий раз, когда ошибка исправлена, должны быть написаны автоматические тесты, чтобы доказать, что класс работает (а не только исправленный код).

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

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

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


0

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

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

Код дерьма чаще всего исправляется. Без автоматизированных регрессионных тестов стоимость тестирования рефакторированного кода чрезвычайно высока.

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

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


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

3
«Если это не сломано, не чините это» - единственное худшее высказывание во всей нашей области, и его нужно полностью удалить из словоблудия. Это способствует ленивому поведению и поощряет культуру хакерства, а не делает это правильно, и благодаря общению препятствует тому, чтобы это когда-либо было сделано правильно в будущем. Такое отношение - рак.
Уэйн Молина

1
Смотрите мой комментарий выше, вот почему.
Уэйн Молина

2
@Wayne M: я не думаю, что mattnz говорит: «не исправляйте это, никогда», я думаю, что он говорит: «не исправляйте это, если это не хорошо для организации, и вы не можете создать поддержку», что очень разные и вполне разумные, имо.
PeterAllenWebb

3
@ Уэйн М: хорошо сказано! Поговорка «если не сломано, не чините» и слово «рефакторинг» просто не подходят друг другу. Сама суть рефакторинга заключается в том, что разработка программного обеспечения - это просто не черно-белый мир, где «сломано» и «исправлено» - это абсолют.
Carson63000

0

Странно никто не упоминает это:

Чтобы сделать вещи приоритетными, сделайте их простыми: получите хороший инструмент рефакторинга.

Есть отличные инструменты рефакторинга (по крайней мере, для .NET afaik). О, и не забудьте заранее написать модульные тесты (как уже отмечали другие).

Удачи!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.