Профессия Junior QA: от фундаментальной теории до практических инструментов

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

1. Введение в профессию тестировщика и жизненный цикл разработки ПО (SDLC)

Введение в профессию тестировщика и жизненный цикл разработки ПО (SDLC)

В 1996 году программная ошибка в системе управления ракеты-носителя Ariane 5 привела к самоликвидации аппарата через 37 секунд после старта. Ущерб составил около 370 млн USD. Причиной стала попытка запихнуть 64-битное число с плавающей запятой в 16-битное целое число — классическое переполнение, которое не было выявлено на этапе проверки. Этот случай вошел в историю как один из самых дорогих уроков того, почему тестирование — это не просто «поиск багов», а критический процесс управления рисками.

Профессия QA-инженера (Quality Assurance) часто воспринимается новичками как «человек, который нажимает на кнопки, чтобы всё сломать». На деле же современное тестирование — это интеллектуальная дисциплина, стоящая на стыке аналитики, психологии и инженерии. Прежде чем мы перейдем к техническим деталям, необходимо разобраться, в какой экосистеме живет тестировщик и по каким правилам строится современное программное обеспечение.

Кто такой тестировщик: QA vs QC vs Testing

В индустрии часто путают три понятия: Quality Assurance (QA), Quality Control (QC) и Testing. Для Junior-специалиста критически важно понимать разницу, так как это определяет зону ответственности и мировоззрение профессионала.

Тестирование (Testing) — это самый узкий уровень. Это непосредственное выполнение проверок: запуск программы, ввод данных, сравнение того, что получилось, с тем, что ожидалось. Если вы открыли мобильное приложение и проверили, нажимается ли кнопка «Войти», — вы занимаетесь тестированием.

Контроль качества (Quality Control) — это более широкий процесс. Он включает в себя не только выполнение тестов, но и анализ их результатов, классификацию найденных дефектов и оценку того, готово ли приложение к выпуску. QC сфокусирован на продукте: «Соответствует ли этот конкретный билд требованиям?».

Обеспечение качества (Quality Assurance) — это стратегический уровень. QA-инженер занимается не только поиском ошибок в коде, но и предотвращением их появления в будущем. Это работа с процессами: как мы пишем требования? Как разработчики передают код на проверку? Достаточно ли у нас времени на тесты? QA сфокусирован на процессе: «Что нам нужно изменить в работе команды, чтобы продукт изначально получался качественным?».

> Качество — это степень соответствия совокупности присущих характеристик объекта требованиям. > > ISO 9000:2015

Представьте строительство дома. Тестировщик проверяет, открывается ли дверь. QC-специалист проверяет, соответствует ли весь дом чертежам и нормам безопасности перед сдачей жильцам. QA-инженер следит за тем, чтобы бетон был правильной марки, рабочие не прогуливали, а чертежи были понятны строителям еще до того, как заложен фундамент.

Психология тестирования: почему разработчики не видят свои ошибки

