Гид по профессии тестировщик: чем занимается специалист в сфере qa, сколько зарабатывает, что надо знать и где учиться
Содержание:
Нагрузочное тестирование
Нагрузочное тестирование — процесс анализа производительности тестируемой системы под воздействием нагрузок. Цель нагрузочного тестирования- определить способность приложения к внешним нагрузкам. Обычно испытания проводятся в несколько этапов.
1. Генерация тестовых сценариев
Для эффективного анализа сценарии должны быть наиболее близки к реальным сценариям использования
Важно понимать, что всегда возможны исключения, и даже самый подробный план тестирования может не покрыть отдельно взятого случая.. 2
Разработка тестовой конфигурации
2. Разработка тестовой конфигурации
Имея сценарии тестирования, важно распределить порядок возрастания нагрузки. Для успешного анализа необходимо выделить критерии оценки производительности (скорость отклика, время обработки запроса и т.д.).. 3
Проведение тестового испытания
3. Проведение тестового испытания
При проведении тестов важно своевременно следить за исполнением сценариев и откликом тестируемой системы. Для эмуляции высоких нагрузок требуется серьезная аппаратная и программная инфраструктура
В некоторых случаях для удешевления работ применяются методы математического моделирования. За основу берутся данные, полученные при низких нагрузках, и аппроксимируются. Чем выше уровень моделируемой нагрузки, тем ниже точность оценки. Однако подобный способ существенно сокращает расходы.
Инкрементная модель
Данная методология может быть описана, как мультикаскадная модель тестирования ПО. Рабочий процесс разделяется на некоторое количество циклов, каждый из которых также делится на модули. Каждая итерация добавляет определенный функционал к ПО. Инкремент состоит из трех циклов:
- дизайн и разработка
- тестирование
- реализация.
В этой модели возможна одновременная разработка разных версий продукта. Например, первая версия может проходить этап тестирования в то время, как вторая версия находится на стадии разработки. Третья версия в то же самое время может проходить этап дизайна. Этот процесс может продолжаться до самого завершения проекта.
Очевидно, что данная методология требует обнаружения максимально возможного количества ошибок в тестируемом ПО настолько быстро, насколько это возможно. Так же, как и фаза реализации, которая требует подтверждения готовности продукта к доставке к конечному пользователю. Все эти факторы существенно увеличивают весомость требований к тестированию.
В сравнении с предыдущими методологиями, инкрементная модель имеет несколько важных преимуществ. Она более гибкая, изменение требований ведет к меньшим затратам, а процесс тестирования ПО является более эффективным, поскольку гораздо проще проводить тестирование и дебаггинг за счет использования небольших итераций. Тем не менее, стоит отметить, что общая стоимость все же выше, чем в случае каскадной модели.
Функциональное тестирование
Под функциональным тестированием понимается проверка соответствия программного продукта функциональным требованиям, указанным в техническом задании на создание это продукта.
Если говорить проще, то при функциональном тестировании проверяется выполняет ли программный продукт все функции, которые должен.
Итак, Вы таки решились провести функциональное тестирование. Вы заглядываете в техническое задание, читаете функциональные требования и понимаете, что по крайней мере они расположены не в том порядке, в каком можно производить тестирование. Вы будете удивлены, что еще достаточно давно другие уже заметили это несоответствие и придумали как его преодолеть.
Для проведения функционального тестирования персоналом отдела технического контроля разрабатывается документ программа и методика испытаний функционала приложения (ПМИ). Документ ПМИ содержит перечень сценариев тестирования программного продукта (test cases) с подробным описанием шагов. Каждый шаг сценария тестирования характеризуется действиями пользователя (специалиста по тестированию) и ожидаемыми результатами – ответной реакции программы на эти действия. Программа и методика испытаний обязана имитировать эксплуатацию программного продукта в реальном режиме. Это означает, что сценарий тестирования должен быть построен на основе анализа операций, которые будут выполнять будущие пользователи системы, а не быть искусственно составленной последовательностью понятных только разработчику манипуляций.
Обычно, функциональное тестирование проводится на двух уровнях:
- Компонентное (модульное) тестирование. Тестирование отдельных компонентов программного продукта, сфокусированное на их специфике, назначении и функциональных особенностях.
- Интеграционное тестирование. Данный вид тестирования проводится после компонентного тестирования и направлен на выявление дефектов взаимодействия различных подсистем на уровне потоков управления и обмена данными.
Особенности профессии
Условно всех тестировщиков мобильных приложений можно разделить на две группы:
- альфа, которые тестируют программный продукт в то время, когда она находится на стадии разработки;
- бета, который тестирует практически готовую версию мобильного приложения.
Альфа-тестировщики чаще всего являются сотрудниками компании-разработчика, в роли бета-тестировщиков могут выступать как профессиональные программисты, так и обычные пользователи, с нетерпением ожидающие релиз. В обязанности тестировщиков мобильных приложений входят следующие виды работ:
- осуществление контроля качества мобильных приложений;
- разработка пользовательских сценариев для устройств на ОС iOS/Android, которые ложатся в основу тестирования;
- использование автоматических тестов;
- фиксирование выявленных ошибок.
Тестировщики мобильных приложений могут быть штатными сотрудниками компании-разработчика. Нередко компании набирают независимые тест-группы, что позволяет получить прозрачный результат. Огромным бонусом является знание языков программирования Swift, Kotlin, Objective-C и других, позволяющих оценивать не только клиентскую часть, но и backend.
Тестирование встроенного ПО и соблюдение стандартов в эру Agile
Соблюдение отраслевых стандартов – это не то, чем вы можете пренебречь или заняться позже; это неотъемлемая часть процесса разработки встроенного программного обеспечения (ПО). Для некоторых индустрий, — таких как авионика, автомобилестроение и здравоохранение, — строгое следование стандартам качества при разработке сложных и безотказных встроенных систем становится жизненно необходимым условием выпуска продукта на рынок. Традиционно, тестирование играет важную роль в разработке встраиваемых систем для регулируемых стандартами отраслей. Однако за последние годы устоявшиеся практики и процессы тестирования, их место и роль в подобных проектах значительно преобразились. Это резко изменило все правила игры, а когда правила игры меняются, необходимо меняться вместе с ними, чтобы выиграть.
В условиях постоянного развития новых, ультрасовременных технологий компаниям необходимо быстро предлагать рынку надежные, безопасные, простые в использовании и совместимые с другими системами продукты – просто чтобы не потеряться в быстро меняющемся технологическом мире. В такой ситуации традиционная каскадная модель, где процесс разработки ПО строго последователен и тестирование выполняется в самом его конце, уходит в прошлое. Большую популярность приобретают методы DevOps и Agile, поскольку они позволяют инженерам выполнять задачи, которые раньше следовали друг за другом, одновременно.
Исследование, проведенное Ауригой при поддержке независимой исследовательской компании LTM Research, показывает, что эта эволюция роли тестирования в цикле разработки ПО имеет огромное значение. При постоянном дефиците времени производители по-прежнему не могут пожертвовать качеством, надежностью и безопасностью своего продукта. К примеру, широко обсуждаемые сегодня беспилотные автомобили являются источником повышенной опасности, а значит, требуют неукоснительного соблюдения стандартов. Нельзя обойтись и без тестирования встроенного ПО, поскольку практически все решения в области IoT и Connectivity основаны на встроенных технологиях.
Все отрасли стремятся к инновациям, быстрому развитию и распараллеливанию процессов, и это делает тестирование встроенного ПО еще более важным. Здравоохранение, где стандарты традиционно очень высоки, отличает огромный спрос на сложные и сверхточные алгоритмы – такие как, например, алгоритм автоматического распознавания сердечных ритмов для инновационного дефибриллятора, над которым сейчас трудятся инженеры Ауриги. Новые интеллектуальные больничные системы, «умное» медицинское оборудование и носимые устройства, которые появляются почти каждый день, должны быть безопасными и надежными.
Говоря о безопасности, нельзя не упомянуть сферу финансов и растущий интерес к биометрии. Сканирование отпечатков пальцев и сетчатки глаз, распознавание голоса и лица – вот что будет использоваться для идентификации пользователей вместо обычных паролей, к которым мы так привыкли. Но прежде чем позволить встроенному ПО сканировать вашу сетчатку, производители должны убедиться, что оно соответствует всем стандартами и устойчиво к киберугрозам, которые сегодня становятся все масштабнее и изощреннее.
Цель
Таким образом, анализ ПО с позиции его ключевых или вспомогательных функций определяет тип тестирования:
- Функциональное
- Нефункциональное
Функциональное тестирование направлено на проверку того, какие функции ПО реализованы, и того, насколько верно они реализованы.
Нефункциональное – проверка корректности работы нефункциональных требований. Оценивается, КАК программный продукт работает. Эта проверка включает в себя следующие виды:
Тестирование производительности – работа ПО под определённой нагрузкой.
- Тестирование пользовательского интерфейса – удобство пользователя при взаимодействии с разными параметрами интерфейса (кнопки, цвета, выравнивание и т. д.).
- Тестирование UX – правильность логики использования программного продукта.
- Тестирование защищенности – определение безопасности ПО: защищено ли оно от атак хакеров, несанкционированного доступа к данным и т. д.
- Инсталляционное тестирование – оценка вероятности возникновения проблем при установке, удалении, а также обновлении ПО.
- Тестирование совместимости – тестирование работы программного продукта в определённом окружении.
- Тестирование надежности – работа программы при длительной средней ожидаемой нагрузке.
- Тестирование локализации –оценка правильности версии программного продукта (языковой и культурный аспекты).
Чем занимается тестировщик
Нужно помнить, что тестирование сильно зависит от того, в какой компании работает тестировщик.
Это очевидно, но тем не менее акцентирую внимание на том, что очень сложно стать универсальным
тестировщиком, разве что сменив несколько работодателей из разных IT сфер.
Я прочитал некоторые вакансии в рунете и в LinkedIn и сделал подборку популярных требований и
описаний задач.
Постараюсь перевести их на понятный новичку язык.
Тестирование отдельных задач в тестовом и рабочем окружениях
Имеется в виду, что Вам придётся иногда тестировать в продакшене — то есть
не dev а prod версию.
Если Вы тестируете сервер, который хостится Вашей конторой, то разница только в
ответственности.
Если сервер на стороне клиента — готовьтесь подключаться по VPN,
настраивать SSH туннель,
а в худшем случае — разбираться в SSL сертификатах.
Покрытие тест-кейсами функционала системы
Означает, что нужно изучить спецификацию и понять, что можно протестировать.
Затем описать
эти тесты.
Проверка входящих баг-репортов из Tech Support
Клиенты обычно жалуются на баги и не только на баги.
Поддержка не всегда может
быстро понять, что к чему, поэтому проще переслать баг-репорт тому тестировщику,
который знаком с проектом.
Вы проверяете воспроизводится ли баг в тестовом окружении,
если нет, то ковыряетесь в production логах где-нибудь на Kibana.
Функциональное тестирование и отслеживание качества выпускаемого сервиса
Здесь всё понятно — проверять нужно выполняет ли продукт свою функцию. После этого
проверить насколько качественно и удобно для пользователя он это делает
Анализ функциональности сервиса
Может означать всё что угодно. Похоже скорее на задание для исследовательского тестирования.
Общение с командой разработки и менеджерами, принятие совместных решений об улучшении сервиса.
Это неотъемлемая часть работы практически любого инженера по тестированию, причём не только софта.
Локализация и документирование дефектов.
Под локализацией обычно понимают выяснение источника проблемы. Это выливается в поиск логов, относящихся
непосредственно к ошибке и отслеживанию stack trace.
Документация это: описать что вызывает баг, какое действие клиента или какой конкертно запрос. Максимальное
количество полезной информации приветствуется.
Обязательно указывать версию ПО в которой был получен баг и приложить логи.
Оптимизация процесса тестирования внутри команды и постановка задач разработчикам автотестов
Подразумевается, что тестировщик-мануальщик, должен общаться с тестировщиком-автоматизатором
и просить у него разработать инструменты для автоматизации. Потом эти инструменты нужно
изучить, применить и описать — смотрите следующий пункт.
Запуск и анализ результатов автотестов
Это очевидное продолжение предыдущего пункта.
Проведение ручного функционального тестирования
Функциональное тестирование мы уже обсудили, в этом пункте ключевое слово — ручное. Нужно будет кликать мышкой, делать
запросы к API, нажимать на кнопки, всё зависит от продукта. Если Ваша компания производит мухобойки — возможно придётся
бить мух.
Участие в регрессионном тестировании
Регрессионное тестирование обычно означает следующее.
У Вас уже есть работающий продукт, но к нему пришёл Change Request (CR)
и разработчики сделали новую фичу.
Фича работает, но теперь нужно понять не сломала ли новая фича что-то
из старого функционала.
Для этого Вам придётся проделать все известные манипуляции с продуктом. Обычно под Regression Test есть
отдельный документ, если Вы придумали что-то новое — просто добавляете это туда. Довольно скучный процесс.
Ведение тестовой документации, подготовка тест кейсов
Рутина, без которой никуда особенно в большиъ компаниях.
Регистрация найденных дефектов в баг-трекере, контроль их исправления.
Взаимодействие с командой разработки.
Взаимодействие с разработчиками — это весело. Пример из жизни: в логах найдена неизвестная
ошибка
2019-01-10 10:01:15 : Something is not ok
О ней написан репорт. Разработчик выпустил фикс. Тестировщик проверил и не увидев больше этого предупреждения
в логах зааксептил.
Прошла неделя, тестировщик тестирует совершенно другую историю и вдруг
2019-01-17 10:01:15 : Something is not ok
Тестировщик звонит разработчику и говорит, что ошибка снова появилась.
Первый вопрос разработчика — « А на каком уровне логов ты смотришь?»
Оказалось, что разработчик просто глубже закопал эту ошибку — теперь она не видна
на ERROR уровне лога а видна только на DEBUG.
Вот такой фикс.
Присылайте свои истории в комментарии. Лучшие я включу в статью.
Тестирование производительности
В ходе этапа тестирования производительности в первую очередь проводят нагрузочное тестирование, целью которого является проверка, будет ли система адекватно реагировать на внешние воздействия в режиме, близком к режиму реальной эксплуатации.
Кроме нагрузочного тестирования проводят испытания в условиях минимальных аппаратных средств и максимальной нагрузки – стрессовое тестирование, а также, испытания в условиях предельных объемов обрабатываемой информации – объемное тестирование.
Выделяют еще один вид тестирования: тестирование стабильности и надежности, которое включает в себя не только длительное испытание программного продукта в нормальных условиях, но и способность его возвращаться в нормальный режим функционирования после непродолжительных периодов стрессовых нагрузок.
Плюсы и минусы профессии
Плюсы
- Ежегодно компании-разработчики выпускают тысячи приложений, а ведь каждое необходимо тестировать. Поэтому тестировщик обеспечен работой на долгие годы вперед.
- Работа интересная и не однообразная.
- Можно выполнять обязанности удаленно, что обеспечивает мобильность и гибкий график.
- Войти в профессию можно с нуля, пройдя обучение на профильных курсах.
- Возможен карьерный рост, но при условии постоянного обучения.
- Опытные тестировщики получают хороший доход.
Минусы
- Тестировщик мобильных приложений – малоподвижная работа, поэтому могут возникнуть профессиональные заболевания.
- На первых порах тестировщик получает не слишком высокий оклад, однако по мере приобретения опыта ставки будут возрастать.
- Сложно достичь успеха без дополнительный знаний в области программирования и иностранных языков.
Курсы
Онлайн-курсы LearnQA
Сервис LearnQA предлагает освоить профессию тестировщика мобильных приложений в режиме онлайн. Доступен широкий выбор курсов для новичков и практикующих тестировщиков, которые помогут обучиться с нуля или усовершенствовать знания. Можно записаться на бесплатный курс, после освоения платной программы выпускники получают сертификаты.
Онлайн-университет Skillbox
Университет реализует девятимесячный курс для тестировщиков мобильных приложений. В программу включено ручное и автоматическое тестирование, она представляет интерес для тех, кто входит в профессию с нуля. Выпускники получают сертификаты и помощь при трудоустройстве.
Обучение на тестировщика мобильных приложений
Тестировщиков мобильных приложений обучают на курсах, однако этому процессу предшествует получение дополнительных знаний. Для работы в крупных компаниях и проектах потребуется знание иностранного языка, а также минимум одного языка программирования. В приоритете Swift и Kotlin, однако востребованы специалисты, знающие Java, Python, C# и т. д. Наивысшим спросом пользуются тестировщики мобильных приложений, которые имеют высшее образование по профилям «Прикладная математика и информатика» (код: 01.04.02) или «Прикладная информатика» (код: 09.03.03).
- НИТУ «МИСиС».
- МГТУ им. Н. Э. Баумана.
- РТУ МИРЭА.
- РЭУ им. Г. В. Плеханова.
- МИЭТ.
- МГУТУ им. К. Г. Разумовского (ПКУ).
- РАНХиГС.
- СПбПУ.
- КФУ.
- КубГУ.