1. Введение в тестирование: цели, принципы и роль QA в жизненном цикле разработки (SDLC)
Введение в тестирование: цели, принципы и роль QA в жизненном цикле разработки (SDLC)
Добро пожаловать в курс «Основы тестирования программного обеспечения». Мы начинаем наше путешествие в мир качества, поиска дефектов и создания надежных цифровых продуктов.
Многие считают, что тестирование — это просто «тыканье» кнопок в приложении в надежде, что оно сломается. Однако на профессиональном уровне это сложная инженерная дисциплина, требующая аналитического склада ума, внимательности и понимания того, как создается программное обеспечение.
В этой первой статье мы разберем фундамент: что такое тестирование на самом деле, чем оно отличается от обеспечения качества (QA) и какие законы управляют этим процессом.
Что такое тестирование и зачем оно нужно?
Если говорить формально, тестирование программного обеспечения — это процесс исследования программного продукта, имеющий целью проверку соответствия между реальным и ожидаемым поведением программы, осуществляемый на конечном наборе тестов, выбранных определенным образом.
Проще говоря, мы сравниваем то, что есть (фактический результат), с тем, что должно быть (ожидаемый результат).
История первого «бага»
Термин «баг» (жук) в контексте компьютерных ошибок стал популярным благодаря Грейс Хоппер. В 1947 году операторы машины Mark II нашли мотылька, застрявшего между контактами реле, что вызвало сбой в работе. Они вклеили мотылька в технический журнал с подписью: «First actual case of bug being found» (Первый реальный случай обнаружения жука).
С тех пор поиск ошибок называют «дебаггингом», а сами ошибки — багами. Но современное тестирование ушло далеко вперед от простого извлечения мотыльков из схем.
Основные цели тестирования
Зачем компании тратят огромные бюджеты на отделы тестирования? Вот ключевые цели:
QA, QC и Тестирование: в чем разница?
Новички часто путают понятия QA (Quality Assurance), QC (Quality Control) и Testing. Давайте разберемся, так как это разные уровни ответственности.
!Иерархия понятий: QA включает в себя QC, а QC включает в себя Тестирование
1. Testing (Тестирование)
Это непосредственно процесс проверки системы. * Вопрос: «Работает ли эта кнопка так, как задумано?» * Действие: Тестировщик пишет тест-кейс, проходит его и заводит баг-репорт, если нашел ошибку.2. QC (Quality Control — Контроль качества)
Это набор активностей, направленных на проверку готовности продукта. QC включает в себя тестирование, но также охватывает анализ результатов тестирования, работу с метриками и проверку соответствия требованиям. * Вопрос: «Соответствует ли продукт заявленным требованиям качества?» * Действие: Проверка кода (Code Review), запуск автотестов перед релизом, анализ количества найденных багов.3. QA (Quality Assurance — Обеспечение качества)
Это самый широкий процесс, охватывающий весь цикл разработки. Цель QA — выстроить процессы так, чтобы дефекты не появлялись. Это превентивная мера. * Вопрос: «Как нам улучшить процесс разработки, чтобы ошибки не возникали?» * Действие: Внедрение стандартов кодирования, обучение сотрудников, выбор инструментов, настройка CI/CD (непрерывной интеграции).> QA занимается процессом, QC — продуктом, а Тестирование — конкретными проверками.
7 принципов тестирования
Существует международный стандарт ISTQB (International Software Testing Qualifications Board), который выделяет 7 фундаментальных принципов тестирования. Понимание этих принципов отличает профессионала от любителя.
1. Тестирование демонстрирует наличие дефектов
Тестирование может показать, что дефекты есть, но не может доказать, что их нет. Даже если тесты прошли успешно, это не гарантия 100% качества — возможно, мы просто не нашли скрытые ошибки.2. Исчерпывающее тестирование невозможно
Проверить все возможные комбинации входных данных, сценариев и условий в сложной системе невозможно физически. Пример:* Если в поле ввода можно ввести любую строку до 10 символов, количество комбинаций будет исчисляться триллионами. Решение:* Мы используем техники тест-дизайна (о которых поговорим в следующих статьях), чтобы выбрать минимальный набор тестов с максимальной эффективностью.3. Раннее тестирование
Тестирование должно начинаться как можно раньше. Ошибку дешевле всего исправить на этапе написания требований (просто переписать текст в документе), чем когда код уже написан, протестирован и ушел к пользователям.4. Скопление дефектов (Кластеризация)
Обычно большая часть дефектов содержится в небольшом количестве модулей. Это работает по принципу Парето: 80% проблем находятся в 20% функционала. Если вы нашли баг в модуле «Корзина», скорее всего, там есть и другие.5. Парадокс пестицида
Если прогонять одни и те же тесты снова и снова, рано или поздно они перестанут находить новые дефекты. Программа меняется, а тесты устаревают. Как у насекомых вырабатывается иммунитет к пестицидам, так и программа «привыкает» к старым тестам. Тест-кейсы нужно регулярно обновлять.6. Тестирование зависит от контекста
Тестирование банковского приложения для переводов миллионов долларов кардинально отличается от тестирования личного блога о кулинарии. В первом случае критична безопасность и точность транзакций, во втором — удобство чтения и скорость загрузки картинок.7. Заблуждение об отсутствии ошибок
Нахождение и исправление багов не поможет, если созданная система не подходит пользователю. Можно создать идеально работающее приложение без единого бага, которое никому не нужно или неудобно в использовании.Роль QA в жизненном цикле разработки (SDLC)
SDLC (Software Development Life Cycle) — это период времени, который начинается с момента принятия решения о создании программного продукта и заканчивается в момент его полного изъятия из эксплуатации.
Многие думают, что тестировщик вступает в игру только после того, как программист написал код. Это грубая ошибка, свойственная устаревшим моделям разработки.
!Вовлеченность QA-инженера на всех этапах создания ПО
Рассмотрим, что делает QA-инженер на каждом этапе:
1. Сбор и анализ требований
QA подключается уже здесь. Он читает техническое задание (ТЗ) и ищет в нем логические противоречия. Пример:* В ТЗ написано «Поле принимает только цифры», а на макете дизайнера в этом поле нарисован email. QA задает вопрос аналитику: «Так цифры или email?». Этим он предотвращает баг еще до написания кода.2. Дизайн и проектирование
Пока архитекторы думают над базой данных, а дизайнеры рисуют интерфейс, QA начинает планировать тестирование. Создается Тест-план — документ, описывающий, что, как и когда мы будем тестировать.3. Разработка (Coding)
Пока разработчики пишут код, тестировщики пишут Тест-кейсы (сценарии проверки) и готовят тестовые данные. К моменту, когда первая версия программы готова, у QA уже готов полный набор проверок.4. Тестирование
Активная фаза. Тестировщики прогоняют тесты, находят баги, оформляют их в баг-трекере (например, Jira) и отправляют на исправление. Затем проводят ретест (проверку исправления) и регрессионное тестирование (проверку того, что исправление не сломало старый функционал).5. Внедрение и поддержка
После релиза работа не заканчивается. QA анализирует отзывы пользователей, проверяет хотфиксы (срочные исправления) и обновляет тестовую документацию для следующих версий.Заключение
Тестирование — это не просто поиск ошибок. Это философия качества, которая пронизывает весь процесс создания программного обеспечения. Хороший QA-инженер — это не тот, кто ломает программу, а тот, кто помогает создать продукт, который делает пользователей счастливыми.
В следующей статье мы углубимся в виды и уровни тестирования, чтобы понять, как классифицируются проверки и какие инструменты для этого используются.