Обнаружение ошибок и уязвимостей в приложении на этапе эксплуатации может обойтись очень дорого. Проблемы, которые возникают после запуска продукта, могут плохо сказаться на репутации компании и снизить доверие пользователей. Именно поэтому многие команды внедряют инструменты для Shift-Left-тестирования. Они позволяют улучшить контроль качества на ранних этапах разработки.
Если начать тестирование на более ранних этапах, то можно устранить проблемы до того, как они станут серьёзными. В результате приложения становятся более качественными, стабильными и безопасными.
В этой статье мы разберём, как работает подход Shift-Left в тестировании, а также рассмотрим лучшие инструменты для его реализации.
Итак, давайте начнём!
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
Что такое Shift-Left-тестирование?
Shift-Left-тестирование – это подход, который предполагает перенос тестирования на более ранние этапы разработки. Благодаря этому разработчики и QA-специалисты могут обнаружить и устранить баги на начальных стадиях, когда их исправление проще и дешевле.

При Shift-Left-подходе тестирование, как правило, проводится на этапах проектирования и написания кода. Этот подход предполагает проектирование и реализацию программного обеспечения с применением таких методологий, как разработка на основе тестирования (Test-Driven Development, TDD).
Shift-Left-тестирование охватывает не только модульные, интеграционные тесты и сквозные тесты, но и статический анализ кода (SCA). Инструменты статического анализа сканируют код, конфигурации, зависимости и настройки в репозитории для выявления уязвимостей и других дефектов. Основная цель — создать более надежное и качественное приложение еще до его выпуска в продакшен и таким образом улучшить процесс обеспечения качества (QA) в целом.
Подход Shift-Left отличается от Shift-Right, при котором тестирование проводится на более поздних этапах разработки, ближе к моменту выпуска. Если Shift-Right-тестирование использует мониторинг приложений для поиска ошибок в рабочей системе, то Shift-Left-тестирование проводится до полного развертывания и запуска приложения.
Основные преимущества Shift-Left-тестирования
Перенос тестирования на более ранние этапы разработки ПО дает определенные преимущества:
- Быстрое обнаружение ошибок. Выявление дефектов на ранних этапах разработки позволяет устранять их до того, как они станут серьезной проблемой. Это предотвращает накопление технического долга, который может замедлить развитие приложения в будущем.
- Улучшенное качество программного обеспечения. Устранение уязвимостей, дефектов и ошибок до выхода приложения в эксплуатацию приводит к написанию более качественного кода и снижению количества проблем в рабочей версии продукта.
- Снижение затрат. Решение проблем на ранних этапах разработки обходится дешевле, чем их устранение в готовом продукте. Ошибки могут существенно замедлять работу разработчиков, поэтому их своевременное устранение ускоряет процесс написания кода. В результате это сокращает время вывода продукта на рынок и снижает общие затраты на разработку.
- Эффективное сотрудничество. Уделяя внимание тестированию с самого начала создания продукта, разработчики и QA-специалисты начинают работать вместе, что улучшает взаимодействие и объединяет усилия всех команд — разработки, безопасности и обеспечения качества.
- Усиление безопасности. Постоянный анализ кода, конфигураций и зависимостей помогает снизить риски безопасности до того, как станет слишком поздно.
Рекомендации по внедрению Shift-Left-тестирования
Shift-Left-тестирование охватывает различные аспекты проверки программного обеспечения, включая:
- Ручные тесты. Скрипты, создаваемые разработчиками для проверки логики и функциональности кода. Это могут быть юнит-тесты, интеграционные тесты, автоматизированные тесты и т.д.
- Анализ зависимостей. Проверка сторонних библиотек и пакетов, используемых приложением, для выявления известных уязвимостей и проверки их актуальности.
- Анализ конфигурации. Оценка настроек используемых библиотек и технологий на соответствие лучшим практикам безопасности.
- Анализ качества кода. Проверка исходного кода на наличие проблем, таких как использование переменных вместо констант, и потенциальных уязвимостей.
Рекомендуемый подход к Shift-Left-тестированию заключается в использовании специализированных инструментов, которые охватывают все упомянутые аспекты. Это обеспечивает полноценное покрытие и позволяет эффективно достичь всех перечисленных ранее преимуществ.
Помните, что помимо ручных тестов, которые пишут ваши разработчики, данный подход в основном реализуется с помощью инструментов для статического анализа кода (SCA). Такие инструменты автоматически проверяют ваш код на наличие ошибок, дефектов и уязвимостей безопасности, анализируя все его файлы.
Поскольку в коде или конфигурациях могут содержаться учетные данные или другая конфиденциальная информация, применяемые вами инструменты должны иметь открытый код. Это позволяет сообществу проверять их работу, следя за тем, чтобы с их помощью не осуществлялася кража данных или другие противоправные действия с вашим кодом.
Топ-5 инструментов Shift-Left-тестирования с открытым исходным кодом
Рассмотрим лучшие и наиболее полезные инструменты для Shift-Left-тестирования, доступные на рынке. Для каждого инструмента будут проанализированы следующие аспекты:
- Охватываемые сценарии тестирования. Ручное тестирование, проверка зависимостей, статический анализ кода и др.
- Языки программирования. Языки, которые поддерживает инструмент.
- Типы поддерживаемых приложений. Веб-приложения, десктопные приложения, мобильные приложения и т. д.
- Звёзды на GitHub. Количество звёзд, полученных проектом на GitHub.
- Загрузки. Количество загрузок инструмента из реестров зависимостей, таких как npm.
- Плюсы. Основные преимущества инструмента.
- Минусы. Основные недостатки инструмента.
- Стоимость. Цена для бизнеса или корпоративного использования, если применимо.
Для сравнения этих инструментов ознакомьтесь с представленной ниже таблицей:
Инструмент | Цель | Языки программирования | Типы поддерживаемых приложений | Звёзды на GitHub | Загрузки | Версия с открытым кодом | Премиум-версия |
---|---|---|---|---|---|---|---|
Фреймворки автоматизированного тестирования | Написание и запуск тестовых сценариев | Зависит от фреймворка (например, JavaScript, Python, Java и др.) | Веб-, мобильные и десктопные приложения | Зависит от фреймворка | Зависит от фреймворка | ✅ | Зависит от фреймворка |
OSV-Scanner | Сканирование на уязвимости | C, C++, Dart, Elixir, Go, Java, JavaScript, PHP, Python, R, Ruby, Rust | Веб-приложения | 6 тыс. | Информации нет | ✅ | ❌ |
TruffleHog | Сканирование и обнаружение секретных данных | Любые | Любые | 15.8 тыс. | Информации нет | ✅ | ✅ |
Snyk | Сканирование на уязвимости в коде, зависимостях, контейнерах и IaC | Bazel, C/C++, Dart, Elixir, Go, Java, Kotlin, JavaScript, .NET, PHP, Python, Ruby, Swift, TypeScript, VB.NET | Веб-, мобильные и десктопные приложения | 4.9 тыс. | 550k+ еженедельно | ✅ | ✅ |
Checkov | Сканирование неправильной конфигурации в IaC | Любые | Веб-приложения | 7 тыс. | 1+ млн еженедельно | ✅ | ❌ |
А теперь давайте разберём их подробнее!
Фреймворки автоматизированного тестирования

