Открыть сервисСервис

Функциональное тестирование программного обеспечения

Функциональное тестирование — вид тестирования программного обеспечения, при котором проверяется соответствие поведения программы требованиям и спецификациям, то есть тому, какие функции она должна выполнять. Оно относится к классу методов «чёрного ящика», при которых проверяющий не имеет доступа к внутренней структуре кода и оценивает только входные данные и наблюдаемый результат. Функциональное тестирование противопоставляется нефункциональному (проверяющему производительность, безопасность, удобство) и составляет основу большинства процессов контроля качества в разработке.

Место в классификации

В теории тестирования функциональные проверки разделяют по нескольким признакам.

По доступу к коду различают:

  • метод чёрного ящикатестировщик работает с интерфейсом и не знает реализации;
  • метод белого ящикапроверка с учётом структуры кода, покрытия ветвей и операторов;
  • метод серого ящика — частичное знание внутреннего устройства, например при тестировании API.

По целям функциональные тесты делят на проверку корректности (позитивные сценарии) и проверку обработки ошибок (негативные сценарии). По уровню детализации выделяют модульное, интеграционное, системное и приёмочное тестирование.

Уровни функционального тестирования

УровеньЧто проверяетсяКто выполняет
МодульноеОтдельные функции и методыРазработчик
ИнтеграционноеВзаимодействие модулей и сервисовРазработчик, тестировщик
СистемноеПрограмма целиком как единое целоеТестировщик
ПриёмочноеСоответствие требованиям заказчикаЗаказчик, аналитик

Модульное тестирование обычно автоматизировано и опирается на фреймворки (JUnit, pytest, NUnit). Системное и приёмочное чаще сочетают ручные и автоматизированные сценарии.

Основные виды проверок

К функциональному тестированию относят несколько самостоятельных направлений:

  • дымовое тестирование — быстрая проверка работоспособности сборки перед глубоким тестированием;
  • регрессионное тестирование — повторная проверка после изменений, чтобы убедиться, что старая функциональность не сломалась;
  • тестирование методом «чёрного ящика» по сценариям — выполнение заранее описанных пользовательских путей;
  • исследовательское тестирование — одновременное изучение продукта и поиск дефектов без заранее подготовленных сценариев;
  • тестирование на основе рисковприоритизация проверок по вероятности и последствиям отказов.

Процесс и артефакты

Типовой процесс включает планирование, проектирование тестов, выполнение, фиксацию дефектов и отчётность. Ключевые артефакты:

  1. Тест-план — документ с объёмом, подходами, сроками и критериями завершения.
  2. Тест-кейсописание шагов, входных данных и ожидаемого результата.
  3. Чек-листперечень проверок без детальных шагов.
  4. Баг-репорт — описание дефекта с шагами воспроизведения и окружением.

Тест-кейсы группируют в наборы (сьюты), а результат выполнения отмечают статусами «пройден», «не пройден», «заблокирован». Метрики — число найденных дефектов, плотность дефектов, покрытие требований — используются для оценки качества.

Техники проектирования тестов

Для функциональных проверок применяют формальные техники:

  • эквивалентное разбиение — входные данные делят на классы, внутри которых поведение считается одинаковым;
  • анализ граничных значений — проверка значений на границах классов;
  • таблица решений — комбинации условий и действий;
  • попарное тестированиесокращение числа комбинаций параметров;
  • диаграммы состояний и переходов — для систем с изменяющимся состоянием.

Эти методы позволяют уменьшить число тестов, не теряя существенных сценариев.

Автоматизация

Автоматизация функциональных тестов применяется там, где сценарии стабильны и повторяются. Используются инструменты Selenium, Playwright, Cypress, Appium, а также фреймворки для тестирования API (Postman, RestAssured). Автотесты включают в конвейеры непрерывной интеграции, что позволяет запускать регрессию при каждом изменении кода. Ручное тестирование сохраняется для исследовательских проверок, оценки удобства и сценариев, которые трудно формализовать.

Значение и ограничения

Функциональное тестирование подтверждает, что продукт выполняет заявленные функции, и снижает риск отказов у пользователей. В российской практике его регламентируют внутренние стандарты компаний и ГОСТ серии 19 (Единая система программной документации), а также ГОСТ Р ИСО/МЭК 25010, описывающий модель качества программного продукта.

Ограничение метода в том, что он не выявляет нефункциональные дефекты: низкую производительность, уязвимости, проблемы удобства. Кроме того, функциональные тесты не доказывают отсутствие ошибок — они лишь подтверждают корректность проверенных сценариев. Поэтому на практике функциональное тестирование сочетают с нагрузочным, тестированием безопасности и юзабилити-проверками.

Источники: И. С. Коцюба, А. В. Чунаев «Основы проектирования информационных систем»; С. Куликов «Тестирование программного обеспечения»; ГОСТ Р ИСО/МЭК 25010; материалы по методологиям ISTQB.