🧪 Кто такой тестировщик и зачем ему дорожная карта
Про профессию тестировщика и тестирование в целом сейчас можно услышать из каждого утюга. Даже самый далекий от IT человек хоть раз задумывался о том, чтобы перейти на эту стезю.
Каких только синонимов не придумали для нас: «ловец багов», «контролер качества». Нагуглить официальную версию тоже весьма просто. Например, Википедия дает такое определение:
Тестировщик – специалист, принимающий участие в тестировании компонента или системы. В его обязанность входит поиск вероятных ошибок и сбоев в функционировании объекта тестирования (продукта, программы). Тестировщик моделирует различные ситуации, которые могут возникнуть в процессе использования предмета тестирования, чтобы разработчики смогли исправить обнаруженные ошибки.
Но отражает ли все это полноту картины работы специалиста?
Ответ на этот вопрос зависит от опыта каждого конкретного человека. Для меня скорее нет, чем да. Если бы на собеседовании меня попросили дать такое определение своими словами, то я бы ответила следующее:
Тестировщик – это такой человек на проекте, который чаще всего становится хранителем знаний, он должен не только искать ошибки, но и служить помощником в общении аналитиков, разработчиков и других членов команды, знать как бизнес-ценность каждой задачи, так и технические тонкости продукта, а также уметь развернуть и настроить всю систему, помочь службе эксплуатации в обработке инцидентов, а команде разработки в локализации сложных багов.
Стать таким специалистом достаточно сложно, но вполне возможно. Нужно все время учиться новому, пробовать разные техники и технологии и не бояться ошибаться. Ведь ошибки можно исправлять не только в программах.
🛣️ Что такое дорожная карта
Развиться до эксперта в тестировании можно в куче направлений:
- ручное тестирование;
- мобильное;
- автоматизация UI- и API-тестов;
- нагрузочное тестирование;
- и т. д.
Список можно продолжать бесконечно. Для того чтобы не запутаться и составляются «Дорожные карты»: краткий перечень технологий и навыков, который может понадобиться для освоения той или иной специализации. В статье я не буду полностью расписывать все возможные варианты, потому что это займет очень много времени, которое не всегда есть как у читателя, так и у автора. А просто покажу начало движения от новичка к специалисту. Особо крупные направления, которые, безусловно, могут быть интересны, но сейчас не войдут в статью, я обозначу словами «Здесь водятся львы», как в древности люди отмечали на картах еще неисследованные территории.
Также для упрощения понимания будет выделено всего два уровня:
- Первый уровень: новичок
- Второй уровень: уже что-то знает
Эти уровни очень условны, потому что можно быть ручным тестировщиком и не уступать в экспертизе и архитектору. Также приобретать навыки можно на разных стадиях работы, например начать учиться нагрузочному тестированию, когда стал экспертом или осваивать для работы снифферы WireShark, являясь новичком. Все зависит от проекта и поставленных перед человеком задач.
👶 Уровень 1: новичок
Принято считать, что ручное тестирование – это простой способ «войти в IT», не требующий особых навыков, а иногда даже и умения думать. Не знаю, можно ли было так сказать условные десять-двадцать лет назад, но сейчас точно нет. На собеседованиях обязательно спрашивают не только теорию основ тестирования, но и умеете ли вы работать с нужными инструментами и понимаете ли жизненный цикл продукта в целом.
Поэтому давайте рассмотрим первый уровень, который требуется среднестатистическому джуну в среднестатистической компании:
Фундаментальные навыки тестирования
К ним относятся общие знания по тестированию. То есть, если на собеседовании спрашивают о том, чем отличаются методы черного и белого ящика или что такое таблица переходов, то значит работодатель хочет понять уровень общих знаний, которые можно получить прочитав, например, книгу «Тестирование Дот Ком» Романа Савина. Конечно, знание теории мало дает без практики, но это уже что-то. Но рассмотрим подробнее каждый подпункт.
Знание уровней тестирования
В любой предметной области люди привыкли создавать методики. Тестирование не исключение. На первых порах это помогает быстрее учиться, а в дальнейшей работе экономит время. На данный момент выделяют следующие методики тестирования:
- модульное тестирование;
- интеграционное тестирование;
- системное тестирование;
- приемочные испытания.
Обычно эти методы применяются в таком порядке, но можно и по отдельности.
Знание стратегий тестирования
Для начала определим, чем стратегии отличаются от методик. Стратегия – это план организации процесса, в данном случае тестирования, в условиях ограниченных ресурсов. То есть, как мы будем тестировать на протяжении всего проекта, какую документацию писать, как расставлять задачи по приоритетам. Конечно, никто не будет просить новичка составить стратегию, если он не единственный тестировщик в новом проекте. Но понимать ее должен каждый человек в команде. Единственный минус стратегий – на бумаге они выглядят гораздо привлекательнее, чем в жизни, но это уже лирика.
Знание функционального/нефункционального тестирования
Еще одно полезное, почти сакральное знание – это чем отличаются функциональное и нефункциональное тестирования. Функциональное тестирование проверяет функции, компоненты и взаимодействие системы со сторонней системой, а нефункциональное – нужно для определения характеристик системы, которые могут быть измерены различными величинами (производительность) или оценены на глаз (удобство использования). Естественно, в первую очередь проводится функциональное тестирование, а следом идет нефункциональное.
Умение писать тестовую документацию
Никакой продукт не может обойтись без документации, хотя бы в минимальном объеме. Например, оформленный баг, по которому написали баг-репорт, уже является тестовой документацией. В классическом случае в документацию по тестированию входит:
- Тест-план;
- Чеклист;
- Тест-кейс;
- Сценарий использования;
- Баг-репорт.
В любом проекте в той или иной степени пишется вся эта документация. От новичка требуется знать, зачем она нужна и правила ее оформления.
Навык приоритизации багов
На мой взгляд, это один из самых важных и недооцененных навыков тестировщика. После нахождения любого бага о нем нужно сообщить или посредством написания баг-репорта или просто в чат, а потом оформить его. Но перед этим нужно определить его приоритет. Если баг имеет высокий приоритет и сильно влияет на сборку, то разработчик обычно все бросает и идет его чинить, а если низкий, то баг может даже пропасть в беклоге, так и не дождавшись своего исправления.
А теперь смоделируем ситуацию, когда тестировщик ошибся и багу с низким приоритетом дал высокий: в таком случае на исправление какой-то мелочи уйдет время, которое могло бы пригодиться для написания основной функциональности. Ошибка в обратную сторону выглядит еще страшнее: в продуктовую среду (к пользователям) может попасть критичный баг, который крашит систему. Поэтому, выставляя приоритет, нужно десять раз подумать. К сожалению, этому навыку можно научиться, только оценивая баги и получая по этой оценке обратную связь.
На этом с перечислением фундаментальных навыков тестирования – все. Уверена, что этот список можно пополнить другими пунктами, но а пока я пойду дальше.
Базы Данных
Время, когда данные хранились в текстовом файле на сервере прошли. Сейчас чаще используют реляционные или нереляционные базы данных. На собеседовании я задаю вопрос: «Как проверить, что предмета по поисковому запросу реально не существует, а не то что поиск отработал неверно?» Если кандидат вспоминает о базах данных, то следующим шагом я проверяю, какие простые запросы он может составить. Для их составления могут понадобиться следующие навыки.
Операторы для манипуляции данными
За этими словами скрываются самые часто используемые команды SELECT
, INSERT
, UPDATE
, DELETE
. Со знанием этих команд первое время можно прекрасно справляться с обычными задачами на создание, обновление, удаление или чтение данных из базы. Изучая в дальнейшем JOIN
, подзапросы и группировку с сортировкой можно значительно облегчить себе жизнь.
Логические операторы
Без логических операторов сложно сделать точную выборку, особенно когда строк в таблице больше ста. К логическим операторам относятся: AND
, OR
, BETWEEN
, EXISTS
, LIKE
, NOT
и т. д. Без этих и арифметических операторов можно просматривать результаты выданные SELECT
часами. Согласитесь, не самое рациональное использование времени.
Арифметические операторы
С этими операторами все знакомы еще со школы, только использовали их не для таблиц базы данных, а на уроках математики. Эти операторы пригодятся для проверки, например, отчетов. Да и в целом гораздо удобнее искать строки в таблице, когда можешь уменьшить их количество знаками больше, меньше или даже равно.
Знание видов связей таблиц (один ко многим, один к одному и т. д.)
Этот скорее подходит для следующих уровней, но я включила их, потому что, делая выборку из нескольких таблиц, лучше понимаешь, какую связь они имеют. Всего различают три вида:
- Один к одному;
- Один ко многим;
- Многие ко многим.
Если рассмотреть на простых примерах, то:
- один к одному – это как у одного человека может быть один действующий паспорт;
- один ко многим – у любого человека может быть множество документов (паспорт, права, мед книжка);
- и многие ко многим – когда в один документ может быть вписано много людей и у них может быть множество таких документов (такие связи обычно делаются через дополнительную таблицу).
Эти связи обычно моделируются архитектором и аналитиками. Увидеть их можно на схеме базы данных или уточнить у человека, который проектировал данную часть.
Конечно же, это малый кусочек знания о БД, в дальнейшем, читая и изучая эту тему, можно узнать гораздо больше полезного о работе тестировщика.
Основы REST API
При первых шагах в тестировании – обучение или работа – тестировщик с большой вероятностью столкнется с REST API. Сейчас этот архитектурный стиль применяется везде, где есть необходимость передачи данных с сервера пользователю веб-приложения или сайта. Поэтому знание основ может значительно облегчить жизнь и понимание работы всей команды.
Протоколы взаимодействия HTTP/HTTPS
В основе REST API используется протокол HTTP (HyperText Transfer Protocol) или протокол передачи гипертекста. В дальнейшем, когда в интернете понятие безопасности стало более значимым, появился и HTTPS, где последняя буква расшифровывается как «безопасный». Т. е. если суметь «переловить» сообщение, то, понимая данный протокол, можно понять, что произошло между сервером и приложением.
Знание кодов ответов REST API
Первое и самое простое, с чего можно начать изучение, – это код ответов. Всего выделяется пять больших групп:
- 1xx информационные;
- 2xx успешные;
- 3xx перенаправление;
- 4xx ошибка на клиентской части;
- 5xx ошибка на серверной части;
Разбираясь в этих кодах вполне можно оформить хороший баг-репорт и назначить его на правильного разработчика.
Формат обмена сообщениями
Кроме кода сообщения нужно суметь понять, что же в этом самом сообщении передавалось. Сейчас есть множество форматов, но основные, которые используются это:
- XML;
- JSON;
Зная структуры этих форматов, вполне можно понять сообщение.
Использование основных инструментов
Выполняя каждый день свою работу, человек подбирает для себя удобный набор инструментов. Иногда эти инструменты меняются от проекта к проекту, но какой-то постоянный список можно выделить:
Багтрекеры (Jira, Bugzilla)
Багтрекеры – это программы для отслеживания ошибок и их жизненного цикла. Конечно, ими пользуются не только тестировщики, но и все участники проекта. Представить работу команды без них сейчас невозможно.
Программы для скриншотов
Не обязательный, но удобный инструмент. Во многих ОС есть встроенные утилиты, но когда быстро нужно добавить рамку, стрелочку или подпись, то какой-нибудь FlameShot способен сильно упростить жизнь. Для некоторых багов может не хватать скриншотов, поэтому иметь под рукой программу для записи экрана может оказаться хорошей идеей.
Программы генерации данных
В тестировании, как и везде, есть скучные и монотонные задачи. Например, нагенерить множество карточек для поиска или построения отчета. Чтобы не потратить на это весь день, были придуманы утилиты и сайты для генерации данных. Самые известные из них – это Mockaroo.com и Bugmagnet. Несомненно есть и другие.
Инструменты для тестирования удобства использования
Часто тестирование удобства использования программы отодвигается на последнее место, потому что хотят в первую очередь протестировать функциональную часть. Не могу сказать, что это здоровая практика, но сама часто этим грешу. Для упрощения такого тестирования тоже придумали инструменты:
- User Zoom;
- Reflector.
Хотя использования этих инструментов уже на любителя.
Инструменты для тестирования REST API
Про REST API было рассказано выше, поэтому расписывать, почему нужны инструменты для тестирования этого архитектурного стиля объяснять не буду. Скажу, что сейчас самыми популярными являются Postman и SoapUI. Postman лично мне нравится гораздо больше, потому что у него очень много удобных фишек:
- написание простых тестов на языке JS;
- моки;
- возможность проксирования;
- удобная система переменных;
- мониторинг;
- удобная рандомизация;
- хорошая документация и обучающие материалы;
- и т. д.
Хотя использования curl (служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL) никто не отменял, особенно когда работаешь на сервере без графического интерфейса.
Командная строка
Самый любимый мой инструмент. Не представляю, как без него можно жить. Зная основные команды, можно значительно упростить себе жизнь. Приведу всего один пример: сравнение документов и списков. Просмотр глазами может занять пару часов, а diff
и немного python решат проблему за 15 минут. И перечислять такие ситуации можно бесконечно.
Git
Git – это система для управления версиями. В нашей команде, например, аналитики используют svn. Таких программ много. Считается, что он нужен, когда начинаешь работать с кодом и писать автотесты. Но на самом деле он может понадобиться раньше. Особенно если тестировщик хочет развиться из ручного тестировщика в автоматизатора, его попросят исправлять простые падения тестов или скачивать и анализировать отчеты, а этого не сделать без знания Git.
Естественно, этот список можно продолжить, но тогда это перечисление можно было бы никогда не закончить.
Soft skills
Последнее время стало модно возводить софт-скилы на пьедестал. Сложно сказать, насколько это верное решение. Часто технарь скажет, что это излишне, но минимальный набор, на мой взгляд, должен присутствовать для успешной работы в команде. А проекты давно не пишутся в одиночку.
Внимательность
Тут все понятно. Без умения долго, скрупулезно и внимательно просматривать программы много багов не найти.
Умение принимать решение под давлением
Обычно тестирование завершает рабочий цикл (спринт) в большинстве продуктовых команд. Как известно, чем ближе конец, тем сильнее горят сроки. И вот тут приходится принимать решение о выводе продукта в продуктивную среду. В этот момент умение и пригодится.
Умение отстоять свою точку зрения
Это умение является продолжением предыдущего, только тут добавляются коммуникативные навыки, так как, чтобы принимать решения нужно суметь донести их до других.
Ответственность
Пропущенный в продакшен баг не является концом света. Но привычка регулярно забивать на проверку и регресс противоречит самим целям тестирования.
Аналитический склад ума
Спорный вопрос, является ли этот признак человека софт-скилом или нет. Но обладать им точно нужно: он пригодится для написания тест-кейсов и для поиска причин крушения системы.
С первым уровнем все. Выше перечислен примерный набор того, что может понадобиться в первые месяцы работы и то, что могут спросить на собеседовании на тестировщика-джуна, как ручного так и автоматизатора.
🧑🎓 Уровень 2: уже что-то знает
Выучив основы, можно начинать развиваться в понравившемся направлении. Этих направлений очень много, поэтому кратко перечислим каждое из них. Некоторые навыки будут рассмотрены чуть более подробно ввиду любви автора к ним.
Мобильное тестирование
Тестирование приложений на мобильных и планшетах. Для погружения в этот мир будет полезно узнать, что такое ферма устройств, эмулятор приложения и локализация с глобализацией.
Нагрузочное тестирование
Также отдельный вид тестирования, который не будет рассмотрен в этой статье. Нужен для проверки работоспособности при выходе в продакшен, т. е. помогает понять, сколько пользователей одновременно смогут работать на вашем сайте или в приложении, найти узкие места и выявить пиковую нагрузку, хотя это уже ближе к стресс-тестированию.
Основы языка программирования
Для дальнейшего развития желательно знания языка программирования. Не обязательно для того, чтобы писать автотесты, а просто для лучшего понимания работы программ или возможности написать простой вспомогательный скрипт. Язык можно выбрать на свой вкус. Сейчас среди тестировщиков особенно распространены:
- Python
- Java
- Go
- JavaScript
Базы Данных. Следующий уровень
Остановившись на первом уровне развития в БД, можно сильно просесть по hard-скилам, да и просто многое упустить. Поэтому расскажу, что еще можно выучить:
Транзакции
Транзакциями является группа последовательных операций с базой данных, которая представляет собой логическую единицу работы с данными. Т. е. в одну транзакцию можно запихнуть сразу несколько действий, и тогда, если в одном из них будет ошибка, то все предыдущие шаги не будут выполнены.
Функции и процедуры
Как и в любом языке, в sql есть функции и процедуры и их заведомая подготовка для работы с БД может значительно упростить жизнь. Например, у меня есть хранимая процедура для удаления пользователей. Нужна она мне потому, что данные пользователей хранятся в множестве таблиц.
Оконные функции
Оконная функция – это функция, которая работает с выделенным набором строк (окном, партицией) и выполняет вычисление для этого набора строк в отдельном столбце. Используются они редко, но иногда без них не обойтись.
Знание специальных таблиц
Сами Базы Данных являются сложными программами и внутри них хранится множество полезной информации о работе. Для того чтобы в ней разобраться нужно читать документацию и знать, что и где искать и какими возможностями обладает та или иная база.
Основы проектирования
На более высоких уровнях тестирования нужно знать основы проектирования, чтобы понимать, где могут быть тонкие места, суметь заранее предположить места ошибок и рассчитать узкие горлышки для нагрузочного тестирования.
Естественно, это не все, что можно изучить в базах данных. Но для уверенной работы этого должно хватить.
UI-тесты
Вид автоматизированного тестирования, когда имитируются действия пользователя в браузере. То есть при запуске этих тестов можно прямо увидеть, как открывается браузер, нажимаются кнопки, заполняются поля. Эффектный, но тяжело поддерживаемый и медленный вид автотестов.
REST-тесты
Автотесты, которые имитируют обращение браузера к серверу или сторонней системы к нему же. Этот вид тестов быстрее, чем UI-тесты, но выглядят не столь красиво и покрывают только backend-часть, не затрагивая frontend. Писать их можно как самостоятельно, так и используя инструменты, такие как Postman.
Дебаггинг
Дебаггингом называется поиск и дальнейшие исправления ошибок в коде. Навык скорее относящийся к разработке, но при сложных плавающих багах очень нужный любому тестировщику.
CI/CD
Второй навык из смежной области, который может пригодиться. Под CI/CD понимается обеспечение последовательного и автоматизированного способа сборки, упаковки и тестирования приложений. Особенно здесь интересна автоматизация запуска автотестов на продукт.
Soft skills
Чем выше уровень, тем больше ответственности и обязанностей возлагается на человека. Проблемы становятся все труднее, появляются новые задачи, такие как: обучение новичков, управление командой и т. д. Для этого требуется дальнейшее развитие soft skills, в которые входит:
Умение обучать
Обучать кого-то чему-то очень кропотливый труд, требующий больших затрат времени и сил. Даже если человек не умеет объяснять, этому можно научиться. Главное – не опускать руки.
Умение распределять работу в команде
Рано или поздно наступает время, когда у человека появляются ученики, которых нужно обучить, мотивировать на продуктивную работу и отдать им часть задач. Для этого нужно быть готовым отдавать задачи и иметь навык распределения работы, чтобы первые задачи новичка не оказались ни слишком легкими, ни слишком тяжелыми.
Умение оценить проект целиком
Если на первом уровне был навык оценки задач, то на втором нужно уметь целиком оценить проект, примерно написать план работ, выбрать стратегию тестирования и распределить работы по времени.
Комментарии