Что такое автотесты в программировании
Перейти к содержимому

Что такое автотесты в программировании

  • автор:

Что такое автотесты в программировании

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

Что такое тестирование ПО?

На самом это один из самых простых способов начать карьеру в ИТ, получить общее представление о структуре, процессах и методах создания программного продукта.

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

Уже на старте новичок, не имеющий никакого опыта работы в ИТ, может получать от 500 до 1000 $. А хороший востребованный тестировщик получает на уровне с продвинутым программистом.

Что такое тестирование и с какими задачами сталкивается тестировщик

Если максимально коротко объяснить, что такое тестирование, то это поиск ошибок программиста. Это могут быть как неработающие функции веб-приложения или программы, так и работающие, но не соответствующие требованиям, которые составляет заказчик.

Работа тестировщика базируется на знании методов и алгоритмов проверки программного обеспечения. При этом тестировщик производит выявление ошибок не уже окончательного продукта, а начиная с самого первичного этапа разработки. Тестирование проводится даже когда продукт уже запущен: он может обновляться, дополняться, клиент может вносить свои изменения.

Что такое тестирование ПО и что входит в работу тестировщика:

  • Анализ определенной стадии разработки и составления плана работ;
  • Детальная проработка тестовых сценариев, отработка так называемых тест-кейсов: набор проверок для оценки качества продукта;
  • Составление баг-репотров: отчеты об ошибках и несоответствиях, которые передаются на доработку команде программистов;
  • Отчетность о проделанной работе.

По сути, это не сложная работа в техническом плане, однако она требует усидчивости, внимательности, большую роль играют личностные качества человека. А самое главное, что для обучения азам тестирования достаточно потратить всего 2-3 месяца на вдумчивое обучение.

test pro bootcamp

Курсы тестирования самый лучший способ быстро изменить свою жизнь к лучшему и обрести новую профессию с перспективой роста.

Что такое тестирование ПО без знания программного кода

В отличие от профессии программиста, тестировщику на начальном этапе не обязательно уметь писать код и даже разбираться в нем. В дальнейшем это может пригодиться и значительно повысит ставки работника, однако для старта достаточно знать так называемое «черное тестирование».

Чтобы объяснить новичкам, что такое тестирование, выделяют три основных подхода:

  • Тестирование белого ящика. Проверка продукта с доступом к коду, методом его прочтения, автоматическими дебагами, приложениями для автотестов;
  • Тестирование черного ящика. Когда тестировщик не взаимодействует с кодом, а делает проверку в черную. Поиск ошибок осуществляется путем отслеживания поведения работы программы;
  • Тестирование серого ящика. Это комбинированный подход, который применяют тестировщики, знающие как устроен код, но также ориентируются на алгоритмы, прописанные в техническом задании.

Существуют также другие классификации и типы тестирования, основанные на разных принципах работы. Однако, на первом этапе обретения профессии важно понимать и знать, что такое QA тестирование.

Что такое QA тестирование

Quality Assurance или обеспечение качества – первый шаг с чего обычно начинает молодой тестировщик. На самом деле это широкое понятие, QA тестировщик может производить как ручное, так и автоматическое тестирование, проверяя программу на всех этапах разработки.

Что такое тестирование QA и какие бывают виды работ по обеспечению качества программного продукта:

  • Аналитика. Необходимо изучать продукт и четко знать, что нужно тестировать, составить логику тестов, расставив приоритеты;
  • Тест-дизайн. Базовое понятие в тестировании – это тест-кейс. Тестировщик должен грамотно писать тест-кейсы, отвечающие запросам клиента;
  • Выполнение и оформление тестов. Важно не только соблюдать последовательность тестирования, выполнять сценарий, а и оформлять найденные ошибки и недоработки в виде определенной формы;
  • Менеджер тестирования. Работа по выполнению организационной работы: составление отчетности, планов работы команды тестировщиков, распределение задач.

Развитые компании набирают большие штаты тестировщиков, и новички требуются всегда, так как в данной сфере очень много простых задач, которые можно доверить работнику уровня джуниор. Зная программный продукт и владея общими навыками, как личностными, так и специальными, в тестировании возможно быстро расти, постепенно осваивая новые технологии и совершенствуя на практике уже приобретенные знания.

Курсы тестировщиков дают необходимый минимум для поиска работы: детальное понимание что такое тестирование ПО, его виды и уровни, практические навыки тестирования различных программных продуктов. Данные знания являются необходимыми для успешного прохождения собеседования.

Часто задаваемые вопросы

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

Если обучаться на курсах, то можно получить общее представление что такое тестирование, выучить и отработать на практике навыки ручного тестирования за 9 месяцев.

