Мертвый код в программе.
От: da17  
Дата: 25.11.16 14:04
Оценка:
Здравствуйте, коллеги. С товарищем работаем над одним крупным проектом, который нам достался от уволившихся программистов, соответственно многие места приходится переписывать. В проекте осталось много кода, который в настоящий момент не используется или реализует функционал от которого решено было отказаться, я настаиваю на том, что для дальнейшей успешной работы над проектом нам необходимо удалить все неиспользуемые участки кода, таблицы, поля, мотивирую это тем, что "неработающие куски кода" просто съедают мое время на их изучение и осознание того нужны они или нет. Коллега отказывается это делат, утверждая что данная работа "отнимает время на поиск", "отнимает время на тестирование", "вдруг снова понадобится этот функционал". С его частью, где он мертвый код не вырезает у него возникают постоянные проблемы. Предлагаю совместно отрефакторить все, избавиться от лишнего и т.д., он же утверждает, что "проще переписать все с нуля и надо начинать все делать заново". Делать заново мне совершенно не хочется, т.к. считаю, что это будет слишком долго и высоки риски вообще ничего не сделать, начать делать заново для меня похоже на "бегство от проблем" в призрачной надежде что "ну ща то мы как напроектируем", хотя на мой взгляд объем кода совсем небольшой и при вдумчивой работе за месяц-другой можно все привести в порядок, система модульная, так что можно части переписывать по-отдельности. В общих чертах я осознаю, что мои слова о "мертвом коде" это просто слова, так что начал рыться в проблематике и нашел ряд работ, подтверждающих, что действительно, от мертвого кода стоит избавляться, но вот что касается "переписывания заново", то тут у меня особого опыта нет, т.к. несколько проектов я дописывал за другими людьми и в общих чертах удалось довести эти проекты до завершения. Пару проектов "с нуля" до логического завершения довести не удалось и порой я наблюдал, как одну и туже программу переписывают с нуля три раза подряд, делая одну и туже работу буквально в течении 4 лет.
Отредактировано 25.11.2016 14:09 data17 . Предыдущая версия .
Re: Система контроля версий
От: Qbit86 Кипр
Дата: 25.11.16 14:10
Оценка: 9 (1) +9 -1
Здравствуйте, da17, Вы писали:

D>"вдруг снова понадобится этот функционал".


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

D>Предлагаю совместно отрефакторить все, избавиться от лишнего и т.д.


Это можно делать постепенно, в процесссе решения других задач. То есть не выделять специально на это время; просто непрерывно понемногу вычищать.
Глаза у меня добрые, но рубашка — смирительная!
Re: Мертвый код в программе.
От: Vladek Россия Github
Дата: 26.11.16 06:07
Оценка: 3 (1) +2
Здравствуйте, da17, Вы писали:

D>Здравствуйте, коллеги. С товарищем работаем над одним крупным проектом, который нам достался от уволившихся программистов, соответственно многие места приходится переписывать. В проекте осталось много кода, который в настоящий момент не используется или реализует функционал от которого решено было отказаться, я настаиваю на том, что для дальнейшей успешной работы над проектом нам необходимо удалить все неиспользуемые участки кода, таблицы, поля, мотивирую это тем, что "неработающие куски кода" просто съедают мое время на их изучение и осознание того нужны они или нет. Коллега отказывается это делат, утверждая что данная работа "отнимает время на поиск", "отнимает время на тестирование", "вдруг снова понадобится этот функционал". С его частью, где он мертвый код не вырезает у него возникают постоянные проблемы. Предлагаю совместно отрефакторить все, избавиться от лишнего и т.д., он же утверждает, что "проще переписать все с нуля и надо начинать все делать заново". Делать заново мне совершенно не хочется, т.к. считаю, что это будет слишком долго и высоки риски вообще ничего не сделать, начать делать заново для меня похоже на "бегство от проблем" в призрачной надежде что "ну ща то мы как напроектируем", хотя на мой взгляд объем кода совсем небольшой и при вдумчивой работе за месяц-другой можно все привести в порядок, система модульная, так что можно части переписывать по-отдельности. В общих чертах я осознаю, что мои слова о "мертвом коде" это просто слова, так что начал рыться в проблематике и нашел ряд работ, подтверждающих, что действительно, от мертвого кода стоит избавляться, но вот что касается "переписывания заново", то тут у меня особого опыта нет, т.к. несколько проектов я дописывал за другими людьми и в общих чертах удалось довести эти проекты до завершения. Пару проектов "с нуля" до логического завершения довести не удалось и порой я наблюдал, как одну и туже программу переписывают с нуля три раза подряд, делая одну и туже работу буквально в течении 4 лет.


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

