Ручное тестирование: с нуля до Junior QA

Практический курс для старта карьеры в IT, охватывающий ключевые навыки ручного тестирования и подготовку к собеседованию [otus.ru](https://otus.ru/online/manualtesting). Вы научитесь писать тест-кейсы, работать с баг-трекерами и тестировать веб и мобильные приложения [skillbox.ru](https://skillbox.ru/course/manual-qa/).

1. Введение в тестирование: основы и виды

Введение в тестирование: основы и виды

Представьте, что вы переводите 50 000 рублей другу через мобильное приложение. Вы вводите номер, нажимаете «Отправить», деньги списываются с вашего счета, но другу не приходят. Они просто исчезли.

Для пользователя это катастрофа. Для банка — репутационный риск и судебные иски. А для IT-команды — это пропущенный баг (ошибка).

Тестирование — это не просто «тыканье кнопок» в надежде что-то сломать. Это инженерный процесс проверки того, соответствует ли фактическое поведение программы ожидаемому.

В этой статье мы разберем фундамент профессии, без которого невозможно пройти ни одно собеседование на позицию Junior QA.

QA, QC и Тестирование: в чем разница?

На собеседованиях это самый популярный вопрос для новичков. Многие путают эти понятия, но между ними есть строгая иерархия.

!Иерархия понятий: QA включает в себя QC, а QC включает в себя Тестирование

  • QA (Quality Assurance / Обеспечение качества) — это выстраивание процессов, чтобы баги не появлялись вовсе. Это превентивные меры: выбор правильных инструментов, обучение команды, аудит процессов разработки.
  • QC (Quality Control / Контроль качества) — это проверка готового продукта на соответствие требованиям. Это анализ результатов тестирования, метрики и решение о релизе.
  • Testing (Тестирование) — это непосредственное исполнение проверок: написание тестов, их прогон и поиск багов.
  • > «QA — это про процесс, QC — про продукт, а Тестирование — про конкретные действия».

    Почему баги нужно искать рано?

    Существует правило: чем позже найден баг, тем дороже его исправить. Если ошибку нашли на этапе требований, её исправление стоит копейки (переписать текст). Если ошибку нашли пользователи в продакшене (боевой версии), это стоит огромных денег (хотфиксы, простой системы, отток клиентов).

    Экономическую целесообразность тестирования можно описать упрощенной моделью роста стоимости ошибки:

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

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

    Основные виды тестирования

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

    1. По доступу к коду (Коробки)

    * Black Box (Черный ящик): Вы не видите код и не знаете, как устроена система внутри. Вы действуете как обычный пользователь: нажимаете кнопки, заполняете формы и смотрите на результат. Пример:* Вы вводите логин и пароль на сайте ru.hexlet.io. Вы не знаете, какой SQL-запрос идет в базу данных, вам важно лишь, вошли вы в систему или нет. * White Box (Белый ящик): У вас есть доступ к коду. Вы проверяете логику работы функций, циклов и условий. Этим чаще занимаются разработчики или автотестировщики. * Grey Box (Серый ящик): Комбинация. Вы видите часть «внутренностей» (например, базу данных или логи сервера), но тестируете через интерфейс.

    2. По цели (Функциональное vs Нефункциональное)

    Это разделение отвечает на вопросы «Что делает система?» и «Как она это делает?».

    Функциональное тестирование проверяет бизнес-логику. Вопрос:* Работает ли функция оплаты? Пример:* При нажатии кнопки «Купить» товар добавляется в корзину.

    Нефункциональное тестирование проверяет свойства системы. Вопрос:* Как быстро проходит оплата? Удобно ли нажимать кнопку? Безопасно ли это? Виды:* * Тестирование производительности (Performance): выдержит ли сайт 1000 пользователей одновременно? * Тестирование удобства (Usability): понятно ли пользователю, куда нажимать? * Тестирование безопасности (Security): можно ли украсть данные?

    3. По позитивности сценариев

    Позитивное тестирование: Проверка того, что программа работает правильно при корректных* данных. Это «Happy Path» (счастливый путь) — основной сценарий использования. Пример:* В поле «Возраст» вводим «25». Ожидание: система приняла данные. Негативное тестирование: Проверка того, как программа реагирует на некорректные* данные или нестандартные действия. Система не должна падать, она должна выдавать понятную ошибку. Пример:* В поле «Возраст» вводим «-5» или «двадцать». Ожидание: сообщение «Введите корректный возраст», приложение не закрылось аварийно.

    4. По уровню автоматизации

    * Ручное тестирование (Manual): Человек сам проходит сценарии, кликает мышкой и глазами сверяет результат. * Автоматизированное тестирование (Automation): Специальный скрипт (код) выполняет действия за человека и сравнивает результат. Используется для рутинных и повторяющихся задач.

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

    Представим, что нам нужно протестировать простую форму регистрации с полями «Email» и «Пароль». Как применить полученные знания?

    | Вид тестирования | Сценарий проверки | | :--- | :--- | | Функциональное | Можно ли зарегистрироваться с валидным email и паролем? | | Нефункциональное (UI) | Видны ли поля ввода? Красная ли кнопка «Войти»? | | Позитивное | Ввод test@mail.ru и пароля 123456. | | Негативное | Ввод email без @ (например, testmail.ru). | | Черный ящик | Проверка через браузер, без просмотра базы данных. | | Серый ящик | Регистрация пользователя и проверка через SQL-запрос, что запись действительно появилась в таблице users. |

    Уровни тестирования (Пирамида)

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

    !Пирамида тестирования: от модульных тестов к приемочным

  • Модульное (Unit): Проверка отдельной функции или класса в коде. (Делают разработчики).
  • Интеграционное: Проверка взаимодействия между модулями (например, как модуль «Корзина» передает данные модулю «Оплата»).
  • Системное: Проверка всей системы целиком как единого продукта. (Основная работа ручного тестировщика).
  • Приемочное (Acceptance): Финальная проверка перед передачей заказчику. Отвечает на вопрос: «Решает ли программа проблему бизнеса?».
  • Более подробно про пирамиду и место тестирования в разработке можно почитать в материалах ru.hexlet.io.

    Итоги

  • Тестирование — это сравнение ожидаемого результата с фактическим. Это часть QC, который является частью QA.
  • Чем раньше найден баг, тем дешевле его исправление. Экономия может быть стократной.
  • Функциональное тестирование проверяет «что делает система», а нефункциональное — «как она работает» (скорость, удобство).
  • Позитивные тесты проверяют работу на правильных данных, негативные — устойчивость к ошибкам и неверным данным.
  • Ручной тестировщик чаще всего работает на уровне системного тестирования, используя методы черного или серого ящика.
  • 2. Тест-дизайн: написание тест-кейсов

    Тест-дизайн: написание тест-кейсов

    В прошлой лекции мы разобрали, что тестирование — это сравнение ожидаемого результата с фактическим. Но как именно проводить это сравнение? Нельзя просто открыть приложение и начать хаотично нажимать на все подряд. Это называется «Monkey Testing», и оно редко бывает эффективным как основной метод.

    Профессиональный QA-инженер работает по сценариям. Главный документ, который описывает эти сценарии, называется Тест-кейс (Test Case).

    Что такое тест-кейс?

    Тест-кейс — это подробная инструкция, описывающая совокупность действий, условий и параметров, необходимых для проверки реализации конкретной функции.

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

    !Структура стандартного тест-кейса

    Атрибуты идеального тест-кейса

    В любой системе управления тестированием (TMS — Test Management System), будь то Jira, TestRail или простой Excel, тест-кейс состоит из обязательных полей. Разберем их на примере тестирования кнопки «В корзину».

    1. ID (Идентификатор)

    Уникальный номер. Обычно генерируется системой автоматически (например, TC-001). Помогает ссылаться на кейс в отчетах о багах.

    2. Title (Заголовок)

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

    Плохо:* Проверка кнопки. Плохо:* Что будет, если нажать купить. Хорошо:* Добавление товара в корзину со страницы каталога авторизованным пользователем.

    3. Preconditions (Предусловия)

    Состояние системы или действия, которые нужно выполнить до начала теста. Это подготовка окружения.

    Пример:* Пользователь зарегистрирован и авторизован. На балансе есть средства. Открыта страница товара.

    4. Steps (Шаги)

    Конкретные действия. Пишите их в повелительном наклонении («Нажать», «Ввести», «Перейти»).

  • Нажать на кнопку «В корзину».
  • Перейти в раздел «Корзина».
  • 5. Expected Result (Ожидаемый результат)

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

    Плохо:* Товар в корзине. Хорошо:* Счетчик на иконке корзины увеличился на 1. В корзине отображается добавленный товар с корректной ценой.

    6. Postconditions (Постусловия)

    Действия по возвращению системы в исходное состояние (необязательный атрибут).

    Пример:* Удалить товар из корзины, выйти из аккаунта.

    Тест-кейс vs Чек-лист

    Часто новички путают эти понятия.

    * Тест-кейс — это «Как тестировать». Детальный алгоритм. * Чек-лист — это «Что тестировать». Список идей или заголовков.

    | Характеристика | Тест-кейс | Чек-лист | | :--- | :--- | :--- | | Детализация | Высокая (шаги, данные) | Низкая (только суть) | | Время на создание | Долго | Быстро | | Поддержка | Трудно обновлять | Легко дополнять | | Для кого | Для джуниоров и сложных функций | Для опытных QA и смоук-тестов |

    Техники тест-дизайна: как писать меньше, а проверять больше

    Невозможно протестировать все значения. Если поле принимает возраст от 1 до 100 лет, нам не нужно писать 100 тест-кейсов. Нам помогут техники тест-дизайна.

    Классы эквивалентности (Equivalence Partitioning)

    Мы разбиваем все возможные данные на группы (классы), где обработка данных предположительно одинакова. Если программа работает для одного значения из группы, она будет работать и для остальных.

    Представим поле ввода возраста для покупки алкоголя (строго 18+).

  • Класс 1 (Невалидный): от 0 до 17. (Берем любое число, например, 10).
  • Класс 2 (Валидный): от 18 до 120. (Берем любое число, например, 25).
  • Вместо 120 тестов мы делаем всего 2.

    Анализ граничных значений (Boundary Value Analysis)

    Ошибки чаще всего случаются на границах классов. Разработчики часто путают операторы > и >=.

    Для проверки условия (где — возраст пользователя) мы должны проверить:

    * Граничное значение: 18 (должно пустить). * Значение перед границей: 17 (не должно пустить). * Значение после границы: 19 (должно пустить).

    Математически количество необходимых тестов для одной границы можно выразить упрощенно:

    где — набор тестовых значений, а — значение границы. Например, для границы 18 это будут значения 17, 18 и 19.

    !Визуализация граничных значений для диапазона от 18 до 65

    Практика: Пишем тест-кейс для формы логина

    Задача: Протестировать поле ввода пароля при регистрации. Требование: Пароль должен быть от 6 до 12 символов.

    Применим техники тест-дизайна. * Границы: 6 и 12. * Проверяем: 5 (негативный), 6 (позитивный), 12 (позитивный), 13 (негативный).

    Оформим один из кейсов (проверка нижней границы).

    ID: REG-001 Заголовок: Регистрация с паролем минимальной длины (6 символов) Предусловия:

  • Открыта страница регистрации site.com/reg.
  • Поле Email заполнено валидным адресом.
  • Шаги:

  • Ввести в поле «Пароль» значение 123456 (6 символов).
  • Нажать кнопку «Зарегистрироваться».
  • Ожидаемый результат:

  • Система принимает пароль.
  • Происходит редирект в личный кабинет.
  • Сообщение об ошибке отсутствует.
  • Инструменты для работы

    Где хранить тест-кейсы?

  • Excel / Google Sheets: Классика. Бесплатно, но неудобно отслеживать результаты прогонов и связывать с багами.
  • TestRail: Самый популярный специализированный инструмент. Удобная структура, отчеты, интеграция с Jira.
  • Jira (с плагинами Zephyr или Xray): Позволяет хранить тесты прямо рядом с задачами разработчиков.
  • Qase: Современный и удобный инструмент, набирающий популярность.
  • Советы начинающим

  • Атомарность. Один тест-кейс должен проверять одну вещь. Не пытайтесь в одном кейсе проверить и регистрацию, и покупку, и смену аватарки. Если тест упадет, вы не поймете, где именно проблема.
  • Независимость. Тест-кейсы не должны зависеть друг от друга. Если кейс №2 можно запустить только после кейса №1 — это плохая практика (кроме сквозных E2E сценариев).
  • Понятность. Пишите так, чтобы тест мог пройти человек, который видит проект впервые.
  • Итоги

  • Тест-кейс — это подробный алгоритм проверки с шагами и ожидаемым результатом. Чек-лист — это просто список идей для проверки.
  • Структура кейса: Заголовок, Предусловия, Шаги, Ожидаемый результат.
  • Ожидаемый результат — самая важная часть. Он должен быть конкретным и измеримым.
  • Используйте Классы эквивалентности и Граничные значения, чтобы сократить количество тестов без потери качества.
  • Хороший тест-кейс — атомарный (проверяет одну функцию) и независимый (может быть выполнен в любом порядке).