Тестирование QA – это то, что более всего подходит новичкам. Quality Assurance в широком смысле слова является комплексом методов по контролю качества разрабатываемых программных продуктов на всех этапах. QA тестировщику не обязательно знать код, а освоить данную специальность могут люди без опыта работы в технической сфере. Знания, достаточные для поиска работы можно получить на курсах, которые занимают от 2 до 3 месяцев.

Автоматизация тестирования: минусы

Автотест (автоматизированный тест) – это скрипт, имитирующий взаимодействия пользователя с приложением, цель которого – локализация ошибок в работе программного обеспечения.

Конечная цель автоматизации тестирования представляет собой некий набор автотестов, которые, при нажатии на кнопку «GO!», будут поочередно запускаться. Ну или всегда можно запустить какой-либо автотест отдельно, если для этого есть необходимость. Каждый такой скрипт проверяет правильность работы определенной части приложения и фиксирует ошибки в случае, если что-то работает не так.
О том, насколько выгоднее использовать автоматизированное тестирование чем ручное, а так же о плюсах автоматизированного тестирования хорошо написано в этой статье. Я же хочу описать возможные проблемы, с которыми может столкнуться тестировщик, решивший использовать автоматизированные тесты.

Отбор тестов для автоматизации
  • установка операционной системы
  • проверка напечатанного принтером документа
  • проверка содержимого картинки, видео
Стоимость

Далеко не всегда оказывается, что разработка и сопровождение автоматизированных тестов будет дешевле ручного тестирования. Необходимо потратиться на среду разработки, системных администраторов, наем программистов, их информационную поддержку (имеется ввиду поддержка при возникновении вопросов относительно тестируемой системы и тест кейсов), обеспечить им рабочие места. Все это выльется в немалую сумму и окупится только при тестировании больших систем, когда есть возможность автоматизировать довольно большое количество тестов. После разработки скриптов их нужно кому-то запускать и анализировать результаты. Не получится проводить тестирование по схеме «запустил – подождал – получил конечный результат». Нужен человек, который сможет анализировать выполнение автотестов: определять, нужно ли отправлять тест на доработку, действительно ли существует ошибка, найденная автотестом, подготавливать данные для тестирования. На подготовку среды для разработки, саму разработку уйдет масса времени.

Отдельная статья расходов на автоматизацию – это поддержка автотестов.

Поддержка

Автотесты всегда требуют поддержки. Так как написание автотестов – это программирование, то чтобы изменить\исправить логику автотеста нужно лезть в исходный код. Для этого нужно нанимать дополнительных специалистов, которые будут сопровождать написанные скрипты. Это новые расходы, без которых не обойтись и которые значительно повышают стоимость автотестов. Есть 2 основных случая, при которых может понадобиться вмешательство в исходный код:

1. Изменение входных данных к тесту

Хорошо, если при выполнении нескольких итераций тестирования приложения можно всегда подавать автотестам на вход одни и те же данные. Например, проверка занесения записи в базу данных, или проверка открытия какого-либо меню, где входные данные вообще не требуются.
Но бывает и так, что перед каждым запуском автотестов данные нужно готовить заново. При большом количестве тестов подготовка входных данных может занять много времени. Например, при тестировании банковской системы могут потребоваться счета в рублях, долларах, евро; счета с разными суммами, принадлежащими как физическим лицам, так и организациям. После прогона серии автотестов на всех счетах может остаться нулевой баланс, некоторые из них будут закрыты, некоторые заблокированы. При последующем тестировании необходимо будет использовать другие счета. В некоторых случаях данные могут быть хардкодом прописаны в скриптах автотестов, и происходить это может не из-за того что разработчику было лень сделать свой скрипт более гибким, а просто потому что такого хардкода требовал тест кейс. Через некоторое время тест кейс изменится (например название банка изменится с «хабрабанк» на «хабракредитбанк»), и потребуется изменение скрипта.

2. Изменение функционала

Особенно актуально для регрессионного тестирования – тестирования новых версий. При каждом обновлении интерфейса или функционала тестируемого ПО потребуется доработка автотестов. Автотесты не могут сами адаптироваться под новый интерфейс, и для продолжения их корректной работы приходится все изменять вручную. Чем больше количество тестов, и чем больше произошло нововведений в ПО, тем больше времени понадобится на актуализацию.
Пример: в старой версии программы было меню «Файл -> Опции», в новой версии этот пункт разделили на два: «Файл -> Настройки» и «Файл — > Параметры». Автотест по прежнему будет искать пункт «Опции», и хоть ты тресни, не найдет «Настройки».
Либо может измениться например время загрузки тестируемой страницы. Если раньше она загружалась моментально, то теперь на это уходит минута. Допустим, теперь скорость соединения слабая, или база тормозит. Автотест же этого не знает, ждет загрузки страницы 10-15 секунд и выдает сообщение «Ошибка: страница не загрузилась». Опять же понадобится доработка исходного кода скрипта.

