Мне надоело искать ошибки глазами — я создал бесплатный аудитор для 1С

в 5:28, , рубрики: , MetaVision, open source, sqlite, аудит кода, безопасность 1С, визуализация кода, графы, оптимизация производительности, статический анализ
Мне надоело искать ошибки глазами — я создал бесплатный аудитор для 1С - 1

MetaVision for 1C

Хорошулин Андрей Викторович, разработчик.

Мне надоело искать ошибки глазами — я создал бесплатный аудитор для 1С - 2

Откуда взялась идея

Я 1С-разработчик с десятилетним стажем. Думаю, вы тоже проходили через это: открываешь модуль чужой конфигурации, а там 50 тысяч строк. Чтобы понять, кто кого вызывает, где открывается транзакция и почему документ проводится полчаса, ты вооружаешься блокнотом, Ctrl+F и собственным воображением. В голове пытаешься удержать граф вызовов, а глаз дёргается от попытки найти парный оператор «КонецЕсли» где-то на строке 17 432.

Платформа 1С за все годы так и не дала нам:

  • визуализации логики функций,

  • карты зависимостей между методами,

  • статического анализатора уязвимостей,

  • поиска узких мест производительности,

  • нормального полнотекстового поиска по всей кодовой базе.

В какой-то момент я устал ждать и написал MetaVision for 1C. Это десктоп-приложение, которое загружает выгруженную конфигурацию и делает всю грязную работу по анализу за вас. Проект опубликован на Инфостарте, а исходный код выложен на GitHub под лицензией MIT.

В этой статье я расскажу:

  • Как устроен MetaVision изнутри и почему он работает быстро,

  • Какие реальные проблемы он решает (с конкретными примерами находок),

  • Почему интерфейс получился интуитивным с первого запуска,

  • Что уже нашли в реальных конфигурациях за первые месяцы использования,

  • И что будет дальше.

Как это работает: архитектура без магии

Расскажу про технические решения, потому что многие спрашивают.

Парсинг конфигурации. Программа берёт XML-файлы выгрузки конфигурации и разбирает их напрямую. Никаких COM-соединений с платформой 1С, никаких внешних зависимостей. Написано на C#, данные хранятся в SQLite. Загрузка конфигурации размером ~8 Гб (типовая ERP) занимает 5–7 минут на машине с 32 Гб ОЗУ и SSD. База данных приложения при этом весит примерно 70% от размера исходных файлов.

Почему не BSL Language Server. BSL — отличный проект с глубоким синтаксическим разбором. Но для моих задач он избыточен. Мне нужен был быстрый парсер, который выделяет:

  • структуру функций (условия, циклы, транзакции, блокировки),

  • вызовы методов,

  • вложенность конструкций,

  • потенциально опасные паттерны.

Поэтому я написал собственный анализатор подмножества языка 1С. Он легче, быстрее и заточен именно под те задачи, которые решает MetaVision.

Безопасность превыше всего. Программа работает полностью локально. Код вашей конфигурации не отправляется в интернет, не анализируется на сторонних серверах, не передаётся третьим лицам. Единственная сетевая активность — проверка обновлений самой программы и анонимная статистика использования (без единой строчки вашего кода). Исходный код открыт — можете убедиться лично.

Почему интерфейс получился интуитивным

Я делал MetaVision в первую очередь для себя. А когда делаешь инструмент для собственной ежедневной работы — интерфейс получается удобным естественно, без спринтов, дизайн-макетов и фокус-групп. Вот ключевые моменты.

Первое, что видишь — дерево метаданных. Оно работает быстрее, чем в конфигураторе. Клик по объекту — и сразу видишь список его функций с иконками и счётчиком. Выбираешь функцию — и моментально получаешь три вещи:

  1. Граф структуры функции (узлы: условия, циклы, транзакции, вызовы).

  2. Полный текст функции с подсветкой синтаксиса.

  3. Список тех, кто эту функцию вызывает.

Двусторонняя навигация между графом и кодом работает мгновенно. Кликнул по узлу на графе — строка в коде подсветилась. Кликнул по строке — узел на графе подсветился. Это настолько естественно, что через пять минут после запуска ты уже не понимаешь, как жил без этого раньше.

Граф можно крутить, масштабировать, сохранять в PDF. Для больших функций (а мне попадались экземпляры на 200+ узлов) это незаменимо. Визуализация делает понятным то, что в тексте скрыто за десятками вложенных конструкций.

Все проверки доступны в один клик. Открыл вкладку «Сканер проблем» — нажал кнопку «Безопасность» — получил список всех уязвимостей с описанием, уровнем критичности и рекомендациями. Никаких конфигурационных файлов, никаких сложных настроек порогов срабатывания. Всё готово к работе сразу.

Шесть вкладок, которые закрывают основные боли

Расскажу про каждую вкладку коротко, но с примерами — чтобы было понятно, что именно MetaVision даёт разработчику.

1. Анализатор кода

Центральная вкладка. Дерево метаданных → список функций → граф + код. В этой вкладке проходит 80% работы по изучению незнакомой конфигурации. Пример из жизни: приходит жалоба, что документ долго проводится. Открываешь функцию проведения — на графе видны три вложенных цикла и транзакция внутри. Причина понятна за 20 секунд, хотя в коде это было размазано на 800 строк.

Мне надоело искать ошибки глазами — я создал бесплатный аудитор для 1С - 3

2. Работа с модулем

