7 популярных мифов о тестировании
Скучная работа, войны с программистами, приходится отвечать за каждую пропущенную ошибку. И вообще, тестировщиков скоро заменят роботами.
vlada_maestro / shutterstock
С тестированием программ связано много заблуждений. И не все представляют, чем вообще занимаются тестировщики. Постараемся развеять некоторые популярные мифы о тестировании.
Миф 1
Тестирование — очень дорогое удовольствие, затраты на него не окупаются
В процессе тестирования заняты люди, чью работу надо оплачивать. Действительно, на поиск и исправление дефектов тратится много средств. Но ошибки в программах обходятся ещё дороже. Бывает, что из-за мелких багов в коде компании получают огромные убытки и проблемы с имиджем:
- В 1996 году при старте разбилась европейская ракета-носитель «Ариан-5». На ней было установлено ПО от предыдущей модели, а в новом окружении его не протестировали. Стоимость этой ошибки — примерно полмиллиарда долларов.
- В 2012 году американская компания-брокер Knight Capital Group решила автоматизировать торговлю ценными бумагами. Она разработала программу, которая самостоятельно делала ставки и покупала акции. Но авторы кода торопились и не успели как следует протестировать своего робота. При первом же запуске он сошёл с ума. Программа делала сотни ставок в секунду и за 45 минут потратила 440 млн долларов — весь капитал компании. До этой истории Knight Capital Group была самым крупным брокером акций в США. А после её купили за бесценок конкуренты.
- В 1994 году в новых процессорах Pentium обнаружили небольшую ошибку: при делении чисел с плавающей точкой получался неправильный результат в девятом знаке после запятой и дальше. Intel долго отнекивался и утверждал, что обычный пользователь столкнётся с этой ошибкой раз в 27 тысяч лет. Но пользователи возмущались и требовали назад деньги. В результате компания заменила процессоры всем желающим. Ошибка обошлась корпорации в 470 млн долларов.
Подобных примеров немало. Поэтому фирмы-разработчики боятся ошибок в программах. В крупных компаниях работают целые отделы инженеров-тестировщиков, которые контролируют качество продукта.
Миф 2
Тестируют только полностью написанную программу
Это не так. Тестирование идёт параллельно с разработкой. Чем раньше удаётся обнаружить ошибки, тем проще и дешевле будет их исправить.
Так, при разработке технических требований можно сколько угодно править и дополнять проектную документацию. Но если выяснится, что в требованиях было что-то не то, а код уже написан, последствия будут серьёзные. Возможно, придётся переписывать программу, а это время и большие затраты. Поэтому аналитики тщательно тестируют требования — ещё до начала разработки кода.
Когда разрабатывается код, тестирование проводят сами программисты и тестировщики. Они проверяют каждый готовый модуль. Программисты ищут ошибки в коде, а после подключения к программе тестируют модуль ещё раз.
Затем за программу берутся тестировщики. Они проверяют программу снаружи, не заглядывая в код: работают с ней так, как это будет делать пользователь, ищут баги вручную или с помощью автоматических тестов. Потом они передают сведения о найденных ошибках разработчикам, чтобы те их исправили. И так с каждым модулем до конца разработки.
А ещё делают так: программист сначала пишет тест на языке разработки, чтобы проверить какие-то функции будущей программы. Затем он пишет код, который выполняет действия, необходимые для прохождения этого теста. Когда тест удачно пройден, разработчик переходит к следующим функциям. Это называется test-driven development (TDD), или разработка через тестирование.
Бывает даже, что сначала тестировщик составляет пошаговый план поведения пользователя. Потом специалисты по автоматизации тестирования составляют автоматические тесты. А вот под них уже пишется код — такой, чтобы он прошёл эти тесты. Технология называется behavior-driven development (BDD), или разработка на основе поведения.
Когда программа полностью написана, её тестируют как единое целое. Только когда все баги будут исправлены, программу передают заказчику.
Миф 3
Любую программу можно протестировать так, что в ней совсем не останется ошибок
В это верят клиенты и даже некоторые руководители проектов. Но в жизни так не бывает:
- Даже в небольшой программе есть огромное количество комбинаций входных данных. Проверить их полностью невозможно.
- Количество возможных действий пользователя и перемещений по программе также слишком велико для полной проверки.
И миллион тестов не даёт никаких гарантий: миллион первый тест может запросто оказаться ошибочным. Пример — так называемая ошибка гейзенбаг. В рабочих условиях она появляется, а при отладке пропадает.
Из-за одной такой ошибки в США облучились люди. Аппарат Therac-25 использовали для лучевой терапии больных раком. В программе управления возник гейзенбаг: оператор нажимал на кнопку, пациент получал дозу облучения, но иногда датчик не улавливал данные и выдавал сообщение «Нулевая доза». Оператор ещё несколько раз жал на кнопку, и пациент получал огромную дозу радиации. В итоге несколько человек погибло.
Миф 4
Только тестировщики несут ответственность за программу, и если что-то не так — во всём виноваты они
Нет, программу делает вся команда и нельзя перекладывать ответственность на одного её члена. Тестировщики выявляют баги и сообщают о них разработчикам и проектировщикам. А те принимают решение: исправлять их или по каким-то причинам оставить.
Бывает, что тестировщикам просто не хватает времени на глубокую проверку: например, программу дорабатывали на ходу, меняли требования и добавляли функции. В таких условиях тестировщики иногда не справляются и продукт получается так себе.
Миф 5
Тестирование — скучная и монотонная работа
Нет. Тестирование похоже на дизайн, это очень творческая работа. Тестировщик должен понимать, как работает система в целом и отдельные её части, найти слабые места и проверить их на сбои в первую очередь. Он разрабатывает тестовые подходы и пишет сами тесты. Тут не обойтись без воображения и фантазии.
Миф 6
Тестировщики не любят программистов и нарочно придираются к мелочам
Чтобы выпустить хороший программный продукт, нужно найти в нём все (или почти все) ошибки. Так что ничего личного — это просто работа.
Не стоит обижаться на тестировщика, даже если он тычет пальцем в спецификацию и говорит, что в каком-то месте должен быть шрифт Arial Narrow, а у вас стоит обычный Arial. Не думайте, что он придирается, лучше сделайте как написано в спецификации. По каким-то причинам там действительно нужен этот шрифт.
Миф 7
Скоро весь код будут тестировать автоматически и тестировщики станут не нужны
Ну да, нейросети проникли и сюда. Они спасают тестировщиков от нудных рутинных операций. Но человек всё равно нужен:
- Тестировщик вручную проверяет все новые фичи и программы перед запуском автоматических тестов. Он выясняет, работает ли программа вообще, как она устроена, что нужно протестировать в первую очередь. Бесполезно писать тесты, если программа не работает.
- Программы не всесильны. Без человека в тестировании не обойтись. Кто-то должен исследовать результаты и делать выводы. А некоторые тесты нельзя автоматизировать, и что-то обязательно придётся перепроверять вручную.
- Некоторые виды тестирования автоматизировать невозможно. Например, удобство и доступность пользовательского интерфейса может проверить только человек.
Тестировать программы учат на курсах в Skillbox. Мы даём серьёзные теоретические знания и хороший практический опыт. С первых уроков студенты участвуют в реальных проектах. Успешные выпускники становятся тестировщиками middle-уровня, а мы помогаем им найти работу.