Осторожный коллега и потом свой новый код "высечет в граните" и будет кудахтать вокруг него как курица-наседка, когда понадобится вносить изменения. Такие люди просто мешают работать. От них одна польза: плохой программист создаёт два новых рабочих места в год. Наверное, поэтому вы и получили работу, ха-ха.
Re: Мертвый код в программе.
От: vsb Казахстан  
Дата: 26.11.16 11:50
Оценка: +1
Я на вашей стороне. Переписывать только если денег девать некуда и есть запасной план на случай, если переписывание провалится. Лучше улучшать существующий код. Если и переписывать, то по кускам, вынося отдельный функционал в независимые модули.
Re[2]: Мертвый код в программе.
От: Ops Россия  
Дата: 26.11.16 13:49
Оценка:
Здравствуйте, Vladek, Вы писали:

V>От них одна польза: плохой программист создаёт два новых рабочих места в год. Наверное, поэтому вы и получили работу, ха-ха.


Вот этого не понял: он же не только их создает, но и занимает тоже.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: Мертвый код в программе.
От: r.kamenskiy Россия  
Дата: 26.11.16 17:10
Оценка: +2 -2 :)
Здравствуйте, da17, Вы писали:

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


Расскажите коллегам эту притчу
  Притча
Мастер изучала программу, написанную в удаленном монастыре. На ее мониторе большие фрагменты кода светились не черным, а зеленым — они были закомментированы.

«Любопытно,» — сказала мастер, — «Я открыла точные часы и обнаружила внутри кожуру апельсина и рыбьи кости.»

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

«Это можно понять,» — кивнула мастер.

На следующий день монахи собрались на встречу с мастером. Их беспокоило то, что настоятеля нигде не могли найти. Мастер указала им вверх, на стропила, где висело тело настоятеля.

«Услуги вашего настоятеля больше не требуются,» — сказала мастер. — «Но оставьте его тело разлагаться над вами. В конце концов, однажды его методы могут снова потребоваться, и было бы расточительно обучать нового с нуля.»

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


Взято отсюда
Re: Мертвый код в программе.
От: Sharov Россия  
Дата: 27.11.16 10:40
Оценка:
Здравствуйте, da17, Вы писали:

1)при использовании cvs мертвый код можно смело херить;
2)с неиспользуемыми таблицами и полями я бы был по аккуратнее
Кодом людям нужно помогать!
Re[2]: Мертвый код в программе.
От: da17  
Дата: 16.12.16 13:35
Оценка:
Коллеги, для уточнения, что следует понимать под "мертвым кодом". В моем понимании это методы, классы, переменные, которые не используются при работе программы, но не являются закоментированными.
Re[3]: Мертвый код в программе.
От: __kot2  
Дата: 27.12.16 18:40
Оценка:
Здравствуйте, da17, Вы писали:
D>Коллеги, для уточнения, что следует понимать под "мертвым кодом". В моем понимании это методы, классы, переменные, которые не используются при работе программы, но не являются закоментированными.
все на вашей стороне. но можете для начала их просто комментировать. потом уже удалите через какое-то время
Re: Мертвый код в программе.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.12.16 09:27
Оценка: +1
Здравствуйте, da17, Вы писали:

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


