Поблочное тестирование или функциональное тестирование? [закрытый]

Опасайтесь, если вы используете parseInt для преобразования float в научную нотацию! Например:

parseInt("5.6e-14") 

приведет к

5 

вместо

0
27
задан Will Marcouiller 9 February 2010 в 05:44
поделиться

7 ответов

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: И для написания тестов против существующего программного обеспечения ничто не сравнится с книгой Майкла Фезерса Эффективная работа с устаревшим кодом .

25
ответ дан 28 November 2019 в 04:21
поделиться

У модульного тестирования и функционального тестирования два разных результата.

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

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

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

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

3
ответ дан J. Polfer 20 November 2019 в 04:35
поделиться

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

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

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

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

2
ответ дан Oded 20 November 2019 в 04:35
поделиться

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

И то, и другое - необходимые компоненты хорошей практики разработки программного обеспечения.

26
ответ дан 28 November 2019 в 04:21
поделиться

Модульное тестирование проверяет ваши модули кода (методы и т. Д.), Чтобы убедиться, что они делают то, что вы от них ожидаете.

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

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

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

  • Unit test = мой код работает
  • Функциональный тест = мой дизайн работает
  • Integration test = мой код правильно использует ваши сторонние материалы ( базы данных и т. д.)
  • Заводские приемочные испытания = моя система работает
  • Приемочные испытания сайта = ваш код - отстой, это совсем не то, о чем я просил!?!
11
ответ дан 28 November 2019 в 04:21
поделиться
  • Модульный тест = самый низкий уровень детализации.
  • Функциональный тест = средний, модульный уровень.
  • Интеграционный тест = более высокий уровень приложения.
  • Заводские приемочные испытания = посмотреть, как все работает
  • Приемочные испытания на месте = все не пройдут :)

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

6
ответ дан 28 November 2019 в 04:21
поделиться

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

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

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

4
ответ дан 28 November 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: