|
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 145
|
|
Как грамотно читать чужой код?18.12.2012, 08:52. Показов 16413. Ответов 29
Метки нет (Все метки)
Гугл внятного ничего не ответил на мой вопрос. Больше года моя работа заключается в основном в чтении чужого кода и все острее ощущается нехватка трюков для его эффективного чтения.
Кода более 200 метров, язык си, исходников около 2500. Я работаю над этим один. Как грамотно вникать в работу сложой большой софт-системы с несколькими слоями интерфесов, дефайнов, call-back-ов и т.д., получить комплексное представление? Конспектировать на листочке, рисовать в каком-нибудь visio блок-схемы и наколько подробные? Или есть какие-то специальные удобные программы для этого? Поделитесь опытом, кто как это делает. Ведь разбираться в чужом коде рано или поздно приходится любому программисту.
0
|
|
| 18.12.2012, 08:52 | |
|
Ответы с готовыми решениями:
29
Как грамотно читать чужой код? Как научиться читать чужой код? Как научиться эффективно читать чужой код С++ |
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
||
| 19.12.2012, 14:29 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 145
|
||
| 19.12.2012, 14:35 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
|
||
| 20.12.2012, 08:14 | ||
Имелась ввиду разборка программы на логические модули. К сожалению, очень редко каждый отдельный законченный логический модуль выделен в отдельный .с файл... Под логическим модулем в данном случае следует понимать отдельно взятые операции.
0
|
||
|
0 / 0 / 0
Регистрация: 22.06.2012
Сообщений: 320
|
||
| 20.12.2012, 12:14 | ||
А то и вовсе исходников не давать, под предлогом "авторских прав" и "коммерческой тайны"... А потом приходится разгребать дерьмо такой халтуры кому - то, а то и самим. И времени теряется гораздо больше, чем бы ушло на нормальные комментарии в программе. Нет, все торопятся, как голый на бабу. Да - и элементарная лень, и недисциплинированность... Халтура, в общем. Как и делать печатные платы без схем. Блин, святая истина, всегда именно так и поступал, исходники хранил небрежно, часто терял, приходилось переписывать С недавнего времени начал все подробно комментировать и о , чудо! Отладка программы из нерешаемого бесконечного квеста превратилась в то, что и подразумевается под термином "отладка" , т.е. внесение в программу новой функциональности, исправление ошибок в имеющейся.
0
|
||
|
0 / 0 / 0
Регистрация: 05.07.2016
Сообщений: 38
|
||
| 05.09.2016, 18:57 | ||
|
Прочитал сообщение топикстартера
Расскажите тогда как вообще принято решать у вас такие задачи. Ну когда тебе дали "гигабайты сурцов" и "крутись как хочешь". С чего вообще начинается у вас работа по изучению чужого кода? Рисуете для себя какие-то картинки, диаграммки? Или что? Дайте конкретики. Как вы разбираетесь в объемном чужом коде? Интересует то, в каком софте реализованы те или иные фишки, позволяющие существенно ускорить и облегчить анализ, браузинг и понимание чужого кода за счет соответствующего его отображения. 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 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 05.07.2016
Сообщений: 38
|
||
| 05.09.2016, 22:55 | ||
Весьма спорное утверждение. Почитал я эти "обсуждения" в инете. И народ пишет что студия даже с виджуал асистентом даже рядом не валялась с, к примеру, с тем 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 | ||
imho, серебряной пули нет
0
|
||
|
0 / 0 / 0
Регистрация: 05.07.2016
Сообщений: 38
|
||
| 06.09.2016, 14:40 | ||
Видите ли в чем дело. Мне не разворачивать макросы надо, а напротив, код СВОРАЧИВАТЬ в макросы. А так да. Студия хорошая штука, в ней удобно ПИСАТЬ код. Но мне нужна программа, чтобы было удобно ЧИТАТЬ код. А так да. Программа SI тоже не всё может. Более того, у неё я обнаружил фатальный (для меня) недостаток: при всех своих прочих достоинствах фолдинг она делать не может. Приходится каждый раз прокручивать портянки кода.
0
|
||
| 06.09.2016, 14:40 | |
|
Как грамотно организовать код? Как грамотно оформить код Как грамотно написать код Как проанализировать объемный и чужой код? Как этот код написать грамотно? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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 на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|