Должны ли тестировщики уметь программировать?

Часто мне задают вопрос, должны ли уметь программировать тестировщики. Поставим вопрос немного шире: “Должны ли тестировщики обладать техническими навыками и какими?”. В основном, мы руководствуемся в ответе на этот вопрос требованиями работодателей, потому что они устанавливают “правила игры”. Если ты с ними не согласен, то тебе тяжело найти работу. Анализ требований на рынке показывает, что от тестировщика действительно требуются технические навыки. В основном это работа с базами данных, инструментами для автоматизации тестирования, понимание веб-протоколов и, зачастую, знание некоторых языков программирования. Получается, что тестировщик должен сделать полшага в направлении специальности разработчика, но при этом обладать кучей навыков и знаний, специфичных для тестирования. Не слишком ли много для одного человека? Обычно делать несколько разных вещей действительно хорошо могут только талантливые люди, да и то если им это нравится. Проблема в том, что их не так много. Я бы сказал, что их предельно мало для того, чтобы покрыть потребности IT компаний.

Если же ты не обладаешь техническими навыками, то рискуешь быть названным “мануальщиком”, “обезьянкой” или “ручным тестером”. Это обидно и оскорбительно, ведь при наличии технических навыков тебя называли бы гордо – “автоматизатор”. Мой взгляд на проблему кардинально противоположен ситуации на рынке. Для меня тестировщик – это, прежде всего, человек, обладающий критическим складом ума, аналитическими способностями, умеющий общаться с другими людьми и четко формулировать свои мысли. Тестировщик также должен разбираться в видах тестирования, целях и задачах каждого из них, методиках тестирования и прочих премудростях. Из технических навыков от тестировщика, на мой взгляд, стоит требовать умения работать с операционной системой на уровне продвинутого пользователя, представления о различных архитектурах приложения, наличия опыта работы с одним из инструментов для баз данных, знания принципов работы с системами контроля версий и управления задачами. Этого вполне хватит для успешной работы. В веб-разработке дополнительно необходимо детальное понимание работы веб-приложений, а также опыт работы с современными браузерами и инструментами для них.

А как же инструменты для автоматизации тестирования? На мой взгляд, это требование не является столь критичным и далеко не всегда требует навыков программирования. У большинства подобных инструментов есть часть для работы непосредственно с тестовыми сценариями (запись, запуск, отладка и прочие функции), часть для интеграции сценариев с приложением (некий исполнитель команд, контроллер приложения и т.д.) и часть для “программирования” (среда для написания сценариев вручную, отладки сценариев, IDE). Так вот, мне видится основная работа тестировщика с первой частью. Конечно, было бы очень здорово, если бы тестировщик также неплохо разбирался в оставшихся частях, но это совершенно не критично. Ведь в команде есть технические специалисты, которые могут помочь с выполнением такого рода задач. Я бы выделил отдельную роль “технический инженер по вопросам тестирования” (software technical engineer). Эту роль может выполнять любой член команды, который обладает достаточными навыками и знаниями. Это может быть выделенный человек в команде на помощь тестировщикам (часто в компаниях такая роль называется “эксперт по автоматизации тестирования”). Важно помнить, что разделение ролей накладывает разделение требований к кандидату на каждую роль.

Я встречал подобные ответы на вопрос об умении программировать у тестировщика: “Я считаю, что да, каждый в нашем деле должен уметь программировать. Надо уметь автоматизировать свои рутинные задачи.”. Мне кажется, что гораздо важнее уметь анализировать собственную работу и находить места, требующие автоматизации, и поднимать вопрос об автоматизации этих мест в команде. Многие просто повторяют одни и те же десятки шагов каждый день и даже не задумываются, что все могло бы быть проще, быстрее и надежнее. А кто будет автоматизировать – это очень сильно зависит от вашей команды. На написание shell-скрипта или скрипта на Python у сисадмина или разработчика может уйти на порядок меньше времени, чем у тестировщика. При этом вероятность ошибки в нем будет на порядок ниже. Зачем это разработчикам или сисадминам? Да потому что помощь одному звену (часто самому слабому звену) помогает оптимизировать весь процесс целиком и сделать его гораздо более эффективным. А это нужно всей команде, вне зависимости от ролей и обязанностей.

Идеальный процесс дает возможность каждому заниматься любимым делом, но при этом достигать результатов и целей всей командой. В таком процессе каждый понимает свою роль, роли других членов команды и стремится оптимизировать работу команды, сделав процесс более эффективным. Так давайте же будем строить такие процессы!

Обсуждение (0)

Leave a Reply

Your email address will not be published. Required fields are marked *