Форум программистов, компьютерный форум, киберфорум
Электроника и радиотехника
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/83: Рейтинг темы: голосов - 83, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 145

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

18.12.2012, 08:52. Показов 16413. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru