Russian Qt Forum
Ноябрь 23, 2024, 03:07
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Refactoring
Страниц:
1
[
2
]
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Refactoring (Прочитано 14814 раз)
_Bers
Бывалый
Offline
Сообщений: 486
Re: Refactoring
«
Ответ #15 :
Апрель 12, 2015, 21:49 »
Цитата: Igors от Апрель 12, 2015, 11:56
Кстати Вы далеко не первый дающий подобные рекомендации
я не давал рекомендаций.
Цитата: Igors от Апрель 12, 2015, 11:56
Думаю что даже если (предположим) дали бы достаточно времени и денег - никакого рез-та достигнуто не было бы. Человек надеется "выучить" все классы, методы, все-все (ну ведь нужно "понимать дизайн"). Для достаточно большого проекта это недостижимо. Напоминает учившего энциклопедию, дошел до слова "абсурд", дальше жизнь закончилась.
Достаточно большой проект (если он действительно большой) - это на самом деле кучка проектов по меньше.
Знать все от и до может быть не возможным в принципе.
Однако, обычно такой потребности и не возникает.
Обычно достаточно понимать и разбираться с теми вещами,
с которыми непосредственно приходится работать.
Вам нужно отдавать себе отчет в том,
что именно
вы хотите рефакторить.
Цитата: Igors от Апрель 12, 2015, 11:56
Возвращаясь к теме. Что хочется/нужно сказано в первом посте
но он не содержит конкретику.
такие хотелки даже формализовать никак не получится.
не получится выработать план рефакторинга,
или хотя бы сформулировать требования к нему.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Refactoring
«
Ответ #16 :
Апрель 13, 2015, 14:26 »
Так, ну есть первые результаты. Все-таки сделал класс вместо "просто ф-ций". Плюс одна примитивная замена чтобы передавать меньше параметров. Пока все
- число методов класса 216. (Однострочных get/set нет, все пока public). Это оказалось для меня полной неожиданностью, я-то думал там штук 50, ну может 100, а оказывается айсберг намного больше.
- штук 6-7 ф-ций были написаны дважды (в местных namespace)
- глобальный указатель на синглтон был объявлен (под разными именами) 3 раза
- пока перебирал текст, наметилось еще пара-тройка мест что можно удачно "схлопнуть" (мои расчеты оправдались)
Сколько новых багов появилось в рез-те моих действий - пока не знаю
Цитата: _Bers от Апрель 12, 2015, 21:49
Вам нужно отдавать себе отчет в том,
что именно
вы хотите рефакторить.
...
такие хотелки даже формализовать никак не получится.
не получится выработать план рефакторинга,
или хотя бы сформулировать требования к нему.
Та действительно! Что именно рефакторить - не знает, не имеет ни цели ни плана, ну вот захотелось ему этим заняться! Все-таки это не так, да и вообще надо лучше думать о людях
Есть проблема "концептуальных" (ну или "архитектурных") постов. Они может и хороши, но... после неск прочитанных предложений такие посты закрываются навсегда. Причина проста: уж очень бурным потоком излагается специфика проекта, что немедленно вызывает ответную реакцию
Цитировать
У меня своих дел полно, дай бог в своем проекте разобраться, куда уж тут вникать в чужой, это требует недель. Да и что можно ответить впервые увидев эти проблемы
И мне не хотелось бы повторять эту ошибку. Я подумаю как сделать это "в популярной форме", тогда отпишусь. Не "сию минуту", но и не откладывая в долгий ящик
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Refactoring
«
Ответ #17 :
Апрель 13, 2015, 21:55 »
Цитата: Igors от Апрель 13, 2015, 14:26
Сколько новых багов появилось в рез-те моих действий - пока не знаю
Старайтесь делать атомарные коммиты (изменения). Тогда часть из них будет гарантированно не ломающими (например, переименования или изменение порядка параметров). Потенциально ломающим/меняющим поведение коммитам (изменениям) уделяйте больше внимания, возможно, пишите автотесты на старый код.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Refactoring
«
Ответ #18 :
Май 06, 2015, 01:30 »
Цитировать
число методов класса 216
ох ты ж йожыг...
жаль, что всего кода не увидим, чтобы осознать глубину эээ... страданий, так сказать. Но кажется, что ад, батенька, сущий ад... Код то хоть на Qt или не особо? Просто кажется мне, что портирование на С++ дороже обойдется, чем заново наваять...
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Refactoring
«
Ответ #19 :
Май 06, 2015, 09:17 »
Цитата: Авварон от Апрель 13, 2015, 21:55
Старайтесь делать атомарные коммиты (изменения). Тогда часть из них будет гарантированно не ломающими (например, переименования или изменение порядка параметров).
Увы, таких оказывается относительно мало. Вообще хз как это решать. Допустим после изменений ф-ционал разрушен, шо делать? Ну откатились на какую-то точку, и дальше что? Начинать опять перебирать код - а чем это лучше предыдущей попытки?
Я получил 3-4 новых бага с этими изменениями. Отлаживал в рантайм на 2 машинах, сравнивая значения переменных в старом/новом коде. Тоже не быстро, 2-3 дня ушло.
Цитата: Racheengel от Май 06, 2015, 01:30
Просто кажется мне, что портирование на С++ дороже обойдется, чем заново наваять...
Не первый раз привожу
эту ссылку
, уж очень она мне нравится
Решение "все переписать" - первое что приходит в голову, для этого не надо быть архитектором. Вот был "плохой" код, а мы напишем "хороший". Беда в том что нужно знать все детали ф-ционала, а это может потребовать неприемлемых затрат времени/денег. Часто все заканчивается на первом же вопросе заказчика, типа "ну хорошо, а когда новый код будет готов?" - и ответа нет, остается брать десятикратный запас
Сейчас перевожу 2 простых окна, одно просто просмотрщик картинки, другое оно же но плюс расчеты (рабочие, их можно не трогать). Здесь мне удалось выучить все "детали дизайна", ну и очень много старого кода рисования который с успехом может быть замещен на Qt. Но почему-то дело движется совсем не быстро, вот уже вторая неделька пробегает...
«
Последнее редактирование: Май 06, 2015, 09:19 от Igors
»
Записан
Bepec
Гость
Re: Refactoring
«
Ответ #20 :
Май 06, 2015, 12:10 »
В такой работе много рутины, аля написания кода. Смотрите, анализируйте, автоматизируйте
PS сам таким маялся, до сих пор штук 10-15 программ под каждую ситуацию в коде лежит.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Refactoring
«
Ответ #21 :
Май 06, 2015, 13:38 »
Цитата: Bepec от Май 06, 2015, 12:10
В такой работе много рутины, аля написания кода. Смотрите, анализируйте, автоматизируйте
PS сам таким маялся, до сих пор штук 10-15 программ под каждую ситуацию в коде лежит.
Верес
, займитесь лучше своими кнопками на цепях, не надо совать хобот туда где его оторвут
Записан
Bepec
Гость
Re: Refactoring
«
Ответ #22 :
Май 06, 2015, 13:50 »
А я в свою очередь желаю вам читать все темы и при желании отписываться
PS будьте взаимовежливыми и ещё скажите что я неправ
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Refactoring
«
Ответ #23 :
Май 08, 2015, 12:10 »
Цитировать
Не первый раз привожу эту ссылку, уж очень она мне нравится Улыбающийся Решение "все переписать" - первое что приходит в голову, для этого не надо быть архитектором. Вот был "плохой" код, а мы напишем "хороший". Беда в том что нужно знать все детали ф-ционала, а это может потребовать неприемлемых затрат времени/денег. Часто все заканчивается на первом же вопросе заказчика, типа "ну хорошо, а когда новый код будет готов?" - и ответа нет, остается брать десятикратный запас
Ну а что, Главный Архитектор не прав был, что ли?
Я понимаю, что задача не простая, требует ресурсов и времени. У нас на фирме была такая же проблема - куча старого говнокода, который худо-бедно работал, иногда что-то там допиливалось, все плевались на него (ибо реально ГОВНИЩЕ было), но вот сесть и переписать - сразу же возникали вопросы "а кто это все оплатит? а сколько времени надо? а кто это делать будет?" ну и т.д. В итоге только на обсуждение того, надо переписывать или нет - ушло половина времени, за которое код таки БЫЛ ПЕРЕПИСАН (ну, программеры продавили в конце концов решение). И в итоге это решение окупилось.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Refactoring
«
Ответ #24 :
Май 08, 2015, 13:40 »
Цитата: Racheengel от Май 08, 2015, 12:10
Ну а что, Главный Архитектор не прав был, что ли?
Совершенно неправ, его и архитектором-то назвать нельзя. Нужен план что, в какой последовательности переписывать, а просто так рыпаться - остаться без всякой "ходячей" версии, возможно на годы
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Refactoring
«
Ответ #25 :
Май 08, 2015, 14:45 »
Ясное дело, на такое много времени нужно. Но если оно есть - то лучше имхо переделать. Если же нет, типа проект из серии "доделал и забыл" - то, конечно, микрорефакторинг не помешает, но особо и не поможет. Опять же, смотря какая цель преследуется - сделать хороший продукт, пусть и с новья, при этом уйдут старые баги (и придут новые, но их хотя бы будет проще найти). Ну или поддержать мертвеца и сбагрить - это уже вам видней
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Refactoring
«
Ответ #26 :
Май 08, 2015, 15:40 »
Цитата: Racheengel от Май 08, 2015, 14:45
Ясное дело, на такое много времени нужно. Но если оно есть - то лучше имхо переделать. Если же нет, типа проект из серии "доделал и забыл" - то, конечно, микрорефакторинг не помешает, но особо и не поможет. Опять же, смотря какая цель преследуется - сделать хороший продукт, пусть и с новья, при этом уйдут старые баги (и придут новые, но их хотя бы будет проще найти). Ну или поддержать мертвеца и сбагрить - это уже вам видней
Сомневался отвечать или нет, Ваш пост ничего нового не вносит. "По-хорошему надо все переписать" - то же самое сказал горе-архитектор
Но как Вы представляете себе процесс переписывания? Похерить все старые исходники и хедеры и начинать все с чистого листа? Поверьте, это не катит. А иначе Вы немедленно попадаете в липкие лапы старого кода.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Refactoring
«
Ответ #27 :
Май 08, 2015, 16:32 »
Цитата: Igors от Май 08, 2015, 15:40
Сомневался отвечать или нет, Ваш пост ничего нового не вносит. "По-хорошему надо все переписать" - то же самое сказал горе-архитектор
Но как Вы представляете себе процесс переписывания? Похерить все старые исходники и хедеры и начинать все с чистого листа? Поверьте, это не катит. А иначе Вы немедленно попадаете в липкие лапы старого кода.
Только закончил переписывание очередного сервиса с нуля:(
Напишите автотесты на старый код, это поможет при написании нового. При полном покрытиии кода (что маловероятно), когда закончите новый код, у вас будет работоспособная программа.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Refactoring
«
Ответ #28 :
Май 08, 2015, 16:46 »
Цитата: Авварон от Май 08, 2015, 16:32
Напишите автотесты на старый код, ..
А что такое "автотесты"? Мельком глянул
http://habrahabr.ru/post/238353/
- типичный хабровский треп
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Refactoring
«
Ответ #29 :
Май 08, 2015, 17:22 »
Любые тесты, автоматически тестирующие функционал. Масло масляное:) У нас 2 типа тестов - есть юнит тесты на гугл-тестах/qt-тестах, к-ые тестируют конкретные классы. И тесты, проверяющие работу сервиса по методу черного ящика - что-то на вход дали (сообщение), что-то ожидаем увидеть (другое сообщение). Понятное дело, для гуев второе не подходит, но подходит разделение гуй\негуй и юниттесты негуя.
Записан
Страниц:
1
[
2
]
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...