Виды тестирования программного обеспечения¶
Виды тестирования — это классификация способов проверки программного обеспечения, при которой программа или её отдельные компоненты исследуются на соответствие требованиям, корректность работы и наличие дефектов. В инженерии программного обеспечения (software engineering) тестирование рассматривается как самостоятельная дисциплина, а его виды выделяются по нескольким независимым основаниям: по объекту проверки, по цели, по степени автоматизации, по доступу к внутренней структуре кода и по моменту проведения в жизненном цикле разработки. Единой универсальной классификации не существует: на практике виды тестирования комбинируются, а их набор зависит от типа продукта, требований заказчика и модели разработки.
¶Классификация по цели и уровню
¶Функциональное и нефункциональное тестирование
Функциональное тестирование проверяет, что система выполняет заявленные функции: корректно обрабатывает входные данные, выдаёт ожидаемый результат, соблюдает бизнес-логику. К нему относятся проверка сценариев пользователя, обработка ошибок и граничных значений.
Нефункциональное тестирование оценивает качества системы, не связанные напрямую с функциями:
- производительность — время отклика, пропускная способность, устойчивость под нагрузкой;
- надёжность — способность работать без отказов заданное время;
- безопасность — защищённость от несанкционированного доступа;
- удобство использования (юзабилити) — простота освоения интерфейса;
- совместимость — работа в разных браузерах, операционных системах, на разных устройствах.
¶Уровни тестирования
По масштабу проверяемого объекта выделяют четыре основных уровня:
| Уровень | Что проверяется | Кто выполняет |
|---|---|---|
| Модульное (unit) | Отдельные функции, классы, методы | Разработчик |
| Интеграционное | Взаимодействие модулей и сервисов | Разработчик, тестировщик |
| Системное | Продукт целиком | Тестировщик |
| Приёмочное | Соответствие требованиям заказчика | Заказчик, конечный пользователь |
¶Классификация по доступу к коду
Тестирование «чёрного ящика» предполагает, что проверяющий не знает внутреннего устройства программы и работает только через интерфейс, подавая входные данные и сравнивая результат с ожидаемым. Этот подход характерен для системного и приёмочного тестирования.
Тестирование «белого ящика» основано на знании исходного кода: анализируются ветвления, циклы, покрытие строк и условий. Такой подход применяется преимущественно на уровне модулей.
Тестирование «серого ящика» — промежуточный вариант, при котором тестировщик частично осведомлён о внутренней структуре, например знает схему базы данных или архитектуру API.
¶По степени автоматизации
Ручное тестирование выполняется человеком без применения специальных скриптов. Оно незаменимо при исследовательском (exploratory) тестировании, проверке юзабилити и в случаях, когда сценарии сложно формализовать.
Автоматизированное тестирование использует программные средства: фреймворки модульных тестов, инструменты для тестирования интерфейса, системы непрерывной интеграции. Автотесты применяются для регрессионных проверок, которые нужно повторять многократно.
Отдельно выделяют полуавтоматизированное тестирование, где часть шагов выполняет человек, а часть — скрипты.
¶Специальные виды
- Регрессионное тестирование — повторная проверка после изменений в коде, чтобы убедиться, что новые правки не нарушили ранее работавшие функции.
- Дымовое тестирование (smoke) — быстрая проверка ключевых функций сразу после сборки; если она не проходит, дальнейшее тестирование нецелесообразно.
- Санитарное тестирование (sanity) — узкая проверка конкретного исправления или небольшого участка.
- Нагрузочное и стресс-тестирование — оценка поведения системы при пиковых и запредельных нагрузках.
- Тестирование безопасности (пентест) — имитация атак для выявления уязвимостей.
- Локализационное тестирование — проверка корректности перевода, форматов дат, валют и раскладок.
- Исследовательское тестирование — одновременное изучение продукта и поиск дефектов без заранее составленных сценариев.
- A/B-тестирование — сравнение двух версий продукта на разных группах пользователей для выбора более эффективной.
¶Организация процесса
В зависимости от момента проведения различают каскадное тестирование (после завершения разработки) и итеративное, встроенное в короткие циклы. Гибкие методологии (Agile) предполагают непрерывное тестирование на протяжении всего проекта, а практика разработки через тестирование (TDD) требует написания тестов до появления самого кода.
Документирование видов тестирования ведётся в тест-планах, чек-листах и тест-кейсах. Для оценки полноты проверок применяются метрики покрытия: покрытие требований, покрытие кода, покрытие ветвлений.
¶Значение
Выбор видов тестирования определяет, насколько полно будет проверен продукт и какие риски останутся невыявленными. Избыточное тестирование увеличивает сроки и стоимость разработки, недостаточное — приводит к дефектам у пользователей. На практике набор видов тестирования подбирают исходя из критичности системы: для банковских и медицинских приложений требования к безопасности и надёжности выше, чем для внутренних утилит.
Источники: стандарты IEEE 829 и ISO/IEC/IEEE 29119, материалы по методологиям разработки программного обеспечения, учебные курсы по тестированию ПО.