Что такое юнит-тесты, интеграционные тесты, тесты на дым и регрессионные тесты? Каковы различия между ними и какие инструменты я могу использовать для каждого из них?
Например, я использую JUnit и NUnit для модульного тестирования и интеграционного тестирования . Существуют ли какие-либо инструменты для последних двух, тестирования дыма или регрессионного тестирования ?
unit-testing
testing
definition
caltuntas
источник
источник
Ответы:
Юнит-тест : Укажите и протестируйте одну точку контракта одного метода класса. Это должно иметь очень узкую и четко определенную область применения. Сложные зависимости и взаимодействия с внешним миром являются заглушкой или насмешкой .
Интеграционный тест : проверить правильность взаимодействия нескольких подсистем. Там есть целый спектр от тестирования интеграции между двумя классами до тестирования интеграции с производственной средой.
Тест дыма (он же проверка работоспособности ) : простой интеграционный тест, в котором мы просто проверяем, что при вызове тестируемой системы она возвращается нормально и не взрывается.
Регрессионный тест : тест, который был написан, когда ошибка была исправлена. Это гарантирует, что эта конкретная ошибка не возникнет снова. Полное название «нерегрессионный тест». Это также может быть тест, выполненный до изменения приложения, чтобы убедиться, что приложение дает тот же результат.
К этому я добавлю:
Приемочный тест : проверка правильности реализации функции или варианта использования. Это похоже на интеграционный тест, но с акцентом на сценарии использования, а не на задействованные компоненты.
Системный тест : тестирует систему как черный ящик. Зависимости в других системах во время теста часто высмеиваются или заглушаются (в противном случае это было бы скорее интеграционным тестом).
Проверка перед полетом : тесты, которые повторяются в производственной среде, чтобы облегчить синдром «на моей машине». Зачастую это достигается путем проведения приемочного или дымового испытания в производственной среде.
источник
источник
У всех будут немного разные определения, и часто есть серые области. Однако:
источник
myprj
это основной каталог проекта, иmypkg
он находится в папке, уmyprj
меня есть модульные тестыmyprj/tests/test_module1.py
, а мой пакет - в папкеmyprj/mypkg
. Это прекрасно работает для модульных тестов, но мне интересно, есть ли какое-либо соглашение, я должен следовать за тем, где должны находиться интеграционные тесты?Новая категория тестов, о которой я только что узнал, - это канарейка . Канарский тест - это автоматический, неразрушающий тест, который регулярно проводится в прямом эфире среде, так что если он когда-либо не проходит, происходит что-то действительно плохое.
Примеры могут быть:
источник
Ответ с одного из лучших сайтов по методам тестирования программного обеспечения:
Типы тестирования программного обеспечения - полный список нажмите здесь
источник
Модульный тест: проверка того, что конкретный компонент (т. Е. Класс) создал или изменил функции в соответствии с назначением. Этот тест может быть ручным или автоматическим, но он не выходит за пределы компонента.
Интеграционный тест: проверка того, что взаимодействие отдельных компонентов функционирует так, как задумано. Интеграционные тесты могут выполняться на уровне устройства или на уровне системы. Эти тесты могут быть ручными или автоматизированными.
Регрессионный тест: проверка того, что новые дефекты не внесены в существующий код. Эти тесты могут быть ручными или автоматизированными.
В зависимости от вашего SDLC ( водопад , RUP , Agile и т. Д.) Конкретные тесты могут выполняться поэтапно или могут выполняться более или менее одновременно. Например, модульное тестирование может быть ограничено разработчиками, которые затем передают код тестерам для интеграции и регрессионного тестирования. Тем не менее, другой подход может заключаться в том, что разработчики проводят модульное тестирование и некоторый уровень интеграции и регрессионного тестирования (с использованием TDD). подход наряду с непрерывной интеграцией и автоматизированными модульными и регрессионными тестами).
Набор инструментов будет в значительной степени зависеть от кодовой базы, но есть много инструментов с открытым исходным кодом для модульного тестирования (JUnit). HP (Mercury) QTP или Borland Silk Test являются инструментами для автоматической интеграции и регрессионного тестирования.
источник
Модульное тестирование : тестирование отдельного модуля или независимого компонента в приложении, как известно, является модульным тестированием. Модульное тестирование будет выполнено разработчиком.
Интеграционный тест : объединение всех модулей и тестирование приложения для проверки правильности работы связи и обмена данными между модулями. Это тестирование также проводится разработчиками.
Тест на дымность В тесте на дым они проверяют применение неглубоким и широким способом. В тестировании дыма они проверяют основную функциональность приложения. Если в приложении возникнут какие-либо проблемы с блокировщиками, они сообщат об этом команде разработчиков, а команда разработчиков исправит их, исправит дефект и вернет его группе тестирования. Теперь команда тестирования проверит все модули, чтобы убедиться, что изменения, сделанные в одном модуле, повлияют на другой модуль или нет.В тестировании дыма тестовые случаи написаны по сценарию.
Регрессионное тестирование, выполняющее одни и те же тестовые примеры несколько раз, чтобы убедиться, что неизмененный модуль не вызывает никаких дефектов. Регрессионное тестирование проходит функциональное тестирование
источник
РЕГРЕССИЯ
«Регрессионный тест повторно запускает предыдущие тесты с измененным программным обеспечением, чтобы гарантировать, что изменения, внесенные в текущее программное обеспечение, не влияют на функциональность существующего программного обеспечения».
источник
"regression test"
и"non-regression test"
. Это то же самое.Я просто хотел добавить и дать больше контекста о том, почему у нас есть эти уровни тестирования, что они действительно означают с примерами
Майк Кон в своей книге «Успех с Agile» придумал «Пирамиду тестирования» как способ приблизиться к автоматизированным тестам в проектах. Существуют различные интерпретации этой модели. Модель объясняет, какие виды автоматических тестов необходимо создавать, как быстро они могут дать отзыв о тестируемом приложении и кто пишет эти тесты. В принципе, для любого проекта необходимо 3 уровня автоматического тестирования, и они заключаются в следующем.
Модульные тесты тесты - это тестирование самого маленького компонента вашего программного приложения. Это может быть буквально одна функция в коде, которая вычисляет значение на основе некоторых входных данных. Эта функция является частью ряда других функций аппаратной / программной кодовой базы, составляющей приложение.
Например, давайте возьмем приложение для веб-калькулятора. Наименьшими компонентами этого приложения, которые должны быть проверены модулем, может быть функция, которая выполняет сложение, другая функция, которая выполняет вычитание и так далее. Все эти маленькие функции вместе взятые составляют приложение калькулятора.
Исторически разработчик пишет эти тесты, так как они обычно пишутся на том же языке программирования, что и программное приложение. Для этой цели используются платформы модульного тестирования, такие как JUnit и NUnit (для java), MSTest (для C # и .NET) и Jasmine / Mocha (для JavaScript).
Самым большим преимуществом модульных тестов является то, что они работают очень быстро под пользовательским интерфейсом, и мы можем быстро получить отзыв о приложении. Это должно составлять более 50% ваших автоматических тестов.
API / интеграционные тесты они тестируют различные компоненты системы программного обеспечения вместе. Компоненты могут включать тестирование баз данных, API (Application Programming Interface), сторонних инструментов и сервисов вместе с приложением.
Например - в нашем примере калькулятора, приведенном выше, веб-приложение может использовать базу данных для хранения значений, использовать API для выполнения некоторых проверок на стороне сервера и может использовать сторонний инструмент / службу для публикации результатов в облаке, чтобы сделать их доступными для разных платформ.
Исторически разработчик или технический QA писал бы эти тесты, используя различные инструменты, такие как Postman, SoapUI, JMeter и другие инструменты, такие как Testim.
Они выполняются намного быстрее, чем тесты пользовательского интерфейса, поскольку они все еще выполняются под капотом, но могут занимать немного больше времени, чем модульные тесты, поскольку он должен проверять связь между различными независимыми компонентами системы и обеспечивать их бесшовную интеграцию. Это должно составлять более 30% автоматизированных тестов.
Тесты пользовательского интерфейса. Наконец, у нас есть тесты, которые проверяют пользовательский интерфейс приложения. Эти тесты обычно пишутся для тестирования сквозных потоков через приложение.
Например - В приложении калькулятора сквозной поток может быть следующим: открытие браузера-> Ввод URL-адреса приложения калькулятора -> Вход в систему с именем пользователя / паролем -> Открытие приложения калькулятора -> Выполнение некоторых операций над калькулятором -> проверка этих результатов из пользовательского интерфейса -> Выход из приложения. Это может быть сквозной поток, который будет хорошим кандидатом для автоматизации пользовательского интерфейса.
Исторически, технические QA или ручные тестеры пишут тесты пользовательского интерфейса. Они используют платформы с открытым исходным кодом, такие как Selenium или платформы тестирования пользовательского интерфейса, такие как Testim, для создания, выполнения и сопровождения тестов. Эти тесты дают больше визуальной обратной связи, поскольку вы можете видеть, как проходят тесты, разницу между ожидаемыми и фактическими результатами с помощью скриншотов, журналов, отчетов о тестах.
Самое большое ограничение тестов пользовательского интерфейса, они относительно медленны по сравнению с тестами уровня и уровня API. Таким образом, он должен составлять всего 10-20% от всех автоматизированных тестов.
Следующие два типа тестов могут варьироваться в зависимости от вашего проекта, но идея заключается в том,
Тесты дыма
Это может быть комбинацией вышеуказанных 3 уровней тестирования. Идея состоит в том, чтобы запускать его во время каждой регистрации кода и гарантировать, что критические функции системы по-прежнему работают должным образом; после изменения нового кода объединяются. Как правило, они должны работать в течение 5-10 минут, чтобы получить более быструю обратную связь о сбоях
Регрессионные тесты
Они обычно запускаются как минимум раз в день и охватывают различные функции системы. Они гарантируют, что приложение все еще работает как ожидалось. Они более подробны, чем дымовые тесты, и охватывают больше сценариев применения, включая некритические.
источник
Модульное тестирование направлено на наименьшую возможную реализацию. В Java это означает, что вы тестируете один класс. Если класс зависит от других классов, они являются поддельными.
Когда ваш тест вызывает более одного класса, это интеграционный тест .
Полные комплекты тестов могут занять много времени, поэтому после изменения многие команды быстро запускают тесты для выявления значительных поломок. Например, вы взломали URI для основных ресурсов. Это тесты на дым .
Регрессионные тесты выполняются на каждой сборке и позволяют эффективно проводить рефакторинг, отслеживая то, что вы сломали. Любой вид теста может быть регрессионным, но я считаю, что юнит-тесты наиболее полезны для выявления источника ошибки.
источник
источник
Модульное тестирование: разработчик всегда выполняет после своей разработки, чтобы выяснить проблему со стороны тестирования, прежде чем они подготовят какое-либо требование для обеспечения качества.
Интеграционное тестирование: это означает, что тестер должен проверять верификацию модуля к субмодулю, когда некоторые выходные данные / функции передаются от одного модуля к другому модулю. Или в вашей системе, если вы используете сторонний инструмент, который использует ваши системные данные для интеграции.
Тестирование дыма: тестер выполнил проверку системы для высокоуровневого тестирования и попытался обнаружить ошибку show stoppper перед изменениями или вводом кода в действие.
Регрессионное тестирование: тестер выполнил регрессию для проверки существующей функциональности из-за изменений, внесенных в систему для новых улучшений или изменений в системе.
источник
Модульное тестирование
Модульное тестирование обычно выполняется разработчиками, в то время как тестеры частично развиваются в этом типе тестирования, где тестирование проводится по частям. В Java тестовые примеры JUnit также позволяют проверить, идеально ли написан код или нет.
Интеграционное тестирование:
Этот тип тестирования возможен после модульного тестирования, когда все / некоторые компоненты интегрированы. Этот тип тестирования позволит убедиться, что когда компоненты интегрированы, они влияют на рабочие возможности или функциональность друг друга?
Тестирование дыма
Этот тип тестирования выполняется в последний раз, когда система успешно интегрирована и готова к работе на рабочем сервере.
Этот тип тестирования гарантирует, что все важные функции от начала до конца работают нормально и система готова к развертыванию на рабочем сервере.
Регрессионное тестирование
Этот тип тестирования важен для проверки того, что непреднамеренные / нежелательные дефекты отсутствуют в системе, когда разработчик исправил некоторые проблемы. Это тестирование также гарантирует, что все ошибки успешно устранены, и поэтому никаких других проблем не возникает.
источник
Проверка дыма и работоспособность выполняются после сборки программного обеспечения, чтобы определить, стоит ли начинать тестирование. Разумность может быть или не может быть выполнена после тестирования дыма. Они могут быть выполнены по отдельности или в одно и то же время - здравомыслие сразу после дыма.
Поскольку тестирование работоспособности более глубокое и занимает больше времени, в большинстве случаев его стоит автоматизировать.
Дымовое тестирование обычно занимает не более 5-30 минут для выполнения. Он более общий: он проверяет небольшое количество основных функций всей системы, чтобы убедиться, что стабильность программного обеспечения достаточно хороша для дальнейшего тестирования и что нет проблем, блокирующих выполнение запланированных тестовых случаев.
Проверка работоспособности более детальна, чем дым, и может занять от 15 минут до целого дня, в зависимости от масштаба новой сборки. Это более специализированный тип приемочного тестирования, выполняемый после прохождения или повторного тестирования. Он проверяет основные функции некоторых новых функций и / или исправлений ошибок вместе с некоторыми тесно связанными с ними функциями, чтобы убедиться, что они функционируют в соответствии с требуемой операционной логикой, прежде чем регрессионное тестирование может быть выполнено в более широком масштабе.
источник
Уже есть несколько хороших ответов, но я хотел бы уточнить их:
Модульное тестирование является единственной формой тестирования белого ящика здесь. Остальные тестируют черный ящик. Тестирование белого ящика означает, что вы знаете вход; Вы знаете внутреннюю работу механизма и можете проверить его, и вы знаете результат. При тестировании черного ящика вы знаете только, что является входным сигналом и каким должен быть выход.
Поэтому очевидно, что модульное тестирование - единственное тестирование белого ящика.
источник
Дымовые тесты здесь уже объяснены и просты. Регрессионные тесты подпадают под интеграционные тесты.
Автоматизированные тесты можно разделить только на два.
Модульные тесты и интеграционные тесты (это все, что имеет значение)
Я бы назвал использование фразы «длинный тест» (LT) для всех тестов, таких как интеграционные тесты, функциональные тесты, регрессионные тесты, тесты пользовательского интерфейса и т. Д. И модульные тесты, как «короткий тест».
Примером LT может быть автоматическая загрузка веб-страницы, вход в учетную запись и покупка книги. Если тест пройден, он, скорее всего, будет работать на живом сайте таким же образом (отсюда и ссылка «лучший сон»). Long = расстояние между веб-страницей (начало) и базой данных (конец).
И это отличная статья, в которой обсуждаются преимущества интеграционного тестирования (длительного тестирования) перед модульным тестированием .
источник
Тест Регресс - это тип тестирования программного обеспечения , где мы стараемся охватить и проверить вокруг баг фикс . Функциональность вокруг исправления ошибки не должна изменяться или изменяться из-за предоставленного исправления. Проблемы, обнаруженные в таком процессе, называются проблемами регрессии .
Тестирование дыма: это своего рода тестирование, чтобы решить, принимать ли сборку / программное обеспечение для дальнейшего тестирования качества.
источник