Лучшая рентабельность инвестиций - это, как правило, самое раннее тестирование, которое может обнаружить этот тип ошибки
Модульное тестирование должно найти большинство ошибок, которые есть только в одном методе или, возможно, в одном компоненте. Он находит ошибки, которые обычно могут быть исправлены за считанные минуты, с общим временем оборота менее одного часа. ОЧЕНЬ дешевые тесты, ОЧЕНЬ дешевые ошибки, чтобы найти и исправить! Если эти ошибки превращают это в интеграционное тестирование, оборот может быть больше похож на день (тестовые прогоны часто происходят ночью), при условии, что ошибка не закрыта другой ошибкой; плюс, вероятно, будет введено больше ошибок, так как другой код был написан против исходного глючного кода; плюс любые изменения будут влиять на большее количество кода. Кроме того, устранение большего количества ошибок означает необходимость выполнения гораздо большего количества тестовых прогонов, прежде чем можно будет завершить интеграционное тестирование. Плохое модульное тестирование часто лежит в основе долгого, обременительного, дорогоготестовые интеграционные циклы. Пропуск модульного тестирования может вдвое сократить время разработки, но тестирование займет по крайней мере в 3-4 раза больше, весь проект удвоится в длине, и у вас все равно будет более низкое качество, чем если бы вы тестировали модуль IME.
Интеграционное тестирование, как правило, является самым ранним реальным тестированием, в котором могут быть обнаружены ошибки интеграции (хотя процессы проверки могут обнаружить некоторые ошибки до того, как будет написано программное обеспечение, или до того, как код будет проверен). Вы хотите найти эти ошибки до того, как начнете показывать программное обеспечение пользователю или выпуску, поскольку исправление ошибок в последний момент (или оперативное исправление!) Очень дорого. Вы не можете найти эти ошибки раньше, когда их будет дешевле исправить, потому что вам нужно несколько рабочих компонентов для интеграции (по определению). Интеграционное тестирование замедляется, когда ошибки, которые не имеют ничего общего с взаимодействующими частями (например, мелкие опечатки), должны быть устранены в первую очередь, прежде чем начнется более интересное тестирование.
Приемочное тестирование пользователя гарантирует, что программное обеспечение делает то, что хочет клиент (хотя, мы надеемся, клиент был вовлечен все время, чтобы снизить риск обнаружения огромного разрыва между ожиданиями и фактическим программным обеспечением в конце проекта - ОЧЕНЬ дорого !). К тому времени, когда вы дойдете до этого этапа тестирования, вы действительно должны поверить, что большинство ошибок в вашем продукте, по крайней мере, по сравнению со спецификациями, уже найдено. Приемочное тестирование пользователя - это больше подтверждение того, что продукт соответствует потребностям клиента, чем проверка наличия ошибок по сравнению со спецификациями.
Если бы я собирался автоматизировать только один тип тестирования, это было бы модульное тестирование. Интеграционные тесты могут проводиться вручную и проводились многими крупными компаниями годами. Требуется больше времени, чтобы вручную выполнять работу, которая может выполняться компьютером снова и снова, и гораздо дороже для большинства проектов, не говоря уже о скучной и подверженной ошибкам, но это можно сделать. Пользовательские приемочные тесты часто выполняются вручную, поскольку пользователи часто не знают, как автоматизировать свои тесты, в то же время тестируя то, что их волнует. Модульные тесты ДОЛЖНЫ быть автоматизированы. Вы должны иметь возможность запускать все модульные тесты в течение нескольких секунд по запросу так же часто, как каждые несколько минут. Люди просто не могут даже приблизиться к ручным тестам. Не говоря уже о том, что модульные тесты находятся в коде и не могут быть выполнены без вызова их через код, т. Е. Их автоматизации.
Следует иметь в виду, что это форум в первую очередь для разработчиков, а не для тестировщиков. Интеграционное тестирование в основном осуществляется тестерами. Модульное тестирование осуществляется разработчиками. Естественно, разработчики больше говорят о модульном тестировании, чем другие виды тестирования. Это не значит, что они не думают, что другое тестирование важно. Это просто означает, что они на самом деле этого не делают (или делают это реже).