Тестирование устройства или функциональное тестирование?

Недавно я слышал о функциональном тестировании над модульным тестированием.

Я понимаю, что Unit Testing проверяет каждую из возможностей данного куска кода из его самой атомной формы. Но как насчет функционального тестирования?

Это звучит для меня как тестирование только в том случае, если код работает, но насколько он надежный, как Unit Testing?

Мне сказали, что есть две школы мысли по этому поводу. Certates предпочитает Unit Testing, другие функциональные тесты.

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

Спасибо!

Ответ 1

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

  • Модульное тестирование = дизайн дисков (с Test-Driven Development или TDD)
  • Интеграционное тестирование = все части работают вместе
  • Приемочное тестирование клиентов = соответствует ли требованиям заказчика.
  • Ручное тестирование = часто охватывает пользовательский интерфейс; специальные тестеры могут найти, что пропустят автоматизацию
  • Загрузка нагрузки = насколько хорошо система работает с реалистичными объемами данных

Между этими категориями существует некоторое совпадение; модульные тесты могут определять поведение, например.

И есть другие; больше, чем нужно большинству людей, см. Тестирование программного обеспечения.

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

Вы попросили ресурсы; Я рекомендую книгу Роя Ошерове Искусство модульного тестирования с примерами в .NET. Хотя книга не идеальна, она дает много отличных указателей на то, чтобы писать хорошие тесты.

EDIT: И для написания тестов против существующего программного обеспечения ничто не сравнится с книгой Майкла Перса Эффективно работает с устаревшим кодом.

Ответ 2

Тестирование модулей по сравнению с функциональным тестированием не является xor, а скорее and. Единичное тестирование - это тестирование модулей в изоляции, в то время как функциональное тестирование - это тестирование всего в интеграции (все подразделения работают вместе?).

Оба являются необходимыми компонентами хорошей практики разработки программного обеспечения.

Ответ 3

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

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

Оба типа тестирования важны.

edit: Чтобы добавить немного другое представление к тому, что сказал gbjbaanb:

  • Unit test= работает мой код
  • Функциональный тест = мои проектные работы
  • Интеграционный тест = мой код правильно использует ваш сторонний материал (базы данных и т.д.)
  • Factory Приемочный тест = моя система работает
  • Тест приемки сайта = ваш код отстой, это не то, что я просил!?!

Ответ 4

  • Unit test= самый низкий, гранулированный уровень.
  • Функциональный тест = средний, модульный уровень.
  • Интеграционный тест = более высокий уровень приложения.
  • Factory Приемочный тест = см. все работы
  • Тест приемки сайта = видеть, что все это не работает:)

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

Ответ 5

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

Единичное тестирование нацелено на тестирование "единиц", то есть функций или методов, которые система создает из изолированно. Иногда это называется тестированием разработчиков. Тестирование модулей может быть тяжелым после факта, поэтому TDD записывает тест перед кодом.

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

Ответ 6

Тестирование модулей и функциональное тестирование имеют два разных результата.

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

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

Я думаю, что оба важны. Однако, если у вас ограниченные ресурсы, и вам нужно выбирать/выбирать методы, и я думаю, что это зависит от продуктов, которые вы создаете, но для того, что я делаю (автомобильные контрольные продукты, используемые людьми через некоторые кнопки), наиболее важны функциональные тесты. Он проверяет и гарантирует, что, когда пользователь получает продукт, он делает то, что он должен делать. Это не значит, что мы должны отказаться от модульного тестирования, но если push-come-to-shove, функционал является самым важным, чтобы обеспечить отличный пользовательский интерфейс и вывести продукт из двери.

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

Ответ 7

A Unit Test проверяет фрагмент кода и подтверждает программисту, что другой фрагмент кода выполняет то, что он должен. В Test Driven Development, Unit Test записывается первым и наблюдается сбой, прежде чем код будет записан, чтобы тест прошел. Программисты заинтересованы в модульных тестах. Unit Test выполняются быстро.

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

Ответ 8

В большинстве работ по разработке есть место.

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

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

Они находятся на разных уровнях, и оба должны использоваться.