В обоих случаях многое зависит от разработчиков: процесс написания автотестов требует не меньших знаний и усилий чем процесс создания любого другого ПО. Следовательно, тут проявляются все проблемы, связанные с разработкой: сложность контроля качества и надежности, перенос сроков, изменение бюджета и многие другие.

И всё-таки

Эти минусы не означают, что нужно избегать автотестов любой ценой. От них тоже есть польза.
Как видно из графика, использование автоматизации дает лучшие результаты при тех же затратах. Но, еще раз повторюсь, эти результаты будут лучшими только при автоматизации тестирования больших проектов.

  • Автотесты работают быстрее, чем человек
  • Автотесты выполняются с большей точностью
  • Автоматизация тестирования позволяет повысить качество продукта
  • Автоматизация может использоваться практически во всех процессах тестирования
  • Автотесты могут выполняться ночью

Автотесты – барское дело

Зачем разработчикам писать автотесты? С таким же успехом их можно заставить класть плитку или вести бухгалтерию. Не барское это дело! Или, все-таки, барское?

Примечание: в статье под автотестами имеются ввиду не unit-тесты, а автоматизированные функциональные тесты, выполняющиеся на полностью развернутом продукте в окружении, максимально приближенном к боевому.

В разработке программного обеспечения существует много мифов и глупостей. Рассмотрим два из них.

Так уж сложилось, что тестировщики в индустрии в среднем зарабатывают меньше, чем разработчики. Происходит это, видимо, из-за того, что бытует мнение, что на роль тестировщиков можно нанять студентов за недорого, показать им куда надо «тыкать» — и все, команда тестировщиков готова. Это заблуждение, конечно. Хороший тестировщик является по сути исследователем программ, который понимает как они устроены внутри и должен стоить дорого, но это почему-то мало кто понимает.

Второе заблуждение – это отношение к автотестам. Считается, что разработка автотестов – это глупая нудная работа, которую можно поручить кому угодно.

  1. Автотесты окажутся крайне дороги в разработке.
  2. Большое количество ложных срабатываний. Редко когда полный прогон автотестов завершается удачно, в результате сломанным атотестам никто не верит.
  3. Трудоемкий процесс анализа результатов прогона автотестов из-за большого количества ложных срабатываний и трудностей с диагностикой.
  4. Очень высокая хрупкость. Тесты постоянно ломаются даже после незначительных изменений в продукте. Из-за этого их нужно постоянно поддерживать.
  5. В конце концов, автотесты забрасывают и стараются забыть этот позор.

Вторая причина вытекает из того, что команда тестирования не владеет продуктовым кодом. Кодом владеют разработчики и только они могут вносить в него исправления.

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

Точно такая же ситуация имеет место быть и при разработке функциональных автотестов. Когда продуктовый код пишут разработчики, а тесты для этого кода тестировщики, то трудоемкость и качество (поддерживаемость, скорость выполнения, хрупкость и пр.) таких тестов получается хуже, чем если бы и то и другое разрабатывала одна команда. Это происходит из-за того, что разработчик имеет возможность слегка подправить код так, чтобы ему самому было удобнее для этого кода написать автотест. Теоретически, инженер из команды тестирования тоже может попросить команду продуктовых разработчиков модифицировать код. Но на практике, это происходит не всегда, так как часто тестировщику проще оставить в тесте костыль (например, sleep), чем обращаться с просьбой к команде разработчиков, которые в данный момент заняты чем-то важным, ждать пока они реализуют то, что ему нужно, потом получить не то, что он просил и так по кругу. В результате, со временем тесты обрастают костылями, становятся неподдерживаемыми и превращаются в тот самый чемодан без ручки, который и выбросить жалко и тащить тяжело.

Таким образом, самые надежные и легко поддерживаемые тесты получаются, когда их делает команда продуктовых разработчиков. Но данный вариант также не лишен недостатков. Эти недостатки хорошо известны и благодаря им вообще существуют тестировщики. Все в конечном итоге сводится к тому, что тестировщики лучше умеют находить ошибки.

Поэтому оптимальным является некоторый промежуточный вариант, когда автотесты пишутся и разработчиками и тестировщиками. При таком комбинированном подходе удается объединить сильный стороны тех и других. Разработчики закладывают грамотную архитектуру автотестов, адаптируют продукт и обеспечивают покрытие тестами продуктового кода. Тестировщики, со своей стороны, обеспечивают покрытие тест-кейзов, используя в качестве базы автотесты разработчиков.

