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

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

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

вопрос задан 6.02.2009
mcaaltuntas
4808 репутация

20 ответов


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

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

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

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

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

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

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

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

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

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

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

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

    Canary test

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

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

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

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

    ответ дан annakata, с репутацией 61567, 6.02.2009
  • 8 рейтинг

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

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

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

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

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

    ответ дан rdrex, с репутацией 11, 4.03.2009
  • 5 рейтинг

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

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

    ответ дан Nikita G, с репутацией 67, 21.10.2010
  • 1 рейтинг

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

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

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

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