Перейти к содержимому

Почему тестирование

  • автор:

Что такое тестирование программ и зачем оно нужно

При создании программ 75% времени уходит вовсе не на программирование, а на тесты. Разбираемся, чем занимаются тестировщики и QA-инженеры.

Иллюстрация: Merry Mary для Skillbox Media

Марина Демидова

Марина Демидова

Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.

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

Почему важно тестировать программы

Вот типичные программные баги:

  • Вы вводите в поле ответ на вопрос и нажимаете Enter. После этого программа неожиданно завершает работу, не сохранив информацию. И та же ошибка повторяется в следующий раз.
  • Другой случай: вы играете, например, в какую-нибудь стрелялку. Неожиданно персонажи начинают хаотично двигаться, конвульсивно дёргаться, терять или отращивать конечности. И вообще ведут себя не так, как им положено. Некоторое время программа не реагирует на нажатие клавиш, после чего выдаёт «Game over».
  • Ещё один пример: вы заходите в личный кабинет интернет-магазина. Нажимаете «Оплатить», а вас выкидывает на главную страницу, да ещё и разлогинивает.

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

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

Какие виды тестирования существуют

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

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

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

Есть несколько видов тестирования:

  • Статическое, без запуска программы, и динамическое — с запуском. Статическое обычно делают в самом начале работы: инженеры проверяют проектную документацию и спецификации, вычитывают уже написанный код. Затем проводят динамическое тестирование: программу запускают и проверяют, как она ведёт себя во время работы, определяют время отклика и то, насколько она загружает процессор и память.
  • С помощью функционального тестирования проверяют, как программа решает задачи, нужные клиенту. При нефункциональном исследуют производительность системы, её надёжность и защищённость, работу с окружением — операционной системой и оборудованием.
  • Ещё один способ — тестирование по принципу чёрного и белого ящика. В первом случае тестировщик не смотрит на код и работает только с программным интерфейсом. Он проверяет производительность программы, все ли нужные функции реализованы, ищет ошибки в её интерфейсе и поведении. Во втором — инженер имеет доступ к коду. Он проверяет структуру и логику всей программы или отдельных её компонент. Часто этим занимается сам программист.
  • Ручное и автоматическое тестирование. В первом случае работу кода проверяют вручную, без использования программных средств. Во втором — применяют специально написанные автоматические тесты, которые постоянно обновляют.

Что тестируют на разных этапах разработки

Есть несколько уровней тестирования. Их проводят в разное время:

  • Модульное тестирование делается в самом начале, когда готовы те куски кода, которые можно проверить по отдельности: объекты, классы, функции, программные модули. Тесты пишутся отдельно для каждой функции или метода. На этом этапе проверяют работоспособность части кода, нет ли регрессии — не появились ли после изменения кода ошибки там, где раньше всё работало нормально. Это самый нижний уровень тестирования, часто это делают те, кто пишет код.
  • К интеграционному тестированию переходят после модульной проверки. Здесь тестируют связи между проверенными элементами и то, как программа взаимодействует с операционной системой, оборудованием.
  • Системное тестирование показывает, соответствует ли готовая система функциональным и нефункциональным требованиям.
  • Приёмочное тестирование проходит, когда заказчик принимает приложение от разработчиков. Его цель — убедиться, что продукт удовлетворяет требованиям клиента. На основании приёмочного тестирования покупатель решает, готова ли программа или её нужно дорабатывать.

В зависимости от этапа разработки перед тестировщиками стоят разные цели:

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

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

Как обычно проходит тестирование

Как правило, тестировщики начинают работать с программой сразу после начала проекта:

  • Составляют тест-план, где описан весь объём работ по тестированию и определено, когда их можно закончить. Это примерный документ — в процессе разработки в него не раз внесут изменения: уточнят стратегию и виды тестирования, расписание работ и так далее.
  • Разрабатывают тест-кейсы — перечень конкретных действий и сценарии для проверки каких-то определённых функций программы.
  • Решают, нужна ли автоматизация: стоит ли разрабатывать и запускать автоматические тесты или можно обойтись ручным тестированием.

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

Следующий этап — регрессионное тестирование. Тестировщики ищут баги в новых участках кода и в тех местах, где исправляли ранее найденные ошибки.

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

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

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

Кто всё это делает: немного о профессии

Тестированием программы занимаются специалисты по контролю качества программного обеспечения — QA-инженеры. У них есть разные специализации: тестировщики баз данных, специалисты по автоматизированному тестированию, аналитики, разработчики тестов, специалисты по безопасности приложений и другие.

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

