Explorar o código

Ковалев Артем

u21koval_art hai 1 ano
pai
achega
89f827ee79

+ 108 - 0
Лекции/Qq_инженер/QA_engine_Kovalev_art.md

@@ -0,0 +1,108 @@
+## QA-инженер: кто это, чем он занимается и как им стать
+**Кто такой QA-инженер**
+**QA engineer** (от английского quality assurance — обеспечение качества) — это инженер по тестированию программного обеспечения, проверяющий его качество на всех этапах разработки: от сбора требований и согласования архитектуры проекта до контроля работоспособности перед релизом для пользователей. Это отличает его от тестировщика, который подключается к работе только на этапе готового продукта.
+
+Требования к QA-инженерам различаются в отдельных компаниях, поэтому единый перечень для специальности сформулировать сложно. Например, на HeadHunter можно найти вакансию с тестированием дронов на полигоне. Такой инженер должен не только владеть обычными навыками, но и участвовать в испытательных полётах.
+![](https://skillbox.ru/upload/setka_images/13485318122023_accf102caaa970ce65d217b9ae9a8e9a57caa67c.jpg)
+**QA-инженеры**, как и тестировщики, делятся на мануальщиков и автоматизаторов. Первые проверяют документацию, код, интерфейс и другие части ПО вручную, прокликивая кнопки и вычитывая текст на соответствие требованиям. QA-автоматизаторы используют для этого разные инструменты — библиотеки и фреймворки, например Pytest для Python.
+## QA-инженеру
+Требования в разных вакансиях различаются, но есть базовый набор навыков, который встречается в большинстве из них.
+
+**Основы тестирования: виды и методы**
+QA-инженеру не обойтись без теоретической базы. Необходимо знать, какие существуют подходы и виды тестирования и когда каждый из них стоит использовать.
+
+Специалист должен знать, как составляется тестовая документация, чек-листы и тест-кейсы. Это основа мануального и автоматизированного тестирования.
+
+**Языки программирования**
+В зависимости от вида тестируемого ПО инженер должен знать на базовом уровне языки программирования, на которых оно создано. Например, если он работает с мобильными приложениями, придётся разобраться со Swift для iOS или Kotlin для Android.
+
+При работе с автоматизированным тестированием используется JavaScript, Python или Java и их специализированные фреймворки: Cypress для JavaScript, Pytest для Python и JUnit для Java.
+
+**Инструменты тестирования: библиотеки и фреймворки**
+В разных компаниях используют свой стек технологий для тестирования. Но можно выделить наиболее популярные инструменты:
+
+Postman, Insomnia и SoapUI для тестирования API;
+Cypress, Katalon Studio и Selenium для работы с сайтами и веб-приложениями;
+Espresso и XCTest для тестирования мобильных приложений.
+Знать их все необязательно. Достаточно одного инструмента из каждой группы.
+
+**Базы данных и SQL**
+Веб-приложения используют для хранения информации базы данных. Чтобы оценивать их работоспособность и взаимодействие с тестируемым ПО, потребуется знать язык запросов SQL и одну из основных баз данных на его основе: MySQL, PostgreSQL или другой.
+
+**Системы контроля версий**
+Система контроля версий Git используется для управления версиями исходного кода программ. Разработчики, QA-инженеры и другие специалисты могут одновременно работать над одним проектом без проблем с синхронизацией разных версий кода.
+**Системы баг-трекинга**
+Для совместной работы используют системы управления проектами, например Jira или YouTrack, и ПО для баг-трекинга, то есть учёта выявленных дефектов: Kiwi TCMS, Qase TCMS и другие. Они упрощают фиксацию ошибок и постановку задач для их исправления.
+## Чем занимается QA-инженер
+**Главная задача QA-инженера**— подготовить план тестирования программного обеспечения и провести его самостоятельно или с помощью команды. Если проанализировать вакансии, то можно составить список часто встречаемых рабочих задач.
+
+**Анализ требований к продукту и технической документации**. QA-инженер проверяет, соответствует ли техническая документация функциональным и нефункциональным требованиям к продукту.
+
+Например, по мнению владельца продукта, расчётная посещаемость приложения ожидается на уровне 10 000 пользователей в день, но в документации указано значение 1000. Если не исправить ошибку, то система не справится с количеством запросов и приложение не будет работать.
+
+**Разработка плана тестирования и тест-кейсов**. Тест-план — это документ, который описывает весь процесс тестирования: цели, сроки проведения, участников и их обязанности. Его составляет сеньор QA-инженер или тимлид. Тест-кейсы — это пошаговое описание каждой задачи, указанной в тест-плане. Благодаря этому их может выполнить джуниор или мидл.
+
+**Проведение тестирования**. После того как тест-кейс написан, его необходимо выполнить — вручную или с помощью инструментов автоматизации. По завершении формируется список багов, которые передаются разработчикам для исправления.
+
+**Определение метрик качества программного обеспечения и контроль за их значениями**. Например, один из важных показателей качества ПО — степень покрытия тестами. Целевое значение и план по его достижению определяет сеньор QA-инженер или руководитель отдела тестирования.
+## Чем QA-инженер отличается от тестировщика
+Специалистов по quality assurance и тестировщиков часто путают. В некоторых компаниях оба названия используют для обозначения одной и той же специальности. Но различий между ними много.
+
+Главное из них в том, что QA-инженер участвует в разработке программного обеспечения на всех этапах, начиная с момента создания документации с описанием требований к нему, а тестировщик подключается на финальном этапе, когда продукт уже готов. Но есть и другие различия по списку задач.
+![](https://i.imgur.com/tmHRR1O.png)
+## Методы тестирования
+Существует несколько вариантов классификации методов тестирования: по используемым инструментам, по оцениваемым требованиям и по подходу к тест-кейсам. Поговорим о каждом из них.
+
+**По используемым инструментам**
+
+**Тестирование бывает ручным и автоматизированным**. При ручном тестировании специалист работает с интерфейсом приложения или сайта: нажимает на кнопки, заполняет поля в формах и так далее. Его задача проверить, возникают ли при этом какие-либо ошибки.
+
+Например, приложение при регистрации требует от пользователя ввести номер мобильного телефона. QA-инженеру необходимо удостовериться, что пользователь может ввести только его и только в требуемом формате, а не электронную почту или случайный набор символов.
+
+**Автоматизированное тестирование** проводится специализированными программами и инструментами для автоматизации процесса. Например, для проверки фильтрации товаров по производителю в интернет-магазине QA-инженер может написать простой алгоритм, который сделает это сам. Проверять все возможные комбинации вручную просто долго.
+
+**По оцениваемым требованиям**
+
+Тестирование может быть функциональным и нефункциональным.
+
+К первому относится проверка тех задач ПО, которые оно должно непосредственно решать. Например, от банковского приложения мы ожидаем, что оно может переводить деньги со счёта на счёт, отображать баланс и присылать уведомления пользователю о его изменениях. При функциональном тестировании мы будем проверять именно эти действия.
+
+Нефункциональное тестирование показывает, насколько удобно приложение само по себе, его производительность на разных устройствах, надёжность и так далее. В примере с банковским приложением это будут проверки работоспособности двухфакторной авторизации или удобство расположения элементов навигации для пользователей.
+
+**По «прозрачности» тест-кейсов**
+
+Существует три подхода к тестированию программного обеспечения: тестирование белого, серого и чёрного ящиков. Они различаются между собой доступом QA-инженера к исходному коду.
+
+**Чёрный ящик**. Специалист не может проанализировать программный код тестируемого продукта. Поэтому он оценивает только его работоспособность. Например, если тестируется сайт онлайн-магазина, то на уровне интерфейса проверяется, как работает поиск товаров по сайту, добавляются ли выбранные позиции в корзину покупок, можно ли применить промокод на скидку и так далее.
+
+**Белый ящик**. QA-инженер знает программный код ПО и использует его для поиска ошибок. В примере с интернет-магазином при выставлении количества заказываемых товаров, специалист проверяет, как эта функция на уровне кода обрабатывает разные числа, в том числе отрицательные, дробные и другие.
+
+**Серый ящик**. QA-инженер не имеет полного доступа к программному коду или вынужден оценивать его работоспособность со стороны интерфейса. Например, он знает, что для получения списка товаров при фильтрации используется API, но правильность его работы проверяет, сверяя полученный при фильтрации список товаров вручную, а не оценивая исходный код для API-подключения.
+## Нужны ли QA-инженеры в IT-компаниях
+В середине декабря 2023 года на HeadHunter было больше 5900 вакансий:
+![](https://skillbox.ru/upload/setka_images/13591718122023_08fda0244b5397e030ee401fd2bea5b24f78a72b.jpg)
+Больше всего их в Москве, на втором месте — Санкт-Петербург, а затем идёт Татарстан и Новосибирская область. Нужны специалисты разного уровня — от джуниоров до тимлидов.
+## Карьера QA-инженера
+Для QA-инженеров, как и других айтишников, существует система грейдов, классифицирующая их по опыту, навыкам и уровню зарплаты. Но система условная, поэтому требования в конкретных компаниях могут различаться.
+
+**Junior**. Опыт работы до года. Джуниор выполняет тест-кейсы, которые для него составили мидл или сеньор QA-инженеры. От таких специалистов требуют знания теории тестирования и базового владения основным ПО и инструментами, используемыми в работе.
+
+**Middle**. Опыт от года до трёх лет. Автономная рабочая единица — может самостоятельно писать тест-кейсы исходя из плана тестирования и проводить их, или ставить задачи джуниор-специалистам.
+
+Мидл глубоко знает ПО и инструменты, используемые в работе, умеет выбрать из них наиболее подходящие для конкретного тест-кейса. Как правило, специалисты этого уровня уверенно владеют автоматизированным тестированием.
+
+**Senior**. Опыт от трёх лет. Сеньор пишет план тестирования ПО, описывает сложные тест-кейсы и принимает результаты работы джуниоров и мидлов. Специалист разрабатывает и описывает метрики качества и следит за их достижением.
+
+Сеньор QA-инженер может стать тимлидом команды тестирования или даже CTO в компании. Некоторые специалисты переходят в бэкенд-разработку, так как обычно уверенно владеют одним из языков программирования для бэкенда — Python или Java — и SQL.
+Сколько зарабатывают QA-инженеры
+По данным «Хабр Карьеры» за первое полугодие 2023 года, медианная зарплата QA-инженера в России — 125 000 рублей. Важно, в статистике учтены и тестировщики ПО.
+![](https://skillbox.ru/upload/setka_images/14004718122023_6896a8696b8038f4fc8989ab005e4fccc3b90047.jpg)
+Примерные диапазоны зарплат для разных грейдов выглядят так:
+
+● **Джуны** — от 25 000 до 80 000 рублей.
+● **Мидлы**— от 90 000 до 180 000 рублей.
+● **Сеньоры** — от 180 000 до 500 000 рублей.
+![](https://skillbox.ru/upload/setka_images/14012418122023_0ed1686442ac630326a48ddcef43684fa02b904b.jpg)
+Уровень зарплаты зависит не только от грейда, но и от владения автоматизированным тестированием. Как правило, у автоматизаторов зарплата больше на 20–30%
+## Литература
+https://skillbox.ru/media/code/qainzhener-kto-eto-chem-on-zanimaetsya-i-kak-im-stat/

+ 64 - 0
Лекции/Qq_инженер/Test_Application_Kovalev_Art.md

@@ -0,0 +1,64 @@
+## Тестирование мобильных приложений: зачем оно нужно и как проводится
+**Что такое мобильное тестирование**
+С**мысл работы тестировщика** — убедиться, что программа ведёт себя как задумано: все функции работают правильно, шрифты и кнопки корректно отображаются на разных экранах, а внутренние процессы не подъедают память и батарею устройства.
+
+Сложность тестирования именно мобильных приложений в том, что разнообразных гаджетов в мире — миллионы. У каждого устройства — свой производитель, своя версия прошивки, свои диагональ и разрешение экрана. И если приложение отлично работает на одном устройстве, не факт, что всё будет в порядке и на других.
+
+Мало того, эти устройства часто оказываются в непредсказуемых условиях. Например, пользователь может сменить часовой пояс или дату, спуститься в метро, где слабый сигнал, включить авиарежим, подключиться через VPN — что угодно. И это мы ещё не говорим про целый зоопарк подключаемых аксессуаров, сим-карт и bluetooth-устройств, с которыми приложения тоже должны уметь работать.
+Все эти ситуации, как стандартные, так и совсем нештатные, должен учитывать мобильный тестировщик. В этой работе всё подчинено закону Мёрфи — если есть хоть мизерный шанс, что где-то что-то пойдёт не так, то он обязательно сработает.
+
+Поэтому у инженеров по качеству (так иногда называют представителей этой профессии) есть целый мультитул техник и инструментов, которые позволяют проверить все важные функции «на берегу».
+Виды мобильных приложений
+Все мобильные приложения можно разделить на четыре основные группы:
+
+**Нативные** — когда код пишется отдельно под каждую платформу на «родном» языке программирования. Например, для Android это Kotlin, а для iOS — Swift. Отличить такое приложение просто: оно устанавливается прямо на устройство, имеет свою иконку на рабочем столе и открывается даже без интернета.
+![](https://skillbox.ru/upload/setka_images/09522201022024_accf102caaa970ce65d217b9ae9a8e9a57caa67c.jpg)
+**Кросс-платформенные** — когда код пишется один раз, а потом запускается на разных устройствах. Такие приложения построены обычно не по гайдлайнам своих систем, а потому могут выглядеть чужеродно. Зато можно сэкономить время и деньги, доверив разработку сразу нескольких версий одной команде.
+![](https://skillbox.ru/upload/setka_images/09532601022024_e62f21341d7bd9864b2d60a5248407a508e44b8a.jpg)
+**Веб-приложения** — технически это не совсем мобильные приложения, а скорее сайты, адаптированные под мобильные устройства. Например, сайт банка «Тинькофф» — это веб-приложение. Можно даже вывести его иконку на рабочий стол смартфона и запускать как обычное нативное приложение.
+![](https://skillbox.ru/upload/setka_images/09535201022024_6896a8696b8038f4fc8989ab005e4fccc3b90047.jpg)
+**Гибридные** — это когда веб-страница или сайт открывается внутри мобильного приложения. Работает это обычно на базе технологии WebView: есть окно браузера, которое загружает контент, и есть несколько нативных элементов интерфейса, например кнопки навигации, анимация загрузки и другие.
+![](https://skillbox.ru/upload/setka_images/09543101022024_c7c2d6650fe8dd3125b1541cb39af56649bd56fa.jpg)
+У каждого типа приложений — свои сложности. Например, в случае с нативными тестировщику нужно хорошо разбираться в тонкостях платформы, а приложения WebView приходится проверять на множестве разных устройств. Но есть несколько инструментов и лайфхаков, которые помогут несколько упростить этот процесс.
+## Что проверяют мобильные тестировщики
+**Работу на популярных устройствах**. Протестировать приложение на всех смартфонах и планшетах невозможно. Поэтому на старте собирается статистика о том, на каких устройствах пользователи будут чаще всего его использовать. На самых популярных моделях и проводится тестирование.
+
+Сами устройства при этом можно не покупать. Есть множество сервисов, которые позволяют эмулировать работу разных девайсов — например, **browserstack.com**.
+![](https://skillbox.ru/upload/setka_images/09551901022024_0ed1686442ac630326a48ddcef43684fa02b904b.jpg)
+**Работу на самых старых и самых новых версиях ОС и браузеров**. Если приложение не поддерживает старую версию системы или браузера, разработчик может создать уведомление с просьбой обновиться. Тестирование же на новых версиях помогает проверить, как приложение взаимодействует с самыми свежими фишками системы.
+
+**Отображение контента**. Мобильные приложения могут запускаться на множестве устройств: от умных часов до планшетов. Но разнообразие экранов — это ещё полбеды. Важно также учитывать, чтобы элементы интерфейса нормально отображались при разном разрешении и ориентации экрана. Например, чтобы графические элементы не «сплющивались» при повороте устройства.
+
+**Интерактивность и жесты**. Пользователи взаимодействуют с мобильными приложениями в основном через жесты: свайпы, касания и двойные касания. Тестировщики проверяют, как работают все эти действия.
+
+**Производительность**. Мы ценим мобильные приложения за скорость: можно на лету проверить почту, ответить другу, заказать суши. Тестировщики следят за тем, чтобы это было действительно быстро — с помощью различных профайлеров замеряют скорость работы приложения и ищут узкие места в производительности.
+![](https://skillbox.ru/upload/setka_images/09555201022024_b30ff17d14b759c017197570526ff51b33cc83c5.jpg)
+Работу при разном уровне сигнала. Кто-то пользуется приложением в офисе со стабильным Wi-Fi, кто-то — в метро с одним делением сигнала. Кто-то подключается напрямую, кто-то — через прокси и VPN. Тестировщики проверяют, как будет вести себя приложение при разном качестве подключения или если оно вдруг резко оборвётся.
+**Работу при разном уровне сигнала**. Кто-то пользуется приложением в офисе со стабильным Wi-Fi, кто-то — в метро с одним делением сигнала. Кто-то подключается напрямую, кто-то — через прокси и VPN. Тестировщики проверяют, как будет вести себя приложение при разном качестве подключения или если оно вдруг резко оборвётся.
+
+**Удобство UX/UI**. Для каждой мобильной системы существуют свои дизайнерские гайдлайны, например для Android это Google Material Design, а для iOS — Human Interface Guidelines. Гайдлайны помогают разработчику расположить элементы интерфейса так, чтобы человек мог работать с ними бесшовно, не задумываясь над каждым действием, поэтому тестировщику важно проверять приложение ещё и по ним.
+
+**Доступность обновлений**. Тестировщики проверяют, соответствует ли приложение требованиям магазинов приложений (App Store, Google Play). Обновления приложений проверяются на совместимость с новыми версиями ОС и браузеров.
+## Методы тестирования мобильных приложений
+**● Ручное тестирование**. Тестировщики вручную пишут и выполняют тест-кейсы и сценарии, имитирующие действия пользователя, чтобы проверить функциональность, интерфейс и другие аспекты приложения. Ручное тестирование обычно применяется на начальных стадиях разработки.
+**● Автоматическое тестирование**. Чем сложнее продукт, тем сложнее и дольше его тестировать вручную. Исключить влияние человеческого фактора и ускорить процесс помогают автотесты. Среди популярных инструментов: фреймворк Appium, а также тестировщики интерфейсов — Espresso и XCUITest.
+**● Проверка производительности**. Тестируется производительность приложения при различной нагрузке и в разных условиях: при большом количестве пользователей, медленных сетях, ограниченных ресурсах устройства. Помочь в этом могут различные профайлеры и бенчмарки, встроенные в IDE, например The Android Profiler.
+**● Тестирование безопасности** — есть ли в приложении уязвимости, утечки памяти, возможность несанкционированного доступа. Популярный кейс — посмотреть, не передаются ли пользовательские данные в открытом виде.
+**● Тестирование UX/UI** — насколько удобно расположены элементы интерфейса и навигации, а также как приложение ведёт себя в необычных условиях: при смене размера шрифта, повороте экрана или сворачивании приложения.
+**● Тестирование настроек локализации и региональных различий** — насколько корректно будут отображаться и обрабатываться локальные настройки: формат отображения дат, времени, валюты, чисел, язык интерфейса.
+**● Тестирование совместимости с другими приложениями** — как приложение взаимодействует с другими популярными приложениями и сервисами.
+## Инструменты для тестирования мобильных приложений
+Есть множество инструментов для мобильного тестирования, которые помогают разработчикам и тестировщикам обнаруживать и исправлять ошибки. Рассмотрим некоторые из них подробно.
+
+**Эмуляторы и симуляторы**. Программы, которые позволяют разных устройств. С их помощью тестировщики могут проверить, как приложение ведёт себя на планшетах и смартфонах разных моделей, с разными версиями ОС, размерами экрана и другими параметрами без использования самих устройств.
+
+❓️ В чём разница между эмулятором и симулятором? Первые имитируют и программную, и аппаратную часть устройства, а вторые — только программную. Поэтому, если вам нужно протестировать работу приложения с камерой, микрофоном, динамиком и другим железом, лучше обратиться к эмулятору.
+![](https://skillbox.ru/upload/setka_images/09590301022024_fc9956ee2f4201e204a5532c68850c6715ed24e0.jpg)
+**Инструменты разработчика DevTools**. Набор инструментов, встроенных в браузеры. С их помощью можно проверить мобильное веб-приложение: как оно смотрится на разных экранах, насколько быстро загружается и сколько ресурсов потребляет. А бонусом даже получить подробный отчёт с советами по оптимизации страницы.
+![](https://skillbox.ru/upload/setka_images/10000001022024_6caf85fa09e0642959e62c753d9a2f18236eb1da.jpg)
+**Снифферы**. Анализируют трафик между мобильным устройством и сервером. Во время работы мобильное приложение постоянно обменивается запросами с сервером. Сниффер позволяет этот трафик перехватить и изучить. А ещё с их помощью можно искусственно замедлить скорость интернета, чтобы посмотреть, выдаст ли приложение запланированное сообщение об ошибке.
+## Литература
+**https://skillbox.ru/media/code/testirovanie-mobilnykh-prilozheniy-zachem-ono-nuzhno-i-kak-provoditsya/**
+
+
+