Модульный тест? Интеграционный тест? Регрессионный тест? Вступительный тест?

98

Есть ли кто-нибудь, кто может четко определить эти уровни тестирования, поскольку мне трудно различить при выполнении TDD или модульного тестирования. Пожалуйста, если кто-нибудь может уточнить, как и когда их реализовать?

Донни
источник

Ответы:

129

Вкратце:

Модульное тестирование - вы тестируете каждый отдельный фрагмент кода. Подумайте о каждом файле или классе.

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

Регрессионное тестирование - после интеграции (и, возможно, исправления) вам следует снова запустить модульные тесты. Это регрессионное тестирование, чтобы убедиться, что дальнейшие изменения не повредили какие-либо модули, которые уже были протестированы. В результате модульного тестирования, которое вы уже провели, были созданы модульные тесты, которые можно запускать снова и снова для регрессионного тестирования.

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

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

майки
источник
К вашему сведению, в модульном тестировании тестируемые модули могут быть разных размеров. Вы можете, например, провести модульное тестирование группы классов, одного метода или даже как одного метода. Источник: BlueJ chaptor 9.3 «Модульное тестирование в BlueJ».
Себастьян Нильсен
114

Модульный тест: когда он терпит неудачу, он сообщает вам, какой фрагмент вашего кода необходимо исправить.

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

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

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

Матиас
источник
19

Вот простое объяснение каждого из упомянутых тестов и того, когда они применимы:

Модульный тест Модульный тест выполняется для автономного модуля (обычно класса или метода) и должен выполняться всякий раз, когда модуль был реализован или обновление модуля было завершено.

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

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

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

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

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

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

Это означает, что он в основном выполняется до завершения нового результата или объявления о завершении более крупной задачи. Считайте это своей последней проверкой, чтобы убедиться, что вы действительно достигли своих целей, прежде чем бежать к клиенту / боссу и объявить о победе.

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

Agentlien
источник
Я не могу отличить регрессионное тестирование от модульного. Я имею в виду, что после каждого изменения / фиксации у вас все еще выполняются ваши модульные тесты ... и они могут обнаруживать ошибки, вызванные новым кодом. Правильно?
Дорогая,
@Honey Ну, набор регрессионных тестов - это в основном набор некоторых или всех ваших модульных и интеграционных тестов. То, сколько регрессионного тестирования вы хотите провести, - вопрос политики. Основное отличие состоит в том, что модульные тесты выполняются в процессе активной разработки, в то время как регрессионные тесты - это скорее то, что вы используете, чтобы проверить, не сломаются ли предыдущие проекты, когда вы вернетесь и исправите их.
Agentlien
AFAIK вам на самом деле не следует использовать методы модульного тестирования. Если вы тестируете класс, вы должны рассматривать его как единое целое, поэтому вы тестируете публичный интерфейс класса, а не детали его реализации. Хотя вы можете провести модульное тестирование автономной функции, это нормально.
Qback
14

Я буду стараться:

  1. Модульный тест: разработчик напишет тест для тестирования отдельного компонента или класса.
  2. Интеграционный тест: более обширный тест, который будет включать несколько компонентов или пакетов, которые должны взаимодействовать друг с другом.
  3. Регрессионный тест: внесение одного изменения в приложение заставляет вас повторно запустить ВСЕ тесты и проверить ВСЕ функциональные возможности.
  4. Приемочное испытание: конечные пользователи или QA делают это до выхода, чтобы принять доставку приложения. В нем написано: «Приложение соответствует моим требованиям».
Duffymo
источник
14

Модульный тест: правильно ли работает мой единственный метод? (НИКАКИЕ зависимости или насмешливые зависимости)

Интеграционный тест: работают ли два моих отдельно разработанных модуля правильно, когда они собраны вместе?

Регрессионный тест: я что-нибудь сломал, изменив / написав новый код? (запуск модульных / интеграционных тестов с каждой фиксацией является технически (автоматизированным) регрессионным тестированием). Чаще используется в контексте QA - вручную или автоматически.

Приемочный тест : тестирование, проводимое клиентом, показывает, что он «принимает» поставленное ПО.

Андрейс
источник
0

Не могу комментировать (низкая репутация: - |), так что ...

@Andrejs дает хорошее представление о различиях между средами, связанными с каждым типом тестирования.

Модульные тесты обычно запускаются на машине разработчиков (и, возможно, во время сборки CI) с имитацией зависимостей от других ресурсов / систем.

Интеграционные тесты по определению должны иметь (в некоторой степени) наличие зависимостей; другие ресурсы и системы называются так, чтобы среда была более представительной. Данные для тестирования могут быть имитацией или небольшой скрытой частью реальных производственных данных.

UAT / приемочное тестирование должно представлять реальный опыт для QA и бизнес-групп, принимающих программное обеспечение. Поэтому требуется полная интеграция и реалистичные объемы данных и полные замаскированные / обфусцированные наборы данных для обеспечения реалистичной производительности и удобства работы конечного пользователя.

Другие «возможности» также, вероятно, потребуют, чтобы среда была как можно ближе к реальности, чтобы моделировать производственный опыт, например, тестирование производительности, безопасность, ...

Mhaselup
источник