Виды тестирования программного обеспечения 21.01.2016


По видам тестирование кода можно разделить на следующие группы:
— Unit-тесты;
— Компонентные тесты;
— Интеграционные тесты;
— Приемочные тесты;
— Регрессионные тесты;
— Системные тесты.

Модульные тесты (Unit-тесты)

Unit-тест тестирует определенную функцию класса. Именно об этих тестах этого типа чаще всего идет речь при разработке по методологиям TDD(test-drive development) и BDD(behaviour-driven development). При составлении unit-тестов необходимо свести к минимуму их зависимость от кода и функционала не связанных с тестируемыми. Такая необходимость часто оказывает влияние на архитектуру системы. Это влияние чаще всего является положительным — продуманные интерфейсы, четкие контракты и ответственность составляющих систему подмодулей. Однако, в некоторых случаях желание тестировать изолированные логические конструкции приводит к излишнему усложнению — например, порождению большого количества логических слоёв, которые созданы только ради удобства тестирования. Unit-тестами должен быть покрыт весь важный функционал, а, в идеале, и весь код. Unit-тесты пишутся разработчиком, осуществляющим непосредственное кодирование.

Компонентные тесты

Компонентными являются тесты, покрывающие внешний интерфейс модуля, формализующие требования к его функционалу и трестирующие бизнес-логику модуля в целом. Компонентные тесты могут быть разработаны на стадии согласования внешнего интерфейса модуля и его проектирования. Для описания компонентных тестов удобны синтаксические конструкции BDD. Приведем пример, рассмотрим модуль авторизации, назначение которого авторизовать пользователя тем или иным способом, отправив данные на сервер и обработав ответ. Компонентным для такого модуля будет, например, тест, который проверит, что при вызове метода авторизации по email будет осуществлен запрос на сервер с соответствующими параметрами. Внутренняя реализация модуля авторизации может быть любой и включать в себя набор классов, реализующих бизнес-логику на различных уровнях. Все эти составляющие в свою очередь могут быть покрыты unit-тестами. Время жизни компонентных тестов может значительно превышать время жизни тестов, покрывающих функционал составляющих модуль классов. Компонентные тесты очень полезны при рефакторингах модуля, когда требования к его общему функционалу остаются прежними, а его внутренняя архитектура подвергается переработке.

Интеграционные тесты

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

Приемочные тесты

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

Регрессионные тесты

Для предотвращения повторного появления ошибки в будущем можно создать тест, осуществляющий проверку случая, вызывающего ошибку. Тесты такого типа называются регрессионными. Регрессионным может быть как unit-тест, так и компонентный.

Системные тесты

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

by 21.01.2016