Разработка автотестов является у нас неотъемлемой частью общего процесса разработки продукта. При планировании итерации для каждой пользовательской истории мы обязательно закладываем время на подготовку автотестов для неё. Трудоемкость автотестов обычно составляет 10-20% от трудоемкости истории, но потраченное время потом многократно окупается.

При внедрении такого подхода к разработке автотестов могут быть проблемы с мотивацией разработчиков, но преодолеть эти проблемы не сложно. Надо сделать так, чтобы прогон автотестов (по крайней мере, части из них) стал внутренним делом команды программистов. Это означает, что тестировщики получают в тестирование только работоспособные сборки, на которых полностью прошли автотесты. При этом, на сломанный функционал, который был обнаружен автотестами, не заводятся баги, так как тестировщики про этот позор ничего не знают.

  1. При внесении очередного изменения в код продукта разработчик не тратит свое время на проверку того, что он ничего не поломал. Разработчик просто делает PR, а проверку выполняет автоматика.
  2. Работающий код гораздо легче модифицировать, чем неработающий. Автотесты подтверждают работоспособность продукта перед тем, как программист приступает к очередной задаче, что дает ему твердую почву под ногами.
  3. Известно, что чем раньше ошибка обнаружена, чем легче её локализовать и исправить. Автотесты во многих случаях помогают сократить время обнаружения ошибки до минимума, благодаря чему ошибка исправляется по горячим следам.
  4. Автотесты позволяют эффективно проводить рефакторинг кода, так как у программиста появляется возможность автоматически проверить корректность проведенного рефакторинга. Благодаря этому рефакторинг перестает быть хождением по минному полю и становится рутинной рабочей процедурой.

Автоматизация тестирования: что это такое и зачем вам нужно

Тестирование ПО можно условно разделить на два направления: ручное и автоматизированное. Ручное (также мануальное) тестирование не требует особых айтишных навыков, а тем более навыков программирования. Его часто описывают под соусом «вам хватит и этого, чтобы войти в профессию, если боитесь программирования». Обманывают ли вас? Нет, это и правда так: и сегодня на позицию джуниор-тестировщика можно претендовать без навыков автоматизации.

Зачем тогда нужна автоматизация?

Дело в том, что мануальное тестирование, как и любая ручная работа, зачастую приводит к «замыливанию» взгляда и пропуску ошибок. А вот автоматизированное тестирование использует код и автотесты — это скрипты, которые выполняют шаги созданного нами теста автоматически. Техника проверяет работу продукта на соответствие ожиданиям и не пропускает недочеты из-за усталости или невнимательности.

А для вас, как для соискателя, владение автоматизированным тестированием повысит шансы выделиться среди остальных джунов. Больше умений — больше предложений от работодателей.

Но что делать, если кодить — не ваше? Выход есть!

На более продвинутом уровне автоматизации без знания программирования не обойтись, но вначале вам могут помочь рекордеры. Это специализированное программное обеспечение, предназначенное для записи действий пользователя и быстрого преобразования их в шаги линейных тестов. Вот примеры некоторых из них:

Установив рекордер, вы можете записать происходящие действия, а потом воспроизвести тест-кейс, проверив его работоспособность.

Но если переходить к более серьезному уровню владения автоматизацией, понадобятся навыки кодинга. Что же нужно для освоения автоматизированного тестирования? Объем тем для изучения пугающий: в одном только «Искусстве программирования» Дональда Кнута — пять томов.

Спешим обрадовать: браться за Кнута не обязательно. Да и вообще покупать бумажные учебники в наше время, когда информация устаревает каждый год. Для начала вполне поможет интернет: определитесь с тем, какой язык программирования выбрать для работы, поизучайте программы и напишите свой первый автотест.

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

Конечно, лишь одного вида тестирования для полноценной работы тестировщика будет не достаточно. Например, такие вещи, как тестирование юзабилити, не могут существовать без человеческого взгляда со стороны. Да и программы, бывает, дают сбой. Поэтому идеальным будет тот вариант, где вы владеете ручным тестированием — основой всего — и навыками автоматизации. Тогда вы станете настоящим универсальным специалистом!

Достичь золотой середины в обучении поможет курс ПОИНТ. В его программе мы уделяем внимание всем аспектам тестирования, изучая все важные темы, такие как составление баг-репортов, тест-дизайн, SQL для тестировщика, тестирование мобильных приложений и многое другое. Окончив ПОИНТ, вы можете претендовать на вакансии джуниор-тестировщиков! Почитать отзывы и истории выпускников, нашедших работу, можно по ссылке.

Курс стартует каждый месяц. Следите за нашей группой VK, чтобы не пропустить конкурсы и акции!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *