Продукт
Archito НовоеУчится на merge request и показывает, что застряло Интеграции 25
Решения
По роли
Почему AppArch
Ресурсы
Клиенты Цены Контакты
Язык
Связаться с нами

Сбои, о которых не подумали ваши тесты, - от запроса до базы данных.

SmartScan проходит от каждой точки входа - веб-действия, задания, потребителя сообщений, экрана приложения - через сервисы и обработчики до базы данных или исходящего запроса и отмечает, что может сломаться по пути: поиск, который может вернуть пустоту, две записи, которые могут выполниться наполовину, столбец, который вход может переполнить. Каждый риск приходит с цепочкой, которая к нему ведёт.

Экраны работающей установки

Что он ищет

Четыре вида риска, каждый найден на реальном пути через ваш код, а не по чьему-то шаблону.

Запись не найдена

Поиск по данным запроса может вернуть пустоту, а код использует результат без проверки: 500 вместо 404 или вводящее в заблуждение сообщение.

Частичная запись

Два отдельных коммита в одном потоке без транзакции: если второй упадёт, первый останется записанным.

Разрывы контракта

Запрос может нести больше, чем вмещает столбец, обязательный столбец не проверяется по пути, или уникальный столбец пишется без проверки уникальности.

Фронтенд и мобильные

Запрос, сбой которого никто не обрабатывает, ошибка, принятая за успех, ответ без проверки: экран падает или молчит.

Что SmartScan видит в одном запросе

Заказ создаётся за шесть шагов. Каждый шаг - реальный вызов в коде; SmartScan проходит по ним и останавливается там, где что-то может сломаться.

  1. Точка входа POST /api/orders OrdersController.Create
  2. Запрос mediator mediator.Send(CreateOrderCommand)
  3. Обработчик CreateOrderHandler.Handle
  4. От интерфейса к реализации ICustomerRepository.FindAsync CustomerRepository Не найдено: результат используется без проверки
  5. Запись SaveChangesAsync() ×2 Частичная запись: два коммита без транзакции
  6. База данных orders · order_lines

Как это работает

Единица анализа - цепочка: от входа запроса до места, где он касается данных.

  1. 01

    Старт с каждой точки входа

    Веб-действия, плановые задания и потребители сообщений; во фронтендах и приложениях - события, эффекты, маршруты и экраны.

  2. 02

    Пройти по цепочке

    От интерфейса к реализации, переопределения, запросы медиатора к обработчикам - до ORM или HTTP-вызова.

  3. 03

    Отбросить защищённое

    Проверка, поиск, бросающий исключение, валидатор с правильным лимитом - на собственном пути записи - засчитываются. Цепочка без риска не выводится.

  4. 04

    Показать путь

    Каждый риск перечисляет шаги с файлом и строкой - от точки входа до столбца.

Предупреждение, а не шлагбаум

SmartScan - не набор правил: он не снижает оценку и не валит пайплайн. Каждый риск закрывается по одному, как любая находка. Включается для проекта, по умолчанию выключен и работает только при полном сканировании - проверки MR остаются быстрыми.

На всех девяти языках коллектора

.NET Java Python Go PHP Ruby TypeScript Kotlin Swift

Правило и риск SmartScan - не одно и то же

Оба появляются в одной панели, но отвечают на разные вопросы и ведут себя по-разному.

Находка правилаРиск SmartScan
Что ищетИзвестный шаблон, который кто-то описалПуть через ваш собственный код
ОценкаСнижает с учётом серьёзностиНикогда не затрагивает
ПайплайнМожет остановить порогом fail-onНикогда не останавливает
Когда запускаетсяРевью merge request и полные сканированияТолько полные сканирования, включается для проекта
Что вы получаетеФайл, строка и обоснование правилаВся цепочка по шагам, с файлом и строкой

Вопросы о SmartScan

Это ещё один набор правил?
Нет. Набор правил растёт с каждым придуманным сценарием, а SmartScan идёт по путям самого кода. Он предупреждает, не снижает оценку и не валит пайплайн.
Как сдерживаются ложные срабатывания?
Защита засчитывается только на собственном пути записи: явная проверка, поиск, который бросает исключение, если ничего не найдено, валидатор с правильным лимитом. Каждый вид риска перед выпуском вручную проверили на реальных кодовых базах.
Замедляет ли он ревью merge request?
Нет. SmartScan работает только при полном сканировании репозитория; проверки MR идут своим быстрым путём.
Какие языки и фреймворки?
Все девять языков коллектора: .NET, Java, Python, Go, PHP, Ruby, TypeScript (включая фронтенды на React и Next.js), Kotlin (Android и Spring) и Swift (iOS).

Как это выглядит в продукте

Все скриншоты

Найдите сбои раньше пользователей

Включите SmartScan для одного проекта в ходе PoC - следующее полное сканирование покажет все рискованные цепочки.