Раздел: 01 — Основы тестирования Уровень: Начинающий ISTQB Foundation Level v4.0, Глава 1.1
Определение тестирования
Согласно ISTQB, тестирование программного обеспечения — это процесс, включающий все жизненные циклы статической и динамической деятельности, связанные с планированием, подготовкой и оценкой программного продукта и связанных с ним рабочих продуктов, с целью определения соответствия требованиям, демонстрации того, что ПО пригодно для использования и обнаружения дефектов.
Простыми словами: тестирование — это проверка того, что программное делает то, что от него ожидают, и нахождение ситуаций, где это не так.
Цели тестирования
У тестирования есть несколько ключевых целей:
1. Обнаружение дефектов (Finding Defects)
Основная и наиболее очевидная цель — найти ошибки в программном обеспечении до того, как они дойдут до конечного пользователя.
Пример: Тестировщик проверяет форму регистрации на сайте и обнаруживает, что поле «Возраст» принимает отрицательные числа. Это дефект, который нужно исправить.
2. Формирование уверенности в качестве (Building Confidence)
Тестирование помогает понять, насколько продукт готов к выпуску. Чем больше тестов пройдено успешно, тем выше уверенность в стабильности системы.
Пример: Перед релизом мобильного банка команда провела 500 тестов — 498 прошли успешно, 2 показали критические проблемы. Релиз откладывается до исправления.
3. Предотвращение дефектов (Preventing Defects)
Тестирование не только находит существующие ошибки, но и помогает предотвратить появление новых. Участие тестировщика на ранних этапах (ревью требований, дизайн-документов) выявляет проблемы до написания кода.
Пример: При анализе ТЗ тестировщик замечает противоречие: «цена указывается в долларах» и «валюта определяется автоматически по региону». Вопрос решён до начала разработки — сэкономлены дни работы.
4. Снижение рисков (Reducing Risk)
Тестирование помогает выявить и снизить риски на всех этапах разработки.
5. Предоставление информации для принятия решений (Providing Information)
Результаты тестирования дают менеджменту и заказчику объективную картину состояния продукта для принятия решений о выпуске.
Тестирование и отладка: в чём разница?
Это одна из самых частых путаниц у новичков. Вот чёткое разделение:
Критерий
Тестирование
Отладка (Debugging)
Цель
Найти дефект
Найти причину и исправить дефект
Кто выполняет
Тестировщик (QA)
Разработчик (Developer)
Вопрос
«Что не работает?»
«Почему не работает и как исправить?»
Результат
Баг-репорт
Исправленный код
Когда
На протяжении всего цикла
После обнаружения дефекта
Аналогия из жизни: Представьте автосервис. Тестировщик — это мастер, который проводит техосмотр и составляет список неисправностей. Разработчик — это механик, который вскрывает двигатель, находит причину поломки и чинит.
Тестировщик может помочь в отладке (например, предоставить точные шаги воспроизведения), но его основная задача — не исправлять, а обнаруживать.
Зачем нужно тестирование?
Стоимость дефектов растёт с каждой стадией
Один из ключевых принципов разработки ПО: чем позже обнаружен дефект, тем дороже его исправление.
Этап обнаружения Условная стоимость исправления
─────────────────────────────────────────────────────────
Требования (анализ) ×1
Дизайн / Архитектура ×2–5
Кодирование ×5–10
Тестирование (QA) ×10–50
После релиза (production) ×100–1000
Пример: Ошибка в формуле расчёта процентов по кредиту, обнаруженная на этапе анализа требований, исправляется изменением одного абзаца в документе. Та же ошибка, обнаруженная после запуска продукта в 1000 банковских отделений, может стоить миллионы — исправление кода, повторное тестирование, обновление систем, компенсации клиентам.
Тестирование нельзя пропустить
«Мы протестируем потом» — одна из самых дорогих фраз в IT.
Нет софта без багов. Вопрос только в том, кто их найдёт: тестировщик в офисе или клиент в продакшене.
Реальные примеры провалов из-за отсутствия тестирования
1. Ariane 5 (1996) — взрыв ракеты-носителя
Через 37 секунд после запуска ракета-носитель Ariane 5 взорвалась. Причина: переполнение 64-битного числа при конвертации в 16-битное. Стоимость: $370 млн. Код был взят с Ariane 4 и не был протестирован под новые условия полёта.
2. Therac-25 (1985–1987) — смертельные лучи
Медицинский ускоритель для лучевой терапии из-за программного бага выдавал дозу радиации в 100 раз выше нормы. Погибли как минимум 3 человека. Причина: race condition (состояние гонки), которая не была протестирована.
3. Knight Capital Group (2012) — $440 млн за 45 минут
Финансовая компания запустила обновление торгового ПО без надлежащего тестирования. За 45 минут алгоритм потерял $440 млн долларов. Компания была на грани банкротства.
4. Windows 10 обновление October 2018
Обновление Windows 10 удаляло файлы пользователей из папки «Документы». Microsoft отозвала обновление, но тысячи пользователей потеряли данные. Причина: недостаточное тестирование сценария миграции файлов.
5. Boeing 737 MAX (2018–2019)
Программный дефект в системе MCAS (Maneuvering Characteristics Augmentation System) привёл к двум авиакатастрофам и гибели 346 человек. Датчик угла атаки выдавал некорректные данные, система переводила самолёт в пикирование.
Что тестирование НЕ делает
Важно понимать ограничения:
Тестирование не доказывает отсутствие дефектов. Оно может лишь показать, что дефекты присутствуют.
Тестирование не гарантирует качество. Качество закладывается при разработке, тестирование лишь измеряет его.
Тестирование не может проверить все возможные сценарии. Полное тестирование невозможно (см. принцип «исчерпывающего тестирования»).
Ключевые выводы
Тестирование — это процесс оценки продукта, а не просто «кликанье по кнопкам»
Основные цели: найти дефекты, дать уверенность в качестве, предотвратить проблемы