1. Введение в тестирование: цели, принципы и место в SDLC
Введение в тестирование: цели, принципы и место в SDLC
Добро пожаловать в курс «Инженерное тестирование программного обеспечения». Это первая статья, которая заложит фундамент для всего дальнейшего обучения. Многие новички ошибочно полагают, что тестирование — это просто поиск ошибок или хаотичное нажатие кнопок в надежде «сломать» программу. На самом деле, это строгая инженерная дисциплина, требующая аналитического склада ума, понимания архитектуры и знания процессов разработки.
В этой статье мы разберем, чем тестирование отличается от обеспечения качества (QA), зачем оно на самом деле нужно бизнесу, на каких семи принципах оно строится и какое место занимает в жизненном цикле разработки ПО (SDLC).
Что такое тестирование?
Тестирование программного обеспечения — это процесс исследования программного продукта, имеющий целью предоставление заинтересованным сторонам (стейкхолдерам) информации о качестве продукта.
Важно понимать, что тестирование — это не только запуск программы и проверка ее работы. Это также проверка документации, анализ требований и предотвращение дефектов еще до написания первой строчки кода.
Иерархия понятий: QA, QC и Testing
В индустрии часто путают термины QA, QC и Тестирование. Давайте разграничим их, так как это критически важно для понимания вашей будущей роли.
!Схема, показывающая вложенность понятий: Тестирование является частью QC, а QC является частью QA.
Простой пример из жизни: * QA: Создание инструкции по сборке автомобиля и обучение рабочих. * QC: Проверка собранного автомобиля на конвейере перед отправкой в салон. * Testing: Тест-драйв автомобиля для проверки тормозов и двигателя.
Цели тестирования
Глобальная цель тестирования — не «найти все баги» (это невозможно, как мы узнаем позже), а предоставить информацию о рисках и снизить вероятность сбоя в промышленной эксплуатации.
Основные цели включают:
* Обнаружение дефектов: Найти проблемы до того, как их найдут пользователи. * Предотвращение дефектов: Анализ требований на ранних этапах позволяет избежать ошибок в логике еще до начала разработки. * Повышение уверенности в качестве: Если тесты прошли успешно, мы можем с большей уверенностью выпускать релиз. * Предоставление информации: Бизнес должен знать, в каком состоянии находится продукт, чтобы принимать решения (например, перенести дату релиза).
Верификация и Валидация
В контексте целей часто используются два термина, которые звучат похоже, но имеют разный смысл:
* Верификация (Verification): Проверка того, что продукт соответствует задокументированным требованиям. > «Делаем ли мы продукт правильно?» * Валидация (Validation): Проверка того, что продукт соответствует реальным потребностям и ожиданиям пользователя. > «Делаем ли мы правильный продукт?»
Можно создать идеально работающую программу без багов (успешная верификация), которая будет абсолютно бесполезна для пользователя (проваленная валидация).
Семь принципов тестирования
Международный совет по квалификации тестировщиков (ISTQB) выделяет 7 фундаментальных принципов, которые являются «заповедями» для любого инженера по качеству.
1. Тестирование демонстрирует наличие дефектов
Тестирование может показать, что дефекты есть, но не может доказать, что их нет. Даже если все тесты прошли успешно, это не гарантия отсутствия багов. Это лишь означает, что наши текущие тесты их не нашли. Мы снижаем вероятность наличия дефектов, но никогда не сводим её к нулю.
2. Исчерпывающее тестирование невозможно
Проверить все возможные комбинации входных данных, сценариев и условий невозможно, за исключением тривиальных случаев. Вместо попыток проверить «всё», мы используем анализ рисков и приоритеты.
Рассмотрим пример. Допустим, у нас есть поле для ввода пароля длиной 10 символов, где можно использовать только строчные английские буквы (26 символов).
Количество комбинаций рассчитывается по формуле:
Где: * — общее количество возможных комбинаций. * — размер алфавита (количество доступных символов, в нашем случае 26). * — длина строки (в нашем случае 10).
Подставим значения:
Где — это 26 в 10-й степени, что приблизительно равно 141 триллиону комбинаций. Если проверка одной комбинации занимает 1 миллисекунду, на проверку всего поля уйдут тысячи лет. Поэтому мы используем техники тест-дизайна (о которых поговорим в следующих статьях), чтобы выбрать минимальный набор проверок с максимальной эффективностью.
3. Раннее тестирование
Активности по тестированию должны начинаться как можно раньше в жизненном цикле разработки. Ошибка, найденная на этапе требований, стоит копейки (нужно просто переписать текст). Ошибка, найденная в продакшене, может стоить миллионы (репутация, суды, срочные патчи).
4. Скопление дефектов (Кластеризация)
Обычно небольшое количество модулей содержит большинство дефектов, обнаруженных перед выпуском. Это проявление принципа Парето: 80% дефектов скрыты в 20% кода. Если вы нашли баг в определенном модуле, велика вероятность, что рядом есть еще.
5. Парадокс пестицида
Если одни и те же тесты повторять много раз, в какой-то момент они перестанут находить новые дефекты. Система «вырабатывает иммунитет» к проверкам, потому что разработчики исправляют именно те места, которые проверяются. Чтобы преодолеть этот парадокс, тестовые наборы нужно регулярно пересматривать и обновлять.
6. Тестирование зависит от контекста
Тестирование банковского приложения критически отличается от тестирования мобильной игры. В первом случае важна безопасность и точность транзакций до копейки, во втором — производительность и графика. Нельзя применять одни и те же подходы ко всем проектам.
7. Заблуждение об отсутствии ошибок
Нахождение и исправление дефектов не поможет, если созданная система не подходит пользователю. Отсутствие багов не гарантирует успешность продукта. Это возвращает нас к разнице между верификацией и валидацией.
Место тестирования в SDLC
SDLC (Software Development Life Cycle) — это жизненный цикл разработки ПО. Это путь, который проходит программа от идеи до вывода из эксплуатации.
Классические этапы SDLC:
Сдвиг влево (Shift Left)
В старых моделях (например, «Водопад») тестирование начиналось только после того, как код полностью написан. Это приводило к тому, что ошибки проектирования обнаруживались слишком поздно.
Современный подход, называемый Shift Left, подразумевает вовлечение тестировщиков на самых ранних этапах. Тестировщики: * Проверяют требования на полноту и непротиворечивость. * Участвуют в обсуждении архитектуры. * Пишут тесты параллельно с написанием кода разработчиками.
Таким образом, тестирование — это не «этап перед релизом», а непрерывная активность, пронизывающая весь жизненный цикл разработки.
Резюме
Инженерное тестирование — это сложный процесс, направленный на снижение рисков и обеспечение качества. Помните, что ваша задача — не просто искать баги, а предоставлять информацию о качестве продукта. Опираясь на 7 принципов тестирования и понимая разницу между QA и QC, вы сможете выстроить эффективную стратегию проверок в любом проекте.
В следующей статье мы углубимся в виды и уровни тестирования, чтобы понять, как классифицировать проверки и когда применять каждую из них.