Функциональное тестирование программного обеспечения¶
Функциональное тестирование — вид тестирования программного обеспечения, при котором проверяется соответствие поведения программы требованиям и спецификациям, то есть тому, какие функции она должна выполнять. Оно относится к классу методов «чёрного ящика», при которых проверяющий не имеет доступа к внутренней структуре кода и оценивает только входные данные и наблюдаемый результат. Функциональное тестирование противопоставляется нефункциональному (проверяющему производительность, безопасность, удобство) и составляет основу большинства процессов контроля качества в разработке.
¶Место в классификации
В теории тестирования функциональные проверки разделяют по нескольким признакам.
По доступу к коду различают:
- метод чёрного ящика — тестировщик работает с интерфейсом и не знает реализации;
- метод белого ящика — проверка с учётом структуры кода, покрытия ветвей и операторов;
- метод серого ящика — частичное знание внутреннего устройства, например при тестировании API.
По целям функциональные тесты делят на проверку корректности (позитивные сценарии) и проверку обработки ошибок (негативные сценарии). По уровню детализации выделяют модульное, интеграционное, системное и приёмочное тестирование.
¶Уровни функционального тестирования
| Уровень | Что проверяется | Кто выполняет |
|---|---|---|
| Модульное | Отдельные функции и методы | Разработчик |
| Интеграционное | Взаимодействие модулей и сервисов | Разработчик, тестировщик |
| Системное | Программа целиком как единое целое | Тестировщик |
| Приёмочное | Соответствие требованиям заказчика | Заказчик, аналитик |
Модульное тестирование обычно автоматизировано и опирается на фреймворки (JUnit, pytest, NUnit). Системное и приёмочное чаще сочетают ручные и автоматизированные сценарии.
¶Основные виды проверок
К функциональному тестированию относят несколько самостоятельных направлений:
- дымовое тестирование — быстрая проверка работоспособности сборки перед глубоким тестированием;
- регрессионное тестирование — повторная проверка после изменений, чтобы убедиться, что старая функциональность не сломалась;
- тестирование методом «чёрного ящика» по сценариям — выполнение заранее описанных пользовательских путей;
- исследовательское тестирование — одновременное изучение продукта и поиск дефектов без заранее подготовленных сценариев;
- тестирование на основе рисков — приоритизация проверок по вероятности и последствиям отказов.
¶Процесс и артефакты
Типовой процесс включает планирование, проектирование тестов, выполнение, фиксацию дефектов и отчётность. Ключевые артефакты:
- Тест-план — документ с объёмом, подходами, сроками и критериями завершения.
- Тест-кейс — описание шагов, входных данных и ожидаемого результата.
- Чек-лист — перечень проверок без детальных шагов.
- Баг-репорт — описание дефекта с шагами воспроизведения и окружением.
Тест-кейсы группируют в наборы (сьюты), а результат выполнения отмечают статусами «пройден», «не пройден», «заблокирован». Метрики — число найденных дефектов, плотность дефектов, покрытие требований — используются для оценки качества.
¶Техники проектирования тестов
Для функциональных проверок применяют формальные техники:
- эквивалентное разбиение — входные данные делят на классы, внутри которых поведение считается одинаковым;
- анализ граничных значений — проверка значений на границах классов;
- таблица решений — комбинации условий и действий;
- попарное тестирование — сокращение числа комбинаций параметров;
- диаграммы состояний и переходов — для систем с изменяющимся состоянием.
Эти методы позволяют уменьшить число тестов, не теряя существенных сценариев.
¶Автоматизация
Автоматизация функциональных тестов применяется там, где сценарии стабильны и повторяются. Используются инструменты Selenium, Playwright, Cypress, Appium, а также фреймворки для тестирования API (Postman, RestAssured). Автотесты включают в конвейеры непрерывной интеграции, что позволяет запускать регрессию при каждом изменении кода. Ручное тестирование сохраняется для исследовательских проверок, оценки удобства и сценариев, которые трудно формализовать.
¶Значение и ограничения
Функциональное тестирование подтверждает, что продукт выполняет заявленные функции, и снижает риск отказов у пользователей. В российской практике его регламентируют внутренние стандарты компаний и ГОСТ серии 19 (Единая система программной документации), а также ГОСТ Р ИСО/МЭК 25010, описывающий модель качества программного продукта.
Ограничение метода в том, что он не выявляет нефункциональные дефекты: низкую производительность, уязвимости, проблемы удобства. Кроме того, функциональные тесты не доказывают отсутствие ошибок — они лишь подтверждают корректность проверенных сценариев. Поэтому на практике функциональное тестирование сочетают с нагрузочным, тестированием безопасности и юзабилити-проверками.
Источники: И. С. Коцюба, А. В. Чунаев «Основы проектирования информационных систем»; С. Куликов «Тестирование программного обеспечения»; ГОСТ Р ИСО/МЭК 25010; материалы по методологиям ISTQB.