LINUX.ORG.RU
ФорумTalks

[специалистам] Рефакторинг, с чего начать?

 


0

1

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

★★

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

Jetty ★★★★★
()

> 3 года я терпел этот набор несгрупированного говнокода

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

pacify ★★★★★
()

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

abraziv_whiskey ★★★★★
()
Ответ на: комментарий от Jetty

Так я обычно и делаю, если мне непонятна работа каких-то сегментов, но, как правило, результат умещается на 5-6 листах бумаги. На всю программу может уйти несколько сотен. Рисовать сначала структурную схему, разделить на «узлы» и сначала группировать по «узлам», а потом начинать приводить его к читабельному виду?

coldy ★★
() автор топика
Ответ на: комментарий от abraziv_whiskey

Эта контора в общем неплоха, просто ей впарили оборудование с этой программой, а оценить сложность её обслуживания было некому

coldy ★★
() автор топика

> Специалисты, посоветуйте с чего начать,

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

http://c2.com/cgi/wiki?RefactorLowHangingFruit

shimon ★★★★★
()
Ответ на: комментарий от pacify

> и тысячу раз над ними подумать

И написать еще тысячу временных переменных, которые будут фомироваться и обнуляться там где надо. Ага... :)

valich ★★★
()
Ответ на: комментарий от shimon

Щемить яйца мне будут завтра на оперативке за 3 часа простоя. Сидел, уткнувшись в программатор в 10 окон с кусками программы, матерясь и нихера не понимая, потом всё само ушло. Не хочу повторов, надо с чего-то начать.

coldy ★★
() автор топика
Ответ на: комментарий от coldy

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

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

shimon ★★★★★
()
Ответ на: комментарий от Jetty

Это не приоритетное оборудование, на некоторых других аппаратах час простоя оценивается в 200000 рублей убытка, но тред не об этом, да)

coldy ★★
() автор топика

>с чего начать?

rm -rf $src

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от coldy

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

shimon ★★★★★
()
Ответ на: комментарий от pacify

>Если в день тратить 1-2 часа на работу с ручкой и бумагой,

то за 3 года можно написать тысячи, десятки тысяч диаграмм,

и тысячу раз над ними подумать.



вам за килобайты платят?

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от shimon

Обыкновенное расп***яйство, сами не программеры, не знают о чём спросить, приёмочная комиссия тупо подпишет, где покажут, ударят по рукам и разойдутся. Месяцев 9-10, как правило, всё работает без проблем, а долговременного планирования никто не проводил. Был небольшой скандальчик, когда я не подписывал сразу после того, как мне диск с программой на руки отдали, а попросил разъяснить моменты по пунктам.

coldy ★★
() автор топика
Ответ на: комментарий от coldy

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

В твоем ауле других работодателей нет?

anonymous_
()

Ъ выкинет программу и перепишет заново на своем любимом ЯП. Или бросит контору.

А вообще можно Doxygen-ом построить граф вызовов внутри программы, иногда помогает для понимания внутренней логики

Harald ★★★★★
()
Ответ на: комментарий от coldy

Есть еще вариант, посчитать часы простоя в случае если говнокод останется говнокодом - типа чтобы добавить функциональность, каждый раз надо на 3 часа больше вникать и тд. и тп. И посчитать приблизительное время на переписывание (иногда лучше с нуля сделать, повторяя состояния программы, но не её суть). Надо посчитать на период 1-5 лет. И чтобы цифры расходились в 2-3 раза. И идти с этими выкладками к начальству. А для пущей убедительности, часы простоя умножить на стоимость простоя :)

XVilka ★★★★★
()
Ответ на: комментарий от XVilka

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

coldy ★★
() автор топика

Без тестов лучше не начинать.

tailgunner ★★★★★
()

> я терпел этот набор несгрупированного говнокода, кучу временных переменных, непонятно как формирующихся, и непонятно как обнуляющихся.

с чего начать?

Предлагаю с начала, и на этот раз подойти к делу серьезно.

segfault ★★★★★
()

Рефакторинг, это когда жопа тестами прикрыта. А у тебя, по-ходу, русская рулетка в ногу будет.

baverman ★★★
()

Код должен в точности соответствовать по смыслу тому, что он выражает. Ищешь отступления от этого правила и правишь.

Начать стоит с поиска хорошего IDE с поддержкой рефакторингов, или плагинов/программ если вдруг таких IDE нет.

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

stevejobs ★★★★☆
()

Мартин Р. Чистый код.

fluorite ★★★★★
()
Ответ на: комментарий от TheKnight

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

Harald ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.