|
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 145
|
|
Как грамотно читать чужой код?18.12.2012, 08:52. Показов 16444. Ответов 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 | |
|
Как грамотно организовать код? Как грамотно оформить код Как грамотно написать код Как проанализировать объемный и чужой код? Как этот код написать грамотно? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Был там один разговор по поводу свободы в материальном мире.
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.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|