Введение в тестирование ПО: основные понятия, цели и жизненный цикл разработки (SDLC)
Введение в тестирование ПО: основные понятия, цели и жизненный цикл разработки (SDLC)
Добро пожаловать в мир обеспечения качества! Если вы читаете эту статью, значит, вы решили освоить профессию QA-инженера (Quality Assurance Engineer). Существует распространенный миф, что работа тестировщика заключается лишь в том, чтобы хаотично нажимать на кнопки и ломать программы. На самом деле, это структурированный, инженерный и творческий процесс, цель которого — сделать продукт лучше, надежнее и удобнее для пользователя.
В этой первой статье курса мы заложим фундамент ваших знаний: разберемся, чем QA отличается от тестирования, изучим жизненный цикл разработки программного обеспечения (SDLC) и поймем, почему находить ошибки на ранних этапах выгоднее для бизнеса.
Что такое тестирование и зачем оно нужно?
Тестирование программного обеспечения — это процесс исследования программного продукта, имеющий своей целью проверку соответствия между реальным поведением программы и её ожидаемым поведением на конечном наборе тестов, выбранных определенным образом.
Простыми словами, мы сравниваем то, как программа работает, с тем, как она должна работать согласно требованиям.
Основные цели тестирования
- Обнаружение дефектов: Найти ошибки до того, как их найдут пользователи.
- Повышение уверенности в качестве: Убедиться, что критический функционал работает исправно.
- Предоставление информации: Дать заказчику или менеджеру объективную картину о состоянии продукта (можно ли его выпускать в релиз).
- Предотвращение дефектов: Участвовать в разработке требований, чтобы избежать логических ошибок еще до написания кода.
Качество — это не действие, а привычка. (Аристотель)
QA, QC и Тестирование: в чем разница?
Новички часто путают понятия QA, QC и Testing. Давайте разберем их иерархию, так как это один из самых популярных вопросов на собеседованиях.
1. Quality Assurance (QA) — Обеспечение качества
Это процесс, направленный на предотвращение дефектов. QA охватывает весь цикл разработки. Это набор активностей, гарантирующих, что процессы разработки и тестирования выстроены правильно.
- Пример: Внедрение стандартов кодирования, проведение ревью документации, выбор методологии разработки.
2. Quality Control (QC) — Контроль качества
Это продукт-ориентированная деятельность. Цель QC — проверить, соответствует ли готовый продукт требованиям качества. Это поиск дефектов в уже созданном (или частично созданном) продукте.
- Пример: Проверка готовой сборки приложения перед релизом.
3. Testing — Тестирование
Это непосредственное исполнение тестов. Это часть QC, которая отвечает за фактическую проверку системы.
- Пример: Ручной запуск программы, ввод данных в форму логина и проверка, что вход выполнен успешно.
Краткий итог:
- QA создает процессы, чтобы ошибки не появлялись.
- QC проверяет продукт, чтобы найти пропущенные ошибки.
- Testing — это инструмент в руках QC.
Основные термины: Ошибка, Дефект, Сбой
В разговорной речи мы часто говорим «баг» или «глюк», но профессионал должен различать нюансы терминологии ISTQB (International Software Testing Qualifications Board).
- Error (Ошибка человека): Оплошность, допущенная разработчиком или аналитиком. Например, программист перепутал знак «плюс» и «минус» в коде.
- Defect / Bug (Дефект): Проявление ошибки в коде. Это то, что «сидит» внутри программы, но может пока не проявляться внешне.
- Failure (Сбой): Отклонение работы системы от ожидаемого результата. Это то, что видит пользователь, когда дефект срабатывает.
Цепочка выглядит так: Человек совершает ошибку -> В коде появляется дефект -> При использовании происходит сбой.
Жизненный цикл разработки ПО (SDLC)
Чтобы понять, когда и как нужно тестировать, необходимо знать, как вообще создаются программы. Этот процесс называется Software Development Life Cycle (SDLC).
Рассмотрим каждый этап и роль QA-инженера на нем:
1. Сбор и анализ требований (Requirement Analysis)
На этом этапе заказчик рассказывает, что он хочет получить. Аналитики превращают эти желания в техническую документацию (спецификации).
- Роль QA: Тестирование требований. Мы проверяем их на полноту, непротиворечивость и однозначность. Найти ошибку здесь — дешевле всего.
2. Дизайн и проектирование (Design)
Архитекторы и дизайнеры решают, как система будет выглядеть и работать изнутри (базы данных, интерфейсы, API).
- Роль QA: Создание тест-плана, определение стратегии тестирования. Мы решаем, как будем тестировать то, что еще не написано.
3. Разработка (Implementation / Coding)
Программисты пишут код.
- Роль QA: Написание тестовой документации (тест-кейсов, чек-листов). Иногда — начало модульного тестирования (если это не делают разработчики).
4. Тестирование (Testing)
Самый активный этап для нас. Код передается тестировщикам.
- Роль QA: Выполнение тестов, поиск багов, заведение отчетов о дефектах (баг-репортов), проверка исправлений (ретест).
5. Развертывание и поддержка (Deployment & Maintenance)
Продукт выходит на рынок (продакшн). Пользователи начинают с ним работать.
- Роль QA: Смоук-тестирование (быстрая проверка) на боевом сервере, анализ отзывов пользователей, тестирование обновлений и патчей.
Стоимость исправления ошибки
Один из фундаментальных принципов тестирования гласит: чем позже найдена ошибка, тем дороже ее исправить.
Представьте, что ошибка была допущена в требованиях (аналитик написал «кнопка должна быть красной», а заказчик хотел синюю).
- Если QA найдет это на этапе требований: Аналитик просто перепишет одно предложение в Word. Цена: 1$.
- Если ошибку найдут на этапе дизайна: Дизайнеру нужно перерисовать макет. Цена: 10$.
- Если ошибку найдут на этапе разработки: Программист уже написал код для красной кнопки. Ему нужно переписывать код и стили. Цена: 100$.
- Если ошибку найдут после релиза: Нужно останавливать сервера, выпускать срочный патч, извиняться перед пользователями, терять репутацию. Цена: 1000$ и выше.
Этот закон экспоненциального роста стоимости ошибки (Boehm's Curve) можно условно описать формулой:
где — итоговая стоимость исправления ошибки, — базовая стоимость исправления на этапе требований, а — коэффициент времени (этапа), прошедшего с момента появления ошибки.
Именно поэтому современный подход к разработке призывает к раннему тестированию (Shift Left Testing) — тестировщики должны подключаться к работе как можно раньше, еще на этапе обсуждения идеи.
Резюме
В этой статье мы разобрали базовые понятия, необходимые для старта в профессии:
- QA — это широкое понятие, включающее в себя выстраивание процессов.
- Тестирование — это проверка соответствия ожидаемого и реального результата.
- SDLC — это жизненный путь программы от идеи до поддержки.
- Главная задача тестировщика — не просто найти баг, а предотвратить его появление или найти его как можно раньше, чтобы сэкономить деньги компании.
В следующей статье мы углубимся в виды и уровни тестирования, узнаем, что такое «черный ящик» и чем функциональное тестирование отличается от нефункционального.