Это не конкретный инструмент, а категория, включающая все фреймворки, например, Selenium, pytest, Playwright, Jest, Mocha, JUnit.
Эти фреймворки обычно содержат всё необходимое для реализации одного или нескольких типов тестирования. Они предоставляют API для написания тестов, библиотеки утверждений, средства запуска тестов, генерацию отчетов и другие функции.
🧪 Охватываемые сценарии тестирования: ручное тестирование (юнит-тесты), интеграционные, дымовые, компонентные, сквозные и прочие тесты.
💻 Языки программирования: зависит от выбранного инструмента, но вообще фреймворки есть для всех популярных языков программирования.
🌐 Типы поддерживаемых приложений: веб-приложения, десктопные и мобильные приложения и др.
⭐ Звёзды на GitHub: некоторые инструменты, например, Playwright, имеют более 65 тыс. звёзд.
📥 Загрузки: например, Jest скачивают более 24 миллионов раз в неделю.
👍 Плюсы:
- Комлексные решения для тестирования
- Интеграция с CI/CD-пайплайнами
- Сильная поддержка сообщества
👎 Минусы:
- Некоторые инструменты сложно освоить
💰 Стоимость: большинство фреймворков бесплатны, но некоторые, например Cypress, предлагают премиум-функции (Cypress Cloud).
OSV-Scanner

OSV-Scanner – это инструмент для сканирования уязвимостей, разработанный Google на языке Go. Он использует данные из OSV.dev — распределённой базы данных уязвимостей с открытым исходным кодом.
Этот инструмент анализирует зависимости вашего проекта, подключается к базе OSV.dev и сообщает об уязвимостях, которым подвержены ваши зависимости. В отличие от сканеров, основанных на закрытых базах данных, открытая природа OSV.dev гарантирует, что каждая рекомендация исходит из надежного и доступного источника, и позволяет всем желающим вносить свой вклад.
🧪 Охватываемые сценарии тестирования: проверка зависимостей для обнаружения уязвимостей безопасности.
💻 Языки программирования: C, C++, Dart, Elixir, Go, Java, JavaScript, PHP, Python, R, Ruby и Rust.
🌐 Типы поддерживаемых приложений: веб-приложения.
⭐ Звёзды на GitHub: 6 тыс. звёзд.
📥 Загрузки: информации нет.
👍 Плюсы:
- Поддержка множества языков программирования и индексов пакетов
- Разработан и поддерживается Google
- Основан на распределённой базе данных уязвимостей с открытым исходным кодом
👎 Минусы:
- В настоящее время на GitHub зарегистрировано более 100 проблем
💰 Стоимость: бесплатный.
TruffleHog

