Easyelectronics.ru

Электроника для всех
Текущее время: 24 янв 2020, 08:10

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 08:39 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 25 май 2010, 18:24
Сообщения: 163
Гугл внятного ничего не ответил на мой вопрос. Больше года моя работа заключается в основном в чтении чужого кода и все острее ощущается нехватка трюков для его эффективного чтения.

Кода более 200 метров, язык си, исходников около 2500. Я работаю над этим один.

Как грамотно вникать в работу сложой большой софт-системы с несколькими слоями интерфесов, дефайнов, call-back-ов и т.д., получить комплексное представление?
Конспектировать на листочке, рисовать в каком-нибудь visio блок-схемы и наколько подробные? Или есть какие-то специальные удобные программы для этого?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 10:54 
Старожил
Аватара пользователя

Зарегистрирован: 11 май 2011, 09:53
Сообщения: 482
Нет ничего хуже, чем разбираться в чужом коде. Тут свой, годовой давности, посмотришь и думаешь - какой мудак это написал?
Иногда приходится копаться и в чужом. Обычно, нужно что-то подправить/дописать. Я использую блокнот, карандаш и ластик - просто записываю какая ф-ция что делает, какие другие ф-ции зовет. Как-то так. Думаю общего правила нет, тк высеры у нас, программеров - у каждого свои. На каменты, сперва не хватает времени, потом лень...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 11:27 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:08
Сообщения: 7549
Откуда: Алма-ата
coredumped писал(а):
На каменты, сперва не хватает времени, потом лень...

Вот-вот, отсюда и проблемы... Все норовят спихнуть работу побыстрей, не тратя время на комментарии и документирование программ.
А то и вовсе исходников не давать, под предлогом "авторских прав" и "коммерческой тайны"...

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

Нет, все торопятся, как голый на бабу. Да - и элементарная лень, и недисциплинированность...
Халтура, в общем. Как и делать печатные платы без схем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 12:02 
Заглядывает иногда

Зарегистрирован: 07 фев 2012, 19:31
Сообщения: 118
Есть такая тулза. Называется Understand. Загружаешь в нее все исходники проекта и она дает информацию о том кто вызывает данный обьект, кого вызывает данный обьект, и даже в графическом виде типа "бабочка" типа слева все кто вызывают, справа кого она визывает. При определенном везении может графически отобразить алгоритм выполнения участка кода в виде прямоуголльников, ромбов, стрелок и т. п. Есть встроенный редактор кода.

_________________
Прерывание на хальте, осложненное ПДП циклом...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 13:29 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 25 май 2010, 18:24
Сообщения: 163
eugene_e_n писал(а):
Есть такая тулза. Называется Understand. Загружаешь в нее все исходники проекта и она дает информацию о том кто вызывает данный обьект, кого вызывает данный обьект, и даже в графическом виде типа "бабочка" типа слева все кто вызывают, справа кого она визывает. При определенном везении может графически отобразить алгоритм выполнения участка кода в виде прямоуголльников, ромбов, стрелок и т. п. Есть встроенный редактор кода.


О, это интересно, обязательно попробую. Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 14:59 
Старожил
Аватара пользователя

Зарегистрирован: 11 май 2011, 09:53
Сообщения: 482
SWG писал(а):
Вот-вот, отсюда и проблемы... Все норовят спихнуть работу побыстрей, не тратя время на комментарии и документирование программ.

Замечание справедливое, в случае отношений работник - работодатель.
Интересно, у кого проблемы, если я собственник предприятия и на нем-же разработчик? Те, я сам себе спихиваю :)))) Комментарии, я есс-но пишу, но в минимальном объеме, чтоб самому проще было вспоминать.
А схемы я обычно не рисую, а пишу только удобочитаемый для себя-же nodelist, когда плата уже готова. Когда разводишь плату с FPGA - схема только мешает, получается двойная работа. Я никого не призываю следовать моему примеру - каждый делает как ему удобней. Мне эти схемы в принципе не нужны, тк основная схема - это код на Verilog. Вся документация - в теле проектов. Мне этот гемор с бумажками не нужен, у меня не госпредприятие ;-)
А "халтура" - это понятие для наемного работника.
Удачи всем в Ваших разработках! И да прибудет с Вами Сила :)
PS: Еще раз повторяю: я - плохой пример для подражания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 15:24 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 25 май 2010, 18:24
Сообщения: 163
elusive писал(а):
eugene_e_n писал(а):
Есть такая тулза. Называется Understand.


