Моя причина для автоматизации тестирования заключается в том, что я могу получать последовательную, повторяемую и своевременную обратную связь о том, что то, что я только что сделал, является правильным.
Ручное тестирование также имеет свое место, но трудно быть столь же убежденным, что оно охватывает все должным образом, и, конечно, не так быстро, как автоматическое тестирование.
Например, частью одного из моих проектов является алгоритм оптимизации, который использует некоторую эвристику для обхода пространства поиска в поисках хороших решений. В настоящее время существует около 40 различных эвристик, которые можно использовать по отдельности или в различных комбинациях, и каждая встреча с клиентом, по-видимому, предполагает добавление новой эвристики или расширение существующей. Я должен быть абсолютно уверен, что ни одна из этих работ для одного клиента не вызовет регрессии для другого клиента, что включает запуск алгоритма в нескольких сотнях различных случаев и проверку того, что результат (не хуже, чем) был раньше.
Было бы нецелесообразно просить ручного тестировщика запустить все эти тестовые случаи, загрузив графический интерфейс, открыв входной файл и нажав «выполнить», по крайней мере, не достаточно часто, чтобы быть полезным механизмом обратной связи. Тесты обычно проводятся десятки раз в день для коротких тестов и каждую ночь для более тяжелых тестов. В ручном режиме полная обратная связь, вероятно, займет пару дней, а исправление ошибки, появившейся пару дней назад, намного сложнее, чем исправление ошибки, появившейся за последние полчаса.
Также было бы очень трудно обеспечить, чтобы любые проверки «на глаз» результатов были такими же хорошими, какими они были раньше, поэтому проверки результатов должны быть автоматизированы. Но если вы собираетесь автоматизировать это, вы можете также автоматизировать все это. Это не сложно.
Еще одно преимущество автоматизированного тестирования, основанное на опыте работы с проектом, в котором его не было, заключается в том, что если у вас есть ручные тесты, которые не документированы в широких масштабах, то когда проект находится в состоянии покоя (очевидно, в «режиме обслуживания») для через год, а затем возобновляет активную разработку, никто не может вспомнить, как проводить тестирование или каковы были ожидаемые результаты, и вы в конечном итоге вводите целую кучу глупых регрессий, на которые нужно уложить целую вечность. С другой стороны, если вы собираетесь документировать свои тесты достаточно подробно, чтобы их можно было собирать через год, вы, по сути, уже автоматизировали их: вам просто нужно сделать исполняемую документацию.
По моему опыту, вам нужно начать тестирование примерно за 2 часа до того момента, когда вы вдруг поймете, что должны были начать тестирование 2 часа назад:)