Основы тестирования для новичков: виды тестов и базовые инструменты

Основы тестирования для новичков: виды тестов и базовые инструменты

Введение

Тестирование программного обеспечения — это процесс исследования и проверки приложения с целью обнаружения ошибок, оценки качества и соответствия требованиям. В современной разработке тестирование является неотъемлемой частью жизненного цикла создания ПО, обеспечивающей надежность и удобство использования продукта.

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

Основные понятия и терминология

Ключевые термины

ТерминОпределениеПример
Баг (Bug)Ошибка в программе, приводящая к неожиданному поведениюКнопка "Сохранить" не сохраняет данные
Тест-кейсНабор условий для проверки определенной функциональностиПроверка входа с корректными данными
Тестовые данныеДанные, используемые для выполнения тестовЛогин: test@mail.com, Пароль: Test123!
ОкружениеСреда, в которой выполняется тестированиеWindows 10, Chrome 120, База данных MySQL
ДефектНесоответствие фактического результата ожидаемомуОжидалось: успешный вход. Факт: ошибка 500
РегрессияПоявление ошибки в ранее работавшей функциональностиПосле обновления перестал работать поиск

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

По уровню тестирования

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

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

Характеристики:

  • Выполняется разработчиками
  • Автоматизировано
  • Быстрое выполнение
  • Проверка логики отдельных функций

Пример тест-кейса:

Функция: calculateDiscount(price, percentage) Входные данные: price = 100, percentage = 10 Ожидаемый результат: 90

2. Интеграционное тестирование

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

Типы интеграции:

  • Большой взрыв (Big Bang) — все модули интегрируются одновременно
  • Инкрементальная — модули добавляются постепенно
  • Сверху вниз (Top-down) — от главных модулей к вспомогательным
  • Снизу вверх (Bottom-up) — от базовых модулей к верхнеуровневым

3. Системное тестирование

Проверка системы целиком на соответствие функциональным и нефункциональным требованиям.

Включает проверку:

  • Полных бизнес-процессов
  • Совместимости компонентов
  • Производительности системы
  • Безопасности

4. Приемочное тестирование

Финальная проверка готовности продукта к эксплуатации с точки зрения конечного пользователя.

По типу исполнения

ТипОписаниеПреимуществаНедостатки
РучноеТесты выполняются человеком вручнуюГибкость, обнаружение UX-проблемМедленно, подвержено ошибкам
АвтоматизированноеТесты выполняются программамиБыстро, повторяемо, надежноТребует времени на разработку

По знанию системы

Черный ящик (Black Box)

Тестирование без знания внутренней структуры системы. Тестировщик работает только с интерфейсом.

Техники черного ящика:

  • Эквивалентное разбиение
  • Анализ граничных значений
  • Таблицы решений
  • Попарное тестирование

Белый ящик (White Box)

Тестирование с полным знанием кода и архитектуры системы.

Метрики покрытия:

  • Покрытие операторов
  • Покрытие ветвей
  • Покрытие условий
  • Покрытие путей

Серый ящик (Gray Box)

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

Функциональное тестирование

Проверка соответствия функциональности системы заявленным требованиям.

Основные виды:

ВидЦельПример
Smoke TestingПроверка базовой работоспособностиЗапускается ли приложение?
Sanity TestingПроверка конкретной функции после измененийРаботает ли форма регистрации после правок?
РегрессионноеПроверка, что новые изменения не сломали существующий функционалВсе ли старые функции работают после обновления?
ПовторноеПроверка исправления найденных дефектовИсправлен ли баг #1234?

Нефункциональное тестирование

Оценка характеристик системы, не связанных напрямую с функциональностью.

Тестирование производительности

Виды нагрузочного тестирования:

  1. Load Testing — проверка при ожидаемой нагрузке
  2. Stress Testing — проверка при экстремальной нагрузке
  3. Spike Testing — проверка при резких скачках нагрузки
  4. Volume Testing — проверка при большом объеме данных
  5. Scalability Testing — проверка способности масштабирования

Ключевые метрики:

  • Время отклика (Response Time)
  • Пропускная способность (Throughput)
  • Использование ресурсов (CPU, RAM, Disk I/O)
  • Количество одновременных пользователей

