Когда-то я очень не любил тестировать создаваемое мной ПО. Для меня это было не важно. Я не понимал, зачем это нужно. Это казалось мне потерей времени и денег.
За всю мою карьеру, никто не объяснил мне, как и зачем я должен проводить тесты. Я выдумывал сотни оправданий своему нежеланию учиться. Я общался с множеством разработчиков, которые, как и я, выдумывали этому оправдания. Они до сих пор их выдумывают. Я — нет.
За время работы, я познакомился с множеством спорных точек зрения, касательно тестирования ПО. Ниже, я приведу самые распространенные причины, по которым разработчики не проводят тесты.
Мой код идеален. Зачем его тестировать?
Я никогда не встречал идеального программиста. Более того, я не верю в его существование. Возьмите, например, самые крупные корпорации. Google, Facebook, Rockstar, Sony и т.д. Они принимают на работу только самых лучших. И тем не менее, в их программах есть уязвимости.
Тем, кто считает свой код идеальным, я могу сказать следующее: откуда вы знаете, что он идеален? Вы его тестировали? Можете протестировать и повторить свое утверждение?
Но откуда я знаю, что тестировать?!
Тестируйте всё подряд, кроме стороннего кода, который уже должен быть протестирован тем, кто его создал.
Я процитирую ответ на вопрос, заданный на StackExchange:
- Тестируйте простые участки. Это подскажет вам, где могут появиться ошибки после внесения изменений.
- Тестируйте сложный код, в котором, по вашему мнению, могут содержаться ошибки.
- После обнаружения бага, запишите, как вы его выявили, и только затем исправляйте.
Если вы новичок, то сложно сказать, с чего вам стоит начать. Существует множество видов тестирования ПО. Я всегда рекомендую начать с модульного, интеграционного, и регрессионного тестирования.
Существует целая куча методологий тестирования программного обеспечения. Некоторые из них, если вы работаете в команде, вам никогда не придется проводить, но по крайней мере, нужно знать, какая между ними разница:
- Приемочное тестирование
- Альфа-тест
- Бета-тест
- Тестирование «черного ящика»
- Сравнительное тестирование
- Тестирование совместимости
- Комплексное тестирование
- Функциональное тестирование
- Инкрементное интеграционное тестирование
- Тест инсталляции\деинсталляции
- Интеграционное тестирование
- Тестирование загрузки
- Тестирование производительности
- Тестирование восстановления
- Регрессионное тестирование
- Тестирование согласованности
- Тестирование безопасности
- Стресс-тест
- Системное тестирование
- Модульное тестирование
- Тестирование юзабилити
- Тестирование «белого ящика»
Очень важно сделать тестирование необходимым элементом процесса разработки.
Тесты очень сложные, и я их не понимаю
Всё сложно, если в этом не разбираться. Изучение потребует от вас времени, практики, опыта, и терпения. Учитесь не напрягаясь. Ожидайте неудач. Вы всего лишь человек.
Когда вы научитесь тестировать, и это перестанет вас напрягать, вы поймете, что это довольно просто.
Тестирование увеличивает время разработки
Это самое распространенное заблуждение. Любой новичок в тестировании, поначалу, будет испытывать трудности. Исследуются новые земли, всё в новинку. Вы человек — это абсолютно нормально.
На начальных этапах, тестирование будет отнимать у вас много времени. Но не сдавайтесь, учитесь, и в итоге, это станет вашим вторым призванием. Фокус заключается в том, чтобы сделать тестирование частью процесса разработки, тогда оно войдет в привычку.
В долгосрочной перспективе, тесты сэкономят массу времени и головной боли. Наличие возможности по одному клику повторить тест, и подтвердить, что всё работает как ожидается, дает вам уверенность в релизе. Если что-то идет не так, вы сможете просто повторить тест, и найти причину бага.
Перевод статьи Джеймса Джеффри