Сейчас тестировщики — одни из самых востребованных IT-специалистов. Появляется множество новых программ, и каждой из них нужен контроль качества.

Средняя зарплата тестировщика в Москве больше 120 тысяч рублей, а по регионам — примерно 60–70 тысяч. На скриншотах ниже — данные с HeadHunter. В июне 2022 года там было 2000 открытых вакансий.

В описаниях вакансий работодатели предлагают зарплаты от 45 до 300 тысяч рублей и выше — смотря как договоритесь 🙂

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

Что в итоге

Тестирование — увлекательная и многогранная профессия. Она подходит людям усидчивым и ответственным, тем, кто любит искать решения сложных задач.

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

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

Читайте также:

  • История тестировщика: «Эйчары тут лютые, но иногда можно проскочить»
  • 5 шаблонов проектирования, которые должен освоить каждый разработчик
  • Обзор Kubernetes для программистов: как он устроен, как работает и как связан с облаками

Почему тестирование ПО и обеспечение качества так важны для бизнеса

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

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

Сокращение затрат на исправление ошибок

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

О непоправимом ущербе, который может нанести программный сбой из-за непроведённого тестирования, свидетельствуют отчёты международных компаний. Например, согласно отчёту одной крупной QA-компании за 2017 год предприятия потеряли активы на 1,7 триллиона долларов, что негативно сказалось на 3,7 миллиона человек по всему миру. Да и в ленте новостей постоянно мелькают пугающие новости о программных сбоях, которые чуть не обрушили все бизнес-процессы крупных компаний. Таким образом, своевременное тестирование ПО позволяет избежать расходов на исправление ошибок на поздних этапах разработки.

Репутация бренда

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

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

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

Предотвращение направленных атак вредоносного ПО

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

Обеспечение качества в разработке ПО и его преимущества

Тестирование продукта и обеспечением его качества — не совсем одно и то же. Если при тестировании ПО мы проверяем технические аспекты, то в рамках обеспечения качества смотрим на продукт шире. Запускается комплексный и систематический процесс приведения IT-продукта к заданным параметрам. Кроме того, услуги обеспечения качества подразумевают оценку циклов разработки и тестирования, включая различные методы, инструменты и процессы.

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

Вывод

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

  1. гарантирует соответствие выпускаемого продукта ожиданиям как заказчиков разработки, так и конечных пользователей;
  2. позволяет оптимизировать бизнес-процессы (уменьшить затраты на обслуживание ПО и исправление ошибок);
  3. повышает надёжность продукта;
  4. помогает сформировать превосходный пользовательский опыт.

Наконец, стабильно работающий ИТ-продукт привлечёт больше пользователей, что, в свою очередь, повысит деловую репутацию вашей компании, увеличит охват и продажи

Что такое тестирование и почему мы должны его делать?

В первой статье в этой серии из пяти частей о тестировании в JavaScript мы рассмотрим, что такое тестирование и почему мы должны это делать. Если вас интересует тестирование в контексте Vue.js, то обратите внимание на книгу «Тестирование компонентов Vue.js с помощью Jest».

Тестирование в области разработки программного обеспечения — это процесс оценки того, что все части приложения ведут себя так, как ожидалось.

Тесты выполняют проверки программного обеспечения, проверяя, что полученный результат соответствует спецификациям, учитывая разные входные данные. Каждая из этих проверок называется тестовым сценарием (test case). В рабочем процессе agile каждая пользовательская история должна иметь набор тестовых сценариев. Простой пример:

US-01: создание компонента ввода валютыСценарии тестирования:
– TC-01: он должен принимать только числа
1. Введите число «2». Ожидается: все должно быть в порядке
2. Введите символ «a». Ожидается: должно отображаться сообщение «Разрешены только числа»
– TC02: оно не может быть пустым
.

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

Скорее всего, если вы читаете эту статью, вы знаете, что такое тестирование и TDD, но если вы новичок в тестировании, у вас может возникнуть вопрос, который был в своё время у всех нас:

Не занимает ли тестирование слишком много времени? Нужно ли мне тестировать всё?

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

Зачем писать тесты?

