Что такое модульные тесты, интеграционные тесты, дымовые тесты и регрессионные тесты? В чем разница между ними и какие инструменты можно использовать для каждого из них?
Например, я использую JUnit и NUnit для модульного и интеграционного тестирования. Существуют ли инструменты для дымового тестирования или регрессионного тестирования?
Тестовый блок: уточнить и проверить один пункт договора один метод класса. Это должно быть очень узкой и определенной области. Сложных зависимостей и взаимодействий с внешним миром стаба или глумились.
Интеграционные тесты: проверка правильного взаимодействия нескольких подсистем. Там есть весь спектр, от тестирования интеграции между двумя классами, для тестирования интеграции с производственной средой.
Тест (ака проверить вменяемость): простой тест интеграции, где мы просто убедитесь, что когда тестируемой системы вызывается он обычно возвращается и не взрывают.
Тест Как провести аналогию с электроникой, где первая проверка происходит при включении в цепь (если она курит, это's плохой!)...
... и, apparently с сантехника, где система труб буквально заполнен дымом, а затем проверяют визуально. Если что-нибудь дымит, система дырявая.
Регрессионный тест: тест, который был написан, когда ошибка была исправлена. Это гарантирует, что эта конкретная ошибка не произойдет снова. Полное наименование является "неухудшение тест-то". Он также может быть тест перед сменой приложение, чтобы убедиться, что приложение предоставляет те же результаты.
К этому я добавлю:
Приемочные испытания: проверить, что функция и правильно реализована. Это похоже на интеграционный тест, но с упором на случай использования для обеспечения, а не на соответствующие компоненты.
Тест-системы: тесты системы как черного ящика. Зависимости от других систем часто издевались или стаба в ходе испытания (иначе было бы более интеграционного теста).
Проведение предполетного досмотра: тесты, которые повторяются в производственной среде, чтобы облегчить 'опирается на мою машину' синдром. Часто это реализуется путем принятия или тест дыма в производственной среде.
У всех разные определения, и часто встречаются серые зоны. Однако:
Новый тест категории I'вэ просто осознать это: <Н2>Канарские тест</Н2> а <б>Канарские тест</б> автоматизированный неразрушающий тест, который на регулярной основе В жить, так что даже если он когда-нибудь сломается, что-то очень плохое произошло.
Примерами могут быть:
апокрифическая историческая мелочь: "испытание дымом" пришло из инженерии подводных лодок (унаследованной от водопровода), где буквально дым закачивали в корпус, чтобы посмотреть, не выйдет ли он обратно, что было бы довольно драматичной неудачей для подводной лодки!
Ответа от одного из лучших сайтов для методы тестирования программного обеспечения:
Виды тестирования программного обеспечения – полный перечень [нажать здесь](http://www.testingexcellence.com/types-of-software-testing-complete-list/)
Это'ы довольно длинное описание, Я'м не собираюсь вставить его здесь: но это может быть полезно для тех, кто хочет знать все методы тестирования.
Надеюсь, что это'll быть полезно :)
Испытание блока: проверка отдельного компонента (например,класс), созданные или измененные функции, как задумано. Этот тест может быть ручной или автоматической, но не выходит за границы компонента.
Интеграционного тестирования: проверка взаимодействия отдельных компонентов функционировать так, как задумано. Интеграционные тесты могут быть выполнены на уровне подразделения или системном уровне. Эти тесты могут быть ручные или автоматические.
Регрессионный тест: проверка того, что новые дефекты не внесены в существующий код. Эти тесты могут быть ручные или автоматические.
В зависимости от ваших ЦРС (водопад, РУП, ловкий и т. д.) особые тесты могут быть выполнены в 'этапы' или все может быть выполнено, более или менее, в то же время. Например, юнит-тестирование может быть ограничено для разработчиков, которые затем поверните код на тестеры для интеграции и тестирования регрессии. Однако другой подход мог бы разработчики делали модульное тестирование и некоторый уровень интеграции и регрессионного тестирования (с использованием подход TDD наряду с непрерывной интеграции и автоматизированного блока и регрессионный анализы).
Набор инструмента будет во многом зависеть от кода, но есть много инструментов с открытым исходным кодом для модульного тестирования (JUnit). Л. с.'ами (Меркурий) QTP или Borland'ы Silktest оба инструмента для автоматизированного интеграционного и регрессионного тестирования.
модульный тест: тестирование отдельных модулей или независимых компонент в приложении, известно, что модульное тестирование , тестирование блока будет сделано разработчиком.
интеграционного тестирования: объединение всех модулей и тестирование приложения, чтобы проверить коммуникации и обмена данными между модулями работают правильно или нет , это тестирование также проводится разработчиками.
тест в дыму тест они проверяют приложением в неглубокую и широкую манеру, В тестирование они проверяют основные функции приложения , если есть какие-либо блокатор проблема в приложении, они будут подчиняться разработчик команда , и развивающаяся команда будет исправить и устранить дефекты, и дать его обратно к команде тестеров и сейчас тестирует команда будем проверять все модули для проверки ТАТ изменения, сделанные в одном модуле повлияет на другие модули или нет. В дыму тестирование тестовые сценарии
регрессионное тестирование выполнение многократно одни и те же тестовые случаи, чтобы убедиться, что без изменений модуля не вызывает каких-либо дефектов. Регрессионное тестирование происходит при функциональном тестировании
"и регрессионного тестирования повторы предыдущих тестах против измененного программного обеспечения, чтобы гарантировать, что изменения, внесенные в текущее программное обеспечение не влияет на функциональность существующего программного обеспечения.&и"
Модульное тестирование направлена на самую малую часть возможной реализации. В Java это означает, что вы тестируете один класс. Если класс зависит от других классов, это подделка.
При тестовых звонках более чем один класс, его тестирование интеграции.
Полный набор тестов может занять много времени для запуска, так что после многих команд изменения работать быстро, чтобы завершить тесты для выявления существенных поломок. Например, вы нарушили синтаксис, что и для основных средств. Это тесты.
Регрессионное тестирование работать в любой конфигурации и позволяют эффективно рефакторинг, ловя, что ты нарушаешь. Любой тест может быть регрессионного тестирования, но я найти модульные тесты являются наиболее полезно найти источник неисправности.
Испытание блока: проверка отдельного компонента (например,класс), созданные или измененные функции, как задумано. Этот тест может быть ручной или автоматической, но не выходит за границы компонента.
Интеграционного тестирования: проверка взаимодействия отдельных компонентов функционировать так, как задумано. Интеграционные тесты могут быть выполнены на уровне подразделения или системном уровне. Эти тесты могут быть ручные или автоматические.
Регрессионный тест: проверка того, что новые дефекты не внесены в существующий код. Эти тесты могут быть ручные или автоматические.
В зависимости от ваших ЦРС (водопад, РУП, ловкий и т. д.) особые тесты могут быть выполнены в 'этапы' или все может быть выполнено, более или менее, в то же время. Например, юнит-тестирование может быть ограничено для разработчиков, которые затем поверните код на тестеры для интеграции и тестирования регрессии. Однако другой подход мог бы разработчики делали модульное тестирование и некоторый уровень интеграции и регрессионного тестирования (с использованием подход TDD наряду с непрерывной интеграции и автоматизированного блока и регрессионный анализы).
Один тип испытаний, что, кажется, стоит упомянуть в этой теме-это стресс/производительность/нагрузочных тестов, которые могут быть проще говоря, как выяснить пределы, за которые определенная часть программного обеспечения, перерывов. Отметим, что с точки зрения механической обработки необходимо, чтобы точно определить рамки того, что предлагается стресс-тесты с точки зрения системы. Например, в случае с "веб-приложение и" стресс-тестирование может включать в свою сферу приложения веб-сервера и так оснастка может вмешаться на том конце. Вот хороший пост о тестирование нагрузки HTTP
Я просто хотел добавить и дать немного больше контекста о том, почему у нас есть эти уровни проверить, что они действительно имею в виду с примерами
Майк Кон в своей книге “преуспевать с гибкой” придумал “пирамиду тестирование” как способ реализации автоматических тестов в проектах. Существуют различные интерпретации этой модели. Модель объясняет, какие автоматизированные тесты должны быть созданы, как быстро они могут дать обратную связь на тестируемое приложение, а кто пишет эти тесты. Есть в основном 3 уровня автоматизированного тестирования, необходимые для любого проекта, и они таковы.
Тестов- Эти испытания наименьшим компонентом программного приложения. Это может буквально быть одну функцию в код, который вычисляет значение, основанное на некоторых входах. Эта функция является частью нескольких других функций аппаратного/кодовой базы программного обеспечения, что делает приложение.
Например, возьмем веб-приложения на основе калькулятора. Мельчайшие составляющие этого приложения, который должен быть полностью протестированы, может быть функция, которая выполняет то, что выполняет вычитание и так далее. Все эти функции вместе составляют приложения "Калькулятор".
Исторически разработчик пишет эти тесты, как они обычно записываются на языке программирования в программу. Блок тестирования, такие как JUnit и Нанит (для Java), что MSTest (для C# и .NET) и Жасмин/Мокко (для JavaScript) используются для этой цели.
Самым большим преимуществом модульных тестов, они бегут очень быстро под пользовательского интерфейса и мы можем получить быструю обратную связь о приложении. Это должны составлять более 50% от автоматических тестов.
*Тестов-по API/интеграция* Эти испытания различных компонентов системы программного обеспечения вместе. Компоненты могут включать тестирование базы данных, интерфейс прикладного программирования (АРІ), в 3-й партии инструментов и услуг вместе с заявкой.
Например, в нашем калькуляторе выше примера, веб-приложения могут использовать базу данных для хранения значений, использовать API, чтобы сделать некоторые проверки на стороне сервера и может использовать 3-й партии инструмент/сервис для публикации результатов в облаке, чтобы сделать его доступным на различных платформах.
Исторически застройщиком или техническим QA могли написать эти тесты, используя различные инструменты, такие как почтальон, SoapUI, JMeter и другие инструменты, такие как тестим.
Эти бегут гораздо быстрее, чем тесты пользовательского интерфейса, так как они по-прежнему работать под капотом но может занять немного больше времени, чем юнит-тесты, как это для проверки связи между различными независимыми компонентами системы и обеспечить полную интеграцию. Это должны составлять более 30% от автоматических тестов.
*Тестов-уй* Наконец, у нас есть тесты, которые проверяют пользовательского интерфейса приложения. Эти тесты обычно пишутся для тестирования конца в конец проходит через приложения.
Например - в калькулятор, конец в конец потока может быть, открывая браузер-> У входа в калькулятор URL-адрес приложения -и GT; вход с логин/пароль -> Открытие калькулятор -> выполнения некоторых операций на калькуляторе -> проверки этих результатов от UI -> выход из приложения. Это может быть одной из конца в конец потока, что бы быть хорошим кандидатом для автоматизации пользовательского интерфейса.
Исторически, или ручных тестеров технического качества записи тестов пользовательского интерфейса. Они использования систем с открытым исходным кодом, такие как селен или UI тестирование платформ, таких как тестим для создания, выполнения и поддержания тесты. Эти тесты дать больше визуальной обратной связи, как вы можете увидеть, как выполняются тесты, разница между ожидаемыми и фактическими результатами скриншоты, логи, отчеты об испытаниях.
Самым большим недостатком тестов пользовательского интерфейса, они относительно медленно по сравнению с единицей и тесты на уровне API. Так, она должна составлять лишь 10-20% от общего автоматизированных тестов.
Следующие два вида тестов могут различаться в зависимости от проекта, но идея-
Тесты
Это может быть сочетание вышеперечисленных 3-х уровнях тестирования. Идея в том, чтобы запустить его при каждой проверке кода и обеспечения критических функций системы по-прежнему работает, как ожидалось; после изменения кода объединяются. Они, как правило, должны работать с 5 - 10 мин. Для получения быстрой обратной связи на неудачи
Регрессионное Тестирование
Они, как правило, выполняются один раз в день, по крайней мере, и охватывают различные функциональные системы. Они обеспечивают приложение по-прежнему работает, как ожидалось. Они более детально, чем тесты дыма и охватывать большее количество сценариев применения, включая некритичные.
Дым и санитарного тестирования как выполняется через программное обеспечение, чтобы определить, следует ли начать тестирование. Вменяемость может или не может быть выполнено после испытания дыма. Они могут быть выполнены по отдельности или одновременно - вменяемость сразу после дыма.
Поскольку санитарное тестирование-это более глубокое и занимает больше времени, в большинстве случаев, это хорошо стоит того, чтобы быть автоматизировано.
Тестирование обычно занимает не более 5-30 минут для выполнения. Он является более общим: он проверяет, небольшое число основных функций системы в целом, для того, чтобы убедиться, что стабильность программного обеспечения является достаточно хорошим для дальнейшего тестирования и что нет никаких проблем, блокирующих запуск запланированных тестов.
Санитарное тестирование является более подробным, чем курить и может занять от 15 минут до целого дня, в зависимости от масштабов новой сборки. Это более специализированный тип приемочные испытания, проведенные после прогрессирования или повторного тестирования. Он проверяет основные особенности некоторых новых функциональных возможностей и/или исправления ошибок вместе с некоторыми тесно связанные с ними объекты, чтобы убедиться, что они функционируют как к необходимой оперативной логики, прежде чем регрессионное тестирование может быть выполнена в большем масштабе.
Модульное тестирование: он всегда выполняет застройщик после их разработки, чтобы выяснить вопрос с их стороны тестирования, прежде чем сделать какие-либо требования готова к QA.
Интеграционное тестирование: это означает, тестер для проверки модуля для проверки суб модуль, когда некоторые данные/вывода функции на один модуль в другой модуль. Или в вашей системе при использовании стороннего инструмента, который с помощью системы данных для интеграции.
Тестирование: тестер, проведенные для проверки системы на высоком уровне тестирования и пытаюсь выяснить, стопор Буга до изменений или код идет в прямом эфире.
Регрессионное тестирование: тестер выполнен регрессии для проверки существующей функциональности в связи с изменениями реализован в системе для нового улучшения или изменения в системе.
тесты юнит-тесты-это очень низкий уровень, ближе к источнику вашей приложения. Они заключаются в проверке отдельных методов и функций классов, компонентов или модулей, используемых в программном обеспечении. Блок тесты вообще довольно дешево для автоматизации и может быть запущен очень быстрый сервер непрерывной интеграции.
интеграционные тесты интеграционные тесты проверяют, что различные модули или сервисы используют ваше приложение работало хорошо вместе. Например, это может быть тестирование взаимодействия с базой данных или убедившись, что микрослужб работать вместе, как ожидалось. Эти типы тестов больше дорогими, так как они требуют различных частях приложения быть запущен и работает.
функциональные пробы функциональные пробы сосредоточиться на бизнес-требования приложения. Они проверяют только на выходе и не проверки промежуточных состояний системы при выполнении, что действие.
иногда возникает путаница между интеграционных тестов и и GT; функциональные тесты, как они оба требуют нескольких компонентов, чтобы взаимодействовать с друг друга. Разница в том, что интеграционный тест может просто проверки можно выполнить запрос к базе данных во время функционального испытания ожидать, чтобы получить определенное значение из базы данных, как они определены требования к продукту.
конец-в-конец тестов сквозное тестирование имитирует поведение пользователей с программное обеспечение в полной среде приложения. Он проверяет, что различные пользовательские потоки будут работать, как ожидалось, и это может быть также просто, как загрузка веб-страницы или входа в систему или более сложных сценариев проверки электронной почты уведомления, онлайн-платежей и т. д...
сквозные тесты очень полезны, но они'повторно дорогие, чтобы проанализировать и может быть трудно поддерживать, когда они'вновь автоматизирован. Рекомендуется есть несколько ключевых сквозных тестов и полагаться больше на низком уровне типов тестирование (юнит и интеграционные тесты), чтобы иметь возможность быстро идентифицировать критические изменения.
приемочные испытания приемочные испытания являются формальными тестами, выполненными в проверять, если система удовлетворяет требованиям бизнеса. Они требуют все приложение, чтобы быть запущен и сосредоточиться на тиражирование поведение пользователей. Но они также могут пойти дальше и измерить производительность системы и отклонить изменения, если определенные цели не мет.
тестирование производительность тесты проверки поведения систему, когда она находится под большой нагрузкой. Эти тесты нефункциональные и могут иметь различную форму, чтобы понять надежность, стабильность и доступность платформы. Для В частности, это можно наблюдать время отклика при выполнении высокой количество запросов, или видя, как ведет себя система с существенные данных.
тесты производительности являются по своей природе довольно дорого и бегать, но они могут помочь вам понять, если новые изменения будут ухудшить систему.
тестирование курить тесты простые тесты, которые проверяют базовые функциональность приложения. Они предназначены, чтобы быть быстрым, чтобы выполнение, и их цель-дать вам уверенность в том, что основным особенности системы работают, как ожидалось.
тесты могут быть полезны сразу после новой сборки изготавливается решать или вы не можете запускать более дорогостоящие анализы, или сразу после развертывание, чтобы убедиться, что их приложение работает должным образом в > в развернутой среде.
источник: https://www.atlassian.com/continuous-delivery/software-testing/types-of-software-testing
Модульное Тестирование:- модульное тестирование обычно производится на стороне разработчиков,где в качестве тестеров частично эволюционировали в этом виде тестирования, где проводятся испытания блока на блок. В случаях тест в JUnit также можно проверить, правильно ли написан код подходит или нет.
Тестирование Интеграции:- Этот тип тестирования является возможным после модульного тестирования, когда все/некоторые компоненты интегрированы.Этот тип тестирования убедитесь в том, что когда компоненты интегрированы,они влияют друг на другие рабочие возможности или функционалистами.
Испытание Дыма:- Этот вид тестирования выполняется в самом конце, когда система интегрирована успешно и готов к работе на производственном сервере. Этот тип тестирования убедитесь в том, что каждый важный функционал от начала до конца работает нормально, и система готова для развертывания на рабочем сервере.
Тестирование:- Этот тип испытаний необходимо проверить, что непреднамеренные/нежелательные дефекты не присутствуют в системе, когда разработчик исправлены некоторые проблемы. Это тестирование также убедитесь, что все ошибки были успешно решены, и из-за этого не возникло других вопросов.
Некоторые хорошие ответы уже, но хотелось бы доработать их:
Модульное тестирование-это единственная форма тестирования белого ящика здесь. Остальные тестирование черного ящика. Белый квадрат тестирования означает, что вы знаете входе, вы знаете внутреннее устройство механизма и может проверить его, и вы знаете выход. При тестировании черного ящика, вы знаете только то, что на входе и что на выходе должно быть.
Так четко модульное тестирование-это только тестирование здесь белая коробка.
Тест дыма уже объяснил здесь и прост. Тест регрессии идет при тестировании интеграции.
Автоматизированные тесты можно разделить на просто 2.
Юнит-тестов и интеграционных тестов. (это все, что имеет значение)
Я назвал бы использовать фразу "на длительный тест-то"(ЛТ) для всех тестов как интеграционного тестирования, функционального тестирования, регрессионного тестирования, тестирования интерфейса и т. д. И модульного тестирования как "короткий тест на".
А lt примером может быть автоматически загружает веб-страницы, войдя в учетную запись и покупка книги. Если тест пройден, более вероятно, чтобы работать на прямую таким же образом(отсюда и 'лучше спишь' ссылка). Долго = расстояние между web-страницу(начало) и базы данных(окончание).
И это большая статья, обсуждая преимущества интеграционное тестирование(длинный тест) за тестирование блока