Тестирование безопасности

Основные проверки:

  • SQL-инъекции
  • XSS-атаки
  • CSRF-атаки
  • Проверка авторизации и аутентификации
  • Шифрование данных
  • Безопасность API

Тестирование удобства использования (Usability)

Критерии оценки:

  • Понятность интерфейса
  • Легкость обучения
  • Эффективность использования
  • Запоминаемость
  • Удовлетворенность пользователей

Процесс тестирования

Жизненный цикл тестирования

1. Анализ требований  

2. Планирование тестирования  

3. Проектирование тестов  

4. Подготовка тестового окружения  

5. Выполнение тестов  

6. Анализ результатов и отчетность

7. Завершение тестирования

Создание тест-кейсов

Структура тест-кейса:

ЭлементОписаниеПример
IDУникальный идентификаторTC_LOGIN_001
НазваниеКраткое описание тестаВход с валидными данными
ПредусловияНачальное состояниеПользователь зарегистрирован
ШагиПоследовательность действий1. Открыть страницу входа<br>2. Ввести email<br>3. Ввести пароль<br>4. Нажать "Войти"
Ожидаемый результатЧто должно произойтиУспешный вход, переход в личный кабинет
ПриоритетВажность тестаHigh / Medium / Low
СтатусТекущее состояниеPass / Fail / Blocked / Not Run

Оформление баг-репортов

Обязательные элементы баг-репорта:

  1. Заголовок — краткое описание проблемы
  2. Окружение — где воспроизводится баг
  3. Шаги воспроизведения — как получить ошибку
  4. Фактический результат — что происходит
  5. Ожидаемый результат — что должно происходить
  6. Приоритет — насколько критичен баг
  7. Серьезность — влияние на систему
  8. Вложения — скриншоты, логи, видео

Классификация багов по приоритету:

ПриоритетОписаниеПример
BlockerБлокирует работу системыПриложение не запускается
CriticalКритическая функциональность не работаетНевозможно оформить заказ
MajorЗначительная проблемаНеверный расчет скидки
MinorНезначительная проблемаОпечатка в тексте
TrivialКосметический дефектНеровное выравнивание элемента

Базовые инструменты тестирования

Системы управления тестированием

TestRail

Возможности:

  • Управление тест-кейсами
  • Планирование тестовых прогонов
  • Отслеживание результатов
  • Интеграция с баг-трекерами
  • Детальная отчетность

Преимущества:

  • Интуитивный интерфейс
  • Гибкая настройка
  • API для интеграций
  • Поддержка Agile-методологий

Zephyr

Особенности:

  • Плагин для Jira
  • Управление тестовыми циклами
  • Real-time отчеты
  • Поддержка BDD

Баг-трекинговые системы

Jira

Функциональность:

  • Создание и отслеживание задач
  • Agile-доски (Scrum, Kanban)
  • Workflow настройки
  • Интеграция с инструментами разработки
  • Расширенная отчетность

Типы задач:

  • Bug — дефект
  • Task — задача
  • Story — пользовательская история
  • Epic — большая функциональность
  • Sub-task — подзадача

Bugzilla

Характеристики:

  • Open-source решение
  • Продвинутый поиск
  • Email-уведомления
  • Настраиваемые поля
  • Система прав доступа

Инструменты для API-тестирования

Postman

Возможности:

  • Отправка HTTP-запросов
  • Создание коллекций
  • Написание тестов на JavaScript
  • Переменные окружения
  • Автоматизация через Newman

Пример теста в Postman:

javascript

pm.test("Статус код 200", function () {     pm.response.to.have.status(200); });  pm.test("Время ответа меньше 200ms", function () {     pm.expect(pm.response.responseTime).to.be.below(200); });

SoapUI

Функции:

  • Тестирование SOAP и REST API
  • Функциональное тестирование
  • Нагрузочное тестирование
  • Мокирование сервисов
  • Безопасность API

Инструменты автоматизации UI

Selenium WebDriver

Компоненты:

  • WebDriver API
  • Selenium Grid
  • Selenium IDE

Поддерживаемые языки:

  • Java
  • Python
  • C#
  • JavaScript
  • Ruby