Говоря о том, зачем нужно тестирование, можно упомянуть следующие его преимущества:

  • Экономит деньги: без надлежащего тестирования количество времени и ресурсов, необходимых для поддержания продукта в долгосрочной перспективе, намного больше, чем инвестиции в тестирование, не говоря уже о том, что со временем что-то сломается.
  • Обеспечивает безопасность кода при командной работе: приложение часто создаётся командами. Разные люди изменяют один и тот же фрагмент кода с течением времени. Наличие тестов делают этот процесс более безопасным, поскольку никто не сломает что-то, не узнав об этом. Это также относится и к будущему, тесты обеспечивает безопасность кода, когда вы вернётесь через год или два для внесения изменений.
  • Помогает в создании лучшей архитектуры: когда часть приложения трудно тестировать, это обычно происходит из-за того, что оно тесно связано с другими частями или функциональность вашего приложения слишком сложна. При их тестировании вам нужно будет сделать их слабосвязанными, применить делегирование и паттерны проектирования, чтобы сделать приложение максимально простым и тестируемым.
  • Улучшает качество кода: ваш продукт менее подвержен сбоям в работе поскольку тесты помогает написать более надёжный и хороший код, который менее подвержен ошибкам.
  • Делает рефакторинг простым и безопасным: создание программного обеспечения — это итеративный процесс. Требования меняются с течением времени, следовательно, меняется и функциональность. Наличие хорошего тестового покрытия позволяет вам модифицировать определённый код, проверяя, что тесты все ещё успешно проходят. Если это не так, вы делаете правки в код таким образом, чтобы тесты прошли.

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

Типы тестов

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

У нас есть три основных типа тестов:

  • End-to-end-тесты (сокращённо — E2E) или сквозные тесты, как их называют при переводе: тестируют систему в целом, эмулируя реальную пользовательскую среду. В интернете это тесты, запущенные в браузере, имитирующие щелчки мышью и нажатия клавиш. В общем, набор таких тестов не должен быть большим, так как они дороги для обслуживания и могут легко устареть из-за тестирования системы в целом.
  • Интеграционные тесты: цель данных тестов состоит в том, чтобы убедиться, что несколько зависимых друг от друга модулей кода работают вместе, и их взаимодействие работает должным образом.
  • Модульные тесты: они тестируют определённую функциональность изолированно. Их легче всего создавать и обслуживать, поэтому большинство тестовых наборов — это модульные тесты.

Пирамида описывает баланс различных типов тестов. Нижняя часть — это самые быстрые, простые и самые изолированные тесты, а верхние — самые дорогие, самые медленные и охватывают всё приложение в целом.

Интеграционный слой можно даже разделить на ещё большее количество слоёв:

Хотя есть несколько разногласий по поводу количества типов тестов и их имён, наиболее распространёнными являются тесты компонентов и API. Это всего лишь особые типы интеграционных тестов. В частности, тесты компонентов — это тесты, которые мы пишем на стороне фронтенда при тестировании приложения на Vue.js.

Статический анализ

Тесты — не единственный инструмент для обеспечения качества кода. В наше время для JavaScript также есть инструменты статической типизации и утилиты для проверки кода (linters, далее — линтеры). Они выполняют статический анализ вашего кода для поиска несоответствий выбранному стилю кода, неправильного использования языка, ненадлежащей и плохой практики, ошибок в контракте данных и многое другое.

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

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

Давайте сравним типизированную версию и не типизированную версию функции sum :

// Нетипизированная функция
function sum(a, b) return a + b;
>
// Типизированная функция
function sum(a: number, b: number) : number return a + b;
>

Версия функции без указания типов не мешает нам вызывает её со строчными входными данными, в результате возвращая нам конкатенацию строк. Например, вызов sum(‘1’, ‘2’) возвращает ’12’ . Однако, если мы используем статическую типизацию, мы получаем ошибку, такую как Argument of type ‘»1″‘ is not assignable to parameter of type ‘number’ (Аргумент этого типа ‘»1″‘ не может быть присвоен параметру типа ‘number’), и эта ошибка типизации предотвращает нас во время компиляции совершить вызов функции, который вернёт неверный результат, поскольку мы ожидаем сложение чисел, а не конкатенацию строк.

Линтеры — это специальные программы, цель которых анализ и проверка различных аспектов кода во время компиляции. JavaScript не имеет преимуществ компилятора, поэтому подвержен ошибкам во время выполнения по сравнению с другими языками, где об ошибках будет сообщено на стадии компиляции. ESLint стал линтером де-факто в JavaScript, а TSLint — в сообществе TypeScript.

Линтер пытается заполнить пробел, предоставляя правила проверки ошибок синтаксиса, стиля кода и неправильного использования (проблемных паттернов). В результате он уменьшает количество ошибок и повышает качество и корректность вашего кода.

В качестве примера, если вы используете правило no-var в ESLint и напишите следующий код:

var greet = 'Эй, Китти';

Вы получите ошибку Unexpected var, используйте let или const вместо (no-var) (Неожиданный var, используйте let или const вместо него (no-var)).

