Что такое юнит-тест, интеграционный тест, дымовой тест, регрессионный тест? - PullRequest
657 голосов
/ 06 февраля 2009

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

Например, я использую JUnit и NUnit для модульного тестирования и интеграционного тестирования. Существуют ли инструменты для проверки дыма или регрессионного теста?

Ответы [ 21 ]

951 голосов
/ 06 февраля 2009
  • Юнит-тест : Укажите и протестируйте одну точку контракта одного метода класса. Это должно иметь очень узкую и четко определенную область применения. Сложные зависимости и взаимодействия с внешним миром заглушки или насмешки .

  • Интеграционный тест : Проверить правильность взаимодействия нескольких подсистем. Там есть целый спектр, от тестирования интеграции между двумя классами до тестирования интеграции с производственной средой.

  • Дымовой тест (он же проверяет работоспособность) : простой интеграционный тест, при котором мы просто проверяем, что при вызове тестируемой системы он возвращается нормально и не взрывается.

    • Дымовое тестирование - это аналогия с электроникой, когда первый тест проводится при включении питания (если он курит, это плохо!) ...
    • ... и, очевидно , с сантехникой , где система труб буквально заполняется дымом, а затем проверяется визуально. Если что-то курит, система протекает.
  • Регрессионный тест : Тест, написанный при исправлении ошибки. Это гарантирует, что эта конкретная ошибка не возникнет снова. Полное название «нерегрессионный тест». Это также может быть тест, выполненный до изменения приложения, чтобы убедиться, что приложение дает тот же результат.

К этому я добавлю:

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

  • Системный тест : Тестирует систему как черный ящик. Зависимости в других системах часто проверяются или заглушаются во время теста (в противном случае это был бы скорее интеграционный тест).

  • Проверка перед полетом : Испытания, которые повторяются в производственной среде, чтобы облегчить синдром «на моей машине». Зачастую это достигается приемочным или дымовым тестом в производственных условиях.

97 голосов
/ 06 февраля 2009
  • Юнит-тест : автоматический тест для проверки внутренней работы класса. Это должен быть отдельный тест, не связанный с другими ресурсами.
  • Интеграционный тест : автоматический тест, выполняемый в среде, похожий на модульные тесты, но с внешними ресурсами (дБ, доступ к диску)
  • Регрессионный тест : после внедрения новых функций или исправления ошибок вы повторно тестируете сценарии, которые работали в прошлом. Здесь вы описываете возможность, с которой ваши новые функции нарушают существующие функции.
  • Дымовое тестирование : первые тесты, по которым тестировщики могут завершить тестирование, если они продолжат тестирование.
85 голосов
/ 06 февраля 2009

У всех будут немного разные определения, и часто есть серые области. Тем не менее:

  • Юнит-тест: работает ли этот маленький (как можно более изолированный) бит?
  • Интеграционный тест: эти два (или более) компонента работают вместе?
  • Испытание на дым: действительно ли вся эта система (настолько близкая к производственной системе) достаточно хорошо держится вместе? (то есть мы уверены, что это не создаст черную дыру?)
  • Регрессионный тест: случайно ли мы повторно представили ошибки, которые мы ранее исправили?
47 голосов
/ 11 сентября 2013

Новая категория испытаний, о которой я только что узнал, это:

Канарские тесты

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

Примеры могут быть:

  • Имеются ли данные, которые должны быть доступны только в DEV / TEST, в ЖИТЬ.
  • Не удалось запустить фоновый процесс
  • Может ли пользователь войти в систему
18 голосов
/ 06 февраля 2009

апокрифические исторические мелочи: «тестирование дыма» происходит от подводной инженерии (унаследованной от сантехники), где буквальный дым будет закачиваться в корпус, чтобы увидеть, появится ли какой-либо из них снова, что было бы довольно серьезным провалом для подводной лодки!

9 голосов
/ 26 ноября 2015

Ответ одного из лучших сайтов по методам тестирования программного обеспечения:

Типы тестирования программного обеспечения - Полный список Нажмите здесь

enter image description here

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

Надеюсь, это будет полезно:)

8 голосов
/ 04 марта 2009

Модульный тест: проверка того, что конкретный компонент (т. Е. Класс) создал или изменил функции в соответствии с назначением. Этот тест может быть ручным или автоматическим, но не выходит за границы компонента.

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

Регрессионный тест: проверка того, что новые дефекты не внесены в существующий код. Эти тесты могут быть ручными или автоматизированными.

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

Набор инструментов будет в значительной степени зависеть от кодовой базы, но есть много инструментов с открытым исходным кодом для модульного тестирования (JUnit). HP (ртутный) QTP или Borland Silktest являются инструментами для автоматической интеграции и регрессионного тестирования.

6 голосов
/ 26 апреля 2014

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

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

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

регрессионное тестирование повторное выполнение одних и тех же тестовых случаев, чтобы убедиться, что неизмененный модуль не вызывает никаких дефектов. РЕГРЕССИОННОЕ ИСПЫТАНИЕ проходит функциональное тестирование

5 голосов
/ 21 октября 2010

РЕГРЕССИОННОЕ ИСПЫТАНИЕ-

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

4 голосов
/ 12 октября 2014

Модульное тестирование направлено на наименьшую возможную часть реализации. В Java это означает, что вы тестируете один класс. Если класс зависит от других классов, они являются поддельными.

Когда ваш тест вызывает более одного класса, это интеграционный тест .

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

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

...