Разработчик Джеймс Джеффери разобрал популярные причины отказа — почему разработчики не проводят тестирование приложений.
Давным-давно я ненавидел тестирование приложений. Оно не казалось мне важным и я не видел в этом цели. Тестирование казалось огромной тратой времени и денег. За всю мою карьеры никто не объяснил мне, почему и как я должен проводить тестирование. Я придумывал кучу причин для своего нежелания учиться, как и многие другие разработчики. Но я постепенно пришел к этим знаниями.
Во время работы с другими людьми я сталкивался со множеством противоположных точек зрения на тестирование (некоторые из них были разумными, но об этом я напишу позже). Вот несколько самых распространенных причин, по которым разработчики не проводят тестирование своего кода.
Все работает идеально. Зачем проводить тесты?
Я никогда не встречал программиста, создающего идеальный код, и не думаю, что такой человек существует. Возьмем, к примеру, крупнейшие технологические компании мира: Google, Facebook, Rockstar, Sony и др. Они нанимают лучших разработчиков мира, но и они пишут небезопасный код.
Мой ответ тем, кто считает свой код идеальным: Откуда вы это знаете? Вы его тестировали? Можете ли вы протестировать код и доказать, что он работает идеально?
Но я не знаю, что тестировать!
Протестируйте всё, кроме стороннего кода, который должен поставляться с собственными тестами.
Я приведу цитату из этого ответа на StackExchange:
- Тестируйте всё, что можете. Так вы поймете, что код перестал работать после внесения определенных изменений (в этом заключается самое большое преимущество автоматического юнит-тестирования).
- Тестируйте исключительные ситуации для сложного кода, в котором могут быть ошибки.
- Когда вы находите баг, напишите тест-кейс для него перед исправлением.
- Добавляйте тесты для исключительных ситуаций для менее важного кода, если у вас есть время.
Когда вы только начинаете программировать, может быть непонятно, с чего начинать тестирование приложений. Я всегда советую начинать с юнит-тестирования, интеграционного тестирования и регрессионного тестирования.
Методологий существует гораздо больше. Некоторые из них вам никогда не пригодятся, но если вы работаете в команде, полезно знать различия между ними:
- Приемочное тестирование
- Альфа-тестирование
- Бета-тестирование
- Испытание черного ящика
- Сравнительное тестирование приложений
- Тестирование совместимости
- End-to-end тестирование
- Функциональное тестирование
- Инкрементное интеграционное тестирование
- Тестирование установки/удаления
- Интеграционное тестирование
- Нагрузочное нагрузки
- Тестирование производительности
- Тестирование на восстановление
- Регрессионное тестирование
- Санитарное тестирование
- Тестирование безопасности
- Стресс-тестирование
- Системное тестирование
- Юнит-тестирование
- Юзабилити-тестирование
- Испытание белого ящика
Если вы хотите знать больше о разных видах тестирования, посмотрите эту статью. Важно сделать тестирование необходимостью, а не одним из вариантов.
Тестирование приложений может быть сложным и непонятным
Сложен любой процесс, если вы не знаете, как это делать. Тестирование требует времени, практики, опыта и терпения. Отдохните, расслабьтесь и учитесь новому с удовольствием. Ожидайте первоначальных неудач и непонимания. Вы ведь просто человек.
Как только вы научитесь тестировать и начнете чувствовать себя при этом комфортно, вы поймете, что это довольно просто! Возьмите хорошую книгу. Почитайте документацию. Обсудите с другими разработчиками в IRC/Slack/Discord и т.д.
Тестирование приложений увеличивает время разработки
С последней отговоркой связано распространенное заблуждение. Любой, кто только начинает тестировать, столкнется со сложностями. Будет некомфортно, и это нормально. На ранних стадиях это займет много времени. Продолжайте учиться, и постепенно вам станет проще. Главное здесь — сделать тестирование частью процесса разработки, чтобы оно стало привычкой.
Создание тестов сэкономит вам много времени и сил в долгосрочной перспективе. Способность повторять тесты одним нажатием кнопки, чтобы подтвердить, что все работает, дает вам уверенность, необходимую для отправки программы в продакшн. Если что-то пойдет не так, вы сможете просто запустить тесты, чтобы найти источник бага. Поддерживать прошедший тесты код всегда проще, как и работать в системе без повторяющихся тестов.
Рекомендуемое чтение
Если вы начинающий разработчик или хотите узнать больше, я советую следующие книги, которые выбрал из своей библиотеки. Они фантастические!
- Lessons Learned in Software Testing: A Context-Driven Approach
- Beautiful Testing: Leading Professionals Reveal How They Improve Software
- Testing Computer Software
- Agile Testing: A Practical Guide for Testers and Agile Teams