Компактная IDE для бытовых задач: преобразование запросов (вертикальные черты ↔ обычный текст), проверка синтаксических ошибок (незакрытые скобки, нарушенные блоки Если/КонецЕсли), автоформатирование, проверка орфографии в комментариях и строках через Яндекс.Спеллер. Мелочи, которые экономят кучу времени, когда под рукой нет полноценной IDE.

3. Поиск по модулям

Полнотекстовый поиск по всем модулям конфигурации. Ввёл название метода — получил таблицу с контекстом и мгновенным переходом к коду. В отличие от штатного поиска 1С, работает молниеносно и ищет по всей конфигурации сразу.

4. Сканер проблем в коде

То, ради чего ко мне приходят безопасники и тимлиды. Шесть направлений проверок: безопасность (RCE, SSRF, COM-инъекции, пароли в коде), многопоточность (фоновые задания без обработки ошибок), транзакции (корректность закрытия, диалоги внутри транзакций), блокировки (вызовы внутри циклов, рекурсия), плохие имена переменных (a, b, tmp, сч), доступ к реквизитам через точку внутри циклов.

Каждая проблема сопровождается понятным описанием, уровнем опасности и рекомендацией по исправлению. При выборе проблемы сразу подсвечивается нужная строка в коде.

5. Производительность

Два режима: поиск запросов внутри циклов (с оценкой глубины вложенности) и анализ вложенных конструкций. Строит граф цепочки вызовов, показывая, как проблема «путешествует» между функциями. Это позволяет находить узкие места, которые размазаны по нескольким модулям и почти невидимы при ручном анализе.

Мне надоело искать ошибки глазами — я создал бесплатный аудитор для 1С - 4

6. Статистика

Панорамный взгляд на конфигурацию: количество объектов, модулей, функций, циклов, транзакций, блокировок, запросов. Диаграммы распределения и таблица метаданных. Полезна тимлидам для оценки сложности проекта, обоснования рефакторинга перед руководством и сравнения версий конфигурации.

Мне надоело искать ошибки глазами — я создал бесплатный аудитор для 1С - 5

Что мы уже нашли в реальных проектах

Самое интересное — это результаты. Вот несколько реальных находок, которые лично меня впечатлили (названия компаний не называю, но это живые проекты):

Уязвимости безопасности

  • В одной крупной ERP нашли 4 вектора SSRF в HTTP-сервисах. Код работал в продакшене несколько лет.

  • Там же обнаружили COM-инъекцию в обработке 10-летней давности. Никто не знал.

  • В разных проектах регулярно находятся пароли и секреты в комментариях — то, что разработчики оставляли для отладки и забывали удалить.

Проблемы производительности

  • Более 30 запросов внутри циклов в legacy-конфигурации 1С:ERP.

  • 12 незакрытых транзакций, которые приводили к плавающим блокировкам.

  • Цепочка «цикл → транзакция → блокировка», растянутая между тремя функциями в разных модулях. На графе она видна целиком, глазами её найти практически невозможно.

Технический долг

В одном проекте сканер нашёл больше 1500 переменных с именами a, b, tmp, сч. Тимлид был в шоке. После первого прогона команда сократила время на код-ревью примерно втрое — просто потому, что инструмент сразу подсвечивает то, что обычно ищут часами.

Кому это реально нужно

MetaVision я делал для себя, но оказалось, что он нужен целой экосистеме специалистов. Вот кто, на мой взгляд, получит максимум пользы:

  • Разработчики 1С — быстрое понимание чужого кода, визуализация сложных функций, раннее выявление проблем производительности.

  • Техлиды и архитекторы — аудит кода команды без ручного чтения тысяч строк, объективные метрики сложности, контроль качества перед релизами.

  • Аудиторы и консультанты — быстрая оценка чужой конфигурации с отчётами и наглядными графами для заказчика.

  • Специалисты по безопасности — автоматический поиск уязвимостей, паролей и опасных вызовов во всей кодовой базе.

  • Преподаватели и менторы — визуальное объяснение структуры кода студентам, демонстрация «плохих» паттернов на реальных примерах.

Планы развития

Текущая версия — это только начало. Вот что в ближайших планах:

  • Поддержка нескольких конфигураций одновременно и сравнение между ними.

  • Полноценная работа с расширениями (анализ перекрытий, конфликтов, точек внедрения).

  • Анализ ролей и прав доступа с построением матриц.

  • Интеграция с CI/CD для автоматического аудита при сборке.

  • Типизация функций и интеллектуальный анализ типов.

MetaVision — не разовая утилита, а платформа, которая будет расти вместе с потребностями сообщества. Каждое скачивание, каждый отзыв, каждое сообщение об ошибке — это топливо для развития.

Почему это важно для сообщества

MetaVision — мой вклад в 1С-экосистему. Я хочу, чтобы у разработчиков наконец появился удобный, быстрый и интуитивный инструмент для анализа кода. Не нужно больше тратить часы на рутинный поиск, рисовать графы в блокноте или гадать, что скрывается в модуле на 80 тысяч строк.

Инструмент полностью бесплатный. Исходный код открыт под лицензией MIT: https://github.com/AndreyHhh/MetaVision. Вы можете не только пользоваться, но и изучать код, модифицировать под свои задачи, распространять копии.

Скачайте MetaVision сегодня. Проверьте свою конфигурацию. Возможно, вы найдёте то, о чём даже не подозревали. А если инструмент окажется полезным — поставьте звезду на GitHub, расскажите коллегам, напишите отзыв. Это прямо влияет на скорость разработки и появление новых возможностей.

Сделано с заботой о времени разработчиков 1С. Потому что своё время жалко.

Автор: sladkiyzmey

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js