damakshn / dependencymap Goto Github PK
View Code? Open in Web Editor NEWПостроение графа зависимостей для большой старой информационной системы
Построение графа зависимостей для большой старой информационной системы
Добавить конфигурационный json-файл для хранения путей к папкам с исходниками.
Конфиг должен содержать:
Считать дату обновления проекта следует не по дате обновления папки, а перебором всех входящих в проект файлов и выбора наибольшей даты. Подумать заодно о том, как изменится механизм интеграции delphitools с моделью данных после этого исправления.
По крайней мере, для тех ошибок, которые плохо отслеживаются другим путём.
Сделать формальное описание синтаксиса формата по форме Бэкуса — Наура. Если это поможет, будет хорошо.
Написать скрипт для извлечения из БД перечня таблиц, представлений, процедур и функций (пока без связей)
Нужно переводить файлы форм в нативные типы данных питона, а оттуда - в json/xml/yaml (yaml выбран потому что он синтаксически намного ближе к dfm, чем любой другой), чтобы иметь возможность быстро обрабатывать содержащуюся в них информацию, пользуясь готовыми инструментами.
Уже кем-то написанные решения, переводящие dfm во что-то разумное либо написаны на делфи и не работают, либо просто не работают.
Превратить dfm в yml, выполнив несколько глобальных замен не получится, надо создавать полноценное решение.
Обратное преобразование (yaml-dfm, json-dfm) делать не нужно.
Добавить скрипты для обработки *.dproj и *.pas
При тестировании боевых компонентов скорее всего придётся читать все эти последовательности как строки, т.к. данных слишком много, всё в массивы не переведёшь.
Добавить токены, тесты - короче, всё, что нужно, чтобы вместо "False" было False
Модель должна охватывать следующие сущности:
Связь между объектами является отдельной сущностью и обладает характеристиками;
Создать пакет, содержащий парсер форм и другие инструменты для обработки исходников, всё оформить как надо.
Научить парсер анализировать файлы быстрее - при обработке всех исходников ждать придётся довольно долго.
В том числе с учётом русских букв
Дёрнуть официальный репозиторий и полазить по коду, разобраться, как парсер считывает информацию из файла, дробит информацию на токены, интерпретирует их и как формирует структуры данных в памяти. Это будет долго.
В системе используется несколько баз, SQL-запросы АРМов могут обращаться сразу к нескольким, в базах есть таблицы, функции и т.д. с одинаковыми именами. Алгоритм поиска должен однозначно идентифицировать объект и определять из какой базы он взят.
У АРМов есть файл конфигурации .ini, в нём содержатся названия подключаемых БД;
Иногда в коде прописано полное имя таблицы (база.схема.название);
За подключение отвечает компонент TADOConnection с атрибутом ConnectionString;
Отправку запроса в большинстве случаев осуществляет какой-нибудь компонент с формы, который подключен к ADOConnection через свойство Connection.
База, с которой соединяется компонент, может динамически меняться в рантайме.
Текст SQL-запроса тоже может динамически изменяться.
Итоговый продукт должен справляться с реальными файлами форм из боевой системы (4-5 тысяч строк с русскими буквами, SQL-запросами и т.д.)
Изменить реакцию программы на отсутствие значения свойства сразу после '=' - для строк, начинающихся с кавычки и решётки это допускается.
Переделать соответствующие тесты.
Задокументировать models.py, заготовить диаграмму классов и т.д.
При чтении структуры проекта в путь к модулю добавляются лишние папки.
Как итог - все исходники обработаны, структурированы и залиты в базу
Путь к папке не нужен, достаточно пути к файлу dproj, информация обо всех файлах есть в нём.
Интегрировать delphitools, реализовать обработку исходников:
Такие случаи есть, надо внести правки в delphitools
Файлы форм закодированы в UTF-8 с BOM, придумать, что делать с этим.
Некоторые ошибки тяжело засечь на месте без отслеживания отступов и переносов строк;
Задействовать это -
https://github.com/google/styleguide/blob/gh-pages/pyguide.md
propertyName =
anotherProperty = 2
Проверку на выброс исключения при обработке такой ситуации нужно вынести из тестов парсера в тесты токенайзера.
Как вариант https://github.com/masonwheeler/DFMJSON
Можно попробовать преобразовать файл в YAML, выполнив несколько глобальных замен;
Добавить обработку закодированных символов
Возникает при декодировании кириллицы в некоторых файлах форм. В самих файлах написана двоичная белиберда; надо определить что это и найти способ привести исходники во вменяемый вид.
И добавить соответствующие тесты
Для справки
https://proglib.io/p/6-diagram-services/
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.