Конференция "Прочее" » Диаграмма зависимостей модулей на паскале
 
  • zamtmn © (23.04.17 18:22) [0]
    Может кому пригодится https://sourceforge.net/projects/zcad/files/podgb.7z/download
    Строит полную зависимость модулей и вычленяет из  нее "циклические" зависимости.
    Результат выдает в виде
    DiGraph Classes {
    edge [style=solid]
    EnvironmentOpts_37_0 -> EditorToolbarStatic_14_1 [label=13]
    edge [style=dotted]
    EditorToolbarStatic_14_1 -> EnvironmentOpts_37_0 [label=13]
    edge [style=solid]
    ConvertDelphi_43_0 -> ConvertSettings_26_1 [label=14]
    edge [style=solid]
    ConvertDelphi_43_0 -> ConvCodeTool_23_0 [label=14]
    edge [style=solid]
    ConvertDelphi_43_0 -> MissingPropertiesDlg_36_0 [label=9]
    edge [style=solid]
    ConvertDelphi_43_0 -> UsedUnits_20_0 [label=14]
    edge [style=dotted]
    ConvertSettings_26_1 -> ConvertDelphi_43_0 [label=2]
    edge [style=solid]
    ConvCodeTool_23_0 -> ConvertSettings_26_1 [label=9]
    edge [style=solid]
    MissingPropertiesDlg_36_0 -> ConvertSettings_26_1 [label=14]
    edge [style=solid]
    MissingPropertiesDlg_36_0 -> ConvCodeTool_23_0 [label=14]
    edge [style=solid]
    MissingPropertiesDlg_36_0 -> FormFileConv_12_0 [label=13]
    edge [style=solid]
    MissingPropertiesDlg_36_0 -> UsedUnits_20_0 [label=14]
    edge [style=solid]
    FormFileConv_12_0 -> ConvCodeTool_23_0 [label=13]
    edge [style=solid]
    UsedUnits_20_0 -> ConvCodeTool_23_0 [label=14]
    edge [style=solid]
    UsedUnits_20_0 -> ConvertSettings_26_1 [label=14]
    }


    визуализировать его можно в graphviz`е или онлайн http://www.webgraphviz.com
    Надписи у ребер - количество оставшихся циклических зависимостей если эту зависимость устранить. импорта проектов с делфи  нет, только из лазаря, но можно выкрутится использовав
    File=/путь/к/проекту/*.pas;*.dpr
    Paths=/путь/к/проекту/
    Compiler options=-Sd -Fi/путь/к/проекту/include
  • Юрий Зотов © (23.04.17 18:32) [1]
    А в какая от этого практическая польза? Циклические зависимости и компилятор вполне успешно вычисляет.
  • zamtmn © (23.04.17 18:38) [2]
    >>А в какая от этого практическая польза?
    Имхо полезно при рефакторинге видеть как оно взаимодействует.

    >>Циклические зависимости и компилятор вполне успешно вычисляет.
    Я дельфи давно невидел, емнип он раньше молча глотал циклические зависимости (те что в implementation ессно, те что в interface - ошибка). Сейчас он генерирует варнинги на это дело?
  • Юрий Зотов © (23.04.17 19:16) [3]
    Сейчас он генерирует варнинги на это дело?

    Не знаю. Ну пусть даже и глотает - так и что? Разве программа от этого становится хуже?
  • zamtmn © (23.04.17 19:22) [4]
    >>Разве программа от этого становится хуже?
    Лучше точно  не становится))
    ИМХО это показатель плохой "структурированности"
    Когда 2 модуля осознано "ссылаются" друг на дружку - наверно ниче страшного. А вот когда зацикливание проходит через десяток модулей - его без визуализации представить трудно, а избавится от него еще сложней.
  • Игорь Шевченко © (23.04.17 19:28) [5]
    zamtmn ©   (23.04.17 19:22) [4]

    В IDE Delphi встроен анализ всяческих метрик для оценки сложности кода.
    (Project|QA Metrics, Project!QA Audits). Считается, что неглупые люди писали.

    Одно из двух - либо аналог вашего построителя зависимостей там есть, либо эти зависимости в пень никому не уперлись и упрощать программу следует, руководствуясь другими критериями.
  • Kerk © (23.04.17 19:41) [6]
    Вот такая еще есть
    http://www.easy-ip.net/delphi-unit-dependency-scanner.html


    > Игорь Шевченко ©   (23.04.17 19:28) [5]

    Забыл самого главного их конкурента)))))
  • zamtmn © (23.04.17 20:04) [7]
    Игорь Шевченко
    >>Одно из двух - либо аналог вашего построителя зависимостей там есть
    Перед следующим постом потрудитесь узнать есть он там или нет.
    >>либо эти зависимости в пень никому не уперлись и упрощать программу следует, руководствуясь другими критериями.
    Критериев много, неспорю. Если вас не напрягает что программа из модульной превращается в монолитный кусок - рад за вас.

    Kerk
    На уникальность я не претендую.
  • Игорь Шевченко © (23.04.17 21:40) [8]
    Kerk ©   (23.04.17 19:41) [6]


    > Забыл самого главного их конкурента)))))


    Icarus ?

    Ты кстати свою штуку забросил ?
  • Kerk © (23.04.17 22:48) [9]

    > Игорь Шевченко ©   (23.04.17 21:40) [8]

    Чего это я забросил? На прошлой неделе релиз был.
  • Игорь Шевченко © (23.04.17 23:02) [10]
    Kerk ©   (23.04.17 22:48) [9]


    > На прошлой неделе релиз был.


    Писем давно не приходило, значит, забросил.
  • Kerk © (23.04.17 23:03) [11]
    Рассылками теперь TMS занимается, не я. Возможно, ты как обладатель бесплатной лицензии не попал в базу при импорте. Я проверю :)
  • Игорь Шевченко © (23.04.17 23:05) [12]
    Kerk ©   (23.04.17 22:48) [9]

    Так это у TMS release был. А старые подписчики, кто без TMS владел версией, им теперь как быть ?
    И заодно, если не затруднит, ссылку на what's new in this release, а то по TMS-вскому сайту я нифига не понял.
  • Otrek © (24.04.17 00:01) [13]
    Удалено модератором
  • zamtmn © (24.04.17 14:36) [14]
    >>Kerk ©   (23.04.17 23:03) [11]
    >>Игорь Шевченко ©   (23.04.17 23:05) [12]
    >>Otrek ©   (24.04.17 00:01) [13]
    >>Удалено модератором
    Я на этом форуме небыл лет десять, ниче не меняется)))

    В порядке полезности программы:
    Исходников больших проектов на дельфи у меня нет, поэтому попробовал на jcl\source\common

    http://imgur.com/a/gijuN
    зачем модулям ссылаться друг на друга в implementation одновременно (пунктирные связи)? подключив в свою программу например JclMath я автоматом получу еще кучу зависимостей и чето я сомневаюсь что все они реально нужны JclMath`у
  • Игорь Шевченко © (24.04.17 15:46) [15]
    zamtmn ©   (24.04.17 14:36) [14]

    В jcl с этим беда, согласен.
  • Kerk © (24.04.17 16:03) [16]
    Полезной была бы вот какая фича. Иногда в программу по длинной цепочке uses попадают одновременно модули vcl и fmx. За такое хотелось бы бить по рукам, но отследить очень сложно бывает.
  • zamtmn © (24.04.17 19:21) [17]
    Kerk ©   (24.04.17 16:03) [16]
    Да, наверно приделаю "распознавание" к чему модуль относится по названию с "коллапсом" модулей принадлежащих чемуто одному в один "квадратик" в графе.

    Также добавлю возможность "выдрать" "подграф" цепочек ссылок на определенный модуль
  • zamtmn © (24.04.17 19:22) [18]
    Игорь Шевченко ©   (24.04.17 15:46) [15]
    Думаю подобные "проблемные" места найдутся в большинстве больших проектов
  • zamtmn © (25.04.17 15:22) [19]
    >>Kerk ©   (24.04.17 16:03) [16]
    >>Полезной была бы вот какая фича.
    Приделал фичу в несколько переработаном виде. Добавил параметры SourceUnit и DestUnit.
    Указав SourceUnit - увидим связи им порожденные
    Указав DestUnit - увидим связи на нем заканчивающиеся - аналог предложеной тобой фичи.
    Указав оба параметра - увидим как связаны между собой юниты - как на приложеном скриншоте

    http://imgur.com/a/Nyxn1
 
Конференция "Прочее" » Диаграмма зависимостей модулей на паскале
Есть новые Нет новых   [134430   +4][b:0][p:0.002]