Тестирование программного обеспечения — процесс исследования, испытания программного продукта, имеющий две различные цели:

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

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

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

Качество программного обеспечения можно определить как совокупную характеристику исследуемого ПО с учётом следующих составляющих:

  • надёжность
  • сопровождаемость
  • практичность
  • эффективность
  • мобильность
  • функциональность

Существует несколько признаков, по которым принято производить классификацию видов тестирования. Обычно выделяют следующие:

По объекту тестирования

  • Функциональное тестирование
  • Тестирование производительности
  • Нагрузочное тестирование
  • Стресс-тестирование
  • Тестирование стабильности
  • Конфигурационное тестирование
  • Юзабилити-тестирование
  • Тестирование интерфейса пользователя
  • Тестирование безопасности
  • Тестирование локализации
  • Тестирование совместимости

По знанию системы

  • Тестирование чёрного ящика
  • Тестирование белого ящика
  • Тестирование серого ящика

По степени автоматизации

  • Ручное тестирование
  • Автоматизированное тестирование
  • Полуавтоматизированное тестирование

По степени изолированности компонентов

  • Модульное тестирование
  • Интеграционное тестирование
  • Системное тестирование

По времени проведения тестирования

  • Альфа-тестирование
  • Дымовое тестирование (англ. smoke testing)
  • Тестирование новой функции (new feature testing)
  • Подтверждающее тестирование
  • Регрессионное тестирование
  • Приёмочное тестирование
  • Бета-тестирование

По признаку позитивности сценариев

  • Позитивное тестирование
  • Негативное тестирование

По степени подготовленности к тестированию

  • Тестирование по документации (формальное тестирование)
  • Интуитивное тестирование (англ. ad hoc testing)