Модульное тестирование или функциональное тестирование? [закрытый]
недавно я слышал о функциональном тестировании над модульным тестированием.
Я понимаю, что модульное тестирование проверяет каждую из возможностей данного фрагмента кода из его самой атомной формы. Но как насчет функционального тестирования?
Это звучит для меня как только тестирование, если код работает, но является ли он таким же надежным, как модульное тестирование?
Мне сказали, что есть две школы мысли по этому вопросу. Certains предпочли бы модульное тестирование, другие функциональные Тестирование.
есть ли хорошие ресурсы, ссылки, книги, какие-либо ссылки или один из вас, кто может объяснить и осветить мой путь по этому вопросу?
спасибо!
8 ответов
ответ Джейсона правильный. Различные типы тестов имеют различные цели, и могут быть наслоены для самых лучших результатов (хорошего дизайна, спецификаций встречи, уменьшенных дефектов).
- модульное тестирование = дизайн дисков (с
модульное тестирование по сравнению с функциональным тестированием не является xor
, а and
. Модульное тестирование - это тестирование блоков в изоляции, а функциональное тестирование-тестирование всего в интеграции (все ли блоки работают вместе правильно?).
оба являются необходимыми компонентами хорошей практики разработки программного обеспечения.
модульное тестирование проверяет ваши единицы кода (методы и т. д.), Чтобы убедиться, что они делают то, что вы ожидаете от них.
функциональное тестирование проверяет ваш дизайн системы, чтобы убедиться, что части взаимодействуют правильно. Если вы напишете команду, которая принимает и int и возвращает строку и проверяет ее полностью, вы можете быть уверены, что она работает. Но если у вас нет системных тестов, вы можете никогда не заметить, что остальная часть кода думает, что она может принять null, но не может.
оба типа тестирования важный.
edit: чтобы добавить немного другое представление к тому, что сказал gbjbaanb:
- модульный тест = мой код работает
- функциональный тест = мои проектные работы
- Integration test = мой код правильно использует ваш сторонний материал (базы данных и т. д.)
- заводские приемочные испытания = моя система работает
- Site Acceptance Test = ваш код отстой, это совсем не то, что я просил!?!
- тест блока = низкой, низком уровне.
- функциональный тест = средний, модульный уровень.
- интеграционный тест = более высокий уровень приложения.
- заводские приемочные испытания = посмотреть все это работа
- приемочный тест сайта = увидеть все это не удается:)
все вышеперечисленное полезно, но они не являются взаимоисключающими. Вы должны делать большинство из них, но количество времени, которое вы тратите на каждую часть, зависит от результатов, которые вы получаете они, вот и все. Если ваш код слишком модульный, чтобы его можно было легко протестировать, потратьте свои усилия на функциональные тесты. Если вы пишете библиотеку небольших компонентов, потратьте свое время на их модульное тестирование, и если вы пишете системы управления для военных ракет, вы обязательно должны быть приемочным испытанием их (как взрывы, даже когда это не удается, это весело :))
функциональное тестирование, также называемый тестирование системы,, направлен на тестирование системы и проверка функциональных требований.
тестирование нацелен на тестирование "единиц", т. е. функций или методов, из которых строится система в изоляции. Иногда это называется тестированием разработчиков. Модульное тестирование может быть сложным после того, как факт, вот почему TDD записывает тест перед кодом.
те are дополнительных по мере того как блоки могут работать независимо и не интегрированный совсем совместно, или они могут пройти модульные испытания, и не выполнить все требования к продукта.
модульное тестирование и функциональное тестирование имеют два разных результата.
модульное тестирование проверяет, что небольшой фрагмент кода работает так, как ожидалось. Обычно это делается разработчиком, чтобы убедиться, что код работает правильно. Они, как правило, автоматизированы с помощью Testing-framework.
функциональное тестирование проверяет, что функция работает так, как ожидалось, пройдя через определенный путь через программу. Они обычно выполняются человеком на программном обеспечении что программа будет работать так, как она должна для пользователя. Он, как таковой, является более высоким уровнем, и таким образом тестирует сразу несколько единиц.
Я думаю, что оба важны. Если у вас ограниченные ресурсы, и вам нужно выбрать/выбрать методы, и я думаю, что это зависит от продуктов, которые вы создаете, но для того, что я делаю (автомобильные продукты управления, используемые людьми через некоторые кнопки), функциональные тесты наиболее важны. Он проверяет и гарантирует, что когда пользователь получает продукт, он делает то, что должно. Это не означает, что мы должны отказаться от модульного тестирования, но если push-comes-to-shove, functional является наиболее важным для обеспечения большого пользовательского опыта и получения продукта за дверью.
Если вы производите, скажем, компонент database engine (или какой-либо другой продукт, который не обязательно ориентирован на пользователя), модульное тестирование может быть тем, что вы действительно должны делать.
модульный тест проверяет фрагмент кода и подтверждает для программиста, что другой фрагмент кода делает то, что он должен. В тестовой разработке модульный тест записывается первым и наблюдается сбой, прежде чем код записывается, заставляя тест пройти. Программисты интересуются модульными тестами. Модульный тест быстро выполняется.
функциональный тест проверяет ваше требование черного ящика и демонстрирует, что часть функциональности пользователя на месте. Например, если я нажму большая красная кнопка, звонок начинает звонить. Функциональный тест может даже не быть тестовым кодом. Возможно, существует механический процесс, который заставляет звонок звонить, нажав кнопку. Клиенты заинтересованы в функциональных тестах, поскольку они подтверждают, что процесс высокого уровня, если работает таким образом, что они понимают. Они часто выполняются медленно.
в большинстве разработок есть место для обоих.
модульное тестирование, чтобы проверить небольшие блоки кода, чтобы увидеть, что они работают, как ожидалось.
функциональное тестирование, чтобы проверить, что общая функциональность системы, как и ожидалось.
Они находятся на разных уровнях, и оба должны быть использованы.