Виды тестирования в информатике
Ви́ды тести́рования, в информатике – выделяемые на основе различных принципов способы организации и проведения тестирования, в зависимости от круга решаемых задач и необходимости проверки разных свойств в процессе разработки и сопровождения программно-аппаратных систем. Виды тестирования:
по проверяемым при его выполнении свойствам;
используемой для построения тестов информации;
виду элементов/составляющих тестируемой системы, на которые направлены тесты;
роли разработчиков и исполнителей тестов в процессе разработки.
Далее не рассматриваются виды тестирования, выделяемые по используемым специфическим техникам построения тестов или организации работ при тестировании, такие как тестирование с помощью мутантов (англ. mutation testing), доменное тестирование (англ. domain testing) или исследовательское тестирование (англ. exploratory testing).
Виды тестирования по проверяемым при его выполнении свойствам
1. Проверяемые свойства могут совпадать с характеристиками качества программного обеспечения.
Тестирование функциональности (или функциональное тестирование) (англ. functional testing) – проверка соответствия функциональным требованиям, т. е. корректности решения тестируемой системой стоящих перед ней задач.
Тестирование надёжности (англ. reliability testing) – проверка соответствия требованиям к надёжности системы.
Тестирование производительности (англ. efficiency/performance testing) – анализ соответствия требованиям к производительности системы, т. е. ограничения на потребляемые ею ресурсы при решении определённых задач.
Тестирование переносимости (англ. portability testing) – контроль соответствия требованиям к переносимости системы, т. е. возможности её работы на различных платформах.
Тестирование совместимости (англ. compatibility testing) – исследование соответствия требованиям к совместимости, т. е. возможности взаимодействия системы с различными смежными системами.
Тестирование защищённости (англ. security testing) – оценка соответствия требованиям к защищённости системы, т. е. обеспечение конфиденциальности, целостности, авторизуемости, анонимности и других свойств защищённости за счёт использования специфических механизмов контроля доступа и обработки информации.
Тестирование удобства использования (англ. usability testing) обычно выполняется по другим принципам, чем иные виды тестирования, поскольку зафиксировать требования к удобству использования так же, как к другим показателям качества, не представляется возможным.
Для оценки и контроля удобства сопровождения используют другие, отличные от тестирования, методы, поскольку тестирование выполняется при работе системы, а удобство сопровождения при этом не проявляется (см. Верификация в информатике).
2. Отдельные, более мелкие характеристики системы могут также иметь соответствующие частные виды тестирования: тестирование отказоустойчивости; тестирование использования оперативной памяти; тестирование возможности установки; нагрузочное тестирование – контроль показателей производительности системы при нагрузке определённого вида и др.
3. Выделяются особые виды тестирования – исследование свойств, не являющихся характеристиками системы в обычном рассмотрении.
Тестирование соответствия (англ. conformance testing), или аттестационное тестирование, – проверка соответствия работы системы некоторому документу (стандарту, нормативу), содержащему специфический набор требований. Обычно аттестационным называется тестирование, по результатам которого выдаётся заключение о соответствии заданному документу (аттестат, сертификат).
Регрессионное тестирование (англ. regression testing) представляет собой исследование, выполняемое при очередном шаге развития системы (выпуске очередной версии или более мелком) при помощи выполнения набора тестов, соответствующего предыдущему шагу развития. Такое тестирование имеет целью выявление регресса, т. е. ошибок в поведении ранее имевшихся компонентов, которые появились только на новом шаге развития.
Виды тестирования по используемой для построения тестов информации
1. Используется информация о структуре проверяемой системы и её отдельных элементов: тестирование чёрного ящика (англ. black box testing) использует при построении тестов только информацию о требованиях к системе, структуре её входных и выходных данных; тестирование белого ящика (англ. white box testing, glass box testing – тестирование стеклянного или прозрачного ящика, по-русски не употребляется) применяет при построении тестов информацию о структуре программного кода системы, её компонентах, возможных способах и сценариях их взаимодействия; тестирование серого ящика (англ. grey box testing) использует тесты, создаваемые как при тестировании чёрного ящика, так и при тестировании белого ящика.
2. Для построения тестов могут использоваться гипотезы о наличии ошибок определённого вида (тесты строятся так, чтобы подтвердить или опровергнуть такие гипотезы).
Тестирование работоспособности (англ. sanity testing, для аппаратного обеспечения – дымовое тестирование, англ. smoke testing) нацелено на выявление грубых ошибок в основных функциях системы при помощи выполнения простых сценариев её работы.
Фаззинг (англ. fuzzing) является видом тестирования, проводимым при помощи массового построения и выполнения тестовых ситуаций и нацеленным на выявление уязвимостей, а также случаев некорректного поведения системы, способного привести к её разрушению или нарушениям в работе окружения.
Нагрузочное тестирование (англ. load testing) – испытание, проводимое при (почти) экстремальной нагрузке (остающейся, однако, в рамках требований) на один или несколько параметров среды, в которой система работает, или на одну или несколько характеристик самой системы. Целью такого тестирования является выявление ошибок управления ресурсами, которые сложно заметить при обычной работе, а при экстремальной нагрузке они становятся гораздо заметнее.
Стрессовое тестирование (англ. stress testing) часто является синонимом нагрузочного в указанном выше смысле. Иногда стрессовым называют тестирование, выполняемое с аналогичными целями, когда какие-то параметры окружения или характеристики системы немного выходят за рамки требований к ней.
Виды тестирования по типу элементов/составляющих тестируемой системы, на которые нацеливаются тесты
Модульное тестирование (англ. unit testing) нацелено на проверку соответствия требованиям работы одного модуля. Каждый модуль тестируемой системы может быть подвергнут такому тестированию. Критериями полноты модульного тестирования служат критерии покрытия кода соответствующего модуля.
Под модулем (англ. unit) обычно имеется в виду элемент или компонент кода системы, который можно каким-то образом собрать и выполнить отдельно от других частей системы. Часто для этого необходимы заглушки (англ. test stubs), заменяющие другие модули, без которых выбранный модуль не может работать, в рамках проверяющих его тестов.
Ранее под модулем обычно понимали одну функцию или процедуру, которую можно выполнить отдельно от остального кода. С развитием технологий разработки программного обеспечения и ростом его сложности чаще в рамках модульного тестирования под модулем понимают отделяемый от других частей системы компонент, во многих случаях класс или группу работающих совместно классов. Такого рода тестирование часто называют компонентным тестированием (англ. component testing). См. также Модульное программирование.
Интеграционное тестирование (англ. integration testing) нацелено на проверку корректности взаимодействия двух или многих модулей/компонентов. Критериями полноты интеграционного тестирования служат критерии покрытия точек взаимодействия проверяемого набора модулей и возникающих при этом ситуаций. При интеграционном тестировании также могут использоваться заглушки для замещения отсутствующих в проверяемом наборе модулей, которые, однако, необходимы для работы этого набора.
Системное тестирование (англ. system testing) направлено на проверку соответствия требованиям работы системы в целом. Оно выполняется через внешний интерфейс системы и не требует заглушек для её модулей (хотя могут потребоваться заглушки для смежных систем, взаимодействующих с проверяемой). Критерием полноты системного тестирования обычно служат критерии покрытия сценариев работы системы и различных ситуаций взаимодействия её крупных компонентов.
Тестирование отдельных функций/характеристик (англ. feature testing) нацелено на проверку соответствия требованиям работы отдельных важных функций (англ. features) системы. Оно, так же как системное, выполняется через внешний интерфейс системы и отличается нацеленностью на одну выбранную функцию. Критерием полноты тестирования функции обычно служат критерии покрытия сценариев работы системы, связанных с выполнением выбранной функции.
Виды тестирования по роли разработчиков и исполнителей тестов в процессе разработки
Тестирование при разработке (англ. developer testing) выполняется разработчиками тестируемой системы в среде разработки и соответствующем окружении исходя из тех критериев полноты (или нацеливаясь на те виды ошибок), которые представляются важными разработчикам. Такое тестирование может выполняться в ходе отладки работы системы.
Альфа-тестирование (англ. alpha-testing, α-testing) выполняется разработчиками тестируемой системы в среде разработки и соответствующем окружении исходя из тех критериев полноты (или нацеливаясь на те виды ошибок), которые представляются разработчикам важными для пользователей системы. То есть во время этого тестирования разработчики пытаются играть роль пользователей.
Бета-тестирование (англ. beta-testing, β-testing) выполняется пользователями тестируемой системы (отобранными определённым образом) незадолго до выпуска очередной её версии в окружении, предназначенном для её эксплуатации, исходя из тех критериев полноты (или нацеливаясь на те виды ошибок), которые представляются важными самим пользователям.
Независимое тестирование (англ. independent testing, 3-rd party testing) выполняется независимой командой, не являющейся ни разработчиками тестируемой системы, ни её заказчиками или пользователями.
Приёмочное тестирование (англ. acceptance testing) выполняется представителями заказчика с целью убедиться в возможности передачи системы в эксплуатацию. По результатам приёмочного тестирования система либо возвращается на доработку, либо подписывается акт о её приёмке. Иногда приёмочное тестирование разделяется на несколько этапов, в этом случае альфа-тестирование и/или бета-тестирование могут считаться его предварительными этапами, а приёмочное тестирование в указанном выше смысле – итоговым этапом приёмки.