Пример кода (Python):

python

from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") element = driver.find_element(By.ID, "login-button") element.click()

Cypress

Преимущества:

  • Выполнение в браузере
  • Автоматическое ожидание
  • Time Travel debugging
  • Скриншоты и видео
  • Простой синтаксис

Инструменты для мобильного тестирования

Appium

Особенности:

  • Кроссплатформенность (iOS, Android)
  • Поддержка нативных и гибридных приложений
  • Использование WebDriver протокола
  • Не требует изменения кода приложения

Android Studio Emulator / Xcode Simulator

Возможности:

  • Эмуляция различных устройств
  • Тестирование разных версий ОС
  • Симуляция сетевых условий
  • GPS и датчики
  • Отладка приложений

Инструменты нагрузочного тестирования

JMeter

Функциональность:

  • Тестирование веб-приложений
  • Поддержка различных протоколов
  • GUI и CLI режимы
  • Распределенное тестирование
  • Расширяемость через плагины

Основные элементы тест-плана:

  1. Thread Group — группа пользователей
  2. Samplers — типы запросов
  3. Listeners — сбор результатов
  4. Assertions — проверки
  5. Timers — задержки

Gatling

Характеристики:

  • Высокая производительность
  • DSL на Scala
  • Детальные отчеты
  • Интеграция с CI/CD
  • Запись сценариев

Вспомогательные инструменты

Charles Proxy / Fiddler

Применение:

  • Перехват HTTP/HTTPS трафика
  • Модификация запросов и ответов
  • Симуляция медленного интернета
  • Анализ API
  • Отладка мобильных приложений

Browser DevTools

Возможности:

  • Инспектирование элементов
  • Консоль JavaScript
  • Сетевые запросы
  • Производительность
  • Мобильная эмуляция
  • Local Storage и Cookies

Методологии тестирования

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

Этапы:

  1. Анализ требований
  2. Проектирование
  3. Разработка
  4. Тестирование
  5. Внедрение
  6. Поддержка

Особенности тестирования:

  • Тестирование начинается после разработки
  • Подробная документация
  • Сложность внесения изменений
  • Высокий риск обнаружения критических багов поздно

Agile

Принципы тестирования в Agile:

  • Непрерывное тестирование
  • Тесная работа с командой
  • Быстрая обратная связь
  • Адаптивность к изменениям
  • Автоматизация регрессии

Роль тестировщика в Scrum:

  • Участие в планировании спринта
  • Создание тестов на основе User Stories
  • Ежедневное тестирование
  • Демонстрация результатов
  • Ретроспектива

Test-Driven Development (TDD)

Цикл TDD:

  1. Red — написать тест, который не проходит
  2. Green — написать минимальный код для прохождения теста
  3. Refactor — улучшить код без изменения функциональности

Behavior-Driven Development (BDD)

Формат сценариев (Gherkin):

Feature: Авторизация пользователя

Scenario: Успешный вход в систему     

Given пользователь находится на странице входа    

When пользователь вводит корректный email "user@test.com"     

And пользователь вводит корректный пароль "Password123"     

And нажимает кнопку "Войти"     

Then пользователь попадает в личный кабинет    

And видит приветственное сообщение

Метрики тестирования

Основные метрики

МетрикаФормулаИнтерпретация
Покрытие тестами(Покрытые требования / Все требования) × 100%Полнота тестирования
Плотность дефектовКоличество дефектов / Размер модуляКачество кода
Эффективность тестирования(Найденные дефекты / Все дефекты) × 100%Качество тестирования
Скорость закрытия дефектовЗакрытые дефекты / Период времениПроизводительность команды
Процент пройденных тестов(Пройденные тесты / Все тесты) × 100%Готовность продукта

Отчетность

Типы отчетов:

  1. Ежедневный отчет
    • Выполненные тесты
    • Найденные баги
    • Блокирующие проблемы
  2. Отчет по итогам спринта
    • Покрытие функциональности
    • Статистика дефектов
    • Риски
  3. Релизный отчет
    • Готовность к релизу
    • Известные проблемы
    • Рекомендации

Лучшие практики для начинающих