Крутая вещь! То что надо.
Правда платная =(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 15:34 
Супермодератор
Аватара пользователя

Зарегистрирован: 27 янв 2010, 00:28
Сообщения: 1337
Откуда: сами знаете
Чтоб проще ориентироваться в чужом коде, нужно выбрать правильную IDE.
Для проектов на Си, рекомендую Source insight. Ничего лучше не встречал. Отличная подсветка кода, показывает что откуда вызывается, с дефайнами удобно работать ну и куча всего остального. Попробуй может поможет.

P.S. Умения "хорошо разбираться в чужом коде" не существует на мой взгляд.

_________________
http://avrdevices.ru/ мои девайсы
http://easystm32.ru/ Сайт про STM32


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 15:53 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2010, 13:27
Сообщения: 2382
Откуда: Тамбовская обл.
Я вот тоже ковыряюсь. Проект правда поменьше, чем у ТС (~300 файлов), но и опыта разработки на C++ мало.
Проект на Qt, соответственно QtCreator. IDE просто замечательная, кучу времени экономит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 16:16 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3358
elusive писал(а):
Крутая вещь! То что надо. Правда платная =(

еще есть doxygen, он немного не для этого, но какие-то картинки из исходников рисовать умеет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 16:46 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 25 май 2010, 18:24
Сообщения: 163
_pv писал(а):
elusive писал(а):
Крутая вещь! То что надо. Правда платная =(

еще есть doxygen, он немного не для этого, но какие-то картинки из исходников рисовать умеет.


Doxygen-ом все продокументировано, но рисунок графа посмотреть не могу - в получившемся index.html так и не нашел кнопку "показать граф", хотя судя по сгенерированным названиям файлов он его создал.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 18:53 
Старожил
Аватара пользователя

Зарегистрирован: 22 апр 2010, 09:08
Сообщения: 623
Medved писал(а):
Для проектов на Си, рекомендую Source insight. Ничего лучше не встречал


я надеюсь ты пошутил?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 19:03 
Супермодератор
Аватара пользователя

Зарегистрирован: 27 янв 2010, 00:28
Сообщения: 1337
Откуда: сами знаете
marvin_yorke писал(а):
Medved писал(а):
Для проектов на Си, рекомендую Source insight. Ничего лучше не встречал


я надеюсь ты пошутил?


Нет я серьёзно. Мне очень понравилось.

_________________
http://avrdevices.ru/ мои девайсы
http://easystm32.ru/ Сайт про STM32


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 22:14 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5777
Medved писал(а):
P.S. Умения "хорошо разбираться в чужом коде" не существует на мой взгляд.

Это умение придет когда научитесь свой писать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 19 дек 2012, 23:35 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
dosikus_2 писал(а):
Это умение придет когда научитесь свой писать...

это на грани троллинга;) все еще не умеешь читать - значит и писать не научился:)

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 20 дек 2012, 07:58 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 25 май 2010, 18:24
Сообщения: 163
Ink писал(а):
разгребать особо трэшевый асм-код нам помогает рисование блок-схем на листочке, но это уже когда совсем прям ппц. еще бывает полезно в отладчике трассировать, но за такой большой код как у тс я не уверен, что как-то поможет.


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

Я бы хотел понять, как общепризнано более разумно читать приложение "взглядом со стороны". Для общего понимания структуры не нужно знать точные названия переменных, нужно знать какие концепции (например статусы одного вида или битовые поля) кто где контролирует и изменяет.

То есть прочитать код как бы "на более высоком уровне". С чего нужно начать? С подробного разбора дефайнов или со списка функций в модуле с кратким описанием или наоборот с подробным или...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 20 дек 2012, 10:26 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
У меня такое чувство, что ты сам уже можешь многих тут поучить (меня - так точно). Поэтому мое предложение: берешь и пишешь статью об этом. По ходу написания еще чуток поднимаешь свое понимание, где-то что-то подчитываешь, потом в дискуссии полирнешься и готово :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 20 дек 2012, 11:32 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5777
Ink писал(а):
это на грани троллинга;) все еще не умеешь читать - значит и писать не научился:)


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 20 дек 2012, 11:34 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5777
elusive писал(а):
С чего нужно начать? С подробного разбора дефайнов или со списка функций в модуле с кратким описанием или наоборот с подробным или...


С разбора кода на модули ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 20 дек 2012, 12:20 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 25 май 2010, 18:24
Сообщения: 163
dosikus_2 писал(а):
elusive писал(а):
С чего нужно начать? С подробного разбора дефайнов или со списка функций в модуле с кратким описанием или наоборот с подробным или...


С разбора кода на модули ...


