🔥 ПОДБОРКА ЛУЧШИХ ШПАРГАЛОК ДЛЯ QA

🔥 ПОДБОРКА ЛУЧШИХ ШПАРГАЛОК ДЛЯ QA

От Junior до Middle+: полный арсенал шпаргалок для тестировщиков в 2025 году

Освоение тестирования SOAP API

Не так давно в нашем блоге рассказывалось об освоении тестирования через REST API. Я же хочу поделиться опытом тестирования SOAP, меня зовут Юлия Багрий и я расскажу про «старшего брата» REST.

1

Способы повторного запуска тестов

Часто в практике мы сталкиваемся с нестабильными тестами, которые хочется перезапустить несколько раз. Если после n-го количества перезапусков тест остаётся неудачным, его признают проваленным.
В этой статье я рассмотрю возможные способы повторного запуска тестов в JUnit 5, с которыми я столкнулась при поиске решений.

1. Аннотация @Repea…

2

Использование ParameterResolver в JUnit 5

Если вы занимались написанием тестов, то наверняка сталкивались с ситуацией, когда в тест нужно передать какой-либо объект. JUnit 5 предоставляет механизм Extensions, который позволяет значительно расширить функциональность тестов. Одной из наиболее полезных возможностей этого механизма является ParameterResolver, который позволяет автоматически вн…

2

Аннотация @Slf4j и её роль в логировании

Если вы хотите узнать, что такое аннотация @Slf4j из Lombok, тогда эта статья для вас.

Вся эта штука нужна для того, чтобы облегчить жизнь программисту, который устал вручную создавать логгеры. Аннотация @Slf4j предоставляет интерфейс для логирования, направляя вызовы в конкретную реализацию логгера. Давайте разберёмся, как это…

Секреты кэширования объектов в Java: что скрывает оператор ==?

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

//Что будет выведено в консоль? Integer a = 1; Integer b = 1; Integer c = 325; Integer d = 325; System.out.println(a == b); System.out.println(c == d);
2

Быть QA-лидом: опыт роботов в распределении нагрузки тестировщиков

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

Быть QA-лидом: опыт роботов в распределении нагрузки тестировщиков
3

Десять лет вдохновения и обучения: как Stepik праздновал юбилей

Десять лет вдохновения и обучения: как Stepik праздновал юбилей

Сентябрь 2023 года на Stepik имеет символическое значение. Для нас это был не только первый месяц нового времени года или начало учёбы для школьников и студентов, а в первую очередь дата, когда нашей платформе исполнилось 10 лет! Это не просто юбилей, это повод взглянуть на долгий путь, который преодолел маркетплейс знаний. Поэтому сегодня хотим по…

2

10 лучших онлайн-курсов на Stepik

За десять лет своего развития платформа Stepik стала одним из ключевых игроков в области дистанционного обучения. Начиная свою историю как бесплатный ресурс, предоставляющий доступ к массовым открытым онлайн-курсам (МООК), сайт трансформировался в масштабный образовательный проект с отличными платными программами. И именно об этом мы сегодня хотим…

10 лучших онлайн-курсов на Stepik
4

Как использовать метрики в тестировании, чтобы ускорить релиз цифрового продукта

Как использовать метрики в тестировании, чтобы ускорить релиз цифрового продукта

Метрики в тестировании — пустая трата времени или объективный показатель качества и скорости разработки? Когда применяются и что дают цифровому продукту? Вместе с начальником QA-отдела Fusion Tech постараемся разобраться в этих вопросах и выяснить, какие метрики и как влияют на процесс разработки.

11

Собеседование на мобильного тестировщика без опыта

Про собесы на мобильного тестировщика когда нет опыта.

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

\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Более подробно про XML можно узнать на w3schools или codenet (по-русски). Обязательно обратите внимание на описание namespaces (метод разрешения конфликтов при описании элементов в XML) – в SOAP их использование необходимо.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"XSD"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

При работе всегда удобно иметь стандартизированное описание возможных XML-документов и проверять их на корректность заполнения. Для этого существует XML Schema Definition (или сокращенно XSD). Две главные фичи XSD для тестировщика – это описание типов данных и наложение ограничений на возможные значения. Например, элемент из предыдущего примера можно сделать необязательным для заполнения и ограничить его размер 255 символами с помощью XSD:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"...\n\n\n\n\n\n\n\n...","lang":""}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

XSD – это сила и мощь. Чем подробнее описан XSD, тем меньше головной боли доставит вам тестирование сервиса.

","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"WSDL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Web Services Description Language (WSDL) – это язык на основе XML, который используется для описания веб-сервисов. В WSDL-документе содержится информация о местонахождении сервиса и доступных методах (операциях); для каждого метода определяются параметры отправляемого и получаемого сообщения. Обратите внимание на то, что XSD может быть «встроен» внутрь WSDL-документа (например, у Yandex Speller API).

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

WSDL-документ – это «капелька магии» в мире SOAP. Его можно сгенерировать из классов для сервера, а уже из него можно создать классы для клиента. Главное – не забывать проверять адекватность и доступность WSDL-документа для пользователей.

","subline1":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Протокол SOAP"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример запроса checkText через Yandex Speller API:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n\n\n\nошипка\n\n\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И полученный ответ:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n\n\n\n\nошипка\nошибка\n\n\n\n\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Прочитать о формате SOAP сообщений можно на w3schools.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Расширения SOAP"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В работе вам также могут встретиться различные «расширения» SOAP – стандарты типа WS-*. Одним из самых распространенных является WS-Security позволяющий работать с шифрованием и электронными подписями. Нередко вместе с ним применяется WS-Policy, с помощью которого можно управлять правами на использование вашего сервиса.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример использования WS-Security:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\nAlice\n6S3P2EWNP3lQf+9VC3emNoT57oQ=\nYF6j8V/CAqi+1nRsGLRbuZhi\n2008-04-28T10:02:11Z\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Все эти расширения – достаточно сложные конструкции, используемые далеко не в каждом SOAP-сервисе; их подробное изучение на начальном этапе освоения тестирования SOAP вряд ли будет актуально.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Стать клиентом

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Инструменты"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как вы уже поняли, SOAP – дело серьезное, для работы с ним нужно знать теорию и многочисленные стандарты. На практике такая сложность привела бы к весьма ощутимым трудозатратам (например, нужно было бы каждый раз смотреть схему в блокнотике и слать запросы curl-ом). Поэтому были созданы инструменты, облегчающие работу с SOAP.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Редакторы XML / XSD"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Хороший тестировщик начинает тестирование еще на стадии написания документации, поэтому для проверки схем удобно использовать специальные редакторы. Два самых известных – Oxygen (кроссплатформенный) и Altova (только для Windows); оба они являются платными. Это очень мощные программы, которыми активно пользуются аналитики при описании сервисов.

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

В моей практике полезными оказались три фичи редакторов: визуализация XSD, генерация XML на основе XSD и валидация XML по XSD.

","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1. Визуализация XSD нужна для наглядного представления схемы, позволяющего быстро вычленить обязательные элементы и атрибуты, а также существующие ограничения. Например, для запроса CheckTextRequest обязательным является элемент text, а необязательными – все три атрибута (при этом у атрибута options установлено значение по умолчанию – ноль).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"625616f4-080a-56fe-96c7-9eb26ebf0256","width":391,"height":284,"size":17885,"type":"png","color":"efeee8","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABgUJ/8QAIxAAAgEDAgcBAAAAAAAAAAAAAQIDAAQRBVEGEhMUITJCsf/EABcBAQADAAAAAAAAAAAAAAAAAAMAAQL/xAAaEQEBAAMBAQAAAAAAAAAAAAABAAIDMREz/9oADAMBAAIRAxEAPwDSbX9VS6nsZLR2WPnOWaNlY4GfVlzQb8X0l1J4yqE5iQ7qPymORsQ47ZkLlGKntScg489SOpj9Cp5QrS4uDawkzyEmNfo7Ur2wX//Z"}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2. Генерация XML на основе XSD полезна тогда, когда вы хотите увидеть корректный пример сообщения. Я пользуюсь ей для того, чтобы быстро поэкспериментировать с возможным заполнением сообщения и проверить нюансы работы ограничений.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3. После использования фичи из пункта 2 полезно провести валидацию XML по XSD – то есть проверить сообщение на корректность. Вместе фичи 2 и 3 позволяют отлавливать хитрые дефекты в XSD еще тогда, когда сам сервис находится в разработке.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Инструмент тестирования – SoapUI"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Тестирование SOAP практически всегда подразумевает использование SoapUI. Прочитать про использование этого инструмента можно в разных источниках (источник 1, источник 2), но эффективнее всего будет ознакомиться тут.

"}},{"type":"media","cover":true,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"800fc7bf-e33a-542c-8b70-357c800a8e16","width":1280,"height":720,"size":342828,"type":"png","color":"337789","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwQG/8QAJBAAAgIABQMFAAAAAAAAAAAAAQIDBAAFBxEhBhIiE0FCYXH/xAAYAQADAQEAAAAAAAAAAAAAAAADBQYEB//EACMRAAECBQMFAAAAAAAAAAAAAAEAAgMEESEiBRJBExZRkaH/2gAMAwEAAhEDEQA/AMnlGtFrMK7wtaqSOV8Zq0rhCCoJI9RQSRvyRuPvFy6cqCAFxbttgc19bcgj4gK5qb1ULc4i1W6nKCRgpEp2I34+WFXWjcvViNLkKWl2+gp9RJZa2Y0I60jRK9LyVCVB/dsHm8XinhA0jOC/dfJHbAdx498YingX/9k="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Я выделяю 8 условных уровней владения SoapUI:

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Уровень 1 – умею отправлять запросы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Научитесь создавать проект на основе WSDL. SoapUI может сгенерировать все необходимые запросы для вас; вам останется лишь проверить правильность их заполнения и нажать кнопочку «Send». После выработки навыков создания корректных запросов вы должны овладеть искусством формирования некорректных запросов, вызывающих появление ошибок.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Уровень 2 – умею делать Test Suites и Test Cases"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Уровень 3 – умею писать Assertions"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Уровень 4 – использую XPath и/или XQuery в Assertions"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для тех, кто немного знаком с автоматизацией тестирования UI с помощью Selenium, язык XPath – знакомая вещь. Грубо говоря, XPath позволяет искать элементы в XML-документе. XQuery – похожая технология, которая может использовать XPath внутри себя; этот язык гораздо мощнее, он напоминает SQL. Оба эти языка можно использовать в Assertions. Проверки с их помощью получаются более прицельными и стабильными, поэтому ваши кейсы будут пользоваться большим доверием.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Уровень 5 – умею писать сложные тесты с помощью специальных шагов"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Properties и Property Transfer (помогают переиспользовать данные и передавать их между запросами);","JDBC Request (используется для получения данных из базы данных);","Conditional Goto (позволяет сделать разветвления или циклы в тест-кейсе);","Run TestCase (помогает вынести какие-то типовые запросы в отдельные тест-кейсы и вызывать их там, где нужно)."],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Уровень 6 – использую скрипты на Groovy"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

