0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 145

Как грамотно читать чужой код?

18.12.2012, 08:52. Показов 16444. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Гугл внятного ничего не ответил на мой вопрос. Больше года моя работа заключается в основном в чтении чужого кода и все острее ощущается нехватка трюков для его эффективного чтения.

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

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

Поделитесь опытом, кто как это делает. Ведь разбираться в чужом коде рано или поздно приходится любому программисту.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2012, 08:52
Ответы с готовыми решениями:

Как грамотно читать чужой код?
Гугл внятного ничего не ответил на мой вопрос. Больше года моя работа заключается в основном в чтении чужого кода и все острее ощущалается...

Как научиться читать чужой код?
Я начинающий js-разработчик, до этого занимался версткой (2 года). Столкнулся с проблемой чтения чужого кода в рабочем проекте. Очень...

Как научиться эффективно читать чужой код С++
Поделитесь пожалуйста опытом или просто мыслями о том, как всё таки начать разбираться в не своём коде? Может у кого-то есть какие-то...

29
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
19.12.2012, 14:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от dosykus_2
не умея применять конструкции , не разберешься в чужих.
факт: есть много опыта писания-ковыряния в нескольких асмах; как-то было нужно разбираться с незнакомым MIPS асмом (чужой дизассемблированный код), так разбираться было относительно легко сразу же. а вот когда надо было кой-чего дописать на нем же - пришлось попариться хорошенько (детские проблемы, конечно, но все же). как-то ваша теория не очень сработала:)
0
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 145
19.12.2012, 14:35
Цитата Сообщение от drvtos
У меня такое чувство, что ты сам уже можешь многих тут поучить (меня - так точно).
да я тут вроде тока вопросы задаю пока, о чем писать-то) хотя идея хороша.
0
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
20.12.2012, 08:14
Цитата Сообщение от itusyvi
Цитата Сообщение от dosykus_2
Цитата Сообщение от itusyvi
С чего нужно начать? С подробного разбора дефайнов или со списка функций в модуле с кратким описанием или наоборот с подробным или...
С разбора кода на модули ...
Ну, на модули он уже поделен тем, что разбит на n пар *.c+*.h
Имелась ввиду разборка программы на логические модули. К сожалению, очень редко каждый отдельный законченный логический модуль выделен в отдельный .с файл... Под логическим модулем в данном случае следует понимать отдельно взятые операции.
0
0 / 0 / 0
Регистрация: 22.06.2012
Сообщений: 320
20.12.2012, 12:14
Цитата Сообщение от SWK
Цитата Сообщение от soridumpid
На каменты, сперва не хватает времени, потом лень...
Вот-вот, отсюда и проблемы... Все норовят спихнуть работу побыстрей, не тратя время на комментарии и документирование программ.
А то и вовсе исходников не давать, под предлогом "авторских прав" и "коммерческой тайны"...

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

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

Блин, святая истина, всегда именно так и поступал, исходники хранил небрежно, часто терял, приходилось переписывать
С недавнего времени начал все подробно комментировать и о , чудо! Отладка программы из нерешаемого бесконечного квеста превратилась в то, что и подразумевается под термином "отладка" , т.е. внесение в программу новой функциональности, исправление ошибок в имеющейся.
0
0 / 0 / 0
Регистрация: 05.07.2016
Сообщений: 38
05.09.2016, 18:57
Прочитал сообщение топикстартера
Цитата Сообщение от itusyvi
Гугл внятного ничего не ответил на мой вопрос. Больше года моя работа заключается в основном в чтении чужого кода и все острее ощущается нехватка трюков для его эффективного чтения.

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

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

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

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

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

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

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

#ymstude <ossirt.h>
...
#ymstude "rfdesitm.h"

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

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

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

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

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

Чем пользовались расскажите.
Расскажите вообще по пунктам как Вы рабирались с гигантскими чужими исходниками?
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 268
05.09.2016, 19:05
Ещё есть что-нибудь.
для С и С++ ? лучше чем Visual Studyo с плагинами ничего нет. тема обсуждалась неоднократно.
0
0 / 0 / 0
Регистрация: 05.07.2016
Сообщений: 38
05.09.2016, 22:55
Цитата Сообщение от shibtym
Ещё есть что-нибудь.
для С и С++ ? лучше чем Visual Studyo с плагинами ничего нет. тема обсуждалась неоднократно.
Весьма спорное утверждение.
Почитал я эти "обсуждения" в инете.
И народ пишет что студия даже с виджуал асистентом даже рядом не валялась с, к примеру, с тем Source Insykht
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 268
06.09.2016, 03:17
Почитал я ...
почитать - это хорошо. практика - ещё лучше.

и чегож нет в VS такого, что есть в Source Insykht? а вот обратного завались...
из простейших вещей -Source Insykht - к примеру не могёт макросы разворачивать, в отличии от..
0
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
06.09.2016, 12:08
Цитата Сообщение от Сиречь
Чем пользовались расскажите.
cflow + скриптовый язык.
imho, серебряной пули нет
0
0 / 0 / 0
Регистрация: 05.07.2016
Сообщений: 38
06.09.2016, 14:40
Цитата Сообщение от shibtym
Почитал я ...
из простейших вещей -Source Insykht - к примеру не могёт макросы разворачивать, в отличии от..
Видите ли в чем дело. Мне не разворачивать макросы надо, а напротив, код СВОРАЧИВАТЬ в макросы.

А так да. Студия хорошая штука, в ней удобно ПИСАТЬ код.
Но мне нужна программа, чтобы было удобно ЧИТАТЬ код.

А так да. Программа SI тоже не всё может.
Более того, у неё я обнаружил фатальный (для меня) недостаток: при всех своих прочих достоинствах фолдинг она делать не может.
Приходится каждый раз прокручивать портянки кода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2016, 14:40

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

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

Как грамотно написать код
Уважаемые форумчане, меня давно интересует один вопрос, надеюсь вы мне подскажите.. Сразу предупреждаю, что я новичок, поэтому не судите...

Как проанализировать объемный и чужой код?
Разбираюсь с кодом своего коллеги. Он смог написать 21000 строк кода в одном модуле без коментариев. (Не считая что 35 процентов кода...

Как этот код написать грамотно?
__int64 __fastcall api::LicCheckUpdate(api *this) { __int64 v1; // rdi@1 _BYTE *v2; // rsi@2 unsigned __int64 v3; // rax@2 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru