Computer Science

Учебник Тестирование ПО для начинающих

23 урока · 6 разделов · бесплатно, без регистрации

Концептуальный курс о культуре и стратегиях тестирования программного обеспечения — для разработчиков и начинающих QA-инженеров. Мы разбираем не инструменты, а мышление: зачем тестировать, почему ошибку дешевле найти рано, как устроена пирамида тестирования, как проектировать тест-кейсы, что такое TDD и как отличить хороший тест от плохого. Идеи показаны на запускаемых примерах Python с обычным assert. После курса вы будете понимать, что, как и зачем проверять, и сможете начать тестировать реальный проект.

Курс «Тестирование ПО: основы» состоит из 6 разделов и 23 уроков: Зачем тестировать, Уровни и виды тестирования, Проектирование тест-кейсов, Автоматизация и TDD, Качество тестов и метрики и Процесс и практика. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Зачем тестировать

    1. Цель тестирования: находить дефекты и давать уверенность

      Зачем нужно тестирование: находить дефекты до пользователя и давать команде уверенность в изменениях. Главные цели простыми словами.

    2. Стоимость ошибки: почему раньше — дешевле

      Почему дефект, найденный на этапе требований, стоит в разы дешевле, чем найденный в продакшене. Кривая роста стоимости ошибки.

    3. Верификация и валидация

      Чем верификация (делаем продукт правильно) отличается от валидации (делаем правильный продукт). Простое объяснение и примеры.

    4. Ручное и автоматизированное тестирование. Мифы

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

  2. 2 Уровни и виды тестирования

    1. Пирамида тестирования

      Пирамида тестирования: много быстрых unit-тестов, меньше интеграционных, ещё меньше медленных e2e. Почему именно такое соотношение.

    2. Уровни: модульное, интеграционное, системное, приёмочное

      Четыре уровня тестирования: unit, integration, system, acceptance. Что проверяет каждый и в каком порядке они применяются.

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

      Функциональное тестирование проверяет ЧТО делает система, нефункциональное — КАК: нагрузка, безопасность, юзабилити, производительность.

    4. Регрессионное, smoke и sanity

      Регрессионное тестирование защищает от поломки старого; smoke — быстрая проверка «вообще запускается»; sanity — точечная проверка фикса.

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

    1. Что такое тест-кейс и его структура

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

    2. Чёрный и белый ящик

      Тестирование чёрного ящика (по поведению, без знания кода) и белого ящика (по структуре кода). Когда какой подход уместен.

    3. Таблицы решений, попарное и баг-репорт

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

  4. 4 Автоматизация и TDD

    1. Что и зачем автоматизировать

      Какие тесты стоит автоматизировать, а какие нет. ROI автоматизации, стабильные требования и частота повторения как критерии.

    2. TDD: red-green-refactor

      Разработка через тестирование: сначала падающий тест (red), потом минимальный код (green), потом улучшение (refactor). Живой пример на Python.

    3. Паттерн AAA: Arrange-Act-Assert

      Структура хорошего теста: Arrange (подготовка), Act (действие), Assert (проверка). Почему один тест должен проверять одну вещь.

    4. Тест-дублёры и хрупкие тесты

      Mock, stub, fake — зачем подменять зависимости в тестах. Идея тест-дублёров и почему тесты на детали реализации становятся хрупкими.

  5. 5 Качество тестов и метрики

    1. Покрытие кода: что показывает и чего НЕ показывает

      Code coverage измеряет, какой код выполнился во время тестов. Почему 100% покрытия не означает отсутствия багов.

    2. Признаки хорошего теста

      Хороший тест быстрый, изолированный, детерминированный и читаемый (свойства FIRST). Что делает тест надёжным помощником.

    3. Антипаттерны: тесты на реализацию и флаки

      Главные антипаттерны тестов: проверка деталей реализации вместо поведения и флаки-тесты (нестабильные). Почему они опасны.

    4. Сколько тестов нужно

      Как понять, что тестов достаточно: риск, ценность, а не процент покрытия. Тестируем важное и опасное, а не всё подряд.

  6. 6 Процесс и практика

    1. Тестирование в жизненном цикле и Agile

      Где тестирование в жизненном цикле разработки. Почему в Agile QA участвует с самого начала, а не только в конце спринта.

    2. Shift-left и непрерывное тестирование

      Сдвиг тестирования влево по времени и непрерывное тестирование. Чем раньше проверяем, тем дешевле и быстрее обратная связь.

    3. CI и автозапуск тестов

      Непрерывная интеграция (CI) автоматически прогоняет тесты на каждый push. Идея пайплайна и связь с GitHub Actions.

    4. Инструменты и как начать тестировать проект

      Обзор тест-инструментов по экосистемам (pytest, JUnit, Jest, Playwright) и пошаговый план, как начать тестировать существующий проект.