it-swarm.com.ru

Что такое юнит-тест, интеграционный тест, дымовой тест, регрессионный тест?

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

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

629
mcaaltuntas
  • Unit test: Укажите и протестируйте одну точку контракта одного метода класса. Это должно иметь очень узкую и четко определенную область применения. Сложные зависимости и взаимодействия с внешним миром заглушки или насмешки .

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

  • Smoke test (aka Sanity check): простой интеграционный тест, где мы просто проверяем, что при вызове тестируемой системы он возвращается нормально и не взрывается. 

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

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

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

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

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

924
ddaa
  • Юнит тест : автоматический тест для проверки внутренней работы класса. Это должен быть отдельный тест, который не связан с другими ресурсами.
  • Интеграционный тест : автоматический тест, который выполняется в среде, так похож на модульные тесты, но с внешними ресурсами (дБ, доступ к диску)
  • Регрессионный тест : после внедрения новых функций или исправления ошибок вы повторно тестируете сценарии, которые работали в прошлом. Здесь вы раскрываете возможность, в которой ваши новые функции нарушают существующие функции.
  • Дымовое тестирование : первые тесты, на которых тестировщики могут завершить, если они продолжат тестирование.
95
Gerrie Schenck

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

  • Модульный тест: работает ли этот маленький (как можно более изолированный) элемент?
  • Интеграционный тест: работают ли эти два (или более) компонента вместе?
  • Испытание на дым: действительно ли вся эта система (настолько близкая к производственной системе) достаточно хорошо держится вместе? (т.е. мы достаточно уверены, что это не создаст черную дыру?)
  • Регрессионный тест: случайно ли мы повторно представили ошибки, которые мы ранее исправили?
82
Jon Skeet

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

Канарейка тест

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

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

  • Данные, которые должны быть доступны только в DEV/TEST, появились в LIVE.
  • Не удалось запустить фоновый процесс
  • Может ли пользователь войти
45
AndyM

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

17
annakata

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

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

 enter image description here

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

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

9
Kaleem Ullah

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

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

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

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

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

8
rdrex

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

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

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

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

6
malini

РЕГРЕССИЯ

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

5
Nikita G

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

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

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

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

4
Dave

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

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

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

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

3
nhfghfgsq

Одним из типов тестов, который, по-видимому, стоит упомянуть в этом потоке, являются стресс-тесты/тесты производительности/нагрузки, которые можно просто определить как выяснение пределов, за которые ломается определенная часть программного обеспечения. Обратите внимание, что с точки зрения инструментов важно точно определить объем того, что предлагается для стресс-тестов с точки зрения системы. Например, в случае «веб-приложения» стресс-тестирование может включать в себя само приложение веб-сервера, и поэтому инструменты могли вмешиваться с этой целью . Вот хороший пост о http нагрузочное тестирование

3
Jaime Gago

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

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

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

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

2
mohit sarsar

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

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

Дымовое тестирование обычно занимает не более 5-30 минут для выполнения. Он более общий: он проверяет небольшое количество основных функций всей системы, чтобы убедиться, что стабильность программного обеспечения достаточно хороша для дальнейшего тестирования и что нет проблем, блокирующих выполнение запланированных тестовых случаев.

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

2
Radostta
  • Интеграционное тестирование: интеграционное тестирование - это еще один элемент интеграции
  • Тестирование дыма: Тестирование дыма также известно как тестирование версии сборки. Тестирование дыма - это начальный процесс тестирования, выполняемый для проверки готовности/стабильности тестируемого программного обеспечения для дальнейшего тестирования.
  • Регрессионное тестирование: Регрессионное тестирование - это повторное тестирование. Внедрено ли новое программное обеспечение в другой модуль или нет.
  • Модульное тестирование: это тестирование белого ящика. В нем участвуют только разработчики
2
Madhivanan

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

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

Тестирование дыма: тестер выполнил проверку системы для высокоуровневого тестирования и попытался обнаружить ошибку show stoppper перед изменениями или вводом кода в действие.

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

1
Krunal

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

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

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

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

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

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

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

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

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

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

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

источник: https://www.atlassian.com/continuous-delivery/software-testing/types-of-software-testing

1
令狐葱

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

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

1
Sanyal

Некоторые хорошие ответы уже есть, но я хотел бы уточнить их:

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

Поэтому очевидно, что модульное тестирование - единственное тестирование белого ящика здесь.

  • Модульное тестирование тестирует определенные фрагменты кода. Обычно методы. 
  • Интеграционное тестирование позволяет проверить, может ли ваша новая функциональная часть программного обеспечения интегрироваться со всем остальным.
  • Регрессионное тестирование. Это тестирование сделано, чтобы убедиться, что вы ничего не сломали. Все, что раньше работало, должно работать.
  • Дымовое тестирование проводится как быстрый тест, чтобы убедиться, что все выглядит хорошо, прежде чем приступить к более активному тестированию.
1
uriDium

Дымовой тест здесь уже объяснен и прост. Регрессионный тест входит в интеграционный тест.

Автоматизированные тесты можно разделить только на 2.

Модульный тест и интеграционный тест. (это все, что имеет значение)

Я бы назвал использование фразы «длинный тест» (LT) для всех тестов, таких как интеграционный тест, функциональный тест, регрессионный тест, тест пользовательского интерфейса и т.д. И модульный тест как «короткий тест».

Примером LT может быть автоматическая загрузка веб-страницы, вход в учетную запись и покупка книги. Если тест пройден, он, скорее всего, будет работать на живом сайте таким же образом (отсюда и ссылка на «лучший сон»). Long = расстояние между веб-страницей (начало) и базой данных (конец).

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

0
Blue Clouds

Упрощенно.

Юнит тест: Тестирование отдельного фрагмента кода, алгоритма, класса или системы. Этот тест должен быть независимым, а зависимости должны быть смоделированы или заглушены.

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

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

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

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

https://www.udemy.com/testes-de-integracao-com-spring-boot/?couponCode=TISB_ODESC2019

0
Yuri Adeodato