Чем лучше модульное тестирование, чем просто тестирование всего приложения в целом? - PullRequest
8 голосов
/ 28 апреля 2009

Я не понимаю, какую пользу может принести юнит-тест. Разве тестеру не достаточно протестировать весь вывод в целом, а не выполнять модульные тесты?

Спасибо.

Ответы [ 15 ]

0 голосов
/ 08 мая 2009

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

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

0 голосов
/ 08 мая 2009

Модульное тестирование поможет вам более четко определить источник вашей ошибки и сообщить, что у вас есть проблема ранее . И то, и другое хорошо, но они разные, и юнит-тестирование имеет свои преимущества.

0 голосов
/ 08 мая 2009

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

Другой способ, которым они дополняют функциональные тесты, - это отслеживание покрытия в некоторых организациях:

  • Юнит-тесты на покрытие кода
  • Функциональные испытания по охвату требований

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

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

И последнее: есть вещи, которые проще / быстрее тестировать на уровне юнитов, особенно в случае ошибок.

0 голосов
/ 07 мая 2009

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

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

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

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

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

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

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

0 голосов
/ 07 мая 2009

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

Но, как отмечали другие авторы, модульные тесты - это еще не все испытания. Они просто самая маленькая часть уравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...