Переписываем с нуля как правило и появляются такие же уродцы, как и были. "отрефактрить всё" на мой взгляд не ваш кейс. Рефакторингом нужно решать конкретные проблемы конкретных релизов. Отрефакторить всё — это тоже способ убить проект. Не знаю, какой смысл ты вкладываешь в слово рефакторинг — как правило под этим понимают просто любые переделки структуры и внутреннего апи.

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


Часто бывает что при переписывании делаются ровно те же ошибки, что и раньше.

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

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

То есть,в целом техника правильная — меньше кода, меньше багов. Но вот детали есть только у тебя
Отредактировано 29.12.2016 9:31 Pauel . Предыдущая версия .
Re: Мертвый код в программе.
От: danshi Россия https://dedis.ru
Дата: 10.01.17 11:42
Оценка: 1 (1)
Здравствуйте, da17, Вы писали:

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


1. Закомменченный код — ЗЛО! Конечно не хуже чем оставленные комментарии от отрефакторенного кода, которые тупо врут читающему код.
2. Стратификация. Методика вытирания старого кода. Старые модули и подсистемы оборачиваются в желаемый новый интерфейс. Далее переписываются не задевая остальную систему.
3. ТЕСТЫ! Это как кнопка Save в игре. Фиксируем функционал тестами, вытираем, рефакторим — без боли.
4. Переходите на git. Каждая новая переделка — в отдельной ветке. Если после слияния с основной веткой возникли проблемы, без проблем откатываемся целиком как было, решаем проблемы дальше в ветке. Весь неоконченный функционал, какие-то мелкие проверки идей и тд живут в отдельных ветках.

Ваш коллега может забить на вытирание кода и комментов. Если вы рефлексируете на эту тему, можно в отдельных ветках итеративно удалять старый код и рефакторить, обсуждать с коллегой изменения и сливать в master (git merge yourbranch --squash), не переставая параллельно работать над основной веткой с коллегой.
Если руки золотые, не важно из какого места они растут.
git software
Re[2]: Мертвый код в программе.
От: scf  
Дата: 14.02.17 19:14
Оценка: 2 (1)
А мертвый ли это код? К сожалению, люди любят убирать то, что они не понимают, как в менеджементе, так и в рефакторинге старых систем.

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

Переписывание с нуля или любой рефакторинг длинее 3 дней — заведомо гиблая затея.
Re[2]: Мертвый код в программе.
От: ylp  
Дата: 03.03.17 21:28
Оценка:
Здравствуйте, Vladek, Вы писали:

>"плохой программист создаёт два новых рабочих места в год.


шедевр.
распечатаю и повешу на стену
Градации мертвости кода
От: igor-booch Россия  
Дата: 26.08.17 11:41
Оценка:
Что значит мертвый код? Есть разные варианты (градации) мертвости кода
1) Код недостижим из пользовательского интерфейса
1.1) не будут вызывать никогда
1.2) возможно станут вызывать в будущем
2) Код достижим из пользовательского интерфейса, но пользователи его не вызывают
2.1) не будут вызывать никогда
2.2) возможно станут вызывать в будущем

Предполагаю, что у Вас все 4 варианта.
Определить вариант 1 легко, если язык со статической типизацией.
Чтобы определить варианты 2, 1.1 и 1.2, нужно очень хорошо знать аналитику. Так как вы новички в проекте, скорей всего вы её достаточно хорошо не знаете.

В зависимости от варианта есть разные степени очистки мертвого кода:

1) закомментирование кода (для варианта 1.2)
2) Атрибуты Deprecated или Obsolete или оборачивание кода в комментарий с пометкой (для варианта 2.2)
2) удаление и сохранение старой копии (для варианта 1.2)
3) удаление и сохранение в VCS (для вариантов 1.1 и 2.1)
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Отредактировано 26.08.2017 11:46 igor-booch . Предыдущая версия . Еще …
Отредактировано 26.08.2017 11:45 igor-booch . Предыдущая версия .
Отредактировано 26.08.2017 11:44 igor-booch . Предыдущая версия .
Отредактировано 26.08.2017 11:42 igor-booch . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.