瀏覽代碼

Merge branch 'master' of http://213.155.192.79:3001/ypv/ISRPO

ypv 1 年之前
父節點
當前提交
3b83f13bca

+ 65 - 0
Лекции/Captcha/CAPTCHA_Оболенский.md

@@ -0,0 +1,65 @@
+# CAPTCHA
+CAPTCHA (капча) — это картинка с искаженным текстом или небольшое задание на сайте, которое проверяет, что вы не робот. Капча генерируется автоматически — так, чтобы пройти тест не смог бот, но смог человек.
+
+Название — аббревиатура от английского предложения Completely Automated Public Turing Test To Tell Computers and Humans Apart. На русский его примерно можно перевести как «полностью автоматический тест Тьюринга для отделения компьютеров от людей». Это название очень длинное, поэтому его и сократили до «капчи».
+
+Тестом Тьюринга называют испытание, которое может пройти только умеющее мыслить существо, — его придумал английский математик Алан Тьюринг. Мы подробнее расскажем о тесте ниже.
+## Зачем нужна капча
+Капча нужна, чтобы определить, кто пытается совершить операцию — человек или робот. Без ее прохождения нельзя выполнить то или иное действие: войти на сайт, авторизоваться, оставить комментарий. Задание обычно довольно простое для человека и практически невыполнимое для робота.
+
+Зачем вообще отсеивать ботов? Есть несколько причин:
+- злоумышленники. Боты могут использоваться для разных видов атак на сайты. В первую очередь это DDoS-атаки — автоматизированные массовые запросы, которые перегружают сервер. Еще есть брутфорс — подбор логина и пароля с помощью робота, пробующего разные варианты практически бесконечно;
+- спам. Частый вариант использования бота — отправка «мусорных» рекламных сообщений, которые мешают полезному контенту;
+- махинации. Например, интернет-магазины иногда проводят ограниченные по времени акции вида «Успей купить», и роботы могут мониторить такие предложения, скупая весь акционный товар за несколько секунд.
+
+Есть и роботы, которые не наносят вреда, например поисковые. От них защищаться капчей не нужно — потенциально опасных действий они не совершают.
+
+## Кто пользуется капчей
+Капчу устанавливают владельцы сайтов или специалисты, которые занимаются их обслуживанием. Нужна она или нет — зависит от целей и задач ресурса, а еще от возможностей его владельцев.
+
+Например:
+- капчу устанавливают для публикации комментариев на ресурсах, где живо общаются пользователи;
+- капча может появляться при авторизации или попытке купить товар, чтобы убедиться, что пользователя не взломали;
+- некоторые сервисы предлагают ввести капчу, если активность пользователя кажется им подозрительной. Иногда они срабатывают по ошибке, например из-за VPN или опечатки при вводе пароля.
+ 
+Коммерческие сайты могут устанавливать капчу, чтобы защититься от парсинга — считывания данных со страниц с помощью робота. Но это обычно бесполезно, к тому же парсинг редко наносит прямой вред — только косвенный, так как помогает конкурентам собрать информацию.
+
+## Как может выглядеть капча
+Распространенный вариант — картинка, на которой изображено сочетание из букв, слов или цифр. Чтобы пройти тест, нужно разобрать написанное и ввести результат в специальное поле. Но это не единственный тип. Кроме него, бывают:
+- простые вопросы, на которые может однозначно ответить человек, например, «Как звали Пушкина?»;
+- математические примеры, которые нужно решить и ввести результат;
+- мини-игры вида «Кликните на красную кнопку» или «Соберите пазл»;
+- выбор правильных вариантов из списка — обычно это задания вида «Укажите все картинки со светофорами».
+
+![captcha](https://market-sms.ru/wp-content/uploads/6/b/a/6ba767d8b953c64178a073261425b405.png)
+
+## Идея капчи: тест Тьюринга
+Разгадывание капчи — это задача, которую легко выполнить человеку и невозможно решить примитивному роботу. Идея возникла несколько десятков лет назад как реализация теста Тьюринга.
+
+Алан Тьюринг придумал эмпирический тест, задача которого — определить, может ли существо мыслить. Классический тест устроен так: у человека есть два невидимых собеседника — машина и другой человек. Если тот не может правильно определить, который из них робот, значит, машина способна к мышлению.
+
+Позже было создано намного больше вариаций теста. Капча — один из них, но проверкой в ней занимается не абстрактный человек, а алгоритм.
+
+## Как устроена капча
+Капча — это примитивный тест Тьюринга, автоматизированный и публичный. В ее основе лежит алгоритм, который показывает задание посетителю, а потом считывает отправленный ответ.
+
+Вопросы и задания реализованы по-разному. Иногда их придумывает сам человек — так чаще всего создают варианты с загадками, ответами на вопросы и математическими примерами. Но большинство задач капчи генерируются автоматически. Изображение создается на основе сгенерированного ответа, автоматически искажается, на него добавляются помехи — все это способен сделать компьютер.
+
+Пока капча не пройдена, алгоритм не дает посетителю выполнить то или иное действие. Обычно он сообщает о неправильном ответе и снова дает пользователю задание. Когда оно выполнено, доступ открывается.
+
+Некоторые современные варианты капчи — умные: они не включаются, если пользователь ведет себя естественно, и запускаются только при подозрительной активности. Например, посетитель отправляет слишком много сообщений, чересчур активно скачивает контент, зашел через VPN или анонимный режим.
+
+## Преимущества капчи
+- Это просто. Установить капчу на сайт — довольно быстро и несложно: в интернете десятки плагинов, которые предлагают разные виды заданий. При этом некоторые из них довольно трудно обойти роботам.
+- Это удобно. Обычно сервисы капчи интегрируются в CMS, и управлять ими владелец сайта может прямо из административной панели.
+- Это дешево. Некоторые такие расширения для сайтов — бесплатные, другие стоят недорого и точно обходятся дешевле иных мер защиты. К тому же разработчик всегда может создать собственный алгоритм: статьи о том, как они устроены, есть в сети в открытом доступе.
+- Это эффективно. Конечно, существуют продвинутые роботы, которые могут обходить даже сложную капчу, но от большинства простейших ботов она защитит. Особенно если выбрать вариант с хорошим уровнем защиты.
+
+## Недостатки капчи
+- Неудобство для пользователя. Пользователей может раздражать капча, особенно если она появляется слишком часто. Для информационных сайтов это не так критично, а вот для коммерческих важно: человек может уйти и не сделать заказ, который почти оформил. В результате компания может потерять клиента. К тому же падают поведенческие факторы: люди не выполняют какие-то действия, потому что не хотят тратить время на капчу.
+- Проблемы с доступностью. Отдельная категория пользователей может иметь особенности здоровья, мешающие распознать капчу. Сюда можно отнести плохое зрение, различные неврологические нарушения и иные состояния. Если вы создаете ресурс с расчетом в том числе на таких пользователей, вам стоит подумать об альтернативных вариантах.
+- Влияние на скорость. Чтобы подгрузить страницу с капчей, нужно больше времени, чем без нее. Поэтому страницы, где есть проверка, могут загружаться медленнее, а скорость загрузки — критично важный параметр. Он влияет и на поведение пользователей, и на отношение со стороны поисковых систем.
+
+## Литература
+
+https://blog.skillfactory.ru/glossary/captcha/

+ 48 - 0
Лекции/DotNet/DotNET_Оболенский.md

@@ -0,0 +1,48 @@
+# .NET
+.NET — это платформа для программирования, разработанная компанией Microsoft. Изначально создавалась, чтобы писать программы под операционную систему Windows. Среда работает с несколькими языками программирования, умеет запускать и исполнять код, написанный на них.
+
+![DotNet](https://blog.skillfactory.ru/wp-content/uploads/2023/03/microsoft_.net_logo.svg_.png)
+Разработчик на .NET может одновременно работать с несколькими языками программирования. Среди них — C#, F#, Visual Basic и Visual C++, а также более редкие языки типа J#. Эти языки разные, но благодаря возможностям .NET разработчик может использовать для них единое пространство имен, один и тот же набор технологий, библиотек и API.
+
+По-русски название читается как «дотнет» («точка нет»). Еще можно встретить название .NET Framework — это одна из реализаций среды. На ней была основана .NET Core, которая сейчас называется просто .NET. Разница в том, что .NET Framework работает только под Windows, имеет другой набор языков и иную структуру. Она масштабная, а .NET — модульная. Но и то, и другое относится к семейству Microsoft .NET — в статье мы говорим о нем в целом.
+
+Платформу иногда называют фреймворком. Это не ошибка, хотя фактически .NET шире, чем обычный фреймворк.
+
+## Для чего нужен .NET
+Современная разработка может проходить на нескольких языках одновременно. Если не использовать общую платформу, то для каждого из этих языков понадобится устанавливать свой компилятор, скачивать библиотеки и другие инструменты. .NET решает эту проблему. Это единая среда, в которой можно:
+- писать на нескольких языках;
+- не дублировать написанное;
+- не скачивать одни и те же библиотеки для каждого языка;
+- не множить технологии;
+- быстро и удобно переводить старый код на новые технологии.
+
+Последнее возможно благодаря тому, что .NET поддерживает много разных языков. В нем есть инструменты, чтобы переписать старый код под новые стандарты.
+
+## Где используют .NET
+.NET изначально создавался для Windows, поэтому в разработке под Linux или macOS он почти не используется. Сложно его встретить и в мобильной разработке под iOS или Android, хотя возможность написать приложение есть. 
+У платформы несколько актуальных сфер применения.
+
+- Десктопные программы. Речь идет о программах для Windows, причем и для новых, и для старых версий системы. .NET поддерживает решения Microsoft и легко с ними интегрируется, так что разработку вести довольно удобно. Из крупных программ на .NET написана, например, Microsoft Power BI — ПО для аналитиков. А из небольших, но известных всем — «Блокнот» и «Калькулятор» Windows.
+
+- Игры. В .NET входит язык программирования C#, который часто используют для создания видеоигр. Например, с C# работает популярный игровой движок Unity, на котором написано огромное количество игр: двумерных и трехмерных, инди и высокобюджетных. Так что в теории .NET можно использовать и для геймдева, но понадобится много дополнительных знаний.
+
+- Бизнес-решения. Так называемая enterprise-разработка — это корпоративные программы для больших компаний. Это обычно масштабные, сложные цифровые решения, например системы CRM. .NET используется в этой сфере. Для энтерпрайза это хороший инструмент, потому что позволяет комбинировать разные языки и технологии. Ведь такая масштабная разработка затрагивает и веб, и создание десктопных приложений, и мобильные устройства.
+
+## Особенности .NET
+- Быстрый порог входа, хотя и придется писать на нескольких языках.
+- Понятный и читаемый код, так как все языки в .NET — высокоуровневые, с ясным человеку синтаксисом.
+- Автоматическая сборка мусора.
+- Полная совместимость с системами и технологиями от Microsoft, но возможные проблемы при работе с другими системами (хотя в целом .NET кроссплатформенна).
+- Разнообразное комьюнити и обилие сфер применения.
+- Динамическая компиляция, благодаря которой код легче переписывать и отлаживать.
+
+## Стоит ли учить .NET
+Технология популярна и применяется в разных отраслях разработки. Так что программист, пишущий под .NET, без работы не останется. Порог входа в эту профессию не самый низкий, но ниже, чем во многих других языках, таких как Java.
+
+Еще один возможный плюс решения изучать .NET — несколько языков программирования, каждый из которых можно использовать для разных целей. Модульный .NET поддерживает C#, F# и Visual Basic; другие языки нужно доустанавливать.
+
+Поэтому .NET — хороший выбор, если вас интересует программирование под Windows или вы хотите попробовать себя в разных отраслях разработки.
+
+## Литература
+
+https://blog.skillfactory.ru/glossary/net/

+ 64 - 0
Лекции/OracleDateBase/OracleDB_Оболенский.md

@@ -0,0 +1,64 @@
+# Oracle Database
+
+ Oracle Database — это объектно-реляционная система управления базами данных (СУБД) от компании Oracle. Она используется для создания структуры новой базы, ее наполнения, редактирования содержимого и отображения информации.
+![Oracle](https://blog.skillfactory.ru/wp-content/uploads/2023/02/oracle-1.png)
+Продукт Oracle Database часто называют просто Oracle, по названию компании. Еще одно популярное сокращение — Oracle DB, от английского слова database — «база данных». Oracle RDBMS (Relational Database Management System) — третье название системы.
+
+## Что такое базы данных
+База данных — это организованная структура для хранения, изменения информации и взаимодействия с ней.
+Они бывают двух видов:
+- нереляционные. (Такие БД имеют специфическую структуру: например, данные хранятся в формате ключ-значение или в виде дерева);
+- реляционные. (В таких БД данные хранятся в виде связанных таблиц.)
+
+Каждая таблица обычно содержит данные, относящиеся к похожим объектам. У каждой таблицы есть название: оно соотносится с тем, какая информация хранится в таблице.)
+Таблицы состоят из строк и столбцов. Каждый столбец имеет уникальное название, которое также отмечает вид хранимой информации. В каждой строке находится информация об одном объекте. Таблица содержит конкретное число столбцов, но может иметь любое количество строк.
+В таблице ниже представлена информация о клиентах: имя, адрес, выручка и др., — разбитая на столбцы и строки.
+
+![Table](https://blog.skillfactory.ru/wp-content/uploads/2023/02/image2-1-6.png)
+Для связи данных в разных таблицах часто используют ID — уникальный идентификатор строки. Имя или какой-либо признак с этой целью не используются, поскольку они могут быть неуникальными.
+
+## Что делает СУБД
+Для работы с базой используется СУБД. Она позволяет:
+- формулировать запросы в виде кода, чтобы находить и получать информацию;
+- создавать новые записи, редактировать и удалять существующие;
+- разделять и объединять данные, которые хранятся в разных местах;
+- управлять доступом к информации;
+- выполнять параллельно разные действия;
+- создавать резервные копии информации и восстанавливать базу после сбоев;
+- управлять транзакциями — последовательными наборами запросов;
+- настраивать и обеспечивать безопасность, конфиденциальность информации.
+
+## Что представляет собой Oracle Database
+- По модели данных — объектно-реляционная
+
+Это значит, что система объединяет в себе две модели хранения информации: объектно-ориентированную и реляционную.
+
+Реляционная модель представляется как набор отношений между записями. Одни данные связаны с другими — так формируется база. Визуально ее можно представить как двумерную таблицу; математически — как модель, построенную на отношениях.
+
+Объектно-ориентированная модель воспринимает данные как объект. У объекта есть атрибуты, которые описывают его свойства, и методы — они нужны для взаимодействия с другими объектами. Каждый объект принадлежит к классу — это понятие можно представить как «схему» объекта. Объектно-ориентированный подход используется во многих языках программирования и упоминается во многих наших статьях. А в базах данных он нужен для работы с данными, у которых сложная структура.
+
+Oracle Database работает и с объектно-ориентированной, и с реляционной моделью.
+
+- По способу доступа — клиент-серверная 
+
+Система работает по принципу «клиент — сервер». Это означает, что ее основная часть размещается на сервере, там же, где и база данных. Человек работает с интерфейсом приложения-клиента. Клиентская часть управляет только пересылкой и получением информации от сервиса.
+
+Связь между клиентом и сервером обеспечивает специальный компонент, который в Oracle называется SQL *Net.
+
+Достоинства такого подхода — в высоком уровне безопасности и легком доступе для клиентов. Клиент-серверная организация разгружает сеть и снимает вычислительную нагрузку с клиентских компьютеров. А вот сервер для такой СУБД должен быть мощным.
+
+## Как работает Oracle Database
+Информация в системе хранится в отдельных базах — инстансах (instance) или экземплярах БД. Это не физические, а логические понятия, которые состоят из процессов и оперативной памяти. Все содержимое одного экземпляра имеет единую системную глобальную область (SGA) — часть оперативной памяти, с которой работает.
+
+Внутри экземпляров расположены логические пространства, которые называются табличными — tablespaces. Табличные пространства содержат компоненты данных — как файлы в папках. Файлы имеют расширение .dbf.
+
+СУБД состоит из одного или нескольких инстансов и программного обеспечения, которое ими управляет. Система поддерживает работу с независимыми базами (PDB) в рамках одного инстанса. Она может работать и с мультиарендной архитектурой (CDB), где множественными клиентами управляет один экземпляр приложения. В Oracle поддерживаются кластеризация и секционирование — физическое разделение элементов баз данных без потери доступа.
+
+## Версии Oracle
+Самая новая версия СУБД — 21c. Она включает больше 200 инноваций, в том числе поддержку неизменяемых блокчейн-таблиц, поддержку JavaScript, встроенную в СУБД, поддержку типа данных JSON в бинарном формате и другие.
+
+Для актуальных версий временами появляются обновления и пакеты патчей, которые называются PSU. Они расширяют возможности СУБД. Кроме того, Oracle предлагает использовать систему вместе с другими платными продуктами корпорации. Это Oracle Server, Oracle RPAS и другие решения в области информационных технологий. Для обучения можно пользоваться специальной бесплатной версией Express Edition (XE) или специальным облачным набором Always Free.
+
+## Литература
+
+https://blog.skillfactory.ru/glossary/oracle-database/

+ 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/**
+
+
+