Ну, на модули он уже поделен тем, что разбит на n пар *.c+*.h


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 20 дек 2012, 14:16 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
dosikus_2 писал(а):
не умея применять конструкции , не разберешься в чужих.
факт: есть много опыта писания-ковыряния в нескольких асмах; как-то было нужно разбираться с незнакомым MIPS асмом (чужой дизассемблированный код), так разбираться было относительно легко сразу же. а вот когда надо было кой-чего дописать на нем же - пришлось попариться хорошенько (детские проблемы, конечно, но все же). как-то ваша теория не очень сработала:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 20 дек 2012, 14:22 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 25 май 2010, 18:24
Сообщения: 163
drvlas писал(а):
У меня такое чувство, что ты сам уже можешь многих тут поучить (меня - так точно).


да я тут вроде тока вопросы задаю пока, о чем писать-то) хотя идея хороша.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 21 дек 2012, 08:01 
Старожил
Аватара пользователя

Зарегистрирован: 17 апр 2010, 08:38
Сообщения: 4920
Откуда: Усинск, республика Коми
elusive писал(а):
dosikus_2 писал(а):
elusive писал(а):
С чего нужно начать? С подробного разбора дефайнов или со списка функций в модуле с кратким описанием или наоборот с подробным или...


С разбора кода на модули ...


Ну, на модули он уже поделен тем, что разбит на n пар *.c+*.h

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

_________________
хаос это непознанный порядок


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 21 дек 2012, 12:01 
Старожил
Аватара пользователя

Зарегистрирован: 23 июн 2012, 00:03
Сообщения: 359
Откуда: Krasnodar
SWG писал(а):
coredumped писал(а):
На каменты, сперва не хватает времени, потом лень...

Вот-вот, отсюда и проблемы... Все норовят спихнуть работу побыстрей, не тратя время на комментарии и документирование программ.
А то и вовсе исходников не давать, под предлогом "авторских прав" и "коммерческой тайны"...

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

Нет, все торопятся, как голый на бабу. Да - и элементарная лень, и недисциплинированность...
Халтура, в общем. Как и делать печатные платы без схем.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как грамотно читать чужой код?
СообщениеДобавлено: 06 сен 2016, 19:44 
Старожил

Зарегистрирован: 09 июл 2016, 17:24
Сообщения: 407
Прочитал
Show сообщение топикстартера


и так как у меня вопрос близкий решил не создавать отдельную тему, а спросить тут.

Расскажите тогда как вообще принято решать у вас такие задачи.
Ну когда тебе дали "гигабайты сурцов" и "крутись как хочешь".

С чего вообще начинается у вас работа по изучению чужого кода?
Рисуете для себя какие-то картинки, диаграммки?
Или что? Дайте конкретики.
Как вы разбираетесь в объемном чужом коде?


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

1) Какие программы умеют делать свёртку одинаковых (или похожих) кусков кода в макросы/шаблоны.
Т.е. операции, обратные разворачиванию макросов (дефайнов) и шаблонов.
Просто хотелось бы как-то радикально сокращать размер исходника.
Это сделает его более обозримым и простым для изучения.
Поясню это на самом простом примере (в реале все сложней).
Есть штук 16 файлов.
И в каждом из них присутствует фрагмент из 25 строчек:

#include <assert.h>
...
#include "rfdesitm.h"

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

Вы скажите: задача выеденного яйца не стоит. Юзай "поиск и замену".
Или сложи все эти инклюды в один, и замени этот кусок на вызов этого инклюда.

Но не все так просто.
1) Нужно чтобы сам исходный код не менялся. Менялось только его отображение в программе.
2) Поиском и заменой можно воспользоваться когда уже знаешь, какие куски повторяются. А если не знаешь? Хотелось бы чтобы программы сама, автоматом, их обнаруживала и предлагала заменить на более короткий дефайн.
3) Нужно чтобы имя дефайна было уникальным, чтобы не произошло коллизии с идентификаторами исходного кода. Т.е. программа должна автоматом проверять вводимые юзером имена дефайнов на уникальность.
4) Нужно искать не только одинаковые куски исходника, но и ПОХОЖИЕ. Которые могут свернуться в макровызовы с параметрами.
5) Чтобы наведя мышку на такой "дефайн" можно было в тултипе увидеть его исходный код, который он заменяет
6) Иногда два куска кода можно «привести к общему знаменателю» т.е. сделать одинаковыми, просто произведя соответствующие преобразования. К примеру, поменяв местами в одном из них строки или ещё что-нибудь. Нужно чтобы программа находила и такие КВАЗИ похожие куски и предлагала юзверю сделать соответствующие преобразования (повторяюсь: сам исходник при этом не должен меняться) или напротив, чтобы юзверь указал «здесь преобразования недопустимы, так как изменится логика работы программы»

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

Знаю что есть Understand, есть source insight, есть scitools.
Ещё есть что-нибудь.

Чем пользовались расскажите.
Расскажите вообще по пунктам как Вы рабирались с гигантскими чужими исходниками?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB