Тестирование программного обеспечения – процесс, связанный с производством программного обеспечения. Это один из процессов обеспечения качества ПО. Испытание имеет целью проверку программного обеспечения. Проверка ПО позволяет убедиться в том, что изготовленное ПО соответствует  спецификации. Валидация проверяет соответствует ли ПО ожиданиям пользователя. Тестирование программного обеспечения может быть реализовано в любой момент производства программного обеспечения (в зависимости от используемого метода). В каскадном подходе в соответствии с моделью V усилия команды тестирующей начинается с определения требований и продолжается при осуществлении определенных требований. Новые методы производства программного обеспечения (например, Agile) распределяют усилия равномерно на отдельные итерации и фокусируются на модульных тестах и автоматизации проверки, выполняемых членами команды.

Проверка не в состоянии выявить всех дефектов программного обеспечения, однако может предоставить информацию о его соответствии требованиям клиента, а также его ожиданиям. Нужно помнить, что тестирование не проверяет программы на наличие всех возможных начальных условий, но только в избранных условиях. Испытание может на ранних стадиях проекта выявить дефекты не только программного, но и технического задания или проекта. Раннее обнаружение дефектов является важным с экономической точки зрения, потому что гарантирует более низкие затраты на его ремонт. Дефекты программного обеспечения не вытекают только из ошибок кодирования. Большая часть дефектов является следствием ошибок, допущенных при определении требований. Тестирование ПО сводится также к статическому анализу и тестированию требований.

Тесты можно разделить на несколько способов:

- по проверяемым объектам (например, тесты классов, компонентов, подсистем, систем или интегрированных систем)

- на структурные, которые проверяют исходный код и тестируют слой интерфейса

- основанные на требованиях (проверки соответствия реализации требованиям, например, функциональное тестирование, тестирование интерфейса пользователя, тестирование нефункциональные или тесты проверки

- по методу проверки с отличием статических испытаний, без запуска приложений и динамических испытаний, требующей работы на работающем программном обеспечении.