В пирамиде статический анализ ещё точнее определён и проверяется быстрее (почти в режиме реального времени), чем модульные тесты, что делает его основой пирамиды:

software-testing-11

В этом разделе мы рассмотрим самые базовые понятия и принципы, которые используются в процессе тестирования. Мы узнаем, что же, собственно, собой представляет тестирование, зачем оно нужно и кто им занимается. Рассмотрим цели, принципы и основные этапы тестирования. Почувствуем, каким должен быть психологический настрой настоящего тестировщика и развенчаем напоследок несколько мифов о тестировании. Уверены, Вам будет интересно.
Начнем с того, что же такое «тестирование». Для начала, давайте абстрагируемся от сухих академических определений и посмотрим на это понятие с точки зрения повседневного использования.
Когда мы что-то тестируем, то задаем себе простой вопрос: «работает ли это так, как мы ожидаем?» или, другими словами: соответствует ли реальное поведение объекта тестирования нашим ожиданиям? Если ответ положительный – замечательно, если нет, – мы обмануты в своих ожиданиях, а значит что-то нужно исправлять.
Тестирование необходимо потому, что все мы совершаем ошибки. Некоторые из них могут быть незначительными, в то время как другие – иметь самые разрушительные последствия. Все, что производится человеком, может содержать ошибки (так уж мы, люди, устроены). Именно поэтому любой продукт нуждается в проверке – тестировании, прежде чем его можно будет эффективно и безопасно использовать.
То же самое справедливо и для программного обеспечения (англ. Software).
Программное обеспечение (Software) – компьютерные программы, функции, а также сопровождающая их документация и данные, имеющие отношение к эксплуатации компьютерной системы.
Компьютерные технологии все глубже проникают в нашу повседневную жизнь. Программное обеспечение управляет работой множества окружающих нас вещей – от мобильных телефонов и компьютеров до стиральных машин и кредитных карт. В любом случае, все мы сталкивались с теми или иными ошибками в программах: текстовый редактор, намертво зависший при работе над дипломным проектом, банкомат, «съевший» карточку или просто сайт, который никак не загрузится – все это отнюдь не облегчает нам жизнь.
Однако не все ошибки одинаково опасны – для разных программных систем уровни риска могут отличаться.
Риск (risk):
– фактор, который может привести к негативным последствиям в будущем; как правило, выражается через вероятность наступления таких последствий и их влияние на систему.
– то, что еще не произошло, и может вообще не произойти; потенциальная проблема.
Кроме того, уровень риска будет зависеть от вероятности наступления негативных последствий.
К примеру, одна и та же незначительная ошибка, скажем опечатка, может иметь совершенно разные уровни риска для разных программ:
– опечатка в описании интересов на персональной страничке в социальной сети вряд ли будет иметь существенные последствия, разве что вызовет улыбку у Ваших друзей;
– такая же простая опечатка, допущенная в описании деятельности крупной компании, размещенном на ее сайте, уже опасна, так как косвенно свидетельствует о непрофессионализме ее сотрудников;
– опечатка в коде программы, которая подсчитывает уровни облучения при работе рентгеновского аппарата (например, 100 вместо 10) может иметь самые печальные последствия – вред, нанесенный здоровью и безопасности людей, выльется в потерю доверия к компании и судебные иски со многими нулями.

  • Выбери курс для обучения
    • Тестирование
      • Базовый модуль тестирования
      • Тестирование ПО
      • Тестирование WEB-сервисов
      • Тестирование мобильных приложений
      • Тестирование нагрузки с JMeter
      • Расширенный модуль автоматизации тестирования
      • Автоматизация тестирования с Selenium WebDriver (Python)
      • Автоматизация тестирования с Selenium WebDriver (Java)
      • Автоматизация тестирования с Selenium WebDriver (C#)
      • Автоматизация тестирования на JavaScript
      • Java для автоматизаторов
      • Fullstack Web Developer
      • Java
      • Python
      • JavaScript
      • HTML5 И CSS3
      • Полный стек разработки на фреймворке Laravel
      • Разработка CMS на основе PHP
      • Git для автоматизаторов
      • Практический SQL
      • Основы Unix и сети
      • WEB-серверы и WEB-сервисы
      • Создание проекта автоматизации и написания UI тестов
      • Составление комбинированных тестов UI и API. Написание BDD тестов
      • IT Project Manager
      • HR-менеджер в ИТ-компании
      • Как правильно составить резюме и пройти собеседование
      • Подготовка к сертификации ISTQB Foundation Level на основе Syllabus Version 2018

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

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