Когда-то я очень не любил тестировать создаваемое мной ПО. Для меня это было не важно. Я не понимал, зачем это нужно. Это казалось мне потерей времени и денег.

За всю мою карьеру, никто не объяснил мне, как и зачем я должен проводить тесты. Я выдумывал сотни оправданий своему нежеланию учиться. Я общался с множеством разработчиков, которые, как и я, выдумывали этому оправдания. Они до сих пор их выдумывают. Я — нет.

За время работы, я познакомился с множеством спорных точек зрения, касательно тестирования ПО. Ниже, я приведу самые распространенные причины, по которым разработчики не проводят тесты.

 

Мой код идеален. Зачем его тестировать?

Я никогда не встречал идеального программиста. Более того, я не верю в его существование. Возьмите, например, самые крупные корпорации. Google, Facebook, Rockstar, Sony и т.д. Они принимают на работу только самых лучших. И тем не менее, в их программах есть уязвимости.

Тем, кто считает свой код идеальным, я могу сказать следующее: откуда вы знаете, что он идеален? Вы его тестировали? Можете протестировать и повторить свое утверждение?

 

Но откуда я знаю, что тестировать?!

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

Я процитирую ответ на вопрос, заданный на StackExchange:

  1. Тестируйте простые участки. Это подскажет вам, где могут появиться ошибки после внесения изменений.
  2. Тестируйте сложный код, в котором, по вашему мнению, могут содержаться ошибки.
  3. После обнаружения бага, запишите, как вы его выявили, и только затем исправляйте.

Если вы новичок, то сложно сказать, с чего вам стоит начать. Существует множество видов тестирования ПО. Я всегда рекомендую начать с модульного, интеграционного, и регрессионного тестирования.

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

  • Приемочное тестирование
  • Альфа-тест
  • Бета-тест
  • Тестирование «черного ящика»
  • Сравнительное тестирование
  • Тестирование совместимости
  • Комплексное тестирование
  • Функциональное тестирование
  • Инкрементное интеграционное тестирование
  • Тест инсталляции\деинсталляции
  • Интеграционное тестирование
  • Тестирование загрузки
  • Тестирование производительности
  • Тестирование восстановления
  • Регрессионное тестирование
  • Тестирование согласованности
  • Тестирование безопасности
  • Стресс-тест
  • Системное тестирование
  • Модульное тестирование
  • Тестирование юзабилити
  • Тестирование «белого ящика»

Очень важно сделать тестирование необходимым элементом процесса разработки.

 

Тесты очень сложные, и я их не понимаю

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

Когда вы научитесь тестировать, и это перестанет вас напрягать, вы поймете, что это довольно просто.

 

Тестирование увеличивает время разработки

Это самое распространенное заблуждение. Любой новичок в тестировании, поначалу, будет испытывать трудности. Исследуются новые земли, всё в новинку. Вы человек — это абсолютно нормально.

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

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

Перевод статьи Джеймса Джеффри