TruffleHog – это инструмент для поиска секретных данных, который анализирует репозитории кода, историю версий, S3-директории, образы Docker и другие источники для выявления паролей, API-ключей и конфиденциальных данных.
TruffleHog позволяет принимать превентивные меры, чтобы не допустить случайной публикации секретных данных, а также предоставляет средства устранения проблем с уведомлениями и рекомендациями. Инструмент минимизирует ложные срабатывания благодаря проверке обнаруженных данных.
🧪 Охватываемые сценарии тестирования: поиск секретных данных.
💻 Языки программирования: любые.
🌐 Типы поддерживаемых приложений: любые.
⭐ Звёзды на GitHub: 15.8 тыс. звёзд.
📥 Загрузки: информации нет.
👍 Плюсы:
- Поддерживает GitHub, S3-директории, GCS и Docker с более чем 800 детекторами секретных данных
- Верификация учётных данных для минимизации ложных срабатываний
- Анализ нескольких веток одновременно
👎 Минусы:
- Большинство мощных функций доступны только в премиальной версии
💰 Стоимость: инструмент с открытым исходным кодом бесплатный, а для предприятий есть премиум-функции.
Snyk

Snyk – это облачная платформа безопасности, ориентированная на разработчиков. Помогает выявлять и устранять уязвимости на различных этапах разработки. Среди продуктов:
- Snyk Open Source – обнаружение и устранение уязвимостей в открытых источниках
- Snyk Code – выявление и устранение проблем безопасности в коде приложений
- Snyk Container – защита образов контейнеров и приложений Kubernetes
- Snyk Infrastructure as Code – выявление ошибок в конфигурациях Terraform и Kubernetes
Вы можете интегрировать Snyk CLI в рабочий процесс, IDE или CI/CD-пайплайн для беспрепятственного тестирования безопасности.
🧪 Охватываемые сценарии тестирования: обнаружение уязвимостей в зависимостях, коде, контейнерах и конфигурациях.
💻 Языки программирования: Bazel, C.C++, Dart и Flutter, Elixir, Go, Java, Kotlin, Javascript, .NET, PHP, Python, Ruby, Swift, Typescript и VB.NET.
🌐 Типы поддерживаемых приложений: веб-приложения, десктопные и мобильные приложения.
⭐ Звёзды на GitHub: 4,9 тыс. звёзд.
📥 Загрузки: более 550 тыс. еженедельных загрузок.
👍 Плюсы:
- Поддержка множества инструментов для Shift-Left-тестирования
- Простая интеграция в CI/CD
- Специальные плагины для популярных IDE, таких как Visual Studio Code, Intellij IDEs и Eclipse
👎 Минусы:
- Для работы требуется учетная запись Snyk
- Не полностью открыта база данных уязвимостей
💰 Стоимость: бесплатный для индивидуальных разработчиков и небольших команд (на постоянной основе).
Checkov

Checkov – это инструмент безопасности с открытым исходным кодом для сканирования конфигураций облачной инфраструктуры на наличие ошибок. Он выявляет проблемы безопасности и соответствия требованиям в платформах Infrastructure as Code (IaC), предотвращая появление потенциальных уязвимостей в облачных средах.
IaC-провайдеры, поддерживаемые Checkov: Terraform, Terraform plan, CloudFormation, Kubernetes, ARM Templates, Serverless, Helm и AWS CDK.
Помимо сканирования неправильной конфигурации, Checkov также может обнаруживать уязвимости в пакетах с открытым исходным кодом и образах контейнеров.
🧪 Охватываемые сценарии тестирования: выявление ошибок в коде и уязвимостей в зависимостях.
💻 Языки программирования: любые.
🌐 Типы поддерживаемых приложений: веб-приложения.
⭐ Звёзды на GitHub: 7 тыс. звёзд.
📥 Загрузки: более 1 млн еженедельных загрузок.
👍 Плюсы:
- Содержит более 1000 встроенных политик
- Простая интеграция в рабочие процессы разработчиков
- Одобрен Prisma Cloud Application Security
👎 Минусы:
- Для работы требуется Python
💰 Стоимость: бесплатный.
Другие важные инструменты
Также стоить отметить и другие инструменты для Shift-Left-тестирования:
- Trivy. Сканер безопасности, который проверяет уязвимости в образах контейнеров, файловых системах и Git-репозиториях. Он также может выполнять IaC-сканирование для обнаружения неправильных конфигураций.
- SonarQube. Инструмент для непрерывной проверки качества кода и безопасности, который выявляет ошибки, проблемный код и уязвимости для разных языков программирования.
Заключение
Из этой статьи вы узнали, что Shift-Left-тестирование помогает находить проблемы на ранних стадиях разработки. Это может снизить затраты и ускорить выпуск продукта. Использование для Shift-Left-тестирования подходящих инструментов с открытым исходным кодом позволяет эффективно автоматизировать процесс тестирования приложений, находящихся на стадии разработки.
Перевод статьи «Best Shift-Left Testing Tools To Improve Your QA».