Советы по написанию тест-кейсов

  1. Атомарность — один тест проверяет одну функцию
  2. Независимость — тесты не зависят друг от друга
  3. Повторяемость — одинаковый результат при повторении
  4. Понятность — четкие шаги и ожидаемые результаты
  5. Приоритизация — сначала критичная функциональность

Эффективное тестирование

Техники поиска багов:

  • Исследовательское тестирование
  • Негативное тестирование
  • Граничные значения
  • Комбинации входных данных
  • Стресс-сценарии

Принципы эффективной работы:

  1. Документируйте все — скриншоты, логи, шаги
  2. Коммуницируйте — общайтесь с командой
  3. Изучайте продукт — понимайте бизнес-логику
  4. Автоматизируйте рутину — повторяющиеся проверки
  5. Развивайтесь — изучайте новые инструменты и подходы

Типичные ошибки новичков

ОшибкаПоследствияРешение
Поверхностное тестированиеПропуск критических баговГлубокий анализ функциональности
Плохое описание баговСложность воспроизведенияДетальные баг-репорты
Игнорирование нефункциональных требованийПроблемы с производительностьюКомплексное тестирование
Отсутствие приоритизацииТрата времени на неважноеФокус на критичных областях
Недостаточная коммуникацияНепонимание в командеРегулярное общение

Развитие карьеры в тестировании

Необходимые навыки

Hard Skills:

  • Теория тестирования
  • SQL и работа с БД
  • Основы программирования
  • API и веб-технологии
  • Инструменты тестирования
  • Основы автоматизации

Soft Skills:

  • Внимательность к деталям
  • Аналитическое мышление
  • Коммуникабельность
  • Критическое мышление
  • Умение работать в команде
  • Управление временем

Сертификации

Международные сертификации:

СертификацияОрганизацияУровень
ISTQB Foundation LevelISTQBНачальный
ISTQB Advanced LevelISTQBПродвинутый
Certified Agile TesterISTQBСпециализированный
CSTEQAIПрофессиональный
CSQAQAIПрофессиональный

Практические задания для самостоятельной работы

Задание 1: Создание тест-кейсов

Разработайте набор тест-кейсов для формы регистрации со следующими полями:

  • Email (обязательное)
  • Пароль (минимум 8 символов)
  • Подтверждение пароля
  • Имя (опциональное)
  • Согласие с условиями (чекбокс)

Задание 2: Анализ граничных значений

Для поля "Возраст" с ограничением 18-65 лет определите:

  • Валидные граничные значения
  • Невалидные граничные значения
  • Тестовые данные для проверки

Задание 3: Написание баг-репорта

На основе следующего сценария напишите баг-репорт: "При попытке добавить товар в корзину на мобильной версии сайта, кнопка 'Добавить' не реагирует на нажатие, хотя визуально меняет цвет."

Задание 4: Приоритизация тестов

Расставьте приоритеты для тестирования интернет-магазина при ограниченном времени:

  • Оформление заказа
  • Изменение аватара профиля
  • Поиск товаров
  • Отзывы о товарах
  • Оплата заказа
  • Сортировка товаров

Полезные ресурсы для дальнейшего изучения

Книги

  • "Тестирование программного обеспечения" — базовые концепции
  • "Agile Testing" — тестирование в Agile
  • "The Art of Software Testing" — классика тестирования
  • "Lessons Learned in Software Testing" — практический опыт

Онлайн-платформы

  • Coursera — курсы по тестированию
  • Udemy — практические курсы
  • Test Automation University — автоматизация
  • QA Academy — русскоязычные материалы

Сообщества

  • Software Testing Club
  • Ministry of Testing
  • QA-сообщества в Telegram
  • Stack Overflow — вопросы и ответы
  • Reddit r/QualityAssurance

Практика

  • GitHub — open-source проекты
  • BugCrowd — баг-баунти программы
  • TestProject — практика автоматизации
  • Exercism — задачи по программированию

Заключение

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

Ключевые факторы успеха в тестировании:

  • Системный подход к изучению продукта
  • Внимание к деталям и критическое мышление
  • Эффективная коммуникация с командой
  • Постоянное самообразование
  • Практический опыт и работа над реальными проектами

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