Один из главных барьеров в работе QA — это разница в ментальных моделях. Разработчик по своей природе — созидатель. Его задача — заставить систему работать, построить логические связи. Когда программист тестирует свой код, он подсознательно идет по «счастливому пути» (Happy Path), вводя корректные данные и совершая логичные действия.

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

  • Что будет, если в поле «Возраст» ввести отрицательное число?
  • Что, если нажать кнопку «Оплатить» десять раз подряд?
  • Как поведет себя приложение, если в момент загрузки данных пропадет интернет?
  • Профессиональный парадокс заключается в том, что тестировщик помогает разработчику, находя его ошибки, но психологически это может восприниматься как критика. Поэтому Soft Skills (мягкие навыки) — умение вежливо и аргументированно доносить информацию о дефектах — являются базовым требованием для Junior QA.

    Жизненный цикл разработки ПО (SDLC)

    Программное обеспечение не появляется из ниоткуда. Оно проходит через четко определенные этапы, которые называются Software Development Life Cycle (SDLC). Понимание SDLC позволяет тестировщику понять, где именно он должен включиться в работу.

    1. Сбор и анализ требований (Requirement Analysis)

    На этом этапе бизнес-аналитики и заказчики решают, что именно нужно создать. Результатом становится документ — спецификация (SRS — Software Requirements Specification). Роль QA: Тестирование требований. Это самый дешевый этап для исправления ошибок. Если в требованиях написано «система должна работать быстро», QA должен указать на неопределенность и попросить конкретики: «быстро — это сколько в миллисекундах?». Исправить строчку в документе стоит 1 руб., исправить ту же ошибку в готовом коде — 100 руб., а после релиза — 1000 руб.

    2. Проектирование (Design)

    Архитекторы решают, как система будет устроена внутри: какие базы данных использовать, как сервисы будут общаться между собой. Роль QA: Анализ архитектуры на предмет «тестируемости». Например, закладывается ли возможность выгрузки логов или создания тестовых учетных записей.

    3. Разработка (Implementation / Coding)

    Программисты пишут код. Роль QA: На этом этапе может выполняться Unit-тестирование (модульное тестирование), которое чаще делают сами разработчики, но QA может помогать в написании автотестов или подготовке тестовых данных.

    4. Тестирование (Testing)

    Когда код написан и собран в работающее приложение, наступает звездный час QA. Здесь проводятся все основные виды проверок: функциональные, нагрузочные, проверки безопасности и удобства использования. Результат: Список багов и отчет о качестве.

    5. Развертывание и внедрение (Deployment)

    Продукт выпускается на рынок (релиз) или устанавливается на серверы заказчика. Роль QA: Дымовое тестирование (Smoke Test) на реальном окружении, чтобы убедиться, что при переносе ничего не «отвалилось».

    6. Поддержка и сопровождение (Maintenance)

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

    Модели SDLC: от водопада до гибкости

    То, как именно эти этапы сменяют друг друга, зависит от выбранной модели разработки.

    Каскадная модель (Waterfall)

    Это классический линейный подход. Каждый этап строго следует за предыдущим. Вы не можете начать кодить, пока не утверждены все требования, и не можете начать тестировать, пока не написан весь код.
  • Плюсы: Четкое планирование, фиксированные сроки и бюджет.
  • Минусы: Тестирование начинается в самом конце. Если на этапе требований была допущена фатальная ошибка, команда узнает об этом спустя месяцы работы.
  • Где применяется: В проектах с жесткими требованиями, где ошибка недопустима (космос, медицина, авиация).
  • V-модель (V-Model)

    Улучшенная версия Waterfall, которая делает акцент на тестировании. Она визуализируется как буква V, где левая сторона — это этапы проектирования, а правая — уровни тестирования. Ключевая идея: для каждого этапа разработки сразу готовится план тестирования.
  • Требования анализируются — сразу пишется план приемочных тестов.
  • Проектируется архитектура — готовится план системных тестов.
  • Это позволяет находить логические ошибки задолго до написания кода.

    Итерационная и инкрементальная модели

    Продукт создается частями. Сначала делается минимально рабочая версия (MVP), затем она обрастает новыми функциями. Каждая итерация — это маленький SDLC.

    Agile (Гибкая разработка)

    Сегодня это стандарт индустрии. Agile — это не конкретная инструкция, а философия, описанная в Agile-манифесте. Самые популярные реализации — Scrum и Kanban. В Agile тестирование вплетено в процесс постоянно. Нет «фазы тестирования» в конце месяца — проверки идут параллельно с разработкой. Это требует от QA высокой адаптивности и умения работать в условиях неполных требований.

    С чего начинается качество: тестирование требований

    Многие начинающие тестировщики думают, что их работа начинается с открытия приложения. Это опасное заблуждение. Работа начинается с чтения документации.

    Существует понятие статического тестирования — это проверка кода или документации без запуска программы. Тестируя требования, мы ищем логические дыры. Хорошее требование должно обладать набором характеристик:

  • Завершенность: описаны ли все сценарии? (Например, что будет, если пользователь введет правильный пароль, но его аккаунт заблокирован?).
  • Недвусмысленность: поймут ли два разных человека это требование одинаково?
  • Проверяемость (Testability): можем ли мы объективно проверить выполнение этого условия? Требование «интерфейс должен быть красивым» — не тестируемо. Требование «цвет кнопки должен соответствовать HEX-коду #FF0000» — тестируемо.
  • Атомарность: требование нельзя разбить на более мелкие части.
  • Прослеживаемость (Traceability): мы понимаем, откуда взялось это требование и какой бизнес-цели оно служит.
  • Жизненный цикл тестирования (STLC)

    Внутри общего жизненного цикла разработки (SDLC) существует свой внутренний цикл — Software Testing Life Cycle (STLC). Он структурирует работу QA-отдела.

    Этап 1: Анализ требований

    Тестировщики изучают спецификацию и задают вопросы аналитикам. Выясняются технические ограничения.

    Этап 2: Планирование тестирования (Test Planning)

    Создается Тест-план (Test Plan). Это стратегический документ, отвечающий на вопросы:
  • Что мы тестируем? (Объект тестирования).
  • Что НЕ тестируем? (Границы).
  • Когда мы закончим? (Критерии выхода).
  • Какие инструменты нам нужны? (Postman, Selenium, JIRA).
  • Кто в команде за что отвечает?
  • Этап 3: Проектирование тестов (Test Design)

    На этом этапе создаются Тест-кейсы (Test Cases) — пошаговые инструкции для проверки. Здесь применяются техники тест-дизайна (эквивалентное разделение, граничные значения), чтобы не проверять всё подряд, а выбрать самые эффективные сценарии.

    Этап 4: Настройка тестовой среды (Test Environment Setup)

    Тестировщику нужно окружение — специальный сервер (Staging или Test), где развернута база данных и само приложение. Важно, чтобы это окружение было максимально похоже на «боевое» (Production), где будут работать реальные пользователи.

    Этап 5: Выполнение тестов (Test Execution)

    Прохождение тест-кейсов. Если фактический результат совпал с ожидаемым — тест пройден (Passed). Если нет — найден баг (Failed), и тестировщик заводит баг-репорт.

    Этап 6: Завершение цикла (Test Closure)

    Подготовка отчета (Test Summary Report). Команда анализирует: сколько багов нашли, какие из них исправили, а какие решили оставить «на потом».

    Почему 100% тестирование невозможно

    Один из фундаментальных принципов тестирования гласит: исчерпывающее тестирование недостижимо.

    Рассмотрим простой пример: поле ввода имени пользователя, которое принимает от 1 до 20 символов латиницы. Количество комбинаций букв, их регистров и последовательностей исчисляется триллионами. Если мы будем проверять каждую комбинацию по одной секунде, жизнь Вселенной закончится раньше, чем мы проверим одно это поле.

    Поэтому задача QA — не проверить всё, а обеспечить достаточный уровень уверенности в продукте при ограниченных ресурсах (времени и деньгах). Для этого используются приоритеты: сначала проверяем то, что ломается чаще всего, и то, что принесет наибольший ущерб бизнесу в случае поломки.

    Цена ошибки и принцип «Shift Left»

    Существует прямая зависимость между временем обнаружения дефекта и стоимостью его исправления.

  • Если разработчик заметил опечатку в названии переменной во время написания кода — цена исправления равна 0.
  • Если тестировщик нашел баг во время STLC — нужно время на описание бага, его перепроверку и повторную сборку приложения.
  • Если баг нашел пользователь — это репутационные потери, возможные судебные иски, экстренный выпуск исправлений (Hotfix), который может сломать что-то еще.
  • Современная концепция Shift Left (сдвиг влево) призывает начинать тестирование как можно раньше — буквально с первого дня обсуждения идеи. Чем левее по временной шкале SDLC мы находим проблему, тем дешевле она обходится компании.

    Роль Junior QA в команде

    Начинающий тестировщик чаще всего подключается на этапах выполнения тестов и частично на этапе проектирования. Основные задачи Junior-специалиста:

  • Прохождение готовых тест-кейсов.
  • Грамотное описание найденных дефектов (баг-репортов).
  • Проверка исправленных багов (Bug Re-test).
  • Актуализация тестовой документации.
  • Однако, чтобы вырасти до уровня Middle и выше, нужно учиться смотреть на продукт шире — понимать бизнес-цели заказчика и архитектурные сложности, с которыми сталкиваются разработчики.

    Взаимосвязь SDLC и STLC на практике

    Представим разработку новой функции: «Вход в личный кабинет по номеру телефона».

  • SDLC (Анализ): Бизнес говорит: «Хотим вход по SMS». QA на встрече спрашивает: «А что, если SMS не пришло в течение минуты? Нужна ли кнопка повторной отправки?».
  • STLC (Планирование): QA-лид решает, что проверять будем на Android и iOS, а SMS будем перехватывать в специальном логе, чтобы не тратить деньги на реальные рассылки.
  • STLC (Дизайн): Junior QA пишет тест-кейс: «Ввести номер, дождаться кода, ввести верный код -> успех». И негативный: «Ввести неверный код 3 раза -> блокировка на 5 минут».
  • SDLC (Разработка): Программист пишет код.
  • STLC (Выполнение): Тестировщик берет телефон, вводит номер и видит, что приложение «падает» при попытке отправить SMS. Он заводит баг-репорт.
  • SDLC (Поддержка): После релиза выясняется, что у оператора в Казахстане SMS приходят с задержкой. QA заводит задачу на изменение логики ожидания кода.
  • Этот круговорот продолжается на протяжении всей жизни продукта. Тестирование — это не финальный аккорд, а непрерывный процесс сопровождения разработки.

    2. Методологии разработки и иерархия уровней тестирования

    Методологии разработки и иерархия уровней тестирования

    Представьте, что вы строите современный небоскреб. Если вы начнете стеклить окна до того, как застыл бетон в фундаменте, здание неминуемо рухнет. В разработке программного обеспечения (ПО) действуют те же законы: последовательность действий и глубина проверки каждого кирпичика определяют, будет ли продукт работать стабильно под нагрузкой или «сложится» при первом же обновлении. Тестировщик — это не просто человек, который ищет ошибки, это инженер, понимающий архитектуру производственных процессов и знающий, на каком этапе и с какой детальностью нужно проводить инспекцию.

    Гибкие методологии: жизнь внутри Agile, Scrum и Kanban

    В предыдущем материале мы коснулись классических моделей, таких как Waterfall. Однако современный рынок диктует условия неопределенности: требования меняются быстрее, чем программист успевает дописать код. Здесь на сцену выходит Agile — не просто методология, а философия разработки, основанная на итеративности и тесном взаимодействии внутри команды.

    Для QA-инженера переход к Agile означает смену парадигмы. В Waterfall тестирование начиналось в самом конце, когда продукт был «отлит в граните». В Agile тестировщик вовлечен в процесс с первого дня.

    Scrum: ритм спринтов и роль QA

    Scrum — это наиболее структурированный фреймворк внутри Agile. Весь процесс разбит на равные отрезки времени — спринты (обычно от 1 до 4 недель).

    В начале спринта команда проводит планирование (Sprint Planning). Здесь Junior QA совершает свою первую важную работу: анализ пользовательских историй (User Stories). Если в истории написано «Пользователь должен иметь возможность быстро войти в систему», тестировщик обязан задать уточняющие вопросы:

  • Что значит «быстро»? (Менее 2 секунд? Менее 500 мс?)
  • Какие способы входа предусмотрены? (Логин/пароль, соцсети, биометрия?)
  • Что происходит, если пользователь вводит неверные данные?
  • В Scrum существует понятие Definition of Done (DoD) — критерии готовности задачи. Задача не считается выполненной, пока она не прошла тестирование и по ней не закрыты все критические баги. Это кардинально отличается от старых подходов, где программист мог сказать: «Я код написал, а проверять — это уже не моя забота».

    Ежедневные встречи — Daily Stand-up — позволяют тестировщику синхронизироваться с разработчиками. Если вы как QA понимаете, что разработка фичи затягивается и у вас останется всего два часа на проверку в конце спринта, об этом нужно заявить именно на «дейли». Это предотвращает возникновение «эффекта бутылочного горлышка».

    Kanban: визуализация и непрерывный поток

    В отличие от Scrum, в Kanban нет жестких временных рамок (спринтов). Весь процесс визуализируется на доске, где задачи движутся по колонкам: Backlog → To Do → In Progress → Testing → Done.

    Ключевой инструмент здесь — WIP-лимиты (Work In Progress). Это ограничение на количество задач, которые могут одновременно находиться в одной колонке. Например, если лимит в колонке «Testing» равен 3, а там уже лежат три задачи, разработчики не могут передвинуть туда четвертую, даже если они её закончили. Им придется остановиться и помочь тестировщику «разгрести» завал. Для QA это идеальная среда, так как она защищает от перегрузок и заставляет всю команду нести ответственность за качество, а не только отдел тестирования.

    Иерархия уровней тестирования: от малого к великому

    Чтобы эффективно проверять систему, нельзя просто «тыкать в кнопки» интерфейса. Существует четкая иерархия уровней тестирования, которая визуализируется в виде пирамиды. Чем ниже уровень, тем больше на нем тестов, тем они быстрее и дешевле в исполнении.

    Модульное тестирование (Unit Testing)

    Это фундамент. На данном уровне проверяются минимально возможные части кода — отдельные функции, методы или классы.

    > Модульное тестирование — это проверка изолированных компонентов системы в отрыве от их окружения и других модулей.

    Обычно Unit-тесты пишут сами разработчики. Почему это важно знать Junior QA? Потому что если на проекте нет Unit-тестов, вся нагрузка по проверке логики ложится на плечи тестировщика на более высоких, дорогих уровнях.

    Пример: Представьте функцию расчета скидки в интернет-магазине.

    Unit-тест проверит только эту формулу: подаст на вход 1000 и 10, и ожидает на выходе 100. Ему не нужен работающий сайт, база данных или интернет. Это происходит мгновенно в оперативной памяти.

    Интеграционное тестирование (Integration Testing)

    Когда мы убедились, что отдельные «кирпичики» работают, нам нужно проверить, как они стыкуются друг с другом. Интеграционное тестирование проверяет взаимодействие между модулями, а также между системой и внешними сервисами (базами данных, API, сторонними платежными шлюзами).

    Существует несколько подходов к интеграции:

  • Снизу вверх (Bottom-up): сначала тестируем низкоуровневые модули, затем объединяем их в кластеры.
  • Сверху вниз (Top-down): идем от высокоуровневых модулей к деталям, используя «заглушки» (stubs) вместо еще не написанных нижних уровней.
  • Большой взрыв (Big Bang): все модули собираются вместе и тестируются разом. Это самый рискованный метод, так как при возникновении ошибки крайне сложно понять, в каком именно месте произошел сбой взаимодействия.
  • Системное тестирование (System Testing)

    Здесь продукт проверяется целиком как единое целое. Это «царство» QA-инженера. На этом уровне мы проверяем соответствие системы исходным требованиям (SRS), которые обсуждали в первой лекции.

    Системное тестирование проводится на среде, максимально приближенной к боевой (Staging или Pre-production). Здесь мы проверяем не только функциональность («работает ли кнопка?»), но и нефункциональные характеристики: производительность, безопасность, удобство использования.

    Приемочное тестирование (Acceptance Testing)

    Это финальный этап перед релизом. Цель — не найти баги (они уже должны быть исправлены), а подтвердить, что продукт готов к эксплуатации и решает бизнес-задачи заказчика.

    Виды приемочного тестирования: * UAT (User Acceptance Testing): проводится конечными пользователями или заказчиком. * Альфа-тестирование: проводится сотрудниками компании-разработчика, но не командой проекта. * Бета-тестирование: продукт отдается ограниченной группе реальных пользователей.

    Пирамида тестирования и антипаттерны

    Идеальное распределение усилий описывается концепцией Пирамиды тестирования (Test Pyramid), предложенной Майком Коном.

  • Основание (Unit): 70–80% тестов. Быстрые, дешевые, запускаются при каждом изменении кода.
  • Середина (Integration/API): 15–20% тестов. Проверяют логику взаимодействия.
  • Вершина (UI/E2E): 5–10% тестов. Проверки через интерфейс пользователя. Они самые медленные, хрупкие и дорогие в поддержке.
  • Антипаттерн «Рожок мороженого» (Ice Cream Cone)

    Это ситуация, когда пирамида переворачивается. У команды почти нет Unit-тестов, зато есть огромный пласт ручного тестирования через UI. Последствия: * Релиз затягивается на недели («регресс» занимает слишком много времени). * Ошибки находятся поздно, когда их исправление стоит дорого. * Тестировщики превращаются в «обезьянок», выполняющих одни и те же действия вручную.

    Антипаттерн «Кубок» (The Cup)

    Ситуация, когда много Unit-тестов и много UI-тестов, но полностью проигнорирован интеграционный слой. В итоге каждый модуль работает идеально сам по себе, но при попытке пользователя оформить заказ система «падает», потому что модуль оплаты не может договориться с модулем склада.

    Практическое применение уровней на примере формы регистрации

    Разберем, как уровни тестирования распределяются при проверке одной задачи — «Регистрация нового пользователя по email».

    1. Unit-уровень: Разработчик пишет тест для функции isValidEmail(email). * Тест 1: user@example.com → true. * Тест 2: user@com → false. * Тест 3: пустая строка → false. Это происходит без запуска браузера.

    2. Интеграционный уровень: Проверяем связь между кодом регистрации и базой данных. * Сценарий: Отправляем запрос на создание пользователя. * Проверка: Появилась ли запись в таблице users? Корректно ли зашифрован пароль в БД?

    3. Системный уровень (QA): Тестировщик открывает браузер (или использует инструменты автоматизации) и проходит весь путь. * Сценарий: Заполнить все поля формы корректными данными, нажать «Зарегистрироваться». * Ожидаемый результат: Появилось сообщение «Успех», пришло письмо с подтверждением, пользователь перенаправлен в личный кабинет. Здесь мы проверяем и UI (верстка, кнопки), и логику, и внешние интеграции (почтовый сервер) одновременно.

    4. Приемочный уровень: Заказчик (Product Owner) проверяет, соответствует ли форма регистрации брендированию компании и удобно ли пользователю вводить данные с мобильного телефона.

    Роль QA в различных методологиях: нюансы и ловушки

    Работа Junior QA в Agile-команде требует высокой адаптивности. Часто возникает соблазн начать тестирование только тогда, когда задача перешла в статус "Ready for QA". Однако это ловушка.

    Принцип "Am I blocked?" В Kanban и Scrum тестировщик должен постоянно мониторить доску. Если вы видите, что разработка сложной фичи завершена на 80%, начните готовить тестовые данные и чек-листы заранее. Это называется Test Analysis и Test Design. Когда задача упадет вам в работу, у вас уже будет готов «план атаки».

    Взаимодействие с разработчиками В итерационных моделях границы между ролями размываются. Хороший тон для QA — прийти к разработчику, когда тот еще пишет код, и спросить: «А как ты обрабатываешь случай, если пользователь нажмет кнопку 'Назад' во время транзакции?». Это может предотвратить появление бага еще до того, как код будет собран. Такой подход экономит часы работы всей команды.

    Специфика регрессионного тестирования в итерациях

    Регрессионное тестирование — это проверка того, что новые изменения не сломали уже существующий функционал. В Agile это больная тема, так как код меняется постоянно.

    Чтобы не утонуть в проверках, QA-инженеры используют стратегию выборочного регресса. Мы не проверяем всё приложение каждый раз (это невозможно в рамках 2-недельного спринта без автоматизации). Мы выбираем:

  • Критический путь (Critical Path) — функции, без которых продукт бесполезен (например, логин, оплата).
  • Области, затронутые изменениями (Impact Analysis) — если программист правил модуль корзины, мы обязательно проверяем корзину и связанные с ней скидки, но можем не проверять смену аватарки в профиле.
  • Переход от теории к практике: выбор стратегии

    Понимание уровней и методологий дает тестировщику «рентгеновское зрение». Видя баг, опытный QA сразу понимает, на каком уровне он возник. * Если на кнопке написано «Sumbit» вместо «Submit» — это баг UI/Системного уровня. * Если при вводе длинного имени (256+ символов) сервер выдает ошибку 500 — это пропущенный Unit-тест или плохая обработка на уровне интеграции с БД. * Если система работает идеально, но заказчик говорит «нам не нужна регистрация через Facebook, мы работаем только в Китае» — это провал этапа сбора требований и приемочного тестирования.

    Знание иерархии позволяет Junior QA не просто «находить ошибки», а аргументированно объяснять разработчикам и менеджерам, почему тесты падают и где именно в архитектуре процесса произошел сбой. Это превращает тестировщика из «контролера в конце конвейера» в полноценного инженера по качеству.

    В следующих главах мы детально разберем, какие именно виды проверок существуют внутри системного уровня и как правильно выбирать техники тест-дизайна, чтобы минимизировать количество тестов, сохраняя при этом максимальное покрытие. Но помните: любая техника бессильна, если вы не понимаете, на какой ступени пирамиды вы сейчас находитесь и по каким правилам играет ваша команда — будь то строгий Scrum или свободный Kanban.