На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Посоветуйте софт для облегчения анализа и сокращения объема чужого кода. , Инструменты анализа кода
    Не нашел на форуме раздела для новичков.
    Не нашел на форуме раздела для обсуждения используемых при программировании программных инструментов.

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

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

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

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

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

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

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

        Неужели для кода нет ничего подобного?

        В конце концов есть же IDA Pro Advanced для дизассемблирования машинного кода, которая может машинный код обратно в сишный код сворачивать

        Добавлено
        Кроме того, я слышал что есть инструменты, умеющие С++ код сворачивать в UML-диаграммы.

        Посоветуйте программульку для этого.
        Только не из гугла. А которую сами юсали и она Вам понравилась
        Сообщение отредактировано: Исмаил Прокопенко -
          Исмаил Прокопенко
          Может. Но проще от этого программа не станет. Тут стоит вспомнить подход гуманитариев. Для быстрого вникания в суть на первых курсах им дают очень большие списки книг которые они должны прочитать. Чем больше ваш словарный запас чем больше знаний тем проще вам ориентироваться.
            Цитата Pavia @
            Может. Но проще от этого программа не станет.

            Почему же?
            Когда Вы скроете "детали реализации" и оставите одну "бизнес-логику"
              Цитата Исмаил Прокопенко @
              Когда Вы скроете "детали реализации" и оставите одну "бизнес-логику"

              При свёртке число связей не изменяется поэтому проще система не становится. А чтобы разделить бизнес логику от не бизнеса нужен искусственный интеллект. Ибо что одного детали реализации для другого бизнес-логика.
              Сообщение отредактировано: Pavia -
                Цитата Pavia @
                При свёртке число связей не изменяется

                Это почему же?
                Если часть связей оказываются внутри и поэтому не показываются?

                Добавлено
                Цитата Pavia @
                А чтобы разделить бизнес логику от не бизнеса нужен искусственный интеллект.

                Давайте только без мистики. Окей?
                Это сугубо практическая тема.
                Нужно разобраться в большом чужом проекте.

                Как?
                Какие есть средства, чтобы упростить и ускорить это дело?
                  Цитата Исмаил Прокопенко @
                  Это почему же?

                  Потому что всё что можно было свернуть уже свернули программисты:
                  - повторяющийся код вынесен в цикл
                  - повторяющейся код вынесен в функции
                  - повторяющиеся классы вынесены в шаблоны


                  Цитата Исмаил Прокопенко @
                  Если часть связей оказываются внутри и поэтому не показываются?

                  В теории хорошо. На практике либо вы получите нечитаемые идентификаторы. t1, t2.. t666,.., t9050 и тд
                  Либо на основе тех же функций получим спагетти типа КамераКватеренонноеУмножениеПеремещениеУмножениеСложение(Matrix, offsetX, oofsetY, AlfaCvaterion,..)
                  Да ещё с кучей параматеров.

                  Цитата
                  Давайте только без мистики. Окей?
                  Это не мистика.
                  Увы но пока что программы не научились отгадывать ваши мысли и знания. А поэтому скрыть от вас то что вы знаете они не могут.

                  Добавлено
                  Цитата Исмаил Прокопенко @
                  Как?
                  Какие есть средства, чтобы упростить и ускорить это дело?

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

                    К примеру чем плохо свернуть уже упоминавшийся выше повторяющийся во всех файлах кусок из 25-ти строк в маленький идентификатор "inc_files"?
                    Ведь весь смысл этого большого куска описывается этим малюсеньким идентификатором.
                    А кроме того, программисту не нужно будет напрягаться, чтобы понять, что эти большие куски кода ОДИНАКОВЫ, когда это будет ЯВНО задано идентификатором.

                    С похожими кусками кода аналогично.

                    Когда два больших фрагмента кода отличаются буквально совсем чуть чуть, ИМХО, разумно общую часть свернуть в точку (в один идентификатор) и оставить только эти различающиеся части.

                    К примеру когда вместо двух больших фрагментов кода строк по 20 будет написано
                    fir(as, +, xet)
                    и
                    fir(s, -, lt)

                    Где fir - это ПОНЯТНЫЙ ВАМ (потому что он введен Вами) идентификатор назначения кода
                    Ну а если Вы все же забыли что такое fir - наводите на него мышку и в тултипе видите его исходный код.

                    Разве это неудобно? По сравнению с листанием огромных портянок похожего и повторяющегося кода?

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

                      Неплохо. Просто таких участков менее 1%.

                      Цитата
                      Т.е. как бы мы оставляем в отображении одну бизнес-логику, а детали реализации скрываем

                      Для этого есть UML диаграммы. В RAD это возможно, только он для проектирования заточен нежели чем для реверса. Говорят в платной версии VC Studia есть подобное.
                        Цитата Pavia @
                        Для этого есть UML диаграммы.

                        Я слышал что есть софт, который умеет сворачивать с++ код в UML-диаграммы

                        Добавлено
                        Мне тут на другом форуме такую штуку посоветовали.
                        Никто не юсал?

                        user posted image

                        Добавлено
                        Т.е. это редактор кода со встроенным анализатором кода на С/С++
                          Кто интересуется темой нашел её обсуждение у "буржуев".
                          ВОТ
                            Вот записал как в RAD можно. По быстрому по функциям для Си++ тоже можно.

                            user posted image
                            бесплатный хостинг картинок
                            Сообщение отредактировано: Pavia -
                              Впечатляет :good:
                              Только я не очень понял, что Вы делали.
                              Не могли бы пояснить словами
                                Чо молчите?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0459 ]   [ 15 queries used ]   [ Generated: 19.03.24, 10:12 GMT ]