SoapUI позволяет писать скрипты на Groovy в различных местах. Простейший случай – это генерация данных в самом запросе с помощью вставок ${=}. Я постоянно пользуюсь такими вставками:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["${=new Date().format(«yyyy-MM-dd’T’HH:mm:ss»)} – для вставки текущей даты и времени в необходимом формате;","${=java.util.UUID.randomUUID()} – для вставки корректно сформированного случайного GUID."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Уровень 7 – использую MockServices"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

SoapUI на основе WSDL может генерировать Mock-объекты. Mock-объект – это простейшая симуляция сервиса. С помощью «моков» можно начать писать и отлаживать тест-кейсы еще до того, как сервис реально будет доступен для тестирования. Также их можно использовать в качестве «заглушек» для временно недоступных сервисов.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h3","text":"Уровень 8 – бог SoapUI"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вы знаете разницу между платной и бесплатной версиями SoapUI и используете SoapUI API в коде. Вы используете плагины и запускаете выполнение кейсов через командную строку и/или CI. Ваши тест-кейсы просты и легко поддерживаются. В общем, вы «съели собаку» на этом инструменте. Я бы с радостью пообщалась с тем, кто освоил SoapUI на таком уровне. Если вы являетесь таковым – отпишитесь в комментариях!

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Тестирование с помощью языков программирования"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В какой-то момент у вас может возникнуть мысль, что проще писать тесты не в SoapUI, а просто на языках программирования. Это нормально. Будучи UI-инструментом, SoapUI имеет свои недостатки, которые в лучшем случае решаются приобретением платной версии, а в худшем – «костылями» и большими затратами времени на поддержку тестов. Для работы с протоколом SOAP в языках программирования существуют специальные библиотеки. Так, в Java можно использовать Axis2 (подробные примеры доступны в серии статей на IBM developerWorks), в Python – библиотеки suds либо zeep, в Groovy – библиотеку groovy-wslite.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Приведу пример того, как выглядит запрос к YandexSpeller API, выполненный с помощью groovy-wslite:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import wslite.soap.*\ndef client = new SOAPClient('http://speller.yandex.net/services/spellservice?WSDL')\ndef response = client.send(SOAPAction: 'http://speller.yandex.net/services/spellservice/checkText') {\nbody {\nCheckTextRequest('lang': 'ru', 'xmlns':'http://speller.yandex.net/services/spellservice') {\ntext('ошипка')\n}\n}\n}\nassert 'ошибка' == response.CheckTextResponse.SpellResult.error.s.text()\nassert '1' == response.CheckTextResponse.SpellResult.error.@code.text()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Насколько я знаю, высокоуровневых фреймворков (по типу Rest-assured) для тестирования SOAP пока не существует, но появился интересный инструмент – karate. С его помощью можно описывать кейсы для тестирования SOAP и REST в виде сценариев по типу Cucumber / Gherkin. Для многих тестировщиков обращение к karate будет идеальным решением, ведь такие сценарии по сложности написания и поддержки кейсов будут лежать где-то посередине между использованием SoapUI и написанием собственного фреймворка для тестирования SOAP.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Заключение"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте соберем воедино тот самый чек-лист необходимых навыков для тестировщика. Итак, если вы только начинаете тестировать SOAP сервисы, вам нужно знать и уметь использовать:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["XML.","XSD.","WSDL.","SOAP.","Редакторы XML / XSD (на уровне визуализации XSD).","SoapUI на уровне 1."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Изучайте! Удачи!

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#soap #api #restapi #qualitylab #softwaretesting #qa #тестирование #тестированиепо #партнерство #изучаем #qaengineer

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":392,"hits":1783,"reads":null,"online":0},"dateFavorite":0,"hitsCount":1783,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":"Тестирование SOAP API, основы SOAP и WSDL, работа с XML и XSD, инструменты для тестирования, советы для тестировщиков и менеджеров.","url":"https://vc.ru/services/1924757-testirovanie-soap-api-osnovnye-principy-i-instrumenty","author":{"id":1894539,"name":"Лаборатория Качества","nickname":null,"description":"Тестируем сайты, ПО, приложения и другие IT-продукты на аутсорсинге. NDA. Контакты и подробности о нас: quality-lab.ru","uri":"","avatar":{"type":"image","data":{"uuid":"3672385d-5e78-50ad-9425-fd4867549300","width":2040,"height":2040,"size":2188090,"type":"png","color":"065e84","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwQGB//EACYQAAIBAgQFBQAAAAAAAAAAAAECAwQFABESIQYHIjFRExRCYXP/xAAYAQACAwAAAAAAAAAAAAAAAAAEBwACA//EAB8RAQACAQMFAAAAAAAAAAAAAAEAAwIEERITFCFBUf/aAAwDAQACEQMRAD8AyCzcvprlwnNxi92tlHCsjg+vqV9ajZU6dyfAPbDPy1HTtKwd4k69LldQ2uQEjffXE7hny/PBfNgHb4fIe61dUSaI1Mpp061i1nQrEDMhewJyGZ+hiZhyX3K0ZLWYr4j8M0ohjAlcAKPkfGMmE7s//9k="}},"cover":{"cover":{"type":"image","data":{"uuid":"0834afcd-a0e5-55d7-9800-d93ff34c512d","width":1473,"height":480,"size":93718,"type":"jpg","color":"dbeaf0","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABAMJ/8QAIBAAAgEEAgMBAAAAAAAAAAAAAQIRAAMEEgUxIVFhof/EABUBAQEAAAAAAAAAAAAAAAAAAAQF/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAECEf/aAAwDAQACEQMRAD8A0a4XBPEHK1yGyLjJDi+zOsiZ1nqhvk5CuwGMWAMA7Dz+0vYgsZMt2fdRNm2SSUUk/KQkTLrWf//Z"}},"cover_y":100},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":3564532,"userId":1894539,"count":0,"shareImage":"https://api.vc.ru/achievements/share/3564532"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":true,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":200396,"name":"Сервисы","description":"Новые сервисы, обновления инструментов, опыт использования и полезные приёмы.","uri":"/services","avatar":{"type":"image","data":{"uuid":"158fab2d-76c1-5ed8-898a-76ee48d4c795","width":1200,"height":1200,"size":99571,"type":"png","color":"7cdaea","hash":"08183848d81000","external_service":[]}},"cover":{"type":"image","data":{"uuid":"c3fe3abb-6808-527e-9eb1-2b6bb92ea400","width":3840,"height":1120,"size":19502,"type":"png","color":"7cdcec","hash":"","external_service":[]}},"lastModificationDate":1688995401,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"services","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":2,"count":1}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":1780365,"customUri":null,"subsiteId":4147647,"title":"Способы повторного запуска тестов","date":1738141894,"dateModified":1738142658,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Часто в практике мы сталкиваемся с нестабильными тестами, которые хочется перезапустить несколько раз. Если после n-го количества перезапусков тест остаётся неудачным, его признают проваленным.
В этой статье я рассмотрю возможные способы повторного запуска тестов в JUnit 5, с которыми я столкнулась при поиске решений.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"1. Аннотация @RepeatedTest из JUnit 5"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Данный способ позволяет повторять запуск теста несколько раз с указанием желаемого количества перезапусков и не зависит от результата теста. Данный способ полезен, на мой взгляд, когда нужно проверить тест на стабильность при повторных запусках, или для стресс-тестирования.
Однако в junit 5 появилась возможность добавить количество допустимых провалов теста. Для этого был создан атрибут failureThreshold. Он позволяет задать максимальное допустимое количество неудач (провалов теста) при выполнении теста, аннотированного @RepeatedTest. Если количество провалов превышает это значение, тест считается окончательно проваленным. По умолчанию атрибут имеет Integer.MAX_VALUE, что означает бесконечное количество неудач, это значит, что тест будет повторятся ровно заданное количество в @RepeatedTest независимо от количества неудач.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"@RepeatedTest(value = 10, failureThreshold = 3)\nvoid testWithFailureThreshold() {\n assertTrue(Math.random() > 0.5, \"Тест провален\");\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Тест выполняется 10 раз
Если количество неудач превысит 3, тест считается проваленным.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Это не всегда удобно, т.к. тест выполняется всегда n раз, даже если он успешно проходит. А нам нужно, чтобы успешное прохождение завершало тест, а неудачи приводили к перезапуску. Для этого лучше подходит аннотация @RepeatedIfExceptionsTest, о которой расскажу далее.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"2. Плагин rerunner-jupiter"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Этот плагин предоставляет аннотацию @RepeatedIfExceptionsTest(repeats = 2), которая позволяет перезапускать только упавшие тесты. Использовать ее можно вместо аннотации @Test и указывая количество перезапусков.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"3. Аннотация @TestTemplate"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Эта аннотация используется под капотом у @RepeatedTest и @RepeatedIfExceptionsTest. Можно не использовать @RepeatedTest, а применить @TestTemplate. Однако количество перезапусков указывается в реализации интерфейсов TestTemplateInvocationContextProvider и TestTemplateInvocationContext.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"public class RetryTestJunit implements TestTemplateInvocationContextProvider {\n\n private static final int MAX_RETRIES = 3;\n\n @Override\n public boolean supportsTestTemplate(ExtensionContext extensionContext) {\n return extensionContext.getTestMethod().isPresent();\n }\n\n @Override\n public Stream provideTestTemplateInvocationContexts(ExtensionContext extensionContext) {\n return IntStream.range(0, MAX_RETRIES)\n .mapToObj(RetryInvocationContext::new);\n }\n}","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"4. Использование настройки maven-surefire-plugin (для Maven)"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если вы используете Maven, можно использовать свойство rerunFailingTestsCount в maven-surefire-plugin.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Настройка в pom.xml:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n org.apache.maven.plugins\n maven-surefire-plugin\n 3.0.0\n \n 2\n \n","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"5. Перезапуск тестов вручную (через TestExecutionExceptionHandler)"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Этот способ позволяет контролировать количество перезапусков, используя интерфейс TestExecutionExceptionHandler, который перехватывает ошибки теста.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Реализация:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"private static final int MAX_RETRIES = 3;\n\n@Override\npublic void handleTestExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {\n context.getTestMethod().ifPresent(method -> {\n boolean result = retryTest(context, method);\n if (!result) {\n System.err.println(\"Тест был перезапущен \" + MAX_RETRIES + \" раза и провален.\");\n throw new RuntimeException(throwable.getMessage());\n }\n });\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Логика повторного запуска:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"private boolean retryTest(ExtensionContext context, Method method) {\n int repeats = 0;\n while (repeats < MAX_RETRIES) {\n if (restartTest(context, method)) {\n return true;\n }\n repeats++;\n }\n return false;\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Метод для повторного запуска теста:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"private boolean restartTest(ExtensionContext context, Method method) {\n try {\n method.invoke(context.getRequiredTestInstance());\n return true;\n } catch (Exception e) {\n return false;\n }\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Этот способ позволяет гибко управлять перезапусками.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Так же для реализации похожего способа можно использовать TestWatcher.testFailed() или механизм Launcher в JUnit 5 для перехвата ошибок и управления перезапусками.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"6. Перезапуск тестов с использованием AspectJ"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Можно использовать AspectJ для автоматического перезапуска тестов в случае неудачи:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"while (attempt < maxRetries) {\n try {\n log.info(\"Запуск теста: {} (попытка {}/{})\", joinPoint.getSignature(), attempt + 1, maxRetries);\n return joinPoint.proceed();\n } catch (Throwable t) {\n log.warn(\"Тест {} провалился на попытке {}/{}. Причина: {}\",\n joinPoint.getSignature(), attempt + 1, maxRetries, t.getMessage());\n attempt++;\n }\n}\n\nlog.error(\"Тест {} окончательно провалился после {} попыток\", joinPoint.getSignature(), maxRetries);\nthrow lastThrowable;","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Каждый из перечисленных методов имеет свои плюсы и минусы и это только часть способов и инструментов, которые позволят перезапустить тест.
А какие способы перезапуска тестов используете вы? 😉

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#testing #automatization #java #qa #qaengineer #qaинженер #Junit5

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":1,"favorites":0,"reposts":0,"views":872,"hits":505,"reads":null,"online":0},"dateFavorite":0,"hitsCount":505,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/dev/1780365-sposoby-povtornogo-zapuska-testov","author":{"id":4147647,"name":"an.lysenko","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"ffb1dfcb-09e5-56a1-acc5-ea050e30ba82","width":900,"height":900,"size":77777,"type":"jpg","color":"e99066","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUG/8QAIxAAAgIBAwQDAQAAAAAAAAAAAQIDBBEABQcGCBMhEjFBM//EABUBAQEAAAAAAAAAAAAAAAAAAAYH/8QAHhEAAQMEAwAAAAAAAAAAAAAAAQMEEQACBSESFDH/2gAMAwEAAhEDEQA/ABvj3tHn57pck8g1+rqjT7fflMURhRw3g+ReFmf+YSAqR+HH4PesKneHPs6Com/VLCVR4Vl8Ui+UL6DYIyM4zjUTtI3SzHvvXdBbE60bHTV2SWuJCIpGWAlWZfokH6JHrQ64CuQBgA6nzUqFyrzukCI81TbLYvGLs26PXAttBgEkxGq//9k="}},"cover":null,"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 7 ноября 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":6035470,"userId":4147647,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6035470"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":235819,"name":"Разработка","description":"Сообщество разработчиков: публикации о личном опыте, выдающиеся приёмы при решении рутинных задач, полезные материалы для профессионального роста.","uri":"/dev","avatar":{"type":"image","data":{"uuid":"fef5b5fb-e488-5b7f-8445-e3a26a910b44","width":1200,"height":1200,"size":7757,"type":"png","color":"343434","hash":"04042b2b1c1000","external_service":[]}},"cover":{"type":"image","data":{"uuid":"2a214cc5-35cc-58ca-bc07-fc1c892d2101","width":960,"height":280,"size":177,"type":"png","color":"343434","hash":"","external_service":[]}},"lastModificationDate":1642411346,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"dev","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":2}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":1746745,"customUri":null,"subsiteId":4147647,"title":"Использование ParameterResolver в JUnit 5","date":1736494721,"dateModified":1736779838,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Если вы занимались написанием тестов, то наверняка сталкивались с ситуацией, когда в тест нужно передать какой-либо объект. JUnit 5 предоставляет механизм Extensions, который позволяет значительно расширить функциональность тестов. Одной из наиболее полезных возможностей этого механизма является ParameterResolver, который позволяет автоматически внедрять зависимости (объекты) в тестовые методы.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что такое ParameterResolver?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ParameterResolver — это интерфейс, который позволяет JUnit 5 передавать объекты (параметры) в тестовые методы во время выполнения тестов. Это особенно полезно, если вы хотите:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["автоматически внедрять зависимости (например, настройки, моки или реальные объекты);","избежать явного создания этих объектов в каждом тесте;","повысить гибкость и читаемость тестовых методов."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

JUnit 5 предоставляет встроенные объекты, которые можно внедрять в методы тестов:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["TestInfo — предоставляет информацию о текущем тесте (например, его имя или аннотации);","TestReporter — позволяет публиковать дополнительную информацию о тесте;","и другие."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как работает ParameterResolver?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Принцип работы ParameterResolver включает три основных шага:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["JUnit анализирует параметры тестового метода. Когда тест запускается, JUnit проверяет сигнатуру метода, чтобы определить, какие параметры указаны и какие типы данных ожидаются.","Ищется подходящий ParameterResolver. JUnit обращается к зарегистрированным расширениям (Extensions) и задает каждому вопрос: «Можешь ли ты предоставить параметр типа X?» Если ParameterResolver отвечает «true», он передает объект для использования в тесте.","Объект передается в тестовый метод. JUnit вызывает тестовый метод с параметрами, которые были подготовлены ParameterResolver."],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Создание пользовательского ParameterResolver"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Чтобы создать собственный ParameterResolver, нужно реализовать интерфейс ParameterResolver. Этот интерфейс требует реализации двух методов:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["supportsParameter — проверяет, может ли resolver обработать переданный параметр. Если может, возвращает true.","resolveParameter — создает и возвращает объект, который будет передан в метод теста."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

После этого ваш ParameterResolver нужно зарегистрировать, добавив аннотацию @ExtendWith к классу тестов.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Пример: создание пользователя"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Допустим, у нас есть класс User с полями, конструктором и методом toString. Мы хотим автоматизировать его создание для тестов.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"public class MyExtension implements ParameterResolver {\n\n @Override\n public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) {\n // Проверяем, является ли параметр объектом класса User\n return parameterContext.getParameter().getType() == User.class;\n }\n\n @Override\n public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) {\n // Логика создания объекта User\n return new User();\n }\n}\n\n@ExtendWith(MyExtension.class)\npublic class MyOneTest {\n\n @Test\n @DisplayName(\"Add user\")\n void addUser(User user) {\n System.out.println(\"Это наш пользователь: \" + user);\n }\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вывод в консоль:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Это наш пользователь: userId=12e5bc2cc06bb5237533, firstName=Teddy, lastName=Haag, password=AFmikd65*, age=17, email=amal.hansen@yahoo.com, salary=20171, department=Legal","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Почему стоит использовать ParameterResolver?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ParameterResolver в JUnit 5 — это не просто удобный инструмент, а мощный механизм автоматизации. Он:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Упрощает код тестов за счёт устранения явного создания объектов.","Улучшает читаемость и поддержку тестов.","Позволяет внедрять зависимости, ориентируясь на конкретные условия или контекст выполнения тестов."],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Заключение"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#testing #automatization #java #qa #qaengineer #qaинженер #Junit5

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":0,"reposts":0,"views":857,"hits":248,"reads":null,"online":0},"dateFavorite":0,"hitsCount":248,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/dev/1746745-ispolzovanie-parameterresolver-v-junit-5","author":{"id":4147647,"name":"an.lysenko","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"ffb1dfcb-09e5-56a1-acc5-ea050e30ba82","width":900,"height":900,"size":77777,"type":"jpg","color":"e99066","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUG/8QAIxAAAgIBAwQDAQAAAAAAAAAAAQIDBBEABQcGCBMhEjFBM//EABUBAQEAAAAAAAAAAAAAAAAAAAYH/8QAHhEAAQMEAwAAAAAAAAAAAAAAAQMEEQACBSESFDH/2gAMAwEAAhEDEQA/ABvj3tHn57pck8g1+rqjT7fflMURhRw3g+ReFmf+YSAqR+HH4PesKneHPs6Com/VLCVR4Vl8Ui+UL6DYIyM4zjUTtI3SzHvvXdBbE60bHTV2SWuJCIpGWAlWZfokH6JHrQ64CuQBgA6nzUqFyrzukCI81TbLYvGLs26PXAttBgEkxGq//9k="}},"cover":null,"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 7 ноября 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":6035470,"userId":4147647,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6035470"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":235819,"name":"Разработка","description":"Сообщество разработчиков: публикации о личном опыте, выдающиеся приёмы при решении рутинных задач, полезные материалы для профессионального роста.","uri":"/dev","avatar":{"type":"image","data":{"uuid":"fef5b5fb-e488-5b7f-8445-e3a26a910b44","width":1200,"height":1200,"size":7757,"type":"png","color":"343434","hash":"04042b2b1c1000","external_service":[]}},"cover":{"type":"image","data":{"uuid":"2a214cc5-35cc-58ca-bc07-fc1c892d2101","width":960,"height":280,"size":177,"type":"png","color":"343434","hash":"","external_service":[]}},"lastModificationDate":1642411346,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"dev","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":2}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":1742577,"customUri":null,"subsiteId":4147647,"title":"Аннотация @Slf4j и её роль в логировании","date":1736168143,"dateModified":1736882319,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Если вы хотите узнать, что такое аннотация @Slf4j из Lombok, тогда эта статья для вас.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вся эта штука нужна для того, чтобы облегчить жизнь программисту, который устал вручную создавать логгеры. Аннотация @Slf4j предоставляет интерфейс для логирования, направляя вызовы в конкретную реализацию логгера. Давайте разберёмся, как это работает и почему это пригодится.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как работает @Slf4j?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Когда мы используем аннотацию @Slf4j, она сама по себе ничего особенного не делает. Она просто добавляет в ваш класс поле вида:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"private static final Logger log = LoggerFactory.getLogger(Class.class);","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Этот код создаёт статическое поле log, которое является экземпляром интерфейса org.slf4j.Logger. Метод LoggerFactory.getLogger() возвращает логгер, связанный с текущим классом (Class.class).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Самое приятное: вам не нужно писать это руками! Lombok делает всё за вас. Это как суперспособность: \"я не пишу код, но он есть\".

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Представьте: вы вызываете log.info(\"Привет, мир!\"), а Lombok автоматически создаёт объект логгера и отправляет сообщение туда, куда нужно. Однако SLF4J — это всего лишь фасад, и без конкретной реализации логгирования (например, Log4j или Logback) он не заработает.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Роль моста slf4j-log4j12"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

SLF4J не является полноценной системой логирования — это лишь интерфейс, который перенаправляет вызовы в реальную систему логирования. Это похоже на мост через реку: без него вы никуда не доберётесь. Таким \"мостом\" является библиотека slf4j-log4j12. Он берёт ваши вызовы логгера и переправляет их в Log4j, который уже записывает их в консоль, файл или куда ещё вы захотите.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n org.slf4j\n slf4j-api\n 2.0.13\n\n\n org.slf4j\n slf4j-log4j12\n 2.0.13\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Чтобы аннотация @Slf4j была доступна для использования, так же нужно подключить библиотеку Lombok.
При использовании моста slf4j-log4j12 происходит следующее:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Вызов логирования: Когда вы вызываете метод логгера, например, log.info(\"Message\"), SLF4J перенаправляет этот вызов в соответствующую реализацию, в данном случае в Log4j.","Мост: Мост slf4j-log4j12 выполняет роль интерфейса между SLF4J и Log4j, передавая вызовы логирования от SLF4J в Log4j, который в свою очередь обрабатывает их и записывает в соответствующие места — файлы, консоль и другие источники.
","Настройка Log4j: Чтобы правильно настроить вывод логов, Log4j использует конфигурационные файлы, такие как log4j.properties или log4j.xml. Эти файлы содержат настройки, которые определяют формат сообщений, уровни логирования и аппендеры, которые определяют, куда именно будут записываться логи.
"],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Настройка Log4j: это как заправить машину"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот самый простой пример log4j.properties:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"log4j.rootLogger=INFO, console\n\nlog4j.appender.console=org.apache.log4j.ConsoleAppender\nlog4j.appender.console.layout=org.apache.log4j.PatternLayout\nlog4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Это самый простой файл используемый мной для вывода событий уровня info в консоль. Это говорит Log4j:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1. \"Пиши всё от уровня INFO и выше\". log4j.rootLogger=INFO: Задается глобальный уровень логирования и аппендеры (места вывода логов).

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Уровень логирования (INFO): Определяет минимальный уровень важности сообщений, которые будут записаны. Уровни (по возрастанию важности):
TRACE: Самый подробный уровень логов, используется для отладки.
DEBUG: Подробные сообщения для отладки.
INFO: Общая информация о работе приложения.
WARN: Предупреждения о потенциальных проблемах.
ERROR: Ошибки, которые требуют внимания.
FATAL: Критические ошибки.","console: Это указание на аппендеры, которые будут использоваться для записи логов. В данном случае это консоль.
"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2. \"Выводи всё в консоль\". log4j.appender.console: Определяет аппендер для вывода в консоль.Используется класс org.apache.log4j.ConsoleAppender, который выводит сообщения логирования в стандартный поток вывода (консоль).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3. \"Форматируй красиво: дата, поток, уровень и сообщение\". log4j.appender.console.layout: Указывает, какой формат (layout) будет использоваться для логов в консоли.

patternLayout.4. log4j.appender.console.layout.ConversionPattern: Задает формат сообщений логов.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Пример."}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"@Slf4j\npublic class Main {\n\n public static void main(String[] args) {\n log.info(\"Test info\");\n }\n}\n\n\nВывод в консоль:\n2025-01-06 15:33:20 [main] INFO Main - Test info","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Заключение"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Аннотация @Slf4j — это удобный инструмент и ваш лучший друг, когда дело доходит до логгирования. Она избавляет вас от скучной работы, но без правильной реализации (например, Log4j) она бесполезна. Подключите всё, настройте, и пусть ваши логи сияют, как новогодняя гирлянда! 🎄

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

P.S. Если дочитали до конца — вы герой. Теперь вы знаете больше о логгировании :)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#testing #automatization #java #qa #qaengineer #qaинженер #Junit5

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":0,"reposts":0,"views":821,"hits":1933,"reads":null,"online":0},"dateFavorite":0,"hitsCount":1933,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/dev/1742577-annotaciya-slf4j-i-ee-rol-v-logirovanii","author":{"id":4147647,"name":"an.lysenko","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"ffb1dfcb-09e5-56a1-acc5-ea050e30ba82","width":900,"height":900,"size":77777,"type":"jpg","color":"e99066","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUG/8QAIxAAAgIBAwQDAQAAAAAAAAAAAQIDBBEABQcGCBMhEjFBM//EABUBAQEAAAAAAAAAAAAAAAAAAAYH/8QAHhEAAQMEAwAAAAAAAAAAAAAAAQMEEQACBSESFDH/2gAMAwEAAhEDEQA/ABvj3tHn57pck8g1+rqjT7fflMURhRw3g+ReFmf+YSAqR+HH4PesKneHPs6Com/VLCVR4Vl8Ui+UL6DYIyM4zjUTtI3SzHvvXdBbE60bHTV2SWuJCIpGWAlWZfokH6JHrQ64CuQBgA6nzUqFyrzukCI81TbLYvGLs26PXAttBgEkxGq//9k="}},"cover":null,"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 7 ноября 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":6035470,"userId":4147647,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6035470"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":235819,"name":"Разработка","description":"Сообщество разработчиков: публикации о личном опыте, выдающиеся приёмы при решении рутинных задач, полезные материалы для профессионального роста.","uri":"/dev","avatar":{"type":"image","data":{"uuid":"fef5b5fb-e488-5b7f-8445-e3a26a910b44","width":1200,"height":1200,"size":7757,"type":"png","color":"343434","hash":"04042b2b1c1000","external_service":[]}},"cover":{"type":"image","data":{"uuid":"2a214cc5-35cc-58ca-bc07-fc1c892d2101","width":960,"height":280,"size":177,"type":"png","color":"343434","hash":"","external_service":[]}},"lastModificationDate":1642411346,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"dev","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":1639358,"customUri":null,"subsiteId":4147647,"title":"Секреты кэширования объектов в Java: что скрывает оператор ==?","date":1730916261,"dateModified":1736882304,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"//Что будет выведено в консоль?\nInteger a = 1;\nInteger b = 1;\nInteger c = 325;\nInteger d = 325;\nSystem.out.println(a == b);\nSystem.out.println(c == d);","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Предсказав результат, я была уверена, что вывод будет одинаковым для обеих строк, но к моему удивлению, оказалось, что это не так! Давайте разберёмся, что происходит и почему.

Ответ и его объяснение:

Запустив код, я получила следующий результат:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"true\nfalse","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Первая строка System.out.println(a == b); вывела true, что вполне ожидаемо, если считать, что обе переменные ссылаются на один и тот же объект с числом 1. Однако вторая строка System.out.println(c == d); неожиданно вернула false, несмотря на то, что обе переменные, казалось бы, тоже содержат одно и то же значение – 325. В чем же дело?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Магия кэширования

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Чтобы понять, почему это произошло, нужно углубиться во внутреннюю работу Java. Оператор \"==\" при сравнении объектов в Java проверяет, ссылаются ли обе переменные на один и тот же объект в памяти. В случае с Integer, Boolean, Character, и Long, чтобы улучшить производительность, Java применяет кэширование значений для некоторых диапазонов чисел.
Для Integer JVM кэширует значения в диапазоне от -128 до 127. Это означает, что при создании объекта Integer в этом диапазоне Java не создаёт новый объект, а использует уже существующий из пула кэшированных значений.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Почему a == b вернул true.
Когда мы присваиваем 1 переменным a и b, Java использует одно и то же значение из пула кэшированных объектов Integer. Поэтому обе переменные a и b ссылаются на один и тот же объект, и a == b возвращает true.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Почему c == d вернул false. Значение 325 находится за пределами кэшируемого диапазона, и каждый раз при присвоении такого значения создаётся новый объект Integer. Поэтому c и d ссылаются на разные объекты, даже если у них одинаковое значение, и результат c==d будет false.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вывод.
С подобной ситуацией мы сталкиваемся при попытке сравнить два объекта String и знаем, что надо делать, чтобы сравнить значения, а не ссылки на объекты. В общем, чтобы избежать путаницы стоит использовать equals.
Попробуем использовать equals и мы получим то что и будем ожидать:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"true\ntrue","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Спасибо, если прочитали :) Возможно, более опытные уже знают эти особенности, но для меня это стало настоящим открытием, и я была очень рада, что узнала о них.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#testing #automatization #java #qa #qaengineer #qaинженер #Junit5

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":0,"reposts":0,"views":406,"hits":128,"reads":null,"online":0},"dateFavorite":0,"hitsCount":128,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/dev/1639358-sekrety-keshirovaniya-obektov-v-java-chto-skryvaet-operator","author":{"id":4147647,"name":"an.lysenko","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"ffb1dfcb-09e5-56a1-acc5-ea050e30ba82","width":900,"height":900,"size":77777,"type":"jpg","color":"e99066","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUG/8QAIxAAAgIBAwQDAQAAAAAAAAAAAQIDBBEABQcGCBMhEjFBM//EABUBAQEAAAAAAAAAAAAAAAAAAAYH/8QAHhEAAQMEAwAAAAAAAAAAAAAAAQMEEQACBSESFDH/2gAMAwEAAhEDEQA/ABvj3tHn57pck8g1+rqjT7fflMURhRw3g+ReFmf+YSAqR+HH4PesKneHPs6Com/VLCVR4Vl8Ui+UL6DYIyM4zjUTtI3SzHvvXdBbE60bHTV2SWuJCIpGWAlWZfokH6JHrQ64CuQBgA6nzUqFyrzukCI81TbLYvGLs26PXAttBgEkxGq//9k="}},"cover":null,"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 7 ноября 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":6035470,"userId":4147647,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6035470"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":235819,"name":"Разработка","description":"Сообщество разработчиков: публикации о личном опыте, выдающиеся приёмы при решении рутинных задач, полезные материалы для профессионального роста.","uri":"/dev","avatar":{"type":"image","data":{"uuid":"fef5b5fb-e488-5b7f-8445-e3a26a910b44","width":1200,"height":1200,"size":7757,"type":"png","color":"343434","hash":"04042b2b1c1000","external_service":[]}},"cover":{"type":"image","data":{"uuid":"2a214cc5-35cc-58ca-bc07-fc1c892d2101","width":960,"height":280,"size":177,"type":"png","color":"343434","hash":"","external_service":[]}},"lastModificationDate":1642411346,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"dev","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":2}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":1129678,"customUri":null,"subsiteId":199486,"title":"Быть QA-лидом: опыт роботов в распределении нагрузки тестировщиков","date":1713269684,"dateModified":1713269684,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":true,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"9ec4047e-750d-56e7-b504-8195bf4bc44b","width":1920,"height":1080,"size":77349,"type":"png","color":"040404","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/wAALCAAKAAoBAREA/8QAFgABAQEAAAAAAAAAAAAAAAAABwYJ/8QAIxAAAQIEBgMAAAAAAAAAAAAAAQIDAAQFEQYSITFBURMycf/aAAgBAQAAPwDM6r4WrNMlRUZ5yScS8vxgNTLbrmYpuLpSoqGnYieUVZj7b9Q5OVaqqOIEqqc2RdwWLytgmw56AHwQFqJudeY//9k="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["наложили задачи QA-лида на схему производственного процесса цифрового продукта;","нашли разрывы в производственном процессе;
","оценили загрузку по встречам;
","определили дополнительные процессы, влияющие на загрузку;
","составили список внепроектной деятельности QA-лида;
","проработали вопрос с онбордингом в проект;
","выявили типовые ошибки и подумали, как их решить.
"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Упрощаем онбординг"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["для QA-лида, который погружается в проект со старта,","для QA-лида и/или QA-инженера, который онбордится в уже действующий проект.
"],"type":"UL"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"Чек-лист для погружения в проект со старта","image":{"type":"image","data":{"uuid":"ea7be246-3363-5803-84fb-2cb70b589dd5","width":1920,"height":1505,"size":76476,"type":"png","color":"f2f2f2","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwUHCP/EACcQAAIAAwcDBQAAAAAAAAAAAAECAAQRAwUGBxIhMxQWIkFRUnGR/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAID/8QAGxEAAgIDAQAAAAAAAAAAAAAAAAETUQISkfD/2gAMAwEAAhEDEQA/AN/JkrdUnYv01+4wKF2GkYonyxq4FeX0UGNp8qXERovMXtk1pYqs/jhgDQHvGf3HvzwnypcQjVvpWJbxVgu1bRjt9mMSw2pvkf2AP//Z"}}}]}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"Чек-лист для онбординга в действующий проект","image":{"type":"image","data":{"uuid":"0b49c050-818f-5ef3-895d-bc6e4b9158c2","width":1920,"height":1732,"size":93705,"type":"png","color":"f1f1f1","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAABAUGCf/EACMQAAEDAgcAAwAAAAAAAAAAAAECAxEABQQGBxITFCFBUZH/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/8QAGxEBAAEFAQAAAAAAAAAAAAAAAAECEhNhkdH/2gAMAwEAAhEDEQA/ANAG9G8p904dhy/thwrWlSsxXCdsp9B5p+4itc1WuR4iyD5jTHLuHZbY7V7VxpCNxvmOJMCJkvT+0stWuQdsKNkDsqXA3JUoA/IHnlZqEEmT7QH/2Q=="}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Устраняем разрывы в этапах производственного процесса"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Первый этап — инициация проекта"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На этом этапе QA практически не принимают участие. Из-за этого мы:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

слабо погружены в бизнес-процессы клиента,

","

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

","

не можем на первых этапах заложить время на тестирование.

"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Это стандартная ситуация, к которой просто нужно быть готовым. Чтобы минимизировать разрывы, можно:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

пользоваться чек-листами,

","

выстроить и зафиксировать систему передачи информации от PM QA-лиду.

"],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Второй этап — исследование"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

пообщаться с потенциальными пользователями,

","

консолидировать результаты исследования,

","

проработать чистый вариант тестирования,

","

зафиксировать представление о критичных функциях,

","

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

"],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Третий этап — проектирование"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"Вот они","image":{"type":"image","data":{"uuid":"5d4aef62-2047-5e6d-b3ec-f754d3e55730","width":1920,"height":1189,"size":66218,"type":"png","color":"f0f1f0","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAABAYHCf/EACQQAAECBQMFAQAAAAAAAAAAAAECAwAFBhESBBQhBxMiUYHR/8QAFwEAAwEAAAAAAAAAAAAAAAAAAAQGAf/EACMRAAIBAAoDAAAAAAAAAAAAAAACAQMEBRQWISMxUlORsdH/2gAMAwEAAhEDEQA/ANJJPRdNyDSMyiVS3baLBR27b2SCVXubqVkfka7TSZsCacwy7wJjnTqiw4oCkXj5Hnvu/sJ3Cr8fZRYstnvnwvwpbzbZ17SyhOSU2BtyBDZOhlz7gA//2Q=="}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Четвёртый этап — разработка"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Тут у QA начинает кипеть работа. Сборки вот-вот поступят на тестирование, в команде прибавление, PM обрывает Zoom, а To Do List уже до Луны и обратно. Самое время показать свою суперсилу и приступить к активным действиям: ниже подсказки, которые помогут в работе на этом этапе.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c8eab73f-5175-5c67-9904-d9c83ed046e6","width":1920,"height":1040,"size":62598,"type":"png","color":"101729","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwMJ/8QAIRAAAgICAgEFAAAAAAAAAAAAAQIDBAURAAYHEiFBcXL/xAAYAQADAQEAAAAAAAAAAAAAAAAABAYBAv/EACIRAAIBAgUFAAAAAAAAAAAAAAABAgMRBAUGFSFSkqHR0v/aAAwDAQACEQMRAD8A0lxHTMV1ypVweIqwQ4+FT6o3uzO+2JLaLsWOyfk86nJzd5GRSjyg9ueOerrbnVcJcIEjAayVjWt/riO34fp8v2Uy1dnCVlVXZT+RZmjQ3EmKKZANB9e+vvjhNEWqVGYs1WIknZJQcAP/2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Релизный поезд. Подходит, когда релиз зависит от двух и более команд. Чтобы тестирование было плавным, нужно заранее продумать использование фича-тоглов.","Выпускать полную фичу. Плюс очевиден: выпускается полноценная работающая функция. Но есть и недостатки — такой релизный цикл подойдёт для спринта длительностью две недели и более, а само тестирование начинается после полноценно выпущенной фичи.
","Выпускать сборки в определённый день. Подходит для любого вида спринта. Выпуск сборки может поставлять как полную фичу, так и частично реализованные функции. По аналогии с релизным поездом нужно использовать фича-тоглы и грамотно планировать время и оценку выпускаемых сборок.
","Выпускать код «по кусочкам». Можно использовать, если нужна быстрая поставка результата. Подойдёт только для коротких спринтов.
","Ежедневный выпуск сборки. Подходит для коротких спринтов и порционной поставки фичей. Но важно внимательно подойти к распределению нагрузки QA — есть риск перегрузиться.
","UAT-тестирование или пользовательская приёмка. Выдаём определённому проценту пользователей возможность протестировать продукт, сокращаем нагрузку на QA и можем получить нестандартные кейсы.
"],"type":"OL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Пятый этап — релиз"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Отдельный вопрос — как и когда готовить тестовую документацию. Договоритесь с клиентом о нужной тестовой документации и о сроках её сдачи (каждый спринт или к концу проекта). Если у клиента нет предпочтений, выбирайте документацию сами, но не забудьте согласовать. Учтите — если это произойдёт к концу проекта, то на QA упадёт большой объём работы, а именно этого мы и пытаемся избежать.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Шестой этап — финализация проекта"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

QA здесь задействованы в трёх основных активностях. Давайте чуть подробнее.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Оформление метрик по проекту

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Работа с фидбэком от пользователя и клиента

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Важно определиться с тем, кто собирает фидбэк, где вы будете его собирать (в Jira, Slack или Telegram) и какая информация передаётся QA: версия ОС, ID пользователя и т. д. При работе с фидбэком есть риски:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

размытия ответственности, особенно если вы работаете в интеграционной команде;

","

увеличения нагрузки на QA-лида, если процесс передачи фидбэка не урегулирован.

"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Актуализация документации (ПСИ)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Подходим ко встречам с умом"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Есть три подхода к посещению созвонов при условии, что на проекте работает больше одного QA. Показываем в картинках.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"69cb44d9-9fe4-5dbd-a0dc-341cb75455de","width":1920,"height":968,"size":58666,"type":"png","color":"f0f0f0","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwUHCf/EACgQAAECAwUJAQAAAAAAAAAAAAECBAADEQUGEiJRBxUhMUFSVpGV0v/EABgBAAIDAAAAAAAAAAAAAAAAAAAEAwUG/8QAJhEAAAUCAwkAAAAAAAAAAAAAAAECAwQREgUTIRUxUVNVcZOi0f/aAAwDAQACEQMRAD8A0NeXdtB/Zint3LwumryVMBCkyxPJB5jAskaGtOkRuoWtNEKtPtUOQH48Z2+U1mppuuNOvGqdQq3FtY89ffFbfmFsiTzfUhdbWwbp5eVz6KQ2yVwZa6cIdGZB8a+9XuAA/9k="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"32e8b580-294d-5553-96db-6f77c6fcf6dd","width":1920,"height":926,"size":75427,"type":"png","color":"f0f1f0","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAABAYHCf/EACcQAAECBQIFBQAAAAAAAAAAAAECAwAEBhEhBQcSFSIjMTNRYZHR/8QAGAEAAgMAAAAAAAAAAAAAAAAAAAQDBQb/xAAmEQABAwIDCQEAAAAAAAAAAAABAAIEAxEFEhMVQVNVYYGTotHS/9oADAMBAAIRAxEAPwDRao6Z1/TNOD9OVSuRmCoBxTkqJkKHsAtWM5vENZlR4tTdl7XT+HSIkZ5dNo6o3DMWW63AN0sCV3TtnclkfHIW/wBhfQlcX1H1XO1MC5efM78qozHdRwu9Y82VmHll0KWmr+mn6gQv/9k="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"df5e40cb-bfbc-5ec9-839f-c91a312a0572","width":1920,"height":821,"size":39118,"type":"png","color":"f0f1f0","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAQYHCf/EACYQAAEDBAEBCQAAAAAAAAAAAAECAxEABAUGIUEHExQWIzGBkqT/xAAYAQADAQEAAAAAAAAAAAAAAAAABAUDBv/EACkRAAEDAQIPAAAAAAAAAAAAAAEAAgMRBAUGExQhI1NUYXGRkpPB0tP/2gAMAwEAAhEDEQA/ANF9nsdxx+DbuNdzmPx7iVyvxuPXccHiIDySDMdTWMzZXDQuAO8V8hUbrlsEMhN4xOkbTMGuDCDxLXV5JPF72vRzv+rg9R5de4/VS2Kt2sb0n2V3LsFtjm77fiqy+lL6O7fSHEH3SsSD8Gn1yKAYYgeij6ihC//Z"}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Подход стоит применять в работе:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

большой команды — в этом случае он скорее обязателен,

","

в условиях стабильности процессов на проекте,

","

при организации работы с разграничением зон ответственности сотрудников.

"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

QA-лиды, как там с нагрузкой в вашей компании?

"}},{"type":"delimiter","cover":false,"hidden":false,"anchor":"","data":{"type":"default"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Над материалом работали:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

текст — Настя Корень, Оля Никитина, Ксюша Сергеева,

","

редактура — Алина Ладыгина, Виталик Балашов,

","

иллюстрации — Юля Ефимова.

"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Чтобы ничего не пропустить, следи за развитием цифры вместе с нами:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["red_mad_news","Design Jam","red_mad_dev","red_mad_product","LinkedIn","VK"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Да пребудет с тобой сила роботов! 🤖

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#red_mad_robot #qa #qaengineer

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":1,"favorites":2,"reposts":0,"views":1052,"hits":313,"reads":null,"online":0},"dateFavorite":0,"hitsCount":313,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/dev/1129678-byt-qa-lidom-opyt-robotov-v-raspredelenii-nagruzki-testirovshikov","author":{"id":199486,"name":"red_mad_robot","nickname":"redmadrobot","description":null,"uri":"/redmadrobot","avatar":{"type":"image","data":{"uuid":"83ed1542-21f4-56b5-b12a-cd79d304faf1","width":800,"height":800,"size":4367,"type":"png","color":"fc0404","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"7de9426c-bd16-505a-9f51-85df0f5e5eea","width":2014,"height":545,"size":236236,"type":"png","color":"b6b8ba","hash":"","external_service":[]}},"cover_y":55},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":5223114,"userId":199486,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5223114"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1599027,"userId":199486,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1599027"},{"title":"5 лет на vc.ru","code":"registration_5_years","description":"Провёл 5 лет вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","formats":{"glb":"https://static.vc.ru/achievements/whale.glb","usdz":"https://static.vc.ru/achievements/whale.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.533203125,"textY":0.658203125,"logoX":0.533203125,"logoY":0.77734375,"logoXNoText":0.4375,"logoYNoText":0.66015625},"id":372319,"userId":199486,"count":0,"shareImage":"https://api.vc.ru/achievements/share/372319"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":"1ee4281e-b189-6120-a381-4c857ffff841","isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":true,"isPro":false,"yandexMetricaId":null,"badge":"verified","isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":235819,"name":"Разработка","description":"Сообщество разработчиков: публикации о личном опыте, выдающиеся приёмы при решении рутинных задач, полезные материалы для профессионального роста.","uri":"/dev","avatar":{"type":"image","data":{"uuid":"fef5b5fb-e488-5b7f-8445-e3a26a910b44","width":1200,"height":1200,"size":7757,"type":"png","color":"343434","hash":"04042b2b1c1000","external_service":[]}},"cover":{"type":"image","data":{"uuid":"2a214cc5-35cc-58ca-bc07-fc1c892d2101","width":960,"height":280,"size":177,"type":"png","color":"343434","hash":"","external_service":[]}},"lastModificationDate":1642411346,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"dev","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":3}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":891261,"customUri":null,"subsiteId":1188929,"title":"Десять лет вдохновения и обучения: как Stepik праздновал юбилей","date":1698239737,"dateModified":1698239737,"blocks":[{"type":"media","cover":true,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"18d383b4-bb33-57fd-a343-bdf4550c12de","width":5501,"height":2055,"size":452240,"type":"png","color":"040404","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABQAJ/8QAHhAAAgICAgMAAAAAAAAAAAAAARECAwAEEkEhInH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFxEBAQEBAAAAAAAAAAAAAAAAAAERIf/aAAwDAQACEQMRAD8AywFOsaZSG2rIv1lAqQ6RD8/Vibb0JUV7xorMNfQMeARkK2Qu2W8AfAsD/9k="}}}]}},{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Сентябрь 2023 года на Stepik имеет символическое значение. Для нас это был не только первый месяц нового времени года или начало учёбы для школьников и студентов, а в первую очередь дата, когда нашей платформе исполнилось 10 лет! Это не просто юбилей, это повод взглянуть на долгий путь, который преодолел маркетплейс знаний. Поэтому сегодня хотим поделиться теми числами и историями, которые делают Stepik таким особенным.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Рождение и первые шаги

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Задолго до того, как Stepik стал известной образовательной платформой, он начал свой путь конструктором открытых онлайн-курсов. Тогда ресурс носил немного другое название (Stepic до 2016 года), но уже на период открытия выделялся своей основной фишкой — «шагами» (steps).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Важные цифры и достижения

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Более 1 млн пользователей в год: именно столько зарегистрировалось на платформе.","Более 8 млн. зарегистрированных пользователей: Это невероятное число, свидетельствующее о популярности и доверии, которое платформа получила со всего мира.","22 550 бесплатных курсов: Мы уделяем особое внимание бесплатным образовательным ресурсам, чтобы сделать знания доступными для каждого.","2 219 платных курсов: В нашем арсенале также много платных курсов, предоставляющих глубокое и профессиональное обучение.","1573 курса имеют аудиторию больше 1000 учеников: Эти курсы пользуются популярностью среди студентов, и они объединяют тысячи учеников, стремящихся к новым знаниям и навыкам.","Учащиеся Stepik живут в 96 странах: Образование не имеет границ, и Stepik стал связующим звеном для студентов по всему миру.","282 951 отзыв к курсам: Реальные истории успеха и полезные отзывы помогли создать вдохновляющее образовательное сообщество.","8 143 793 комментария: Обсуждения и совместное обучение делают обучение на Stepik интересным и вовлекающим.","2 151 045 сертификатов: Такое число сертификатов выдано, что является подтверждением успешного прохождения курсов и помогают в карьерном росте.","1 057 147 256 решений отправлено пользователями: Огромное количество заданий решено нашими студентами, и это только начало!"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

Основы статистики: курс не только погрузил более 250 тысяч человек в мир статистики, как это следует из названия, но и много людей узнали про нас именно отсюда :)

","

Программирование на Python: классика Stepik, взрастившая и вдохновившая тысячи и тысячи программистов на работу в IT (а ещё обучила питону половину сотрудников самого Stepik).

","Функциональное программирование на языке Haskell: любимейший курс второй половины нашей команды, идеальный выход из «зоны комфорта».","Основы программирования: идеальное начало для тех, кто хочет освоить С#, курс заставляет много думать. И даже если вы давно его прошли, проверьте задачи, их список постоянно обновляется.","Пакет SQL курсов: первая на Stepik и одна из лучших специализаций по SQL в интернете.","Поколение Python: настоящая флагманская серия курсов про Python, которую просто обожают студенты и на которую пытаются равняться другие преподаватели. Она постоянно пополняется (например, совсем недавно вышла 4-я часть: \"Поколение Python\": ООП!).","

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

","

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

","

Программирование на Golang: курс, созданный лучшими учащимися Stepik.

","

СОТОЧКА ПО РУССКОМУ: один из самых лучших курсов по русскому языку для подготовки к ЕГЭ, если вы, конечно, хотите сдать на 100 баллов.

","

Пакет SQL курсов: первая на Stepik и одна из лучших специализаций по SQL в интернете.

","Создание курса на Stepik и Создание платного курса на Stepik: наши курсы для авторов, присоединяйтесь к рядам наших преподавателей!"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сертификаты теперь и на английском: Эта фича относится к рубрике «вы просили, мы сделали». Теперь, независимо от того, где вы находитесь, все наши курсы поддерживают выдачу сертификата на как на русском, так и на английском. Язык можно выбрать на странице сертификата. Напомним, что получить его могут все зарегистрированные пользователи, набравшие необходимое количество баллов в онлайн-курсе с выдачей сертификатов. Проверить выдается сертификат Stepik в выбранном вами обучении можно на его промо странице.

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

Ответы на отзывы: А ещё некоторое время назад у авторов появилась другая классная возможность — отвечать на отзывы на курс.

Рейтинги: Мы вернули рейтинг пользователей, который вас так мотивировал двигаться вперёд. При желании вы можете узнать действующий ТОП по знаниям и по репутации и, возможно, даже найти там своё имя, если вы входите в список 1000 самых активных пользователей :)

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Курсы с историей

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот так, например, озаглавил свои первые шаги в качестве преподавателя, Александра Куликова, автор таких курсов, как: Алгоритмические задачи с собеседований, Алгоритмы: теория и практика. Методы, и Алгоритмы: теория и практика. Структуры данных:

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

«Первый блин комом» — это очень мягкое описание того, что у меня в итоге получилось. Я наступил на все грабли, на которые можно было наступить.

Некоторые видосы у меня были двадцатиминутными. Чуть ли не во всех моя рожа занимала весь экран. К теоретическим задачам пришлось прикрутить peer review проверку (было понятно, что слушателей на курсе будет много и что я физически не смогу сам у всех проверить решения). И это совсем не работало: слушатели с самой разной математической подготовкой сдавали решения и проверяли их друг у друга; в комментариях было очень много недовольства.

","subline1":"Полную историю Александра Куликова можно прочесть здесь"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Так, например, Пётр Михалевский, автор Легкого старта в Java. Вводный курс для чайников, создавал свой курс:

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Штош. Как говорится, лучший способ изучить что-нибудь – объяснить это другим. Решено – я создал курс “Лёгкий старт в Java. Вводный курс для чайников”, ориентируясь на высокий стандарты, заданные Тимуром Гуевым и его «Поколением Python».

И курс выстрелил. Больше года он входил в десятку самых популярных курсов на Степике, а всего на него записалось более 40 тысяч студентов. Такого успеха я не ожидал, и был весьма горд собой. Более того, в процессе создания курса я понял, что Java мне нравится гораздо больше, чем Python.

","subline1":"Полный текст истории Петра Михалевского вы можете найти здесь."}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ну а теперь от программирования перейдём к тестированию. За последние два года количество курсов по QA на Stepik значительно возросло. Но как уверяет Давид Согоян, автор Тестирование REST API в Postman – легкий старт в автоматизацию. Его вдохновило на создание собственного курса как раз отсутствие такого обучающего материала на платформе, который полноценно и последовательно раскрывал бы про API, HTTP, REST, JSON, JSON-Schema, авторизацию и аутентификацию. Давид взялся за дело и вот каких результатов он достиг:

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

","subline1":"Остальные кейсы от Давида Согояна вы сможете узнать здесь"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как мы не раз повторяли, есть много вещей, которые вдохновляют наших авторов создавать обучение на Stepik. Это и желание поделиться своей экспертизой, и ваши отклики. И Екатерина Закусова, автор курса Активный Английский для продолжающих (А2), не исключение. Она рассказала, как вполне обычные вещи помогают преодолеть трудности на пути к преподаванию, а иногда даже привнести что-то новое в свои уроки:

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Я обожаю сидеть на кухне. Можно сказать, что кухня — это мой второй дом, как бы дом внутри дома. Здесь я принимаю гостей, здесь я рыдаю, если что-то не получается, здесь я смотрю в окно, говоря знаменитое «Вот такие дела, ребята…»

Поэтому нет ничего удивительного в том, что свои авторские курсы английского языка я начала писать здесь, на кухне. Из доступного оборудования был только телефон и 2 кастрюли, поставленные друг на друга. Конструкция эта была неустойчивая и мне требовалось несколько дублей, чтобы снять видеоурок целиком. С одной стороны сижу я и объясняю на камеру Complex Object, а с другой стороны врубается холодильник «дррррр» и видео опять идёт в утиль. В том числе поэтому мои уроки построены так, чтобы дать максимум информации за 2, а то и за 1,5 минуты. В ход объяснений шло всё: чашки, ложки, даже молоток для отбивных засветился в уроке про Past Modals.

","subline1":"Полная история успеха Екатерины Закусовой расположена по этой ссылке."}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

#онлайнкурсы #онлайнобучение #программирование #python #java #образование #алгоритмы #английский #qaengineer #sql #haskell #статистика

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":0,"reposts":0,"views":270,"hits":194,"reads":null,"online":0},"dateFavorite":0,"hitsCount":194,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/education/891261-desyat-let-vdohnoveniya-i-obucheniya-kak-stepik-prazdnoval-yubilei","author":{"id":1188929,"name":"Stepik","nickname":null,"description":"Stepik (stepik.org) – образовательная платформа, маркетплейс онлайн-курсов и конструктор для создания онлайн-курсов вузами, преподавателями и компаниями.","uri":"","avatar":{"type":"image","data":{"uuid":"893e62ab-f3e3-5671-9760-5a7c604a80f0","width":2946,"height":2946,"size":322387,"type":"png","color":"040405","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACAID/8QAIRAAAgICAgEFAAAAAAAAAAAAAQMCBAURAAcGCCFBUWH/xAAXAQADAQAAAAAAAAAAAAAAAAABAgME/8QAIBEAAgIBAwUAAAAAAAAAAAAAAQIAEQMEIWESIjFRsf/aAAwDAQACEQMRAD8AL/p36w6P7R6lZ4jnclXx+UdfjezWcFdbMhj1wEtBZYYrr0lrjJrmzkZMkYLXHfNuXSBcK5sTdQItqB7TZFH7KNjpQym/fEKOQRWq37NanbFpCXTWp4iYhsBIgTAPuNjR1+8xSczXYeqE1KcyEGjU4xkQJD6I+eMHZQVB2PnmGyNpHFgn/9k="}},"cover":{"cover":{"type":"image","data":{"uuid":"20c359cf-7d6e-5230-bc15-04cd7ea24e8f","width":2000,"height":700,"size":30503,"type":"png","color":"6ac76b","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4255250,"userId":1188929,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4255250"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":631716,"userId":1188929,"count":0,"shareImage":"https://api.vc.ru/achievements/share/631716"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":371372,"name":"Образование","description":"Поиск лучших онлайн-курсов: vc.ru/courses/","uri":"/education","avatar":{"type":"image","data":{"uuid":"77b81b4d-da8b-5bf8-b53a-8747d5290785","width":1200,"height":1200,"size":280343,"type":"png","color":"f7e1d9","hash":"1060606060602010","external_service":[]}},"cover":{"type":"image","data":{"uuid":"ae14be38-2bcb-595d-8e0e-949ebe55c7df","width":960,"height":280,"size":177,"type":"png","color":"fce4dc","hash":"","external_service":[]}},"lastModificationDate":1602859949,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"education","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":2}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":809038,"customUri":null,"subsiteId":1188929,"title":"10 лучших онлайн-курсов на Stepik","date":1692971082,"dateModified":1692971082,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

За десять лет своего развития платформа Stepik стала одним из ключевых игроков в области дистанционного обучения. Начиная свою историю как бесплатный ресурс, предоставляющий доступ к массовым открытым онлайн-курсам (МООК), сайт трансформировался в масштабный образовательный проект с отличными платными программами. И именно об этом мы сегодня хотим поговорить.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"4adb7c67-90e4-5cd6-9fa4-edd05fc7f1c8","width":4000,"height":2089,"size":12029748,"type":"png","color":"3f3937","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABwj/xAAmEAABBAEDAgcBAAAAAAAAAAABAgMEBQYABxESQQgTISIxMlJh/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgME/8QAIREAAQMDBAMAAAAAAAAAAAAAAQACAxESIQQiMUEygaH/2gAMAwEAAhEDEQA/AFnYrLsMqcDzrA9lcnv14/j8N+dWGTEkIEl1xCeEMreSlQdKgsADqHoDwO6EMEbWOYeMuHtIySSE3d4BUiyfEJVCQ6Ju3m4bMjrV5rZgclC+fcn69jyNTs0x7PxXvmCV7qwn1O2s+TVzpEN5S2wXI7qm1Ec/HKSDrMzwTI3qG7i7uTbzibeaSZLpJMhf6P8AdUoEKlf/2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В 2019 году Stepik впервые подошёл к идее платных курсов. На тот момент платформа уже завоевала внимание широкого круга пользователей с различными интересами и потребностями, а запрос на качественный образовательный контент стал заметно расти. Эта эволюция происходила сразу по ряду причин, включая интеграцию технологий в образование, актуальность принципа lifelong learning и стремление обеспечить равные образовательные возможности для всех. Поэтому одно из решений Stepik для поиска новой мотивации авторам заключалось в помощи создания платных онлайн-курсов. Так курсы, помимо основной своей цели — формирования необходимых знаний и умений — стали источником дополнительного дохода для тех, кто создаёт.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

\"Поколение Python\": курс для профессионалов — победитель конкурса Stepik Awards 2022 в номинации «Лучший платный курс».

","

СОТОЧКА ПО РУССКОМУ: помощник в подготовке к ЕГЭ 2024 — лучший помощник в подготовке к ЕГЭ по русскому языку.

","

АА - Активный Английский от Екатерины Зак для продолжающих (А2) — представьте, что сидите вы на кухне и говорите «Катюха, а объясни-ка мне английский!», и Екатерина Закусова объясняет доступно, просто и легко.

","Тестирование ПО с Нуля до Специалиста — вся базовая теория: типы и методы тестирования, техники тест-дизайна, жизненный разработки и тестирования программного продукта и ничего лишнего.","Базовые навыки Excel — эти знания ускорят выполнение рутинных задач и сэкономят тысячи часов ценного времени.","Junior QA / Инженер по тестированию ПО — вход в профессию тестировщика ПО с нуля с грамотной структурированной теорией и практическими упражнениями на их закрепление.","Основы программирования — один из первых платных курсов на Stepik, посвящённый базовым понятиям программирования: типам данных, операторам, переменным, условиям, циклам и так далее.","Информационное моделирование зданий — посвящён изучению технологии BIM на примере программы Autodesk Revit Architecture.","Пакет SQL курсов — пакетное предложение, из трёх курсов от самых основ в мир транзакций, хранимых процедур, триггеров и оконных функций.","Японский 101: письменность и произношение — в американских системах нумерации курсов число 101 используется для курса на уровне начинающего, так и тут вы научитесь азам японской письменности и произношения."],"type":"UL"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"1: \"Поколение Python\": курс для профессионалов","image":{"type":"image","data":{"uuid":"cc885692-2417-52c7-83eb-fcb7c63b5e7d","width":1921,"height":1081,"size":25491,"type":"png","color":"9bbbb3","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAgQICf/EACIQAAIBAwQCAwAAAAAAAAAAAAECAwQFIQAGERITUSIjcf/EABgBAAMBAQAAAAAAAAAAAAAAAAADBAEF/8QAHxEAAQQCAgMAAAAAAAAAAAAAAQACAxEEURIxEyGR/9oADAMBAAIRAxEAPwDS2nnvNuEssGzqSmDDs7JVxrz+4GkQYWNikmBobfdCrRJkTygeSzWylpd++KV4mpreGRipBucIII951VxG1OZwNfUdV9tyr/L8+khC9s9QIwRx6znWDpB9uKmivkkeuqHeRmZpXJJPJJ5OdOC4bibK/9k="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как и в прошлый раз, этот чарт не может начинаться ни с какого другого курса, кроме как нашего главного бестселлера — победителя конкурса Stepik Awards 2022 в номинации «Лучший платный курс» поколения Python. А вообще, если вдруг вы пропустили, то это целая серия курсов про один из самых популярных и востребованных языков программирования!

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОРЫ: преподаватели онлайн-школы по математике и информатике BEEGEEK.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: в курсе — 75 уроков, 786 тестов и 397 интерактивных задач. Наш алгоритм подсчитывает, что всё это можно пройти за 156 часов, а сам автор предлагает выделить 10 часов в неделю для полного погружения в языковую среду. Готовьтесь, будет много математики.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"2: СОТОЧКА ПО РУССКОМУ: помощник в подготовке к ЕГЭ 2024","image":{"type":"image","data":{"uuid":"2941502e-e7f3-502f-9253-b47110b20db8","width":1921,"height":1081,"size":58076,"type":"png","color":"9bbbb4","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAQFCf/EACMQAAEDAwIHAAAAAAAAAAAAAAECAxEABAUGMRIVIUFRcZL/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAgP/xAAdEQACAQQDAAAAAAAAAAAAAAAAAQIDEVGRISIj/9oADAMBAAIRAxEAPwDS13K60aeDHIbVckAOIcUUCfJ36eqOUE7c6M/TC2Ni41ZA4sVj57xcq3+arqL1MFupNAoD/9k="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОР: Ляйсан Хутова, профессиональный репетитор по русскому языку

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: 303 урока, 26 часов 37 минут видео и 2 458 тестов. Самый быстрый ученик прошёл его 54 часа, но лучше закладывать ещё больше времени.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОМУ ПОДОЙДЁТ: одиннадцатиклассникам и всем желающим сдавать ЕГЭ по русскому языку в ближайшее время. Курс адаптируется и обновляется к каждому сезону ЕГЭ.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"3: АА - Активный Английский от Екатерины Зак для продолжающих (А2)","image":{"type":"image","data":{"uuid":"a15a6076-e407-59f0-ad77-3830b86c0d4c","width":1921,"height":1081,"size":62374,"type":"png","color":"9bbbb4","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAABAUGCf/EACMQAAIBAwQBBQAAAAAAAAAAAAECAwAEBQYREiEHIjFBUYH/xAAZAQACAwEAAAAAAAAAAAAAAAAGBwABAgP/xAAjEQABAwIFBQAAAAAAAAAAAAABAAIDElEEBQYhMREiMkHB/9oADAMBAAIRAxEAPwDSibUerUmZItKNJGPZ+RG/5WgG+yuRe/rs3ZFR5bPtGrSYQK5ALLwY7H5FTturqfZJfGl1c3M+SNxcSyndD63Ld9/dLjQk8s8mIMri7x5JN0U5/GyNsdAA5+K7pioaX//Z"}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОР: Екатерина Закусова, профессиональный лингвист со степенью MBAE High Business School in Bodo

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: 15 уроков, более 2 часов видео и 80 тестов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОМУ ПОДОЙДЁТ: взрослым, студентам и школьникам

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Это идеальный выбор для тех, кто уже имеет начальный уровень английского, примерно А2, и хочет преодолеть языковой барьер. С ним вы не только углубите свои грамматические и лексические знания, но и сможете активно использовать их в разговорной практике. Так что, если вы давно хотите «левелапнуться» в английском, попробуйте курс «АА - Активный Английский от Екатерины Зак».

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"4: Тестирование ПО с Нуля до Специалиста","image":{"type":"image","data":{"uuid":"97a715ec-dc97-5104-81b2-cdae5ebf5354","width":1921,"height":1081,"size":24590,"type":"png","color":"9bbbb4","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABQAJ/8QAHxAAAQQCAgMAAAAAAAAAAAAAAgEDBBEABQYhFUGB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAHREAAgICAwEAAAAAAAAAAAAAAAECEQNREiEiMf/aAAwDAQACEQMRAD8A0yjch3zjTJSeHS2nDAScFHwJAJU7S/dYx+opy6eiZHwm4xVq/uxAZW0NELwoJaXRSBv71lpGbehHIbLAP//Z"}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вам стоит обратить внимание на этот курс, если вы планируете сменить профессию и начать свою карьеру в IT или ищете качественный материал для обучения по профессии QA Engineer.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОР: Алекс Смит, опытный тестировщик крупных финансовых компаний с навыками ручного тестирования, работы с базами данных и тестированием API, а также построением собственных проектов по автоматизации UI и API.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: 83 урока, более 16 часов видео, 108 тестов и 9 интерактивных задач.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОМУ ПОДОЙДЁТ: тем, кто очень хочет быстро освоить профессию тестировщика ПО (QA Engineer).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"5: Базовые навыки Excel","image":{"type":"image","data":{"uuid":"87443095-4c85-512b-bc5e-756c2e106998","width":1921,"height":1081,"size":22783,"type":"png","color":"9cbbb4","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Курс по одной из самых популярных программ для визуализации и анализа данных — Excel. Для многих он также является отправной точкой в мир аналитики, ведь там можно собирать, преобразовывать, автоматизировать вычисления и выполнять ещё ряд других полезных и необходимых в работе задач, которым вы и научитесь с «Базовыми навыками Excel».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОР: SF Education — онлайн-университет профессий и навыков в области финансов, аналитики, бизнеса и IT.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: 29 уроков, 5 часов видео, 18 тестов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОМУ ПОДОЙДЁТ: абсолютно каждому, ведь Excel нужен как студентам и новичкам, так и бухгалтерам, экономистам, маркетологам и аналитикам.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"6: Junior QA / Инженер по тестированию ПО","image":{"type":"image","data":{"uuid":"eab46669-a13d-58c1-a43c-df11e50aa747","width":1921,"height":1081,"size":16778,"type":"png","color":"9cbbb4","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAQICf/EACMQAAEDAwIHAAAAAAAAAAAAAAIAAQMEBREGIQcXMVNhlNP/xAAXAQEBAQEAAAAAAAAAAAAAAAAAAwIF/8QAHxEAAgECBwAAAAAAAAAAAAAAAAECEaEDBBIUIVHR/9oADAMBAAIRAxEAPwDSKTiJaISAKQaEocNnNypwId8bCxO3TytRw1FUXBB5mLda3QxzF0734vcpvqmhjcQ7uvSWlY4IID//2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОР: Татьяна Овчинникова, преподаватель IT-курсов для детей и взрослых по направлениям: «HTML и CSS», «Теория тестирование ПО» и «Компьютерные сети».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: 34 урока, 152 теста. Нагрузка рассчитана на ежедневное обучение не менее 1-го часа в день.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОМУ ПОДОЙДЁТ: новичкам, которые только знакомятся с тестированием или уже что-то знают о тестировании ПО, но не понимают, как свои знания применять.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"7: Основы программирования","image":{"type":"image","data":{"uuid":"30d4f2f7-e7ed-583b-8159-a56447a47ae6","width":1921,"height":1081,"size":22222,"type":"png","color":"9cbbb3","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwQICf/EACMQAAICAQMDBQAAAAAAAAAAAAECAxEEAAUhBjFREhMiIzL/xAAZAQABBQAAAAAAAAAAAAAAAAADAAECBAX/xAAgEQABBAEEAwAAAAAAAAAAAAABAAIEEQMSEzFRIUGx/9oADAMBAAIRAxEAPwDTV5cza5mbbuloo4GNzS+/FEaB71fPHkjQI8ONGs4WBt80KtPlkZslaySB2UN+udjjdo5cvHR1JVlOXDakdx+tWdKBvs7+JTJ+3O3FpfmY5XCFufTUYIrxR50vSi7ySpmzpZHzch3kZmaVySTZJs86MFhu5K//2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Этот курс является победителем премии Stepik Awards 2019 в номинации «Лучший курс». Представляет собой полный путеводитель в мир программирования, где вы познакомитесь с основополагающими концепциями. Здесь будут раскрываться все нюансы работы с типами данных, операторами, переменными и другими важными элементами кодинга на языке C#. Этот путь подходит всем, кто только начинает своё знакомство с программированием.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОР: Иосиф Дзеранов, программист, основатель и преподаватель онлайн-школы BEEGEEK.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: 38 уроков, около 2-х часов видео, 123 теста и целых 217 интерактивных задач.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОМУ ПОДОЙДЁТ: тем, кто хочет научиться программировать или хочет понять для себя, насколько это его, а ещё тем, кто решил сменить работу или найти интересную подработку.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"8: Информационное моделирование зданий","image":{"type":"image","data":{"uuid":"354400fa-1ba1-59ae-b41b-e1969d02afbf","width":1921,"height":1081,"size":23609,"type":"png","color":"9bbbb4","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAQUGCf/EACUQAAEDAgMJAAAAAAAAAAAAAAECAwQABgURIQcUFSIyUWRxkf/EABgBAAMBAQAAAAAAAAAAAAAAAAIGBwAB/8QAJBEAAQMCBAcAAAAAAAAAAAAAAQACAwQxBRESUQYTISJBUoH/2gAMAwEAAhEDEQA/ANNOO3Gogos58JOXXLaCh7AzHwms3IgE9ELy5riGjMbojGbgIBNoPAnym6727odTvVINm0uVJmYlvEl13RB51lWuZ71N+BqiaeoqOa8utck+TumrH42Rxx6ABe3xXtUdLK//2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Программа Autodesk Revit Architecture является ключом к освоению мощных возможностей BIM. А помочь разобраться и овладеть этим инструментом будущего архитектуры, сможет именно этот курс. В нём обучение начинается с основ: вы познакомитесь с интерфейсом программы, освоите создание элементов, научитесь работать с видами и разрезами, исследовать параметрический дизайн и многое другое.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОРЫ: Альберт Сумин — архитектор, сертифицированный специалист Autodesk по программе Revit Architecture, Сергей Швыдко — архитектор, сотрудник Академии БИМ, Максим Степанников — архитектор, сотрудник Академии БИМ.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: 37 уроков, более 33-х часов видео, 96 тестов. Среднее время, затрачиваемое на прохождение курса, составляет 61 час.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"9: Пакет SQL курсов","image":{"type":"image","data":{"uuid":"7b2e8153-f7ea-5dc7-bce2-c8cb7324c2cf","width":1921,"height":1081,"size":20253,"type":"png","color":"9bbbb3","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAwAJ/8QAHxAAAgICAQUAAAAAAAAAAAAAAQIAEQMEBRITIUFx/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAC/8QAGREBAAIDAAAAAAAAAAAAAAAAAAERAiFR/9oADAMBAAIRAxEAPwDUZ9jlQ7BOMxMoJCsdmrHo10+I6ZvLhky7ZRS+qisQLHduj9qBuTyKkn//2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОР: Компания Shultais Education, основанная в 2015 году профессиональным разработчиком и преподавателем Никитой Шультайсом.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: 105 уроков, более 8 часов видео, 67 тестов и 308 интерактивных задач.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОМУ ПОДОЙДЁТ: рассчитан на широкую аудиторию слушателей и не требует специализированных знаний ни в программировании, ни в базах данных. Будет полезен для начинающих разработчиков, маркетологов, аналитиков, продуктологов и экономистов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"10: Японский 101: письменность и произношение","image":{"type":"image","data":{"uuid":"47cbdcac-5d9c-57b2-b17c-2fe1feed0fe8","width":1921,"height":1081,"size":24124,"type":"png","color":"9bbbb4","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAQFCf/EACEQAAEDAwQDAAAAAAAAAAAAAAEAAgMEBREGFVVxkqHS/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQIA/8QAHREAAgIBBQAAAAAAAAAAAAAAAAECEaESIUFRYf/aAAwDAQACEQMRAD8A03lvF/bKWxaXkdGDgE1LA4joZHtDlFbN4ZFz4WUN7lWcBW+cP2qr0dT6KKCgWMf/2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

АВТОР: Наталия Соломкина, лингвист, преподаватель и переводчик японского.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ПРОДОЛЖИТЕЛЬНОСТЬ КУРСА: 12 уроков, полчаса видео, 46 тестов и 8 интерактивных задач. Алгоритм считает, что средняя скорость прохождения курса составит 4 часа.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОМУ ПОДОЙДЁТ: всем, кто давно мечтал выучить язык Страны восходящего солнца

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Курс фокусируется на подробном объяснении о том, как работает японский язык. Благодаря ему, вы начнёте понимать хирагану, катакану и некоторые иероглифы. Главная цель программы — ознакомиться с фундаментальными аспектами японского языка, включая его структуру, чтение и письменность и соблюдении правил базовой грамматики.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Также не забывайте, что у Stepik есть очень удобное и комфортное для учёбы мобильное приложение. С ним вы можете учиться практически из любой точки мира! Тем более, что оно доступно сразу в 3 магазинах — Google Play, App Store и RuStore.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#stepik #программирование #онлайнкурсы #онлайнобучение #python #егэрусский #английскийязык #excel #тестирование #qaengineer #revit #sql #японскийязык

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":1,"favorites":0,"reposts":0,"views":271,"hits":7488,"reads":null,"online":0},"dateFavorite":0,"hitsCount":7488,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1188929/809038-10-luchshih-onlain-kursov-na-stepik","author":{"id":1188929,"name":"Stepik","nickname":null,"description":"Stepik (stepik.org) – образовательная платформа, маркетплейс онлайн-курсов и конструктор для создания онлайн-курсов вузами, преподавателями и компаниями.","uri":"","avatar":{"type":"image","data":{"uuid":"893e62ab-f3e3-5671-9760-5a7c604a80f0","width":2946,"height":2946,"size":322387,"type":"png","color":"040405","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACAID/8QAIRAAAgICAgEFAAAAAAAAAAAAAQMCBAURAAcGCCFBUWH/xAAXAQADAQAAAAAAAAAAAAAAAAABAgME/8QAIBEAAgIBAwUAAAAAAAAAAAAAAQIAEQMEIWESIjFRsf/aAAwDAQACEQMRAD8AL/p36w6P7R6lZ4jnclXx+UdfjezWcFdbMhj1wEtBZYYrr0lrjJrmzkZMkYLXHfNuXSBcK5sTdQItqB7TZFH7KNjpQym/fEKOQRWq37NanbFpCXTWp4iYhsBIgTAPuNjR1+8xSczXYeqE1KcyEGjU4xkQJD6I+eMHZQVB2PnmGyNpHFgn/9k="}},"cover":{"cover":{"type":"image","data":{"uuid":"20c359cf-7d6e-5230-bc15-04cd7ea24e8f","width":2000,"height":700,"size":30503,"type":"png","color":"6ac76b","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4255250,"userId":1188929,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4255250"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":631716,"userId":1188929,"count":0,"shareImage":"https://api.vc.ru/achievements/share/631716"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1188929,"name":"Stepik","nickname":null,"description":"Stepik (stepik.org) – образовательная платформа, маркетплейс онлайн-курсов и конструктор для создания онлайн-курсов вузами, преподавателями и компаниями.","uri":"","avatar":{"type":"image","data":{"uuid":"893e62ab-f3e3-5671-9760-5a7c604a80f0","width":2946,"height":2946,"size":322387,"type":"png","color":"040405","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACAID/8QAIRAAAgICAgEFAAAAAAAAAAAAAQMCBAURAAcGCCFBUWH/xAAXAQADAQAAAAAAAAAAAAAAAAABAgME/8QAIBEAAgIBAwUAAAAAAAAAAAAAAQIAEQMEIWESIjFRsf/aAAwDAQACEQMRAD8AL/p36w6P7R6lZ4jnclXx+UdfjezWcFdbMhj1wEtBZYYrr0lrjJrmzkZMkYLXHfNuXSBcK5sTdQItqB7TZFH7KNjpQym/fEKOQRWq37NanbFpCXTWp4iYhsBIgTAPuNjR1+8xSczXYeqE1KcyEGjU4xkQJD6I+eMHZQVB2PnmGyNpHFgn/9k="}},"cover":{"cover":{"type":"image","data":{"uuid":"20c359cf-7d6e-5230-bc15-04cd7ea24e8f","width":2000,"height":700,"size":30503,"type":"png","color":"6ac76b","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4255250,"userId":1188929,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4255250"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":631716,"userId":1188929,"count":0,"shareImage":"https://api.vc.ru/achievements/share/631716"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":4}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":794604,"customUri":null,"subsiteId":1272116,"title":"Как использовать метрики в тестировании, чтобы ускорить релиз цифрового продукта","date":1692009023,"dateModified":1692009023,"blocks":[{"type":"media","cover":true,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"99e1483c-272e-5bd1-8590-68c6dbc75818","width":1920,"height":1200,"size":96716,"type":"png","color":"c298fb","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACAcJ/8QAJBAAAQQBBAEFAQAAAAAAAAAAAQIDBAURAAYhIgcIEhQjMVH/xAAYAQACAwAAAAAAAAAAAAAAAAAFBgMEB//EACURAAEEAQIFBQAAAAAAAAAAAAEAAgMRBCIxBRIhQVFhcpHh4v/aAAwDAQACEQMRAD8AF97s/ZVfNs9gv01E5eqfhWXzRKTkpWG0mLGbbKUr961HrlJSk5JJGdN0+JjRufiua3n0uu/NaWgVdntY6IXHJK+pATW32VRKz0sU8+tiTolLTKYkMNutKXddihSQQT9B5wf7q0zg8Dmghgr3flGRwrKeOYSDqihWdKiTLR1facCm3RwtBAyCD+jSQCQbCi2WuPiuVJleMNnyZMh1556hr3HHHFlSlqMdBKiTySTznWl4s0hgYS47Dv6Im2aShqPyv//Z"}}}]}},{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Метрики в тестировании — пустая трата времени или объективный показатель качества и скорости разработки? Когда применяются и что дают цифровому продукту? Вместе с начальником QA-отдела Fusion Tech постараемся разобраться в этих вопросах и выяснить, какие метрики и как влияют на процесс разработки.

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

QA-метрики — это инструменты, которые помогают в измерении качества программного продукта и в поиске проблемных мест в ходе реализации проекта.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОГДА СТОИТ ИСПОЛЬЗОВАТЬ МЕТРИКИ?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Необходимость внедрения и применения метрик должна определяться каждой отдельной командой на конкретном проекте. Чтобы понять, нужен ли этот инструмент и какой именно, определитесь с результатом, который хочется получить в итоге. Часто в статьях на тему тестирования можно увидеть подобные фразы про метрики: “контролируют процесс QA”, “дают объективные показатели о готовности продукта”, “показывают эффективность команды и отдельного сотрудника” и так далее. Может сложиться впечатление, что метрика — это универсальная серебряная пуля от всех проблем, которая разве что не убивает вампиров и оборотней. Но так ли это на самом деле?

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

ЧЕМ МЕТРИКИ ПОМОГАЮТ ПРОЕКТУ?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Цели сбора метрик:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Анализ работы системы (оценка совокупности метрик, как показатели меняются во времени, мониторинг новых процессов/идей).","Поиск проблемных мест: накопление задач, ожидающих тестирования; количество задач в процессе тестирования; время, затраченное на проведение регресса; количество найденных и закрытых багов; количество отклоненных багов; среднее время исправления багов.","Анализ найденных проблем.
"],"type":"OL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КАКИЕ ПРОБЛЕМЫ МОЖНО ЗАФИКСИРОВАТЬ С ПОМОЩЬЮ МЕТРИК?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1. Низкая пропускная способность*

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

* Пропускная способность — это количество задач, которое проходит через команду разработки за определенный промежуток времени от стадии требований до выхода продукта в релиз.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Допустим, разработчик способен решить 10 задач за 2 недели, тогда у команды тестирования должны быть возможности и ресурсы их обработать. Если QA недостаточно и один сотрудник может протестировать только 3 задачи из 10, то пропускная способность в релиз будет равна 3. И обратная ситуация — если QA способен протестировать 10 задач, а разработчик может закрыть только 3, то КПД (коэффициент полезного действия) останется также на отметке 3. Как в армии на марш-броске: время, за которое подразделение пробежало дистанцию, будут фиксировать по последнему солдату, то есть подразделение (как единая система) в целом будет бежать со скоростью самого медленного бойца.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В подобной ситуации метрики помогают нам зафиксировать тот факт, что у нас где-то образовалась \"пробка\" или, наоборот, есть избыточный ресурс, и по итогу прийти к системному равновесию: 10 задач мы получаем в рамках спринта (1 цикла разработки) и 10 задач поступают в конце в продакшн.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2. Большое количество возвратов задач

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Возвраты проекта от тестировщика к разработчику из-за уточнения требований и найденных ошибок могут стать одной из причин недостаточной пропускной способности. Что будет, если QA вернет на предыдущий этап (создания продукта) слишком много задач с багами? Как минимум, увеличится нагрузка на отдел тестирования в дальнейшем, так как помимо новых задач придется просматривать переделанные.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Возьмем случай из нашей практики: на небольшом проекте QA-инженер перестал справляться с нагрузкой из-за большого количества задач. На проект добавили еще одного, но это облегчило ситуацию ненадолго. В скором времени проблема повторилась, снова появились “пробки”, так как уже два QA отдавали с усердием еще больше задач, которые после корректировки возвращались на тестирование. Стало ясно, что следует подумать над оптимизацией процессов, а не над расширением штата.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3. Слишком длинная петля возвратов

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4. Отсутствие баланса между качеством и пропускной способностью

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Метрики в данном случае помогают распределять и планировать время на тесты более эффективно для выхода новых фичей (функций) без удара по качеству.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КАКИЕ БЫВАЮТ МЕТРИКИ?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Инструменты, которые чаще используются в нашей компании:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Метрика “Очередь”: время накопления задач, ожидающих тестирования."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Помогает планировать ресурсы и предотвращать или убирать заторы на проекте.

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Метрика “Плотность дефектов”: количество дефектов в модуле / общее количество дефектов."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Помогает понять, что требует наибольшего внимания при разработке.

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Метрика “Повторно открытые ошибки”: количество повторно открытых ошибок / общее количество ошибок."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Помогает выявить пробелы в QA и добавить дополнительные сценарии тестирования.

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Метрика “Среднее время жизни дефекта”: время, потраченное на исправление дефектов / количество дефектов."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Метрика “Количество ошибок, найденных на проде”: количество дефектов после релиза / количество дефектов в итерации."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Позволяет понять, насколько стабильно работает продукт после релиза.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

КОРОТКО О ГЛАВНОМ:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Метрики — полезный, но лишь дополнительный инструмент. Они могут подсветить проблему, зафиксировать, в каком месте что-то пошло не так, но не укажут прямо на причину.","Выбранные метрики следует приводить к единому виду, чтобы было легче ориентироваться на показатели прошлого и отслеживать динамику прогресса будущем.","С этой же целью (наблюдение за результативностью действий) необходимо проводить анализ метрик с периодичностью раз в спринт, месяц и так далее.","Не стоит применять этот инструмент для оценки эффективности конкретных людей или внедрять метрики ради метрик, не задавая вопрос: “Что я хочу измерить, и как мне это поможет в работе?”"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"delimiter","cover":false,"hidden":false,"anchor":"","data":{"type":"default"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Новости из мира IT-технологий, о трендах индустрии, бизнес-сервисах и не только — в ТГ-канале или на сайте Fusion Tech.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"osnovaEmbed","cover":false,"hidden":false,"anchor":"","data":{"osnovaEmbed":{"type":"osnovaEmbed","data":{"original_id":718573,"isNotAvailable":false,"title":"Ручное тестирование VS автоматизированное? Или успешный тандем?","description":"Тестирование ПО – важная составляющая любого процесса разработки, которая позволяет контролировать качество информационного продукта в процессе его создания. Чем раньше находятся и исправляются баги, тем меньше требуется денежных затрат заказчика, усилий разработчика и нервных клеток проектного менеджера. Мы во Fusion Tech советуем клиентам выбирать ручное и автоматизированное тестирование одновременно для последовательной проверки качества мобильных и веб-приложений (web UI, API, mobile UI). Такой подход быстрее и дешевле, а также позволяет глубже исследовать продукт в процессе разработки. В чем разница между этими видами тестирования, какие плюсы и минусы у каждого из них, а главное – на каких этапах реализации ПО они подключаются? Об этом и не только читайте в нашей статье.","isEditorial":false,"image":{"type":"image","data":{"uuid":"6c98735b-f374-5517-af1b-447c27b0df05","width":1920,"height":1200,"size":42413,"type":"png","color":"0e101a","hash":"","external_service":[]}},"url":"https://vc.ru/id1272116/718573-ruchnoe-testirovanie-vs-avtomatizirovannoe-ili-uspeshnyi-tandem","blocks":[{"type":"media","cover":true,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"6c98735b-f374-5517-af1b-447c27b0df05","width":1920,"height":1200,"size":42413,"type":"png","color":"0e101a","hash":"","external_service":[]}}}]}},{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Тестирование ПО – важная составляющая любого процесса разработки, которая позволяет контролировать качество информационного продукта в процессе его создания. Чем раньше находятся и исправляются баги, тем меньше требуется денежных затрат заказчика, усилий разработчика и нервных клеток проектного менеджера. Мы во Fusion Tech советуем клиентам выбирать ручное и автоматизированное тестирование одновременно для последовательной проверки качества мобильных и веб-приложений (web UI, API, mobile UI). Такой подход быстрее и дешевле, а также позволяет глубже исследовать продукт в процессе разработки. В чем разница между этими видами тестирования, какие плюсы и минусы у каждого из них, а главное – на каких этапах реализации ПО они подключаются? Об этом и не только читайте в нашей статье.

"}}],"date":1686051871,"author":{"id":1272116,"name":"Fusion Tech","avatar":{"type":"image","data":{"uuid":"37086fce-6f04-5c26-8937-8c5a4a550cfa","width":500,"height":500,"size":2598,"type":"png","color":"040404","hash":"","external_service":[]}}},"subsite":{"id":1272116,"name":"Fusion Tech","avatar":{"type":"image","data":{"uuid":"37086fce-6f04-5c26-8937-8c5a4a550cfa","width":500,"height":500,"size":2598,"type":"png","color":"040404","hash":"","external_service":[]}}},"likes":0,"comments":0,"isBlur":false,"warningFromEditor":null,"warningFromEditorTitle":null}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#qa #qaengineer #тестирование #тестировщик #диджитал #digital #it #fusiontech #softwaredevelopment #testing #метрики

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":2,"reposts":2,"views":336,"hits":224,"reads":null,"online":0},"dateFavorite":0,"hitsCount":224,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/services/794604-kak-ispolzovat-metriki-v-testirovanii-chtoby-uskorit-reliz-cifrovogo-produkta","author":{"id":1272116,"name":"Fusion Tech","nickname":null,"description":"Об опыте развития IT-компании, бизнес-процессах, кейсах и решениях. Веб/мобильная разработка, дизайн, аутстаффинг, аудит проектов: https://fusion-tech.ru/","uri":"","avatar":{"type":"image","data":{"uuid":"37086fce-6f04-5c26-8937-8c5a4a550cfa","width":500,"height":500,"size":2598,"type":"png","color":"040404","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"feff2fed-aa3e-54ca-8826-37887754012f","width":1920,"height":560,"size":73289,"type":"png","color":"040404","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 16 августа 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":5551845,"userId":1272116,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5551845"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4176131,"userId":1272116,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4176131"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":200396,"name":"Сервисы","description":"Новые сервисы, обновления инструментов, опыт использования и полезные приёмы.","uri":"/services","avatar":{"type":"image","data":{"uuid":"158fab2d-76c1-5ed8-898a-76ee48d4c795","width":1200,"height":1200,"size":99571,"type":"png","color":"7cdaea","hash":"08183848d81000","external_service":[]}},"cover":{"type":"image","data":{"uuid":"c3fe3abb-6808-527e-9eb1-2b6bb92ea400","width":3840,"height":1120,"size":19502,"type":"png","color":"7cdcec","hash":"","external_service":[]}},"lastModificationDate":1688995401,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"services","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":11}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":768581,"customUri":null,"subsiteId":1308379,"title":"Собеседование на мобильного тестировщика без опыта","date":1690110155,"dateModified":1690110155,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Про собесы на мобильного тестировщика когда нет опыта.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ниже поделюсь тем что могут ждать от кандидата и как к этому подготовиться.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Хорошей стратегией будет поставить акцент на:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

- Укрепление общей теории тестирования. Да-да, классическая база. Но не спроста так часто можно услышать, что у большинства кандидатов плохая подготовка. Учим SQTB, проходим мок-собесы что бы не быть ходящей википедией, а говорить что-то осмысленное, пусть и простое.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

- Заучи чек-лист по мобильному тестированию. Если нет такого, то напиши мне.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

- Помни, что сначала идёт позитивное тестирование, а потом негативное. Не перепутай.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Уверен, что материал был полезен и интересен. Подписывайся на мой телеграм
Удачи!

"}},{"type":"link","cover":false,"hidden":false,"anchor":"","data":{"link":{"type":"link","data":{"url":"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Ft.me%2FQAMobileApps%3Fref%3Dvc.ru&postId=768581","title":"MobileApps","description":"О мобильной разработке, обновления в ОС Android\\IOS, смартфоны и новости. О курсе для Mobile QA - https://t.me/qacourse YouTube - https://www.youtube.com/@qamobile","image":{"type":"image","data":{"uuid":"0c5ec522-6456-5837-a7a9-efa6a12645d2","width":180,"height":180,"size":4016,"type":"png","color":"26a5e4","hash":"","external_service":[]}},"v":1,"hostname":"t.me"}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#qa #qaengineer #тестирование #тестировщик #мобильноетестирование

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":0,"reposts":0,"views":42,"hits":194,"reads":null,"online":0},"dateFavorite":0,"hitsCount":194,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1308379/768581-sobesedovanie-na-mobilnogo-testirovshika-bez-opyta","author":{"id":1308379,"name":"Владислав Казачек","nickname":null,"description":"Блог от Mobile QA Engineer. От тестировщика для айти-котиков. Делаем мир айти чуточку лучше.","uri":"","avatar":{"type":"image","data":{"uuid":"5e8aa346-d0c9-557c-a711-2377996b1087","width":630,"height":630,"size":126596,"type":"jpg","color":"d4c9b2","hash":"","external_service":[]}},"cover":null,"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 28 сентября 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":5813312,"userId":1308379,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5813312"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4141834,"userId":1308379,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4141834"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1308379,"name":"Владислав Казачек","nickname":null,"description":"Блог от Mobile QA Engineer. От тестировщика для айти-котиков. Делаем мир айти чуточку лучше.","uri":"","avatar":{"type":"image","data":{"uuid":"5e8aa346-d0c9-557c-a711-2377996b1087","width":630,"height":630,"size":126596,"type":"jpg","color":"d4c9b2","hash":"","external_service":[]}},"cover":null,"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 28 сентября 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":5813312,"userId":1308379,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5813312"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4141834,"userId":1308379,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4141834"}],"lastModificationDate":1764908182,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}}],"ogTitle":null,"ogDescription":null,"isAnonymized":true}};