<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Тестирование</title>
    <description>Информация о том, что такое тестирование и о его основных методологиях, а также пособия по организации тестирования в ваших проектах.</description>
    <link>https://tproger.ru/tag/testing</link>
    <atom:link href="https://tproger.ru/tag/testing/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Tue, 29 Sep 2026 00:19:08 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Тестирование</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Как тестировать пуши и диплинки в финансовом приложении</title>
      <link>https://tproger.ru/articles/kak-testirovat-puwi-i-diplinki-v-finansovom-prilozhenii</link>
      <comments>https://tproger.ru/articles/kak-testirovat-puwi-i-diplinki-v-finansovom-prilozhenii?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-testirovat-puwi-i-diplinki-v-finansovom-prilozhenii</guid>
      <description><![CDATA[<p>Разбираем четыре сценария перехода по пушу, повторный вход и недоступный экран. Как проверить диплинки из разных каналов и организовать проверки?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-testirovat-puwi-i-diplinki-v-finansovom-prilozhenii">Как тестировать пуши и диплинки в финансовом приложении</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 18 Sep 2026 07:23:15 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пользователь получает уведомление об изменении цены акции, открывает его, вводит пароль и оказывается на главной странице. Теперь ему приходится искать акцию, о которой только что сообщило приложение. На примерах нашей команды Centicore Group разберём подробности.</p><h2>Куда должен вести пуш</h2><p>Диплинк ведёт на определённый экран приложения — целевую посадочную страницу. Когда такая ссылка приходит в пуше, текст уведомления подсказывает пользователю, что откроется после нажатия.</p><p>Допустим, приложение отправляет уведомление о статусе перевода, из которого должен открываться экран подтверждения этой операции. При нажатии на пуш пользователь рассчитывает сразу увидеть нужный перевод. Если переход заканчивается на главной, человеку приходится самостоятельно восстанавливать путь к операции.</p><p>Поэтому, перед тестированием сопоставьте текст уведомления с целевым экраном и зафиксируйте ожидаемый результат. Во время проверки нужно тестировать, что открылась именно та операция, о которой говорится в сообщении.</p><h2>Как проверить переход при разном состоянии приложения</h2><p>Один и тот же пуш нужно открыть в разных условиях. Например, на момент нажатия приложение полностью закрыто, телефон заблокирован и пользователю ещё предстоит пройти вход. Чтобы разобраться, на каком этапе теряется переход, сначала рассмотрим запуск и возвращение в приложение.</p><ul><li>Приложение закрыто. При холодном старте оно запускается и загружается, после чего должно продолжить переход к экрану из уведомления. Во время проверки проследите, куда пользователь попадает по завершении запуска.</li><li>Приложение работает в фоне. Здесь проверяют возвращение из свёрнутого приложения и открытие целевого экрана. При действующей сессии пользователь должен продолжить работу в приложении; дополнительную перезагрузку при открытии пуша стоит разобрать с командой.</li><li>Телефон заблокирован. Откройте уведомление с экрана блокировки и разблокируйте устройство с помощью Face ID или PIN-кода. После этого маршрут к нужному экрану должен сохраниться.</li><li>Пользователь уже работает в приложении. Полученное уведомление открывают во время активной работы. Проверьте, как переход вписывается в текущую навигацию и вызывает ли он перезагрузку приложения.</li></ul><p>Разблокировка телефона и вход в приложение могут оказаться отдельными этапами одного перехода. Если приложение запрашивает пароль, проверку продолжают до экрана, на который вело уведомление. При потере маршрута зафиксируйте, после какого действия открылся неожиданный экран.</p><h2>Что происходит после повторного входа</h2><p>В инвестиционном приложении сессия может завершаться после некоторого времени бездействия. Тогда пользователь открывает пуш и сначала попадает на экран входа. У команды должны быть согласованные требования к тому, как приложение поведёт себя после ввода пароля.</p><p>Вернёмся к примеру с акцией. Человек получает уведомление о резком росте её цены, открывает его спустя час и проходит повторный вход. Если в этот момент приложение возвращает его на главную, поиск нужной акции приходится начинать заново.</p><p>Чтобы продолжить переход после входа, приложение сохраняет его цель. Приложение и сервер передают сведения о том, какой экран хотел открыть пользователь, и после проверки пароля маршрут продолжается. Такой сценарий проверяют с завершившейся сессией: открывают уведомление, проходят вход и смотрят, какой экран появился.</p><p>Повторный запрос PIN-кода или возврат на главную нужно разбирать с учётом требований безопасности конкретного продукта. Если такое поведение предусмотрено, команда должна понимать, как оно влияет на переход по уведомлению. QA фиксирует результат проверки и обсуждает его с менеджером продукта.</p><p>Проверять нужно и параметры маршрута, передаваемые между приложением и сервером. С помощью отладочного прокси можно попробовать перехватить и изменить эти параметры, затем проверить, как приложение обработало переход. Отдельно нужно определить в требованиях, какие данные маршрута должны очищаться при выходе из аккаунта или удалении приложения, и проверить выполнение этих требований.</p><h2>Что показать, если нужный экран недоступен</h2><p>К моменту открытия уведомления целевой раздел может оказаться недоступен. Например, актив уже исключён из торгов или чат поддержки временно перестал работать. Для каждого случая приложению нужен понятный способ завершить переход.</p><p>На экране актива можно сообщить, что он больше не торгуется. В случае с поддержкой сообщение должно объяснить временную недоступность раздела и предложить вернуться позднее. Команде также нужно определить, куда перенаправить человека, чтобы он мог продолжить работу в приложении с сохранением контекста.</p><p>При тестировании воспроизведите недоступность целевого раздела и откройте ведущую к нему ссылку. Посмотрите, соответствует ли сообщение причине сбоя и куда человек может перейти с этого экрана.</p><p>Плохое интернет-соединение тоже нужно включить в условия проверки: оно может помешать загрузить содержимое после нажатия. Здесь нужно проследить, что происходит с переходом при проблемах с сетью и какое состояние приложения видит пользователь.</p><h2>Как проверить одну ссылку в разных каналах</h2><p>Один диплинк может использоваться в пушах, рекламных баннерах, письмах и СМС. Ссылку также размещают в QR-кодах, социальных сетях и мессенджерах. Команда должна проверить переход из каждого канала, где эта ссылка используется.</p><p>Ошибка может проявляться при открытии баннера: ссылка приводит на другой экран. Проверка этой же ссылки из пуша в таком случае проходит успешно. Чтобы найти проблему, нужно пройти оба пути и сопоставить результат с ожидаемым экраном.</p><p>При проверке сохраняйте связь между источником перехода и его результатом. Если ошибка воспроизводится из баннера, эту деталь нужно зафиксировать вместе с самой ссылкой. Тогда команда сможет повторить тот путь, на котором возникла проблема.</p><p>В проверках участвуют и люди, которые размещают и меняют ссылки. Ссылки из рекламы передают на валидацию продуктовым инженерам, обновления логики пушей согласовывают с аналитиками.</p><h2>Как организовать работу с диплинками</h2><p>Когда ссылки используют разные команды, их удобно собрать в общем реестре. Он помогает найти нужный диплинк и увидеть, для чего тот создан, кто за него отвечает и когда его проверяли. Для ведения реестра подойдёт таблица в Excel или встроенный инструмент сервиса, в котором создаются ссылки.</p><p>В запись о каждом диплинке можно включить следующие поля:</p><ul><li>название или ID диплинка;</li><li>цель перехода;</li><li>тип диплинка;</li><li>параметры;</li><li>статус;</li><li>ответственный;</li><li>дата создания;</li><li>дата последней проверки;</li></ul><p>Когда диплинк перестаёт работать, в реестре можно найти его ответственного и договориться о замене. После изменения логики перехода ссылку проверяют повторно и обновляют дату проверки.</p><p>Подготовленные требования к переходам и реестр ссылок помогут сформулировать задачу для внешней команды QA. <a href="https://centicore.ru/services/software-quality/functional-test/">Centicore Group</a> проводит функциональное тестирование приложений на соответствие требованиям и разрабатывает тестовые сценарии под задачи проекта.</p><h2>Итого</h2><p>Проверку перехода завершают на экране, ради которого пользователь открыл уведомление, с учётом всех промежуточных шагов. Для недоступного раздела заранее согласуют содержание сообщения и дальнейший переход. Эти результаты нужно зафиксировать для каждого условия проверки, включая повторный вход и открытие ссылки из разных каналов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Ловушки формального контроля: когда всё соответствует требованиям, но защищенности больше не становится</title>
      <link>https://tproger.ru/articles/lovuwki-formalnogo-kontrolya-kogda-vsyo-sootvetstvuet-trebovaniya</link>
      <comments>https://tproger.ru/articles/lovuwki-formalnogo-kontrolya-kogda-vsyo-sootvetstvuet-trebovaniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/lovuwki-formalnogo-kontrolya-kogda-vsyo-sootvetstvuet-trebovaniya</guid>
      <description><![CDATA[<p>Ловушки формального контроля в ИБ: почему соответствие требованиям, наличие СЗИ, MFA, SIEM и регламентов не гарантируют реальной защищенности. Разбираем сценарное тестирование, управление доступом, телеметрию, DLP и автоматическое реагирование.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/lovuwki-formalnogo-kontrolya-kogda-vsyo-sootvetstvuet-trebovaniya">Ловушки формального контроля: когда всё соответствует требованиям, но защищенности больше не становится</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 10 Sep 2026 06:27:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Но после первого инцидента выяснялось, что:</p><ul><li>Учетная запись имела многофакторную аутентификацию (что после компрометации сессии значения не имеет).</li><li>SIEM собирал события, но расследование затруднялось тем, что в разных источниках один и тот же пользователь имел разные идентификаторы.</li><li>Доступ сотрудника был вовремя отозван в Active Directory, но остался в одном из SaaS-сервисов.</li><li>Резервное копирование выполнялось ежедневно, но восстановить критичный сервис в установленный RTO невозможно.</li></ul><p>Значит ли это, что мы должны отказываться от формальностей? Нет, конечно. <b>Соответствие требованиям необходимо. Без него невозможно выстроить управление ИБ, тем более в регулируемых отраслях.</b></p><p>Но здесь легко попасть в ловушку формального контроля,</p><p>Ведь соответствие требованиям — это подтверждение того, что определенные правила и процедуры существуют. Требования задают определенный минимальный уровень контроля, но не могут описать всю конкретную инфраструктуру компании, все зависимости между системами, особенности бизнес-процессов и все возможные сценарии атаки.</p><p>Предлагаю посмотреть на области, которые уже соответствуют требованиям, немного другим взглядом. Рассмотрим MFA, SIEM, управление доступом, DLP и прочие моменты с точки зрения слабых мест бумажной безопасности.</p><h2>№1. Управление доступом</h2><p>Классическая проверка часто выглядит довольно просто: открыл карточку пользователя — посмотрел назначенные роли. Но современные корпоративные инфраструктуры редко устроены настолько просто:</p><ul><li>права могут наследоваться через группы;</li><li>группы могут быть вложенными;</li><li>доступ может назначаться через роли приложений;</li><li>часть полномочий приходит из Active Directory, часть — из локальных каталогов приложений, часть — через облачные сервисы.</li></ul><p>В результате пользователь может не иметь ни одной явно назначенной привилегированной роли, но при этом обладать весьма серьезными полномочиями. Условно: пользователь — группа А — группа Б — роль — ресурс.</p><p>Но это ещё ничего. В некоторых случаях проблема возникает, когда у пользователя не «слишком много» прав, а когда он получил вполне допустимые права, которые вместе создают недопустимый сценарий. Допустим, у сотрудника есть доступ к системе платежей, но нет права непосредственно проводить операции.</p><ul><li>Отдельно у него есть доступ к справочнику контрагентов.</li><li>Отдельно — возможность изменять определенные реквизиты</li></ul><p>Каждое разрешение по отдельности может быть легитимным, но комбинация полномочий создает возможность изменить данные так, что можно влиять на финансовую операцию (SoD-конфликт). Именно поэтому зрелое управление доступом должно анализировать не только отдельные права, но и комбинации полномочий.</p><p><b>Как исправить?</b></p><p>На практике начать нужно не с проверки списка ролей пользователя, а с построения его эффективной модели доступа. То есть смотрим не только на то, какие роли ему назначены напрямую, а проходим всю цепочку наследования: учетная запись, группы, вложенные группы, роли приложений, права на конкретные информационные системы и критичные операции.</p><p>Особенно внимательно стоит смотреть на привилегированные и конфликтующие полномочия.</p><p>Для таких проверок можно использовать выгрузки из IAM и каталогов учетных записей, данные из прикладных систем и матрицы доступа. В крупных инфраструктурах без автоматизации быстро упираешься в объем: вручную проверить несколько тысяч пользователей и десятки тысяч связей практически невозможно.</p><p>Отдельно я бы рекомендовал регулярно искать «сиротские» права: доступы пользователей, которые уже сменили должность, не используют конкретную систему или вообще должны были быть отключены.</p><p>Главный результат такой проверки для меня не количество найденных нарушений. Важнее понять, можем ли мы для каждого критичного доступа ответить на три вопроса:</p><ul><li>кто им обладает</li><li>зачем он ему нужен</li><li>что произойдет, если этот доступ будет скомпрометирован</li></ul><h2>№2. SIEM</h2><p>На этапе внедрения обычно обсуждают количество источников, EPS, правила корреляции, хранение и стоимость инфраструктуры. Но после запуска появляется более сложная задача: расследование.</p><p>Представим, что мы хотим понять, что делал пользователь за два часа до подозрительной операции.</p><ul><li>В Active Directory он имеет один идентификатор.</li><li>В VPN используется логин в другом формате.</li><li>В EDR устройство связано с третьим идентификатором.</li><li>В бизнес-приложении пользователь представлен внутренним UUID.</li><li>Часть сетевых событий вообще содержит только IP-адрес.</li><li>При этом DHCP уже выдал этот адрес другому устройству.</li></ul><p>События есть, но нет готовой цепочки: пользователь — устройство — IP — приложение — действие. А почему нет? Точнее, почему ее может не быть? Обычно вопрос количества логов не стоит — их у всех достаточно. Препятствия бывают с качеством телеметрии и ее нормализацией, когда события невозможно связать между собой. Здесь даже очень дорогая SIEM не сможет превратить их автоматически в полноценную картину инцидента.</p><p><b>Как исправить? </b></p><p>При проектировании мониторинга я бы оценивал не только количество подключенных источников. Эффективнее взять один реальный сценарий атаки и пройти его от начала до конца: какое событие появится первым, где оно окажется, с чем будет связано, кто и как его увидит, какие дополнительные данные сможет получить аналитик и сможет ли он восстановить всю цепочку действий. Если на каком-то этапе приходится вручную искать информацию в пяти разных системах, это уже часть проблемы.</p><h2>№3. MFA</h2><p>Многофакторная аутентификация — обязательный элемент современной защиты. Но здесь тоже легко попасть в ловушку формального контроля.</p><p>Допустим, сотрудник действительно проходит MFA. Что это дает? Снижается вероятность успешного использования украденного пароля. Но после успешной аутентификации возникает другая сущность — сессия.</p><p>Если злоумышленник получает действующий токен или иным способом использует уже авторизованную сессию, то включена MFA или не включена — не так важно. Важны другие механизмы:</p><ul><li>Контроль жизненного цикла сессий.</li><li>Привязка сессии к контексту устройства.</li><li>Анализ активности.</li><li>Повторная аутентификация для критичных операций.</li><li>Контроль изменения параметров сессии.</li><li>Обнаружение резкого изменения географии или характера работы.</li></ul><p>Причем здесь особенно хорошо видно, почему нельзя строить безопасность вокруг отдельных продуктов. MFA — это один контроль, EDR — другой, UEBA — третий, SIEM — четвертый, а атака проходит не через «продукты», а через инфраструктуру. Поэтому важно понимать, какой участок цепочки атаки закрывает каждый контроль и что происходит между ними.</p><p><b>Как исправить?</b></p><p>При настройке контроля нужно обращать внимание на жизненный цикл сессии: срок действия токена, возможность его повторного использования, требования к повторной аутентификации, привязку к устройству и контексту доступа.</p><p>Для критичных операций полезно отдельно проверять, требуется ли повторное подтверждение. Например, вход в корпоративное приложение с нового устройства и изменение реквизитов платежа не должны рассматриваться как одно и то же по уровню доверия.</p><p>Кроме того, MFA не должна существовать изолированно. Ее эффективность существенно повышается, если события аутентификации связаны с данными IAM, EDR, VPN и SIEM.</p><p>Тогда вместо простого события «пользователь успешно прошел MFA» мы можем увидеть контекст:</p><ul><li>пользователь вошел впервые с нового устройства;</li><li>подключился из нетипичной сети;</li><li>через несколько минут получил повышенные полномочия;</li><li>после этого начал обращаться к ресурсам, с которыми раньше не работал.</li></ul><p>Каждый признак отдельно может быть допустимым. Вместе они уже требуют внимания.</p><p>Поэтому при проверке MFA я рекомендую тестировать не только сам механизм второго фактора, но и сценарии его обхода и использования уже авторизованной сессии.</p><p>Это гораздо ближе к реальной модели угроз, чем простая галочка «MFA включена».</p><h2>№4. Исключения</h2><p>Это категория, которую часто недооценивают. Как часто вы слышали эти фразы:</p><ul><li>«У нас так принято».</li><li>«Эта система всегда была доступна из этой сети».</li><li>«Эти учетные записи давно никто не трогает».</li><li>«Это временно, потом исправим».</li></ul><p>Практически в любой крупной инфраструктуре есть системы, которые нельзя сразу перевести на стандартные политики:</p><ul><li>Старое приложение требует нестандартного сетевого доступа.</li><li>Критичная система не поддерживает современный механизм аутентификации.</li><li>Отдельный сервис должен работать с расширенными привилегиями.</li></ul><p>Создаётся исключение. Изначально оно абсолютно рационально, но позже появляется проблема.</p><p>Инфраструктура меняется, появляются новые СЗИ, приложение модернизируется, ответственные сотрудники меняются, а исключение остается. Через два-три года уже никто не помнит, почему оно вообще было создано. В результате стандартное правило может выглядеть очень хорошо, а несколько исторических исключений фактически формируют отдельный контур безопасности.</p><p>Поэтому исключения должны иметь не только владельца и обоснование. У них должен быть срок жизни. Если исключение нельзя пересмотреть через, например, год, возникает вопрос: почему оно «исключение»?</p><p><b>Как исправить?</b></p><p>Сделать исключения управляемыми.</p><p>Полностью избавиться от исключений в крупной инфраструктуре практически невозможно. Но задача ИБ не в том, чтобы запретить исключения, а в том, чтобы не позволить им превратиться в постоянную дыру в защите.</p><p>На практике, я бы вел отдельный реестр исключений с такими полями:</p><ul><li>какое требование нарушается;</li><li>для какой системы;</li><li>по какой причине;</li><li>кто владелец риска;</li><li>какой срок действия;</li><li>какие компенсирующие меры применяются.</li></ul><p>Последний пункт особенно важен.</p><p>Если систему невозможно подключить к современному механизму аутентификации, это не означает, что остается только написать в документе «невозможно технически». Можно ограничить сетевую доступность, разрешить доступ только с определенных станций, усилить мониторинг, добавить дополнительные проверки или ограничить круг пользователей.</p><p>То есть исключение должно иметь цену. Если мы не можем применить основной контроль, мы должны понимать, чем компенсируем этот недостаток.</p><p>Еще одна практика, которую я считаю полезной, это автоматический пересмотр исключений. У исключения должна быть дата, когда его снова необходимо рассмотреть. Иначе временное решение очень быстро становится частью архитектуры.</p><p>Особенно опасны исключения без владельца. Если через год никто не может ответить, кто и зачем разрешил конкретный обход контроля, такое исключение уже само по себе является находкой для аудита.</p><h2>№5. DLP</h2><p>Еще одна интересная история происходит с защитой от утечек. Представим, что пользователь выгрузил 5 ГБ документов. На первый взгляд это серьезный повод для блокировки. Но теперь добавим контекст:</p><ul><li>Пользователь работает в подразделении, которое регулярно формирует архивы.</li><li>Выгрузка выполняется в рабочее время.</li><li>Получатель — внутренний корпоративный ресурс.</li></ul><p>Такая операция может быть абсолютно нормальной.</p><p>Теперь другой сценарий. Пользователь обычно работает с несколькими десятками мегабайт в день. Сегодня в 02:00 он впервые подключился с нового устройства, скачал несколько ГБ архивов, после чего попытался передать их во внешний сервис. Объем тот же и с точки зрения простой сигнатурной логики — просто 5 ГБ, но по контексту совершенно другая история.</p><p>Поэтому эффективный контроль утечек данных давно не ограничивается вопросом: «Сколько данных передано?», а гораздо интереснее: кто, что, откуда, куда, когда, каким способом и насколько это соответствует его обычному поведению?</p><p>И именно здесь становится особенно важной интеграция DLP, IAM, UEBA, сетевой телеметрии и данных о бизнес-контексте. Отдельный продукт может увидеть только часть картины, а инцидент возникает на пересечении этих данных.</p><p><b>Как исправить?</b></p><p>Добавлять контекст к событиям DLP.</p><p>При настройке DLP я бы отдельно проверял не только политики блокировки, но и качество классификации данных, корректность исключений и интеграцию с IAM, SIEM и UEBA.</p><p>Очень важно также не пытаться блокировать все подозрительное автоматически.</p><p>Для критичных сценариев автоматическая блокировка оправдана. Для пограничных случаев лучше передать событие аналитику с максимально полным контекстом.</p><p>В противном случае можно получить классическую проблему DLP: система формально защищает данные, но сотрудники начинают искать способы обойти ее из-за большого количества ложных срабатываний.</p><h2>№6. Время</h2><p>Представим, что на одном сервере время отличается на три минуты. На другом используется другой часовой пояс. Ещё одна система пишет время в UTC.</p><p>Часть событий приходит в SIEM с задержкой и для обычной эксплуатации это может быть незаметно. Во время расследования трехминутная разница способна полностью изменить последовательность событий. А последовательность для расследования критична. Что было первым?</p><ul><li>Компрометация учетной записи?</li><li>Создание нового процесса?</li><li>Подключение к серверу?</li><li>Выгрузка данных?</li><li>Изменение прав?</li></ul><p>Если временная шкала построена неправильно, то и аналитик может сделать неверный вывод даже при наличии всех необходимых событий. Поэтому качество телеметрии это не только вопрос того, собираются ли логи, это еще и вопрос, насколько этим логам можно доверять?</p><p><b>Как исправить?</b></p><p>Начать стоит с единого источника времени для всей инфраструктуры. На критичных системах проверить не только наличие NTP, но и то, откуда конкретно система получает время, насколько стабильно работает синхронизация и что происходит при недоступности основного источника.</p><p>Но одной синхронизации недостаточно.</p><p>Для SIEM важно привести события к единому формату времени и явно понимать, какое время записано в каждом событии: время возникновения события на источнике, время его обработки или время поступления в SIEM. Это три разных значения, и смешивать их при расследовании нельзя.</p><p>Отдельно я бы проверял задержку доставки событий. Например, сервер может корректно зафиксировать событие в 02:13, но SIEM получить его только в 02:16. Если аналитик строит временную шкалу только по времени поступления, последовательность действий уже будет искажена.</p><p>Поэтому при проверке мониторинга важны несколько вещей: синхронизация времени, единый часовой пояс и формат временных меток, задержка доставки событий и наличие технических меток, позволяющих отличить время события от времени его поступления.</p><p>И самое главное, это нужно проверять не на уровне документации, а на практике. Создать несколько контролируемых событий на разных системах, зафиксировать фактическое время их возникновения и посмотреть, в каком порядке они появляются в SIEM.</p><p>Если после такого теста невозможно уверенно сказать, какое событие произошло первым, значит проблема уже не в NTP. У нас проблема с доказательной базой для расследования.</p><h2>№7. Автоматическое реагирование</h2><p>Чем больше СЗИ появляется, тем сильнее желание автоматизировать реакцию.</p><ul><li>Обнаружили подозрительную активность — заблокировали пользователя.</li><li>Нашли подозрительный процесс — остановили.</li><li>Увидели аномальное подключение — заблокировали IP.</li></ul><p>С технической точки зрения все логично. Но автоматизация сама становится источником риска.</p><p>Представим, что UEBA ошибочно определила нормальную активность привилегированного пользователя как аномальную и система блокирует учетную запись. А это единственный человек, который в данный момент может устранить критичную неисправность в продуктивной среде.</p><p>Получается парадокс: защитный механизм сам создает отказ в обслуживании. Поэтому автоматизация должна учитывать не только вероятность атаки, но и стоимость ошибочной блокировки.</p><p>Для одного сценария автоматическая блокировка оправдана. Для другого правильнее будет создать высокий приоритет и передать решение аналитику. И здесь снова появляется необходимость понимать не технологию, а бизнес-контекст.</p><p><b>Как исправить?</b></p><p>Не стоит спешить с автоматизацией всего, что кажется поддающимся автоматизации. Сначала нужно определить, какие последствия будет иметь ошибка автоматического действия.</p><p>Условно, все реакции можно разделить на несколько уровней.</p><ul><li>Первый уровень — действия с минимальным влиянием на бизнес. Например, добавить IP-адрес или хеш файла в дополнительный список мониторинга, повысить приоритет события, собрать дополнительную информацию об узле.</li><li>Второй — обратимые действия. Например, временно ограничить сетевое соединение или изолировать рабочую станцию от сети. Здесь уже необходимо понимать, что произойдет с бизнес-процессом и как быстро вернуть все в штатное состояние.</li><li>Третий — критичные действия: блокировка привилегированной учетной записи, отключение сервера, остановка процесса, изменение прав доступа. Такие реакции я бы разрешал автоматически только для хорошо проверенных сценариев с низкой вероятностью ложного срабатывания и понятным механизмом отката.</li></ul><p>На практике полезно начинать с режима, в котором автоматическое правило сначала только фиксирует событие и предлагает действие аналитику. По результатам работы можно оценить количество ложных срабатываний и только после этого переводить конкретный сценарий в автоматический режим.</p><p>Отдельно нужно работать с исключениями. Например, если автоматизированное правило изолирует рабочие станции, должны существовать понятные условия для критичных серверов, аварийных учетных записей и других объектов, блокировка которых может привести к более серьезным последствиям, чем сама угроза.</p><p>И обязательно должен существовать механизм отката. Если система автоматически заблокировала пользователя или изолировала сервер, должно быть понятно, кто, на основании чего и за какое время может вернуть его в рабочее состояние.</p><p>В итоге, автоматизацию стоит оценивать не по количеству действий, которые выполняются без участия человека, а по более ценному показателю — сколько времени она действительно экономит при приемлемом уровне риска ошибочной реакции.</p><h2>Как я бы проверял зрелость ИБ</h2><p>Вообще, если посмотреть на большинство зрелых инфраструктур, можно заметить одну закономерность.</p><p>Проблема редко находится внутри одного средства защиты. Она возникает на стыке:</p><ul><li>IAM знает, кто пользователь.</li><li>EDR знает, что происходило на его АРМе.</li><li>SIEM видит последовательность событий.</li><li>DLP знает, какие данные передавались.</li><li>Сетевая инфраструктура знает, куда устанавливалось соединение.</li><li>PAM записал сессию.</li></ul><p>Но если эти данные не связываются, каждый продукт видит только свою часть атаки.</p><p>Например, EDR фиксирует запуск PowerShell, прокси видит соединение с внешним ресурсом, DLP видит обращение к чувствительному файлу, а IAM знает, что пользователь недавно получил повышенные права.</p><p>По отдельности ни одно событие может не быть критичным. Вместе же они формируют опасную цепочку. Именно поэтому зрелость ИБ-инфраструктуры я бы оценивал не только по набору решений, а по тому, насколько хорошо они складываются в единую модель событий.</p><p>Есть достаточно простой подход: вместо того чтобы составлять очередной список из сотни пунктов, можно взять несколько наиболее опасных для конкретной организации сценариев, например, компрометация привилегированной учетной записи и пройти всю цепочку:</p><ul><li>Как получен доступ?</li><li>Что видит IAM?</li><li>Что видит EDR?</li><li>Какие события попадают в SIEM?</li><li>Как обнаруживается аномалия?</li><li>Что происходит с сессией?</li><li>Кто принимает решение?</li><li>Какие действия будут предприняты?</li></ul><p>Такие проверки дают намного больше информации, чем ревизия документов или очередной чек-лист. Хоть чек-листы могут быть очень полезны, но у них есть фундаментальное ограничение — они хорошо отвечают на вопрос: «Выполнено ли условие?» И плохо отвечают на вопрос: «Что произойдет, если несколько условий одновременно будут нарушены?» Потому архитектурные проверки должны дополняться сценарным тестированием.</p><h2>Отдельно затронем метрики</h2><p>Есть ещё одна проблема зрелой ИБ — неправильные метрики. Например, можно гордиться тем, что SOC обработал 50 000 алертов за месяц, но само число ничего не говорит, потому что можно сократить количество алертов в 10 раз и одновременно ухудшить безопасность, если просто отключить некоторое количество правил, а можно увеличить количество обнаруженных инцидентов и решить, что ситуация стала хуже, хотя по факту обнаружение улучшилось.</p><p>Поэтому метрика должна быть связана с конкретным результатом:</p><ul><li>Не «SIEM подключила 500 источников». А «Для X% критичных сценариев атаки SOC получает достаточный набор телеметрии для расследования».</li><li>Не «Резервное копирование выполняется ежедневно». А «Критичная система восстанавливается за X часов при заданном сценарии отказа».</li><li>Не «Права пользователей пересматриваются ежеквартально». А «X% привилегированных доступов имеют подтвержденного владельца, бизнес-обоснование и актуальную дату пересмотра».</li></ul><h2>Заключение</h2><p>Самая опасная иллюзия в ИБ в слепой вере в защиту, когда компания защищает свою инфраструктуру большим количеством правильных средств, но не знает, насколько хорошо они работают вместе.</p><ul><li>MFA есть, но остается риск компрометации сессии</li><li>PAM есть, но существуют обходные пути</li><li>SIEM есть, но телеметрия не позволяет восстановить цепочку событий</li><li>и т.д. и т.п.</li></ul><p>Именно поэтому я бы не задавал вопрос: «Соответствует ли наша система требованиям ИБ?», правильнее задавать несколько более неприятных вопросов:</p><ul><li>Что конкретно произойдет при компрометации привилегированной учетной записи?</li><li>Что мы увидим в первые пять минут?</li><li>Какие данные позволят восстановить цепочку атаки?</li><li>Какие защитные механизмы атакующий сможет обойти?</li><li>Что произойдет, если один из них откажет?</li></ul><p>И самое главное:</p><ul><li>Можем ли мы доказать на практике, что наша защита работает именно в том сценарии, от которого она должна нас защищать?</li></ul><p>Но здесь не нужно противопоставлять compliance и техническую безопасность. <b>Требования нужны. Аудиты нужны. Регламенты нужны.</b> Но их правильнее воспринимать как нижний уровень системы управления.</p><p>После того как требование выполнено, мы должны понимать, а какой реальный риск мы этим контролем снижаем? Как мы проверим, что риск действительно снизился?</p><p>Если «понимание» заключается только в наличии документа, отчета или установленного класса решений, контроль, скорее всего, оценивается слишком формально. Если же можно показать реальный сценарий, измерить результат и воспроизвести его повторно, ситуация уже совсем другая.</p><p>Соответствие требованиям — это подтверждение того, что определенные правила и процедуры существуют. А информационная безопасность начинается там, где эти правила сталкиваются с реальной инфраструктурой, реальными ограничениями и реальной атакой.</p>]]></content:encoded>
    </item>
    <item>
      <title>Баги, которые не ловятся тестами: три расследования и общая методика</title>
      <link>https://tproger.ru/articles/bagi-kotorye-ne-lovyatsya-testami-tri-rassledovaniya-i-obshhaya-meto</link>
      <comments>https://tproger.ru/articles/bagi-kotorye-ne-lovyatsya-testami-tri-rassledovaniya-i-obshhaya-meto?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bagi-kotorye-ne-lovyatsya-testami-tri-rassledovaniya-i-obshhaya-meto</guid>
      <description><![CDATA[<p>Три расследования редких дефектов: гонка в SQLite, потеря сообщений в TCP и гонки в биллинге. Разбираем общую методику поиска невоспроизводимых багов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bagi-kotorye-ne-lovyatsya-testami-tri-rassledovaniya-i-obshhaya-meto">Баги, которые не ловятся тестами: три расследования и общая методика</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Сетевые протоколы]]></category>
      <category><![CDATA[Отладка]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Баги и ошибки]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 09 Sep 2026 09:00:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>Есть класс дефектов, которые проходят весь конвейер проверок и всплывают только в продакшене. Объединяет их не сложность кода. В двух случаях виновата форма проверки, написанной вежливой там, где реальность к сервису вежлива не бывает; в третьем проверка не поймала бы дефект вообще.</p><p>Разбираем три расследования — пропавшую запись в базе, три процента сообщений, терявшихся только на чистой машине, и гонки в биллинге, которые видит одна поддержка. У всех трёх разные предметные области и одна общая методика поиска невоспроизводимых багов.</p><p>Отсутствие закономерности само по себе является находкой: если сбой не привязан ни к шарду, ни к клиенту, ни к времени суток, это указывает на гонку, а не на данные.</p><p>Когда воспроизвести дефект синтетически нельзя, остаётся пассивная телеметрия в продакшене и последовательное отсечение гипотез данными.</p><p>Счётчики на каждом слое находят виновника быстрее логов: разрыв между двумя соседними числами прямо называет слой, в котором теряются сообщения.</p><p>Вежливый тест, который шлёт запрос и ждёт ответа, скрывает целый класс ошибок пакетирования. Пачечный тест их обнажает.</p><p>Отсутствие ошибок не доказывает, что дефект исправлен. Доказательством служит положительный сигнал: сработавшее предупреждение о том, что опасные условия возникли, а сбоя при этом не случилось.</p><h2>Случай первый: запись, которой не могло не быть</h2><p>Управляющий слой Tailscale разбит на шарды, у каждого своя база SQLite, и обращается к ней ровно один процесс. Такой однописательный режим — именно то, для чего SQLite и предназначен, что делает дальнейшее особенно неприятным.</p><p>Резервное копирование снимало полную копию базы каждые несколько минут и складывало файл в объектное хранилище. Работало это без единого происшествия с начала 2023 года, пока конвейер, читавший резервные копии, не сообщил об ошибке. Проверка встроенной командой контроля целостности подтвердила худшее: база повреждена.</p><p>Первый случай сочли единичным. Базу починили, причину не нашли. Потом это повторилось. И ещё раз. Всего до устранения первопричины набралось <a href="https://tailscale.com/blog/sqlite-wal-reset-bug">19 отдельных инцидентов за полгода</a>, и каждый означал простой: процесс на шарде останавливался, пока базу чинили или восстанавливали. На ранних инцидентах простой превышал час, и всё это время у клиентов на шарде не работали консоль администратора и API.</p><h3>Почему он не поддавался обычным приёмам</h3><p>Дефект сопротивлялся всем стандартным подходам сразу:</p><ul><li>Не на что было списать: низкоуровневый код работы с базой никто не трогал годами, а внимательное чтение ничего не дало.</li><li>Не нашлось общих факторов. Повреждения не привязывались ни к конкретному шарду, ни к клиенту, ни к функции продукта, ни ко времени суток, ни к уровню нагрузки.</li><li>Он не воспроизводился синтетически. Надёжного триггера не было, поэтому оставалось только развернуть пассивную телеметрию в боевой среде и ждать следующего случая.</li></ul><p>Расписания у инцидентов тоже не было: они случались то через часы, то через недели. Между октябрём и декабрём наступила шестинедельная тишина, после которой повреждения вернулись.</p><p>Команда сделала два шага, которые и составляют суть этой истории. Купила контракт поддержки у разработчиков SQLite, получив прямой доступ к людям, написавшим саму базу. И методично составила список гипотез, отсекая их данными, а не рассуждениями. В списке были сломанные блокировки при закрытии файла, неверная работа с памятью, принадлежащей базе, и обращение из нескольких потоков при отключённой потокобезопасности. Каждый инцидент приносил данные, каждая гипотеза отпадала по очереди.</p><h3>Улика: транзакция, которой не стало</h3><p>Пока первопричину искали, платформу надо было держать живой. Команда автоматизировала жёсткую остановку при обнаружении повреждения, поставила монитор, непрерывно проверявший целостность резервных копий, и переписала инструкции по восстановлению. Время восстановления упало ниже часа.</p><p>А затем построила конвейер журналирования транзакций. Идея простая: писать каждый изменяющий базу запрос в отдельный журнал. Поскольку писатель один, а транзакции сериализуемы, история изменений линейна и детерминирована, и её можно проиграть поверх последней заведомо целой копии, обойдя повреждённые страницы. Приём годится там, где порядок фиксаций известен: при единственном писателе он получается сам собой. Наивный журнал запросов на многописательной базе этого не даёт, потому что конкурентные транзакции переплетаются и без явного порядка фиксаций проигрывание не восстановит то же состояние.</p><p>Конвейер сработал и выдал улику. В двух инцидентах журналы не проигрывались чисто: данные, записанные и зафиксированные одной транзакцией, оказывались необъяснимо невидимы для последующих. Запись исчезла бесследно и без единой ошибки.</p><p>Этого не может быть. В сериализуемой однописательной базе зафиксированная запись не может пропасть. Значит, виноват слой с достаточной конкурентностью, чтобы такое спрятать, а такой слой ровно один — контрольные точки.</p><h3>Шестнадцатилетняя гонка</h3><p>SQLite с журналом предзаписи работает с двумя файлами. База — это набор страниц; при изменении данных новые страницы пишутся не в основной файл, а сначала в журнал. Позже контрольная точка переносит их в базу. Обычно момент переноса SQLite выбирает сам, но Tailscale управляла контрольными точками вручную, чтобы снимать быстрые согласованные копии. Именно этот нестандартный, хотя и полностью документированный выбор и вывел их на дефект.</p><p>Метрики во время инцидентов показывали, что SQLite сообщает о переносе большего числа страниц, чем в журнале вообще было. Разработчики базы как раз готовили инструмент для этого слоя: обёртку над виртуальной файловой системой, которая пишет дополнительные трассировочные журналы. Обёртку развернули в продакшене, и ждать пришлось недолго.</p><p>Журналы показали редкую гонку данных (race condition) между контрольной точкой и пишущей транзакцией. Если запись происходит в определённый момент работы контрольной точки, та сбивается: считает часть страниц перенесёнными в основной файл, хотя перенос не состоялся. Данные теряются навсегда, а страницы, которые на них ссылаются, например индексные, записываются как ни в чём не бывало. Файл становится структурно повреждённым, что проверка целостности всё это время и фиксировала.</p><p>Дефекту дали имя по сбросу журнала предзаписи и оценили его возраст минимум в шестнадцать лет. Он прожил так долго именно из-за редкости, это классический heisenbug: чтобы поймать его в тестовой среде, разработчикам пришлось дописать код, вызывающий гонку намеренно.</p><h3>Ложная тревога, чуть не сорвавшая исправление</h3><p>Исправление вышло в версии 3.52.0, и Tailscale раскатывала его осторожно, начав с нескольких канареечных шардов. После общей раскатки монитор резервных копий немедленно покраснел, сообщив о повреждении в тринадцати базах.</p><p>Настоящего повреждения не было. В ту же версию попала оптимизация, слегка изменившая округление при переводе текста в число с плавающей точкой, а Tailscale хранила метки времени высокой точности текстом и превращала их в числа в вычисляемом столбце. Индекс по вычисляемому выражению перестал соответствовать новому результату вычисления, и проверка целостности честно назвала это повреждением. Канареечные шарды дефект пропустили просто потому, что на них не оказалось меток времени, попадающих под изменённое округление.</p><p>Разбирали это с трёх сторон сразу. Разработчики SQLite отозвали версию целиком и выпустили 3.51.3, содержавшую только исправление гонки. Tailscale перешла на хранение меток времени целыми секундами, поскольку перевод текста в целое число однозначен. А в 3.53.0 появилось автоматическое восстановление таких индексов, чтобы проблема не возникала впредь.</p><p><b>Главный урок этого эпизода:</b><br />Канареечная выкатка проверяет только те формы данных, которые в канарейке есть. Если на канареечных узлах нет тех же значений, что в проде, канарейка не подтверждает ничего. Это касается и обновлений самой базы, драйверов и инструментов миграции, а не только кода приложения.</p><h3>Как доказали, что дефект действительно исправлен</h3><p>Самая дисциплинированная часть расследования пришлась на финал. Отсутствие повреждений доказательством не считалось: команда уже пережила шесть недель обманчивой тишины. Поэтому драйвер базы пропатчили так, чтобы он выдавал предупреждение всякий раз, когда пишущая транзакция и сброс журнала пересекаются во времени.</p><p>Логика прямая: если предупреждение сработает, а база останется целой, значит, исправление сработало ровно там, где раньше был бы инцидент. Ждали два месяца. Предупреждение сработало, подтвердив, что условия для гонки в их среде действительно возникают. С того момента прошло ещё четыре месяца без единого происшествия с базами.</p><h2>Случай второй: три процента, терявшиеся только на чистой машине</h2><p>Второй сюжет проще по масштабу и полезнее в быту. Сервис представлял собой небольшой пересыльщик TCP: принять соединение, читать текстовые строки, передавать дальше. На тестовом стенде входило 97 004 строки, а выходило 94 183. Ни ошибок, ни исключений, просто пропавшие сообщения.</p><p>На ноутбуке автора всё воспроизводилось идеально: сто тысяч строк на входе, сто тысяч на выходе. Это расхождение и было первой уликой — тест проверял не то, что делает продакшен.</p><h3>Сменить машину раньше, чем код</h3><p>Первый час, по его собственному признанию, ушёл впустую: менялись и бинарник, и машина, и профиль нагрузки разом, а выводов это не давало. Дальше автор поменял ровно одну переменную: взял чистый сервер с тем же бинарником и тем же скриптом нагрузки. Потери появились снова, 97 128 строк из ста тысяч. Среда меняла вероятность проявления, но не сам факт дефекта, а чистая машина без истории и без накопленных настроек работает как микроскоп для ошибок синхронизации.</p><h3>Считать, а не логировать</h3><p>Дальше нужен был не ещё один прогон, а способ понять, на каком слое теряются сообщения. Логи рассказывают истории, счётчики складываются. Автор расставил счётчик на каждом слое: клиент считает отправленные строки, сервер считает разобранные переводы строки, сервер считает отправленные ответы, клиент считает полученные ответы. Один прогон, четыре числа, и разрыв между соседними прямо называет виновный слой.</p><p>Сервер разобрал всё до последней строки, а ответов отправил меньше, чем разобрал. Это отпечаток пальца конкретного дефекта, и дальше оставалось найти его в коде ответа.</p><h3>read() ничего не обещает про сообщения</h3><p>Виновником оказалась одна строка: сервер отправлял по одному ответу на каждое чтение, а не на каждую разобранную строку.</p><p>TCP — это поток байтов, а не очередь сообщений. Вызов чтения не имеет понятия о том, что такое одно сообщение в вашем протоколе. Ядро вправе слить десяток сообщений в один сегмент, и одно чтение заберёт все десять, а ответ уйдёт один.</p><p>Вежливый локальный тест отправлял сообщение, дожидался подтверждения и отправлял следующее. Одно сообщение на сегмент — дефект спал. Нагрузка на стенде шла пачками, тысячами сообщений в секунду, ядро их группировало, одно чтение проглатывало сотню строк.</p><p>Исправление переносит ответ внутрь цикла по строкам и накапливает остаток в буфере, чтобы пережить строку, разорванную между двумя чтениями. Это вторая половина того же семейства ошибок, и без неё починка неполная:</p><p><b>Вывод автора расследования:</b><br />Локальный тест это не нагрузочный тест, ноутбук это не сервер, а одно чтение из сокета это не одно сообщение.</p><h2>Третий сюжет: гонки, которые видит только поддержка</h2><p>Третий сюжет про биллинг кредитов на бессерверном Postgres, где транзакции по условиям задачи были недоступны. Автор наткнулся на четыре гонки, разберём две самые показательные. Все они, по его собственной формулировке, относятся к тому сорту дефектов, которые не показываются в тестах и показываются в почте поддержки.</p><h3>Классический двойной расход</h3><p>Наивная версия, которую пишут первой:</p><p>Два одновременных запроса читают баланс, равный пяти, оба проходят проверку, оба записывают четыре. Пользователь получил две операции по цене одной. Дефект существует ровно между чтением и записью, и последовательный тест в это окно не попадает никогда.</p><h3>Инвариант переезжает в условие запроса</h3><p>Общее решение — сделать проверку и запись одним оператором, перенеся условие корректности в WHERE:</p><p>Одиночный UPDATE в Postgres атомарен. Не хватило баланса — условие не совпало, вернулось ноль строк, и вы точно знаете, что списание не произошло. Транзакция для этого не нужна вовсе. Приём обобщается: перенесите инвариант в условие выборки, и запись просто не случится, когда инвариант нарушен.</p><h3>Вебхук, доставленный дважды</h3><p>Платёжные провайдеры повторяют доставку уведомлений при таймаутах, пятисотках и сетевых сбоях, а иногда дублируют событие и в штатном режиме. Если обработчик начисляет кредиты, доставка «хотя бы один раз» означает начисление хотя бы один раз.</p><p>Обычное решение с таблицей обработанных событий требует транзакции, а её нет: падение между двумя операторами либо начислит дважды при повторе, либо потеряет начисление совсем. Рабочий вариант в один оператор использует изменяющее данные обобщённое табличное выражение, где вставка в журнал операций работает воротами: не прошла вставка, значит, не выполнилось и обновление баланса.</p><p>Деталь, которую стоит забрать отдельно: уникальный индекс под эту схему должен быть частичным. Начисления от администратора приходят с произвольным идентификатором из скрипта, и глобальный уникальный индекс рисковал бы столкнуть их друг с другом или с идентификатором операции другого типа. Приветственные начисления идут вообще без идентификатора, и с ними коллизии не будет в любом случае: Postgres не считает два пустых значения равными. Ограничение индекса двумя типами операций от платёжного провайдера держит проверку уникальности ровно там, где она нужна.</p><h2>Что из этого складывается</h2><p>Первые два расследования дают общую методику поиска, и она изложена ниже. Третий случай стоит особняком: это не детектив, а набор приёмов, которые убирают целый класс гонок ещё на этапе проектирования, до того как искать станет нечего.</p><h2>Что забрать с собой</h2><p>Общего у трёх расследований больше, чем различий. Во всех трёх случаях проверка была написана в форме, которая не воспроизводит реальность: последовательный запрос вместо пачки, одиночный вызов вместо конкуренции, одна машина вместо двух. И во всех трёх дефект спокойно проходил через тесты, а в случае с SQLite прожил так шестнадцать лет.</p><p>Соседний сюжет про то, как тесты перестают отражать реальность, разбирали в материале о том, <a href="https://tproger.ru/articles/pochemu-statichnye-moki-ubivayut-testirovanie--i-chto-my-s-etim-sdel">почему статичные моки убивают тестирование</a>.</p><p>Полезнее всего здесь дешёвые привычки. Счётчик на границе каждого слоя ставится за час. Пачечный клиент пишется за вечер. Датчик, доказывающий исправление положительным сигналом, добавляется одной строкой в драйвер. Всё это стоит несопоставимо меньше, чем полгода расследования.</p><p>Три постмортема, на которых строится разбор: <a href="https://tailscale.com/blog/sqlite-wal-reset-bug">разбор Tailscale о поиске шестнадцатилетнего бага в SQLite</a>, <a href="https://dev.to/datacpp_3670/the-3-drop-that-only-showed-up-on-a-clean-server-a-debugging-retrospective-1g3c">ретроспектива потери трёх процентов сообщений</a> и <a href="https://dev.to/xiaojun_mao_c154743594bc9/credit-billing-without-transactions-4-race-conditions-i-hit-on-serverless-postgres-4730">четыре гонки в биллинге на бессерверном Postgres</a>.</p><p>Возьмите самый подозрительный сервис и запустите по нему пачечный тест вместо последовательного. Это самый дешёвый способ узнать, какой из ваших дефектов сейчас спит.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как инженер радиосвязи стал тестировщиком базовых станций</title>
      <link>https://tproger.ru/articles/kak-inzhener-radiosvyazi-stal-testirovshhikom-bazovyh-stancij-2</link>
      <comments>https://tproger.ru/articles/kak-inzhener-radiosvyazi-stal-testirovshhikom-bazovyh-stancij-2?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-inzhener-radiosvyazi-stal-testirovshhikom-bazovyh-stancij-2</guid>
      <description><![CDATA[<p>История перехода из радиосвязи в IT: от полевых измерений и стадионов ЧМ-2018 до тестирования базовых станций в YADRO. Как инженерный опыт помогает в новой профессии.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-inzhener-radiosvyazi-stal-testirovshhikom-bazovyh-stancij-2">Как инженер радиосвязи стал тестировщиком базовых станций</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Карьера]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 09 Sep 2026 05:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет, меня зовут Алексей. Сейчас я тестирую базовую станцию мобильной связи, которую мы в YADRO разрабатываем с нуля. До этого я десять лет занимался радиосетями: начинал с полевых измерений, затем проектировал покрытие в торговых центрах и на стадионах. Позже этот опыт помог мне перейти в тестирование телеком-оборудования.</p><p>Расскажу с самого начала — так будет понятнее, как предыдущий инженерный опыт в итоге привёл меня в YADRO.</p><h2>Чем вообще занимается инженер радиосвязи</h2><p>По образованию я инженер радиотехники и после вуза пошёл работать по специальности. Подрядная организация строила башни связи, устанавливала на них оборудование и проводила радиоизмерения для операторов. Я начал с полевых замеров, или драйв-тестов. По сути, ты ездишь по городу с измерительным комплексом и проверяешь, как работает мобильная сеть.</p><p>Типичный день выглядел так: утром получаешь маршрут, устанавливаешь в машину измерительный комплекс, настраиваешь сценарии сбора данных. Дальше едешь и по ходу следишь за качеством измерений — важно с первого раза корректно собрать все необходимые данные. Шли годы активного внедрения 3G и модернизации сетей, поэтому работы было много. Из логов мы строили карту покрытия в специализированном ПО. Оператор получал от нас разбор с рекомендациями: что переставить или перенастроить, чтобы сеть вышла на целевые KPI.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-09-08/e5e33ee7-484f-41b6-a49e-be07aaee06d9.webp" alt="" /></figure><p>Сначала я работал по готовым методикам, потом начал адаптировать их под конкретные задачи и предлагать заказчикам свои сценарии сбора статистики. Чаще всего это требовалось для проблемных зон, где стандартных измерений было недостаточно. Со временем поездки отошли на второй план, и я стал больше заниматься анализом данных, готовить маршруты и общаться с операторами. В этой роли я также участвовал в запуске первого LTE-кластера у одного из операторов.</p><p>Если убрать радиотехническую специфику, моя работа во многом сводилась к сбору данных, проверке их качества и выводам, на основе которых принимались дальнейшие технические решения. Слова «аналитика» в моей должности не было, но, по сути, я занимался в том числе ей.</p><h2>Индор, стадионы и рюкзак телефонов</h2><p>Дальше появились проекты по индору — покрытию внутри зданий: торговых центров, аэропортов и подземных паркингов. Здесь я впервые начал проектировать системы с нуля: работал с чертежами, размещал оборудование, рассчитывал питание и проверял монтаж.</p><p>Позже я перешёл в команду крупного телеком-вендора и занимался подготовкой покрытия на стадионах к Кубку конфедераций 2017 года и Чемпионату мира 2018 года. Масштаб был совсем другим: десятки тысяч зрителей одновременно, строящиеся арены и много командировок по стране.</p><p>Мы обследовали объекты, проектировали размещение оборудования, а после пусконаладки возвращались с рюкзаком телефонов и ноутбуком и проверяли, совпали ли расчёты с реальной картиной. Контрольные замеры заодно помогали находить ошибки монтажа. К концу проекта я уже набирал команду и отвечал за проверку готовности ключевых стадионов. К 2018 году я умел проектировать системы целиком, проверять монтаж и защищать результаты перед заказчиком.</p><h2>Как опыт из радиосвязи пригодился в IT</h2><p>В какой-то момент я решил перейти в IT и начал изучать программирование. В итоге меня взяли тестировщиком в компанию, которая разрабатывала Wi-Fi-чипы. Радиочасть я хорошо понимал благодаря предыдущему опыту, а к этому моменту уже мог читать и писать код. Там я работал на Python, разобрался с процессами тестирования и окончательно перешёл в IT. Я планировал остаться в компании надолго, но она неожиданно ушла с рынка.</p><p>Тогда друг рассказал мне про YADRO. Оказалось, за три-четыре месяца до этого здесь с нуля начали разрабатывать собственную базовую станцию мобильной связи и искали тестировщиков. К тому моменту у меня уже был опыт и в радиотехнике, и в тестировании, поэтому эти два направления хорошо сошлись в одной роли. Так я попал в третью команду тестирования. Сейчас в YADRO таких команд уже 16.</p><p>Думаю, сыграло роль именно сочетание компетенций. Специалистов по радиосвязи на рынке много, тестировщиков тоже, а людей, которые хорошо понимают оба направления, заметно меньше.</p><h2>Как инженерный опыт пригодился в тестировании</h2><p>Когда я пришёл в YADRO, оказалось, что многое из того, чем я занимался раньше, напрямую помогает в новой работе.</p><p>Тестирование базовой станции начинается с документации. Мобильная связь стандартизирована, всё описано в спецификациях 3GPP. Нужно держать в голове общую картину и одновременно глубоко погружаться в конкретную фичу: изучать её спецификацию и разбираться, где она пересекается со смежными областями.</p><p>Здесь пригодилась привычка работать со сложными техническими системами и смотреть не только на отдельную проблему, но и на то, как она связана с остальными частями сети.</p><p>Дальше мы готовим тестовую документацию: пишем тест-планы и кейсы, проводим ревью с продактами и разработчиками. Когда фича доходит до интеграции, запускаем тестовые циклы. Находим баги, разработчики вносят исправления, а мы повторяем тесты. Параллельно идёт регрессия, чтобы убедиться, что изменения не повлияли на уже работающий функционал.</p><p>Во многом сам подход похож на то, чем я занимался ещё в радиосвязи: сначала собрать данные, затем понять, что именно работает не так, найти причину и проверить результат после изменений. Только раньше объектом была уже работающая сеть, а теперь — продукт, который мы сами создаём.</p><p>Конечно, появилось и много нового. Оборудование мы тоже разрабатываем сами, оно постоянно меняется, поэтому тестовые стенды приходится адаптировать под новые версии. А каждая фича создаётся большой командой из 3000 специалистов, так что постоянное взаимодействие с разработчиками, продактами и коллегами из смежных направлений — важная часть работы.</p><p>Получилось, что я не начал карьеру полностью заново. В новой профессии пригодились и знания радиосвязи, и привычный инженерный подход, а навыки тестирования и программирования постепенно добавились к ним.</p><h2>Как выглядит моя работа сейчас</h2><p>На прошлой работе я использовал технологические продукты, которые делали тысячи инженеров на протяжении десятилетий. Сейчас я участвую в создании новой базовой станции операторского класса, которая разрабатывалась с нуля и буквально на моих глазах выходит в реальные сети. Сегодня телеком-оборудование YADRO работает в коммерческих сетях «Билайна» и «МегаФона» и охватывает уже 37 регионов России.</p><p>Всего за 3,5 года мы прошли путь от проекта до оборудования, которым уже пользуются люди. За этим стоят тысячи строк кода, сотни найденных и исправленных багов и работа большой команды.</p><p>Для меня это, пожалуй, одно из главных отличий нынешней работы: ты не только используешь уже готовые решения, но участвуешь в создании новых компонентов. Один из ярких примеров — в мае 2026 года первая отечественная базовая станция YADRO начала работу в коммерческой сети «МегаФона» в городе-миллионнике — Нижнем Новгороде. Еще один пример — <a href="https://yadro.com/ru/press/yadro-i-bilayn-obespechili-mobilnuyu-svyaz-na-tsipr-2026/">мобильная связь на конференции ЦИПР-2026</a> в Нижнем Новгороде, которую мы обеспечили совместно с «Билайном».</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-09-08/6e6a1725-2bcc-40e1-9396-25d3ba9bbd67.webp" alt="" /></figure><p>Базовые станции собирают на нашем производстве в <a href="https://yadro.com/ru/press/telekom-oborudovanie-yadro-obespechivaet-indor-svyaz-v-seti-bilayn-na-proizvodstve-v-dubne/">Дубне</a>, откуда они отправляются на объекты по всей стране. Каждый квартал в нашем продукте появляются новые функции, а вместе с ними — новые задачи для тестирования. Команда продолжает расти, открытые позиции YADRO публикует на <a href="https://careers.yadro.com/">карьерном портале</a>.</p><p>По своему опыту могу сказать, что смежный инженерный бэкграунд в таких задачах может стать серьёзным преимуществом. Поэтому, даже если опыт не полностью совпадает с описанием вакансии, но пересекается с её технической областью, на позицию вполне стоит откликнуться.</p><h2>Итого</h2><p>Если посмотреть на мой путь целиком, переход в тестирование не стал началом карьеры с нуля. Наоборот, новая роль объединила опыт, который я уже накопил в радиосвязи, с навыками, которые появились после перехода в IT.</p><p>В тестировании базовой станции одновременно пригодились знания радиосвязи, инженерное мышление и новые технические навыки. То, что могло казаться опытом из другой профессии, в итоге стало одним из моих главных преимуществ.</p><p>Поэтому инженерам, которые задумываются о переходе в IT, я бы советовал сначала посмотреть, где их текущая область пересекается с разработкой. Возможно, необязательно начинать карьеру полностью с нуля — иногда логичнее найти направление, в котором уже накопленный опыт будет полезен.</p><p>В моём случае таким пересечением стало тестирование телеком-оборудования. Опыт от полевых измерений до проектирования систем связи сегодня помогает мне участвовать в создании базовой станции, которая выходит в реальные сети. И, пожалуй, это главное, что я вынес из своего перехода: предыдущий инженерный опыт не ограничивает выбор следующего шага — иногда именно он помогает найти роль, в которой можно принести больше всего пользы.</p>]]></content:encoded>
    </item>
    <item>
      <title>Дэн Лу проверил ИИ-агентов: больше тестов не сделало код надёжнее</title>
      <link>https://tproger.ru/news/den-lu-proveril-ii-agentov-bolwe-testov-ne-sdelalo-kod-nadyozhne</link>
      <comments>https://tproger.ru/news/den-lu-proveril-ii-agentov-bolwe-testov-ne-sdelalo-kod-nadyozhne?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/den-lu-proveril-ii-agentov-bolwe-testov-ne-sdelalo-kod-nadyozhne</guid>
      <description><![CDATA[<p>Дэн Лу сравнил инструкции по тестированию ИИ-кода на Rust. Разбираем, почему зелёные тесты не гарантируют корректность и что проверить при следующем ревью кода.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/den-lu-proveril-ii-agentov-bolwe-testov-ne-sdelalo-kod-nadyozhne">Дэн Лу проверил ИИ-агентов: больше тестов не сделало код надёжнее</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 08 Sep 2026 11:05:20 GMT</pubDate>
      <content:encoded><![CDATA[<p>ИИ-агент может увеличить число тестов и всё равно пропустить ошибки в коде. Разработчик Дэн Лу <a href="https://danluu.com/agentic-testing/">сравнил инструкции по тестированию</a> на реализации декодера Zstd. 8 сентября его эксперимент <a href="https://news.ycombinator.com/item?id=49605246">обсуждают на Hacker News</a>: одного требования «используй TDD — разработку через тестирование» или «добавь фаззинг» оказалось недостаточно.</p><p>В эксперименте использовались Codex с GPT-5.6 Sol, Rust, 26 вариантов инструкций и 4 дополнительных набора правил. Вывод относится к этой постановке задачи, а не ко всем ИИ-моделям и методикам разработки.</p><h2>Что проверял Дэн Лу</h2><p>За основу взят <a href="https://danluu.com/pl-tokens/#zstd">его прежний тест с Zstd</a>, форматом сжатия данных. Агент получает спецификацию и пишет декодер в контейнере без интернета. Контрольные тесты ему не показывают: они отдельно проверяют результат. Такой подход позволяет проверить решение на независимом наборе сценариев.</p><p>В новом сравнении для каждой комбинации инструкции и уровня вычислительных усилий модели, medium или xhigh, проведено 80 запусков. Основная метрика — доля запусков, прошедших 100% скрытых тестов. Вариант без специальных указаний оказался выше среднего; убедительного универсального победителя автор не выделяет.</p><h2>Как тесты пропускали ошибки</h2><p>При явном требовании использовать встроенные тесты Rust их число удваивалось на medium и увеличивалось на 25% на xhigh, но корректность не улучшалась. В отдельных тестах обработки четырёх битовых потоков встречались одинаковые входы: перестановка потоков оставалась незаметной. Фаззинг часто сводился к случайным байтам, которые проверяли преимущественно отказ на некорректном вводе.</p><p>Фаззинг — проверка программы на множестве автоматически сгенерированных входов. Если все они отбрасываются в начале, глубокая логика обработки может остаться нетронутой. В тестировании свойств задают правило для целого класса входов: например, после сжатия и распаковки должны восстановиться исходные данные. <a href="https://proptest-rs.github.io/proptest/proptest/index.html">Библиотека Proptest</a> также умеет уменьшать найденный сбойный пример, чтобы причину было проще разобрать.</p><h2>Что это меняет для ревью</h2><p><b>Практический вывод редакции:</b> в ревью ИИ-кода стоит проверять, какую ошибку способен поймать каждый тест и откуда взят ожидаемый результат. Для декодера полезны разные корректные потоки и независимые эталонные ответы. Для бизнес-логики — проверка результата операции, повторного запроса и отказа зависимости, а не только наличия функции.</p><p>Результаты одного эксперимента не заменяют проверку на ваших задачах.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как тестировать ИИ-агентов, если «правильно» не детерминировано</title>
      <link>https://tproger.ru/articles/kak-testirovat-ii-agentov-esli-pravilno-ne-determinirovano</link>
      <comments>https://tproger.ru/articles/kak-testirovat-ii-agentov-esli-pravilno-ne-determinirovano?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-testirovat-ii-agentov-esli-pravilno-ne-determinirovano</guid>
      <description><![CDATA[<p>GitHub построил Trust Layer для Copilot-агентов: валидация по ключевым состояниям вместо жёстких скриптов. Узнайте, как снизить ложные падения CI.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-testirovat-ii-agentov-esli-pravilno-ne-determinirovano">Как тестировать ИИ-агентов, если «правильно» не детерминировано</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Нейронные сети]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Методологии разработки]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 30 Jul 2026 09:32:53 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если ваш CI падает не из-за бага в коде, а потому что ИИ-агент выбрал другой путь к правильному результату — пора менять подход к тестированию. Классические тесты заточены под детерминированное ПО: на входе X, на выходе Y, посередине строго определённая последовательность шагов. Но агенты с функцией Computer Use работают с настоящими интерфейсами, где загрузка может длиться на полсекунды дольше, а кнопка оказаться в другом месте. GitHub недавно предложил способ отличать реальные ошибки от такого «шума» — независимый <b>Trust Layer</b>, который учится на примерах успешных запусков.</p><p>В этой статье разберём, почему стандартные assert-тесты и record-and-replay плохо справляются с автономными агентами, как теория графов помогает выделить обязательные этапы задачи и что из этого следует для российских команд, которые уже пробуют GitHub Copilot или собственных агентов в CI/CD.</p><p>Исследование, опубликованное 6 мая 2026 года в блоге GitHub, описывает метод валидации агентского поведения, который не требует ручного написания скриптов для каждого сценария и не верит агенту на слово. Вместо этого он строит модель «ground truth» из 2–10 успешных выполнений и проверяет новые запуски по структуре, а не по совпадению шагов.</p><ul><li>ИИ-агенты с Computer Use недетерминированы: один и тот же задача может решаться разными путями.</li><li>GitHub предлагает <b>Trust Layer</b> — внешний слой валидации, который учится на успешных запусках и выделяет обязательные этапы.</li><li>В основе — <b>Prefix Tree Acceptor (PTA)</b> и <b>dominator analysis</b> из теории компиляторов.</li><li>В эксперименте метод показал 100% accuracy, precision, recall и F1 против 82,2%, 83,3%, 60,0% и 69,8% у самооценки агента.</li><li>Trust Layer лучше определяет «не баг, а шум»: F1 52,2% против 0% у внутренней самопроверки агента.</li></ul><p>Современная разработка всё чаще сталкивается с ситуацией, когда «правильно» нельзя описать одной последовательностью действий. Агент может открыть поиск в VS Code через горячую клавишу или через меню, подождать загрузки или успеть до неё, кликнуть мышью или использовать клавиатуру. Для человека результат одинаков. Для классического теста — разные выполнения, одно из которых рискует быть отмечено как регрессия.</p><h2>Почему классические тесты сдаются</h2><p>Привычные инструменты тестирования хороши, пока путь выполнения фиксирован. Как только поведение начинает ветвиться, они начинают ломаться не от плохой инженерии, а от неверной посылки: «правильность = точное совпадение последовательности состояний».</p><ul><li><b>Assertion-based testing</b> требует вручную прописывать каждую проверку и не терпит допустимых альтернативных путей.</li><li><b>Record-and-replay</b> чувствителен к задержкам сети, рендерингу и незначительным изменениям интерфейса.</li><li><b>Visual regression</b> сравнивает скриншоты изолированно, не понимая контекста выполнения и семантики состояний.</li><li><b>ML-оракулы</b> — чёрный ящик: нужны тысячи примеров обучения, и невозможно объяснить, почему помечен конкретный прогон как ошибочный.</li></ul><p>В России эта проблема особенно актуальна для команд, которые используют self-hosted runners или зеркала репозиториев. Сетевые лаги, доступ к зарубежным API и особенности локальной инфраструктуры добавляют ещё больше «шума», не связанного с качеством кода. В результате CI начинает «краснеть» по чужой вине, а разработчики привыкают игнорировать падения.</p><h2>Что значит «правильно» для агента</h2><p>GitHub предлагает переформулировать определение корректности: не «агент повторил записанный сценарий», а «агент достиг обязательных результатов». Это разделяет поведение на три категории.</p><ul><li><b>Обязательные состояния (essential states).</b> Этапы, без которых успех невозможен. Например, открытие диалога поиска и появление результатов.</li><li><b>Опциональные вариации (optional variations).</b> Случайный шум: спиннер загрузки, небольшая задержка, временное уведомление.</li><li><b>Сходящиеся пути (convergent paths).</b> Разные последовательности действий, которые приводят к одному и тому же итоговому состоянию.</li></ul><p>Ключевой инсайт: если состояние «спиннер загрузки» можно пропустить в быстром прогоне, оно не может быть обязательным. А вот состояние «диалог поиска открыт» доминирует результат: без него невозможно получить список найденного. Эта идея напрямую заимствована из теории компиляторов — <b>dominator analysis</b>.</p><h2>Как устроен Trust Layer</h2><p>Метод GitHub состоит из трёх шагов: собрать успешные выполнения, построить из них единую модель и выделить в ней обязательные состояния.</p><h3>От трасс к графу</h3><p>Вместо линейного скрипта каждое выполнение представляется как направленный граф. Узлы — наблюдаемые состояния: скриншоты интерфейса, снапшоты кода или структуры DOM. Рёбра — действия агента: клики, нажатия клавиш, вызовы API. Несколько успешных трасс объединяются в <b>Prefix Tree Acceptor (PTA)</b> — дерево, которое сохраняет общие префиксы и разветвляет пути там, где выполнения действительно расходятся.</p><h3>Три уровня эквивалентности</h3><p>Самая сложная часть — понять, когда два разных состояния на самом деле одно и то же. GitHub использует трёхуровневую проверку.</p><ol><li><b>Визуальные метрики.</b> Быстрые perceptual hash и SSIM ловят почти идентичные скриншоты.</li><li><b>Семантический анализ через LLM.</b> Мультимодальная модель решает, значима ли разница: timestamp или декорация окна игнорируются, пропавшая кнопка или другое сообщение об ошибке — фиксируются.</li><li><b>Консервативное слияние.</b> Состояния объединяются только при высокой уверенности, чтобы не потерять реальное расхождение.</li></ol><h3>Доминаторы выделяют суть</h3><p>После слияния к графу применяется <b>dominator analysis</b>. Состояние A доминирует состояние B, если любой путь от начала к B проходит через A. Те состояния, которые доминируют успешное завершение задачи, становятся обязательными. Всё остальное автоматически классифицируется как опциональный шум.</p><p>При проверке нового прогона алгоритм не ищет точное совпадение. Он проверяет, что обязательные состояния появились в правильном порядке. Если эталонная последовательность A → B → C, а агент выполнил A → X → B → Y → C, тест проходит: X и Y считаются случайными вставками. Если пропущено B или нарушен порядок — фиксируется конкретная ошибка с пояснением, какое состояние не достигнуто.</p><h2>Цифры: насколько это лучше</h2><p>Авторы сравнили свой метод PTA (Dominator Tree) с самооценкой агента Computer-Use Agent (CUA) на наборе тестов кастомного расширения VS Code. Разница оказалась впечатляющей.</p><ul><li><b>Accuracy:</b> CUA — 82,2%, PTA — 100% (+17,8 п. п.).</li><li><b>Precision:</b> CUA — 83,3%, PTA — 100% (+16,7 п. п.).</li><li><b>Recall:</b> CUA — 60,0%, PTA — 100% (+40,0 п. п.).</li><li><b>F1-Score:</b> CUA — 69,8%, PTA — 100% (+30,2 п. п.).</li></ul><p>Ещё важнее метрика «не баг, а шум» (not-a-bug). Сам агент не смог корректно классифицировать такие сценарии: F1 оказался 0%. Trust Layer на основе структурного анализа достиг F1 52,2%. Это означает, что разработчики тратят меньше времени на разбор ложных падений.</p><blockquote>We don’t need black-box models to judge other black-box models. We need structural guarantees developers can inspect, reason about, and trust.</blockquote><h2>Как это применить в своём CI/CD</h2><p>Полноценная реализация Trust Layer требует исследовательского прототипа, но идеи можно перенести и в повседневную работу команд.</p><ol><li><b>Собирайте «золотые» трассы.</b> Сохраняйте 2–10 успешных выполнений критичного сценария, чтобы у будущих прогонов была эталонная структура.</li><li><b>Отделяйте «должен быть» от «может быть».</b> Вместо проверки каждого шага фиксируйте ключевые чекпоинты: авторизация выполнена, данные сохранены, ответ получен.</li><li><b>Делайте тесты толерантными к порядку.</b> Если несколько допустимых путей ведут к одному результату, проверяйте результат и наличие обязательных промежуточных состояний, а не точную последовательность.</li><li><b>Используйте семантику, а не пиксели.</b> Визуальные регрессии должны понимать, что изменилось, а не просто считать разницу между скриншотами.</li><li><b>Не верьте агенту на слово.</b> Внешняя валидация по состояниям среды надёжнее самооценки модели, особенно в недетерминированных задачах.</li></ol><p>Для российских команд, работающих с ограниченным доступом к зарубежным API, важный вывод: если агент зависит от внешнего сервиса, валидация должна уметь отличать проблему сети от проблемы продукта. Иначе любой transient timeout будет превращаться в красный CI.</p><h2>Выводы</h2><p>ИИ-агенты переходят из демо в production, и вместе с ними должно эволюционировать тестирование. Проверять агента жёстким скриптом — всё равно что проверять водителя по тому, всегда ли он переключает передачи одной и той же рукой. Важно не это, важно — доехал ли он до пункта назначения и не нарушил ли правил.</p><p>Подход GitHub с Trust Layer, PTA и dominator analysis даёт объяснимую и лёгкую модель корректности, которую можно встроить в CI/CD. Она не требует тысяч примеров и не превращается в чёрный ящик. А главное — снижает количество ложных падений, за которыми теряются настоящие баги.</p><p>Источник: <a href="https://github.blog/ai-and-ml/generative-ai/validating-agentic-behavior-when-correct-isnt-deterministic/">Validating agentic behavior when “correct” isn’t deterministic — The GitHub Blog</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Своя self-hosted двухсерверная VPN-архитектура. Подробный путь разработки и ошибки, с которыми вы можете столкнуться</title>
      <link>https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r</link>
      <comments>https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Роман Фролов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r</guid>
      <description><![CDATA[<p>Проект представляет из себя быстрый способ воссоздать архитектуру состоящую из 2 серверов (локальный + удаленный) с определенными сервисами, которые решают специфические задачи. Проект сделан прежде всего для меня, а также для людей которые хотят свой готовый self-hosted сервер из коробки с полной системой обслуживания</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r">Своя self-hosted двухсерверная VPN-архитектура. Подробный путь разработки и ошибки, с которыми вы можете столкнуться</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[unix]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Музыка]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[DIY]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[VPN]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[NFT]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 26 Jul 2026 15:46:26 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всё
 началось с того, что меня перестал устраивать мой подход к 
развертыванию личных сервисов. Я решил переписать всё с нуля. К тому же 
это был отличный повод получить новые навыки и попробовать инструменты, 
до которых давно не доходили руки.</p><p>Арендовать мощные VPS под 
ресурсоемкие задачи в текущих реалиях выходит неоправданно дорого. При 
этом дома у меня уже был выделенный неттоп (мини-ПК) с 16 ГБ оперативной
 памяти на базе энергоэффективного процессора Intel N95.</p><p>Пройдя 
путь от простых Bash-скриптов и сторонних туннелей до полностью 
автоматизированной инфраструктуры, я создал проект ServeHub-2. В этой 
статье я подробно разберу, как эволюционировала сеть проекта, почему 
декларативный подход победил императивный и с какими неочевидными багами
 пришлось столкнуться в процессе автоматизации.</p><h2>История настройки сетевой архитектуры</h2><h3>Использование Tuna</h3><p>В
 самом начале проекта я еще не думал о VPN как о способе пробития NAT и 
основе, на которой будет строиться вся система. Первое, к чему я пришел —
 сервис Tuna. Если кратко, это аналог Cloudflare Tunnel за условные 300 
рублей. У него очень приятный веб-интерфейс и невероятно простая 
настройка. Однако для полноценной независимой архитектуры он не подошел 
по двум причинам:</p><ul><li>Сервера Tuna находятся вне контроля пользователя.</li><li>На удаленном сервере нельзя развернуть свои сопутствующие сервисы.</li></ul><p>В целом сервис действительно удобный, но для моих задач он оказался слишком ограничивающим.</p><p>Вот
 пример конфига для tuna (все максимально просто, создаем контейнеры для
 ssh туннеля, чтобы был доступ ssh, а также основной http туннель с 
привязкой к nginx или любому другому прокси если такой есть):</p><h3>В поисках гибкости: тесты Pangolin и переход к FRP</h3><p>После Tuna я решил двигаться в сторону собственного контроля и попробовал Pangolin.
 Однако решение быстро отвалилось: для дешёвого сервера оно оказалось 
слишком «тяжёлым» и избыточным. Главные минусы — ощутимый оверхед по 
ресурсам и лишний слой принудительной веб-аутентификации перед самими 
сервисами. Это ломало нормальное взаимодействие с родными мобильными 
клиентами (вроде Element для Matrix или Bitwarden для паролей), где 
повторная авторизация в браузере просто не нужна.</p><p>На смену пришел FRP (Fast Reverse Proxy).
 Он выполнял ту же функцию проброса, но хостил я его уже на собственном 
арендованном VPS в режиме Layer 4 (TCP). Это дало абсолютную гибкость: 
внешний VPS не заглядывал внутрь пакетов и ничего не расшифровывал, а 
просто пересылал сырой поток домой. Кроме того, это отлично 
оптимизировало расходы: вместо 300 рублей за Tuna и ещё 300 рублей за 
отдельный VPN, я стал платить всего 500 рублей за один стойкий VPS, 
который мог настраивать как хочу. (к тому же можно было обойтись даже 
дешевле, так как VPS с 4 гб оперативки загружен всего лишь на 40%, 
процессор всего на 20%-40%)</p><p>FRP состоит из 2 конфигурационных 
файлов (один на удаленном сервере frp server, другой на локальном frp 
client), все также довольно просто, однако его можно использовать на 
разных слоях. У меня он брал трафик за стандартный TCP и передавал его 
на локальный сервер.</p><p>Также доп. фишка в том что основная 
конфигурация происходит именно в frpc, который, в свою очередь, передает
 часть настроек на frp на удаленном сервере.</p><p>frpc.toml:</p><p>frps.toml:</p><h3>Полноценный переезд на WireGuard (AmneziaWG) и 8 часов отладки</h3><p>Со временем архитектура эволюционировала в сторону полноценной VPN-сети на базе WireGuard, а точнее — его модификации AmneziaWG. Причин для этого шага было несколько:</p><ul><li>Безопасность: FRP всё же открывал внутренние ресурсы в публичный интернет, оставляя их доступными для сканеров портов.</li><li>Удобство маршрутизации:
 Все участники сети стали равноправными узлами в одной виртуальной 
локальной подсети. Больше не нужно было настраивать постоянные 
односторонние пробросы.</li><li>Дополнительный бонус:
 Поскольку удаленный VPS был куплен в Нидерландах, через этот же VPN я 
автоматически получил безопасный доступ ко всем зарубежным ресурсам.</li></ul><p>Для реализации схемы на удаленном VPS был развернут контейнер wg-easy с поддержкой AmneziaWG, а на домашнем мини-ПК — клиентский контейнер Amnezia (сборка из Dockerfile с использованием amnezia-tools  и модулем ядра хоста).</p><p>И
 именно здесь я поймал самый изнурительный баг проекта. После 
развертывания трафик упорно шёл только в одну сторону. Часов 8 ушло на 
диагностику iptables, маршрутов и чтение зарубежных форумов (что 
бесполезно, учитывая специфику наших блокировок). Оказалось, провайдер 
просто дропал обратный трафик стандартного WireGuard, так как пакеты шли
 без маскировки. Причина крылась в docker-compose.yml: у меня было прописано image: ghcr.io/wg-easy/wg-easy:latest. Как выяснилось, тег latest  на Docker Hub намертво прилип к старой 14-й версии, а поддержка параметров AmneziaWG появилась только в ветке 15.x. Изменение тега на конкретную версию (15.3) решило проблему за секунду.</p><p>Благодаря
 переходу конфигурация получилась максимально простой, основные отличия 
от стандартной документации выделил в коде: (в основном то, на что 
пришлось долго рыть информацию)</p><h3>Настройка Nginx</h3><p>Чтобы
 сервисы были доступны исключительно внутри подсети VPN, я задействовал 
Nginx. Доступ к приложениям был жестко ограничен на уровне конфигурации —
 веб-сервер принимает запросы только из диапазона IP-адресов 10.8.0.0/24. Любые попытки постучаться на сервер из внешнего интернета без активного VPN-туннеля автоматически сбрасываются Nginx.</p><p>Логика
 распределения завязана на proxy-протоколе: Nginx на удаленном VPS 
выступает основным входным узлом, принимает зашифрованный трафик, 
заворачивает его в заголовки с реальным IP-адресом клиента и через 
туннель перекидывает на локальный Nginx домашнего сервера. Локальный 
веб-сервер уже сам расшифровывает SSL и распределяет трафик по конечным 
Docker-контейнерам, сохраняя реальные IP в логах безопасности.</p><p>Вставлю
 один кусок кода из nginx на удаленной машине для примера, так все 
остальное примерно похоже (конфиги использовались в виде .template):</p><h3>SSL-сертификаты</h3><p>Для получения валидных SSL-сертификатов я настроил работу через автоматический Certbot по challenge-валидации DNS-01 c API Webnames. Сам домен привязан к внутреннему IP-адресу 10.8.0.1.
 Проверка через DNS позволила выпустить единый wildcard-сертификат на 
весь домен и его поддомены без необходимости держать открытым 80-й порт 
веб-сервера наружу.</p><p>Уточню, что certbot запускается автоматически 
во время выполнения Ansible плейбука, поэтому самому кроме указания 
переменных ничего делать не нужно.</p><p>В
 итоге получилась схема, при которой все сервисы доступны по красивым 
доменным именам с HTTPS, но абсолютно невидимы для внешнего интернета.</p><p>Вот настройка certbot:</p><h2>История софта</h2><p>Параллельно
 с сетевой структурой развивался и сам набор приложений. Изначально я 
хотел собрать в одном месте утилиты, которыми пользуюсь каждый день, но в
 процессе селфхостинга быстро понимаешь: нельзя просто накидать 
контейнеров и надеяться, что мини-ПК справится, а конфигурационные файлы
 не превратятся в кашу.</p><h3>Первый стек и оптимизация</h3><p>Первыми на домашнем сервере прижились медиа-сервисы: Navidrome для стриминга музыки и Audiobookshelf
 для аудиокниг и подкастов. Они легковесные, имеют отличные мобильные 
клиенты с синхронизацией прогресса и полностью закрывают мои 
потребности. Позже к ним добавился Nextcloud как единое независимое облако для файлов, контактов и семейных документов.</p><p>Затем встал вопрос безопасного хранения паролей. Сначала я смотрел в сторону оригинального Bitwarden, но в итоге я выбрал Vaultwarden
 — альтернативный сервер на Rust, полностью совместимый с API Bitwarden.
 Он потребляет считанные мегабайты оперативной памяти и работает 
идеально. Дополнительно для удобства управления всей этой распределенной
 Docker-инфраструктурой в локальный стек был добавлен Portainer. (+ Portainer Agent на удаленный сервер)</p><p>Из интересных моментов, где мне пришлось немного больше возиться, чем с остальными сервисами это nextcloud настройка:</p><h3>Ошибки проектирования: почему я удалил Matrix (Synapse)</h3><p>Не все решения прошли проверку временем. На этапе использования Tuna и FRP я развернул сервер Matrix (Synapse)
 для защищенного обмена сообщениями. Мне казалось это крутой идеей, но 
когда я окончательно перешел на AmneziaWG, целесообразность мессенджера 
внутри закрытого туннеля сошла на нет.</p><p>Synapse требовал слишком 
много ресурсов, впустую расходовал оперативку домашнего ПК и усложнял 
конфиг Nginx. При этом реальной пользы для семьи он не приносил. Для 
критических алертов инфраструктуры и повседневного общения проще и 
эффективнее оказалось использовать Telegram. (плюс алертинг настроен 
именно через него) В итоге я полностью выпилил Synapse из стека, 
освободив ресурсы.</p><p>Вместо него я добавил в связку к wg-easy локальный AdGuard Home.
 Теперь он работает прямо внутри VPN-сети: очищает весь трафик от 
рекламы и трекеров на лету, кэширует DNS-запросы и не дает истории 
веб-серфинга улетать внешним провайдерам.</p><p>Основной проблемой с 
которой я столкнулся при использовании AdGuard Home, так это то что я 
так и не понял как заставить использовать AmneziaVPN клиент AdGuard как 
основной DNS, при этом AmneziaWG работает прекрасно. Как я понимаю дело в
 том что AmneziaWG работает намного проще на уровне ip и у него нету 
никаких доп фильтров, настроек и подобного, поэтому он просто берет 
данные из конфига.</p><h3>От костылей на Bash к декларативному Ansible</h3><p>Весь
 стек на обоих серверах разворачивался через bash скрипты, что было уж 
очень плохо с точки зрения идемпотентности. Во первых из-за bash мне 
постоянно приходилось очищать сервера, так как нормальных проверок у 
меня не было и писать я их не хотел, а также было много костылей с 
импортом переменных, записями в файлы и подобным.</p><p>Так я пришел к декларативному подходу и Ansible.
 Теперь вся конфигурация описывается в виде плейбуков и ролей, 
отражающих конечное желаемое состояние серверов. Конфиденциальные данные
 перенесены в файл secrets.yml, а хрупкие конструкции 
автоматизированы через шаблоны Jinja2. Проект стал идемпотентным: если 
шаги уже выполнены, Ansible их просто пропускает.</p><p>В итоге 
получилось несколько yaml файлов для стандартной настройки системы 
(bootstrap_os.yml) и для настройки каждого из хостов (setup_local.yml и 
setup_remote.yml). В итоге теперь все что нужно чтобы полностью с нуля 
развернуть проект - скачать Ansible, несколько других зависимостей на 
свой рабочий пк и запустить один manage_deploy.sh, в котором можно будет
 выбрать сценарий как будет вести себя Ansible и спокойно дождаться 
разворачивания сервисов.</p><p>Также благодаря Ansible я удобно 
реализовал переносимость проекта. Так как я решил не использовать тома 
docker, и вместо этого храню все в папках, чтобы перенести старые данные
 проекта нужно просто скопировать папку apps-data и положить ее в нужное
 место и все само заработает после повторного развертывания проекта. В 
Ansible выделяется отдельная пауза для этого.</p><p>Вот пример основного плейбука deploy.yml:</p><h3>Тестирование мультидистрибутивности с помощью Vagrant</h3><p>Проект
 изначально затачивался под работу на трех дистрибутивах: Ubuntu, Debian
 и Arch Linux. Тестировать Ansible-плейбуки прямо на рабочей локальной 
машине (в моем случае — EndeavourOS) слишком рискованно, а создавать 
виртуальные машины руками — долго и неудобно.</p><p>Решением стал Vagrant,
 позволяющий за пару минут развернуть чистые ОС в VirtualBox из готовых 
образов. Но в процессе настройки мультивендорного стенда в режиме 
сетевого моста (public_network) всплыли две критические проблемы:</p><ol><li>Конфликт DNS:
 По умолчанию Vagrant создает NAT-интерфейс для управления нодой. При 
включении второго (публичного) интерфейса для локальной сети ломался 
дефолтный DNS-резолвер. Проблему пришлось решать принудительной очисткой
 и перезаписью файла /etc/resolv.conf через inline-скрипт автоматизации Vagrant.</li><li>Проблема с GRUB на Debian: В используемом базовом образе generic/debian12
 конфигурация GRUB сохраняла жесткую привязку к конкретному имени диска 
из окружения сборщика. При повторном развертывании плейбуков на тестовом
 стенде это приводило к сбоям загрузчика. Чтобы автоматизировать 
очистку, пришлось внедрить скрипт, который на лету определяет имя 
системного диска через lsblk и автоматически передает правильные параметры в загрузчик через утилиту debconf-set-selections.</li></ol><p>Вот код Vagrantfile: (в node.vm.provision происходит основное решение ошибок)</p><p>Надежная система бэкапов на базе BorgmaticДля создания резервных копий я внедрил Borgmatic
 (удобную надстройку над дедуплицирующим инструментом Borg Backup). Весь
 процесс автоматизирован с помощью связки системных юнитов borgmatic.service и borgmatic.timer. В бэкап уходят две ключевые директории: apps-data (конфигурации приложений и баз данных) и PersonalData (медиатека: музыка, книги, подкасты, файлы Nextcloud).</p><p>Развертывание
 системы бэкапов полностью берет на себя Ansible. Мне достаточно указать
 UUID внешнего жесткого диска — скрипт сам проверит его наличие в 
системе, примонтирует в нужную директорию, создаст зашифрованный 
репозиторий и настроит политику ротации (хранение 7 ежедневных, 4 
еженедельных и 6 ежемесячных копий). Также в Prometheus выведен 
мониторинг самого репозитория .borg для отслеживания его размера и статуса успешности архивации.</p><p>Главная
 проблема при бэкапе работающих Docker-контейнеров — риск скопировать 
базу данных в «битом» или неконсистентном состоянии, если в момент 
создания архива в нее шла активная запись. Чтобы решить эту проблему, я 
задействовал механизм хуков в конфигурации Borgmatic.</p><p>Перед началом резервного копирования автоматически срабатывает команда остановки контейнеров проекта (docker-compose down),
 а после успешного завершения (или в случае возникновения непредвиденной
 ошибки) контейнеры автоматически поднимаются обратно в фоновом режиме. 
Для удобного просмотра архивов и быстрого восстановления файлов я 
развернул веб-интерфейс Borg UI.</p><p>Конфигурация borgmatic: (использую как Jinja2 шаблон, чтобы Ansible в плейбуках сам подставил переменные)</p><h2>Наблюдаемость (Observability) уровня Enterprise</h2><p>В последних релизах (v1.2.0 и v1.3.0) фокус проекта сместился на мониторинг и работу с логами.</p><h3>Эволюция алертинга и переход на Gatus</h3><p>Изначально для мониторинга доступности я смотрел на Uptime Kuma, но отказался из-за отсутствия удобной декларативной настройки через конфиги. Затем я развернул связку Blackbox Exporter и Alertmanager
 с уведомлениями в Matrix. Но тут крылась логическая несостыковка: весь 
алертинг был завязан на локальном ПК, и в случае его аппаратного отказа я
 бы просто лишился уведомлений.</p><p>Тогда я решил вернуть Uptime Kuma,
 но развернуть его на удаленном VPS в качестве внешнего «сторожа» и 
автоматизировать его настройку через Python-скрипт с библиотекой uptime-kuma-api. Но и тут ждали «грабли» — библиотека не обновлялась три года и намертво ломалась на свежих версиях Kuma.</p><p>В итоге идеальным решением стал Gatus.
 Он изначально проектировался под управление через YAML-конфиги и 
поддерживает отправку алертов, если сервер не отвечает. Из-за специфики 
фронтенда Gatus (он не умеет работать из подкаталога типа /gatus), мне пришлось перенести его и wg-easy на полноценные субдомены gatus. и wireguard.</p><p>Для Gatus получился простой конфиг:</p><p>Для мониторинга аппаратных ресурсов удаленного и локального серверов была развернута связка node-exporter + cAdvisor. Все уведомления теперь приходят мгновенно в Telegram-бота. Чтобы 
избежать лавины одинаковых сообщений (например, при перезагрузке хоста),
 в Alertmanager настроена жесткая группировка и дедупликация событий. 
Также добавлен экспортер для AdGuard Home, выводящий статистику 
заблокированных запросов в Grafana.</p><h3>Централизованные логи: Loki + Grafana Alloy</h3><p>В релизе v1.3.0 в стек была добавлена централизованная система сбора логов Loki. Вместо устаревшего Promtail в качестве агента сбора я применил Grafana Alloy.</p><p>Он
 эффективно собирает логи со всех запущенных Docker-контейнеров, парсит 
их и передает в Loki. Теперь вся история событий, ошибок веб-сервера 
Nginx или падений внутренних приложений доступна в едином интерфейсе 
Grafana с возможностью удобной фильтрации через LogQL, что значительно 
упрощает отладку.</p><p>Конфиг Loki:</p><p>Конфиг Grafana Alloy: (локальный конфиг)</p><h2>Интерфейс: переход на Homepage</h2><p>Изначально для 
домашней страницы я написал кастомную минималистичную HTML-панель с 
Glassmorphism-дизайном. Выглядело это красиво, но добавлять новые 
сервисы вручную через постоянную правку исходного кода было крайне 
неудобно.</p><figure><img src="https://media.tproger.ru/user-uploads/139471/2026-07-15/8a8f2752-8aac-4aa5-898e-98affd01cdff.webp" alt="" /><figcaption>HTML + CSS</figcaption></figure><p>В итоге я заменил самописную страницу на полноценный комьюнити-проект Homepage.
 Это дало некоторую гибкость: вся панель настраивается через простые 
YAML-файлы и поддерживает встроенные виджеты интеграции. Пока что она 
простенькая, но возможно в будущем сделаю что-то более продвинутое.</p><figure><img src="https://media.tproger.ru/user-uploads/139471/2026-07-15/90c65d4a-1310-4a30-b1ad-9e4d3083959d.webp" alt="" /><figcaption>Homepage</figcaption></figure><h2>Заключение</h2><p>Постарался
 подробно рассказать о структуре проекта и как я к этому пришел, очень 
много я не добавил, если пост зайдет, то я обязательно более подробно 
пройдусь по некоторым моментам: как я настраивал Matrix и на каком 
моменте я решил его убрать, как собирал локальный amnezia 
контейнер-клиент, что нового я добавил в релизе 1.4.0 и другое.</p><p>Также
 я перешел с manage_deploy.sh на отдельный GUI клиент, который 
будет полностью автоматизировать процесс подготовки к deploy. (написан на Go Wails). Про это тоже возможно сделаю статью.</p><p>Вся кодовая база проекта, подробная документация, инструкции по развертыванию открыты и доступны для сообщества:</p><p>🔗 GitHub-репозиторий: <a href="https://github.com/canntstand/ServeHub-2" rel="noopener noreferrer nofollow">https://github.com/canntstand/ServeHub-2</a></p><p>Это
 моя первая статья на этом сайте и в то же время первый личный проект, которому я 
отдал так много времени (3 месяца). Буду рад вашему фидбеку в 
комментариях!</p>]]></content:encoded>
    </item>
    <item>
      <title>Один фреймворк для Android и iOS: звучит круто, работает?  Нет</title>
      <link>https://tproger.ru/articles/odin-frejmvork-dlya-android-i-ios-zvuchit-kruto-rabotaet-net</link>
      <comments>https://tproger.ru/articles/odin-frejmvork-dlya-android-i-ios-zvuchit-kruto-rabotaet-net?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Роман Новохацкий]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/odin-frejmvork-dlya-android-i-ios-zvuchit-kruto-rabotaet-net</guid>
      <description><![CDATA[<p>Почему единый кроссплатформенный фреймворк для автотестов Android и iOS не работает на практике и когда стоит разделить его на два отдельных проекта.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/odin-frejmvork-dlya-android-i-ios-zvuchit-kruto-rabotaet-net">Один фреймворк для Android и iOS: звучит круто, работает?  Нет</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Распознавание]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Финтех]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 23 Jul 2026 13:20:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>Я сделал автотесты на Appium для Android и iOS в одном проекте. Один репозиторий, общий фреймворк, общие Page Objects, общие steps. Красота.</p><p>Потом проект вырос, в команду пришли ещё люди, и стало понятно: этот красивый монолит пора разделять.</p><p>Это было взвешенное решение. В какой-то момент общий фреймворк превратился в поле мерж-конфликтов, где ты уже не тесты пишешь, а разбираешься, кто чей page object сломал и почему Android отвалился после правки для iOS.</p><p>Appium тут ни при чём, как и скорость тестов. Проблема была в архитектуре: один общий слой для двух разных платформ начал мешать сильнее, чем помогать.</p><p>Как говорил один мой коллега, перефразируя классическое “вам шашечки или ехать”:</p><blockquote>Ты сюда страдать пришёл или тесты писать?</blockquote><p>После этого решение разделить Android и iOS на два проекта стало очевидным.</p><p>Сейчас у меня два отдельных проекта: mb-android-tests и mb-ios-tests. И знаете что? Это лучшее архитектурное решение за всё время на этом проекте. Серьёзно.</p><p><b>Контекст: что за проект и почему это важно</b></p><p>Финтех. Нативное приложение. Отдельные кодовые базы, Kotlin на Android, Swift на iOS. И UI там не «три кнопки и список», формы с десятками полей, кастомные контролы, WebView-вставки, платежи, валютные операции, бюджетные переводы. Ну вы поняли.</p><p>Стек: Java 21, TestNG, Appium 2.x, Selenide, Allure, Maven. CI на GitLab, крутится на Mac Mini. 5 Android-эмуляторов, 4 iOS-симулятора, 9 Appium-серверов — по одному на устройство.</p><p>Но это сейчас. А начиналось всё с одного жирного монолита.</p><p><b>Старый проект: 8 модулей и конструктор-монстр</b></p><figure><img src="https://media.tproger.ru/user-uploads/139426/2026-07-07/54be52bb-7e50-4e11-b624-86cc1ce0766b.webp" alt="" /></figure><p>Идея была «как в книжке»: один репозиторий, модульная структура, переиспользование. DRY во все поля. Ну а чё, красиво же.</p><p>8 модулей. Один mvn clean install. Все зависят от mobile-automation-framework, в котором живут DriverFactory, BaseTest, общие Page Objects и слой Steps.</p><p>А DriverFactory принимал <b>11 параметров</b>. Одиннадцать, Карл.</p><p>Половина нужна только Android, другая только iOS. Но метод один. Потому что так более по программистцки, как написано в каждой второй статье про архитектуру автотестов.</p><p>Когда я работал один, было норм. Ты сам знаешь, от куда что идет.</p><p>А потом пришли люди.</p><p><b>Почему с людьми всё навернулось</b></p><p><b>Мерж-конфликты каждый божий день</b></p><p>Вот конкретная ситуация. Один человек правит LoginPage в общем фреймворке, добавляет метод для iOS, меняет локатор. Второй в тот же момент рефакторит этот же LoginPage под новую версию Android-приложения.</p><p>Мерж. Конфликт.</p><p>И тут начинается самое весёлое: какой локатор правильный? Для Android? Для iOS? Для обоих? Кто будет разбираться? Тот, кто мёрджит? А он вообще контекст понимает?</p><p>Это не единичный случай. Это было <b>каждый</b> день. Потому что mobile-automation-framework получился общим модулем, от которого зависят все. И все туда лезут. Постоянно.</p><figure><img src="https://media.tproger.ru/user-uploads/139426/2026-07-07/3866002d-86c5-4894-a441-2522f48dcab1.webp" alt="" /></figure><p><b>Обновление одной библиотеки = блокировка всех</b></p><p>Решил обновить java-client с 7.x на 8.x. Нормальное желание — API поменялся, MobileElement удалили, capabilities переехали на типизированные Options.</p><p>Вот что произошло в реальности:</p><ol><li>Меняю версию в parent pom.xml</li><li>MobileElement удалён → compilation error в DriverFactory, во всех DriverManager’ах</li><li>DesiredCapabilities → UiAutomator2Options / XCUITestOptions → переписываю все менеджеры</li><li>selenide-appium 1.x несовместим с java-client 8.x → обновляю до 2.x</li><li>selenide-appium 2.x требует Selenide 6.x → обновляю Selenide</li><li>Selenide 6.x ломает API page objects → переписываю page objects во всех модулях</li><li>А Selenide 6.x ещё и Java 8 не поддерживает → обновляю Java</li></ol><p>Одна библиотека.</p><p>Задача «обновить одну библиотеку» превратилась в 50+ файлов, 4-5 каскадных обновлений, 2-3 недели работы. И всё это время develop нестабилен. Все заблокированы. Тесты не запускаются.</p><p>Две недели.</p><p>Из-за одной строчки в pom.xml.</p><p><b>Page Objects с if/else — это два page object в одном файле</b></p><p>Общие Page Objects звучат красиво на бумаге: пишем один раз, используем для обеих платформ. А на практике…</p><p>Это не page object. Это два page objects, запиханных в один файл через if/else. И так в каждом методе.</p><p>А сверху ещё слой Steps. Обёртки над page objects «для читаемости». И в steps тоже if (platform), потому что логика взаимодействия разная. На Android ты скроллишь через UiScrollable семантически, «прокрути до элемента с текстом X». На iOS координатами, «двигай палец из точки A в точку B». Один метод в steps, а внутри два разных мира.</p><p>В какой-то момент ловишь себя на мысли: я же не тесты пишу. Я подгоняю pages и steps под две платформы, чтобы фреймворк не развалился. Это уже не автоматизация тестирования, это поддержка фреймворка ради поддержки фреймворка.</p><p><b>Каждый работает в своём темпе и все друг другу мешают</b></p><p>У одного задача покрыть тестами новый экран на Android. У второго пофиксить падающие тесты на iOS. У третьего добавить тестовые данные.</p><p>Все трое лезут в mobile-automation-framework. Все трое меняют pom.xml, BaseTest, page objects. Каждый в своей ветке.</p><p>А потом мёрдж.</p><p><b>Технические причины, которые добили окончательно</b></p><p>Ладно, человеческий фактор. Но были и чисто технические штуки, которые окончательно убедили меня, что кроссплатформа тут бессмысленна.</p><p><b>Локаторы: работай с тем, что дают</b></p><p>Сразу скажу то, о чём мало кто пишет в статьях: в мобильной автоматизации ты работаешь с тем, что дают, а не с тем, что хотелось бы.</p><p>В теории есть AccessibilityID единый локатор для обеих платформ. Звучит хорошо. А на практике? Попробуй попросить мобильных разработчиков расставить одинаковые accessibility-идентификаторы на сотнях экранов. На Kotlin и Swift. Одновременно. Они тебя вежливо пошлют, но скорее всего не вежливо. И будут правы, у них свои спринты, свои дедлайны, и твои автотесты в их приоритетах где-то между «поправить тень у кнопки» и «никогда».</p><p>Так что реальный выбор:</p><p><b>XPath -</b> работает, но на iOS может быть тормозным. На Android через UiSelector быстро, нативно, надёжно. На iOS через NSPredicate тоже ок. А «универсальные» XPath типа //*[@text='Войти' or @label='Войти']  это путь к боли, потому что Page Source на двух платформах два совершенно разных XML-дерева.</p><p><b>Координаты -</b> костыль? Да. Но иногда единственный вариант. Когда у тебя кастомный контрол без accessibility-свойств, а разработчик говорит «это декоративный элемент», ты либо тыкаешь по координатам, либо не тестируешь.</p><p><b>OpenCV</b> - есть ещё вариант с распознаванием элементов по картинке. Для некоторых кейсов реально выручает. Но это отдельная тема на целую статью, может напишу потом.</p><p>Суть в том, что «напиши один локатор и работай на двух платформах» это миф. Page Source на Android это android.widget.Button с resource-id. На iOS  XCUIElementTypeButton с name и label. Разные типы элементов, разные атрибуты, разная глубина вложенности. Разные миры.</p><p><b>StaleElementReferenceException — «подарок» от iOS</b></p><p>Android рендерит UI через Choreographer синхронно с VSYNC. Элемент появился → стабилен → кликаем.</p><p>iOS рендерит через CoreAnimation с неявными анимациями. Элемент есть в дереве, но ещё анимируется. Формально кликабелен, фактически хрен.</p><p>Стандартный WebDriverWait с elementToBeClickable это не ловит. Элемент «кликабелен» по мнению Appium wait завершается. А потом click() падает, потому что DOM изменился между вызовами.</p><p>На Android этой проблемы нет вообще. Тот же тест, тот же wait, тот же код зелёный на Android, красный на iOS. Один и тот же метод, два разных результата. И это не баг это фундаментальное различие платформ.</p><p>Кастомные wait-стратегии для iOS отличаются от Android принципиально. Пихать их в один фреймворк строить leaky abstraction, которая протекает на каждом шаге.</p><p><b>Жесты — два разных мира</b></p><p>Свайп вниз на Android:</p><p>Свайп вниз на iOS:</p><p>Чувствуете разницу? И даже длительность свайпа важна: на Android 200мс это нормальный скролл. На iOS 200мс это fling, и элемент улетает за экран.</p><p>«Кроссплатформенная» обёртка для скролла функция на 40 строк с двумя ветками if (platform), внутри каждой и ещё if для performSwipeDown() vs performSwipeUp(). На 50+ экранах таких обёрток, которых десятки.</p><p>И каждая место для бага.</p><p><b>Решение: разделяй и властвуй</b></p><p>Решение было болезненным. Я реально откладывал, потому что казалось, что это шаг назад. Дублирование кода, нарушение DRY, всё такое. Мозг сопротивлялся.</p><p>А потом я просто сел и разделил.</p><p>Никаких общих page objects. Никаких общих steps. Никакого общего DriverFactory с 11 параметрами. Каждый проект со своим pom.xml, свои зависимости, свой BaseTest, свои локаторы.</p><p>Что осталось общего: подход к структуре (Maven + TestNG + Allure), CI-шаблоны, принципы организации. Но не код. Код полностью раздельный.</p><p><b>Что поменялось на практике</b></p><p>В Android-проекте DriverManager типизирован под AndroidDriver. В iOS под IOSDriver. Не AppiumDriver&lt;MobileElement&gt; с кастами и проверками, а конкретный тип для конкретной платформы. IDE подсказывает только релевантные методы. Компилятор ловит ошибки на этапе сборки, а не в рантайме.</p><p>BaseTest принимает ровно те параметры, которые нужны. Android: deviceName, platformVersion, udid, appPackage, appActivity, systemPort, serverUrl, appPath — 8 штук, все релевантные. iOS: deviceName, platformVersion, udid, appPath, serverUrl, wdaLocalPort — 6. Никаких @Optional("systemPort") со строкой “systemPort” в качестве дефолта.</p><p><b>А мерж-конфликты?</b></p><p>Когда один человек работает в mb-android-tests, а второй в mb-ios-tests то они <b>вообще</b> не пересекаются. Разные репозитории. Конфликт невозможен физически.</p><p>Обновление java-client в Android-проекте не затрагивает iOS. Хочешь обновить, обновляй. iOS продолжает работать на старой версии.</p><p>Добавить новый параметр для iOS? Меняешь BaseTest и testng.xml в iOS-проекте. Android даже не узнает.</p><p>Это прям кайф.</p><p><b>А как же дублирование кода?!</b></p><p>Конечно, конечно. Первый вопрос, который задают: «Но ведь ты пишешь тесты дважды!»</p><p>Нет.</p><p>Я пишу каждый тест один раз и без костылей. Без if (platform) в каждом методе. Да, для одного и того же экрана есть два теста, один для Android, один для iOS. Но каждый из них чистый, понятный, заточенный под свою платформу.</p><p>В старом варианте я тоже «писал один раз», а потом тратил столько же времени на поддержку if/else, мерж-конфликты и каскадные обновления. «Экономия» на создании оборачивалась переплатой на поддержке. С процентами.</p><p><b>Когда кроссплатформа всё-таки ок</b></p><p>Я не топлю за то, что кроссплатформенный фреймворк абсолютное зло. Есть ситуации, где он работает:</p><p>Приложение простое, пара экранов, стандартные контролы, минимум кастомного UI.</p><p>UI реально идентичен на обеих платформах. Бывает, наверное.</p><p>Команда из одиного человека. Сам пишешь, сам мёрджишь, сам разруливаешь. Голова справляется.</p><p>Минимум жестов. Нет сложных свайпов, drag-and-drop, pinch-to-zoom.</p><p>Если у тебя финтех, банк, enterprise-приложение с сотнями экранов, кастомными контролами и тремя+ QA, то два проекта дешевле. Не в строках кода, а во времени. В нервах. В часах, потраченных на мерж-конфликты вместо написания тестов.</p><p><b>Итого</b></p><p>Два проекта это не шаг назад и не двойная работа. Со стороны может выглядеть именно так, но на практике ты пишешь каждый тест один раз, под конкретную платформу, без лишних компромиссов. Потом поддерживаешь его без постоянных мерж конфликтов, каскадных обновлений и if/else в каждом втором методе.</p><p>Кроссплатформенный фреймворк на Appium для сложного нативного приложения часто оказывается иллюзией экономии.</p><p>В следующей статье покажу, как у нас устроена инфраструктура для 9 параллельных устройств на одном Mac Mini: порты, bash скрипты, Appium серверы и workaround’ы, которых нет в документации. Спойлер: там тоже всё не совсем как в гайдах.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как работает IT-команда: путь задачи от бэклога до релиза</title>
      <link>https://tproger.ru/articles/kak-rabotaet-it-komanda-put-zadachi-ot-bekloga-do-reliza</link>
      <comments>https://tproger.ru/articles/kak-rabotaet-it-komanda-put-zadachi-ot-bekloga-do-reliza?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Лена Ф]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-rabotaet-it-komanda-put-zadachi-ot-bekloga-do-reliza</guid>
      <description><![CDATA[<p>Путь задачи от бэклога до продакшена: планирование, разработка, код-ревью, тестирование и CI/CD. Что делает команда на каждом этапе?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-rabotaet-it-komanda-put-zadachi-ot-bekloga-do-reliza">Как работает IT-команда: путь задачи от бэклога до релиза</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Ретро]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 23 Jul 2026 08:31:02 GMT</pubDate>
      <content:encoded><![CDATA[<h2>С чего начинается рабочий день</h2><p>Рабочий день разработчика в команде обычно начинается с проверки текущего состояния проекта. В трекере могли появиться комментарии к задаче, в pull request замечания от ревьюеров, а в CI могла упасть сборка. Иногда приоритет меняется из-за стоппера в соседней команде или ошибки, найденной во время тестирования.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-23/08943bd3-dddb-4c33-8f53-f3e8ff6b163c.webp" alt="" /></figure><p>Во многих командах после этого проходит дейли или короткий статусный созвон. Каждый участник рассказывает, что изменилось с предыдущей встречи, чем он занимается сейчас и какие сложности мешают двигаться дальше. Подробный разбор технической проблемы обычно выносят в отдельное обсуждение. Иначе десятиминутная встреча растянется на час, а большая часть команды будет слушать разговор, который касается двух человек.</p><p>После синка разработчик обновляет карточку задачи: меняет статус, добавляет ссылки на pull request или сборку, фиксирует блокеры и договорённости. По хорошему описанию коллега должен понять текущее состояние работы без дополнительного созвона.</p><p>Если задачу можно брать в разработку, перед первым коммитом стоит ещё раз проверить её содержание. В карточке должны быть указаны:</p><ul><li>цель изменения,</li><li>ожидаемое поведение системы,</li><li>пользовательские сценарии,</li><li>ограничения,</li><li>условия приёмки.</li></ul><p>Для интерфейсной задачи понадобится согласованный дизайн, для интеграции с другим сервисом потребуются контракт API и описание возможных ошибок.</p><h2>Как задача попадает в работу</h2><p>Новая фича начинается с потребности, которую нужно превратить в понятную задачу. Идея может появиться после обращения пользователей, анализа продуктовых метрик, запроса бизнеса, изменения требований безопасности или обсуждения внутри команды. Сначала такие идеи складывают в бэклог. Бэклог хранит задачи, которые команда потенциально может взять в работу. Некоторые из них ждут дополнительных данных, другие зависят от изменений в соседних компонентах, третьи уступают более срочным задачам. Поэтому положение карточки в бэклоге ещё не означает, что разработчик приступит к ней в ближайшем спринте.</p><p>Перед планированием задачи приоритизируют. Команда учитывает ожидаемый результат, объём разработки, зависимости, технические риски и сроки. Приоритет может измениться, если появились новые данные, обнаружился блокер или другая задача стала важнее для релиза.</p><p>Затем задача проходит груминг, который также называют refinement. На встрече разработчики, тестировщики, менеджер и другие участники проекта уточняют, что именно требуется сделать. Здесь могут выяснить, что фичу нужно разделить на части, предварительно исследовать техническое решение или дополнить требования.</p><p>Готовая к разработке карточка обычно содержит:</p><ul><li>цель изменения и ожидаемый результат;</li><li>пользовательские сценарии;</li><li>дизайн, спецификацию или контракт API;</li><li>условия приёмки и способ тестирования;</li><li>ограничения и зависимости от других компонентов;</li><li>оценку объёма работы.</li></ul><p>На груминге также проверяют размер задачи. Крупную фичу декомпозируют на части, которые можно последовательно разработать, проверить и включить в релиз. Если для решения требуется отдельное исследование, команда создаёт техническую задачу на проработку. Разработчик смотрит затронутые компоненты, проверяет варианты реализации и фиксирует выводы. После этого основную задачу можно точнее оценить и дополнить техническими деталями.</p><p>При работе спринтами готовые карточки обсуждают на планировании. Команда определяет цель спринта, оценивает доступные ресурсы и выбирает объём работы. После планирования карточка переходит в статус To Do. Теперь у разработчика есть понятная цель, согласованный объём и условия приёмки.</p><p>С этого момента начинается техническая работа: исследование проекта, выбор решения и декомпозиция реализации.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-23/4f14adfd-774b-4110-a418-7f0fe09d413b.webp" alt="" /></figure><h2>Что проверяет разработчик перед кодом</h2><p>Сначала разработчик изучает текущую реализацию и определяет область изменений: находит нужный участок проекта, проверяет связанные компоненты и оценивает зависимости. Этот этап обычно называют техническим ресерчем и на этом этапе нужно ответить на несколько вопросов:</p><ul><li>где находится код, связанный с задачей;</li><li>какие модули, интерфейсы и пользовательские сценарии изменятся;</li><li>какие готовые компоненты можно использовать;</li><li>зависит ли реализация от другой задачи или сервиса;</li><li>потребуется ли feature toggle или A/B-тест;</li><li>какие проверки нужно добавить или обновить.</li></ul><p>Отдельно разработчик смотрит активные ветки и pull request в той же части проекта. Параллельные изменения могут затронуть общий интерфейс или компонент. Если узнать об этом заранее, можно согласовать порядок мержа и избежать повторной проверки обеих задач.</p><p>Дальше разработчик определяет объём тестирования. Он изучает существующие тест-кейсы, отмечает затронутую функциональность и решает, где понадобятся юнит-тесты или UI-тесты. Эти данные пригодятся и тестировщику при подготовке функциональной проверки и регресса.</p><p>Результат ресерча фиксируют в карточке задачи. Там появляются технический план, список затронутых компонентов и способ проверки. Для небольшого изменения на это может уйти несколько комментариев. Сложную проработку выносят в отдельную задачу, чтобы сначала проверить решение и только потом оценивать реализацию.</p><p>После ресерча разработчик создаёт ветку и разбивает работу на последовательные шаги. Теперь можно переходить к коду: область изменений понятна, зависимости учтены, а способ проверки согласован.</p><h2>Как проходит код-ревью</h2><p>Когда реализация готова, разработчик открывает pull request и связывает его с карточкой задачи. Вместе с кодом ревьюер получает контекст: цель изменения, требования, затронутые компоненты и способ проверки.</p><p>Перед ручным ревью запускается CI. Пайплайн собирает проект, проверяет код линтером и прогоняет юнит-тесты. Результаты видны прямо в pull request, поэтому ошибки сборки и упавшие тесты можно исправить до мержа.</p><p>Ревьюеры проверяют:</p><ul><li>соответствует ли реализация требованиям задачи;</li><li>корректно ли код взаимодействует с существующими модулями и интерфейсами;</li><li>учтены ли изменения в соседних компонентах;</li><li>добавлены ли необходимые тесты;</li><li>проходят ли автоматические проверки.</li></ul><p>Обычно pull request смотрят разработчики, которые работают с той же функциональностью и знают её ограничения. Если в команде только один специалист по нужной платформе, подключают коллегу из другой команды с подходящей технической экспертизой.</p><p>Замечания оставляют в комментариях к конкретным строкам или участкам решения. Автор исправляет код, обновляет pull request и повторно запускает проверки. Если комментариев недостаточно для обсуждения сложной реализации, участники созваниваются и разбирают решение вместе.</p><p>После исправлений ревьюеры подтверждают изменения. Код мержится в основную ветку разработки, а задача переходит на тестирование. С этого момента проверяется уже собранная версия, в которой изменение работает вместе с остальным кодом проекта.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-23/bd69fe99-772a-480d-bdf8-6dd5c6bbcf3b.webp" alt="" /></figure><h2>Как задачу тестируют</h2><p>После код-ревью CI собирает тестовую версию. Ссылка на сборку появляется в карточке задачи, поэтому разработчик и тестировщик работают с одним и тем же вариантом приложения.</p><p>Сначала разработчик самостоятельно проходит сценарии, указанные в задаче и тест-кейсах. Он проверяет новую функциональность и участки проекта, которые затронули изменения. После этого сборка передаётся тестировщику.</p><p>Тестировщик проверяет соответствие условиям приёмки, работу связанных компонентов и регрессионные сценарии. Быстрые автоматические проверки запускаются в CI, а ресурсоёмкие UI-тесты могут выполняться по расписанию или перед релизом.</p><p>Найденная ошибка возвращает карточку в статус Reopen. Разработчик исправляет код, CI выпускает новую сборку, и проверка запускается повторно. После успешного тестирования задача получает статус готовности к релизу и связывается с нужной версией продукта.</p><h2>Как команда готовит релиз</h2><p>Когда задачи прошли тестирование, команда фиксирует состав релиза. Карточки связывают с конкретной версией продукта, а изменения, которые не успели пройти все проверки, переносят в следующую.</p><p>В проектах с релизным циклом CI создаёт релизную ветку и собирает из неё готовую версию. При непрерывной доставке похожий пайплайн запускается для каждого принятого изменения. В обоих случаях сборка выполняется в настроенном окружении, чтобы результат не зависел от компьютера конкретного разработчика.</p><p>Перед выпуском срабатывают quality gates:</p><ul><li>проект успешно собирается;</li><li>юнит-тесты проходят;</li><li>статический анализ не находит критических проблем;</li><li>регрессионные и UI-тесты завершаются успешно.</li></ul><p>Если в релизной версии находят ошибку, исправление делают в отдельной ветке от релизной. После повторного ревью и тестирования код возвращают в релиз, а затем переносят в основную ветку разработки. Так исправление сохраняется и в следующих версиях.</p><p>Дальнейший процесс зависит от настроек CD. При Continuous Delivery готовая сборка ждёт ручного подтверждения выпуска. При Continuous Deployment изменение автоматически отправляется в прод после прохождения всех проверок.</p><p>Команда публикует именно ту сборку, которая прошла тестирование. Сборка релизной версии на другом компьютере или в изменившемся окружении создаёт новый артефакт, поэтому результаты предыдущих проверок уже нельзя считать достаточными.</p><p>Если вам интересно работать над программными решениями в составе нашей команды, загляните на<a href="https://centicore.ru/career/?utm_source=chatgpt.com"> карьерную страницу Centicore Group</a>. Там мы публикуем открытые вакансии и отзывы наших разработчиков, аналитиков и тестировщиков.</p><h2>Что происходит после выхода в прод</h2><p>После публикации команда проверяет, как новая версия работает у пользователей. Для мобильного приложения релиз можно сначала открыть небольшой части аудитории, а затем постепенно увеличивать охват, чтобы обнаружить проблему до полного распространения версии.</p><p>Команда отслеживает:</p><ul><li>ошибки и сбои в новой версии;</li><li>технические показатели затронутых компонентов;</li><li>продуктовые метрики, указанные в задаче;</li><li>обращения пользователей в поддержку.</li></ul><p>Набор метрик зависит от цели изменения. Для нового пользовательского сценария можно смотреть количество открытий, завершённых действий и выходов на отдельных этапах. Если фича выпущена в рамках A/B-теста, команда сравнивает поведение контрольной и тестовой групп.</p><p>При серьёзной ошибке собирается инцидент-колл. Разработчики, тестировщики и инженеры эксплуатации определяют причину сбоя и выбирают способ восстановления сервиса. Это может быть исправление, откат версии или отключение проблемной функциональности.</p><p>Для срочного исправления создают hotfix. Он проходит сокращённый по времени цикл, сохраняя обязательные проверки: код-ревью, сборку и тестирование затронутого сценария. После выпуска исправление добавляют в основную ветку разработки, чтобы ошибка не вернулась в следующем релизе.</p><p>Задачу закрывают после проверки технических и продуктовых показателей. Если новая функция работает стабильно и даёт ожидаемый результат, она остаётся в продукте. При отклонениях команда возвращается к требованиям, анализирует реализацию и планирует доработку.</p><h2>Как рабочие встречи связаны с задачей</h2><p>Рабочие встречи сопровождают задачу на разных этапах. У каждой встречи своя функция и конкретный результат: подготовленная карточка, выбранный объём работ, принятое техническое решение или проблема.</p><p>Основные встречи связаны с процессом так:</p><ul><li>на груминге уточняют требования и готовят задачи к планированию;</li><li>на планировании выбирают задачи для следующего спринта;</li><li>на дейлике проверяют прогресс и находят блокеры;</li><li>на техническом синке обсуждают зависимости и сложные решения;</li><li>на демо показывают готовую функциональность;</li><li>на ретро разбирают проблемы прошедшего цикла и корректируют процесс.</li></ul><p>Обсуждение должно завершаться зафиксированным решением: кто выполняет следующий шаг, что требуется уточнить и когда команда вернётся к вопросу. Детальный разбор отдельной проблемы лучше вынести из общей встречи и продолжить с участниками, которые работают над ней.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-23/e2fb2393-0592-4464-aebb-e53f69286002.webp" alt="" /></figure><h2>Итого</h2><p>В Centicore мы смотрим на задачу как на общий результат команды. Аналитик помогает сформулировать требования, разработчик отвечает за техническое решение, ревьюеры проверяют его влияние на проект, а тестировщики подтверждают, что всё работает по согласованным сценариям.</p><p>Поэтому статус Done для нас означает конкретный результат: изменение вышло в прод, работает стабильно и решает исходную задачу. До этого момента карточке ещё есть куда двигаться.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как проверять продукт на UX на примере личного кабинета студента</title>
      <link>https://tproger.ru/articles/kak-proveryat-produkt-na-ux-na-primere-lichnogo-kabineta-studenta</link>
      <comments>https://tproger.ru/articles/kak-proveryat-produkt-na-ux-na-primere-lichnogo-kabineta-studenta?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Лена Ф]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-proveryat-produkt-na-ux-na-primere-lichnogo-kabineta-studenta</guid>
      <description><![CDATA[<p>Как проверить продукт на UX: юзабилити-тест, айтрекинг Tobii и анализ эмоций. 32 респондента, 2 сегмента, 45 инсайтов и вывод, который вызвал споры.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-proveryat-produkt-na-ux-na-primere-lichnogo-kabineta-studenta">Как проверять продукт на UX на примере личного кабинета студента</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 21 Jul 2026 07:38:10 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этой статье расскажем, как погрузились в личный кабинет студента Президентской академии. Для этого использовали опросы, айтрекинг Tobii Pro и технологию SenseMachine, которая считывает эмоциональный отклик по микровыражениям лица. В итоге получили более 45 выявленных инсайтов и проблем и столько же рекомендаций на 150 слайдах в отчете. И один неожиданный вывод, о котором вы узнаете в конце.</p><p>Но сначала давайте определимся с тем, что мы считаем за «личный кабинет студента».</p><h2>«Личный кабинет» — слово, за которым может скрываться что угодно</h2><p>Президентской академии было важно понять, насколько их сервис отвечает ожиданиям и как он выглядит на фоне рынка. И чтобы посмотреть на фон, а заодно отраслевые стандарты и решения, мы провели экспертный аудит личных кабинетов (ЛК) шести крупных российских вузов. Иначе говоря — откалибровались.</p><p>И выявили кое-что интересное.</p><p>Изучение ЛК шести крупных российских университетов показало, что «личный кабинет» чаще всего не один продукт. За термином «личный кабинет» может скрываться что угодно: нативное мобильное приложение, веб-версия с частичной адаптацией под телефон, набор из множества несвязанных систем с отдельными логинами, в каждый из которых необходимо заходить отдельно, частично офлайновые процессы и т. д.</p><p>Немного отойдём в сторону — мы знаем, что ЛК имеются у различных платформ, к примеру, личный кабинет владельца ОСАГО, селлера на маркетплейсе или налогоплательщика. Это некая устоявшаяся отраслевая сущность, которая есть в разных крупных компаниях, цифровых сервисах и выполняет функцию некого внутреннего пространства, где пользователь видит свои данные и выполняет набор определенных действий.</p><p>А какой набор действий может быть у студента?</p><p>Например, смотреть оценки, успеваемость, вносить оплату за обучение или изучать расписание. Всё это может и должен обеспечивать ЛК. А вот если ЛК «не работает», то у нас возникают ситуации разной степени забавности. К примеру, у одного из вузов встроенный просмотрщик расписания был настолько неудобен, что в итоге студенты написали собственное неофициальное приложение, которое просто подтягивает данные с сайта. Оно и стало основным инструментом, потому что официальный интерфейс причиняет физическую боль.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-21/12a5fca5-0f64-462b-8a43-1006c156e7fc.webp" alt="" /><figcaption>Зачет по программированию автоматом</figcaption></figure><p>Это классический паттерн: если официальный продукт не справляется с ключевым сценарием — появляется обходной. В университетской среде это неофициальные приложения и боты. В коммерческих продуктах — переход к конкуренту.</p><p>Чтобы сравнивать вузы корректно, нам была нужна единая шкала. Но подходящего инструмента для сравнения не было — ведь никто до этого не сравнивал ЛК разных вузов. Поэтому мы придумали сравнительную шкалу сами.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-21/85a2c125-a074-496f-8509-f7038c22a50f.webp" alt="" /></figure><p>На фото выше вы видите индекс зрелости цифровой экосистемы — он показывает, насколько цифровая среда вуза организована как единое пространство для выполнения ключевых задач студента. Индекс учитывает не только наличие сценариев, но и их связность: сколько отдельных систем нужно задействовать, есть ли переходы между ними, насколько экосистема фрагментирована.</p><p>У многих вузов нет единого цифрового ресурса, с которым взаимодействуют студенты. У кого-то есть элементы личного кабинета в приложении или на сайте, а у кого-то, для того чтобы посмотреть и получить необходимую информацию, придётся пройтись по нескольким разным ресурсам: расписание в одном месте посмотреть, заказать справку в другом и на каждый раз нужно логиниться.</p><p>Такой фрагментации быть не должно, потому что хороший цифровой опыт в распределенной системе выглядит так:</p><ul><li>переходы между сервисами происходят незаметно,</li><li>нет повторной авторизации,</li><li>необходимый функционал «подтягивается» внутри текущего интерфейса,</li><li>пользователь не думает, в какой системе он сейчас находится.</li></ul><p>Удобный ЛК — это единое пространство. Идеал — это система одного окна. К примеру, у одного из вузов есть приложение для студентов, но в нём реализован не весь необходимый функционал. Недостающие функции подтягиваются извне — поверх приложения открывается страница сайта, и студент продолжает работать без дополнительной авторизации, и даже можно не заметить, что ты уже не совсем в приложении. Для студента это важно, потому что в момент работы с ресурсами не нужно переходить в браузер, нет необходимости логиниться заново. Учащийся продолжает работу в одной системе, в одном пространстве.</p><p>Наш индекс архитектурной зрелости — это и показывает: насколько цифровая среда вуза организована как единое пространство для выполнения ключевых задач студента. При этом не обязательно иметь один продукт. Но обязательно, чтобы пользователь (студент) не замечал, что их несколько.</p><p>Удобный ЛК —  не просто веяние времени, он снижает нагрузку на кураторов и административный персонал. Вопросов «А где заказать справку?», «А куда идти?», «А где оплатить?», «А у нас сегодня что, пар по философии дипломатических отношений не будет?» становится меньше, как и затраченного на это всё времени.</p><p>Для самих студентов это тоже удобно, например, не нужно ездить в вуз или дозваниваться до старосты или в сам вуз, чтобы узнать расписание. Посмотреть, в какой аудитории занятия, и узнать, что они перенесены, — всё это тоже можно сделать, не выходя из дома.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-21/dc707de4-3015-4c43-ba67-033331a8b7d1.webp" alt="" /></figure><p>Примечание: Мы рассчитали индекс для шести университетов из этого исследования. Если вы работаете с цифровым сервисом университета и хотите понять, где на этой шкале находится ваш вуз — напишите нам в ARC, посмотрим вместе.</p><p>Сравнение с цифровыми сервисами личных кабинетов студентов других вузов показало, что Академия входит в число лидеров по уровню цифровой зрелости.  По индексу реализации ключевых задач Президентская академия демонстрирует сопоставимый, а по ряду сценариев — лучший уровень среди топовых вузов.</p><p>С такими вводными мы приступили к задаче. Она казалась простой: взять ЛК и протестировать.</p><h2>Как тестировали: айтрекинг, эмоциональный отклик и 2 сегмента пользователей</h2><p>После бенчмарка перешли к детальному тестированию личного кабинета.  У нас было 32 участника разделённых на две группы по 16 человек:</p><ul><li>Группа 1 — студенты Президентской академии: пользуются ЛК в учёбе, знают интерфейс, привыкли к нему.</li><li>Группа 2 — студенты других вузов: свежий взгляд, быстро спотыкаются там, где ЛК нарушает привычные паттерны.</li></ul><p>Тестирование проходило так: сначала проводилось интервью про опыт использования личного кабинета (Президентской академии или другого вуза). Далее шло юзабилити-тестирование в очках eye-tracking и отслеживание эмоционального отклика респондента (пять заданий подряд). Здесь нам важно было посмотреть, как будет выполняться задание в естественных условиях без обсуждения, и замерить время прохождения. Когда очки снимались, переходили к обсуждению каждого задания, чтобы получить подробную обратную связь.</p><p>Каждый испытуемый выполнял 5 корр-пользовательских сценариев: просмотр расписания, просмотр успеваемости, заказ справки, просмотр уведомлений, оплата обучения. Неважно, где студент их проходит — в приложении, на сайте, через бот или все вместе — мы фиксировали, сколько шагов проходит студент, очевиден ли путь, нужна ли повторная авторизация и есть ли разрывы между системами.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-21/b0a090ae-70dd-4887-becf-dbbd332a4cf2.webp" alt="" /></figure><p>Как только студент завершал задание (успешно или нет), мы задавали три вопроса:</p><ul><li>Насколько легко или сложно было выполнить это задание?</li><li>Сколько времени у вас заняло выполнение задания?</li><li>Насколько вы удовлетворены или неудовлетворены выполнением задания?</li></ul><p>Оценки респондентов мы сравнивали с объективными показателями — успешностью выполнения задания, ошибками и временем выполнения задания.</p><p>Далее из полученных значений по (классической) формуле вывели юзабилити-метрику SUM, которую опишем дальше.</p><p><b>Два дополнительных инструмента фиксации:</b></p><ul><li>Айтрекинг (Tobii Pro) — отслеживает движения глаз с точностью до миллисекунды. Человек может говорить, что всё понятно, и при этом три раза беспорядочно блуждать взглядом по странице, прежде чем заметит нужный элемент.</li><li>SenseMachine — нейросетевая технология анализа микровыражений лица в реальном времени, обученная на данных более чем 40 000 лиц. Показывает эмоции человека и когнитивную нагрузку в режиме реального времени — полезный инструмент, поскольку не все эмоции осознаются человеком или озвучиваются по разным причинам.</li></ul><p>Теперь к самому интересному.</p><h2>Нашли то, что скрыто</h2><p>Один из выводов из «эмоциональных» данных — это разрыв между двумя группами: опытными студентами Президентской академии и студентами других вузов (далее — «новичками»).</p><p>Например, средний уровень когнитивной нагрузки у студентов Президентской академии — +0.11, а у студентов других вузов — +0.15. Разрыв небольшой, но он показывает, как свои студенты адаптировались к интерфейсу и перестали «замечать» сложности — именно поэтому когнитивная нагрузка у них ниже, чем у новичков. Новички же спотыкаются там, где ЛК нарушает привычные паттерны.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-21/fbeb1b08-cab2-4dfa-8998-4056078c1a9a.webp" alt="" /></figure><p>Конкретный пример — сценарий «Заказ справки». Айтрекинг фиксирует паттерн у обеих групп: взгляд сначала концентрируется на нецелевых разделах, которые подсознательно казались респонденту более релевантными, —  например, разделе «Документы» — и только потом замечает правильный «Студенческий офис МФЦ».  Студенты Президентской академии выучили расположение нужного раздела и находили его за 4,9 сек. А студенты других вузов тратили почти вдвое больше времени, а половина его и вовсе «игнорировала». Нагляднее — на тепловых картах.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-21/f8473e03-2cdf-4d9f-badd-a6bfc25b53c6.webp" alt="" /></figure><p>Ещё одна неожиданная находка: «Главную страницу» не используют по назначению. Что интересно, у Президентской академии все пять самых важных сценариев есть в быстром доступе на главной, но эту страницу не использовали как точку быстрого входа. Тепловые карты это подтверждают: внимание остаётся в верхней трети, затем взгляд уходит в меню.</p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-21/c9b06355-6f1a-4ed0-afd0-9fa10688bce7.webp" alt="" /></figure><p>Почему? Проблема не в том, что функционал отсутствует — он есть, но спрятан ниже первого экрана. Студент не скроллит главную, потому что не знает, что там что-то полезное. Студенты не ожидали, что там будет то, что им нужно, они пользовались только расписанием.</p><h2>Обычный UX-тест показал бы, что всё хорошо...</h2><p><br /></p><figure><img src="https://media.tproger.ru/user-uploads/115144/2026-07-21/d6cd4f8e-5eed-469f-9cff-bf8558fb6d99.webp" alt="" /></figure><p>И если посмотреть на таблицу (выше), то логичный вывод — исправить оплату обучения и просмотр оценок.</p><p>Но у нас было три дополнительных слоя, которые говорили другое:</p><p>— Сегмент студентов из других вузов, который лучше показал реальные проблемы интерфейса. Студенты Президентской академии привыкли к интерфейсу настолько, что перестали замечать подводные камни: выучили обходные пути, адаптировались и при опросе говорили, что всё так и должно быть. Если тестировать только своих пользователей, вы измеряете не только качество, но и адаптацию.</p><p>— Айтрекинг и SenseMachine дали слой, который не показали бы слова. Например, айтрекер показал проблемы хаотичного блуждания взглядом по Меню, несмотря на то, что респондент в итоге успешно находил нужный раздел.</p><p>— Конкурентный анализ дал стратегический контекст, которого не было бы без него. Зная, как устроены личные кабинеты шести других университетов, мы понимали, какие решения уже стали отраслевым стандартом, в каком направлении движется рынок, где появляются мобильные приложения, где интегрируются LMS, где выстраивается бесшовная авторизация, где Президентская академия объективно сильнее конкурентов, а где есть пространство для роста. Без этого контекста приоритизация рекомендаций была бы интуитивной, а с ним — стала обоснованной.</p><p>Вместе эти три слоя дали не просто список багов, а понимание того, почему интерфейс работает именно так, как он работает — и что менять в первую очередь, чтобы эффект был максимальным.</p><p>Именно поэтому, когда на встрече с IT-департаментом Президентской академии и проректором мы показывали слайды с результатами, рекомендовали дорабатывать сначала Главную и Меню и только потом — другие сценарии.</p><p>Расписание смотрят каждый день, иногда несколько раз в день. Каждое такое взаимодействие начинается с Главной и прохода через Меню. Если проблемы живут именно там, то они накапливаются и системно портят весь опыт. А вот оплата обучения происходит раз в семестр — это будет точечное улучшение. Главная и Меню — это улучшение, которое студент будет чувствовать каждый день.</p><p><b>Общая рекомендация — приоритизировать не только по тяжести проблемы, но и по частоте столкновения с ней. Редкая критическая проблема — это точечный удар. Ежедневная мелкая проблема — это системное разрушение опыта.</b></p><p>Естественно, такая неочевидная рекомендация (и многие другие) вызвала бурные обсуждения, вплоть до споров. В этом и суть глубоких исследований — они вызывают споры, потому что показывают проблемы, которые «замыленным» взглядом не видны. Но потом, после того как эмоциональная волна отхлынет, разум берёт верх. Поэтому позже мы получили официальное письмо от Президентской академии на имя В. В. Верхошинского с благодарностью всем участникам команды.</p><blockquote>Зачастую очень болезненно получать критику со стороны в части собственных продуктов, но без такой критики развития решений и не происходит. Мы  очень рады интересному опыту совместной работы с ARC, который точно будет способствовать улучшению работы личного кабинета для наших студентов.</blockquote><h2>Итого</h2><p>Первое. Конечно, это не все результаты. У нас были десятки слайдов с анализом проблем разной степени мажорности и рекомендациями по доработкам. Но показывать их все нет смысла — это же всё-таки не отчёт, а статья.</p><p>Второе. То, что Президентская академия решилась на такое масштабное исследование, — это, на наш взгляд, показатель зрелого отношения к продукту и серьёзная инвестиция в студенческий опыт. И она точно окупится, ведь каждое исправление в ежедневных сценариях — это сотни тысяч взаимодействий, которые станут чуть менее раздражающими.</p><p>Третье. Хочется подчеркнуть, что если вы хотите понять, насколько ваш цифровой канал работает так, как вы задумали, то посмотрите на него не в вакууме, а сравните с тем, что есть на рынке, чтобы понять тренды и тенденции.</p><p>Четвёртое. Если будете глубоко копать, то не забудьте, что, по-хорошему, лучше брать не тех, кто уже к этому интерфейсу привык, всё выучил, а взять группу людей, которые впервые это всё видят.</p><p>И последнее: айтрекинг и эмоциональный отклик — это тяжёлая артиллерия среди исследовательских инструментов. Но для проектов, где цена ошибки высока, это оправданная инвестиция, ведь они дают точность, которую другими методами не получить.</p><p>Спасибо за внимание. Исследователи проекта — Залина Цховребова, Ксения Никонова, Таня Рязанова, Лёша Михаленков и Юлия Дзынова.</p>]]></content:encoded>
    </item>
    <item>
      <title>Вайбкодинг для не-технарей: как взяться за сложный технический проект и не обмануться быстрыми победами</title>
      <link>https://tproger.ru/articles/vajbkoding-dlya-ne-tehnarej-kak-vzyatsya-za-slozhnyj-tehnicheskij-p</link>
      <comments>https://tproger.ru/articles/vajbkoding-dlya-ne-tehnarej-kak-vzyatsya-za-slozhnyj-tehnicheskij-p?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Екатерина Образцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/vajbkoding-dlya-ne-tehnarej-kak-vzyatsya-za-slozhnyj-tehnicheskij-p</guid>
      <description><![CDATA[<p>Разбираем главные ошибки вайбкодинга, роль архитектуры, тестирования и системного мышления при создании сложных AI-проектов без команды разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/vajbkoding-dlya-ne-tehnarej-kak-vzyatsya-za-slozhnyj-tehnicheskij-p">Вайбкодинг для не-технарей: как взяться за сложный технический проект и не обмануться быстрыми победами</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 09 Jul 2026 06:22:52 GMT</pubDate>
      <content:encoded><![CDATA[<p>Вайбкодинг может создать у новичка обманчивое ощущение: рабочий прототип с первого взгляда уже выглядит идеально. На самом деле работа только начинается. Дальше идут грабли, архитектура, тестирование и реальность. Екатерина Образцова, AI-продакт-лид и заместитель руководителя развития продукта в Битрикс24, рассказала о том, как провести продуктовую команду без единого разработчика через трехмесячный проект многопользовательского сервиса.</p><p>В статье собрано то, что было бы здорово знать на старте: что заложить до первого экрана, где команда почти наверняка споткнется и как с учетом всего этого спроектировать процесс. Здесь не будет красивых схем с микросервисами, такие схемы остаются за разработчиками. Будет честный список того, что ломается, когда продукт создается без выделенного разработчика. Сервис внутреннего спортивного марафона Битрикс24 здесь только иллюстрация. Те же выводы применимы к любому проекту.</p><h2>Главный риск: обмануться быстрой победой</h2><p>На следующий день после старта сайт уже работал. Интеграция с Apple Health подключилась с первого промпта, тренировки сотрудников отображались и ранжировались по системе начисления баллов.</p><p>В вайбкодинге первый результат всегда появляется очень быстро, и это создает когнитивное искажение. Мозг считывает полученный результат как сигнал, что задача почти решена. Для простого сервиса с одним пользователем часто так и есть. Но многопользовательский продукт устроен сложнее, и быстрый прототип здесь означает только то, что базовая логика работает в идеальных условиях, без нагрузки, параллельных запросов и реальных пользователей.</p><p>Первый шаг в сторону более устойчивого решения произошел после того, как коллега с техническим бэкграундом помог переформулировать промпт и добавил вводные про очереди, распределение нагрузки и контейнеры. Только с этого момента разработка пошла в правильном направлении.</p><h2>Спроектируйте архитектуру раньше, чем напишете первый экран</h2><p>Первый промпт не должен звучать как «сделай приложение для марафона». В нем должны быть описаны все ключевые пользовательские сценарии, зависимости между ними и нагрузочные требования. AI отлично подставит синтаксис и язык. Решения про очереди, контейнеры и поведение системы под нагрузкой остаются на команде. Если в команде нет человека, который умеет думать за систему под нагрузкой, его стоит найти до старта. Первое падение под нагрузкой обходится дороже.</p><p>Чтобы стало понятно, что стоит за словом «архитектура» на практике, разберем начисление баллов. В прототипе первого дня баллы считались на лету, прямо в момент загрузки тренировки. На одном пользователе это работало идеально. На 260 живых участниках сервис лег бы сразу, потому что под пиковой нагрузкой каждая загрузка тянула бы за собой мгновенный пересчет всех рейтингов.</p><p>В рабочей версии баллы начисляются отложенно, каскадом фоновых задач по очередям. Сначала система считает баллы за саму тренировку, потом обновляет личный рейтинг участника, потом командный и рейтинг по виду спорта. Когда триста человек грузят тренировки почти одновременно, одно и то же приходится пересчитывать десятки раз подряд. От этой «бури» спасает дебаунсинг — первая задача на пару секунд блокирует остальные, и лишние пересчеты просто не запускаются. Сам пересчет рангов идет одной атомарной операцией под блокировкой, чтобы параллельные процессы не перетерли результаты друг друга.</p><p>Ничего из этого нельзя дописать потом, поверх готового экрана. Такие вещи закладывают в самом начале, до первого промпта про пользовательский сценарий.</p><h2>Сначала бэкенд и контракт, потом клиенты</h2><p>Соблазн делать клиентское приложение «по фиче» и откладывать бэкенд велик, особенно когда фронт оживает за секунды. Это прямой путь к расхождению версий, когда веб, iOS и Android начинают жить своей жизнью.</p><p>Команда сосредоточилась на главной задаче мобильных приложений, интеграции с Apple Health и Health Connect, и потом стала добирать остальные разделы. В какой-то момент веб и оба мобильных клиента разъехались. Пришлось сделать шаг назад, завести корректные эндпоинты и SDUI на бэкенде и завязать приложения на них. После этого разработку можно было продолжать. Все-таки бэкенд определяет логику, а клиенты лишь работают в ее рамках.</p><h2>AI-тесты не заменяют ручное тестирование и фокус-группу</h2><p>Claude всегда пишет тесты на свой код, подробно, аккуратно, с покрытием разных сценариев. Для продакта без опыта разработки это выглядит надежной страховкой. Тесты есть, они проходят, значит код работает корректно. На практике убеждение обманчиво, потому что автотесты и ручное тестирование проверяют принципиально разные вещи.</p><p>Автотесты Claude проверяют то, что поддается формализации. Правильно ли считаются баллы по заданному алгоритму, корректно ли обрабатываются зависимости, верно ли отрабатывают условные конструкции. За пределами их охвата остается всё, что происходит в реальной эксплуатации. Например, когда пользователь с конкретной версией Android и конкретными смарт-часами пытается загрузить тренировку, которую его трекер назвал иначе, чем ожидает система. Или когда два пользователя одновременно обращаются к одной записи. Это принципиальное ограничение автоматического тестирования, и оно не отменяет важности функциональных автотестов.</p><p>Часть критических проблем вскрылась только на тестовой группе из 30–40 коллег, собранной через полтора месяца после старта разработки. Большую часть багов удалось отловить там. QA из отдела тестирования, которых подключили позже, дали больше полезного фидбэка по реальному пользовательскому пути, чем все автотесты вместе взятые, потому что проверяли поведение системы в реальных условиях.</p><p>Отсюда следует простое правило — каждую фичу нужно проверять руками, полным пользовательским путем, со всем, что находится вокруг нее. И делать это итеративно после каждого системного изменения, не дожидаясь конца разработки.</p><h2>Как собрать AI-driven команду под такой проект</h2><p>За три месяца сложилось понимание оптимального состава для подобного проекта:</p><ul><li>1 архитектор — человек, который понимает, как обеспечить стабильность многопользовательского сервиса под нагрузкой;</li><li>2 продакт-инженера — берут на себя и проработку пользовательских сценариев, и собственно вайбкодинг;</li><li>UX/UI-дизайнер;</li><li>QA-инженер.</li></ul><p>Когда пишешь код с AI, важно понимать, как все устроено. Базовые принципы, организацию данных, слабые места и типичные ошибки. AI закроет техническую часть — а продумать систему и увидеть, где она треснет, придется человеку.</p><p>Похоже, именно умение мыслить системно и станет ключевым навыком продакт-инженера в ближайшем будущем. Код все чаще будет писать AI, а думать за систему — человек.</p><h2>Что в итоге</h2><p>Вайбкодинг действительно позволяет нетехническим специалистам браться за сложные проекты самостоятельно. Единственный способ не обжечься — трезво оценивать масштаб задачи на старте и не принимать быструю победу первого дня за готовый продукт. Прототип — это только начало работы.</p><p>Архитектурные решения, стратегия тестирования, выбор технологического стека остаются актуальными вне зависимости от того, кто пишет код. Разница в том, что теперь разобраться в этом может не только разработчик. И это, пожалуй, главное, что меняет вайбкодинг в профессиональном горизонте. После такого пробега по граблям следующий проект строится на уже накопленном опыте. Команда понимает, как проектировать архитектуру, как выстраивать тестирование и на какие вопросы нужно иметь ответы на старте. Значит, он пойдет быстрее, интереснее и увереннее.</p>]]></content:encoded>
    </item>
    <item>
      <title>Роадмап в QA в 2026: что нужно знать, чтобы получить оффер</title>
      <link>https://tproger.ru/articles/roadmap-v-qa-v-2026-chto-nuzhno-znat-chtoby-poluchit-offer</link>
      <comments>https://tproger.ru/articles/roadmap-v-qa-v-2026-chto-nuzhno-znat-chtoby-poluchit-offer?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/roadmap-v-qa-v-2026-chto-nuzhno-znat-chtoby-poluchit-offer</guid>
      <description><![CDATA[<p>Как войти в QA в 2026: архитектура микросервисов, REST API, SQL, Kafka, автоматизация и инженерное мышление. Роадмап без тупиковых скиллов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/roadmap-v-qa-v-2026-chto-nuzhno-znat-chtoby-poluchit-offer">Роадмап в QA в 2026: что нужно знать, чтобы получить оффер</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[Автоматизирование]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 19 Jun 2026 09:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пять лет назад в тестирование заходили через ручное: кликаешь по чек-листу, смотришь результат, рынок прощает тебе отсутствие навыков. Сейчас на том же месте в вакансиях стоят Kafka, Kubernetes и автотесты на Java.</p><h2>Ручное тестирование как вход больше не работает</h2><p>В 2021-м стратегия «вкатиться через мануальное тестирование» ещё работала. Рынок принимал новичков: знаешь, что такое чек-лист и тест-кейс — уже кандидат. Можно было прийти без кода, без понимания API, без SQL и получить оффер на функциональное тестирование, дальше доучиваясь по ходу.</p><p>Дальше рынок начал двигаться, и двигался он быстрее, чем кажется внутри компании. В 2022-м в вакансиях QA появились приписки: «желательно знание автоматизации», «опыт с API», «базовый SQL». Слово «желательно» сбивает с толку — звучит как бонус, а на деле это знак, куда поедут требования через пару лет. И они поехали: то, что в 2022-м было «желательно», к 2024-му стало обязательным условием.</p><p>К 2024 году ситуация выглядит уже так: смотришь вакансии и ни в одной не встречаешь формулировку «требуется ручной тестировщик». Вместо неё везде QA Engineer со знанием автоматизации, опыт в финтехе, CI/CD, Docker, Kubernetes, углублённое понимание API. К концу 2025-го добавляется ещё и опыт работы с ИИ и LLM.</p><p>Вакансии чисто ручного тестирования из дикой природы не исчезли совсем, но их осталось мало, и условия там соответствующие: либо платят немного, либо требуют коммерческий бэкграунд за плечами. Параллельно реклама курсов «вкатись в IT за три месяца» нагнала на рынок толпу таких же новичков, и у компаний появилась роскошь выбирать.</p><p>Вывод для тех, кто планирует вход в 2026-м: начинать с чек-листов смысла мало, потому что это тупиковая ветка, с которой потом всё равно придётся переучиваться. Логичнее сразу собирать ту базу, которая позволит работать с первого дня и не упираться в потолок. Что в эту базу входит, дальше по разделам.</p><h3>Научиться понимать архитектуру</h3><p>Проектировать системы вам не придётся, это работа архитектора. Задача тестировщика — представлять, как устроено то, что он тестирует, чтобы видеть всю цепочку, а не отдельную кнопку.</p><p>На практике это четыре вещи:</p><ol><li>Как сервисы общаются между собой: синхронно через HTTP, когда один ждёт ответа другого, или асинхронно через очередь сообщений, когда событие кладётся в брокер и подбирается, когда получатель готов.</li><li>Где хранятся данные и как к ним обращаются разные компоненты.</li><li>Что произойдёт, если один из сервисов упадёт, и кто из соседних это заметит.</li><li>Как запрос трансформируется на каждом шаге пути от клиента до ответа.</li></ol><p>Зачем это тестировщику. Пока вы тестируете поверхностно — нажал, посмотрел результат, — вы можете зафиксировать, что баг есть, но не объясните почему. На вопрос «где сломалось» ответа нет, потому что система для вас непонятная. Как только появляется понимание потоков данных, сразу становится лучше. Вместо «кнопка не работает» вы говорите: запрос пришёл в Gateway, прошёл в Core-сервис, событие легло в Kafka, консьюмер его прочитал, но в базе нужной записи нет — значит, ищем разрыв на участке между консьюмером и базой. Это уже баг, с которым можно идти к разработчику.</p><p>Лучший способ это уложить в голову — поднять микросервисное приложение локально и посмотреть, как сервисы взаимодействуют. Перед практикой имеет смысл прочитать «Designing Data-Intensive Applications» Мартина Клеппмана (на русском вышла как «Высоконагруженные приложения»). Кода там нет, зато подробно разобрано, как системы устроены изнутри, — для QA это полезнее, чем уметь самому писать сервисы.</p><p>Дальше берём готовые демо-проекты с низким порогом входа. Они поднимаются одной командой через Docker Compose, так что копаться в коде не нужно, нужно исследовать: отправить запрос через Postman, проследить по логам, как он прошёл по цепочке, намеренно остановить один контейнер и посмотреть, что станет с остальными. Два репозитория подходящего формата:</p><ul><li>Microservice Kafka Sample — три сервиса (заказы, доставка, выставление счёта), между ними Kafka, у каждого своя база PostgreSQL, поднимается через docker-compose up. Создаёте заказ в одном сервисе, через какое-то время накладная и статус доставки появляются в других. Удобно трассировать запрос и искать, где он застрял.</li><li>Microservices with Spring Boot and Kafka Demo Project — посложнее: заказы, платежи, склад, распределённые транзакции по паттерну SAGA, поддержка Docker Compose и Testcontainers. Хорошо показывает, что происходит с транзакцией, когда она идёт через несколько сервисов и один из них падает.</li></ul><p>Если хочется теории вместе с практикой, на Stepik есть курс «Microservices — паттерны и практика построения микросервисов»: русскоязычный, разбирает паттерны взаимодействия, асинхронные системы, RabbitMQ. Он заточен под понимание концепций, а не под написание продакшн-кода, — то, что нужно.</p><h2>Три технологии, которые спрашивают всегда</h2><ol><li>HTTP и REST API. REST — это договорённость между клиентом и сервером о том, как они общаются. Клиент просит: дай данные о пользователе с ID 42. Сервер отвечает JSON-ом и кодом: 200 — всё нашлось, 404 — такого пользователя нет, 403 — прав не хватает. Тестировщик, который умеет вызывать API через Postman, curl или код, проверяет логику системы мимо интерфейса — раньше и точнее, чем через клики по экрану. Базовый минимум: методы (GET, POST, PUT, DELETE), коды ответов (2xx, 4xx, 5xx), заголовки, структура JSON, аутентификация.</li><li>Базы данных и SQL. Почти каждый дефект оставляет след в базе: либо лежит некорректная запись, либо записи нет вообще. Написать SELECT с джойнами, проверить результат агрегации, отловить дубли — ежедневная работа QA-инженера. На собесе это спрашивают как данность, а не как редкий бонус.</li><li>Брокеры сообщений и Kafka. Kafka даёт сервисам общаться асинхронно: один кладёт событие в топик, другой забирает его, и никто не висит в ожидании. В распределённых системах это стандарт. Если данные не появились там, где их ждали, возможно, они застряли в очереди, а не пропали из базы. Это две разных ситуации, и путать их дорого для бизнеса.</li></ol><p>Важное предупреждение, чтобы не отпугнуть: писать эти сервисы самому QA не нужно. Цель — понять, что происходит внутри, когда данные идут от одного сервиса к другому. Поднял проект, посмотрел Postman, почитал логи, остановил контейнер, посмотрел на последствия — этого достаточно, чтобы общаться с командой разработки.</p><h3>Научиться читать логи</h3><p>Когда сервис падает в продакшене, времени воспроизводить баг руками нет, и единственное, что у вас есть, — это логи. Особенно это нужно на критичной инфраструктуре вроде государственных контрактов, где инциденты идут потоком, а каждая минута простоя стоит денег.</p><p>Выглядит типичная диагностика так:</p><ul><li>Прилетает алерт: сервис X начал возвращать 500-е ошибки.</li><li>Открываете Kibana, фильтруете по временному интервалу и имени сервиса, чтобы отсечь лишний шум.</li><li>Находите трейс конкретного запроса — от входящего HTTP-вызова до ответа базы данных.</li><li>В трейсе видите stacktrace с исключением в определённом классе и конкретным сообщением.</li><li>Дальше тянете за эту нитку до корневой причины: например, оказывается, что упал не сам сервис, а внешний, к которому он обращался, и причина — таймаут.</li></ul><p>Помимо Kibana для разбора логов в работе пригодится связка Grafana и Prometheus для мониторинга метрик. Логи отвечают на вопрос «что именно сломалось в этом запросе», метрики показывают картину шире: когда началась деградация, какой сервис первым ушёл в красное, как менялась нагрузка перед инцидентом. Вместе они дают и точку отказа, и контекст вокруг неё.</p><p>Этот навык как раз отличает среднего тестировщика от хорошего. Средний по факту падения скажет «не работает» и пойдёт заводить тикет. Хороший откроет логи, пройдёт по трейсу и принесёт разработчику не жалобу, а готовую гипотезу о том, где и почему сломалось. Вторые на рынке зарабатывают больше, и тренируется это ровно на тех же демо-проектах: подняли, сломали контейнер, полезли в логи смотреть, что система об этом написала.</p><h2>Зачем QA язык программирования</h2><p>Помимо скорости код даёт понимание работы команды разработки. Когда QA пишет автотесты на том же языке, на котором разработчики пишут продукт, стирается граница между «вашим» и «нашим» кодом. Проблему можно обсудить на уровне реализации, быстро получить консультацию, а иногда разработчик и сам запускает ваши тесты, чтобы проверить свою фичу, или вносит правку в тестовый код, когда видит, в чём причина нестабильности.</p><p>Конкретно код у QA уходит на несколько вещей:</p><ul><li>Автотесты — заменяют ручной прогон регресса, гоняются хоть каждую ночь.</li><li>Тестирование API — написать авторизацию, отправить запрос, проверить JSON-схему ответа.</li><li>Генерация тестовых данных — создать тысячи записей с разными параметрами под нагрузочные и граничные сценарии.</li><li>Верификация в базе — SQL-запросы, которые проверяют, что в данных лежит именно то, что должно.</li><li>Shift-left — писать тесты параллельно с разработкой, ещё на этапе требований, чтобы дефекты ловились раньше.</li></ul><p>С чего начинать. Java или Python — хорошие первые языки, оба распространены в автоматизации и под оба полно вакансий. Но учить язык лучше в контексте задач тестирования, а не абстрактно по учебнику: сразу написать первый UI-тест через Selenium, сделать HTTP-запрос через RestAssured или requests, дёрнуть SQL-запросом реальную базу.</p><h2>Инженерное мышление вместо «кнопка не работает»</h2><p>Все навыки из предыдущих разделов держатся на одной привычке думать определённым образом. На заводе фраза «деталь бракованная» не закрывает вопрос: нужно найти причину в процессе, измерить отклонение, воспроизвести и устранить. Та же логика переносится на программные системы, и именно она отличает инженера от человека, который кликает по экрану и пишет «не работает».</p><p>Складывается это мышление из нескольких рабочих привычек:</p><ol><li>Спрашивать «почему», а не только «что». Не «кнопка не нажимается», а «почему запрос возвращает 403 именно для этой роли».</li><li>Держать в голове систему целиком: как правка в одном сервисе аукнется в соседних через Kafka-события, общую базу или контракты API.</li><li>Заранее прикидывать риски: что сломается первым под нагрузкой, какие граничные случаи опаснее остальных. Сюда же относится участие в проектировании: дефект, пойманный на этапе требований, обходится примерно в десять раз дешевле, чем тот же дефект, найденный в продакшене.</li><li>Оперировать цифрами: время прогона регресса, покрытие тестами, количество инцидентов.</li></ol><p>Хорошая новость для тех, кто приходит в тестирование из технической специальности. Физики, химики, инженеры с производства уже умеют работать с причинно-следственными связями и видеть систему как набор связанных процессов. Этот навык никуда не девается при смене сферы, его остаётся переложить на специфику софта: вместо станков и допусков — сервисы, запросы и базы данных. База, за которую в IT доплачивают, у вас по факту уже есть.</p><h2>Итого</h2><p>Если собрать роадмап в один список, маршрут получается такой:</p><ul><li>Разбираться в архитектуре и поднимать демо-микросервисы локально;</li><li>Знать HTTP с REST, SQL и брокеры вроде Kafka;</li><li>Уметь читать логи, потому что в проде это ваш основной инструмент;</li><li>Освоить язык под автоматизацию;</li><li>И приучать себя думать потоками данных, а не кнопками.</li></ul><p>Архитектура объясняет, зачем нужны API, базы и брокеры. Понимание этих технологий делает осмысленным чтение логов. Логи и автоматизация вместе подводят к коду.</p><p>И ещё одно наблюдение, ради которого статья была написана. Рынок QA за пять лет переписал требования дважды и продолжит переписывать. Гнаться за конкретной строчкой в вакансии бессмысленно — она устареет к следующему собесу. Работает другая установка: целиться не в «войти в IT через тестирование», а в «стать инженером, который умеет тестировать». Первое даёт оффер на год, второе — профессию, которая переживёт любую следующую волну требований.</p>]]></content:encoded>
    </item>
    <item>
      <title>ТОП лучших онлайн-курсов для тестировщика (QA Engineer) — обзор и рейтинг обучение по QA тестированию</title>
      <link>https://tproger.ru/articles/kursy-qa-testirovshhikov</link>
      <comments>https://tproger.ru/articles/kursy-qa-testirovshhikov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анастасия Шишкина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kursy-qa-testirovshhikov</guid>
      <description><![CDATA[<p>Изучите наш ТОП онлайн-курсов по QA тестированию. Выбирайте лучшие обучающие курсы QA тестировщиков программного обеспечения, сайтов и игр с нуля — подробные описания и отзывы, которые помогут выбрать идеальный курс</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kursy-qa-testirovshhikov">ТОП лучших онлайн-курсов для тестировщика (QA Engineer) — обзор и рейтинг обучение по QA тестированию</a>»</p>]]></description>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 04 Jun 2026 05:21:35 GMT</pubDate>
      <content:encoded><![CDATA[<p>Освоить востребованную профессию в IT без необходимости углубляться в сложный кодинг помогут курсы QA-тестирования. На этих онлайн-программах вы изучите основы архитектуры программного обеспечения, научитесь находить и документировать ошибки, составлять баг-репорты и сотрудничать с разработчиками для создания качественных продуктов.</p><p>Вместе с экспертами <a href="https://kursfinder.ru/">Kursfinder</a> я проанализировала более 70 обучающих программ и отобрала 55 самых актуальных курсов по QA-тестированию. Для вашего удобства они разделены на блоки: сначала — рейтинг из 10 лучших программ, затем — подборка из дополнительных курсов, а в конце статьи представлены бесплатные ресурсы и практические материалы. Полный каталог <a href="https://kursfinder.ru/kursy-qa-testirovaniya/">курсов по QA-тестированию</a> доступен на сайте Kursfinder.</p><h2>ТОП-9 лучших курсов по QA-тестированию в 2026 году</h2><ol><li><a href="https://experts2.ru/sEkVez?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=1">Инженер по тестированию</a> от Нетологии — актуальный курс с базовой и расширенной траекториями обучения на выбор.</li><li><a href="https://experts2.ru/eduson-academy?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub3=https%3A%2F%2Feduson.academy%2Fruchnoe-testirovanie-po" rel="nofollow">Ручное тестирование ПО</a> от Академии Эдюсон — ускоренный курс по мануальному тестированию с нейросетями в программе.</li><li><a href="https://experts2.ru/aSnOsx?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=3">Тестировщик ПО с нуля</a> от Skypro — продвинутая программа с регулярными онлайн-встречами с IT-экспертами.</li><li><a href="https://experts2.ru/PzZekx?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=4">Инженер по тестированию</a> от ProductStar — программа с усиленной практикой и гарантией трудоустройства.</li><li><a href="https://experts2.ru/xiqXNb?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=5">Инженер по тестированию с нуля</a> от Skypro — детализированный курс по QA-тестированию программ для новичков без опыта.</li><li><a href="https://experts2.ru/vgbHtD?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=6">Профессия: Инженер по тестированию</a> от Skillbox — изучение продвинутого технологического стека QA-инженера.</li><li><a href="https://experts2.ru/NIjktb?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=7" rel="nofollow">Тестировщик ПО</a> от Академии Эдюсон — экспертный курс со стажировкой, нейросетями и личным ментором.</li><li><a href="https://experts2.ru/wmfyGP?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=8">Расширенный курс инженера по тестированию</a> от Яндекс Практикум — образовательная программа с большим количеством индивидуальных и командных проектов по QA-тестированию.</li><li><a href="https://experts2.ru/aDxqgE?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=10">Инженер по ручному тестированию</a> от Skillfactory — усиленная практика QA-тестирования на проектах от Ростелекома.</li></ol><p>Курсы подойдут людям, которые хотят развиваться в IT-индустрии без знаний и навыков программирования. Онлайн-программы помогут вам разобраться в архитектуре и жизненном цикле пользовательских приложений — вы научитесь анализировать работоспособность ПО, выявлять технические неполадки и составлять отчетность для разработчиков с помощью продвинутых инструментов.</p><h2>Онлайн-курсы по QA-тестированию</h2><p><b>1. </b><a href="https://experts2.ru/sEkVez?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=1">Инженер по тестированию</a> | <b>Нетология   </b></p><p>Практико-ориентированная программа обучения востребованной профессии QA-engineer, на которой вы узнаете о принципах эффективного тестирования пользовательских приложений. На курсе доступно две траектории обучения: базовая — для быстрого и уверенного старта в IT, и расширенная — для актуализации знаний и карьерного развития. В зависимости от тарифного плана, вам предстоит выполнить от трех до четырех проектов для портфолио, среди которых: автоматизация тестирования веб-сервиса путешествий, автоматизация тестирования приложения благотворительной организации и другие. После выпуска с курса вы можете рассчитывать на профессиональную поддержку в трудоустройстве. HR-специалисты помогут составить резюме и оформить портфолио, проведут тестовые собеседования и подберут интересные вакансии.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-02-12/d0390801-44d0-4f70-a84d-2d0a698c1b49.png" alt="" /></figure><ul><li>Стоимость: от 5 116 рублей в месяц</li><li>Длительность: от 8 месяцев</li><li>Формат обучения: видеолекции, онлайн-вебинары с преподавателями, практические задания с проверкой</li><li>Сертификат: есть</li></ul><p><b>Кому подойдет: </b>начинающим и практикующим тестировщикам; людям, которые интересуются IT-индустрией и хотят построить карьеру в этом направлении.</p><p><b>Преимущества:</b></p><ul><li>две траектории обучения на выбор — для быстрого старта в профессии и для карьерного развития;</li><li>75% курса составляет практика из микро-задач, тестов, крупных проектов;</li><li>курсовая работа с поддержкой экспертов после каждого учебного модуля;</li><li>тестовые собеседования и возможность стажировки у партнера онлайн-школы во время обучения;</li><li>комплексная помощь с поиском работы: подготовка резюме, оформление портфолио, поиск подходящих вакансий;</li><li>большое количество дополнительных модулей для самостоятельного изучения: логические алгоритмы и операторы, верстка сайтов на CSS и HTML, деловой английский и пр.</li></ul><p><b>Недостатки:</b></p><ul><li>продолжительность обучения на расширенной траектории составляет более года.</li></ul><p><b>Программа обучения:</b></p><ul><li>Специфика ручного тестирования веб-приложений;</li><li>Работа с системой контроля версий Git;</li><li>Python, Java и JavaScript в работе тестировщиков;</li><li>Настройка автоматизированного тестирования;</li><li>Дополнительные учебные модули.</li></ul><p><a href="https://experts2.ru/sEkVez?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=1">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>2.</b><a href="https://experts2.ru/icIsYn?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=2"> </a><a href="https://experts2.ru/eduson-academy?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub3=https%3A%2F%2Feduson.academy%2Fruchnoe-testirovanie-po" rel="nofollow">Ручное тестирование ПО</a> | <b>Академия Эдюсон</b></p><p>Небольшой курс, который поможет вам освоить высокооплачиваемую IT-профессию тестировщика с нуля и без знаний языков программирования. Под руководством опытных экспертов вы научитесь проводить ручное тестирование веб-сайтов и приложений и сможете закрепить знания на практике: с помощью тестов, тренажера и «песочницы». В рамках обучения вам будет предложено девять проектов для дополнительной тренировки: создание чек-листов, описание тест-кейсов, разработка баг-репортов и другие. Для того чтобы убедиться в качестве и актуальности образовательной программы, вы можете оформить бесплатный доступ к первым модулям на три дня.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2026-06-03/1ffe6358-cf66-4d59-bec1-4c5ebd1c8002.webp" alt="" /></figure><ul><li>Стоимость: 4500 рублей в месяц</li><li>Длительность: 3 месяца</li><li>Формат обучения: видеолекции, скринкасты, интерактивные тренажеры с практикумами, тестирования</li><li>Сертификат: есть</li></ul><p><b>Кому подойдет: </b>начинающим тестировщикам; IT-специалистам из смежных сфер; людям, которые хотят сменить профессию и работать в IT без навыков программирования.</p><p><b>Преимущества:</b></p><ul><li>гибкий график без дедлайнов для обучения в комфортном темпе;</li><li>опытные эксперты из Kaspersky, «Сбера», «ИТ-Резюме», Ozon, Avito;</li><li>интерактивный формат с разнообразием форматов практики;</li><li>индивидуальная поддержка куратора на всех этапах обучения;</li><li>9 проектов для портфолио: создание чек-листа для проверки приложения, описание тест-кейсов, разработка баг-репорта и др.;</li><li>Нейросети для ручного тестирования в программе</li><li>неограниченный доступ к учебным материалам навсегда;</li><li>бесплатный доступ к первым модулям в течение трех дней.</li></ul><p><b>Недостатки:</b></p><ul><li>самостоятельный темп требует дисциплины</li></ul><p><b>Программа обучения:</b></p><ul><li>Знакомство с профессией тестировщика;</li><li>Базовые аспекты тестирования;</li><li>Жизненный цикл программного обеспечения;</li><li>Архитектура веб-приложений;</li><li>Работа с массивами данных;</li><li>Основы Linux;</li><li>Работа с системой контроля версий Git;</li><li>Нефункциональное тестирование;</li><li>Тестирование мобильного софта;</li><li>Нейросети для ручного тестирования;</li><li>Карьерное развитие тестировщика.</li></ul><p><a href="https://experts2.ru/eduson-academy?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub3=https%3A%2F%2Feduson.academy%2Fruchnoe-testirovanie-po">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>3. </b><a href="https://experts2.ru/aSnOsx?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=3">Тестировщик ПО с нуля</a> | <b>Skypro  </b></p><p>Дистанционное обучение QA-тестированию, на котором вы научитесь работать с Postman, Chrome DevTools, CI/CD, SQL, Selenium и другими инструментами поиска технических багов. Вы узнаете, как проводить ручное и автоматическое тестирование, разберетесь в архитектуре программного обеспечения и его жизненном цикле, а также изучите базовые аспекты современного программирования на Python и JavaScript. Для практики вам будут доступны индивидуальные задания разной сложности — от обычных практикумов до крупных проектов. С поиском работы после обучения вам помогут специалисты Центра карьеры: они проведут консультации, ответят на все вопросы по трудоустройству и найдут вакансии, соответствующие вашим знаниям и компетенциям.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-02-12/90460a89-b4b6-454e-9f04-f2143181723e.png" alt="" /></figure><ul><li>Стоимость: от 7 167 рублей в месяц</li><li>Длительность: от 8 месяцев</li><li>Формат обучения: теоретические материалы, практические задания, онлайн-встречи с экспертами, проектные работы</li><li>Сертификат: есть</li></ul><p><b>Кому подойдет: </b>новичкам, которые хотят построить карьеру в IT без программирования; IT-специалистам из других сфер.</p><p><b>Преимущества:</b></p><ul><li>оперативная проверка домашних заданий с развернутой обратной связью;</li><li>вечный доступ к учебным материалам курса;</li><li>сопровождение личным куратором и наставником в течение всего срока обучения;</li><li>регулярные онлайн-митапы с IT-специалистами для разбора задач и популярных вопросов;</li><li>помощь в подготовке резюме и портфолио, консультации со специалистами Центра карьеры;</li><li>два тарифных плана на выбор — стандартный и индивидуальный.</li></ul><p><b>Недостатки:</b></p><ul><li>вне зависимости от тарифа, занятия проводятся только в группах;</li><li>ускоренная проверка домашних заданий и бонусы доступны только в расширенном тарифном плане.</li></ul><p><b>Программа обучения:</b></p><ul><li>Особенности ручного и автоматизированного тестирования;</li><li>Основы работы с системами баг-трекинга;</li><li>Настройка автоматического тестирования;</li><li>Знакомство с основами программирования;</li><li>Работа с системой контроля версий Git и т.д.</li></ul><p><a href="https://experts2.ru/aSnOsx?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=3">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>4. </b><a href="https://experts2.ru/PzZekx?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=4">Инженер по тестированию</a> | <b>ProductStar </b></p><p>Актуальная программа обучения на QA-тестировщика поможет вам разобраться в особенностях ручного и автоматизированного тестирования и найти работу в IT-компаниях или на фрилансе. Вы научитесь: оценивать работоспособность веб-приложений, работать с SQL и Git, использовать язык Java для решения задач, автоматизировать процесс тестирования. В конце курса вас ждет несколько проектов, основанных на брифах реальных заказчиков — сможете добавить их в портфолио. Студентам, которые выполнили более 80% практикумов и успешно защитили дипломную работу, предлагается трудоустройство к партнерам онлайн-платформы.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-02-12/b52be769-64d8-42ba-ab38-744068571a30.png" alt="" /></figure><ul><li>Стоимость: от 5 452 рублей в месяц</li><li>Длительность: 6 месяцев</li><li>Формат обучения: видеоуроки, онлайн-воркшопы с экспертами, домашние задания с обратной связью, проектные работы</li><li>Сертификат: есть</li></ul><p><b>Кому подойдет:</b> людям, которые интересуются IT-индустрией и хотят построить карьеру в этом направлении.</p><p><b>Преимущества:</b></p><ul><li>гарантия трудоустройства при условии успешного прохождения образовательной программы;</li><li>большое количество практических заданий с индивидуальной проверкой от экспертов;</li><li>удобный онлайн-формат без отчислений и строгих дедлайнов;</li><li>три тарифных плана для разных целей обучения;</li><li>крупная дипломная работа для портфолио в конце обучения;</li><li>возможность стажировки в крупных IT-компаниях;</li><li>бонусные курсы по успешному трудоустройству и бизнес-английскому от AgileFluent.</li></ul><p><b>Недостатки:</b></p><ul><li>ограниченные возможности базового тарифного плана;</li><li>небольшое количество проектных работ для портфолио.</li></ul><p><b>Программа обучения:</b></p><ul><li>Базовые навыки разработчика и основы программирования;</li><li>Ручное тестирование: задачи тестировщика, основы SQL, верстка на HTML, CSS и JavaScript;</li><li>Автоматизированное тестирование: работа с Java и Git, основы автоматизации, тестирование на Java и Python, ChatGPT для разработчика;</li><li>Бонусные курсы.</li></ul><p><a href="https://experts2.ru/PzZekx?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=4">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>5. </b><a href="https://experts2.ru/xiqXNb?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=5">Инженер по тестированию с нуля</a> | <b>Skypro </b></p><p>Расширенный курс, с помощью которого вы с нуля освоите принципы и методики QA-тестирования и научитесь определять ошибки в пользовательских приложениях. В рамках обучения вы узнаете, как проходит процесс тестирования сайтов и ПО, попрактикуетесь в ручном и автоматизированном тестировании, изучите Python и Git и разберетесь в понятиях «тест-план» и «тест-стратегия». Совместно с преподавателями курса выполните несколько проектных работ: протестируете опцию «Личные события» в расписании ментора Skyeng, проведете полный цикл тестирования приложения, автоматизируете основные UI-процессы и проверите API. Завершив обучение, вы сможете воспользоваться консультациями HR-специалистам по вопросам трудоустройства. Они помогут в оформлении портфолио, подскажут, как заинтересовать работодателя на собеседовании, и напишут сопроводительные письма в партнерские IT-компании.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-02-12/8b603828-d3f0-4056-972a-2352e05819c9.png" alt="" /></figure><ul><li>Стоимость: от 10 133 рублей в месяц</li><li>Длительность: 12 месяцев</li><li>Формат обучения: лекционные материалы, практические задания с проверкой, проекты, онлайн-общение с экспертами</li><li>Сертификат: есть</li></ul><p><b>Кому подойдет: </b>новичкам в тестировании; IT-специалистам из разных сфер; людям, которые хотят построить карьеру в IT без программирования.</p><p><b>Преимущества:</b></p><ul><li>множество практических заданий с проверкой и обратной связью от преподавателей;</li><li>бесплатная диагностика знаний для составления учебного плана;</li><li>бесплатный курс по нейронным сетям;</li><li>крупные проекты для портфолио: полный цикл ручного тестирования ПО, автоматизация основных UI и проверка API;</li><li>регулярные встречи с IT-специалистами в формате «Вопрос-Ответ»;</li><li>отсутствие ограничений на доступ к учебным материалам даже после выпуска с курса;</li><li>комплексная поддержка от HR-консультантов по вопросам трудоустройства: подготовка резюме, оформление портфолио, сопроводительные письма, поиск подходящих вакансий.</li></ul><p><b>Недостатки:</b></p><ul><li>обучение проводится только в группах, нет индивидуального формата;</li><li>высокие ежемесячные платежи.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы тестирования веб-приложений;</li><li>Тестирование API-интерфейсов;</li><li>Основы работы с SQL;</li><li>Автоматизация тестирования с использованием Python, Pytest, Allure и других инструментов;</li><li>Подготовка к трудоустройству и помощь подходящих вакансий.</li></ul><p><a href="https://experts2.ru/xiqXNb?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=5">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>6. </b><a href="https://experts2.ru/vgbHtD?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=6">Профессия: Инженер по тестированию</a> | <b>Skillbox </b></p><p>Образовательная программа с гарантией трудоустройства посвящена изучению знаний и компетенций, которые требуют большинство IT-компаний. Вы будете практиковаться на задачах от реальных заказчиках и сможете выйти на первый доход в QA-тестировании уже спустя полгода после старта обучения. Преподаватели курса помогут вам в изучении Postman, SQL, Chrome DevTools, GitLab и других продвинутых инструментов тестировщика. Под их руководством вы выполните три сильных проекта для портфолио — протестируете онлайн-портал, мобильное приложение и веб-сайт.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-02-12/2cdfa3f6-272e-4d00-8792-68d982eca8e6.png" alt="" /></figure><ul><li>Стоимость: 7 968 рублей в месяц</li><li>Длительность: от 6 месяцев</li><li>Формат обучения: видеолекции, лонгриды, тестирования, практические задания, онлайн-общение с ментором</li><li>Сертификат: есть</li></ul><p><b>Кому подойдет: </b>новичкам, которые только начинают изучать тестирование; IT-специалистам разных специализаций.</p><p><b>Преимущества:</b></p><ul><li>более ста практических задач на основе реальных обязанностей тестировщика в IT-бизнесе;</li><li>объемная теория с доступом навсегда;</li><li>персональная поддержка ментора от старта обучения до выпуска;</li><li>сильные кейсы для портфолио: тестирование онлайн-портала, тестирование мобильного приложения, тестирование веб-сайта;</li><li>помощь трудоустройства и гарантия возврата денежных средств, если работу найти не получится;</li><li>большое количество курсов на выбор и дополнительный учебный модуль по работе с языком SQL.</li></ul><p><b>Недостатки:</b></p><ul><li>небольшое количество проектов для портфолио;</li><li>возможны долгие ответы от наставников в периоды высокой учебной загруженности.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы тестирования веб-приложений;</li><li>Программа бета-тестирования в IT-компаниях;</li><li>Ручное тестирование мобильного софта;</li><li>JavaScript базового уровня и основы Python;</li><li>Автоматическое тестирование на Python, Java и JavaScript;</li><li>Обработка данных с помощью SQL.</li></ul><p><a href="https://experts2.ru/vgbHtD?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=6">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>7.</b> <a href="https://experts2.ru/NIjktb?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=7" rel="nofollow">Тестировщик ПО</a> |<b> Академия Эдюсон</b></p><p>Практический курс обучения QA-engineer’ов, в ходе изучения которого вы узнаете о принципах ручного и автоматизированного тестирования веб- и мобильных приложений и отточите свои навыки на 21 проекте и практических задачах. За полгода вы освоите расширенный стек тестировщика для создания чек-листов, составления баг-репортов, написания автотестов, проектирования баз данных и выполнения других, профессиональных задач. У вас также будет возможность попасть на стажировку к партнеру онлайн-школы — PointPulse, для совместной работы над проектом в кросс-функциональной команде. В рамках отдельного учебного блока вам расскажут о секретах поиска работы по IT-специальности в России, на фрилансе и за рубежом.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2026-06-03/11ff02f8-9804-400c-b147-df6a31b8a987.webp" alt="" /></figure><ul><li>Стоимость: 4592 рублей в месяц</li><li>Длительность: 6 месяцев</li><li>Формат обучения: видеолекции, скринкасты, тесты, тренажеры с практическими заданиями, обратная связь от экспертов</li><li>Сертификат: есть</li></ul><p><b>Кому подойдет: </b>начинающим тестировщикам; смежным специалистам в IT-сфере; людям, которые хотят сменить профиль деятельности и построить карьеру в IT.</p><p><b>Преимущества:</b></p><ul><li>21 проект для портфолио: создание чек-листов, тест-кейсов и баг-репортов;</li><li>поддержка куратора и сопровождение личного ментора в течение всего периода обучения;</li><li>стажировка в PointPulse для лучших студентов;</li><li>гарантированная помощь с трудоустройством и возврат денег,  если работу найти не получится;</li><li>доступ к учебным материалам и обновлениям навсегда;</li><li>в программе Нейросети для ручного и автоматизированного тестирования;</li><li>индивидуальная консультация с IT-экспертом в подарок.</li></ul><p><b>Недостатки:</b></p><ul><li>самостоятельный темп требует дисциплины</li></ul><p><b>Программа обучения:</b></p><ul><li>Знакомство с профессией Тестировщика ПО;</li><li>Основы тестирования программного обеспечения;</li><li>Жизненный цикл приложений;</li><li>Устройство веб-утилит;</li><li>Тестирование frontend-части;</li><li>Устройство IT-разработки;</li><li>Работа с Linux, Git и API-интерфейсами;</li><li>Введение в автоматизированное тестирование;</li><li>Знакомство с языком программирования Python;</li><li>Основы объектно-ориентированного программирования;</li><li>Специфика подхода CI/CD;</li><li>Нейросети для ручного и автоматизированного тестирования;</li><li>Карьерное развитие в IT-индустрии.</li></ul><p><a href="https://experts2.ru/NIjktb?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=7">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>8. </b><a href="https://experts2.ru/wmfyGP?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=8">Расширенный курс инженера по тестированию</a> | <b>Яндекс Практикум </b></p><p>Курс от специалистов Яндекса, на котором вы за девять месяцев погрузитесь в профессию QA-инженера и получите опыт работы над реальными задачами — для быстрого роста до middle-уровня. В рамках обучения вы будете работать не только над индивидуальными, но и над командными проектами вместе с IT-командой: проджект-менеджерами, лидами и разработчиками. Вы научитесь: анализировать технические требования к ПО, тестировать приложения и API, обрабатывать данные с помощью SQL, программировать на Python и автоматизировать тестирование. После учебы получите гарантированную помощь с трудоустройством — HR-специалисты подберут вакансии по вашей специальности и подготовят вас к собеседованиям.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-02-12/64157cca-80a3-4fe1-ba61-832d27dd4c07.png" alt="" /></figure><ul><li>Стоимость: от 16 500 рублей в месяц</li><li>Длительность: 9 месяцев</li><li>Формат обучения: теоретические материалы, практические задания с обратной связью, онлайн-встречи с преподавателями, проектные работы</li><li>Сертификат: есть</li></ul><p><b>Кому подойдет:</b> начинающим и практикующим тестировщикам; людям, которые изучают тестирование ПО самостоятельно.</p><p><b>Преимущества:</b></p><ul><li>актуальная программа обучения и усиленная практика по ручным и автоматизированным тестам;</li><li>умеренный темп без строгих дедлайнов;</li><li>наставники — практикующие тестировщики из Яндекса, Kaspersky, Ozon и других известных компаний;</li><li>11 учебных проектов и один проект от реального заказчика для портфолио;</li><li>доступ к закрытым вакансиями и стажировкам в Яндексе;</li><li>большое количество дополнительных учебных модулей для углубления знаний.</li></ul><p><b>Недостатки:</b></p><ul><li>высокая стоимость обучения во всех тарифных планах;</li><li>небольшое количество проектов в начальном тарифе.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы тестирования;</li><li>Регрессионное тестирование и ретест технических неполадок в веб-приложениях;</li><li>Анализ требований заказчика;</li><li>Проектирование тестов для пользовательского ПО;</li><li>Тестирование API;</li><li>Работа с базами данных и основы SQL;</li><li>Введение в автоматизированное тестирование;</li><li>Дополнительные модули по основам разработки интерфейсов, развитию soft-skills и пр.</li></ul><p><a href="https://experts2.ru/wmfyGP?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=8">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>9. </b><a href="https://experts2.ru/aDxqgE?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=10">Инженер по ручному тестированию</a> | <b>Skillfactory </b></p><p>Программа обучения IT-специальности QA-engineer с нуля с большим объемом практики в разных форматах: тесты, лайв-кодинги, онлайн-митапы и интерактивные тренажеры. За четыре месяца курса вы не только освоите аспекты тестирования ПО, но и получите реальный опыт — протестируете веб-приложение для проверки контрагентов от SCAN и проанализируете корректность работы веб-сайта Ростелекома. Уже к концу обучения в вашем портфолио будет более пятнадцати проектов, а также дипломная работа по реальному брифу.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-02-12/4725cf9a-c9a6-4863-beb4-ab971831b065.png" alt="" /></figure><ul><li>Стоимость: от 4 200 рублей в месяц</li><li>Длительность: 4 месяца</li><li>Формат обучения: видеолекции, текстовые материалы, тесты, домашние задания, практические тренажеры, онлайн-чат с менторами</li><li>Сертификат: есть</li></ul><p><b>Кому подойдет:</b> людям, которые интересуются IT и хотят научиться тестированию ПО с нуля.</p><p><b>Преимущества:</b></p><ul><li>усиленная и разнообразная практика в формате тестов, задач, тренажеров и лайв кодинга;</li><li>более 15 проектов для портфолио и дипломная работа по брифу от реального заказчика;</li><li>развернутая обратная связь по практикумам и вопросам от профессиональных менторов;</li><li>фокус на подготовке к трудоустройству и тренировка на кейсах от IT-компаний;</li><li>три тарифных плана для разных целей обучения;</li><li>дополнительная скидка при разовой оплате полной стоимости курса.</li></ul><p><b>Недостатки:</b></p><ul><li>ограниченные возможности базового тарифа.</li></ul><p><b>Программа обучения:</b></p><ul><li>Введение в тестирование;</li><li>Методологии разработки программного обеспечения;</li><li>Тест-дизайн и тест-анализ;</li><li>Чек-листы и тест-планы;</li><li>Системы баг-трекинга;</li><li>Особенности кроссбраузерного тестирования;</li><li>Тестирование API с использованием Postman;</li><li>Знакомство с языком запросов SQL;</li><li>Тестирование баз данных;</li><li>Основы тестирования мобильного ПО.</li></ul><p><a href="https://experts2.ru/aDxqgE?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=10">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><h2>Еще 24 дополнительных курса по QA-тестированию</h2><p>Курсы, представленные в этом разделе, помогут вам углубиться в сферу QA-тестирования, актуализировать свои знания, получить новые навыки и пополнить портфолио дополнительными проектами.</p><ul><li><a href="https://experts2.ru/ZcfLbp?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Инженер по тестированию: от новичка до автоматизатора</a> от Яндекс Практикума — Экспертный курс по QA-тестированию, с помощью которого вы сможете выйти на стабильный доход и вырасти до автоматического тестирования еще во время обучения. Вас ждут проекты по ручному тестированию и автоматизации, основанные на брифах от реальных IT-компаний. Вы научитесь выявлять ошибки в работе веб- и мобильных приложений, программировать на Python или Java, работать с базами данных, использовать Postman, Charles и другие продвинутые инструменты.</li><li><a href="https://experts2.ru/uZwExg?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Инженер по тестированию</a> от Яндекс Практикум — Программа обучения профессии QA-инженера с усиленной практикой и возможностью трудоустройства в штат Яндекса после выпуска. За пять месяцев вы выполните от семи проектных работ и соберете солидное портфолио. В Мастерской Практикума вам также будут доступны дополнительные проекты, максимально приближенные к реальной практике — с их помощью вы усовершенствуете профессиональные навыки и научитесь работать в команде.</li><li><a href="https://experts2.ru/EzpixF?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестировщик на Python</a> от Skillfactory — Практический курс QA-тестировщика, в рамках которого вы освоите навыки ручного и автоматизированного тестирования. Научитесь искать технические ошибки, баги и другие неполадки в работе пользовательских приложений. Закрепите полученные знания на практике — выполните несколько реальных задач от компаний-партнеров, и сможете добавить решенные кейсы в портфолио.</li><li><a href="https://experts2.ru/swdULg?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Junior Automation QA</a> от Maxima IT School — Образовательная программа по QA-тестированию включает онлайн-лекции с middle+ и senior-разработчиками, большое количество практических заданий и индивидуальные консультации с наставниками. В ходе обучения вы разберетесь в теории тестирования ПО, научитесь программировать на Java или C#, освоите методологию Unit-тестирования и сможете самостоятельно выявлять баги в работе веб-приложений. Также вы сможете попасть на стажировку к партнерам онлайн-школы, получить ценный опыт и строчку в резюме.</li><li><a href="https://experts2.ru/ZqjMpo?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Онлайн-курсы ручного тестирования</a> от Международной Школа Профессий — Дистанционный курс по теме ручного тестирования, с помощью которого вы сможете построить карьеру в IT-индустрии без знаний языков программирования. На программе вы узнаете об основных видах тестирования, научитесь тестировать веб-приложения и API-интерфейсы, а также попрактикуйтесь в работе с AndroidStudio, Charles, BASH и SQL.</li><li><a href="https://experts2.ru/xsbJFo?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Онлайн-курс тестировщиков</a> от HEDU (irs.academy) — Базовая программа обучения профессии QA-тестировщика с нуля с усиленной практикой и индивидуальной поддержкой от наставников. На курсе вы научитесь: тестировать мобильное ПО и веб-приложения, разрабатывать тестовые планы и тестовые примеры, использовать автоматизированное тестирование и резюмировать технические баги в документах.</li><li><a href="https://experts2.ru/QEetdg?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Азы сплит-тестирования для новичков</a> от Convert Monster — Сборник теоретических и практических задач, с помощью которых вы получите общее представление о A/B-тестировании, сможете проводить тесты без помощи IT-специалистов и анализировать их результаты. В дополнение к основному содержанию курса вы также получите несколько бонусов: мастер-классы по настройке контекстной рекламы ВКонтакте и созданию продающих объявлений, а также книгу «Идеальный Landing page» в pdf-формате.</li><li><a href="https://experts2.ru/PTmjls?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестирование ПО. Уровень 1</a> от «Специалиста» — Программа профессиональной переподготовки с очным и дистанционным обучением для тех, кто хочет изучить QA-тестирование с нуля. Вы научитесь: тестировать программное обеспечение, разрабатывать планы тестирования, описывать обнаруженные баги, работать с AndroidStudio, Postman и DevTools. При очном обучении вы получите бесплатные академические часы для практики в компьютерных аудиториях Образовательного центра.</li><li><a href="https://experts2.ru/PrxwlX?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">«Хочу стать тестировщиком»</a> от RocketBrain — Интерактивный курс поможет вам погрузиться в мир QA-тестирования, изучить принципы и процессы запуска теста ПО и стать первоклассным специалистом без знаний программирования. После выпуска вам будут доступны бонусы по трудоустройству: рекомендации по составлению резюме и оформлению портфолио, доступ к закрытому чату с вакансиями и сопроводительные письма в компании-партнеры.</li><li><a href="https://experts2.ru/KfNqpm?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестирование ПО. Уровень 2</a> от «Специалиста» — Второй этап обучения по курсу, посвященному тестированию ПО, поможет вам собрать профессиональную команду тестировщиков и оптимизировать процесс анализа работоспособности приложений. Вы узнаете, что представляет собой тест-менеджмент, поймете, как выстраивать эффективные взаимоотношения с другими специалистами, и научитесь оценивать возможные риски тестирования.</li><li><a href="https://experts2.ru/HluUfb?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Основы тестирования ПО</a> от ITVDN — Вводная программа обучения для новичков, которые хотят изучить QA-тестирование с нуля и без специальной подготовки. К концу курса вы будете уверенно разбираться в роли тестирования в разработке ПО, знать и применять на практике разные типы тестов, а также научитесь создавать баг-репорты и тест-кейсы.</li><li><a href="https://experts2.ru/rmaeCE?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестировщик ПО</a> от ПОИНТ — Курс с программой стажировки для начинающих и практикующих QA-тестировщиков, на котором вы попробуете скриптовое и регрессионное тестирование, а также научитесь составлять идеальные чек-листы и баг-репорты. Сервис, над которым вы будете работать в рамках проекта, доступен и на ПК, и на мобильных устройствах — вы сможете добавить в свое резюме кросс-браузерную версию с разными видами доступа.</li><li><a href="https://experts2.ru/BPtfiz?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Инженер по тестированию программного обеспечения (ПОТ)</a> от Testbase — Ускоренный курс, благодаря которому вы сможете структурировать знания и набраться практики в тестировании пользовательских приложений. Вы научитесь работать с расширенным технологическим стеком: Redmine, Confluence, Postman, phpMyAdmin и другими инструментами.</li><li><a href="https://experts2.ru/BPtfiz?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Основы тестирования программного обеспечения</a> от QA Academy — Образовательная программа содержит теорию и практику, необходимую для быстрого старта в QA-тестировании. Вы освоите принципы оценки работоспособности мобильных и веб-приложений и сможете претендовать на Junior-позиции тестировщика в IT-компаниях по окончании обучения.</li><li><a href="https://experts2.ru/NzrZlc?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тренинги для тестировщиков</a> от Software Testing — Подборка практических тренингов для тестировщиков с разным уровнем подготовки. На платформе вы найдете тренировочные занятия по Java, SQL, Bash, Chrome DevTools, Docker, Python и другим инструментам, используемым в IT-индустрии.</li><li><a href="https://experts2.ru/FpZkns?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">QA-инженер</a> от Nordic IT School — Очный курс с возможностью удаленного участия, в течение которого вы освоите востребованный стек технологий продвинутого тестировщика. Вы изучите основы тестирования веб- и мобильных приложений, поработаете с базами данных, рассмотрите инструменты автоматизации тестирования, а также получите экспертные рекомендации по трудоустройству.</li><li><a href="https://experts2.ru/OjLtpx?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестировщик</a> от KATA Programming Academy — Практико-ориентированная программа обучения, на которой вы освоите стек технологий, востребованных у работодателей, наработаете практику QA-тестирования и научитесь решать задачи разной сложности наравне с более продвинутыми специалистами. Вас ждет множество кейсов для портфолио, например: тестирование пользовательского интерфейса на базе приложения «Калькулятор калорий», тестирование веб-интерфейса интернет-магазина и другие.</li><li><a href="https://experts2.ru/rxnkUX?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Стань тестировщиком</a> от TestGrow — Интенсивный практикум с возможностью бесплатного доступа к обучающим материалам. Вне зависимости от тарифа, вы освоите перечень навыков, необходимых для уверенного старта в тестировании — научитесь находить технические ошибки, создавать тест-кейсы, писать sql-скрипты для работы с данными и взаимодействовать с заказчиком. В платном тарифном плане вам будут доступны персональные онлайн-консультации с экспертом и еще больше практики для углубления знаний.</li><li><a href="https://experts2.ru/jbxWHz?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестирование на проникновение и анализ безопасности</a> от «Академии АйТи» — Обучающая программа, в рамках которой рассматриваются этапы защиты технологий и инструментов, используемых PEN-тестировщиками, от возможного взлома. Вы научитесь: проводить тестирование на хакерские атаки, минимизировать риски взлома слабозащищенных систем, отражать кибератаки, прогнозировать риски и формировать документационную отчетность для IT-специалистов.</li><li><a href="https://experts2.ru/dDRort?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Программирование.Python.Selenium</a> от Stepik — Базовый курс для тех, кто хочет разобраться в программировании на Python и освоить востребованную профессию тестировщика. Вы узнаете принципы ООП, создадите полноценный проект по автоматизации UI-тестирования и научитесь запускать тесты с использованием библиотеки Pytest.</li><li><a href="https://experts2.ru/udPklI?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестирование ПО</a> от be-tester — Очная программа, в рамках изучения которой вы получите: полный перечень знаний, необходимых для работы QA-тестировщиком, и навыки использования профильного ПО. Помимо основной траектории обучения, у вас будет возможность пройти дополнительную стажировку у компаний-партнеров и получить полезную строчку для своего резюме.</li><li><a href="https://experts2.ru/KcyeDx?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестирование ПО с нуля до специалиста</a> от Stepik — Авторский курс с большим количеством практики в формате тестов и интерактивных задач с проверкой от эксперта. Изучите типы и методики тестирования, разберетесь в методология разработки приложений, а также научитесь работать с Postman, JIRA, SQL, Git и другими инструментами.</li><li><a href="https://experts2.ru/vGqrCa?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестировщик ПО: основы QA с нуля</a> от Merion Academy — Дистанционное обучение QA-тестированию для легкого старта в IT-сфере без специальных знаний и навыков программирования. Освоите аспекты функционального тестирования, познакомитесь с видами тестирования, научитесь работать с API, и базами данных. Сможете создавать структурированные чек-листы для оценки работоспособности ПО и презентовать их заказчикам.</li><li><a href="https://experts2.ru/UvsXxm?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Курс по тестированию игр</a> от «Планеты тестирования» — Сжатый курс, благодаря которому вы изучите основы тестирования программного обеспечения, а также узнаете об архитектуре игровых проектов и жизненном цикле игр. На теоретических и практических заданиях вы будете работать с игровыми механиками и поймете, какие действия разработчика могут улучшить игровой процесс.</li></ul><h2>Бесплатные курсы по QA-тестированию</h2><p>Если вы только начинаете свой путь в IT, бесплатные курсы по QA-тестированию могут стать отличным решением на старте. С их помощью вы сможете изучить азы анализа работоспособности и удобства приложений без знания языков программирования.</p><p><b>1. </b><a href="https://experts2.ru/NqezWc?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестировщик: быстрый старт в IT</a> — <b>Нетология</b></p><p>Курс позволит вам испытать свои силы в тестировании приложений и понять, интересна вам эта профессия или нет. Вы узнаете: какие задачи выполняет QA-тестировщик, как найти первую работу в этом направлении и какие навыки необходимо развивать для карьерного роста.</p><p><b>Главное о курсе: </b></p><ul><li>обучение в формате лекционных материалов и небольших практических заданий;</li><li>для начинающих тестировщиков и тех, кто хочет начать карьеру в IT без опыта.</li></ul><p><b>2.</b><a href="https://experts2.ru/pRoFxi?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop"> Введение в тестирование игр</a> — <b>XYZ</b></p><p>Недельный курс, на котором вы узнаете, что представляет собой QA и какую роль оно играет в разработке ПО, и разберетесь в различиях между ручным и автоматизированным тестированием. Для закрепления знаний вам будет предоставлено практическое задание — проверить игру на ошибки и подготовить баг-репорт.</p><p><b>Главное о курсе: </b></p><ul><li>формат обучения — записи лекций и практикумы для самостоятельной работы;</li><li>для тех, кто ничего не знает в разработке, но хочет понять, из чего состоит ПО.</li></ul><p><b>3.</b> <a href="https://experts2.ru/cIVjtr?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Получите навыки тестирования за 7 дней</a> — <b>GeekBrains</b></p><p>Тест-драйв IT-профессии, на котором вы погрузитесь в направление QA-тестирования, пройдете мастер-класс от продвинутых специалистов и сможете выбрать подходящую специализацию. Уже к концу обучения вы напишите свой первый тест-кейс.</p><p><b>Главное о курсе: </b></p><ul><li>базовые знания о тестировании ПО и IT-разработке;</li><li>мастер-класс по созданию тест-кейса.</li></ul><p><b>4.</b> <a href="https://experts2.ru/HgYxzr?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Легкий старт в профессию тестировщика</a> — <b>Skillbox</b></p><p>Интенсив, на котором вы узнаете, кто такие QA-инженеры и чем они занимаются, и поймете, как начать карьеру в востребованном IT-направлении. Попрактикуетесь в поисках технических ошибок: научитесь проводить тесты веб-форм, познакомитесь с софтом Postman и разберете популярные задачи, которые часто попадаются на собеседованиях.</p><p><b>Главное о курсе: </b></p><ul><li>изучение основ QA-тестирования и работа с инструментом Postman;</li><li>тестирование веб-форм, тренировка soft-skills и подготовка к поиску работы.</li></ul><p><b>5.</b> <a href="https://experts2.ru/UHcniv?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Демокурс программы «Тестировщик»</a> —<b> Контур.Школа</b></p><p>Три демонстрационных занятия помогут вам познакомиться с базовыми конструкциями языка JavaScript, понять, как работать с Dev Tools, и научиться работать с типами данных и языком Python. Для проверки знаний вы сможете пройти онлайн-тест из десяти вопросов.</p><p><b>Главное о курсе: </b></p><ul><li>демонстрационные уроки для оценки качества платного курса;</li><li>знакомство с JavaScript, Python и DevTools.</li></ul><p><b>6. </b><a href="https://experts2.ru/jdXwqC?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестировщик программного обеспечения: с нуля до первых проектов </a>— <b>Содействие занятости</b></p><p>Дистанционное обучение по программе «Содействия занятости населения», в ходе которого вы научитесь оценивать работоспособность разрабатываемого ПО, прогнозировать возможные сбои и искать баги в работе сайтов и приложений. Для бесплатного участия необходимо заполнить анкету и подтвердить категорию участника.</p><p><b>Главное о курсе: </b></p><ul><li>три тематических блока с актуальной теорией и практикумами по тестированию ПО;</li><li>сертификат об обучении и помощь с поиском работы после выпуска.</li></ul><p><b>7. </b><a href="https://experts2.ru/caSzDf?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Демокурс программы «Ведущий тестировщик»</a> — <b>Контур.Школа</b></p><p>Демо-курс включает три пробных занятия для знакомства с содержанием платной программы и форматом обучения. Поймете, для чего используются базы данных, познакомитесь с PostgreSQL, разберете основы ООП, научитесь различать свойства и методы классов и объектов.</p><p><b>Главное о курсе: </b></p><ul><li>демонстрационные уроки для тестировщиков Senior-позиции;</li><li>знакомство с SQL, PostgreSQL и объектно-ориентированным программированием на Python.</li></ul><p><b>8.</b> <a href="https://experts2.ru/cqSpyZ?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестирование ПО / QA Manual</a> — <b>Stepik</b></p><p>Вводная часть расширенного курса позволит вам поверхностно погрузиться в процесс тестирования приложений и понять, интересно вам данное IT-направление или нет. Вы познакомитесь с фундаментальной теорией QA-тестирования, изучите рабочий сленг IT-компаний и контекст работы с командой разработчиков.</p><p><b>Главное о курсе: </b></p><ul><li>формат обучения — теоретические материалы, видеоуроки и тесты;</li><li>сленговый IT-словарь, теория тестирования, контекст работы с командой IT-специалистов.</li></ul><p><b>9.</b> <a href="https://experts2.ru/HeijuG?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Видеокурс по тестированию ПО</a> —<b> Академия IT</b></p><p>Онлайн-курс, пройдя который, вы сделаете свой первый шаг к развитию карьеры в IT-сфере. Вы узнаете о популярных типах тестирования ПО, научитесь создавать тест-кейсы и оценивать качество пользовательских приложений.</p><p><b>Главное о курсе: </b></p><ul><li>интерактивные уроки с теорией и практикой;</li><li>обучение созданию тест-кейсов и тестированию программ.</li></ul><p><b>10. </b><a href="https://experts2.ru/RVnxdq?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестирование ПО: подготовка к сертификации ISTQB Foundation</a> — <b>Stepik</b></p><p>Сжатый формат объемной программы обучения «Сертифицированный тестировщик ПО» с актуальной теорией и множеством тестов с автопроверкой. Вы с нуля погрузитесь в основы тестирования приложений, изучите статистические методы проведения QA-тестов, научитесь проектировать тесты и управлять ими.</p><p><b>Главное о курсе: </b></p><ul><li>более тридцати обучающих видеороликов и ста тестов для самостоятельной работы;</li><li>электронный сертификат участника после завершения обучения.</li></ul><p><b>11. </b><a href="https://experts2.ru/UdirwN?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тесты и тренажеры для тестировщиков</a> — <b>LearnQA</b></p><p>Платформа с тестами и тренажерами для практики навыков тестировщика. На сайте вы найдете задания по SQL, Git, Bash и Java с разным уровнем сложности — специально для новичков и опытных специалистов.</p><p><b>Главное о курсе: </b></p><ul><li>сборник тестов и интерактивных тренажеров для новичков и профессионалов;</li><li>задания по SQL, Bash, Java, Git.</li></ul><p><b>12. </b><a href="https://experts2.ru/ubEkcF?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Автоматизация тестирования с помощью Selenium и Python</a> — <b>Stepik</b></p><p>Базовый курс для начинающих тестировщиков, на котором вы научитесь писать автоматизированные UI-тесты с помощью Python. Включает видеоуроки, тестирования и интерактивные задачи.</p><p><b>Главное о курсе: </b></p><ul><li>знакомство с Selenium, Page Object Model и тестовыми фреймворками;</li><li>интерактивные задачи и тесты с автоматической проверкой.</li></ul><p><b>13. </b><a href="https://experts2.ru/SifthH?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестировщик ПО: инструкция по быстрому старту в IT</a> — <b>Skillfactory</b></p><p>Вводная программа обучения, благодаря которой вы сможете погрузиться в рабочие процессы ручного и Python-тестировщика приложений. За три дня вы научитесь писать баг-репорты и работать в Postman, а также поймете, что еще нужно изучить, чтобы стать востребованным специалистом.</p><p><b>Главное о курсе: </b></p><ul><li>знакомство с профессией, языком Python и инструментом Postman;</li><li>практика написания баг-репортов.</li></ul><p><b>14. </b><a href="https://experts2.ru/cMeEjz?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Мини-курс по тестированию: быстрый старт в IT для новичков</a> — <b>Skillbox</b></p><p>Пять дней интенсивной практики, на которой вы сможете испытать свои силы в работе над реальными задачами тестировщиков ПО. Научитесь находить ошибки вручную и с помощью специальных инструментов.</p><p><b>Главное о курсе:</b></p><ul><li>практика начального уровня на основе реальных задач тестировщиков;</li><li>доступ к чат-коммьюнити в Telegram после регистрации.</li></ul><p><b>15. </b><a href="https://experts2.ru/EiusNd?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Тестировщик</a> — <b>Stepik</b></p><p>Обучающая программа по основам профессии для начинающих тестировщиков. Из видеоуроков вы поймете, как создается и тестируется ПО, освоите методики тестирования, научитесь оптимизировать рабочий процесс и документировать результаты.</p><p><b>Главное о курсе: </b></p><ul><li>более двадцати интерактивных видеороликов с большим объемом теории;</li><li>для новичков без опыта и Junior-тестировщиков.</li></ul><p><b>16. </b><a href="https://experts2.ru/qmxsOU?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Введение в тестирование</a> — <b>Хекслет</b></p><p>Курс по основам тестирования программного обеспечения с интересной теорией и обратной связью от специалистов поддержки Хекслета. Изучите основы HTML и CSS, разберетесь в видах тестирования веб-приложений, научитесь работать с DevTools, определять уязвимости и распознавать хакерские атаки.</p><p><b>Главное о курсе: </b></p><ul><li>видеоуроки, проверочные тесты и упражнения по QA-тестированию;</li><li>изучение HTML, CSS, DevTools и операций CRUD.</li></ul><p><b>17. </b><a href="http://?sub1=tproger-kf&amp;sub2=qa-testirovaniye-kursy&amp;sub4=netop">Вселенная тестирования, или как стать тестировщиком</a> —<b> Stepik</b></p><p>Программа начального уровня, цель которой — предоставить слушателям базовые знания в QA-тестировании и помочь найти работу в развивающемся IT-направлении. Включает теоретические материалы и тесты с автоматической проверкой для отработки навыков.</p><p><b>Главное о курсе: </b></p><ul><li>знакомство с теорией тестирования и техниками тест-дизайна;</li><li>практика написания SQL- и API запросов.</li></ul><p><b>18.</b> <a href="https://www.youtube.com/watch?v=UkDvGU2PWgA">Тестировщик с нуля</a> — <b>Artsiom Rusau QA Life</b></p><p>Обучающее видео, посвященное правилам выбора курсов по QA-тестированию. Дополнительно рассматривается специфика работы IT-специалиста: его обязанности, инструменты, карьерные перспективы.</p><p><b>Главное о курсе: </b></p><ul><li>базовые принципы и секреты выбора курса для обучения QA-инженерии;</li><li>знакомство с профессией и рекомендации от практикующего тестировщика.</li></ul><p><b>19.</b> <a href="https://youtu.be/3kgdKE7ndvI?si=Cs0z62AVHG6kvDaa">Тестировщик с нуля за 6 часов</a> — <b>Лёша Маршал</b></p><p>Шестичасовой видеоурок, с помощью которого вы узнаете, кто такой QA-тестировщик и чем он занимается. Рассмотрите базовые и продвинутые инструменты автоматизированного тестирования, а также поймете, как построить карьеру в этом направлении.</p><p><b>Главное о курсе: </b></p><ul><li>профессиональные навыки, обязанности и рабочие инструменты QA-engineer;</li><li>презентация с наглядным разбором практических задач.</li></ul><p><b>20. </b><a href="https://youtu.be/8-lEjM0FhTg?si=zTvJXKDp1B2gNDjm">Тестировщик (QA) с нуля</a> —<b> Олег Малышев</b></p><p>Девятичасовой видеоролик, автор которого в подробностях рассказывает об особенностях профессии QA-инженера. Для лучшего восприятия информации лекции включают интерактивные презентации с наглядными примерами тестирования приложений.</p><p><b>Главное о курсе: </b></p><ul><li>подробный видеоролик по профессии QA-тестировщика для новичков;</li><li>лекции и интерактивные презентации с авторскими комментариями.</li></ul><h2>Профессия QA-тестировщика</h2><h2>Обязанности</h2><p>QA-тестировщик (QA-engineer) проверяет работоспособность программного обеспечения, сайта или веб-приложения. Он ищет технические неполадки, смотрит, чтобы программа выполняла установленный алгоритм, а также защищает софт от возможных хакерских атак. QA-тестирование проводится вручную — по мануалу, или автоматически — с использованием ПО, имитирующего действия пользователей.</p><h2>Навыки</h2><p>Профессиональные навыки QA-тестировщика, которые требуют большинство работодателей от своих соискателей, включают:</p><ul><li>ручное и автоматизированное тестирование мобильных и веб-приложений;</li><li>знание основ SQL, Git и верстки;</li><li>нагрузочное и регрессионное тестирование;</li><li>функциональное и нефункциональное тестирование;</li><li>умение читать и разбираться в чужих программных кодах;</li><li>составление тест-кейсов и баг-репортов;</li><li>работа в AndroidStudio, SDK Manager и другом профессиональном софте.</li></ul><h2>Где учиться</h2><p>Научиться тестировать приложения и выявлять технические неполадки можно самостоятельно, на онлайн-курсах или в специализированных учебных заведениях. Самостоятельное обучение — это достаточно сложный путь изучения QA-тестирования, который требует усидчивости, целеустремленности и ответственности за результат. Он подойдет людям, которые имеют базовые представления о программировании и хотят сэкономить на обучении и учиться там, где удобно.</p><p>Обучение профессии тестировщика в ВУЗах, как правило, предусматривает очный или заочный формат занятий с обязательным посещением учебного заведения. Это отличный способ для того чтобы получить государственный диплом и пройти практику в партнерских IT-компаниях.</p><p>Онлайн-курсы, в свою очередь, сочетают в себе множество плюсов каждого из предыдущих вариантов. Обучение по специализированным дистанционным программам предусматривает свободный график занятий в удобное время и из любой точки мира, где есть доступ к интернету. Многие курсы предлагают своим участникам электронные сертификаты и официальные дипломы после выпуска, оплачиваемые стажировки и помощь с трудоустройством.</p><h2>Карьерные перспективы</h2><p>QA-тестировщикам в их профессиональной деятельности доступен как горизонтальный, так и вертикальный карьерный рост. Вы можете повышать свою квалификацию, совершенствовать навыки и нарабатывать опыт, чтобы продвинуться с позиции Junior до Middle, а после — до Senior. Или же, рассмотреть возможность перехода в QA-менеджмент, Project-менеджмент, DevOps-инженерию и другие, смежные специализации.</p><h2>Зарплата</h2><p>Уровень заработной платы тестировщика ПО зависит от его профессионального опыта, места работы, объема исполняемых обязанностей, сложности проектов и других влияющих факторов. Начинающие специалисты могут рассчитывать на зарплату <a href="https://hh.ru/vacancy/115612804?query=%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA+QA&amp;hhtmFrom=vacancy_search_list">от 50 000 рублей</a>, в то время как доход продвинутых QA-инженеров может достигать <a href="https://hh.ru/vacancy/115128365?query=%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA+QA&amp;hhtmFrom=vacancy_search_list">250 000 рублей</a> ежемесячно.</p><h2>Заключение</h2><p>Курсы по QA-тестированию пользуются большим спросом среди людей, которые хотят построить карьеру в IT без написания кодов и решения сложных математических задач. С их помощью вы на практике поймете, из чего состоит архитектура программного обеспечения и его жизненный цикл, научитесь выявлять технические неполадки и составлять структурированные документационные отчеты. А уже после выпуска сможете найти свою первую работу на Junior-позиции в современных IT-компаниях, или же уйти в полностью удаленный заработок на фрилансе.</p><p><b>Подборки по смежным темам:</b></p><ol><li><a href="https://tproger.ru/articles/kursy-mawinnogo-obucheniya--machine-learning-">Лучшие курсы по машинному обучению</a></li><li><a href="https://tproger.ru/articles/top-61-kursov-veb-razrabotchika--luchwee-onlajn-obuchenie-programmirovaniyu-besplatno-i-platno">Лучшие курсы по веб-разработке</a></li></ol><p><i>Если вы обнаружили ошибки, неточности или неактуальную информацию в подборке, сообщите об этом в комментариях. Также вы можете рассказать нам о других онлайн-курсах, проверенных вами лично, чтобы мы добавили их в рейтинг. </i></p>]]></content:encoded>
    </item>
    <item>
      <title>От анализа требований до продакшена: почему задача QA — менять продукт, а не просто искать баги</title>
      <link>https://tproger.ru/articles/ot-analiza-trebovanij-do-prodakwena-pochemu-zadacha-qa-menyat-p</link>
      <comments>https://tproger.ru/articles/ot-analiza-trebovanij-do-prodakwena-pochemu-zadacha-qa-menyat-p?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Екатерина Акименко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ot-analiza-trebovanij-do-prodakwena-pochemu-zadacha-qa-menyat-p</guid>
      <description><![CDATA[<p>Екатерина Акименко, ведущий QA-инженер Embedika, про ключевую задачу A — менять продукт, а не просто искать баги</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ot-analiza-trebovanij-do-prodakwena-pochemu-zadacha-qa-menyat-p">От анализа требований до продакшена: почему задача QA — менять продукт, а не просто искать баги</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 03 Jun 2026 07:50:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>В ИТ-индустрии принято разделять технический поиск багов и комплексное обеспечение качества. Если тестирование и Quality Control (QC) ограничиваются проверкой уже написанного кода, то Quality Assurance (QA) фокусируется на предотвращении дефектов на всех этапах разработки. На российском рынке эти роли часто объединяют под общим названием «QA-инженер», однако в зрелой разработке обеспечение качества не сводится только к поиску дефектов после написания кода. QA-инженер участвует в анализе требований, проектировании решений, оценке рисков и сопровождении продукта после релиза.</p><p>О том, в каких точках жизненного цикла проекта QA приносит максимальную пользу и как инженерный подход помогает предотвращать критические ошибки, рассказывает Екатерина Акименко, ведущий QA-инженер Embedika.</p><h2>Анализ требований как способ снизить стоимость ошибок</h2><p>Подключение инженера по тестированию к обсуждению бизнес-задач — это способ избежать переписывания системы на поздних этапах. Ошибки, найденные на этапе требований, обычно обходятся значительно дешевле, чем проблемы, обнаруженные после релиза или во время масштабирования системы.</p><p>На этой стадии специалист, знающий архитектуру и бизнес-логику проекта, анализирует саму идею функции. На этом этапе QA помогает команде проверить несколько ключевых аспектов будущего решения:</p><ul><li>Согласованность: насколько новое требование стыкуется с общей логикой и уже работающими модулями системы?</li><li>Техническая реализуемость: возможно ли воплотить задуманное без «костылей» в рамках текущих ограничений платформы?</li><li>Влияние на данные: как изменение повлияет на целостность данных, интеграции и существующие бизнес-процессы?</li><li>Риск-менеджмент: какие скрытые угрозы и неочевидные ограничения несет в себе эта реализация?</li></ul><p>Без такого фильтра разработка рискует столкнуться с дефектами, которые невозможно исправить «косметически». Например, если на этапе анализа пропустить конфликт новых требований с существующей схемой данных, команде придется перерабатывать архитектурные решения уже на поздних этапах разработки или после выхода в продакшен.</p><h2>Проверка проектных решений и пользовательских сценариев</h2><p>Когда бизнес-задачи декомпозированы в конкретные задачи на разработку, команда QA приступает к их верификации. Однако, чтобы замечания не превращались в спор о вкусах, инженеры используют объективные критерии.</p><ol><li>Соответствие бизнес-цели. Если интерфейс перенаправляет пользователя в общий реестр вместо карточки только что созданного объекта — это дефект соответствия, даже если технически всё сработало без ошибок. Пользователь теряет контекст и вынужден искать объект вручную, что противоречит исходной постановке.</li><li>Консистентность и логика. В крупных продуктах формируются единые принципы навигации и UI-гайды. Если во всех разделах кнопка сохранения находится вверху, а в новой фиче она переезжает вниз, QA подсвечивает это как нарушение консистентности пользовательского опыта и внутренних продуктовых стандартов. Сюда же относится путаница в терминологии: нельзя использовать «Применить» в одном месте и «Сохранить» в другом для идентичных действий.</li><li>Общепринятые паттерны. Существуют универсальные правила юзабилити и доступности. Если кнопка удаления оформлена зеленым цветом, это вводит в заблуждение, так как цвет ассоциируется с подтверждением или запуском. Форма, требующая обязательного заполнения поля без соответствующей маркировки, — еще один пример нарушения базовых практик.</li><li>Безопасность действий. Выполнение критических операций (удаление данных, изменение прав) без подтверждения — QA должен подсветить архитектурный риск до того, как он станет дорогостоящей проблемой в продакшене.</li></ol><p>Если решение неоднозначное, QA инициирует встречу с аналитиком, дизайнером и разработчиком. Это позволяет посмотреть на задачу с разных сторон и найти технически верный компромисс без субъективизма.</p><h2>Тестирование в активной фазе: что проверяет QA проверяет помимо функциональности</h2><p>На этапе активного тестирования QA оценивает не только корректность работы функций, но и устойчивость системы к реальному поведению пользователей и нестандартным сценариям. Специалист должен искать не только программные ошибки, но и «ред флаги» — сигналы того, что система может повести себя непредсказуемо в реальных условиях. Опытный инженер проверяет такие сценарии почти рефлекторно.</p><p>Один из типичных признаков проблемной логики — интерфейсный вакуум, когда после нажатия кнопки не появляется ни лоадера, ни сообщения. В такой ситуации пользователь начинает кликать снова и снова, что часто приводит к зависаниям, дублям в базе данных или выполнению операции несколько раз подряд. Не менее критична скрытая обязательность полей, когда отсутствие маркировки «звездочкой» оборачивается ошибкой при сохранении. Это разрушает доверие пользователя к интерфейсу и является одним из самых раздражающих факторов в UX. Еще одна системная проблема заключается в потере состояния: если пользователь настроил сложные фильтры, перешел в карточку и вернулся назад к пустому списку, работа с большими объемами данных существенно усложняется и увеличивает вероятность пользовательских ошибок.</p><h2>Ответственность за релиз</h2><p>Перед выходом продукта в продакшен команда тестирования формирует оценку состояния системы: какие риски остались неразрешенными, какие критические сценарии проверены, а какие требуют особого внимания после деплоя.</p><p>QA не принимает решение о релизе единолично — это коллегиальная ответственность менеджмента, аналитики и разработки. Однако именно данные от тестировщиков о фактической работоспособности функций и устойчивости архитектуры становятся фундаментом для этого выбора. Задача этапа — не только найти максимум ошибок, но еще и оценить приемлемость рисков перед релизом.</p><h2>Поддержка, анализ инцидентов и влияние на архитектуру</h2><p>Роль QA продолжается и после релиза. Специалисты участвуют в анализе инцидентов, восстанавливая сложные цепочки действий пользователей, которые привели к сбою. Иногда именно тестирование в проде выявляет проблемы, которые невозможно воспроизвести на тестовых стендах из-за различий в конфигурации сред или особенностей реальных данных.</p><p>В качестве примера можно привести кейс с падением таск-трекера, управлявшего массовыми операциями. Во время тестирования массовые операции работали стабильно, однако в продакшене система столкнулась с реальной конкурентной нагрузкой. Пользователи запускали параллельные операции по одним и тем же сущностям, что приводило к race conditions и переполнению очередей. Анализ логов и трассировок показал, что архитектура не предусматривала ограничения конкурентного выполнения. Для решения проблемы команде пришлось внедрить throttling и переработать механизм обработки очередей. Решение проблемы потребовало архитектурных доработок: внедрения механизмов защиты от параллельного запуска (throttling) и переработки логики обработки очередей.</p><p>Другой пример связан с интеграцией через внешнюю платформу, которая исправно функционировала в течение года. С ростом объема данных обмен начал прерываться с нечитаемыми ошибками. Анализ сетевого взаимодействия и логов интеграции показал, что размер сообщений превысил жесткий лимит внешней платформы в 5МБ. Проблема заключалась в том, что первоначальная схема обмена не учитывала рост объема данных и ограничения внешней платформы. Результатом стала разработка нового формата обмена с пакетированием данных.</p><h2>Вектор на инженерию</h2><p>Современный QA — это инженерная роль, связанная не только с проверкой функциональности, но и с оценкой надежности, наблюдаемости и устойчивости системы. Критически важны хард-скиллы: понимание работы асинхронных систем, умение анализировать структуру сообщений и знание ограничений внешних платформ.</p><p>Главная ценность QA заключается в системном взгляде на продукт — специалисту необходимо уметь прогнозировать, при каких условиях архитектура перестанет справляться со своими задачами. Чем раньше инженер по качеству включается в цикл разработки, тем меньше «архитектурных долгов» продукт накопит к моменту запуска, и тем стабильнее будет его масштабирование в будущем.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как ломаются мобильные приложения</title>
      <link>https://tproger.ru/articles/kak-lomayutsya-mobilnye-prilozheniya</link>
      <comments>https://tproger.ru/articles/kak-lomayutsya-mobilnye-prilozheniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-lomayutsya-mobilnye-prilozheniya</guid>
      <description><![CDATA[<p>Пять кейсов из практики мобильного тестирования: промокоды с разными требованиями, баг RatingBar на Samsung, пуши на iPad, UI без скролла и висящие WebSocket. Как баги прячутся на стыке систем.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-lomayutsya-mobilnye-prilozheniya">Как ломаются мобильные приложения</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Баги и ошибки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 May 2026 05:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В мобильной разработке баг часто появляется не в одном экране, а на стыке нескольких частей системы. Веб создаёт данные, бэкенд их обрабатывает, мобильное приложение показывает результат пользователю, а релиз зависит от App Store, Google Play, устройства и версии ОС. Когда требования к каждой из этих частей пишутся отдельно — и никто не проверяет их вместе — появляются баги.</p><p>В Centicore Group разобрали несколько кейсов из практики мобильного тестирования: промокоды, которые нельзя активировать, рейтинг, который считал лишнюю звезду, пуши на iPad, UI, который ломал рабочий сценарий, и WebSocket, который оставался висеть после выхода из чата.</p><h2>Промокод, который нельзя ввести</h2><p>Медицинское приложение: есть врачи, пациенты и записи на услуги. В какой-то момент понадобились промокоды. Механика простая: пациент активирует промокод — подключается подписка на мониторинг, например, по гипертензии на месяц или три. Аналитик написал спецификацию, разработчики сделали ровно то, что написано. Фичу разбили на две итерации: сначала создание промокодов в вебе, потом активация в мобилке.</p><p>Проблема была в том, что требования к двум частям фичи никто не сравнивал между собой. Поле для активации в мобилке покрыто валидацией: максимум 20 символов, только латиница, никаких пробелов и спецсимволов. А форма создания в вебе — без каких-либо ограничений. Врач или администратор клиники мог написать в префиксе что угодно: кириллицу, кавычки, восклицательный знак, теоретически SQL-инъекцию (на боевом сервере не проверяли). Промокоды выпускались пачками и уходили пациентам.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-05-19/3a9a2d14-e892-4d01-9aad-b8b3cd4727b4.webp" alt="" /></figure><p>При формальной проверке обе части могли пройти тесты. Веб соответствовал документации первой итерации, мобильное приложение — документации второй. Никто не прошёл полный маршрут от создания до активации. А в реальной жизни врач отправляет промокод, пациент вводит и система ломается на стыке двух платформ с разными требованиями.</p><p>Фиксить нужно мобилку, потому что генерация уже работает. А мобилка на тот момент полностью нативная, без динамических обновлений, значит полный цикл хотфикса: собрать сборку, отправить на ревью в App Store и Google Play, дождаться одобрения, выпустить. Многие крупные игроки к тому времени уже работали с динамическими обновлениями, это приложение нет.</p><p>Нашли вовремя, потому что тестировщик прошёл полный пользовательский маршрут от создания промокода в вебе до активации в мобилке — чего не делали в рамках формальной проверки каждой итерации отдельно.</p><h2>Samsung, одна звезда и RatingBar</h2><p>В финтех-приложении стандартная функция обратной связи — Voice of Client: пользователь оценивает консультацию в чате звёздами. Тестировщик нажимает на первую звезду — выбираются две. Нажимает на вторую — выбирается третья.</p><p>Первая гипотеза — кривой экран. Проверили на других устройствах: у коллег всё работает нормально. Версия ОС у всех Android 15, тестовый пользователь один и тот же, сборка идентичная. Добавить тестовое устройство в изолированную сеть банковского приложения непросто, но сделали. После нескольких итераций проверок выяснили, что баг воспроизводится только на живом железе Samsung — на эмуляторах и других производителях чисто.</p><p>Причина нашлась в устройстве компонента: Android RatingBar глубоко в иерархии наследует ProgressBar, а звёзды в нём скорее декоративный слой. Когда пользователь касается звезды, компонент вычисляет рейтинг через округление на основе параметра stepSize. На Samsung это округление стабильно уходило в большую сторону: касание по краю четвёртой звезды давало рейтинг 5. Фикс простой — stepSize выставляется в 0.01, а итоговое округление до целого числа делается вручную в листенере. После этого поведение стало одинаковым на всём железе.</p><p>В команде уже было три устройства на тестировщика, в таких условиях регресс занимает около двух недель и тысячу проверок. Покрыть весь зоопарк Android-производителей нереально, поэтому такие баги остаются невидимыми до тех пор, пока кто-то не возьмёт в руки телефон конкретной модели и версии.</p><h2>iPadOS, которого не существовало</h2><p>На iOS тестировать одно удовольствие: Apple настолько плотно контролирует железо, что ситуация, когда баг есть на iPhone 13, но нет на iPhone 15, практически невозможна. Граница, на которой что-то ломается в яблочной экосистеме, проходит между iPhone и iPad.</p><p>В финтех-приложении перестали работать пуш-уведомления на iPad. Сборка идентичная с iPhone, версия та же, настройки одинаковые. На iPhone регистрация в пуш-сервисе проходила штатно: приложение отправляло запрос на регистрацию устройства и получало подтверждение. На iPad в ответ прилетал код 400 с ошибкой «Provider UUID not found».</p><p>Первое подозрение было на заголовки запроса, но заголовки оказались чистыми. Причина нашлась в теле JSON-запроса: iPad и iPhone используют разные названия операционной системы: на телефоне это iOS, на планшете — iPadOS. Приложение передавало это название через атрибут OSName как есть, без нормализации. Бэкенд знал только «iOS» — при получении «iPadOS» возвращал ошибку, потому что такого значения в его словаре не существовало. Одна строка в JSON оставила целую категорию устройств без уведомлений.</p><p>Пофиксили на бэке: при получении значения «iPadOS» оно автоматически заменялось на «iOS» перед любой дальнейшей обработкой. Решение в лоб, зато надёжное. Могло быть значительно сложнее: Huawei без Google-сервисов с пуш-уведомлениями это отдельный класс проблем, где просто заменить одну строку — не получится.</p><h2>Когда никто не проверял крайние сценарии</h2><p>В медицинском приложении есть форма регистрации врача со списком специальностей в виде интерактивных тегов-кнопок (в мобильном UI их называют чипсами). Разработчик написал компонент и проверил на тестовых данных с двумя-тремя тегами — всё выглядело нормально. Но никто не проверял сценарий, где врач ведёт восемь специализаций. При большом количестве тегов список не помещается в поле и должен появляться скролл — он не появлялся. Часть специальностей просто не попадала в видимую область, и зарегистрировать такого врача нормально не получалось.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-05-19/d1818840-d638-4584-9add-0d6d5952db77.webp" alt="" /></figure><p>Та же логика, другое приложение. В финтехе бот поддержки при вопросе о выводе средств предлагал выбрать счёт через кнопку в нижней части экрана. При стандартном количестве счетов кнопка с фиксированным позиционированием отображалась нормально. Если клиент открыл счетов много, список вытеснял кнопку за границу экрана, прокрутить до неё было нельзя. Клиент видел незавершённый диалог с ботом — и кнопку, до которой физически не добраться.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-05-19/da54536e-0817-4ae2-9f2c-94589276755c.webp" alt="" /></figure><p>В том же финтех-приложении чат поддержки работал через WebSocket: одно соединение на сессию, весь обмен сообщениями через него. По стандарту при выходе из чата соединение закрывается кодом «1000», при следующем входе открывается новое. В этом приложении соединение не закрывалось: код не отправлялся, сокет оставался активным. При повторном входе открывалось второе соединение, потом третье. Висящие сокеты начали копиться, а приложение падало.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-05-19/82bd09f9-c6b7-419d-83b3-0b0680122584.webp" alt="" /></figure><p>Источник проблемы оказался в архитектурном решении: приложение переиспользовало библиотеку основного банковского продукта. Команда, которая поддерживает эту библиотеку, разрабатывает её под свои задачи и не обязана думать о поведении в чужом приложении. Обновление в основном продукте может сломать что угодно в зависимом, и узнают об этом только на регрессе.</p><h2>Где прячутся баги, которых нет в документации</h2><p>Все кейсы объединяет одно: формально каждая часть системы работала корректно. Промокоды создавались по спецификации, рейтинг рендерился правильно на эмуляторах, пуши регистрировались на iPhone, чат отправлял сообщения.</p><p>Баги появлялись только тогда, когда две части системы впервые встречались в реальных условиях — с реальными данными, железом и пользователем.</p>]]></content:encoded>
    </item>
    <item>
      <title>Vue без Node: как Julia Evans тестирует компоненты в браузере</title>
      <link>https://tproger.ru/translations/vue-bez-node-kak-julia-evans-testiruet-komponenty-v-brauzere</link>
      <comments>https://tproger.ru/translations/vue-bez-node-kak-julia-evans-testiruet-komponenty-v-brauzere?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/vue-bez-node-kak-julia-evans-testiruet-komponenty-v-brauzere</guid>
      <description><![CDATA[<p>Julia Evans показывает, как тестировать Vue-компоненты прямо в браузере без Node, Deno и сборки. QUnit, mountComponent, waitFor — полный перевод поста.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/vue-bez-node-kak-julia-evans-testiruet-komponenty-v-brauzere">Vue без Node: как Julia Evans тестирует компоненты в браузере</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 07 May 2026 14:30:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если у вас pet-проект на Vue, в котором вы боитесь что-то менять, потому что без билда и без тестов любое изменение похоже на лотерею, — рабочий способ обойтись без Node, Deno и сборщика всё-таки есть. Julia Evans (автор «Wizard Zines» и блога jvns.ca) описала минимальный рецепт в посте от 2 мая 2026: компоненты кладутся в window._components, функция mountComponent рендерит их в скрытый div, тесты QUnit запускаются прямо со страницы. Это перевод поста.</p><p>Заметка короткая и практическая. Сначала — краткий вывод, потом полный текст Julia.</p><ul><li><b>Что в посте:</b> рабочий минимум для тестирования Vue-компонентов в браузере без Node, Deno и сборки. Тесты запускаются на отдельной странице через QUnit (тестовый фреймворк, который рендерится прямо в браузере), компоненты экспортируются в window._components, рендерятся через mountComponent в скрытый div вне viewport.</li><li><b>Как ждать DOM:</b> Julia пишет свою функцию waitFor(), которая раз в 20 мс проверяет условие и сдаётся через 2 секунды. Без sleep()-затычек, обычным опросом DOM — паттерн, к которому рано или поздно приходит любая фронтенд-команда.</li><li><b>Заполнение форм требует событий:</b> в Vue недостаточно присвоить value или checked — нужно диспатчить событие (input для текстов, change для чекбоксов), иначе реактивность Vue не отслеживает изменение.</li><li><b>Test coverage — Chrome это умеет из коробки:</b> панель Coverage показывает покрытие JS и CSS-кода. Чтобы хорошо работало, Julia рекомендует выключить sourcemaps в DevTools и смотреть покрытие по бандлу.</li><li><b>Открытые вопросы:</b> как запускать те же тесты в CI, как уйти от привязки к CSS-классам в селекторах (правильнее — getByRole или data-testid), и стоит ли переехать на Testing Library/Vue Test Utils.</li></ul><h2>Контекст: я хочу тестировать без Node</h2><p>Привет! Один из моих долгосрочных проектов — выяснить, как писать frontend-JavaScript без Node и любого другого серверного JS-рантайма.</p><p>Главная проблема, в которую я постоянно упираюсь в своих frontend-проектах: я не знаю, как писать для них тесты. Раньше я пробовала Playwright, но он казался медленным и неуклюжим — всё время приходилось запускать новые browser-процессы, и оркестрация требовала Node-кода.</p><p>В итоге я просто не тестирую свой frontend, и это неприятно. Обычно я и не обновляю проекты особо часто, поэтому болезненность не сильно проявляется, но было бы хорошо вносить изменения с большей уверенностью!</p><p>Так что подходящий способ frontend-тестирования давно лежит у меня в списке желаний.</p><h3>Идея: просто запускать тесты во вкладке браузера</h3><p>Alex Chan когда-то написал отличный пост — «Testing JavaScript without a (third-party) framework» — в ответ на одну из моих предыдущих заметок этой серии. Там он показал, как сделать крошечный фреймворк юнит-тестирования, который запускается прямо со страницы в браузере.</p><p>Мне тогда очень понравился подход, но в посте речь шла только про unit-тесты, а мне нужны были end-to-end интеграционные тесты для моих Vue-компонентов, и я не знала, как это сделать.</p><p>Поэтому, когда на днях знакомый Marco в разговоре сказал «знаешь, ты же можешь просто запускать тесты Vue-компонентов в браузере», я подумала: «эй, надо попробовать ещё раз!»</p><p>Я всё это сделала только вчера, так что наверняка многое можно улучшить, — но хочу записать пару наблюдений по ходу дела, пока не забыла.</p><p>Это было слегка непросто: документация Vue обычно предполагает, что вы используете Node как часть build-процесса (там много «шаг 1: npm install ЧТО-ТО»), а я не хотела использовать Node, Deno и так далее. Но на практике оказалось не очень сложно.</p><p>Проект, который я буду здесь тестировать, — это <a href="https://jvns.ca/blog/2024/06/24/zine-feedback-site/" rel="noopener">сайт фидбэка по моим зинам</a>, который я написала в 2023.</p><h3>Тестовый фреймворк: QUnit</h3><p>Я использовала QUnit — тестовый фреймворк для JavaScript, который умеет запускаться прямо со страницы в браузере без Node-окружения (когда-то именно его использовала команда jQuery). Он отлично работает, но рассказать про его внутреннее устройство мне особо нечего — поэтому ограничусь этим. Думаю, подход Alex с самописным фреймворком тоже сработал бы. Я следовала <a href="https://qunitjs.com/intro/" rel="noopener">официальной инструкции</a>.</p><p>Что я оценила в QUnit — кнопка «rerun test», которая запускает только один конкретный тест. У меня в тестах много network requests, поэтому возможность запустить только один тест сильно облегчает дебаг.</p><h3>Шаг 1: подготовить компонент к тестированию</h3><p>Первое, что я сделала — настроила свои Vue-компоненты для тестового окружения.</p><p>В основном приложении я положила все компоненты в window._components, примерно так:</p><p>Затем смогла написать функцию mountComponent, которая делает то же самое, что мой обычный mount-код в production (рендерит крошечный шаблон с нужным компонентом).</p><p>Отличия только два:</p><ul><li>Можно опционально передать дополнительные данные, чтобы использовать их как props.</li><li>Компонент монтируется во временный невидимый div, который удаляется из DOM по завершении теста. Div позиционирован за пределами viewport (position: absolute; top: -10000, ...), так что его не видно.</li></ul><p>Вот как выглядит вызов mountComponent:</p><p>А вот её код. Здесь qunit-fixture — это служебный div, который QUnit добавляет в тестовую страницу и автоматически очищает после каждого теста (его id зашит в QUnit, нужно только положить &lt;div id="qunit-fixture"&gt;&lt;/div&gt; в HTML тестовой страницы):</p><p>Результат — div, в котором можно программно кликать, заполнять формы, проверять, что появился нужный контент, и так далее. (Примечание переводчика: в оригинальной версии у Julia функция возвращала просто div, но дальше во всех вызовах используется const {div} = mountComponent(...). С return div такая деструктуризация даст undefined — поэтому мы поправили на return {div}. И добавили явный app.mount(div), который тоже опущен в оригинале.)</p><h3>Шаг 2: добавить fixture-данные</h3><p>Поскольку я писала end-to-end интеграционные тесты, в которых клиентский JS должен работать в связке с сервером, в БД нужны были тестовые данные. Я написала ~25 строк SQL для подготовки тестовых данных и добавила endpoint в dev-сервер, который запускает этот SQL и сбрасывает тестовые данные в известное состояние.</p><p>Затем просто вызываю await reset() в начале каждого теста, которому нужны тестовые данные.</p><p>Моя reset() на самом деле не всегда полностью сбрасывает всё — не очень хорошо, но для старта рабочий вариант, и его всегда можно улучшить.</p><h3>Шаг 3: базовый тест</h3><p>Так выглядит базовый тест! По сути мы рендерим div и проверяем, что в нём есть приблизительно правильные данные.</p><p>Это все базовые кирпичики! А теперь — несколько проблем, на которые я наткнулась по ходу.</p><h2>Как ждать рендера: проблема и waitFor()</h2><p>В моих тестах много сетевых запросов, и нужно время, чтобы они завершились, а Vue потом сделал с результатами своё дело и обновил DOM.</p><p>Думаю, мы давно усвоили: вставлять sleep()-затычки и надеяться, что тайминги совпадут, — медленно, нестабильно и доводит до бешенства. Поэтому нужен другой способ.</p><p>Насколько я понимаю, обычный путь — найти способ по DOM понять, можно ли двигаться дальше. Что-то вроде «если эта кнопка видна — значит, можно действовать».</p><p>Поэтому я написала маленькую функцию waitFor(), которая опрашивает условие каждые 20 мс. Таймаут — 2 секунды.</p><p>Версия в посте Julia не показана прямо — приведём свою, минимально работающую (и идейно соответствующую её описанию):</p><p>Использование выглядит так:</p><p>Похоже, существует много реализаций этой идеи, и они продуманы лучше моей (беглый поиск в Google: <a href="https://github.com/dgtlife/qunit-wait-for" rel="noopener">qunit-wait-for</a>, Playwright expect.poll).</p><h2>Понять, чего именно ждать, — нетривиально</h2><p>Иногда мне казалось, что я нашла правильную точку для ожидания в DOM («просто дождись, пока появится этот textarea!»), но на практике из-за внутренних деталей программы нужно было ждать чего-то другого, что было сложно зацепить.</p><p>В итоге я добавила в один компонент произвольное значение в DOM, когда он завершал важное действие (вроде data-this-thing-is-ready=true). Это не очень-то красиво.</p><p>Думаю, правильный способ починить такую проблему теста — рефакторинг, который заодно делает приложение более надёжным для пользователя. Если в DOM есть элемент, с которым пользователю на самом деле ещё нельзя взаимодействовать — может быть, его и не стоит показывать?</p><h2>Добавлять CSS-классы для селекторов? Спорный вопрос</h2><p>В итоге я добавила несколько классов на HTML-элементы — нужно было их находить в тестах, чтобы кликать или ждать появления в DOM.</p><p>Я могу позже изменить этот подход — тестовые фреймворки для frontend обычно советуют избегать CSS-классов и использовать что-то вроде getByRole (выбор по семантической роли элемента, например «кнопка» или «поле формы») или, в крайнем случае, data-testid (специальный data-атрибут, который добавляют исключительно ради тестов и игнорируют в production-стилях).</p><p>Похоже, миграция на getByRole решает обе проблемы сразу: и приложение становится более доступным для скринридеров, и тесты — устойчивее к рефакторингу разметки.</p><h2>Заполнение форм — отдельная боль</h2><p>Чтобы заполнить форму, недостаточно просто выставить value — нужно ещё диспатчить событие, чтобы Vue понял, что элемент изменился. И для checkbox, и для textarea нужны разные события.</p><p>Это слегка раздражает — и заставляет понять, зачем вообще могут понадобиться UI-тестовые библиотеки. Например, Testing Library (набор фреймворк-агностичных утилит для тестирования UI с упором на доступность) и Vue Test Utils (официальная библиотека Vue для unit-тестов компонентов). Их подходы к формам выглядят иначе:</p><ul><li>Пример заполнения формы из <a href="https://testing-library.com/docs/example-input-event/" rel="noopener">Testing Library</a> выглядит совершенно иначе, чем то, что делаю я.</li><li>У <a href="https://test-utils.vuejs.org/guide/essentials/forms" rel="noopener">Vue Test Utils</a> раздел про работу с формами выглядит так, будто сильно упрощает всё это.</li></ul><h2>Test coverage — Chrome это умеет из коробки</h2><p>Мне хотелось понять, какое у меня test coverage, и оказывается, в Chrome есть встроенная функция code coverage для JS и CSS!</p><p>Мой JS собирается в один файл bundle.js через esbuild — поэтому я могу просто посмотреть на bundle.js и увидеть, какие строки не покрыты тестами.</p><p>Процесс получился чуть капризный: пришлось выключить sourcemaps в Chrome DevTools, чтобы заработало, и есть специфическая, не самая очевидная последовательность действий, чтобы увидеть данные покрытия.</p><h2>Это было прикольно</h2><p>Как обычно с такими постами: я никогда особо не работала frontend- или backend-разработчиком (кроме как для себя!) и чувствую, будто постоянно учусь делать совсем базовые штуки.</p><p>Мне реально кайфовалось от этого. Мои frontend-проекты всегда кажутся хрупкими, потому что они без тестов; и, может быть, однажды у меня появится тест-сьют, в котором я буду уверена.</p><p>Что я ещё обдумываю:</p><ul><li>Пока писала пост, нашла frontend-библиотеку Testing Library — у неё много рекомендаций, как писать тесты, которые сильно отличаются от моих первоначальных идей. Я попробовала переписать всё на Testing Library — получилось неплохо, посмотрим, что из этого выйдет. Они распространяют .umd.js файл, который работает без Node.</li><li>Не до конца понимаю, как относиться к тому, что эти тесты никак не запускаются из командной строки. Может быть, есть простой способ работать в основном в браузере, но иметь возможность погонять и в CI, если нужно?</li></ul><h2>Что забрать с собой</h2><blockquote>Мои frontend-проекты всегда кажутся хрупкими, потому что они без тестов. Может быть, однажды у меня появится тест-сьют, в котором я буду уверена.</blockquote><p>Главный вывод поста: для маленьких персональных или библиотечных проектов «тестовая страница в браузере» — совершенно рабочий путь. Не нужно тащить Node, build-сервер и jsdom только ради того, чтобы у вас были тесты. Чек-лист минимальной настройки:</p><ol><li>Положить компоненты в window._components (или другое глобальное пространство имён).</li><li>Подключить QUnit (или другой фреймворк, который умеет запускаться прямо со страницы) в HTML-файл с тестами.</li><li>Написать mountComponent(template, data), которая создаёт временный div и монтирует туда Vue-app.</li><li><b>Опционально</b> (если у компонента есть бэкенд): сделать endpoint /api/reset_test_data на dev-сервере для сброса БД к фикстуре.</li><li>Реализовать waitFor(condition, timeout=2000) для ожидания DOM-условий вместо sleep().</li><li>Для форм диспатчить input (текстовые поля) и change (чекбоксы) после изменения свойств элементов. Для кликов хватит обычного .click() на элементе.</li><li>Для покрытия — Chrome DevTools, вкладка Coverage; sourcemaps выключить.</li></ol><p>Оригинал поста Julia Evans — на <a href="https://jvns.ca/blog/2026/05/02/testing-vue-components-in-the-browser/" rel="noopener">jvns.ca</a>. Альтернативы для тех, кто хочет больше готового: <a href="https://test-utils.vuejs.org/" rel="noopener">Vue Test Utils</a> (через jsdom в Node), <a href="https://testing-library.com/" rel="noopener">Testing Library</a> (с UMD-сборкой работает без Node).</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему вам нужно добавить LLM-as-a-Judge в пайплайн автоматического тестирования и как это сделать</title>
      <link>https://tproger.ru/articles/pochemu-vam-nuzhno-dobavit-llm-as-a-judge-v-pajplajn-avtomatichesk</link>
      <comments>https://tproger.ru/articles/pochemu-vam-nuzhno-dobavit-llm-as-a-judge-v-pajplajn-avtomatichesk?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Константин Рисков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-vam-nuzhno-dobavit-llm-as-a-judge-v-pajplajn-avtomatichesk</guid>
      <description><![CDATA[<p>Если вы читаете эту статью, значит, уже понимаете, зачем нужны автотесты и какое место они занимают в разработке LLM-ассистентов и агентов. В таких проектах тестирование важнее, чем в классической разработке: детерминированных ответов нет, а специфические задачи есть — сбор бенчмарков, сравнение сгенерированных ответов с эталонными. Я расскажу, почему нужен автоматизированный гибридный пайплайн, включающий в себя сравнение векторов и LLM-as-a-Judge, в котором ручная разметка используется только на самом старте.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-vam-nuzhno-dobavit-llm-as-a-judge-v-pajplajn-avtomatichesk">Почему вам нужно добавить LLM-as-a-Judge в пайплайн автоматического тестирования и как это сделать</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Промпты]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 23 Mar 2026 11:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Я расскажу, почему нужен автоматизированный гибридный пайплайн, включающий в себя сравнение векторов и LLM-as-a-Judge, в котором ручная разметка используется только на самом старте.</p><p>Тесты покрывают только часть функционала, а совпадение ответов изредка можно проверить посимвольно, потому что ответ может быть правильным, но написан в другой формулировке.</p><p>В целом подходов к тестированию LLM немного:</p><ol><li>ручная разметка,</li><li>сравнение векторов,</li><li>LLM-as-a-Judge.</li></ol><p>Это три основных способа оценить качество ответов модели: либо люди вручную размечают результаты, либо ответы сравниваются автоматически через эмбеддинги, либо одну LLM используют как «судью» для оценки другой.</p><p>Ручная разметка дорогой процесс и по времени, и по деньгам. Сравнение векторов условно бесплатное, но часто может давать сбои (об этом поговорим ниже). LLM-as-a-Judge дороже векторов и умеет ловить кейсы, которые не видят вектора, но и этот метод далеко не идеален.</p><p>Нам, конечно, хочется запускать тесты при каждом изменении промптов: добавил новый пример во few-shot - тут же проверил результат, это невозможно достичь с ручной разметкой.</p><p>Дальше я покажу, почему нужен автоматизированный гибридный пайплайн, включающий в себя вектора и LLM-as-a-Judge, в котором ручная разметка используется только на самом старте.</p><p>Примечание. Эта статья касается LLM ассистентов/агентов ответы которых мы не можем проверять посимвольно.</p><h2>Ручная разметка: дорого</h2><p>Ручная разметка — это часы людей, экспертов из бизнеса, методологов (вам повезло, если у вас есть доступ к операторам поддержки и они являются компетентными в вашем домене). Команду разметки нужно онбордить, объяснять схему оценок, определять и переделывать спорные кейсы. В итоге мы тратим недели, чтобы собрать один устойчивый golden dataset.</p><p>Ручная разметка — это инструмент для создания эталонного бенчмарка, а не метод регресс-тестов.</p><p>Почему тесты не совпадают с продом и что с этим делать?</p><p>Тут есть ловушка: тестовая среда и прод живут в разных реальностях. Эксперты сидят в Excel, просматривают десятки ответов подряд, привыкают к стилю и начинают шире трактовать норму. На прошлом месте работы у меня был случай, где в Excel ответы получают оценку «отлично, не нужно редактировать», а в проде такие же ответы получают дизлайк.</p><p><b>Почему так происходит?</b></p><p>Контекст размыт: разметчик не ощущает реальную боль пользователя, не видит его путь, не чувствует цену ошибки - и планка «отличного» ответа незаметно сползает вниз.</p><p>Чтобы тестовые условия были ближе к продовым, важно тщательно онбордить команду разметки и договариваться о единых критериях. Например, явно зафиксировать: считается ли «отличным» ответ, где нужно поправить одно слово, или любая правка — вплоть до удаления/добавления смайлика — уже снижает оценку.</p><p>Мы используем ручную разметку только на этапе создания бенчмарка. Дальше мы хотим сделать тесты автоматическими — откалибровать векторы и LLM-as-a-Judge так, чтобы это максимально совпадало с оценками экспертов.</p><h2>Вектора не работают?</h2><p>Современные модели хорошо следуют правилам Tone of Voice и могут правдоподобно дофантазировать структуру ответа. Это галлюцинирование создаёт ложное совпадение, повышая векторный скор. Векторное сравнение ловит общий смысл, но теряет критически важные факты.</p><p>Посмотрим на примере реального кейса LLM-ассистента по страхованию (стиль текста агента сохранён для наглядности). Пользователь спрашивает: «Хочу купить ОСАГО. Подскажи, как?»</p><p>LLM-ассистент отвечает:</p><p>«Для оформления ОСАГО вам потребуется выполнить несколько шагов:</p><p>Подготовьте документы:</p><p>— Паспорт</p><p>— Водительское удостоверение</p><p>— Свидетельство о регистрации транспортного средства (СТС)</p><p>— Паспорт транспортного средства (ПТС)</p><p>— если система не найдёт документы автоматически по номеру авто, вам потребуется загрузить их вручную.</p><p>Выберите способ оформления:</p><p>— Онлайн на сайте</p><p>— В мобильном приложении</p><p>— В офисе</p><p>Заполните заявку:</p><p>— Укажите данные автомобиля и водителей</p><p>— Укажите срок страхования и дополнительные опции</p><p>Оплатите полис:</p><p>— Оплата картой или через интернет-банк</p><p>Получите полис:</p><p>— Электронный полис придёт на e-mail</p><p>— Его можно распечатать или сохранить на телефоне</p><p>Оформление занимает несколько минут. Хотите оформить ОСАГО прямо сейчас?»</p><p>Автоматически мы разметили этот ответ и эталон как правильное совпадение, но эксперт подсветил, что на самом деле мы допустили ошибку. Дело в том, что:</p><p>«Для ОСАГО срок страхования сейчас выбирать нельзя — мы оформляем только на год».</p><p>Векторный скор не реагирует на изменение факта, даже если этот факт — главный. По сути, в векторном представлении нет разницы между отдельными тезисами: весь блок текста переводится в вектор, и если, например, 95% его — это болтовня и 5% — факт, векторное представление не может отбросить шелуху как лишнюю. Чем ответы длиннее, тем меньший вес имеют различие или сходство отдельно взятого факта.</p><p>В результате:</p><ul><li>неправильный ответ с похожими структурой и формулировками → высокий скор,</li><li>правильный ответ, но перефразированный → низкий скор.</li></ul><p>Вы <a href="https://colab.research.google.com/drive/1ZbW21VJ_aWJmhADDrHmc08edeEvIp7Dc?usp=sharing" rel="nofollow">можете убедиться сами</a>: в одних примерах абсолютно разные по фактам ответы оказываются близкими по векторам; в других — одинаковые ответы отлетают далеко друг от друга.</p><h2>А LLM-as-a-Judge работает?</h2><p>Противоположно векторам LLM-as-a-Judge может быть слишком чувствительным к фактам. Модель честно замечает любое расхождение — даже там, где для бизнеса это вообще неважно. Например, мы сравниваем два приветственных сообщения от LLM-ассистента, в которых как будто не может быть никаких фактов, и эта пара внезапно получает 0. Размышления модели:</p><p>«Оба сообщения предлагают помощь, используя слово "помочь". Темы пересекаются — готовность предоставить поддержку. Однако первое сообщение более подробное, обращается по имени и предлагает обратиться при необходимости. Второе сообщение краткое и общее. В ответах разные факты, необходимо поставить 0».</p><p>Формально модель права, но для качества ассистента это не критично — наш ответ окей.</p><p>Поэтому нам нужна не одна метрика, а их связка: векторное сходство + LLM-as-a-Judge. Всё, что прошло оба порога (вектор выше 0.8 и LLM-as-a-Judge говорит «факты совпадают»), считаем корректным. Всё, что провалилось по обеим метрикам, считаем некорректным.</p><p>А вот пограничные случаи, где метрики не расходятся (например, вектор даёт 0.6 при пороге 0.8, а LLM-as-a-Judge ставит 1, или наоборот), мы обязаны пересматривать вручную.</p><p>Опять же в идеале использовать эти кейсы для итеративного улучшения пайплайна и вести всю систему в сторону полной автоматичности.</p><h2>Можно ли тестировать LLM без golden dataset?</h2><p>Автотесты строятся на golden dataset — фиксированном наборе пар «запрос пользователя → эталонный ответ».</p><p>Исполнителю часто не хватает доменной экспертизы, поэтому он просит заказчика помочь собрать такой датасет. Но заказчики обычно не хотят тратить на это время: присылают синтетические вопросы или просто дают документацию («тут всё есть, разберитесь»).</p><p>Возникает соблазн вообще отказаться от эталонных ответов и тестировать только по цепочке:</p><ul><li>какой запрос пришёл,</li><li>какие функции или инструменты вызвались,</li><li>какие документы подтянулись из векторной базы,</li><li>что в итоге ответила модель.</li></ul><p>Но так делать нельзя.</p><h4>1. Нам нужно измерять регрессию</h4><p>Регрессия — это ухудшение качества после изменений.</p><p>Без фиксированного датасета мы не можем сравнить:	было → стало.</p><p>Частый случай, что мы починили одну часть и у при этом у нас отвалилась другая.</p><p>Golden dataset даёт нам неподвижную точку, относительно которой мы измеряем любые изменения в поведении модели.</p><h4>2. Проверки внутренних шагов полезны — но вторичны</h4><p>Мы действительно можем проверять. Но это дополнение, а не замена эталонному бенчмарку.</p><h4>3. Единственный способ понять, что ответ исчерпывающий, — сравнить его с эталоном</h4><p>Даже если цепочка вызовов функций выглядит идеально, итоговый ответ может быть неполным, ошибочным или излишним. Это видно только при сравнении с эталоном.</p><h4>4. Бенчмарки с эталонами устойчивы к изменениям системы</h4><p>Вы можете менять:</p><p>— промпты,</p><p>— цепочку рассуждений,</p><p>— инструменты,</p><p>— векторный поиск.</p><p>Но тест «эталон → сгенерированный ответ» остаётся валидным в любом случае. Проверять же полноту ответа, просто передавая вопрос пользователя и ответ системы — очень плохая идея. По своей природе LLM продолжают диалог, поэтому даже при галлюцинациях ответ выглядит полным. По сути, неполным ответ будет только в тех случаях, когда LLM явно уходит в отказ. Но для такого сценария лучше сделать заглушку и при необходимости искать эти кейсы по ней.</p><h2>Как собрать бенчмарк?</h2><p>Надеюсь, я убедил вас, что нужно собирать бенчмарк и вместе с векторами использовать LLM-as-a-Judge? Теперь обсудим, как это сделать.</p><p>Сколько должно быть кейсов в бенчмарке? Конечно, чем больше, тем лучше. Если вопросы подобраны репрезентативно, то 1000 примеров — уже потолок. Не стоит забывать, что каждый прогон LLM-as-a-Judge стоит денег.</p><p>Бенчмарк — это обычно Excel-файл с ≈100 примерами.</p><p>По хорошему нам надо собрать репрезентативный набор реальных запросов, который отражает распределение тем. Например, если 20% обращений связаны с темой X, то из 100 вопросов 20 должны быть про X. Это важно, чтобы не попасть в локальный минимум. Не собирая репрезентативный набор запросов может получится так, что вопросы будут одной природы, модель покажет хорошие результаты на тесте, но провалиться в проде.</p><p>Где взять вопросы для бенчмарка:</p><ul><li>У поддержки. Узнайте, ведут ли они статистику по тегам. Обычно да, поддержка — хороший источник. Можно также с помощью LLM сократить переписку до «вопроса и ответа», а эксперта попросить только проверить, насколько корректно мы собрали бенчмарк.</li><li>Из продакшена. Если уже есть реальные запросы, их можно сгруппировать в кластеры и передать эксперту для проверки получившихся категорий.</li></ul><h2>Где взять ответы</h2><p>Мы собрали репрезентативный набор вопросов, теперь нужно подготовить ответы. Эталонные ответы должен писать доменный эксперт.</p><p>Важно:</p><ul><li>ответы должны соответствовать актуальной политике компании, содержать правильные суммы и описания процессов;</li><li>если процессы изменились, такие пары нужно обновлять или удалять из бенчмарка, чтобы он оставался актуальным.</li></ul><h2>Какая должна быть оценка для LLM-as-a-Judge</h2><p>Помните спор Шелдона Купера и Стюарта Блума в «Теории большого взрыва»? Шелдон настаивал, что «ошибаться — абсолютное состояние и степени ошибки не бывает». На что Стюарт возразил: «Сказать, что помидор — это овощ, — это немного неверно, а назвать помидор подвесным мостом — очень неверно».</p><p>Так вот, Шелдон был прав.</p><p>Градиентные оценки нам не подходят: ответ считается верным, только если все факты совпадают с эталоном. Совпало 3 из 4 фактов — это так же неприемлемо для бизнеса, как 2 из 4.</p><p>Если ввести градиентную оценку, может получиться, что оценка выросла на 10%, а новых корректных ответов не прибавилось.</p><p>Бинарная система удобнее: группируем ответы, получившие 0, категоризируем ошибки вручную, итеративно исправляем, начиная работу с самой большой группы.</p><p>Оценка LLM-as-a-Judge не должна включать ToF. Тестировать ToF лучше отдельно: без бенчмарка, передавая ответ и правила редакционной политики компании и проверяя совпадение.</p><h2>Как понять, что оценки судьи стабильны и близки к ручной разметке</h2><p>После того как один эксперт дал/проверил ответы на все вопросы бенчмарка, нам понадобится ещё двое. Они должны разметить бенчмарк по нашей шкале (0 или 1) и коротко написать, почему поставили такую оценку. Дальше их объяснениями мы сможем дополнить наш промпт, если это понадобиться.</p><p>Далее считаем модульную разницу их оценок и берём среднее — это человеческая погрешность.</p><p>Наша цель — чтобы LLM-судья на A/A-тестах показывал сопоставимую погрешность.</p><p>Почему A/A-тесты важны: LLM — вероятностная система, нам нужна проверка стабильности. Сегодня мы можем попасть в «коридор» оценок экспертов, а завтра — выйти за его пределы. A/A-тесты показывают, насколько результаты колеблются без реальных изменений.</p><h2>Как написать промпт для LLM-as-a-Judge</h2><p>Внутри промпта явно перечисляем проверяемые факты и просим отвечать строго числом и коротким комментарием. Улучшаем сам промпт и формат вывода, пока качество и стабильность не сравняются с экспертными. Вы можете начать работу с этого варианта промпта и итеративно улучшать его качество:</p><h2>Практические советы напоследок</h2><p><b>№1. Делайте версионирование</b>: фиксируйте версии бенчмарка, эталонов и политик. Процессы в компании могут поменяться и эталонный ответ перестанет является таковым. Когда много данных можно легко запутаться и забыть включает ли себя бенчмарк обновления от такого-то числа.</p><p><b>№2. Считайте стоимость:</b> исходите из того что вы будете 1 раз в день прогонять бенчмарк, считаем математику, ищем вариант модели с таким же качеством, но меньше по стоимости.</p><p><b>№3. Не подкупайте судью</b>: используйте для тестов LLM другого семейства, известно, что LLM-as-a-Judge оценивая сама себя завышает оценки  (например, Llama завышает оценку ответов, которые давала Llama).</p><p><b>№4. Требования к заказчику должны включать бенчмарк</b>, обсуждайте и добивайтесь того чтобы заказчик составлял или хотя бы помогал в составлении бенчмарка. Если есть бенчмарк, то мы можем вывести все остальные требования из него, если есть требования без бенчмарка, считай нет никаких требований.</p><p>На этом всё, надеюсь, что было полезно:)</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему статичные моки убивают тестирование, и что мы с этим сделали</title>
      <link>https://tproger.ru/articles/pochemu-statichnye-moki-ubivayut-testirovanie--i-chto-my-s-etim-sdel</link>
      <comments>https://tproger.ru/articles/pochemu-statichnye-moki-ubivayut-testirovanie--i-chto-my-s-etim-sdel?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-statichnye-moki-ubivayut-testirovanie--i-chto-my-s-etim-sdel</guid>
      <description><![CDATA[<p>Почему статичные моки ломают нагрузочное тестирование. Как ML-генерация сценариев, MLOps-пайплайн и модель швейцарского сыра помогают находить сбои заранее.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-statichnye-moki-ubivayut-testirovanie--i-chto-my-s-etim-sdel">Почему статичные моки убивают тестирование, и что мы с этим сделали</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 11 Mar 2026 05:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этой статье — как мы решили проблему со статичными моками через ML-генерацию тестовых сценариев, про модель швейцарского сыра и какие инструменты использовали.</p><h2>В чём проблема статичных моков</h2><p>Статичный мок — это зафиксированный срез данных, на котором гоняют систему в тестовом окружении. Для простых сервисов хватает, для систем с большим количеством переменных — нет.</p><p>Любой такой срез — это один конкретный сценарий: обычный будний день без аномалий. Удваиваешь нагрузку — получаешь тот же день в двойном объёме, а не новый сценарий. Что будет с данными транспортной системы, когда одновременно закроется станция метро, изменится маршрут нескольких автобусов и в той же зоне начнут продавать Лабубу? Каждый из этих случаев по отдельности некритичен, но если произойдут в один момент — система ляжет, потому что тесты ситуацию не предсказали.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-03-05/dffa019c-30e6-4b81-a104-ccec35d4dbd6.webp" alt="" /></figure><h2>Имитационное моделирование и модель швейцарского сыра</h2><p>Нагрузочный тест отвечает на вопрос «выдержит ли система X запросов в секунду». Имитационное моделирование — на другой: «что случится с архитектурой, если несколько независимых факторов сойдутся в одной точке одновременно». Объяснить логику помогает модель швейцарского сыра: каждый слой защиты системы — кусок сыра с дырками. Одна дырка в одном слое не проблема, следующий слой её закроет, но если дырки в нескольких слоях выстроились в линию — получается сквозное отверстие.</p><p>В системах с большим количеством переменных для такого используют анализ WHAT IF — процесс, когда задаёшь в систему набор условий и смотришь, что произойдёт при разных комбинациях. Условно: что будет, если одновременно вырастет нагрузка или упадёт один из сервисов. Мы перенесли ту же логику в тестирование программных систем.</p><p>В транспортном проекте задача начиналась просто: считать, сколько людей вошло в автобус и вышло. Потом её усложнили — нужно было разделить категории пассажиров, чтобы понять причины пиковой нагрузки в конкретное время. Потом система начала работать в новых районах, и данные в новых были другие, чем в уже известных районах. Нам нужно было  фиксировать и анализировать разницу постоянно, чтобы строить тепловые карты и планировать новые оптимальные маршруты. Это уже не тестирование, это почти эмуляция управления полётами, где маршрут может поменяться за секунды из-за внештатной ситуации.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-03-05/b409202f-4d99-4daa-9b4b-7573a6a55f9a.webp" alt="" /></figure><h2>Как мы собрали данные и построили систему</h2><p>Чтобы покрыть максимум сценариев, выстроили систему из трёх источников данных. Все три источника работают в <b>MLOps-пайплайне:</b></p><ol><li>Постоянный поток данных из реального мира. Наш пайплайн автоматически «дёргает» из продакшена свежие срезы данных и логи, мы специально ищем в проде резкие всплески нагрузки, нетипичное поведение пользователей, чтобы с ними экспериментировать.</li><li>Обезличенные данные. Проблему с персональной информацией решили на уровне архитектуры: система создаёт для каждого пользователя профиль с UUID и привязывает к нему только неперсональные атрибуты — возраст, пол, поведенческие паттерны, но не хранит и не обрабатывает личные данные.</li><li>ML-генерация экстремальных сценариев. ML-модель берёт реальные аномалии из прода и комбинирует их между собой — мы подкидываем ей свои гипотезы и элементы случайности, чтобы получить сценарии, которых в реальных данных ещё не было, но которые теоретически возможны.</li></ol><h2>Какие инструменты мы использовали</h2><p>Весь пайплайн держится на шести инструментах.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-03-05/c0de1892-ca4e-4610-ae36-36b938108b4e.webp" alt="" /></figure><ul><li>Great Expectations описывает правила качества данных в виде обычных тестов. Если входящие данные нарушают хотя бы одно правило, система сигналит до того, как данные попадут в модель. Правила описывает QA — он решает, какие данные считать правильными для системы.</li><li>Evidently AI и NannyML следят за дрейфом — ситуацией, когда реальные данные начинают отличаться от тех, на которых обучалась модель. Инструменты постоянно сравнивают новые данные с эталонными, если ситуация критическая — QA в этот момент запускает переобучение.</li><li>DVC версионирует данные так же, как Git версионирует код: каждое изменение датасета фиксируется, и в любой момент можно вернуться к предыдущей версии или воспроизвести эксперимент.</li><li>MLflow фиксирует эксперименты: какие данные использовались, какие гиперпараметры были выставлены, какой результат получился — мы можем сравнивать запуски между собой и видеть, в какую сторону меняется качество.</li><li>Terraform и Ansible описывают инфраструктуру как код и гарантируют, что dev, staging и prod разворачиваются идентично.</li><li>Airflow управляет всем потоком задач, описывает зависимости между ними, следит за выполнением и фиксирует ошибки.</li></ul><h2>Как сделать также, пошаговый план</h2><p>Это займёт у вас не один спринт, но вот как двигались мы:</p><ol><li>Написали скрипты для проверки качества данных, а не полезли сразу в модель.</li><li>Сложное автоматизировали после простого. Мы не пошли сразу в экстремальные ситуации, сначала обучали модель на простых сценариях.</li><li>QA подключили к архитектуре с самого начала. Он закладывает правила и логику реакций на разные типы данных.</li><li>Observability и reproducibility выстраивали параллельно с основным пайплайном: observability смотрел почему модель повела себя именно так, reproducibility решал проблему.</li><li>И последнее — обновили роль QA. QA обязан участвовать в проектировании архитектуры с самого начала. Это senior-специалист, который заложил в систему правила и логику, как реагировать на разные типы данных.</li></ol><h2>Результат</h2><p>В том же транспортном проекте наша система заранее нашла в архитектуре точку, где четыре независимых фактора могли сойтись и привести к сбою. Мы покрыли её тестами — и когда это событие произошло в реальности, система отработала корректно. После этого заказчик начал использовать ML-модель не только для тестирования, но и для стратегического планирования.</p><p>Модуль генерации данных, который строили под этот проект, перенесли на бенчмарки и тестирование систем на деградацию производительности — сейчас он работает на нескольких проектах параллельно.</p>]]></content:encoded>
    </item>
    <item>
      <title>Первая работа в QA: выбор компании, подготовка с ИИ и 7 красных флагов работодателя</title>
      <link>https://tproger.ru/articles/pervaya-rabota-v-qa--kak-podgotovitsya-k-pervomu-sobesedovaniyu</link>
      <comments>https://tproger.ru/articles/pervaya-rabota-v-qa--kak-podgotovitsya-k-pervomu-sobesedovaniyu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Ольга Андякина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pervaya-rabota-v-qa--kak-podgotovitsya-k-pervomu-sobesedovaniyu</guid>
      <description><![CDATA[<p>Полный гайд по подготовке к собеседованию в QA: выбор компании, подготовка с AI, красные флаги работодателя. Советы от AQA с опытом найма.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pervaya-rabota-v-qa--kak-podgotovitsya-k-pervomu-sobesedovaniyu">Первая работа в QA: выбор компании, подготовка с ИИ и 7 красных флагов работодателя</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Карьера]]></category>
      <category><![CDATA[Собеседование]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 09 Mar 2026 09:10:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Меня зовут Оля, и я AQA в Отелло. В тестировании с 2018 года, а технические собеседования на все QA грейды — от trainee до lead — я провожу с 2021. Когда-то давно, ещё будучи студенткой вуза, я попала в IT-компанию через стажировку. Тогда на одно место в компании претендовали 700 человек, и в итоге работу получили только четверо — я была одной из них. Поэтому я знаю не понаслышке, сколько времени и сил нужно вложить начинающему тестировщику, чтобы получить первую работу.</p><p>Своей статьёй я хочу помочь начинающим специалистам максимально продуктивно подготовиться к первым собеседованиям, не совершая типовых ошибок. Готовьтесь, будет «многобукв», но зато вы узнаете:</p><ul><li>Как выбрать свою первую компанию.</li><li>Красные флаги работодателя на собеседованиях.</li><li>Почему сначала нужно собеседоваться в компании, в которые не хочешь.</li><li>Как подготовиться к собеседованию с помощью AI.</li><li>Почему не стоит приукрашивать опыт, лукавить и читерить на собеседованиях.</li></ul><h2>Как выбрать свою первую компанию</h2><p>Выбор IT-компании — это выбор места, в котором вы будете расти и развиваться, и проектов, которые будут формировать ваше портфолио для будущих работодателей.</p><p>Прежде чем принять офер или вообще пойти на собеседование, внимательно подумайте над следующими вопросами.</p><h2>1. Технологический стек и проекты</h2><p><b>Тип продукта </b></p><p>Вам интересен высоконагруженный бэкенд, современный и технологичный фронтенд, мобильная разработка, данные (Data Science/Analytics), инфраструктура (DevOps) или, может быть, embedded-системы? Без опыта сложно определиться с приоритетным направлением, но бывает так, что предпочтения уже есть.</p><p><b>Масштаб проекта</b></p><p>Работать над маленьким стартапом «с нуля» или развивать большой legacy-проект? У каждого варианта свои плюсы и минусы для опыта.</p><p>Стартап — это самые актуальные технологии, заряженная команда, шанс приложить руку к созданию нового и прямо влиять на продукт. В то же время в стартапах чаще всего нет настроенных процессов и подходов к разработке и тестированию, так что вы рискуете упустить важный этап развития молодого специалиста — знакомство со стандартами индустрии и лучшими практиками разработки ПО. А также это всегда высокий темп работы, и не у каждого найдутся дополнительные силы на изучение дополнительных материалов или технологий.</p><p>Легаси-проект — это проверенные временем технологии, устоявшиеся процессы, опытные коллеги, размеренный темп разработки. Шансы поработать с новыми актуальными технологиями сокращаются значительно, зато появляется возможность разобраться в процессах, перенять опыт коллег.</p><p>Также в IT-рынке встречаются варианты «между». Например, в крупных компаниях запускаются инициативы с духом стартапа — гибкие, экспериментальные, с быстрым циклом обратной связи.</p><p><b>Технологии, которые используются в компании</b></p><p>Соответствуют ли технологии тому, что вы хотите изучать? Конечно, быть в курсе всех трендов современных технологий практически невозможно, но полистать статьи и поизучать доклады с последних конференций на тему должно помочь вам примерно сориентироваться в этом бесконечном лесу технологий.</p><p><b>Open Source</b></p><p>Компания делает вклад в опенсорс-продукты? Это совсем не обязательный пункт, но классный плюс для любой компании. Потому что это говорит о высоком уровне инженерной культуры, а также является классной возможностью для технического роста и расширения кругозора. Поучаствовать в написании библиотеки для тестового фреймворка — это звучит гордо.</p><h2>2. Команда и культура</h2><p><b>Процесс разработки</b></p><p>Какие методологии используются (Agile, Scrum, Kanban, Shape Up, Waterfall)? Как организован процесс: планирование, код-ревью, деплой, тестирование, релизы?</p><ul><li>Старайтесь ориентироваться на компании, пропагандирующие современные подходы к процессам. Например, Waterfall устарел уже как лет 10–15, и все крупные компании давно перешли на Agile и его вариации. Также популярность набирает молодой <a href="https://www.youtube.com/watch?v=pRVe9kWVMKc&amp;themeRefresh=1">Shape Up</a>.</li><li>Попробуйте попасть в проект с <a href="https://habr.com/ru/companies/2gis/articles/894568/">shift-left тестированием</a> — это даст возможность поучаствовать во всех этапах разработки фичи: поучаствовать в планировании задач, потестировать требования, поучаствовать в ручном и автоматизированном тестировании, пострелизной поддержкке.</li><li>Также для развития очень важен процесс код-ревью автотестов: коллеги не только посмотрят на ваш код свежим взглядом и смогут указать, на ошибки, но и поделятся опытом, предлагая улучшения. самостоятельно, без код-ревью очень сложно улучшить качество своего кода, его чистоту.</li></ul><p><b>Инженерная культура</b></p><p>Существуют ли стандарты код-стайла, как устроены автотесты и CI/CD, как работают с техдолгом?</p><ul><li>Стандарты код-стайла должны быть, иначе и речи быть не может про тот самый «чистый код». Они помогают научиться писать читаемый и поддерживаемый код.</li><li>Автотесты должны быть. А ещё должны использоваться все хорошие практики современных тестов, такие как принцип AAA (Arrange, Act, Assert), Page Object, изолированные тесты, не только happy path проверки, интеграция с CI/CD, использование фикстур и их аналогов, атомарность проверок.  А ещё круто будет, если автотесты написаны на актуальных технологиях.</li><li>Автотесты должны быть интегрированы в CI/CD, сборка и деплой автоматизированы, а окружения изолированы. Также большим плюсом будет возможность самостоятельно настраивать джобы (хотя бы для тестирования).</li><li>У QA есть свой техдолг, включающий в себя не только автотесты, но и другие технические улучшения. Техдолг приоритезирован, есть процесс работы с задачами техдолга.</li></ul><p><b>Команда</b></p><p>Постарайтесь пообщаться с вашей будущей командой. Понравились ли они вам? Чувствуется ли общий вайб? Насколько команда опытная?</p><h2>3. Развитие и обучение</h2><p><b>Карьерный рост</b></p><p>Есть ли в компании понятные пути роста? Как часто проходят пересмотры зарплат и грейдов? Помогает ли кто-то, например, лид составлять цели для будущих аттестаций? Наличие опытного наставника рядом, который будет вас направлять и регулярных встреч по пересмотру целей и грейда (например, раз в полгода), может значительно ускорить профессиональное развитие.</p><p><b>Система менторства и онбординга </b></p><p>Как вас будут вводить в проект? Будет ли наставник? Хороший онбординг — признак заботы о сотрудниках и большой зелёный флаг для компании.</p><p><b>Возможности обучения</b></p><p>Проводятся ли внутренние митапы и воркшопы, есть ли доступ к платформам с курсами? Есть ли электронная библиотека? Поощряется ли участие в конференциях? Встречи с коллегами (как внутренние, так и внешние) помогают расширять кругозор, переопыляться знаниями, быть в курсе современных трендов развития индустриии тестирования и не только.</p><h2>4. Репутация и стабильность</h2><p><b>Финансовое состояние компании</b></p><p>Устойчива ли компания? Есть ли у неё инвестиции или стабильная прибыль? Быть всегда на грани потери работы или не получать зарплату месяцами — ситуация не из приятных.</p><p><b>Отзывы</b></p><p>Почитайте отзывы на сайтах вроде HeadHunter, Хабр Карьера, LinkedIn. Однако важно знать, что отзывы часто пишут люди на эмоциях, поэтому ищите общие тенденции, а не отдельные негативные комментарии.  Также спросите знакомых — наверняка кто-то да работал в выбранной компании.</p><p><b>История компании</b></p><p>Как долго она на рынке? Какая у нее репутация среди клиентов и партнёров?</p><h2>5. Условия работы и компенсации</h2><p><b>Зарплата (оклад + бонусы)</b></p><p>Конкурентоспособная ли она на рынке? Прозрачная ли система бонусов (если они есть)? Есть ли индексация зарплаты?</p><p><b>Формат работы</b></p><p>Офис, гибрид или полная удалёнка? Насколько гибкий график? Есть ли возможность работать на полставки?</p><p><b>Оборудование</b></p><p>Предоставит ли вам компания технику для работы? Если да, то какую — MacBook/Windows/Ubuntu, мониторы, гарнитура, мышка? Всё ли необходимое для комфортной работы вы получите или необходимо будет самому докупать технику?</p><p><b>Отпуск и отгулы</b></p><p>Сколько дней оплачиваемого отпуска? Есть ли возможность брать неоплачиваемые отгулы? Как и с кем согласовываются отгулы?</p><p><b>Соцпакет</b></p><p>Есть ли ДМС и питание, бюджет на обучение (конференции, курсы, сертификации), возможности заниматься спортом в офисе или в залах со скидкой от компании. Это очень приятные плюшки, на которые стоит обратить внимание, но не стоит ставить их в приоритет при выборе первой работы.</p><h2>Красные флаги работодателя на собеседовании</h2><p>Если с потенциально интересующими работодателями вы определились, то пришла пора понять, на что нужно обращать внимание на собеседованиях и при общении с HR-ами и командой. Вот топ ред флагов, которые  должны вас заставить сильно задуматься, а подходит ли вам такая компания:</p><ol><li>Вас не слушают, перебивают, обесценивают ваш опыт или задают неуважительные/неуместные вопросы (о личной жизни, планах на детей и т.д.).</li><li>Сотрудник или руководитель открыто критикует бывших коллег, команду, руководство компании или самих себя («У нас тут просто завал, но вы же справитесь?»).</li><li>На прямые вопросы о задачах, обязанностях или проектном онбординге дают размытые или противоречивые ответы. «Разберёшься по ходу» — плохой сигнал.</li><li>Собеседование постоянно переносят, начинают сильно позже, интервьюер не подготовлен (не читал резюме).</li><li>Вам пытаются продать должность, активно жалуясь на слабость других кандидатов, или давят, чтобы вы согласились на условия сразу, «пока место не заняли».</li><li>Прямо говорят о неоплачиваемых переработках или спрашивают про ваше отношение к переработкам (значит, они точно будут), о серой зарплате, просят выполнить тестовое задание, явно похожее на реальную рабочую задачу (особенно объемное и без оплаты).</li><li>Непонятно, сколько всего этапов найма, кто принимает решение, когда ждать обратной связи. Это отражает общие процессы в компании.</li></ol><h2>Как подготовиться к собеседованию с помощью AI</h2><p>ChatGPT, Google Gemini и DeepSeek могут стать вашим личным тренером по подготовке к собеседованиям и помочь на всех этапах, как на практических технических, так и на софт-скильных интервью. Вот как именно:</p><h2>1. Анализ вакансии и вашего резюме</h2><p>AI может:</p><ul><li>проанализировать описание существующих вакансий и ваше резюме, чтобы выделить ключевые навыки, которые стоит упомянуть для конкретной должности;</li><li>подсветить дыры в ваших скиллах;</li><li>исправить орфографические и грамматические ошибки.</li><li>убрать из резюме «воду», лишние подробности, выдержать единую стилистику написания;</li><li>подсказать, как лучше рассказать о слабых и сильных сторонах, структурировать опыт.</li></ul><h2>2. Подготовка списка технических и практических вопросов</h2><p>ИИ может составить список часто задаваемых технических вопросов с ответами на них. Примеры действительно хороших вопросов, которые я получила, сделав один запрос в ChatGPT:</p><ul><li>Как ты приоритизируешь тест-кейсы?</li><li>Что такое эквивалентное разбиение и граничные значения?</li><li>Как ты отлаживаешь упавший автотест?</li><li>Что такое CORS и как он может повлиять на тестирование?</li><li>Что такое Page Object Model и зачем он нужен?</li></ul><p><b>Тренировка ситуационных задач</b></p><p>AI может задавать вам классические вопросы (например, по методу STAR — Ситуация, Задача, Действие, Результат) и давать обратную связь по вашим ответам.</p><p>Вот несколько примеров, сгенерированных ChatGPT:</p><p>Ты находишь баг, но разработчик говорит, что это не баг, а фича. Как поступишь? Цель: проверить коммуникативные навыки, умение аргументировать и работать с документацией.</p><p>У тебя есть 1 день на тестирование новой фичи, но она затрагивает много старого функционала. Что будешь делать? Цель: понять, как кандидат управляет временем и рисками, умеет ли выделять критичное.</p><p>Разработчик просит тебя протестировать задачу, но требований нет. Что будешь делать? Цель: оценить инициативность, умение задавать вопросы, строить тест-кейсы на основе здравого смысла.</p><p><b>Генерация примеров </b></p><p>Поможет придумать убедительные примеры из вашего опыта для подкрепления ответов на часто задаваемые вопросы, если вы затрудняетесь подобрать их сами.</p><h2>3. Подготовка к практическим заданиям</h2><p>AI может помочь решать задачи по программированию, объяснять алгоритмы и даже проводить код-ревью.</p><p>Платформы вроде LeetCode или ChatGPT могут генерировать задачи и подсказывать решения. Вот, например, какие варианты задач я получила по промпту «Сгенерируй 3 задачи на Python для собеседования QA-инженера. Каждая из задач должна решаться не более, чем за 20 минут». Экспериментируйте с промптом, уточняйте его относительно используемых структур данных, сложности алгоритмов, объёмов работ.</p><h2>Задача 1: Проверка палиндрома</h2><p>Условие:</p><p>Напиши функцию is_palindrome(s: str) -&gt; bool, которая проверяет, является ли строка палиндромом. Игнорируй пробелы, регистр и знаки препинания.</p><p>Пример:</p><h2>Задача 2: Поиск дубликатов в списке</h2><p>Условие:</p><p>Напиши функцию has_duplicates(items: list) -&gt; bool, которая возвращает True, если в списке есть хотя бы один дубликат, иначе — False.</p><p>Пример:</p><h3>Задача 3: Валидация пароля</h3><p>Условие:</p><p>Напиши функцию is_valid_password(password: str) -&gt; bool, которая проверяет, что пароль: не короче 8 символов, содержит хотя бы одну заглавную букву, содержит хотя бы одну строчную букву, содержит хотя бы одну цифру.</p><p>Пример:</p><h2>4. Ещё некоторые возможности ИИ</h2><p>AI подскажет, какие вопросы стоит задать рекрутеру на собеседовании, чтобы выглядеть подготовленным и лучше понять, какие условия для работы в компании, как подразумеваются обязанности для данной должности.</p><p>Если собеседование на иностранном языке, AI может помочь потренировать базовые диалоги и проверить грамматику.</p><p>Для самых продвинутых уже разработаны AI-ассистенты, способные имитировать реальное видеоинтервью (например, InterviewAI, MyInterview и HireVue). Если вы уже пользовались такими сервисами, напишите в комментариях — интересно узнать реальный опыт использования.</p><h2>Почему сначала нужно собеседоваться в компании, в которые не хочешь</h2><p>Собеседования в компаниях, где вы не планируете работать, кажутся пустой тратой времени, но на самом деле полезный лайфхак.</p><h2>1. Практика в «боевых» условиях</h2><p>Теория и задачки на LeetCode — это, конечно, хорошо, но они не идут ни в какое сравнение с реальным собеседованием.</p><ul><li>Снятие стресса: первые несколько собеседований после перерыва или в новой роли всегда волнительны. Пройдя их в компаниях, где результат не важен, вы снимете «эффект первого раза» и придёте на желанное собеседование спокойным и уверенным.</li><li>Оттачивание ответов: вы сможете отрепетировать свои рассказы о проектах, достижениях и карьерных целях. Вы увидите реакцию интервьюеров и поймёте, что нужно подкорректировать.</li><li>Тренировка технической части: для IT-специалистов — это отличный способ решить реальные задачи на кодинг/код ревью, и подготовиться к будущим интервью.</li><li>Сбор списка технических вопросов: после нескольких собеседований будет понятно, что следует подтянуть и повторить.</li></ul><h2>2. Изучение рынка и себя</h2><p>Собеседование — это диалог. Вы не только отвечаете на вопросы, но и получаете ценную информацию о компании и состоянии рынка вакансий.</p><ul><li>Узнать свою ценность: вы поймете, сколько вам готовы платить на рынке за ваши навыки и опыт, а не по данным устаревших отчетов по зарплатам.</li><li>Узнать о компании изнутри: вы в роли кандидата можете задать любые, даже самые неудобные вопросы о процессах, корпоративной культуре, недостатках компании.</li><li>Определить свои приоритеты: общаясь с разными компаниями, вы лучше поймете, что для вас действительно важно (технологический стек, размер команды, подход к управлению, бонусы или что-то еще).</li></ul><h2>3. Неожиданные возможности</h2><p>Вы можете приятно удивиться, но, возможно, извне компания кажется скучной, а в процессе общения вы обнаруживаете сверхинтересный проект, классную атмосферу или технологию, которая вас заинтересует.</p><p>Иногда увидев вашу ценность, компания может создать для вас новую, более интересную роль или предложить условия, от которых невозможно отказаться.</p><p>Или даже если вам не подойдёт данная вакансия, вы можете произвести хорошее впечатление на интервьюера (тимлида, HR). Можете добавить его в контакты, и через год он, сменив компанию, может позвать уже на ту самую, вакансию мечты.</p><h2>Этические моменты</h2><ol><li>Если компания или вакансия вызывают у вас явное отторжение и вы точно не заинтересованы в данной работе, то не расходуйте свои силы и время интервьюеров. Скорее всего вы не проявите такого же энтузиазма и рвения, как на собеседовании в интересующую вас компанию. Но если с вакансиями всё тухло и выбора нет, то настраивайтесь и идите на все собесы (иначе как набить руку и получить хоть немного уверенности?).</li><li>Если после оффера вы точно решили отказаться, сделайте это вежливо, быстро и без подробностей. Не стоит врать и тянуть время, заставляя компанию ждать вашего решения.</li><li>Отказываясь, можно сохранить хорошие отношения. Формулировка в стиле: «Большое спасибо за предложение и ваше время! Мне было очень интересно пообщаться с вашей командой, но на данном этапе я принял(а) решение продолжить развитие в несколько ином направлении/принял(а) другое предложение. Буду рад(а) остаться на связи на будущее» — работает идеально.</li></ol><p>Собеседование в «нежелаемых» компаниях — это не обман. Это способ потренироваться, набраться уверенности, лучше понять рынок и свои сильные стороны. А на собеседовании в компании мечты будете меньше нервничать и покажете себя с лучшей стороны!</p><h2>Почему не стоит приукрашивать опыт и читерить на собеседованиях?</h2><p>Потому что риски и последствия вранья почти всегда многократно перевешивают выгоду.</p><h2>1. Интервьюеры всё равно всё видят</h2><p>Когда кандидат на собеседовании пытается читерить – это бросается в глаза и точно не добавляет баллов. В такой ситуации шанс пройти на следующие этапы стремиться к нулю.</p><p><b>Техническое собеседование</b></p><ul><li>Если вы указали язык или технологию, которым не владеете, интервьюер поймёт это после нескольких вопросов «вглубь» или практическому заданию. Все любят честность: простое «не знаю» вызывает куда более приятные эмоции, нежели попытки выдумать что-то на ходу.</li><li>Если вы приукрасили и даже додумали опыт работы в резюме, это может раскрыться в самый неожиданный момент. Например, однажды мы получили резюме кандидата, в опыте работы которого был указан 2GIS, причём было много подробностей, включая список фич, над которыми «работал» кандидат. Так уж вышло, что это резюме попало в руки лиду именно той команды, которая была указана в резюме. Много времени не потребовалось, чтобы убедиться, что человека в 2GIS не работал никогда, ни в указанной команде, ни в какой либо другой.</li><li>Если вы подглядываете в шпаргалки, гуглите или используете AI-ассистентов при ответе на технические вопросы, это видно по задержкам ответов, по изменению тона освещения на видео, по формулировкам и по ответам на более глубокие вопросы.</li><li>Если на лайвкодинге вы гуглите или используете ИИ, это также бросается в глаза. Код появляется внезапно большим куском или пишется «слишком» линейно и запускается с первого раза, а вопросы: «Почему вы делаете вот это действие на 31 строке?» остаются без ответа. Бывали у меня кандидаты, которые копировами всё решение из AI-ассистента со всеми комментариями и пояснениями. Самое забавное, что на прямой вопрос об использовании ИИ они все утверждали, что ничего подобного не было и код этот написан ими собственноручно.</li></ul><p><b>Поведенческое интервью</b></p><p>Вопросы по кейсам требуют живого реального опыта. Придумать правдоподобную историю на ходу очень сложно, и HR легко заметит неуверенность, путаницу в деталях и общие формулировки. Лучше расскажите про реальную ситуацию, даже если она подходит к вопросу чуть хуже, чем выдуманный кейс.</p><h2>2. Уволить могут в любой момент</h2><p>Даже если удалось считерить, пройти все этапы и получить оффер, это не конец истории. Например, компания может проверить резюме, связавшись с прошлыми работодателями.</p><ul><li>Прошлый работодатель может подтвердить или опровергнуть ваши должностные обязанности и сроки работы.</li><li>Некоторые компании официально запрашивают в вузах подтверждение дипломов и степеней.</li><li>Отсутствие опыта в рабочих задачах быстро проявится. И в таком случае есть риск не пройти испытательный срок.</li></ul><h2>3. Ущерб репутации</h2><p>IT-индустрия, особенно внутри конкретных ниш или городов, на удивление тесная. Люди переходят из компании в компанию, и репутация — главный актив.</p><ul><li>Рекрутеры общаются между собой, особенно в небольших локальных компаниях в рамках одного города. Ваше имя может попасть в неформальные чёрные списки, и вас больше не пригласят в эту компанию или даже в целый ряд компаний.</li><li>История о том, как кто-то соврал в резюме, может распространиться через LinkedIn и другие профессиональные сети.</li><li>Ваши пробелы в практике и знаниях могут привести к срыву дедлайнов, багам в проде и увеличению нагрузки на коллег, которым придётся переделывать свою и вашу работу.</li></ul><h2>Что делать вместо читеринга?</h2><p>Вместо того чтобы врать, нужно правильно расставлять акценты:</p><ol><li>Указывайте реальный уровень владения навыком. Вместо «Эксперт в Python» можно написать «Имею коммерческий опыт работы с Python на протяжении 1 года, применял в проектах для…».</li><li>Описывайте свой реальный вклад в проекты. Не «Запустил проект с нуля», а «Участвовал в запуске проекта X, отвечал за разработку модуля Y, что привело к Z».</li><li>Если вы не знаете нужную технологию, но очень хотите работать в компании, честно скажите об этом. Добавьте: «Не работал с фреймворком React профессионально, но прошел курс и изучил основы, готов интенсивно учиться».</li><li>Учитесь! Лучше потратьте месяц на изучение базового уровня нужного навыка, чем приписывайте себе несуществующие знания.</li></ol><p>Доверие, однажды потерянное, трудно вернуть, а честность и искренность вызывают уважение. Гораздо продуктивнее и безопаснее выстраивать карьеру на честности, готовности учиться и адекватной оценке своих сил.</p><h2>Собеседования — это не экзамен, а диалог</h2><p>Не бойтесь тренироваться, задавать неудобные вопросы и отказываться от того, что не подходит. Честность, подготовка и немного стратегии работают лучше любой приукрашенной истории!</p><p>План действий после прочтения статьи:</p><ul><li>Составьте вишлист компаний, исходя из ваших интересов (бэкенд, фронтенд, мобильная разработка, геймдев и т.д.) и ценностей (стартап vs. корпорация).</li><li>Изучите их сайты, блоги, соцсети. Почитайте, о чем они пишут, посмотрите доклады сотрудников с конференций.</li><li>Сходите на митапы, конференции, дни открытых дверей, открытые хакатоны. Так можно пообщаться с сотрудниками в неформальной обстановке, посмотреть офис, почувствовать атмосферу.</li><li>Спросите у знакомых, что они знают о компаниях из вашего списка. Самый честный фидбек часто получают именно так.</li><li>Задавайте больше вопросов на собеседовании. Это диалог, где вы тоже интервьюируете компанию.</li></ul><p>Выбирайте не просто «компанию», а проект, технологию и команду, глядя на которые, вы просыпаетесь с желанием работать. Уверена, у вас всё получится! Удачи!</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft назначила ответственного за качество после падений Azure и поломок Windows из-за ИИ</title>
      <link>https://tproger.ru/news/microsoft-naznachila-otvetstvennogo-za-kachestvo-posle-padenij-azu</link>
      <comments>https://tproger.ru/news/microsoft-naznachila-otvetstvennogo-za-kachestvo-posle-padenij-azu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/microsoft-naznachila-otvetstvennogo-za-kachestvo-posle-padenij-azu</guid>
      <description><![CDATA[<p>Microsoft назначила ответственного за качество после сбоев Azure и проблемных обновлений Windows на фоне активного внедрения ИИ
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/microsoft-naznachila-otvetstvennogo-za-kachestvo-posle-padenij-azu">Microsoft назначила ответственного за качество после падений Azure и поломок Windows из-за ИИ</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 09 Feb 2026 02:23:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>Microsoft <a href="https://www.cnbc.com/2026/02/04/microsoft-brings-back-hayete-gallot-to-run-security-new-role-for-bell.html">объявила</a> о кадровых перестановках на фоне серии сбоев в Azure и проблемных обновлений Windows.</p><p>Исполнительный вице-президент по безопасности <b>Чарли Белл</b> переходит в новую роль — индивидуального инженера, который будет заниматься «качеством инженерных процессов».</p><p>О решении сообщил глава Microsoft <b>Сатья Наделла</b>, коротко отметив, что Белл сосредоточится на инженерном качестве и будет работать в связке с другими руководителями.</p><h2>Что произошло</h2><p>В январе 2026 года Microsoft дважды выпускала внеплановые патчи для Windows после того, как очередные обновления нарушили работу системы. Пользователи столкнулись с проблемами при выключении ПК, сбоями загрузки и некорректной работой OneDrive.</p><p>Параллельно в начале февраля произошел крупный сбой в <b>Azure</b>, затронувший виртуальные машины и сервисы идентификации в нескольких регионах.</p><h2>Почему это важно</h2><p>Формально Microsoft запускает инициативу Quality Excellence Initiative, но Белл не получает организационного контроля над продуктами или командами. Он будет выступать в качестве “партнера” в сотрудничестве с другими руководителями. То есть никакого прямого управления изменениями не намечается.</p><p>Стоит отметить, что все это происходит спустя почти 12 лет после того, как Microsoft отказалась от выделенных команд QA и SDET, переложив тестирование на самих разработчиков.</p><p>С тех пор компания регулярно сталкивается с масштабными инцидентами — от уязвимостей в Exchange и взломов корпоративной инфраструктуры до проблемных релизов Windows и перебоев в облаке.</p><h2>Контекст с ИИ</h2><p>Назначение совпало с активным внедрением ИИ-инструментов в разработку. Наделла ранее заявлял, что до 30% кода в Microsoft уже пишется с помощью ИИ.</p><p>При этом независимые исследования показывают рост дублирования кода и снижение реальной продуктивности разработчиков при активном использовании автогенерации.</p><p>На этом фоне новая роль Белла выглядит попыткой усилить контроль качества, не меняя саму модель разработки и скорость выпуска продуктов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Управление контекстом и структурой: фундаментальные механизмы зрелой AI-разработки</title>
      <link>https://tproger.ru/articles/upravlenie-kontekstom-i-strukturoj--fundamentalnye-mehanizmy-zreloj-ai-razrabotki</link>
      <comments>https://tproger.ru/articles/upravlenie-kontekstom-i-strukturoj--fundamentalnye-mehanizmy-zreloj-ai-razrabotki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Востриков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/upravlenie-kontekstom-i-strukturoj--fundamentalnye-mehanizmy-zreloj-ai-razrabotki</guid>
      <description><![CDATA[<p>Сергей Востриков, руководитель направления Маркетплейс и интеграции в Битрикс24, про фундаментальные механизмы зрелой AI-разработки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/upravlenie-kontekstom-i-strukturoj--fundamentalnye-mehanizmy-zreloj-ai-razrabotki">Управление контекстом и структурой: фундаментальные механизмы зрелой AI-разработки</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 10 Dec 2025 12:40:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Меня зовут Сергей Востриков, я руковожу направлением Маркет и интеграций в Битрикс. Моя команда развивает решения для разработчиков тиражных решений и индивидуальных кастомизаций. Сегодня я хочу рассказать о сдвиге, который уже произошёл внутри разработки — о переходе от случайных удачных генераций кода к устойчивой работе с моделями как с полноправными участниками процесса.</p><p>AI сегодня умеют куда больше, чем просто выдавать куски кода. Они планируют действия, разбивают задачу на шаги, держат в голове текущий контекст и предлагают рабочие архитектурные решения. По некоторым навыкам это уже разработчик уровня middle-plus: хорошо знает библиотеки, понимает паттерны и уверенно пишет рабочий функционал.</p><p>Из-за этого кажется, что AI можно использовать как универсальный инструмент. Написал запрос — получил приложение. На практике всё работает иначе. AI-агент видит только то, что попало в его окно внимания, и опирается на переданный контекст. Он не читает проект целиком и не «помнит» всё, что происходило раньше, поэтому качество результата напрямую зависит от формулировки задачи и структуры входных данных.</p><p>При этом AI-агент закрывает сразу несколько ролей. Он пишет код, проверяет ошибки, комментирует архитектуру, обновляет документацию. По сути, это коллега, который подключён к проекту и готов быстро выполнить часть работы. Но даже ему нужны правила: спецификации, чёткие требования и понятный процесс. Если их нет — получается разовый удачный ответ, который не повторяется и не масштабируется.</p><p>Поэтому главная задача сейчас — научиться работать с AI как с частью команды.</p><h2>Вайбкодинг или «детская» разработка</h2><p>Вайбкодинг напоминает самый ранний опыт работы с конструктором, когда ты ещё ребёнок. В детстве мы собирали модели по интуиции, не думая о схеме и прочности. Главное — видеть результат здесь и сейчас. Вайбкодинг работает по тому же принципу. Формулируешь задачу одной фразой и быстро получаешь работающий фрагмент — игру, форму, обработчик данных или небольшой сервис. Модели уверенно закрывают технические пробелы, подбирают библиотеки, расставляют файлы и связывают их между собой. Достаточно объяснить, что должно происходить на экране и как реагировать на действия пользователя.</p><p>Такой режим обеспечивает ощутимую скорость. Можно за вечер собрать MVP, проверить гипотезу, показать прототип команде или клиенту. В задачах с коротким циклом такой подход работает особенно хорошо. <br /></p><p>Но этот подход имеет ряд естественных ограничений — и именно они делают вайбкодинг «детским» уровнем разработки.</p><p><b>Во-первых</b>, результат не формирует управляемую структуру. Код получается как готовая игрушка: он работает в момент создания, но не раскрывает внутреннюю логику.</p><p><b>Во-вторых</b>, изменения превращаются в случайный процесс. Любая правка затрагивает соседние части, а повторная генерация изменяет ранее рабочий фрагмент.</p><p><b>В-третьих</b>, проект не удерживает форму со временем. У модели нет долговременной памяти, поэтому эволюция решения останавливается сразу после первых успехов.</p><p><b>И, наконец,</b> внутренняя часть остаётся непрозрачной. Структуру сложно прочитать, документация не появляется, а поведение описано только в самом промпте.</p><h2>AI-ассистированная или «взрослая» разработка</h2><p>Когда работа выходит за пределы разовых прототипов, AI-агенты требуют другой организации. Им нужна фиксированная логика проекта, понятные правила и стабильная опора на спецификации. В этом режиме AI действует как участник команды: пишет код осмысленно, сверяет результат, учитывает ограничения и поддерживает структуру.</p><p>Чтобы такой процесс держался, нужна база — набор практик, на которых стоит взрослая разработка с AI-агентами. Далее рассмотрим три фундаментальных опоры, которые формируют этот режим работы.</p><h3>Столп №1. SDD — разработка через спецификации</h3><p>Когда AI-агент работает в проекте не один раз, а системно, ему необходима опора. Ему нужно понимать, какие элементы уже существуют, что требуется добавить, какие связи нельзя нарушать и какое поведение считается корректным. Такое основание создаётся заранее и становится центром всего процесса. На этом и строится подход SDD (Specification-Driven Development)  — разработка, движущаяся от спецификаций к коду.</p><h4>1. Техническое задание как точка входа</h4><p>Системная работа начинается с фиксации требований. Одного промпта недостаточно, поэтому сначала формируется короткое ТЗ — что должно происходить, какие данные участвуют в сценариях, как выглядит интерфейс и какие ограничения важны. Такой документ задаёт рамку будущего решения и снижает объём домысливания для модели.<br /></p><h4>2. Формирование tech_spec.md</h4><p>Следующий шаг — генерация основного файла проекта. В tech_spec.md (название файлы вы можете придумать сами, это лишь пример) описывается структура приложения, связи между модулями, формат данных, API и список допущений. Этот файл становится опорой для всех последующих действий. Он не остаётся статичным: по мере развития проекта в него добавляются изменения, чтобы AI-агент работал в актуальном контексте.<br /></p><h4>3. Код как производный слой</h4><p>Только после фиксации структуры генерируется код. AI-агент опирается на спецификацию и не принимает решения «вслепую». Это даёт более-менее предсказуемый результат. При необходимости код можно собрать повторно, поскольку AI-агент будет опираться на ту же спецификацию, что и раньше.</p><h3>Столп №2. Контекст и декомпозиция</h3><p>Модель работает внутри ограниченного окна внимания: она использует только те данные, которые получилa в текущем запросе. Поэтому проект удерживается не объёмом переданной информации, а правильной последовательностью шагов. Чтобы работа шла предсказуемо, задача раскладывается на части, и каждая часть сопровождается отдельным набором вводных.</p><h4>1. Дробление задачи на модули</h4><p>Проект разбивается на небольшие фрагменты — отдельные компоненты, сценарии или функции. Такой формат снижает нагрузку на AI-агента и позволяет ему точнее интерпретировать требования.</p><h4>2. Контекст для каждого шага</h4><p>Перед каждым действием AI-агент получает только тот объём информации, который относится к текущему фрагменту. Вводные обновляются по мере движения, чтобы агент не терял опорные элементы.</p><h4>3. Поддержание документации</h4><p>Все изменения надо отражать в спецификациях и вспомогательных файлах. Документация должна развиваться вместе с задачей и служить дополнительным источником контекста.</p><h4>4. Связь со структурой проекта</h4><p>Каждый новый шаг сверяется со спецификацией: AI-агент должен действовать в рамках зафиксированной архитектуры и корректно расширять функционал. Это устраняет эффект случайных решений и удерживает проект в стабильном состоянии.</p><p><i>Согласитесь, это всё очень напоминает нормальную работу с коллегами по проекту? Не переусложнять задачу, объяснять важные нюансы подробно, фиксировать всё в технической документации, верно?</i></p><h3>Столп №3. Feedback loop: код, который контролирует код</h3><p>Когда AI-агент участвует в развитии проекта, ему нужно не только генерировать файлы, но и проверять собственные решения. Такой режим формирует обратную связь, в которой каждый шаг проходит через последовательный цикл действий. AI создаёт код, пишет тесты, обновляет документацию, запускает получившийся результат и анализирует поведение. Если возникают ошибки, они исправляются в том же цикле. Процесс повторяется до тех пор, пока решение не придёт в устойчивое состояние.</p><h4>1. Генерация и тестирование в одном контуре</h4><p>AI-агент пишет функционал и сразу формирует проверочные сценарии. Тесты становятся опорой: они фиксируют ожидаемое поведение и позволяют отслеживать изменения при дальнейшей работе.</p><h4>2. Автоматический запуск и анализ</h4><p>После генерации запускается выполнение тестов. Ошибки и некорректные состояния фиксируются, и AI-агент получает возможность сразу их разобрать.</p><h4>3. Исправление и уточнение поведения</h4><p>Иногда тестов мало и требуется протестировать полноценный функционал. Тогда AI-агент самостоятельно запускает код на выполнение, разбирает логи и корректирует код по фактическим результатам. Исправления отражаются в спецификации, чтобы обновлённая логика стала частью общей структуры проекта. Это позволяет двигаться дальше, отталкиваясь от актуальной версии, не теряя связи между кодом, тестами и описанием поведения.</p><h4>4. Контроль целостности решения</h4><p>Такой цикл создаёт механизмы самопроверки. Код развивается поступательно, без случайных отклонений и дрейфа структуры. AI-агент работает в одном контуре с проверками, поэтому качество не держится на одиночных успешных генерациях, а закрепляется в процессе.</p><h2>AI-агент — не просто генератор кода</h2><p>Не всегда очевидна разница между понятиями “AI-модель” и “AI-агент”. Фактически, разница в том, что AI-агент - это самостоятельно действующая сущность, которая использует AI-модель (или даже несколько разных) для рассуждений, принятия решений и генерации ответов на вопросы. Но помимо рассуждений, AI-агент умеет использовать инструменты для выполнения каких-то действий, потому что работа над проектом  требует способности работать с файлами, запускать код, анализировать результат и поддерживать структуру на каждом шаге.</p><p>AI-агент работает в окружении, близком к рабочей среде разработчика. Он получает доступ к файловой системе проекта, читает код отдельных модулей, сравнивает версии файлов, создаёт новые директории, правит существующий код и т.д.. При необходимости запускает приложения в тестовом режиме, собирает вывод консоли, анализирует логи и отслеживает расхождения между ожидаемым и фактическим поведением.</p><p>В процессе решения задач агент использует готовые инструменты: MCP-серверы, CLI-утилиты и другой вспомогательный функционал разработчика, которые доступны в среде. Он способен формировать запросы к внешним сервисам, подбирать правильные параметры, интерпретировать ответы и использовать результаты в последующих шагах.</p><p>Техническая цепочка работы строится последовательно. Агент принимает постановку, извлекает контекст из спецификаций, корректирует проектную структуру, пишет код, добавляет проверки и запускает получившийся результат. Если возникает ошибка, он фиксирует место сбоя, сравнивает текущее состояние с описанным в техспеке, корректирует фрагмент и повторно выполняет сценарий. Такой цикл позволяет двигаться поступательно и не терять связь между архитектурой и реализацией.</p><p><b>Агент выполняет рутинную инженерную работу, а человек делает ревью, принимает архитектурные решения и отвечает за итоговое состояние системы. </b></p><h2>Почему важно вырасти из вайбкодинга</h2><h3>1. Скорость даёт ложное чувство достаточности</h3><p>Первый опыт с моделями создаёт ощущение, что быстрых генераций хватит на весь проект. Вайбкодинг действительно даёт быстрый эффект: приложение собирается сразу, и кажется, что дальнейшая работа пойдёт тем же темпом. На практике этот режим ограничивается размером задачи. Как только появляются зависимости, дополнительные файлы и необходимость поддерживать логику, одноразовые генерации перестают держать проект в стабильном состоянии.</p><h3>2. Рынок уже перешёл к более зрелой модели разработки</h3><p>В крупных решениях уже заметную часть кода генерируют агенты. Есть жизнеспособные проекты, где весь код целиком был сгенерирован AI-агентами. Такие подходы перестали быть экспериментами — это текущая инженерная практика, которую компании используют в продакшене.</p><h3>3. Работа с моделями требует процесса, а не набора удачных промптов</h3><p>AI-агенты способны выполнять большой объём действий, однако им нужны правила: спецификации, контекст и последовательность шагов. Без этого решение рассыпается. Когда эти элементы собраны, AI работает как член команды — поддерживает структуру проекта, анализирует поведение, удерживает логику и помогает двигаться без резких просадок в качестве. Акцент в разработке смещается в сторону планирования и подготовки знаний, и правильного цикла тестирования.</p><h2>Наш опыт</h2><p>Я не могу рассказывать о том, как AI используется в разработке самого Битрикс24, но с удовольствием поделюсь результатами команд, занятых развитием наших инструментов разработки (SDK, UI Kit, прочих boilerplates) и наших собственных интеграций, которые мы не включаем в состав продукта по умолчанию, а размещаем в качестве решений в нашем Маркетплейс.</p><p>Могу сказать, что с августа практически на 100% релизы нашего официального B24PHPSDK состоят из кода, сгенерированного AI-агентами. Как оказалось, SDK уже был готов к этому за счет того самого Feedback loop, изначально заложенного в проект библиотеки. Там уже была построенная система юнит-текстов и интеграционных тестов, которая позволяет не разваливать существующий функционал при обновлениях. Также существовала техническая спецификация для контрибьюторов. Всё, что нам потребовалось — это слегка дополнить спецификации для AI-агента, чтобы он глубже «понимал» архитектуру библиотеки.</p><p>Те же принципы мы стали изначально закладывать в SDK для Python, чтобы в дальнейшем оперативно наращивать покрытие методов REST API с помощью AI-агентов. Человек закладывает архитектуру, ИИ-агенты быстро наращивают «мясо» вокруг этого.</p><p>Для команды, которая занимается разработкой различного рода интеграций в виде приложений для нашего Маркетплейса, включение AI-агентов потребовало более серьезных изменений.</p><p>Мы начали с того, что пересмотрели архитектуру и даже технологический стек, чтобы сделать их более удобными для дальнейшей работы с AI-агентами. Это заняло довольно много времени само по себе, поскольку в процессе мы проводили эксперименты с генерацией кода приложений. Проектирование системных требований и архитектуры мы тоже делали с участием AI в качестве собеседника и консультанта.</p><p>В итоге мы пришли к некоторому внутреннему шаблону приложения, готовому к дальнейшей разработке с помощью AI-агентов. И на базе этого уже разработали очередное приложение, которое готовим сейчас к публикации в Маркетплейс. На секундочку, 100% кода было сгенерировано AI-агентом. Все новые приложения мы планируем создавать тем же образом, чтобы повысить эффективность команды. Разработчики становятся тимлидами, которые курируют разработку проекта, помогают AI-агентам оставаться в нужным рамках и контролируют результат.</p><p>Получив, таким образом, proof of concept, мы решили помочь всем остальным разработчикам, которые занимаются созданием индивидуальных и тиражных решений на REST API Битрикс24.</p><p><b>Теперь вы тоже можете начать разработку с помощью AI-агентов используя готовый стартер <a href="https://github.com/bitrix-tools/b24-ai-starter">https://github.com/bitrix-tools/b24-ai-starter</a>.</b></p><p>Он представляет собой универсальную основу с готовым фронтом на официальном UI Kit, и тремя вариантами бэка на PHP, Python и NodeJS. А кроме этого, он включает в себя «базу знаний» в виде набора инструкций для AI-агентов, которые помогут модели лучше понять особенности реализации проекта, познакомят с особенностями Битрикс24 (как регистрировать встройки, как добавлять своего CRM-робота и т.д.).</p><p>Мы уже протестировали этот стартер в рамках AI-хакатона, участники которого должны были создать прототип приложения не занимаясь «ручным» программированием, а генерируя код с помощью AI-агента. По результатам мероприятия мы улучшили стартер и теперь будем развивать его вместе с коммьюнити.</p><p><b>В заключении могу только сказать, что реальность программирования изменилась. AI-ассистированная разработка всё чаще становится частью наших рабочих процессов. И те из нас, кто раньше остальных начнут пользоваться этими преимуществами, очевидно, сделают свою работу более эффективной в сравнении с конкурентами.</b></p>]]></content:encoded>
    </item>
    <item>
      <title>Почему важно использовать настоящие GSM-IP, а не эмуляции или VPN-заменители</title>
      <link>https://tproger.ru/articles/pochemu-vazhno-ispolzovat-nastoyashhie-gsm-ip--a-ne-emulyacii-ili-vpn-zameniteli</link>
      <comments>https://tproger.ru/articles/pochemu-vazhno-ispolzovat-nastoyashhie-gsm-ip--a-ne-emulyacii-ili-vpn-zameniteli?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Неопознанный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-vazhno-ispolzovat-nastoyashhie-gsm-ip--a-ne-emulyacii-ili-vpn-zameniteli</guid>
      <description><![CDATA[<p>Практические чек-листы, фреймворки и кейсы для специалистов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-vazhno-ispolzovat-nastoyashhie-gsm-ip--a-ne-emulyacii-ili-vpn-zameniteli">Почему важно использовать настоящие GSM-IP, а не эмуляции или VPN-заменители</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 25 Nov 2025 12:10:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Полное экспертное руководство по тому, почему реальные GSM-IP шлюзы жизненно важны в современных коммуникациях: безопасность, легитимность, качество связи и практические стратегии внедрения. Практические чек-листы, фреймворки и кейсы для специалистов.</p><h2>Введение</h2><p>Мы живём в эпоху, когда мобильная связь стала критически важной инфраструктурой для бизнеса, безопасности и обслуживания клиентов. Современные проекты требуют интеграции SMS, голосовых вызовов и данных с корпоративными системами, а также удалённого управления устройствами. В этой статье мы подробно объясним, почему использование настоящих GSM-IP шлюзов предпочтительнее эмуляций, программных решений и VPN-заменителей. Вы узнаете технические, юридические и операционные аргументы, получите практические рекомендации по выбору и внедрению реальных GSM-IP решений, а также реалистичные чек-листы и готовые фреймворки для оценки поставщиков. Этот материал предназначен для инженеров, IT-директоров, руководителей проектов и архитекторов коммуникационных решений.</p><h2>Основы: фундаментальные концепции</h2><h2>Что такое GSM-IP?</h2><p>GSM-IP — это интеграция мобильной сети GSM с сетями передачи данных по протоколу IP. По сути, это устройство или система, которая подключает реальные SIM-карты в аппаратных слотах к IP-инфраструктуре: SIP, RTP, SMPP и пр. Шлюз принимает и передаёт голос, SMS и данные, используя мобильный оператор как транзитный канал.</p><h2>Отличие от эмуляций и VPN-заменителей</h2><p>Эмуляция GSM — это попытка воспроизвести поведение мобильной сети программно, без использования реальных операторских каналов. VPN-заменители предлагают туннелирование трафика через IP, маскируя источник, но не обеспечивая реальной мобильной идентичности SIM и IMSI. Ключевое различие: в реальных GSM-IP используются настоящие физические SIM и операторские ресурсы, тогда как эмуляции и VPN манипулируют сетевыми уровнями без участия мобильного оператора.</p><h2>Ключевые термины</h2><ul><li>SIM — модуль идентификации абонента, содержащий IMSI и ключи аутентификации.</li><li>IMSI — уникальный идентификатор абонента в мобильной сети.</li><li>SMPP — протокол для передачи SMS между системами.</li><li>SIP — протокол сигнализации для установки голосовых соединений в IP-сетях.</li><li>HLR/HSS — базы подписчиков в сетях GSM/UMTS/LTE.</li></ul><h2>Глубокое погружение: продвинутые аспекты</h2><h2>Аутентификация и безопасность на уровне SIM</h2><p>Реальная SIM обеспечивает аппаратную аутентификацию в сети оператора посредством секретных ключей. Это означает, что наличие SIM гарантирует, что соединение прошло проверку у оператора, и вызовы или SMS идут через законный канал. Эмуляторы не имеют доступа к таким аппаратным секретам, что делает их уязвимыми к блокировке и манипуляциям со стороны операторов.</p><h2>Качество связи и прогноз латентности</h2><p>Прямое использование GSM-каналов обеспечивает предсказуемое качество: задержки, джиттер и потеря пакетов соответствуют мобильной сети. Эмуляции и VPN могут добавлять дополнительную латентность и непредсказуемые скачки качества из-за маршрутизации в публичных IP-сетях, что критично для голосовых сервисов и низколатентных SMS-коммуникаций.</p><h2>Совместимость с IMS/VoLTE</h2><p>С ростом LTE и VoLTE важна совместимость с IMS-инфраструктурой оператора. Настоящие GSM-IP шлюзы обеспечивают корректную обработку SIP и CSFB, поддерживают голос поверх LTE и корректно работают с IMS-базовой сигнатурой. Эмуляторы часто несовместимы или обходят эти механизмы, что приводит к падениям вызовов и ошибкам рутизации.</p><h2>Юридические и регуляторные требования</h2><p>Многие юрисдикции требуют прозрачности источника и маршрутизации телекоммуникаций. Использование реальных SIM гарантирует, что трафик проходит через зарегистрированные каналы оператора, что облегчает соответствие законам и уполномоченным запросам. Эмуляции и VPN-замены создают риски нарушения законов о хранении данных, прослушивании и противодействии мошенничеству.</p><h2>Практический раздел 1: Выбор архитектуры GSM-IP</h2><h2>Теория: варианты архитектуры</h2><p>Существует несколько базовых архитектур: локальные аппаратные шлюзы с физическими SIM, распределённые облачные точки с удалёнными SIM-банками (физическими или eSIM), гибридные модели, и решения с поддержкой IMS. Каждый подход имеет свои преимущества по масштабируемости, управлению и стоимости.</p><h2>Практика: шаги выбора</h2><ol><li>Определите требования по объёму трафика и SLA.</li><li>Оцените юрисдикционные ограничения: местное размещение SIM, регистрация абонентов.</li><li>Решите, нужен ли вам поддержка VoLTE / SMSC / MMS.</li><li>Оцените риски безопасности и требования шифрования.</li><li>Сравните TCO для аппаратных и облачных решений.</li></ol><h2>Пример</h2><p>Компания X требовала массовой рассылки SMS с высоким уровнем доставки. Мы выбрали локальные GSM-IP шлюзы с физическими SIM у трёх операторов для разнооператорного покрытия и отказоустойчивости. Это дало доставку 98.7% в первой волне и сократило жалобы клиентов на спам.</p><h2>Чек-лист выбора</h2><ul><li>Поддержка физических SIM и eSIM.</li><li>Совместимость с вашими SIP/SMPP системами.</li><li>Возможность локальной установки по юрисдикции.</li><li>Мониторинг качества и SLA от поставщика.</li><li>План аварийного переключения на резервные каналы.</li></ul><h2>Практический раздел 2: Внедрение и интеграция GSM-IP</h2><h2>Теория: ключевые интеграционные точки</h2><p>Интеграция подразумевает соединение GSM-IP шлюза с вашими back-end системами через SIP для голоса и SMPP/HTTP для SMS, а также обеспечение аутентификации, шифрования и логирования. Необходимо также предусмотреть мониторинг на уровне сигнала, качества и использования SIM.</p><h2>Практика: пошаговая инструкция внедрения</h2><ol><li>Подготовка инфраструктуры: выделите VLAN и брандмауэрные правила для GSM-IP.</li><li>Прокладка физического подключения: Ethernet, питание и защита от сбоев.</li><li>Установка и конфигурация шлюза: настройка SIP-профилей и SMPP-соединений.</li><li>Встраивание в биллинг и CRM: реалтайм-метрики и отчёты.</li><li>Тестирование через пилотную зону: стресс-тесты трафика и сценариев отказа.</li></ol><h2>Шаблон конфигурации</h2><p>Мы рекомендуем следующую минимальную конфигурацию: VLAN 10 для управления, VLAN 20 для медийного RTP, IPSec туннель для управления, SMPP соединение с учётом аутентификации по IP и логирование на удалённый SIEM. Настроить автоматическое переключение на резервного оператора при наличии падения RTT выше 300 мс в течение 60 секунд.</p><h2>Чек-лист внедрения</h2><ul><li>Изолированные сети для сигнального и медийного трафика.</li><li>Мониторинг качества: MOS/RTT/RTP loss.</li><li>Логи SMPP и SIP в единой системе агрегации.</li><li>Резервирование питания (UPS) и сетевых путей.</li><li>Процедуры обновления прошивки с откатом.</li></ul><h2>Практический раздел 3: Операционная безопасность и управление рисками</h2><h2>Теория: угрозы и модели риска</h2><p>Основные угрозы для GSM-IP систем включают незаконное использование SIM, SIM-cloning (при наличии уязвимости), кражу SIM, атаки на API шлюза, DDoS на SIP и компрометацию учетных данных SMPP. Управление рисками подразумевает защиту на нескольких уровнях: физическая, сетевого периметра, аутентификация и внутренняя сегментация.</p><h2>Практика: стратегия безопасности</h2><ol><li>Физическая защита SIM: использовать защищенные SIM-кассеты и журналирование доступа.</li><li>Ограничение доступа: RBAC для управления шлюзом и ключами.</li><li>Защита сетевого уровня: IPSec/SSL для SIP, белые списки IP для SMPP.</li><li>Мониторинг аномалий: частые непарные вызовы, всплески отправки SMS со SIM.</li><li>Процедуры инцидент-реакции: быстрое блокирование SIM у оператора.</li></ol><h2>Примеры практических правил</h2><p>Ограничьте ежедневный лимит SMS на одну SIM до значения, соответствующего нормальному пользовательскому поведению. Внедрите автоматическое временное замораживание SIM при превышении порога. Используйте 2FA и HSM для хранения ключей доступа к шлюзу.</p><h2>Контрольный чек-лист безопасности</h2><ul><li>Физический учёт SIM и аудит доступа.</li><li>Автотриггеры на аномалии трафика.</li><li>Шифрование конфигураций и секретов.</li><li>Планы восстановления и резервирования.</li><li>Тестирование на проникновение — ежегодно.</li></ul><h2>Практический раздел 4: Оптимизация и масштабирование</h2><h2>Теория: горизонтальное vs вертикальное масштабирование</h2><p>Горизонтальное масштабирование добавляет больше физических шлюзов и SIM-баков, вертикальное — увеличивает мощность и пропускную способность отдельных устройств. Каждый подход имеет ограничения: количество одновременных голосовых каналов на SIM, ограничения SMPP-сессий у оператора, и инфраструктурные ограничения вашей сети.</p><h2>Практика: план масштабирования</h2><ol><li>Оцените пиковые нагрузки и определите порог масштабирования.</li><li>Разработайте архитектуру с автоматическим добавлением шлюзов и балансировкой SIP/SMPP трафика.</li><li>Распределяйте SIM по операторам и географии для равномерного распределения риска.</li><li>Используйте контейнеризированные сервисы для управляемых компонентов (SMPP gateway, monit сервисы).</li></ol><h2>Методы оптимизации</h2><p>Агрегация SMPP-сессий, кэширование маршрутов, использование предиктивного алгоритма распределения запросов между SIM на основе исторической нагрузки и событий. Внедрите throttling и очереди для управления всплесками.</p><h2>Шаблон фреймворка масштабирования</h2><ol><li>Мониторинг: метрики использования SIM, очереди SMPP, MOS.</li><li>Триггеры: порог использования 70% ведёт к автоматической активации резервного шлюза.</li><li>Автоматизация: Ansible/Terraform для развёртывания новых узлов.</li><li>Отчётность: ежедневные отчёты по доставке и качеству.</li></ol><h2>Типичные ошибки: что НЕ нужно делать</h2><p>Мы часто видим повторяющиеся ошибки в проектах:</p><ul><li>Переоценка возможностей эмуляции: многие команды полагают, что программный эмулятор заменит настоящую SIM. Это приводит к проблемам с доставкой и блокировками.</li><li>Недооценка регуляторных требований: размещение SIM в другой юрисдикции без регистрации может привести к запрету услуг и штрафам.</li><li>Отсутствие физической защиты SIM: неучёт физического доступа и отсутствие учёта приводит к кражам и несанкционированному использованию.</li><li>Игнорирование мониторинга качества: отсутствие MOS, RTT и логов приводит к тому, что проблемы ищут слишком поздно.</li><li>Слабая интеграция с операторами: отсутствие официальных каналов и договоров приводит к нестабильной работе и неожиданным блокировкам.</li></ul><p>Чего не следует делать: использовать общедоступные VPN для маскировки источника мобильного трафика, применять массовое клонирование SIM в масштабных проектах, игнорировать законность обработки персональных данных и передачу метаданных.</p><h2>Инструменты и ресурсы</h2><h2>Аппаратные и программные решения</h2><ul><li>Аппаратные GSM-шлюзы от проверенных производителей с поддержкой SIP/SMPP и управлением SIM-банками.</li><li>Платформы управления SIM (SIM management platforms) для инвентаризации и контроля использования.</li><li>SMPP gateway приложения и open-source SIP PBX для интеграции.</li><li>SIEM и мониторинговые решения (Prometheus/Grafana) для метрик качества.</li></ul><h2>Дополнительные ресурсы</h2><p>Документы операторов по интеграции SMPP/SIP, регуляторные гайды по хранению телеком-данных, отраслевые отчёты по защите инфраструктуры связи. Рекомендуем изучать white papers по IMS и VoLTE, актуальные стандарты 3GPP и публикации по безопасности SIM и протоколов мобильной связи.</p><h2>Кейсы и результаты: реальные примеры применения</h2><h2>Кейс 1: Финтех-компания и гарантия доставки OTP</h2><p>Проблема: Финтех-компания испытывала низкую доставку одноразовых паролей (OTP) при массовых рассылках через виртуальные SMS-сервисы. Решение: Переход на собственную сеть GSM-IP с физическими SIM и распределение по трём операторам. Результат: уровень доставки OTP вырос до 99.3%, среднее время доставки снизилось вдвое, количество отказов клиентов уменьшилось на 84%.</p><h2>Кейс 2: Служба охраны и голосовые оповещения</h2><p>Проблема: Служба охраны использовала VoIP через VPN для аварийных оповещений, но при пиковых нагрузках голосовые каналы падали. Решение: Развёрнуто GSM-IP решение для критических исходящих оповещений, с локальным резервированием силовых каналов и отдельными SIM у двух разных операторов. Результат: Надёжность оповещений выросла с 78% до 99.1% в течение суток, время срабатывания сократилось на 37%.</p><h2>Кейс 3: Маркетинговая кампания с высоким требованием к легитимности</h2><p>Проблема: Маркетинговая команда столкнулась с массовыми блокировками из-за использования дешёвых SMS-агрегаторов и эмуляций. Решение: Запуск кампании через реальные GSM-IP шлюзы, регистрация кампаний у операторов и корректная настройка DLR/SMPP. Результат: Снижение блокировок на 92% и повышение открываемости сообщений, что привело к увеличению ROI рекламы.</p><h2>FAQ: глубокие вопросы и ответы</h2><h2>1. Почему оператор может заблокировать эмулятор или VPN-заменитель?</h2><p>Операторы блокируют источники, которые не проходят аутентификацию на уровне SIM или генерируют аномальный трафик. Эмуляции и VPN часто выявляются по несоответствию сигнатур, отсутствию корректной IMSI/IMEI и по необычным шаблонам трафика. Это приводит к автоматическим фильтрам и ручной блокировке.</p><h2>2. Можно ли заменить физические SIM на eSIM?</h2><p>Да, eSIM даёт гибкость и упрощает дистанционное управление, но при этом требуется поддержка операторов и корректное управление профилями. В ряде стран регуляторы строго относятся к удалённой активации SIM-профилей, поэтому важно учитывать юридические ограничения.</p><h2>3. Насколько безопасно хранить ключи и доступы к GSM-IP шлюзу?</h2><p>Крайне важно использовать HSM или защищённые хранилища для секретов, а также реализовать RBAC и аудит доступа. Утечка ключей может привести к компрометации всей платформы и несанкционированной отправке трафика.</p><h2>4. Какие метрики качества стоит отслеживать?</h2><p>Рекомендуем мониторить MOS для голоса, RTT для SIP, RTP loss, процент доставленных SMS, DLR delays и количество отказов на уровне оператора. Также важно отслеживать аномалии: всплески трафика, необычные шаблоны отправки и новые географические паттерны.</p><h2>5. Как снизить риски юридической ответственности при массовых рассылках?</h2><p>Регистрируйте кампании у операторов, используйте легальные opt-in базы абонентов, храните логи подтверждений и согласий, и следуйте требованиям по обработке персональных данных в вашей юрисдикции. Партнёрство с легитимным оператором снижает вероятность претензий.</p><h2>6. Что делать при обнаружении компрометации SIM?</h2><p>Немедленно блокировать SIM у оператора, изолировать шлюз, проигнорировать все очереди, восстановить состояние из последней безопасной копии и провести расследование. Важно иметь SLA и контакты у операторов для срочного блокирования и замены SIM.</p><h2>7. Стоит ли строить собственную инфраструктуру или пользоваться провайдером GSM-IP?</h2><p>Решение зависит от масштаба, требований к контролю и регуляторных условий. Собственная инфраструктура даёт полный контроль и прозрачность, но требует инвестиций. Провайдеры удобны для старта и масштабирования, но могут ограничивать доступ к деталям и вводить риски зависимости.</p><h2>8. Как избежать штрафов за межоператорские рассылки?</h2><p>Соблюдайте правила операторов, используйте корректные маршруты, регистрируйте номера отправителей и избегайте шаблонов, похожих на спам. Настройка обратной связи и обработка жалоб позволяет быстрее реагировать и сохранять легитимность.</p><h2>9. Как влияют 5G и будущие сети на GSM-IP?</h2><p>5G приносит новые возможности — более низкую задержку, большую пропускную способность и расширенные возможности ядра. Однако многие сервисы будут опираться на LTE/VoLTE и совместимость с существующими IMS. GSM-IP придётся эволюционировать для поддержки новых стандартов и обеспечения межоператорской совместимости.</p><h2>10. Можно ли использовать облачные SIM-банки безопасно?</h2><p>Да, при условии, что SIM-физически управляются в безопасных локациях, их доступ контролируется, а юридические аспекты соблюдены. Облачные SIM-банки удобны, но требуют строгой цепочки доверия и аудита.</p><h2>Заключение: резюме и следующие шаги</h2><p>Использование реальных GSM-IP шлюзов — это не только вопрос качества связи. Это вопрос легитимности, безопасности, соответствия регуляторным требованиям и устойчивости бизнеса. Мы рекомендовали архитектуры, практические шаги внедрения, фреймворки масштабирования и стратегии безопасности. Что делать дальше? Сформируйте внутреннюю рабочую группу, оцените текущие каналы связи на соответствие перечисленным критериям, разработайте пилот с реальными GSM-IP шлюзами и запланируйте тестирование на реальные сценарии нагрузки и отказов. Используйте предоставленные чек-листы для аудита поставщиков и внедрения. Вместе с вами мы можем выстроить надёжную, масштабируемую и соответствующую требованиям инфраструктуру мобильной связи.</p><h2>Полезные контрольные вопросы для старта</h2><ul><li>Какие требования к доставке SMS и голосу у нашего проекта?</li><li>Какие регуляторные ограничения применимы в наших целевых регионах?</li><li>Есть ли у нас ресурсы для управления собственной GSM-инфраструктурой?</li><li>Какие KPI по качеству и SLA мы ожидаем от поставщика?</li></ul><p>Если вы готовы, начните с малого пилота, соберите данные и примите решение на основе метрик и реальных результатов. Настоящие GSM-IP решения стоят своих усилий: они дают контроль, стабильность и юридическую прозрачность, которые невозможно обеспечить эмуляциями или VPN-заменителями.</p>]]></content:encoded>
    </item>
    <item>
      <title>Сервисы для тестирования безопасности веб-приложений</title>
      <link>https://tproger.ru/articles/servisy-dlya-testirovaniya-bezopasnosti-veb-prilozhenij</link>
      <comments>https://tproger.ru/articles/servisy-dlya-testirovaniya-bezopasnosti-veb-prilozhenij?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/servisy-dlya-testirovaniya-bezopasnosti-veb-prilozhenij</guid>
      <description><![CDATA[<p>Подборка сервисов для тестирования, которые сделают всю работу, если нет внутренних специалистов. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/servisy-dlya-testirovaniya-bezopasnosti-veb-prilozhenij">Сервисы для тестирования безопасности веб-приложений</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 17 Nov 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Проверка безопасности кода — это не разовая задача перед релизом, а постоянный процесс. Каждый коммит может нести уязвимость, каждая зависимость — CVE, каждая конфигурация инфраструктуры — дыру в защите. Но собрать DevSecOps-пайплайн из Open Source инструментов — это одно, а разобрать тысячи алертов и найти реальные проблемы — совсем другое.</p><p>Вашему вниманию —  подборка сервисов для тестирования, которые сделают всю работу, если нет внутренних специалистов.</p><h2>1. Metascan: непрерывное тестирование периметра</h2><p><a href="https://metascan.ru/?utm_source=tproger&amp;utm_medium=article&amp;utm_campaign=2510_tproger">Metascan</a> — это SaaS-платформа для непрерывного тестирования на проникновение (CPT), которая ежедневно сканирует весь ваш внешний периметр и присылает не тысячи алертов, а верифицированный список реальных проблем с готовыми PoC-скриптами.</p><h3>Как работает платформа</h3><p>Metascan работает по модели CPT (Continuous Penetration Testing) — это гибрид автоматического сканера и команды пентестеров. Сначала платформа автоматически находит все ваши внешние активы: домены, поддомены, IP-адреса. После этого команда экспертов вручную верифицирует находки, отсеивает ложные срабатывания и готовит PoC-скрипты для воспроизведения уязвимостей.</p><p><b>Процесс выглядит так: </b>каждую ночь запускается полное сканирование периметра (занимает до 8 часов даже для enterprise-клиентов с сотнями доменов). Утром вы получаете отчёт с новыми находками. Но это не сырой лог из сканера, а готовый список проблем, где каждая уязвимость проверена вручную, описана детально и снабжена скриптом для воспроизведения.</p><p>Раз в неделю проходит сессия с экспертами Metascan, где вы вместе разбираете новые и оставшиеся уязвимости, расставляете приоритеты и обсуждаете планы по устранению.</p><h3>Для кого это решение</h3><p><b>CISO и руководители ИБ </b>получают состояние внешнего периметра через дашборд. Видно, сколько критичных уязвимостей открыто, как быстро команда их закрывает, какие направления требуют внимания. Плюс внешняя экспертиза помогает верифицировать угрозы без найма дополнительных специалистов.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/75888bd2-99ab-44b3-8058-7a4dfd47d9cd.png" alt="" /></figure><p><b>Специалисты ИБ и пентестеры </b>— основные пользователи. Получают ежедневные отчёты с новыми уязвимостями, готовые PoC-скрипты для быстрой верификации (не нужно тратить часы на воспроизведение), передают задачи в разработку. Могут писать собственные модули сканирования на Python и интегрировать Metascan с SIEM или таск-трекером через API.</p><p><b>IT-команда, DevOps, SRE</b> получают задачи на устранение ошибок конфигурации: закрыть нежелательный порт, обновить уязвимое ПО, исправить настройки межсетевого экрана.</p><h3>Что проверяет Metascan</h3><p>Платформа использует DAST-подход (динамическое тестирование) — проверяет приложения снаружи, как это делал бы реальный атакующий. В основе — гибридный движок, объединяющий более 29 open-source инструментов (ZAP, nuclei, wafw00f, amass и другие).</p><h4>Инвентаризация активов</h4><p>Первый шаг — найти всё, что доступно извне. Metascan автоматически обнаруживает домены, поддомены и IP-адреса, связанные с вашей компанией. Это помогает бороться с Shadow IT — забытыми серверами, тестовыми окружениями, старыми версиями приложений, которые никто не обновлял годами.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/10c8b82a-9a4f-4771-b4d5-f9e5b2910f69.png" alt="" /></figure><h4>Веб-приложения и API</h4><p>Полный набор OWASP Top-10: SQL-инъекции, XSS, NoSQL-инъекции, удалённое выполнение кода (RCE), XXE и другие. Работает с современными SPA на React и Angular, проверяет REST и GraphQL API.</p><h4>Системные уязвимости</h4><p>Проверка на основе баз CVE и NIST: уязвимости в операционных системах, веб-серверах (nginx, Apache), системных сервисах. Если на сервере установлена устаревшая версия ПО с известной CVE — получите уведомление.</p><h4>Сетевые уязвимости</h4><p>Проверка открытых портов, поиск недостатков конфигурации межсетевых экранов, уязвимости сетевого оборудования. Если порт открыт без необходимости — система это заметит.</p><h4>CMS и фреймворки</h4><p>Проверка уязвимостей в WordPress, Joomla, Drupal и других CMS. Анализ устаревших плагинов и тем. Для веб-фреймворков (Django, Laravel, Spring) — поиск ошибок конфигурации и известных уязвимостей.</p><h4>Подбор паролей</h4><p>Проверка доступных сервисов на слабые пароли: SSH, FTP, панели администрирования. Если логин admin/admin работает — вы узнаете об этом до того, как узнают атакующие.</p><h3>Экспертное сопровождение — главное отличие</h3><p>Большинство сканеров выдают сотни или тысячи алертов, где 30-50% — ложные срабатывания. У Metascan есть экспертное сопровождение:</p><ul><li><b>Ручная верификация</b> — эксперты Metascan проверяют каждую найденную уязвимость вручную, отсеивают false positive, подтверждают реальность угрозы.</li><li><b>PoC-скрипты </b>— для каждой подтверждённой уязвимости готовится скрипт для воспроизведения. Ваш специалист может за минуту проверить проблему и убедиться, что она реальная.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/c8eb9320-0e40-4312-8274-661baff4af26.png" alt="" /></figure><ul><li><b>Еженедельные сессии</b> — живое общение с командой экспертов. Разбираете новые находки, обсуждаете приоритеты, получаете рекомендации по устранению.</li><li><b>Исследовательские работы</b> — если автоматика нашла что-то интересное, эксперты проводят ограниченный ручной пентест, чтобы понять масштаб проблемы.</li></ul><h3>Скорость и масштабируемость</h3><p>Платформа развёрнута в Yandex Cloud, использует динамическое масштабирование. Даже для крупных enterprise-клиентов с сотнями доменов полное сканирование периметра занимает максимум 8 часов. Это гарантирует ежедневные проверки: каждое утро вы знаете актуальное состояние своего периметра.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/9ce0fa14-092a-4f01-a836-1d589b2e93dc.png" alt="" /></figure><p>Для новых трендовых уязвимостей (например, очередная критичная CVE в популярной библиотеке) команда добавляет проверки за 24-48 часов. Вам не нужно ждать обновления сканера или писать свои скрипты — детекты появляются автоматически.</p><h3>Технические возможности и интеграции</h3><ul><li><b>Metascan не зависит от языка бэкенда</b> — это DAST-сканер, который работает с любыми веб-приложениями снаружи. Эффективно проверяет современные SPA, API, legacy-системы.</li><li><b>API для интеграций</b> — подключение к SIEM (сбор событий безопасности), таск-трекерам (автоматическое создание задач на устранение), SOAR-платформам (оркестрация реагирования на инциденты).</li><li><b>Кастомизация проверок</b> — возможность добавлять собственные шаблоны сканирования на основе Python. Если у вас специфичная инфраструктура или нужна проверка, которой нет в стандартном наборе — напишите модуль самостоятельно.</li><li><b>Отчёты и уведомления </b>— доступны в веб-интерфейсе, приходят на почту и в Telegram, выгружаются в markdown-формате. Каждая уязвимость детализирована: описание, CVSS-оценка, классификация (OWASP, CWE), PoC-скрипт, рекомендации по устранению.</li></ul><h4>Российская разработка и доступность</h4><p>Metascan — полностью российский продукт (ООО "Метаскан"), включён в Реестр российского ПО Минцифры (№ 19437). Не использует западные проприетарные компоненты, развёрнут на инфраструктуре в РФ.</p><h3>Стоимость и пилотный проект</h3><p>Модель SaaS-подписки, стоимость зависит от количества активов (хостов). Нет необходимости разворачивать инфраструктуру, настраивать сканеры и обучать команду — всё работает из коробки.</p><p>Доступен пилотный проект для оценки качества работы. За время пилота вы увидите реальные результаты: сколько активов найдено, какие уязвимости обнаружены, как работает экспертное сопровождение.</p><h2>2. Apsafe: когда нужна безопасность в CI/CD, но нет аналитика</h2><p><a href="https://apsafe.ru/?utm_source=tproger">Apsafe</a> — управляемый сервис, который объединяет несколько типов анализа (SAST, SCA, DAST, IaC, контейнеры) и добавляет то, чего нет в обычных сканерах: живых аналитиков, которые проверяют находки, отсеивают ложные срабатывания и готовят задачи для разработчиков.</p><h3>Как устроен сервис</h3><p>Платформа работает в облаке Apsafe. Вы подключаете репозиторий (например, GitLab), добавляете шаг безопасности в CI-пайплайн, и дальше при каждом коммите запускается батарея проверок: статический анализ кода, проверка библиотек на CVE, поиск секретов в коммитах, сканирование Docker-образов и конфигураций инфраструктуры.</p><p>После сканирования аналитики Apsafe вручную разбирают находки: группируют дубли, отсеивают ложные срабатывания, проверяют контекст и готовят понятные карточки уязвимостей с рекомендациями по исправлению.</p><p>Эти карточки автоматически попадают в ваш таск-трекер (Jira, YouTrack или любой другой с API) — разработчик получает готовую задачу с описанием проблемы, файлом и строкой кода, способом исправления. Никакого копания в логах сканеров и разбора технических отчётов.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/d808f59e-daa8-4ace-95c7-2fec6a9b6fbb.png" alt="" /><figcaption>Пример тикета на устранение уязвимости</figcaption></figure><h3>Для кого это решение</h3><p>Главная аудитория — компании без штатного AppSec-аналитика. Если у вас есть команда разработки и инженеры ИБ, которые понимают важность проверок безопасности, но некому разбирать алерты и готовить задачи — Apsafe закрывает этот вопрос.</p><p>Второй сценарий — перегруженная команда безопасности. Если у вас 10+ приложений, десятки микросервисов и регулярные релизы, а AppSec-команда тонет в тикетах — управляемый сервис снимает операционную нагрузку.</p><p>Третий сценарий — компании с регуляторными требованиями (ФЗ-152, требования ЦБ, отраслевые стандарты). Здесь важны не только проверки, но и отчёты, документация и подтверждение того, что код нормальный. Аналитики Apsafe готовят отчёты под нужный формат.</p><h3>Что проверяет платформа</h3><p>Apsafe объединяет шесть типов анализа, каждый из которых закрывает свою область рисков.</p><h4>SAST — статический анализ кода</h4><p>Находит уязвимости в исходном коде: SQL-инъекции, XSS, небезопасное использование криптографии, утечки данных через логи. Работает с популярными языками: Java, Python, JavaScript/TypeScript, Go, C#, PHP.</p><h4>SCA — анализ зависимостей</h4><p>Проверяет библиотеки и пакеты на известные уязвимости (CVE), контролирует лицензии. Если в вашем проекте подключена библиотека с критичной CVE — получите задачу на обновление.</p><h4>DAST — динамическое тестирование</h4><p>Анализирует работающее веб-приложение: проверяет HTTP-запросы, заголовки безопасности, конфигурацию серверов. Находит проблемы, которые не видны на уровне кода (неправильные CORS, отсутствие CSP, открытые эндпоинты).</p><h4>IaC — проверка инфраструктуры как кода</h4><p>Сканирует конфигурации Terraform, Kubernetes, Docker Compose. Находит небезопасные настройки: открытые порты, отсутствие шифрования, избыточные права доступа.</p><h4>Container — сканирование Docker-образов</h4><p>Проверяет базовые образы и слои на уязвимости, анализирует установленные пакеты. Нужно для микросервисных архитектур, где каждый сервис — отдельный контейнер.</p><h4>Secrets — поиск утечек</h4><p>Ищет случайно закоммиченные API-ключи, пароли, токены, приватные ключи. Один такой коммит в публичный репозиторий — и ваша инфраструктура в главных новостях про слив данных.</p><h3>Как это используют разные роли</h3><p><b>Разработчик </b>видит задачи в привычном трекере. Каждая задача содержит: описание уязвимости, файл и строку кода, рекомендации по исправлению, ссылки на стандарты (OWASP, CWE). После фикса инициирует повторную проверку через интерфейс Apsafe.</p><p><b>Аналитик Apsafe</b> (работает на стороне сервиса) выполняет ручную верификацию: проверяет контекст, отсеивает false positive, готовит артефакты, создаёт и обновляет тикеты. Отвечает на вопросы по спорным кейсам.</p><p><b>Инженер ИБ на стороне клиента </b>(опционально) согласует профили проверок, утверждает спорные находки, контролирует сроки устранения, следит за метриками и трендами.</p><p><b>Руководитель разработки</b> получает дашборд с прогрессом: сколько уязвимостей найдено, сколько закрыто, какие команды быстрее реагируют, где узкие места. Это помогает планировать спринты и оценивать технический долг по безопасности.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/6bac3b46-cfeb-4a12-855c-49e704632358.png" alt="" /><figcaption>Тренд эффективности устранения уязвимостей</figcaption></figure><p><b>SOC и эксплуатация</b> используют сводку классов уязвимостей для упреждающих мер: если видят, что в нескольких приложениях находят SQL-инъекции — усиливают мониторинг БД и WAF-правила.</p><h2>Чем отличается от самостоятельной сборки</h2><p>Проблема в том, что сырые алерты из сканеров — это не готовые задачи. Сотни строк в логах, множество дублей, высокий процент false positive (30-50% для SAST — норма). Кто-то должен это всё разобрать, проверить, сгруппировать и подготовить для разработчиков. Обычно этим занимается AppSec-аналитик, но если его нет — задачи висят, а уязвимости накапливаются.</p><p>Apsafe решает эту проблему через управляемый сервис:</p><ul><li><b>Один дашборд</b> — все результаты SAST/SCA/DAST/IaC/Container в одном интерфейсе, с корреляцией находок. Видно, что одна и та же проблема найдена разными сканерами — система дедуплицирует это автоматически.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/f2dabf63-30bd-46ca-bf21-65e11f39d760.png" alt="" /><figcaption>Дашборд Apsafe с результатами сканирования и трендом устранения уязвимостей</figcaption></figure><ul><li><b>Ручной triage</b> — аналитики Apsafe проверяют каждую находку: смотрят контекст, оценивают реальность эксплуатации, отсеивают ложные срабатывания. Разработчик получает только подтверждённые уязвимости.</li><li><b>Быстрое развёртывание</b> — первая полная проверка через ~10 дней после подключения, дальше автоматические проверки новых коммитов. Не нужно разворачивать инфраструктуру, настраивать пайплайны и обучать команду.</li></ul><p>SLA на верификацию — в договоре фиксируются сроки, за которые аналитики разбирают находки. Обычно несколько раз в месяц, но можно чаще (влияет на стоимость).</p><h2>Интеграции и технические возможности</h2><ul><li><b>Платформа нативно интегрируется с GitLab</b> — самый популярный выбор для CI/CD в российских компаниях. Подключение через CI-скрипты и webhooks, настройка занимает пару часов.</li><li><b>Поддержка других Git-систем (GitHub, Bitbucket, GitFlic</b>) — по запросу, зависит от инфраструктуры клиента.</li><li><b>Таск-трекеры подключаются через API:</b> Jira, YouTrack, Redmine и другие. Создание тикетов происходит из интерфейса Apsafe одной кнопкой — остается только заполнить описание уязвимости.</li><li><b>Языки и фреймворки зависят от подключённого набора сканеров.</b> Типовой стек: Java (Spring, Spring Boot), Python (Django, Flask), JavaScript/TypeScript (React, Angular, Node.js), Go, C#, PHP. Если ваш стек специфичный — уточняйте у вендора перед подключением.</li></ul><h2>Отчёты и документация</h2><p>Для регуляторных проверок и внутренних аудитов аналитики Apsafe готовят отчёты под нужный формат: требования ФЗ-152, стандарты ЦБ, внутренние шаблоны компании. Отчёт включает сводку по найденным уязвимостям, статистику устранения, динамику за период.</p><p>Каждая уязвимость документируется:</p><ul><li>Идентификатор и источник (какой сканер нашёл)</li><li>Класс уязвимости (CWE, OWASP Top 10)</li><li>Файл, строка кода или эндпоинт</li><li>Описание проблемы и векторы атаки</li><li>Рекомендации по исправлению с примерами кода</li><li>Комментарии аналитиков</li><li>Ссылки на стандарты и CVE (если применимо)</li></ul><h2>Развёртывание и безопасность данных</h2><p>Платформа работает в облаке Apsafe, данные клиентов сегментированы, среды изолированы. Клиент передаёт исходный код для анализа — это важный момент, который нужно учитывать.</p><p>Для компаний с требованиями к размещению данных внутри контура или на территории РФ стоит уточнить возможность on-premise развёртывания. SaaS-модель удобнее и быстрее в запуске, но не всегда подходит для критичных систем.</p><p>Доступ к интерфейсу разграничен по ролям: администраторы видят всё, разработчики — только свои проекты, аудиторы — отчёты и статистику. Интеграция с корпоративным SSO возможна по запросу.</p><h2>Стоимость и модель оплаты</h2><p>Тарификация зависит от объёма работы и частоты проверок:</p><ul><li>Количество приложений и объём кода — основной фактор. Чем больше репозиториев и строк кода, тем выше стоимость.</li><li>Набор сканеров — можно подключить только SAST и SCA (базовая проверка) или весь стек с DAST, IaC и Container (полное покрытие).</li><li>Частота ручных проверок — раз в месяц (дешевле) или раз в 1-2 недели (быстрее получаете задачи на исправление).</li><li>Бесплатного tier нет — это управляемый сервис с живыми аналитиками, а не self-service платформа. POC и пилотные проекты обсуждаются индивидуально, обычно на 1-2 приложения на месяц, чтобы оценить качество работы.</li></ul><h2>Поддержка и обучение команды</h2><p>Техническая поддержка работает через согласованные каналы (почта, форма, мессенджер) с регламентом реакции, зафиксированным в договоре. Обычно это SLA на ответ в течение рабочего дня для обычных запросов и несколько часов для критичных.</p><p>Обучение включает вводные сессии для команд разработки и ИБ: как работать с интерфейсом, как читать карточки уязвимостей, как инициировать повторные проверки. Плюс сопровождение онбординга — помощь в настройке интеграций и запуске первых проверок.</p><p>Методические материалы предоставляются по запросу: гайды по исправлению типовых уязвимостей, best practices DevSecOps, шаблоны политик безопасной разработки.</p><h2>3. ScanFactory VM: универсальная платформа для управления уязвимостями</h2><p><a href="https://scan-factory.ru/?utm_source=tproger">ScanFactory</a> — российская платформа, которая объединяет четыре направления в одном решении: управление внешней поверхностью атаки (EASM), сканирование внутренней сети (VM), тестирование веб-приложений (DAST) и мониторинг утечек данных (Threat Intelligence).</p><p>Платформа включена в Реестр российского ПО (№14815 от 12.09.2022), организация имеет сертификаты ФСТЭК ТЗКИ и СЗКИ: для банков, госсектора, компаний с госучастием — это обязательное требование для подрядчика.</p><h3>Ключевые преимущества</h3><h4>Экспертиза</h4><p><b></b>Имитируются атаки настоящих злоумышленников, которые не ограничены выбором «только российских сканеров». В составе ScanFactory есть<b> 3 коммерческих решения корпоративного уровня</b> c преимуществами над opensource аналогами. Заказчик, вместо того, чтобы самостоятельно разворачивать Nessus, Acunetix, RedCheck или другие инструменты, настраивать их и сводить результаты вручную, получает единый интерфейс, который запускает нужные сканеры автоматически и агрегирует находки.</p><h4>Инструкции по исправлению</h4><p><b></b>Встроенный AI-модуль автоматически отсеивает false positive сработки, агрегирует несколько уязвимостей в одну, и пишет человеко-понятные инструкции по устранению на русском языке. В результате, упрощается коммуникация с ИТ-отделом.</p><h4>Комплаенс</h4><p><b></b>Режим “аудит” по стандартам ФСТЭК, PCI DSS, CIS Benchmark.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/80989524-1485-44a9-aa8c-7d42d2d38cd5.jpg" alt="" /></figure><h4>Платформа работает в трёх режимах развёртывания</h4><p>Полностью SaaS (облако вендора), O-Premise (ваша инфраструктура) или гибридный вариант через VPN-коннектор — когда управление сканированием идёт из облака,  а сканируются сервера внутри вашей сети через защищённый туннель.</p><h3>Для кого это решение</h3><ul><li><b>Специалисты безопасности инфраструктуры</b> используют ScanFactory для управления инфраструктурными уязвимостями: сканирование серверов, сетевого оборудования, рабочих станций. Вместо того чтобы вручную запускать несколько инструментов и сводить отчёты, получают единую картину по всем активам.</li><li><b>AppSec-специалисты</b> сканируют веб-приложения на стендах разработчиков через DAST-модуль. Это помогает находить проблемы до того, как код попадёт в production: SQL-инъекции, XSS, ошибки конфигурации серверов.</li><li><b>Red Team-специалисты </b>используют как инструмент для периодических тестирований на проникновение. В ScanFactory есть возможность загружать собственные плагины для nuclei: таким образом можно автоматизировать проверки в рамках учений или пентестов.</li><li><b>Compliance-специалисты</b> работают с результатами сертифицированного сканера RedCheck, который встроен в платформу. Это важно для компаний с регуляторными требованиями (банки, государственные структуры), где нужно подтверждение от сертифицированного инструмента.</li></ul><h3>Что проверяет ScanFactory</h3><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/b9ba18b3-9b5e-4fa6-9e35-f062a67f83d6.png" alt="" /></figure><h4>EASM — внешняя поверхность атаки</h4><p>Сканирование активов компании  из интернета: OSINT (поиск shadow IT), сканирование публично доступных серверов и веб-приложений, анализ новых открытых портов, уведомления о небезопасных конфигурациях.</p><h4>VM — внутренняя сеть</h4><p>Сканирование внутренней инфраструктуры с авторизацией: сервера в ЦОД или облаках, АРМ, рабочие станции, сетевое оборудование, принтеры, IoT-устройства. Находит устаревшее ПО с уязвимостями, неправильные конфигурации, слабые пароли.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/e062b32b-9f53-418a-add4-d29ee5ebe058.png" alt="" /></figure><h4>DAST — веб-приложения</h4><p>Динамическое тестирование веб-приложений: проверка на OWASP Top-10 (SQL-инъекции, XSS, XXE, SSRF), анализ заголовков безопасности, проверка API. Работает в режиме black или gray-box — без доступа к исходному коду, как это делал бы реальный атакующий: с авторизацией, или без.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/ced183d0-dc5f-46ea-ad83-5b617f86fe7f.png" alt="" /></figure><h4>Threat Intelligence — утечки паролей</h4><p>Мониторинг утечек учётных данных сотрудников в публичных источниках: дампы баз данных, форумы, paste-сервисы, Telegram-каналы. Если email сотрудника попал в утечку — получите уведомление.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/510de118-d277-403f-9834-54885dacecb8.png" alt="" /></figure><h4>Compliance через RedCheck</h4><p>Встроенный модуль для проверки соответствия конфигураций требованиям регуляторов. RedCheck — сертифицированный ФСТЭК сканер, это важно для компаний, которым нужно формальное подтверждение проверок.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/a5026bc4-ead0-405a-8bf0-1d5c2418a820.png" alt="" /></figure><h3>Интеграции и автоматизация</h3><ol><li><b>API </b>— полностью задокументированный и с широким функционалом. Можно интегрировать с SIEM, таск-трекерами, системами оркестрации. Например, автоматически создавать задачи на исправление в Jira при обнаружении критичных уязвимостей.</li><li><b>ASOC-интеграция</b> — подключение к DefectDojo для корреляции находок из разных источников. Если у вас уже используется DefectDojo как центральная система управления уязвимостями, Scan Factory легко встраивается в этот процесс.</li><li><b>SGRC-интеграция </b>— подключение к SECURITM для управления рисками и соответствием требованиям. Результаты сканирования автоматически попадают в систему управления рисками, где оцениваются в контексте бизнес-процессов.</li><li><b>CLI</b> — возможность запускать сканирование из командной строки. Удобно для интеграции в CI/CD-пайплайны или для автоматизации через скрипты.</li></ol><h3>Форматы отчётов</h3><p>Отчёты выгружаются в CSV, XLSX, PDF, JSON, HTML с полной детализацией по проектам и уязвимостям. Можно выгружать отдельные отчёты по активам, уязвимостям или утечкам с нужным уровнем детализации — от executive summary для руководства до технических отчётов для специалистов с PoC-кодом и шагами воспроизведения.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-17/7a9b1017-d2e2-4f67-b16d-37c2135dce27.png" alt="" /></figure><h3>Развёртывание и безопасность данных</h3><ul><li><b>Полностью российское решение: </b>сервера, код и компания находятся в России. Организация имеет сертификат ФСТЭК — соответствует требованиям по безопасности информации.</li><li><b>Данные хранятся в зашифрованном виде в базе данных.</b> Для компаний с требованиями к размещению данных внутри контура доступен on-premise вариант развёртывания.</li><li><b>Гибридный режим через VPN-connector решает проблему закрытых сегментов:</b> Личный Кабинет и управление сканированием находится в облаке вендора, а сканирование внутренней сети происходит через защищённый туннель.</li></ul><h3>Стоимость и пилотный проект</h3><p>Бесплатный пилотный проект на месяц без ограничений. Это даёт возможность проверить платформу на реальных данных: просканировать свою инфраструктуру, оценить количество находок, понять, как работает интерфейс и насколько точны детекты.</p><h3>Поддержка и обучение</h3><p><b>Техническая поддержка работает по email и в Telegram-чате. </b>В процессе настройки проводят обучающие встречи: как настраивать проекты, как интерпретировать результаты, как интегрировать с существующими системами.</p><p><b>Доступна экспертная поддержка заказчиков по ВКС (формат CPT, continuous penetration testing)</b>, где можно детально разобрать сложные кейсы.</p><p>Отдельно вендор предоставляет услуги проведения <b>пентестов </b>и<b> Red Team</b>-упражнений.</p><p><a href="https://t.me/scanfactory">Новостной Telegram-канал </a>— здесь выходят обновления продукта, информация о новых детектах для трендовых уязвимостей, кейсы использования.</p><h3>Вывод</h3><p>Все представленные платформы — российские разработки, соответствуют требованиям регуляторов и предлагают пилотные проекты для оценки на реальных данных. Выбор конкретного решения зависит от задач: нужна ли проверка только внешнего периметра, интеграция в CI/CD или комплексное управление уязвимостями всей инфраструктуры. Главное — не откладывать автоматизацию проверок безопасности, потому что каждый коммит может нести уязвимость, а каждая зависимость — критичную CVE.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как убрать ботов с помощью JavaScript, чтобы A/B-тесты были точнее</title>
      <link>https://tproger.ru/articles/kak-otseivat-botov-s-pomoshhyu-javascript--chtoby-a-b-testy-byli-tochnee</link>
      <comments>https://tproger.ru/articles/kak-otseivat-botov-s-pomoshhyu-javascript--chtoby-a-b-testy-byli-tochnee?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-otseivat-botov-s-pomoshhyu-javascript--chtoby-a-b-testy-byli-tochnee</guid>
      <description><![CDATA[<p>Как отличить людей от ботов в A/B-тестах с помощью JavaScript и сделать результаты статистически честными.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-otseivat-botov-s-pomoshhyu-javascript--chtoby-a-b-testy-byli-tochnee">Как убрать ботов с помощью JavaScript, чтобы A/B-тесты были точнее</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[SEO]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 06 Nov 2025 09:50:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Адаптированный перевод <a href="https://www.kalzumeus.com/2010/06/07/detecting-bots-in-javascrip/">статьи</a> от редакции Tproger. Текст ведётся от первого лица. Автор оригинала Patrick McKenzie — разработчик библиотеки A/Bingo (open-source-инструмент A/B-тестирования на Rails).</p><h2>Зачем вообще убирать ботов</h2><p>Я из тех, кто не любит тратить время на фичи, пока не понятно, что они реально нужны пользователям.<b> С open-source-проектами та же логика: не стоит всё усложнять, пока клиенты прямо не скажут, что им действительно нужно что-то посложнее </b>(бывает, что такие клиенты способны помочь себе сами… по крайней мере, в теории).</p><p>Несколько месяцев назад один из пользователей моего проекта A/Bingo — библиотеки для A/B-тестов на Rails — попросил добавить возможность исключать ботов из подсчёта. Тогда все мои эксперименты были за формой регистрации, так что боты туда почти не попадали.</p><blockquote>Я подумал: раз уж они не настолько умные, чтобы как-то смещать результат, то распределятся равномерно между вариантами. А раз мы измеряем не абсолютную конверсию, а разницу между вариантами, то влияние ботов должно нивелироваться само собой.</blockquote><p>Эту мысль я и озвучил. Реакция была прохладной, и я ответил по классике: код под лицензией MIT, хочешь — форкни и добавь нужную фичу сам. Если некогда — я открыт для консультаций.</p><p>Тема всплывала ещё пару раз, но никто не был настолько мотивирован, чтобы оплатить мою работу. Пока недавно я не стал проводить серию сквозных A/B-тестов, где конверсией считалась покупка — и вот тут боты <b>действительно оказались убийцами статистики</b>.</p><p>Представим, что в среднем у меня около 2000 визитов в день и 5 покупок — для лета это нормальные цифры. Чтобы различить этот уровень конверсии и вариант, на 25 % лучше, потребуется примерно 56 000 визитов, то есть около месяца данных, чтобы достичь 95 %-го доверительного интервала. Отлично. Проблема в том, что A/Bingo фиксирует не 2000 визитов, а ближе к 8000 — потому что сайт постоянно штурмуют боты. В итоге измеренная конверсия падает с 0,25 % до 0,0625 %.</p><p><i>(Если кажется, что цифры низкие — не забывайте: это несезон, плюс я ранжируюсь по множеству длиннохвостых поисковых запросов, так что часть трафика в любом случае нецелевая.)</i></p><h2>Влияет ли это вообще на статистику?</h2><p>Теоретически я всё ещё думал, что раз боты не конвертируются по-разному между вариантами, то математически всё остаётся честным. Вот формула Z-статистики, которой я пользуюсь при проверке гипотез:</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-06/c62244f0-c5b8-432b-ada4-991492012f82.png" alt="" /></figure><p><i>CR означает коэффициент конверсии (Conversion Rate), а n — размер выборки для двух альтернатив. </i></p><p>Если мы увеличим размеры выборок на некоторый постоянный коэффициент X, уравнение должно превратиться в:</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-06/88f4b61f-e8fb-44b1-9d65-b2056f1387d5.png" alt="" /></figure><p>Из числителя можно вынести 1/X и перенести его в знаменатель — простая арифметика из начальной школы.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-06/4aeb23af-0806-44f6-b0f5-add37855b6f1.png" alt="" /></figure><p>Теперь, благодаря магии алгебры старших классов:</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-06/9bddcc1d-bf87-4e20-a3f3-fde354268fae.png" alt="" /></figure><p>Если я здесь ошибся с математикой, команда математиков меня точно исключит:</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-11-06/020a01e5-1050-430a-9bff-599bbd3abd9f.png" alt="" /></figure><p>Если внимательно посмотреть на это, то это не то же уравнение, с которого мы начали. Как оно изменилось? Обратная величина коэффициента конверсии (1 – cr) стала ближе к 1, чем была раньше. (Это можно проверить, взяв предел при X, стремящемся к бесконечности.) Приближение к 1 означает, что числители знаменателя становятся больше, что означает, что знаменатель в целом становится больше, что означает, что Z-оценка становится меньше, что потенциально может навредить расчёту, который мы делаем.</p><blockquote>Итак, предполагая, что я правильно выполнил алгебру, интуитивный ответ, который я давал людям месяцами, оказался неверным: боты действительно портят тестирование статистической значимости, искусственно занижая z-оценки и тем самым превращая статистически значимые результаты в нулевые результаты на грани.</blockquote><p>Так что же мы можем с этим сделать?</p><h2>Наивный подход: проверять User-Agent</h2><p>Первое, что приходит в голову: просто отфильтровать ботов по User-Agent. Я тоже так думал.
На практике это оказалось катастрофически неэффективно, по крайней мере, для тех ботов, которые атакуют мой сайт.</p><p><i>
(Так как по ключевым словам мой сайт иногда попадает в серую тематику — вроде азартных игр, — я получаю массу лишнего внимания от скрейперов и парсеров.)</i></p><p>Проверка User-Agent убирала максимум половину трафика от ботов. Остальные продолжали участвовать в A/B-тестах, портя конверсии и статистику.</p><h2>Более надёжный способ: заставить бота подумать</h2><p>Можно было бы использовать CAPTCHA — но заставлять всех пользователей доказывать, что они люди, только ради чистоты A/B-тестов, мягко говоря, глупо.</p><p>Нужен полностью автоматический способ отличить человека от скрипта — без участия пользователя.</p><p><b>Решение, к счастью, уже есть: выполнение произвольного JavaScript-кода.</b></p><p>Пока Googlebot и ещё пара продвинутых ботов умеют исполнять JS, для большинства остальных это слишком дорого — и по ресурсам, и по сложности реализации. Написать скрипт на <b>wget</b> или через любую HTTP-библиотеку куда проще, чем имитировать полноценный браузер с движком JS.</p><p><i>(Да, Googlebot действительно умеет исполнять JavaScript. SEO-специалисты технического толка это хорошо знают: бот может частично выполнять код страницы, а иногда и полностью — как человек. Проверить это легко: поставьте в коде экспериментальный запрос, и Googlebot вскоре появится в логах по этому URL.)</i></p><p>Чтобы точно отличать людей от машин (и при этом не мешать Googlebot, который честно указывает свой User-Agent), нужно заставить браузер выполнить три простых задачи:</p><ol><li><b>Сложить два случайных числа. </b>(Для браузера с JS это тривиально.)</li><li><b>Сделать AJAX-запрос через Prototype или jQuery.</b> (Подгрузить и выполнить эти библиотеки без реального движка JS почти невозможно.)</li><li><b>Выполнить POST-запрос. </b>(Googlebot на POST обычно не ходит. Он делает много GET-запросов и даже пытается угадывать параметры, чтобы обойти больше страниц — но POST для него запретная зона.)</li></ol><h3>Пример на Prototype</h3><h3>И в jQuery</h3><p>На сервере мы принимаем параметры<b> a, b </b>и<b> c</b> и проверяем, что они образуют корректную тройку. <b>Если всё сходится — считаем, что это человек. Если нет — продолжаем считать клиента ботом.</b></p><p>Можно было бы усложнить задачу, например, попросить вычислить MD5 от случайного значения, сохранённого в сессии, чтобы отсеивать ботов, которые пытаются просто повторить старый ответ. Но мне это не нужно: цель не в защите от злонамеренных атак, а в фильтрации большинства «безобидных» ботов, которые лишь засоряют статистику.</p><blockquote>Никто не получает выгоды, ломая мои A/B-тесты, так что я не жду целенаправленных атак. Это не защита — просто средство наведения порядка.</blockquote><p>Да, я исхожу из того, что пользователи умеют выполнять JavaScript. (Мой сайт без JS всё равно не работает.)</p><blockquote>Так что если кто-то вроде Ричарда Столлмана с включённым NoScript не сможет участвовать в моих тестах — что ж, я переживу.</blockquote><h2>Как всё связать вместе</h2><p>Теперь мы умеем отличать тех, кто действительно исполняет JavaScript, от тех, кто нет.</p><p>Осталась одна мелочь: браузер сообщает о своей человечности <b>уже после того, как пользователь начал участвовать в A/B-тесте.</b></p><p>Это абсолютно нормальная ситуация. Например, человек заходит на первую страницу, где где-то внутри встроен тест. Он выполняет JS-код, который посылает на сервер доказательство, что он человек. Но делает это уже после того, как A/Bingo зарегистрировал его участие в тесте.</p><p>Решение оказалось простым.</p><p>A/Bingo и так отслеживает, в каких экспериментах пользователь уже участвовал, чтобы не считать его повторно. В «антибот-режиме» это поведение чуть меняется:</p><ul><li>система продолжает записывать участие и конверсии,</li><li><b>но не добавляет их в общую статистику, пока пользователь не подтвердил, что он человек.</b></li></ul><p>Когда подтверждение приходит (браузер выполнил JS и прошёл проверку), система просматривает все предыдущие тесты, где пользователь уже участвовал, и <b>задним числом добавляет его участие в подсчёты.</b></p><p>Если кому-то интересно посмотреть, как именно это реализовано, код доступен для изучения — всё лежит на <a rel="noopener" href="http://www.bingocardcreator.com/abingo">официальной странице проекта</a>.</p><p>А если не хочется разбираться в деталях, а просто нужно быстро сделать свои A/B-тесты ботоустойчивыми, — посмотрите последнюю запись в <a rel="noopener" href="http://www.bingocardcreator.com/abingo/faq">FAQ</a>. Там объясняется, как включить этот режим в один клик.</p><h2>Другие применения</h2><p>Этот приём с проверкой через JavaScript можно использовать не только в A/B-тестах.</p><p>У него есть и другие, вполне практичные применения.</p><h3>1. Невидимая CAPTCHA для комментариев</h3><p>С небольшой доработкой это превращается в CAPTCHA без взаимодействия с пользователем — отличное решение для блогов, форумов и любых форм обратной связи.</p><p>Принцип такой:</p><ul><li>все пользователи (и люди, и боты) сразу видят свой комментарий после отправки,</li><li>но сайт публикует его только после того, как получит подтверждение JavaScript-выполнения.</li></ul><p>Никаких галочек <b>Я НЕ РОБОТ</b> — просто задержка публикации, пока браузер не выполнит нужный код.</p><p>Можно сделать проверку чуть сложнее и добавить состояние на сервере, чтобы она была уникальной для каждого запроса.</p><blockquote>Минус очевиден: ваш сайт, скорее всего, навсегда останется без комментариев от Ричарда Столлмана и других любителей NoScript.</blockquote><p>Но, согласитесь, это не самая высокая цена за чистоту данных.</p><h3>2. Автоматическое дискриминирование пользователей под нагрузкой</h3><p>Ещё одна идея — всегда различать, кто человек, а кто нет. Когда сервер оказывается на грани по ресурсам, можно временно отключать тяжёлые функции для тех, кто ещё не доказал свою человечность.</p><p>Так вы избавитесь от резких просадок производительности из-за всплесков ботов и сможете спокойно выдерживать пики нагрузки.</p><p>А если ситуация критическая — можно вообще заблокировать ботов на время.
Обычные пользователи этого даже не заметят.</p><h3>3. Защита от разрушительных действий</h3><p>И наконец, проверку можно использовать, чтобы предотвратить опасные или разрушительные операции.</p><p>Хотя, по-хорошему, такие действия и так должны быть защищены — спрятаны за POST-запросом и аутентификацией. Но дополнительная проверка на человечность нужна, особенно если ошибка может что-то удалить или повредить данные.</p><h3>От редакции Tproger</h3><p>Если вам понравился этот перевод — обсудите материал в комментариях.</p><p>Мы стараемся находить и адаптировать для вас лучшие тексты о разработке, данных и инженерном мышлении. Поделитесь своими мыслями: сталкивались ли вы с ботами, которые ломают аналитику, и как вы с этим справлялись?</p>]]></content:encoded>
    </item>
    <item>
      <title>Как мы автоматизировали мутационное тестирование unit тестов на проекте в крупном банке с использованием Stryker.NET</title>
      <link>https://tproger.ru/articles/kak-my-avtomatizirovali-mutacionnoe-testirovanie-unit-testov-na-proekte-gazprombanka-s-ispolzovaniem-stryker-net</link>
      <comments>https://tproger.ru/articles/kak-my-avtomatizirovali-mutacionnoe-testirovanie-unit-testov-na-proekte-gazprombanka-s-ispolzovaniem-stryker-net?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[asyncguru]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-my-avtomatizirovali-mutacionnoe-testirovanie-unit-testov-na-proekte-gazprombanka-s-ispolzovaniem-stryker-net</guid>
      <description><![CDATA[<p>Опыт автоматизации мутационного тестирования Unit-тестов в крупном банке с помощью Stryker.NET. Практический кейс по внедрению в CI/CD, настройке и интеграции в legacy-проект. Как мы нашли слабые места в тестах и повысили их надёжность, не замедляя процесс разработки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-my-avtomatizirovali-mutacionnoe-testirovanie-unit-testov-na-proekte-gazprombanka-s-ispolzovaniem-stryker-net">Как мы автоматизировали мутационное тестирование unit тестов на проекте в крупном банке с использованием Stryker.NET</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 11 Oct 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Качественные модульные тесты помогают оптимизировать ресурсы команды разработки и увеличивают надежность создаваемого продукта. Оценить эффективность этих тестов можно с помощью автоматизированного инструмента для мутационного тестирования Stryker.NET.</p><p><i>Меня зовут Юрий Каган, я Software/System Architect в IT_ONE. Расскажу об опыте применения </i><i>Stryker.NET </i><i>на проекте в крупном банке. </i><i></i></p><h2>Качественные юнит-тесты —  основа надежного ПО</h2><p>Несмотря на то, что юнит-тесты —  только один из компонентов пирамиды тестирования ПО, они —  база для создания качественного кода:</p><p>– Благодаря проверке отдельных фрагментов кода можно <b>выявить дефекты на ранних стадиях</b>, не пропуская их на следующие этапы разработки. Известно, что чем раньше обнаружена ошибка, тем ниже стоимость её исправления.</p><p>– Модульные тесты обеспечивают <b>стабильность разработки</b>, служа некой страховкой: они предотвращают регрессии при изменениях и рефакторинге.</p><p>– Проведённые тесты служат документацией и <b>ускоряют внедрение нового функционала</b>. По ним можно понять изначальный замысел автора кода и упростить разработку.</p><p>Для оценки качества юнит-тестов разработчики обычно пользуются метрикой Code Coverage, отражающей процент покрытия тестами исходного кода. Такая информация может собираться различными способами в зависимости от типа используемого инструмента, но результат получается схожий: данные о том, какие конкретно фрагменты кода выполнялись во время тестов. О каких бы то ни было проверках речи не идет. То есть, по нашему опыту, технически очень легко можно написать тесты, которые будут давать 100% Code Coverage и при этом ничего не проверять. Это означает, что даже высокий процент покрытия кода тестами не гарантирует, что они разработаны качественно и поведение вашего кода надёжно зафиксировано. После них нельзя исключать скрытые ошибки.</p><p>Как следствие, постоянно осознавая риски некачественных тестов, разработчики могут начать бояться рефакторинга —  ведь любые изменения потенциально грозят дефектами в коде. Причем допущенный дефект может быть обнаружен намного позже, уже в продакшене. Всё это приводит к дополнительным рискам, замедляет и удорожает цикл разработки.</p><p>Но существует и другая, не столь широко известная метрика, которая более объективно описывает надёжность проведённых тестов: она определяется в процессе <b>мутационного тестирования</b>. Первые упоминания об этом подходе мы встречаем еще в 1970-х годах. Тогда он уже признавался перспективным, но в то же время —  практически неприменимым из-за запредельного объема работы. Сегодня мы имеем возможность автоматизировать большую часть этой работы с помощью инструментов, например, Stryker.NET.</p><h2>Принципы мутационного тестирования</h2><p>Алгоритм мутационного тестирования достаточно прост: в исходный код (базу) вносятся различные изменения (мутации). Существует несколько разновидностей мутаций. Основные из них:</p><p>– <b>изменение операторов</b>: замена арифметических и логических операторов (например, + на -, &gt;= на &gt;),</p><p>– <b>изменение значений</b>: замена булевых значений, удаление вызовов методов или изменение литералов,</p><p>– <b>изменение условий</b>: в if, циклах и логических выражениях.</p><p>Затем на этом модифицированном коде выполняются модульные тесты для проверки их чувствительности к изменениям. Мутанты, которые вызывают провал тестов, считаются «убитыми» (Killed Mutants), остальные —  «выжившими». По итогу проверки формируется отчет, где ключевая метрика качества тестов —  Mutation Score —  доля убитых мутантов от их общего количества. Если тесты не «убивают» подавляющее число мутантов, значит их нельзя считать достаточно эффективными.</p><p>Среди инструментов для автоматизации проведения мутационного тестирования мы остановили выбор на Stryker.NET и вот, почему:</p><p>– на данный момент Stryker.NET обладает <b>наибольшим объемом автоматизированных операций</b>: он самостоятельно вносит мутации в исходный код, запускает юнит-тесты и генерирует подробные отчеты;</p><p>– Stryker.NET <b>полностью интегрирован с .NET-экосистемой</b>: поддерживает .NET и .NET Framework, основные тестовые фреймворки (xUnit, NUnit, MSTest);</p><p>– Stryker.NET – это бесплатный <b>инструмент с открытым исходным кодом</b>, постоянно обновляемый и поддерживаемый сообществом, что гарантирует его актуальность и развитие.</p><p>По нашей практике, Stryker.NET будет полезен для трех категорий пользователей:</p><p>– <b>Разработчик</b> может убедиться, что новый код покрыт качественными тестами и изменения не привели к деградации существующих тестов, а также находить и удалять тесты, которые ничего не тестируют и только отнимают ресурсы.</p><p>– <b>Ревьюер</b> может быстро и надежно проверить качество тестов в pull request.</p><p>– <b>ИТ-архитектор и руководитель разработки</b> могут регулярно строить и анализировать отчеты, чтобы мониторить «здоровье» юнит-тестов во всей кодовой базе.</p><h2>Установка и использование Stryker.NET</h2><p>Технически Stryker.NET представляет из себя dotnet tool. Соответственно, чтобы его установить, необходимо выполнить команду в cmd или в PowerShell консоли:</p><p><i>dotnet tool install -g dotnet stryker</i></p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/29e01f48-c311-41e1-a22b-b0be87e83f32.png" alt="" /><figcaption>установка Stryker.NET</figcaption></figure><p>Получение и анализ отчетов: результаты выводятся в консоль и сохраняются в подробном HTML-отчете.</p><p>Stryker.NET поддерживает несколько сценариев, простейший из них — анализ проекта с кодом. В этом случае необходимо запустить мутационное тестирование из папки, где расположен файл проекта, указать имя этого файла без пути и через ключ <b><i>tp</i></b> указать полные пути ко всем файлам проектов, содержащим тесты для проекта с кодом. Например:</p><p><i>dotnet stryker -p “project.csproj” -tp “c:\git\project.tests\project.tests.csproj”</i></p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/19df0a95-2009-4c70-b05b-c9fc49c9da8c.png" alt="" /><figcaption>запуск Stryker.NET для анализа проекта с кодом</figcaption></figure><p>В результате тестирования программа сгенерирует отчет, где в первой колонке будет выведена метрика Mutation Score в целом по проекту и по отдельным файлам, причем разделённая на две группы: <i>Of total</i> —  общее количество мутантов, <i>Of covered</i> —  количество мутантов, находящихся в тех фрагментах кода, для которых вообще существуют тесты.</p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/2d7165e7-c7b8-4f67-ac0a-bcbab2514419.png" alt="" /><figcaption>детальный отчет Stryker.NET файлов проекта, метрики</figcaption></figure><p>В колонке <i>Killed</i> отображается количество убитых мутантов, в колонке <i>Survived</i> —  количество выживших. В колонке <i>Timeout</i> —  количество мутантов, которые привели к зацикливанию выполнения тестов и их прерыванию утилитой. Значения остальных колонок, а также другую важную информацию можно посмотреть в документации на официальном сайте <a href="https://stryker-mutator.io/docs/stryker-net/introduction/">https://stryker-mutator.io/docs/stryker-net/introduction/</a>.</p><p>Также важно отметить, что отчёт доступен для более глубокого и детализированного анализа: можно раскрыть параметры каждого файла и увидеть подробную информацию о том, какие именно изменения были произведены, какие из мутантов выжили и почему.</p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/c2f8db51-6aaa-4dc9-8fa2-10bee3457fef.png" alt="" /><figcaption>красная точка показывает часть кода с выжившим мутаном</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/e1b90d3b-d5fa-44e9-b39e-7c7e847a9287.png" alt="" /><figcaption>кликнув на красную точку, можно увидеть, какая именно мутация выжила</figcaption></figure><p>Stryker.NET умеет генерировать отчеты не только в HTML, но и в других форматах: например, в JSON, который очень удобен для автоматического анализа, если разработчики планируют встроить этот инструмент в свой CI/CD-пайплайн. Кроме того, есть встроенный дашборд, который, к сожалению, невозможно развернуть локально —  он доступен только как online сервис (https://dashboard.stryker-mutator.io).</p><h2>Применение Stryker.NET при разработке банковских продуктов</h2><p>Мы внедрили использование Stryker.NET в проекте для крупного банка, чтобы с помощью этого инструмента решить <b>ряд взаимосвязанных задач</b>. Самая главная проблема заключалась в том, что мы хотели улучшить качество тестов посредством мутационного тестирования, но его проведение вручную —  предельно утомительная и требующая много времени процедура. Ни Product Owners, ни разработчики не были готовы постоянно выделять на это ресурсы.</p><p>Без регулярного мутационного тестирования, нам было практически невозможно оценить текущее состояние всей кодовой базы с точки зрения качества unit тестов. У нас было много unit тестов, мы имели высокий процент Code Coverage, но не знали, насколько эти тесты нас защищают. В свою очередь, без понимания текущего состояния у нас не было возможности устанавливать команде цели по улучшению ситуации.</p><p>На данный момент команда активно <b>использует Stryker.NET на всех этапах разработки</b>.</p><p>Мы столкнулись и с ограничением использования Stryker.NET: попытка его интеграции в CI/CD-пайплайн оказалась неудачной. Это связано с тем, что кодовая база проекта насчитывает несколько миллионов строк, и выполнение всех проверок занимает примерно 12 часов. Однако мы думаем, что на проектах меньшего размера такая интеграция должна сработать.</p><p>Мы выбрали альтернативный вариант: был внедрен регулярный автоматический пост-релизный прогон Stryker.NET по ветке master, в результате которого генерируется сводный отчет. Проводится анализ изменений сводного отчета по всем проектам от релиза к релизу. По данным каждого сводного отчета мы можем оценивать работу конкретных проектных команд, и если их метрика Mutation Score недостаточно высока, – ставить цели по улучшению.</p><figure><img src="https://media.tproger.ru/user-uploads/117400/2025-10-07/cb80b102-c01a-4ed2-8892-af8630d0281f.png" alt="" /><figcaption>сводный отчет по всем проектам solution'на</figcaption></figure><p><b>Резюме</b><b></b></p><p>Итак, мутационное тестирование – мощный инструмент для повышения качества юнит-тестов и, соответственно, качества кода. Оно позволяет не только узнать, какой процент кода покрыт тестами, но и убедиться в том, что эти тесты действительно защищают код от ошибок.</p><p>Внедрение Stryker.NET —  шаг к более надёжной и предсказуемой разработке. Его регулярное использование помогает уверенно вносить изменения, рефакторить код и добавлять новый функционал.</p><p>Мы рекомендуем начать использование Stryker.NET в ваших проектах с ключевых модулей. При этом стоит постоянно делиться опытом с командой, чтобы наиболее эффективно улучшать программный продукт.</p>]]></content:encoded>
    </item>
    <item>
      <title>Курсы по автоматизации тестирования: обучение автотестированию бесплатно и платно</title>
      <link>https://tproger.ru/articles/kursy-po-avtomatizacii-testirovaniya--obuchenie-avtotestirovaniyu-besplatno-i-platno</link>
      <comments>https://tproger.ru/articles/kursy-po-avtomatizacii-testirovaniya--obuchenie-avtotestirovaniyu-besplatno-i-platno?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анастасия Шишкина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kursy-po-avtomatizacii-testirovaniya--obuchenie-avtotestirovaniyu-besplatno-i-platno</guid>
      <description><![CDATA[<p>Лучшие курсы по автотестированию. Рейтинг вариантов онлайн-обучения для тестировщиков, обзор обучающей программы и стоимости курсов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kursy-po-avtomatizacii-testirovaniya--obuchenie-avtotestirovaniyu-besplatno-i-platno">Курсы по автоматизации тестирования: обучение автотестированию бесплатно и платно</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Автоматизирование]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 06 Oct 2025 11:10:59 GMT</pubDate>
      <content:encoded><![CDATA[<p>Современные курсы по автоматизации тестирования открывают путь к карьерному росту и более высоким зарплатам по сравнению с работой только с ручным тестированием. В крупных компаниях такие навыки особенно ценны: автоматизация снижает издержки и ускоряет вывод продукта на рынок. Кроме того, инженер по автоматизации всегда находится «на стыке» разработки и тестирования, что дает уникальные возможности для профессионального развития в обеих сферах.</p><p>Я изучила около 50 обучающих программ и отобрала 30 лучших курсов по автоматизации тестирования для этой статьи. В материале представлены топ-10 курсов, которые стоит рассмотреть в первую очередь, а также дополнительные варианты с акцентом на тестирование на Java и Python. Отдельно я собрала подборки бесплатных уроков и программ, которые помогут начать обучение самостоятельно.</p><p><b>Для некоторых курсов я даже нашла уникальные промокоды, которые позволят получить приятные скидки и бонусы при записи — отличная возможность сэкономить и начать обучение с дополнительными преимуществами!</b></p><h2>ТОП-10 лучших курсов по автоматизации тестирования в 2026 году</h2><ol><li><a href="https://experts1.ru/XBbfwd?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=1">Инженер по автоматизации тестирования</a> от GeekBrains — комплексная программа с углубленным изучением Java, Python и JavaScript.</li><li><a href="https://experts1.ru/qtcByJ?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=2">Инженер по автоматизации тестирования</a> от Skillbox — практико-ориентированный курс с упором на Selenium и CI/CD.</li><li><a href="https://experts1.ru/rauwOB?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=3">Инженер по тестированию</a> от Нетологии — расширенное обучение с модулями по нейросетям и современным фреймворкам.</li><li><a href="https://experts1.ru/xiqXNb?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=4">Инженер по тестированию</a> от Skypro — системная подготовка с созданием собственного фреймворка и дипломным проектом.</li><li><a href="https://experts1.ru/gdFbrE?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=5">Ав­то­ма­ти­зи­ро­ван­ное тестирование на Python</a> от Skillbox — обучение с акцентом на Python, Pytest и DevOps-практики.</li><li><a href="https://experts1.ru/ZcfLbp?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=6">Инженер по тестированию: от новичка до автоматизатора</a> от «Яндекс Практикума» — поэтапное освоение от ручного тестирования до авто-тестов с реальными проектами.</li><li><a href="https://experts1.ru/vAyDxq?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=7">Python QA Engineer</a> от OTUS — интенсивный курс с PyTest, Selenium и упором на DevOps.</li><li><a href="https://experts1.ru/JvBnrm?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=8">Автоматизатор тестирования на Java</a> от «Яндекс Практикума» — обучение Java с нуля и построение CI/CD пайплайнов.</li><li><a href="https://experts1.ru/MLhyjk?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=9">Инженер по автоматизированному тестированию на JavaScript</a> от «Хекслета» — практика с Playwright, Jest и проектами на GitHub.</li><li><a href="https://experts1.ru/xomLeC?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=10">Автоматизатор тестирования на Python</a> от «Яндекс Практикума» — обучение на Python с упором на pytest, Selenium и Docker.</li></ol><p>Курсы по автоматизации тестирования подойдут тем, кто уже знаком с ручным тестированием и хочет перейти на новый уровень профессионального развития. Они будут полезны начинающим айти-специалистам, которые планируют построить карьеру в тестировании и программировании. Также такие программы подойдут разработчикам, желающим расширить компетенции и работать ближе к процессам контроля качества.</p><h2>Онлайн-курсы по автоматизации тестирования</h2><p><b>1. <a href="https://experts1.ru/XBbfwd?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=1">Инженер по автоматизации тестирования</a> | GeekBrains</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 7%</i></p><p><a href="https://experts1.ru/XBbfwd?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=1">Получить скидку &gt;&gt;&gt;</a></p><p>Программа охватывает три популярных языка программирования — Java, Python и JavaScript. Студенты осваивают современные инструменты и практики: Selenium WebDriver, JUnit, Chrome DevTools, Postman, GitLab, Grafana, SQL и Jira. Вы также научитесь созданию автотестов для веб- и мобильных приложений, работе с API и внедрению непрерывной интеграции.</p><p>Обучение ведут практикующие эксперты из Ozon, СКБ «Контур» и других крупных компаний. Курс сочетает теоретические видеоуроки с практикой на реальных проектах, что позволяет студентам формировать портфолио уже во время обучения.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/aca27061-02ad-4861-b6fe-52c21fdb76cd.jpg" alt="" /></figure><ul><li>Стоимость: от 3 358 руб. в месяц при рассрочке</li><li>Длительность: 110 часов теории и 400 часов практики</li><li>Формат обучения: видеоуроки, вебинары, практические задания, проекты, консультации кураторов и проверка домашних заданий</li><li>Сертификат: официальный диплом с лицензией</li></ul><p><b>Кому подойдет:</b> начинающим QA-инженерам, тестировщикам с опытом ручного тестирования, разработчикам, которые хотят освоить автоматизацию.</p><p><b>Преимущества</b></p><ul><li>совместная программа GeekBrains и Skillbox;</li><li>обучение с лицензией государственного образца;</li><li>углубленное изучение Java, Python и JavaScript;</li><li>работа с современными инструментами для тестирования;</li><li>большой объем практики на реальных кейсах;</li><li>персональная обратная связь от экспертов;</li><li>возможность собрать портфолио во время обучения;</li><li>поддержка HR-специалистов для выхода на рынок труда;</li><li>гибкий график и доступ к материалам в любое время;</li><li>рассрочка без переплат и налоговый вычет.</li></ul><p><b>Недостатки</b></p><ul><li>высокая нагрузка по практическим заданиям;</li><li>продолжительный срок обучения.</li></ul><p><b>Программа обучения:</b></p><ul><li>Изучение одного из языков программирования Java/JavaScript/Python</li><li>Создание первых автотестов с использованием Selenium</li><li>Продвинутое автоматизированное тестирование</li><li>Работа с SQL для тестирования баз данных</li><li>Использование Jira для постановки задач и баг-репортов</li><li>Работа с API и Postman</li><li>Настройка CI/CD процессов</li><li>Метрики тестирования и их применение</li><li>Создание UI-тестов</li><li>Итоговые проекты и защита портфолио</li></ul><p><a href="https://experts1.ru/XBbfwd?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=1">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>2. <a href="https://experts1.ru/qtcByJ?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=2">Инженер по автоматизации тестирования</a> | Skillbox</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 60%</i></p><p><a href="https://experts1.ru/qtcByJ?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=2">Получить скидку &gt;&gt;&gt;</a></p><p>Студенты осваивают один из трех языков программирования — Java, Python или JavaScript, знакомятся с современными инструментами, такими как Selenium WebDriver, JUnit, Git и CI/CD, и уже с первых модулей применяют знания на практике, создавая проекты для портфолио.</p><p>Обучение ведут практикующие эксперты из крупных компаний, а доступ к видеолекциям остается бессрочным, что позволяет повторять материал и углублять знания. Курс сочетает теорию с практическими заданиями, включает работу с API и SQL, а также предоставляет поддержку в подготовке к трудоустройству, помогая студентам уверенно стартовать в профессии инженера по автоматизации тестирования.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/81adcbc1-a267-4a35-816d-c67ab315f4b7.jpg" alt="" /></figure><ul><li>Стоимость: от 5 382 руб. в месяц при рассрочке</li><li>Длительность: 9 месяцев</li><li>Формат обучения: видеолекции, практические задания, проекты, вебинары, кураторская поддержка и доступ к мобильной версии платформы</li><li>Сертификат: официальный документ с лицензией</li></ul><p><b>Кому подойдет: </b>junior-тестировщикам, студентам курса «Инженер по тестированию» для продолжения обучения, специалистам, которые хотят перейти от ручных проверок к автоматизации.</p><p><b>Преимущества</b></p><ul><li>обучение с лицензией государственного образца;</li><li>освоение Java, Python и JavaScript;</li><li>практика с первого модуля;</li><li>работа с Selenium IDE и WebDriver;</li><li>изучение CI/CD и GitLab;</li><li>доступ к видеоурокам навсегда;</li><li>мобильная версия платформы;</li><li>помощь кураторов и экспертов;</li><li>дополнительные модули по SQL и API;</li><li>участие в двух финальных проектах;</li><li>возможность пополнить портфолио практическими кейсами;</li><li>обучение с опытными спикерами из OZON и СКБ «Контур»;</li><li>налоговый вычет до 13% от стоимости курса.</li></ul><p><b>Недостатки</b></p><ul><li>курс рассчитан только на специалистов с базовыми знаниями ручного тестирования;</li><li>ограничение по языкам программирования (только Java, Python, JavaScript);</li><li>трудоустройство не гарантировано, есть лишь канал с вакансиями.</li></ul><p><b>Программа обучения</b></p><ul><li>Изучение одного из языков программирования Java/JavaScript/Python</li><li>Первые автотесты во фреймворке Selenium</li><li>Продвинутое автоматизированное тестирование</li><li>Настройка CI/CD и параллельных запусков тестов</li><li>Работа с SQL и тестирование баз данных</li><li>Создание UI-тестов и их интеграция в процесс разработки</li><li>Работа с Git и управление версиями кода</li><li>Тестирование API и практические задачи с Postman</li><li>Итоговые проекты и защита работ</li></ul><p><a href="https://experts1.ru/qtcByJ?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=2">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>3. <a href="https://experts1.ru/rauwOB?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=3">Инженер по тестированию</a> | Нетология</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 7%</i></p><p><a href="https://experts1.ru/rauwOB?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=3">Получить скидку &gt;&gt;&gt;</a></p><p>Программа построена поэтапно: сначала студенты изучают ручное тестирование веб- и мобильных приложений, затем переходят к автоматизированным сценариям на Python или Java, а в расширенном блоке осваивают JavaScript и популярные фреймворки — Cypress, Playwright и Puppeteer. Курс также включает модули по SQL, тестированию API, нагрузочному тестированию сервисов, анализу сетевого трафика и базовым практикам безопасности с использованием OWASP ZAP и Burp Suite.</p><p>Дополнительно студенты знакомятся с Docker, Git, Postman и JMeter, учатся планировать автоматизацию и анализировать результаты тестов. Четыре блока посвящены применению нейросетей для генерации кода автотестов, оптимизации рутинных задач и подготовки документации. В течение курса выполняется более 20 практических проектов, включая групповые задания на основе кейсов от компаний Dragons, OneTwoTrip, QIWI и «Глобус ИТ».</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/2be20663-b13a-4b6f-a090-73ea381dfa9a.jpg" alt="" /></figure><ul><li>Стоимость: от 3 816 руб. в месяц при рассрочке</li><li>Длительность: 14 месяцев (408 часов практики)</li><li>Формат обучения: вебинары, видеолекции, тренажеры для работы с кодом, домашние задания, проекты, командные кейсы, практические вебинары и поддержка экспертов в чате</li><li>Сертификат: диплом о профессиональной переподготовке установленного образца</li></ul><p><b>Кому подойдет:</b> новичкам, желающим войти в профессию с нуля, инженерам по тестированию для перехода к уровню middle, специалистам смежных направлений, которые хотят освоить автоматизацию и инструменты для тестирования игр, мобильных приложений и веб-сервисов.</p><p><b>Преимущества</b></p><ul><li>обновленная программа 2026 года с модулями по нейросетям;пошаговое погружение от ручного тестирования до автоматизации;</li><li>20 крупных проектов для портфолио;</li><li>командная практика по реальным кейсам от партнеров;</li><li>изучение Python, Java и JavaScript на выбор;</li><li>освоение популярных фреймворков для автоматизации;</li><li>практика работы с SQL и тестированием API;</li><li>модули по нагрузочному и функциональному тестированию;</li><li>основы тестирования безопасности и анализа уязвимостей;</li><li>знакомство с Docker и CI/CD;</li><li>поддержка экспертов из VK, Т-Банка, QIWI и других компаний;</li><li>доступ к мобильному приложению для обучения;</li><li>помощь в трудоустройстве и сопровождение после выпуска.</li></ul><p><b>Недостатки</b></p><ul><li>курс рассчитан на системное освоение, быстрых результатов не будет.</li></ul><p><b>Программа обучения</b></p><ul><li>Ручное тестирование веб-приложений</li><li>Git и система контроля версий</li><li>Python для тестировщиков или Java для тестировщиков</li><li>Автоматизированное тестирование на Python или Java</li><li>JavaScript и фреймворки для автоматизации</li><li>Тестирование API и интеграция в CI</li><li>Нагрузочное тестирование сервисов</li><li>Тестирование мобильных приложений</li><li>Основы тестирования безопасности</li><li>Работа с Docker и CI/CD</li><li>Дополнительные модули по нейросетям для тестировщиков</li><li>Итоговые проекты и дипломная работа</li></ul><p><a href="https://experts1.ru/rauwOB?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=3">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>4. <a href="https://experts1.ru/xiqXNb?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=4">Инженер по тестированию</a> | Skypro</b></p><p><i>Используйте промокод Kursfinder, чтобы получить скидку 10%</i></p><p><a href="https://experts1.ru/xiqXNb?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=4">Получить скидку &gt;&gt;&gt;</a></p><p>Программа построена так, чтобы студенты постепенно осваивали как ручное, так и автоматизированное тестирование. Сначала слушатели изучают работу с баг-репортами, тест-кейсами и системами управления тестами, затем переходят к освоению баг-трекинговых сервисов, методик тест-дизайна, регрессионного и дымового тестирования. Используются Chrome DevTools, Postman, SoapUI, SQL и JMeter для анализа работы веб-платформ, API и баз данных.</p><p>Дальше курс погружает студентов в автоматизацию на Python и Java, работу с Pytest, библиотекой requests и формирование отчетности в Allure. Студенты создают UI-тесты с помощью Selenium, изучают CI/CD и практикуются с Docker для автоматизации запуска тестов. В рамках обучения разрабатывается собственный тестовый фреймворк, а завершающим этапом становится дипломный проект. Программа насыщена практическими заданиями — около 70% материалов основаны на реальных кейсах работодателей и фриланс-платформ, что позволяет выпускникам сформировать полноценное портфолио к концу курса.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/64940a6a-3710-4699-99c6-5a7bbb815366.jpg" alt="" /></figure><ul><li>Стоимость: от 5 972 руб. в месяц при рассрочке</li><li>Длительность: 12 месяцев</li><li>Формат обучения: онлайн-занятия, видеолекции, практические задания, работа с наставниками, тренажеры, проекты и дипломная работа</li><li>Сертификат: диплом о профессиональной переподготовке</li></ul><p><b>Кому подойдет:</b> новичкам без опыта в IT, студентам и выпускникам других направлений, специалистам смежных областей, желающим перейти в сферу тестирования.</p><p><b>Преимущества</b></p><ul><li>системная программа с базовыми и продвинутыми блоками;</li><li>70% практики на реальных задачах;</li><li>изучение баг-трекинговых систем и TMS;</li><li>работа с Chrome DevTools и кросс-браузерным тестированием;</li><li>освоение Postman и SoapUI;</li><li>практика с SQL и нагрузочным тестированием в JMeter;</li><li>автоматизация тестов на Python и Java;</li><li>знакомство с Pytest и библиотекой requests;</li><li>отчетность и визуализация через Allure;</li><li>практика с Selenium WebDriver;</li><li>освоение принципов CI/CD и Docker;</li><li>создание собственного фреймворка для автотестов;</li><li>карьерные консультации и помощь в трудоустройстве.</li></ul><p><b>Недостатки</b></p><ul><li>длительный срок обучения (1 год);</li><li>упор на Python и Java, другие языки не рассматриваются.</li></ul><p><b>Программа обучения</b></p><ul><li>Основы функционального тестирования</li><li>Работа с баг-репортами и баг-трекинговыми системами</li><li>Тест-кейсы и системы управления тестами</li><li>Уровни тестирования и тест-дизайн</li><li>Smoke- и регрессионное тестирование</li><li>Тестирование документации и метрики</li><li>Тестирование веб-приложений и работа с HTML/CSS</li><li>Chrome DevTools и кросс-браузерное тестирование</li><li>Git и основы CI/CD</li><li>Тестирование API с Postman и SoapUI</li><li>Нагрузочное тестирование с JMeter</li><li>Основы SQL и работа с базами данных</li><li>Автоматизация тестирования на Python или Java</li><li>Pytest, requests и Allure для отчетности</li><li>UI-тесты и Selenium WebDriver</li><li>Docker и настройка CI/CD процессов</li><li>Дипломный проект и защита портфолио</li></ul><p><a href="https://experts1.ru/xiqXNb?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=4">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>5. <a href="https://experts1.ru/gdFbrE?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=5">Ав­то­ма­ти­зи­ро­ван­ное тестирование на Python</a> | Skillbox</b></p><p><i>Используйте промокод kursfinder, чтобы получить скидку 50%</i></p><p><a href="https://experts1.ru/gdFbrE?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=5">Получить скидку &gt;&gt;&gt;</a></p><p>На занятиях студенты осваивают написание чистого кода на Python, применяют принципы объектно-ориентированного и функционального программирования, разрабатывают архитектуру тестов и объединяют их в тестсьюты. Особое внимание в программе уделяется работе с DevTools и PyCharm, использованию Pytest и Selenium для построения автотестов, а также созданию сценариев на основе паттернов тестирования.</p><p>Отдельные блоки посвящены DevOps-инструментам: студенты интегрируют тесты в Jenkins, настраивают параллельные и последовательные проверки и внедряют их в CI/CD-процессы. Курс также охватывает работу с Git, решение конфликтов версий и ведение командных проектов. Теория сразу закрепляется практикой, а итогом становится полноценное портфолио готовых кейсов. Программу ведут эксперты: Дарья Манухина, специалист с опытом работы в МТС и Skyeng, и Павел Громов, backend-разработчик с практикой преподавания и участия в конференциях по тестированию.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/d1993c78-089e-4b56-a32a-3974a7224f56.jpg" alt="" /></figure><ul><li>Стоимость: от 5 028 руб. в месяц при рассрочке</li><li>Длительность: 9 месяцев</li><li>Формат обучения: онлайн-лекции, практические задания, вебинары, индивидуальная проверка домашних работ кураторами, обратная связь и доступ к материалам без ограничения по времени</li><li>Сертификат: диплом о профессиональной переподготовке</li></ul><p>Кому подойдет: начинающим тестировщикам, которые хотят с нуля освоить Python и автоматизацию; junior-специалистам для повышения уровня знаний; middle-инженерам по тестированию, желающим закрепить практику и выйти на новый уровень.</p><p><b>Преимущества</b></p><ul><li>обучение с упором на Python;</li><li>освоение Pytest и Selenium;</li><li>практика с DevTools и PyCharm;</li><li>изучение принципов тест-дизайна;</li><li>написание автотестов для реальных кейсов;</li><li>построение архитектуры тестов и паттернов;</li><li>работа с Jenkins и CI/CD;</li><li>интеграция тестов с Git;</li><li>коммит, merge и разрешение конфликтов версий;</li><li>практика на примере веб- и API-проектов;</li><li>участие экспертов-практиков;</li><li>доступ к курсу навсегда;</li><li>бесплатный бонус — год английского языка.</li></ul><p><b>Недостатки</b></p><ul><li>упор на один язык программирования;</li><li>значительный объем теории, требующий регулярной практики;</li><li>курс рассчитан на 9 месяцев, быстрых результатов не будет;ограничение по выбору инструментов вне экосистемы Python.</li></ul><p><b>Программа обучения</b></p><ul><li>Python Basic</li><li>Python Advanced</li><li>Введение в автоматизацию тестирования API</li><li>Автотесты на Python. Базовая часть</li><li>Автотесты на Python. Продвинутая часть</li><li>DevOps для тестировщиков</li><li>Итоговые проекты и дипломная работа</li></ul><p><a href="https://experts1.ru/gdFbrE?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=5">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>6. <a href="https://experts1.ru/ZcfLbp?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=6">Инженер по тестированию: от новичка до автоматизатора</a> | Яндекс Практикум</b></p><p><i>Купите любой курс с выгодой до 20% при оплате сразу или получите скидку 7% за прохождение бесплатной части курса за неделю</i></p><p><a href="https://experts1.ru/ZcfLbp?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=6">Получить скидку &gt;&gt;&gt;</a></p><p>Обучение начинается с освоения принципов тестирования приложений и работы с тестовой документацией, после чего студенты переходят к созданию автотестов на Java или Python. В программе используются инструменты Charles, Postman, Swagger, DevTools, Selenium WebDriver, Pytest, Allure и Jenkins, а также SQL для работы с базами данных. Знания сразу закрепляются практикой: за время курса слушатели выполняют 10 реальных проектов, формируя портфолио для будущего трудоустройства.</p><p>Вы научитесь также тестированию веб- и мобильных приложений, API и работе с инфраструктурой, что позволяет применять навыки в различных сферах — от банковских сервисов до игровых компаний. Обучение проводят эксперты из Яндекса и крупных IT-компаний, включая Константина Булатова, Кристину Тимошенко и Романа Орлова. Дополнительно студенты изучают применение нейросетей в тестировании и получают навыки подготовки резюме для привлечения работодателей.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/994573e9-329d-4c03-bd83-e47dd6dd491a.jpg" alt="" /></figure><ul><li>Стоимость: от 3 225 руб./мес или 79 000 руб. единым платежом</li><li>Длительность: 9 месяцев</li><li>Формат обучения: вебинары с практикующими тестировщиками, видеолекции, интерактивный учебник, командные проекты, поддержка наставников и ревьюеров, доступ к материалам навсегда</li><li>Сертификат: диплом о профессиональной переподготовке от АНО ДПО «Образовательные технологии Яндекса»</li></ul><p><b>Кому подойдет:</b> новичкам без технического образования, желающим освоить тестирование; джунам, планирующим выйти на уровень автоматизации; специалистам других сфер, рассматривающим карьерный переход в IT.</p><p><b>Преимущества</b></p><ul><li>освоение ручного и автоматизированного тестирования;</li><li>выбор языка для автотестов (Java или Python);</li><li>практика на 10 реальных проектах;</li><li>инструменты Charles, Postman, Swagger, SQL, Selenium, Jenkins;</li><li>работа с мобильными приложениями и API;</li><li>модуль по применению нейросетей;</li><li>обучение у специалистов Яндекса и EPAM;</li><li>поддержка наставников и ревьюеров;</li><li>доступ к материалам курса без ограничений;</li><li>помощь в трудоустройстве через карьерный центр;</li><li>возможность совмещать учебу с работой;</li><li>налоговый вычет до 19 500 руб.;</li><li>гарантия возврата средств при отказе от курса.</li></ul><p><b>Недостатки</b></p><ul><li>высокая учебная нагрузка (от 15 часов в неделю);</li><li>основной упор на начинающих.</li></ul><p><b>Программа обучения</b></p><ul><li>Бесплатный вводный модуль</li><li>Основы тестирования</li><li>Регрессионное тестирование и ретест багов</li><li>Тестирование фичи от анализа до баг-репорта</li><li>Расширенное тестирование веб-приложений</li><li>Тестирование мобильных приложений</li><li>Тестирование API</li><li>Основы баз данных</li><li>Автоматизированное тестирование на Java</li><li>Автоматизированное тестирование на Python</li><li>Итоговый проект</li><li>Нейросети для тестировщиков</li><li>Карьерный трек</li></ul><p><a href="https://experts1.ru/ZcfLbp?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=6">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>7. <a href="https://experts1.ru/vAyDxq?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=7">Python QA Engineer</a> | OTUS</b></p><p>Программа построена так, чтобы студенты научились работать с фреймворком PyTest, автоматизировать UI- и API-тесты, использовать Selenium 4 и Appium, проводить тестирование REST API и настраивать процессы в системах непрерывной интеграции. Выпускники осваивают запуск автотестов в CI/CD, анализ результатов и работу с инфраструктурой.</p><p>Преподаватели-практики объясняют материал на реальных кейсах и проводят вебинары с возможностью задавать вопросы и получать подробную обратную связь. Учебный процесс включает не только теорию, но и регулярные практические задания, работу с инструментами диагностики в Linux, а также итоговый проект, в рамках которого студенты создают собственный тестовый фреймворк, пишут UI- и API-тесты и защищают проект перед экспертами.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/bbca2fc4-0273-48b4-a6c9-e3cf586c9102.jpg" alt="" /></figure><ul><li>Стоимость: 121 000 руб. (есть рассрочка и налоговый вычет до 13%)</li><li>Длительность: 6 месяцев</li><li>Формат обучения: вебинары дважды в неделю, доступ к записям и материалам, практические задания, выпускной проект, поддержка в закрытом чате</li><li>Сертификат: официальный сертификат OTUS о прохождении курса</li></ul><p><b>Кому подойдет:</b> ручным тестировщикам, желающим освоить автоматизацию; специалистам, работающим с другими языками, и планирующим перейти на Python; QA-инженерам, которые хотят углубить знания и систематизировать навыки.</p><p><b>Преимущества</b></p><ul><li>упор на практику с реальными кейсами;</li><li>изучение PyTest как основного фреймворка;</li><li>работа с Selenium 4 и Appium;</li><li>тестирование REST API;</li><li>освоение DevOps-практик;</li><li>использование Linux для диагностики;</li><li>обучение у экспертов-практиков;</li><li>участие в живых вебинарах;</li><li>обратная связь по домашним заданиям;</li><li>доступ к закрытому сообществу;</li><li>выпускной проект для портфолио;</li><li>доступ к репозиторию с примерами тестов;</li><li>возможность оплаты курса работодателем.</li></ul><p><b>Недостатки</b></p><ul><li>обязательное вступительное тестирование перед началом;</li><li>курс рассчитан на студентов с базовыми знаниями Python;</li><li>высокая учебная нагрузка (две вечерние сессии в неделю).</li></ul><p><b>Программа обучения</b></p><ul><li>Введение в автоматизацию тестирования</li><li>Тестирование API</li><li>Тестирование UI</li><li>DevOps</li><li>Мобильное тестирование</li><li>Работа с бэкендом</li><li>Другие виды тестирования</li><li>Подготовка к поиску работы</li><li>Проектный модуль и защита выпускного проекта</li></ul><p><a href="https://experts1.ru/vAyDxq?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=7">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>8. <a href="https://experts1.ru/JvBnrm?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=8">Автоматизатор тестирования на Java</a>  | Яндекс Практикум</b></p><p><i>Купите любой курс с выгодой до 20% при оплате сразу или получите скидку 7% за прохождение бесплатной части курса за неделю</i></p><p><a href="https://experts1.ru/JvBnrm?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=8">Получить скидку &gt;&gt;&gt;</a></p><p>В рамках курса студенты осваивают основы языка Java, учатся писать код и применять его для создания автотестов для веб-приложений и API. Программа включает популярные инструменты тестировщика: IntelliJ IDEA, Maven, Git, Selenium WebDriver, Selenide, JUnit, Postman, REST Assured, Allure и Jenkins. Шаг за шагом слушатели погружаются в процесс автоматизации — от базовых конструкций и написания юнит-тестов до разработки архитектуры тестирования и построения полноценного пайплайна CI/CD.</p><p>Отдельные блоки посвящены тестированию интерфейсов, API и баз данных, а также внедрению подхода Behavior-Driven Development с использованием Cucumber и Gherkin. На занятиях студенты выполняют проекты, максимально приближенные к реальным задачам индустрии, и получают обратную связь от опытных специалистов. Завершающим этапом курса становится итоговая работа, где необходимо покрыть автотестами веб-приложение, API и написать юнит-тесты, объединяя все полученные навыки.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/fb12096a-308f-4908-b879-89069335f240.jpg" alt="" /></figure><ul><li>Стоимость: от 4 204 руб. в месяц (есть рассрочка и налоговый вычет)</li><li>Длительность: 5–6 месяцев (в зависимости от тарифа)</li><li>Формат обучения: онлайн-лекции, интерактивные задания в тренажере, вебинары каждые 2 недели, проекты для портфолио, индивидуальные встречи с наставником, обратная связь от экспертов</li><li>Сертификат: диплом о профессиональной переподготовке</li></ul><p><b>Кому подойдет: </b>ручным тестировщикам, которые хотят перейти в автоматизацию; junior-специалистам, готовым укрепить навыки и освоить Java; действующим QA-инженерам, планирующим карьерный рост.</p><p><b>Преимущества</b></p><ul><li>освоение Java с нуля;</li><li>обучение работе с IntelliJ IDEA и Maven;</li><li>практика с Git и GitHub;</li><li>изучение юнит-тестирования на JUnit 5;</li><li>знакомство с Mockito и DI;</li><li>написание автотестов с Selenium и Selenide;</li><li>тестирование интерфейсов через DevTools;</li><li>автоматизация API с использованием Postman и REST Assured;</li><li>отчетность в Allure;</li><li>построение пайплайнов CI/CD в Jenkins;</li><li>работа с Docker и Kubernetes;</li><li>освоение BDD и Cucumber;</li><li>проектная работа для портфолио.</li></ul><p><b>Недостатки</b></p><ul><li>требуется регулярное выделение времени (не менее 15 часов в неделю);</li><li>часть материалов доступна только в расширенной версии.</li></ul><p><b>Программа обучения</b></p><ul><li>Введение в профессию и основы Git</li><li>Изучение Java: базовый и продвинутый уровни</li><li>Объектно-ориентированное программирование и базовые конструкции</li><li>Юнит-тестирование и работа с JUnit, Mockito</li><li>UI-тестирование на Selenium и Page Object Model</li><li>Тестирование API с Postman, Swagger, REST Assured</li><li>Работа с базами данных и SQLCI/CD, Docker, Kubernetes, Jenkins</li><li>Behavior-Driven Development с Cucumber и Gherkin</li><li>Работа с асинхронными сервисами и Kafka</li><li>Итоговый проект и защита работы</li></ul><p><a href="https://experts1.ru/JvBnrm?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=8">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>9. <a href="https://experts1.ru/MLhyjk?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=9">Инженер по автоматизированному тестированию на JavaScript</a> | Хекслет</b></p><p>С первых занятий студенты начинают программировать на JavaScript, осваивают построение автотестов и их применение к реальным веб-приложениям. Вы научитесь работе с Playwright и Jest, а также интеграционному, модульному и e2e-тестированию. Обучение построено на практических заданиях и проектах: студенты пишут автотесты для учебных сервисов, работают с Git, осваивают CI/CD и Docker, создавая полноценные проекты для портфолио.</p><p>Теоретическая часть подается в доступной форме и дополнена большим количеством упражнений для закрепления материала. Учебный процесс сопровождают практикующие инженеры по тестированию, которые помогают разбираться в сложных темах и корректируют траекторию обучения. Финальный акцент сделан на самостоятельной реализации тестов, проверке приложений с разных сторон и работе с инструментами анализа качества, что позволяет выпускникам выйти на рынок с реальными навыками автоматизации.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/a4e6e2c0-6d6f-4e26-8626-c6cbc54317d9.jpg" alt="" /></figure><ul><li>Стоимость: от 85 000 руб. (есть рассрочка и акции)</li><li>Длительность: 8 месяцев</li><li>Формат обучения: теория в текстовом и видеоформате, практические задания, проекты на GitHub, домашние упражнения, вебинары, код-ревью и наставничество</li><li>Сертификат: официальный документ Хекслета, ценимый работодателями</li></ul><p><b>Кому подойдет: </b>ручным тестировщикам, которые переходят в автоматизацию; айти-специалистам, решившим сменить направление; действующим инженерам по тестированию для обновления знаний.</p><p><b>Преимущества</b></p><ul><li>упор на практику с первых занятий;</li><li>изучение JavaScript в контексте тестирования;</li><li>освоение Playwright для UI-тестов;</li><li>работа с Jest и Vitest для модульного тестирования;</li><li>интеграция Git и командной строки в учебный процесс;</li><li>проекты с реальными бизнес-задачами;</li><li>портфолио на GitHub с завершенными проектами;</li><li>коммерческие задачи от партнеров;</li><li>наставничество от опытных инженеров;</li><li>карьерное сопровождение через Хекслет.Карьеру;</li><li>подготовка резюме и собеседований;</li><li>поддержка при трудоустройстве;</li><li>возможность академического отпуска при необходимости.</li></ul><p><b>Недостатки</b></p><ul><li>интенсивный формат может быть сложен для новичков;</li><li>часть проектов предполагает самостоятельное погружение без пошаговых инструкций.</li></ul><p><b>Программа обучения</b></p><ul><li>Основы JavaScript и настройка окружения</li><li>Работа с Git и командной строкой</li><li>Юнит- и интеграционное тестирование на Jest</li><li>Асинхронное программирование и тестирование API</li><li>E2E-тестирование с Playwright</li><li>Работа с HTML, CSS и DOM API</li><li>Тестирование бэкенда и взаимодействие с базами данных</li><li>CI/CD и основы Docker</li><li>Учебные и коммерческие проекты для портфолио</li><li>Итоговый проект с полной автоматизацией веб-приложения</li></ul><p><a href="https://experts1.ru/MLhyjk?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=9">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>10. <a href="https://experts1.ru/xomLeC?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=10">Автоматизатор тестирования на Python</a> | Яндекс Практикум</b></p><p><i>Купите любой курс с выгодой до 20% при оплате сразу или получите скидку 7% за прохождение бесплатной части курса за неделю</i></p><p><a href="https://experts1.ru/xomLeC?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=10">Получить скидку &gt;&gt;&gt;</a></p><p>Студенты осваивают базовый синтаксис Python и сразу начинают применять его для написания автотестов. Программа включает работу с pytest, Selenium WebDriver, Allure, Git, DevTools, а также использование XPath и CSS-локаторов. Вас научат архитектуре приложений, методам тестирования API и организации тестовых сценариев. Обучение строится на практике: студенты создают проекты для портфолио, покрывают тестами веб-приложения, API и пишут юнит-тесты с использованием моков, стабов и Spy. Курс разработан опытными инженерами по тестированию из Яндекса и других крупных IT-компаний, что гарантирует актуальность материалов и их связь с реальной индустрией.</p><p>Теоретический материал подается в удобной форме и закрепляется интерактивными заданиями в тренажере, а регулярные вебинары позволяют разбирать сложные кейсы вместе с экспертами. В результате выпускники получают навыки построения процессов автоматизации, работы с CI/CD и Docker, а также опыт создания комплексных отчетов о тестировании. Дополнительно студенты формируют портфолио с реальными проектами, которое подтверждает их компетенции перед работодателями.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2025-10-06/05ce0e14-08f1-4391-bfe7-4f2cd4e638b5.jpg" alt="" /></figure><ul><li>Стоимость: от 4 204 руб. в месяц (есть рассрочка и налоговый вычет)</li><li>Длительность: 5–6 месяцев (в зависимости от тарифа)</li><li>Формат обучения: видеолекции и текстовые материалы, тренажер для практики, домашние задания, вебинары каждые 2 недели, проекты для портфолио, обратная связь от наставников</li><li>Сертификат: диплом о профессиональной переподготовке или справка об обучении</li></ul><p><b>Кому подойдет:</b> ручным тестировщикам, стремящимся перейти в автоматизацию; инженерам QA, которые хотят повысить квалификацию; айти-специалистам, решившим освоить новое направление.</p><p><b>Преимущества</b></p><ul><li>обучение на Python с нуля;</li><li>освоение pytest для юнит-тестов;</li><li>практика с Selenium WebDriver;</li><li>работа с DevTools и XPath;</li><li>создание отчетов в Allure;</li><li>тестирование API с Postman и Swagger;</li><li>изучение принципов архитектуры приложений;</li><li>работа с базами данных и SQL;</li><li>освоение CI/CD и Docker;</li><li>практика в реальных проектах;</li><li>7–10 проектов для портфолио;</li><li>доступ к вебинарам и Q&amp;A-сессиям;</li><li>поддержка наставников и экспертов Яндекса.</li></ul><p><b>Недостатки</b></p><ul><li>высокая нагрузка (нужно минимум 15 часов в неделю);</li><li>часть тем и проектов доступна только в расширенной версии;</li><li>полностью онлайн-формат без живых встреч;</li><li>для новичков могут быть сложны темы ООП и CI/CD.</li></ul><p><b>Программа обучения</b></p><ul><li>Введение и знакомство с Git</li><li>Основы Python и базовые конструкции</li><li>Объектно-ориентированное программирование</li><li>Инкапсуляция и обработка исключений</li><li>Юнит-тестирование с использованием pytest</li><li>UI-тестирование на Selenium и DevTools</li><li>Применение Page Object Model и Allure</li><li>Тестирование API и работа с Postman, Swagger</li><li>Основы архитектуры и организация процессов тестирования</li><li>Итоговый проект с полной автоматизацией веб-приложения</li><li>Дополнительный модуль по SQL и тестированию баз данных</li><li>CI/CD и работа с Docker (в расширенной версии)</li></ul><p><a href="https://experts1.ru/xomLeC?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=10">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><h2>Еще 4 курса по автоматизации тестирования</h2><p>Я нашла также дополнительные курсы по автоматизации тестирования, которые помогут освоить востребованные инструменты и навыки для построения карьеры в QA. Эти программы отличаются форматом, длительностью и набором технологий, но все они ориентированы на практику и подготовку к работе с реальными проектами.</p><ul><li><a href="https://experts1.ru/hfDcaI?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">QA-инженер по тестированию: с нуля до автоматизатора</a> от «Хекслета». Курс построен так, чтобы с нуля подготовить специалиста к профессии QA-инженера и постепенно довести его до уровня автоматизатора на JavaScript. В программе много практики: студенты тестируют реальные веб- и мобильные приложения, пишут баг-репорты, создают автотесты с использованием Vitest и Playwright, осваивают работу с API и SQL. Обучение сопровождается проектами для портфолио и консультациями наставников, а завершение курса подтверждается сертификатами по двум профессиям.</li><li><a href="https://experts1.ru/mlKQav?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Тестировщик в IT</a> от Yagla. Курс рассчитан на тех, кто хочет быстро войти в IT и освоить профессию тестировщика с нуля. Программа охватывает ручное и автоматизированное тестирование, работу с базами данных, инструментами Git, SQL, Selenium, Postman и другими технологиями. Обучение построено на практике и реальных кейсах, к окончанию курса формируется портфолио и выдается сертификат, подтверждающий квалификацию.</li><li><a href="https://experts1.ru/HwfVya?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Тестирование с Pytest</a> от «Хекслета». Курс обучает работе с Pytest и современными техниками автоматизированного тестирования на Python. Студенты осваивают модульные тесты, фикстуры, подход TDD, а также продвинутые инструменты вроде моков, стабов и манкипатчинга. Занятия построены на практике с использованием виртуальной среды и автоматической проверкой решений, что позволяет сразу закреплять полученные знания.</li><li><a href="https://experts1.ru/vgbHtD?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Инженер по тестированию</a> от Skillbox. Программа готовит специалистов по ручному и автоматизированному тестированию с упором на современные ИИ-инструменты. В процессе обучения студенты осваивают Java, Python или JavaScript для написания автотестов, учатся работать с Postman, Selenium, SQL, Git и Unity, а также тестируют реальные проекты от компаний-партнеров. В курс добавлены блоки по тестированию мобильных приложений и игр, что расширяет возможности трудоустройства и формирует сильное портфолио.</li></ul><h2>Еще 2 курса по автоматизации тестирования на Java</h2><p>Если вы хотите углубить знания в автоматизации тестирования на Java, эти два курса станут отличным выбором. Они помогут закрепить навыки создания автотестов, работы с современными инструментами и подготовят к реальным задачам в IT-индустрии.</p><ul><li><a href="https://experts1.ru/ygJzmA?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Автоматизация тестирования ПО (Java). Basic</a> от Level Up. Курс знакомит с основами автоматизации тестирования на Java и учит применять популярные инструменты вроде Selenium, Selenide, Cucumber, JUnit и RestAssured. Обучение построено на сочетании теории и практики, предполагает работу с CI/CD и Jenkins, а также формирование базовых навыков написания автотестов. По окончании программы студенты получают представление о роли инженера по автоматизации и приобретают навыки, достаточные для работы на позиции junior.</li><li><a href="https://experts1.ru/kxMyQe?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Автоматизированное тестирование ПО на Java </a>от Университета «Иннополис». Программа знакомит с автоматизацией тестирования на Java и учит работать с ключевыми инструментами — Selenium, Selenide, RestAssured, Docker и CI/CD. Студенты осваивают написание автотестов для UI и API, работу с базами данных и основы BDD. Обучение построено на практических заданиях и завершается дипломом о профессиональной переподготовке, что позволяет претендовать на позиции AQA-инженера.</li></ul><h2>Еще 4 курса по автоматизации тестирования на Python</h2><p>Для тех, кто уже знаком с основами автоматизации тестирования на Python, мы подготовили подборку еще четырех курсов. Они помогут прокачать навыки, освоить новые инструменты и получить опыт работы с реальными проектами.</p><ul><li><a href="https://experts1.ru/mXLcjl?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Автоматизация тестирования на Python</a> от «Контур.Школы». Программа обучает автоматизации тестирования на Python и помогает создавать автотесты для API, мобильных и веб-приложений. В процессе занятий студенты осваивают PyTest, Selenium, а также принципы Page Object Model. Курс сочетает теорию с практическими задачами и завершается итоговым тестом, после которого выдается официальный документ о повышении квалификации.</li><li><a href="https://experts1.ru/EzpixF?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Тестировщик на Python</a> от SkillFactory. Программа обучает ручному и автоматизированному тестированию, в том числе работа с Python, PyTest, Selenium, SQL и REST API. В процессе обучения студенты выполняют проекты от реальных компаний, составляют баг-репорты и тест-кейсы, проходят практику на коммерческих сервисах. По окончании выдается диплом о профессиональной переподготовке или сертификат, что позволяет претендовать на позиции тестировщика и QA-инженера.</li><li><a href="https://experts1.ru/wgraUY?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Автоматизированное тестирование на Python</a> от EasyUM. Курс помогает освоить автоматизацию тестирования на Python с нуля и шаг за шагом перейти к созданию автотестов для веб-приложений и API. В программе есть работа с PyTest, Selenium, Docker и Jenkins, а также основы DevOps. Обучение построено на практике, есть реальные задания и проекты для портфолио, а по завершении выдается сертификат и проводится подготовка к трудоустройству.</li><li><a href="https://experts1.ru/sJUxmi?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Автоматизированное тестирование на Python</a> от Teachmeskills. Курс учит создавать автотесты на Python с использованием Selenium, PyTest, Docker и Jenkins. В процессе обучения студенты осваивают тестирование API и веб-приложений, а также работу с базами данных и Linux. Программа построена на практике, предполагает также разработку реального проекта для портфолио и завершается защитой диплома с поддержкой в трудоустройстве.</li></ul><h2>Бесплатные курсы по автоматизации тестирования</h2><p>Также нашла бесплатные курсы по автоматизации тестирования, которые подойдут для первого знакомства с профессией. Подобные программы помогают без вложений попробовать себя в написании автотестов и понять, насколько эта сфера интересна. Бесплатный формат удобен для начинающих, а полученные знания можно развить уже на более серьезных учебных программах.</p><p><b>1. <a href="https://experts1.ru/eavRjG?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Легкий старт в профессию тестировщика</a> — Skillbox</b></p><p>Этот интенсив подойдет новичкам, которые хотят попробовать себя в тестировании и понять, насколько им близка эта профессия. За несколько дней слушатели познакомятся с базовыми принципами ручного и автоматизированного тестирования, узнают о юзабилити и стандартах работы в IT-компаниях. Участники получат практику в поиске ошибок, составлении баг-репортов и запуске первых автотестов с помощью Selenium IDE. Такой формат обучения позволяет быстро погрузиться в профессию и сформировать первые навыки.</p><p><b>Главное о курсе:</b></p><ul><li>знакомство с процессами тестирования и профессией QA;проведение первых автотестов с использованием Selenium IDE;</li><li>освоение правил юзабилити и нефункционального тестирования;</li><li>практика в составлении баг-репортов и работе с ошибками;</li><li>выполнение интерактивных заданий на реальных примерах.</li></ul><p><b>2. <a href="https://experts1.ru/jGkVus?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Основы Java для автоматизации тестирования</a> — Stepik</b></p><p>Курс рассчитан на тех, кто хочет освоить Java с нуля и в дальнейшем применять его для автоматизации тестирования. Он подойдет будущим тестировщикам-автоматизаторам, а также всем, кто хочет разобраться в основах языка и понять, стоит ли продолжать обучение. Программа построена так, чтобы постепенно освоить ключевые элементы Java, научиться работать с ООП и закрепить знания практикой. Обучение проходит в удобном темпе и позволяет вернуться к материалам в любое время.</p><p><b>Главное о курсе:</b></p><ul><li>базовые знания языка Java и основы ООП;</li><li>создание первых программ и работа с массивами, строками и классами;</li><li>использование принципов инкапсуляции, наследования и полиморфизма;</li><li>практика обработки исключений и документирования кода;</li><li>более 70 часов обучения с тестами и интерактивными заданиями.</li></ul><p><b>3. <a href="https://experts1.ru/jdXwqC?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Тестировщик программного обеспечения: с нуля до первых проектов</a> — «Содействие занятости»  </b></p><p>Курс предназначен для тех, кто хочет освоить профессию тестировщика с нуля и получить востребованные навыки работы с современными инструментами. Он подойдет людям, ищущим работу, желающим сменить профессию или повысить квалификацию. Программа дает понимание основ тестирования, практику работы с SQL и Postman, а также опыт оформления баг-репортов. Обучение бесплатное, проводится онлайн и завершается выдачей документа установленного образца.</p><p><b>Главное о курсе:</b></p><ul><li>знакомство с базовыми принципами тестирования ПО;</li><li>работа с тестовой документацией и баг-репортами;</li><li>практика в SQL и тестировании API через Postman;</li><li>использование инструментов Jira, Яндекс Трекера, TestRail и DevTools;</li><li>выполнение итогового проекта и получение удостоверения о квалификации.</li></ul><p><b>4. <a href="https://experts1.ru/ubEkcF?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Автоматизация тестирования с помощью Selenium и Python</a> — Stepik</b></p><p>Курс рассчитан на начинающих специалистов в тестировании, которые хотят перейти к автоматизации и освоить работу с Python и Selenium. Он подойдет тем, кто уже знаком с базовой терминологией QA и хочет научиться писать автотесты для веб-интерфейсов. Программа помогает освоить популярные фреймворки, применить хорошие практики проектирования тестов и получить навыки, востребованные на рынке. Обучение бесплатное и завершается сертификатом.</p><p><b>Главное о курсе:</b></p><ul><li>написание автотестов на Python с использованием Selenium;</li><li>работа с веб-элементами и построение стабильных тестов;</li><li>применение pytest и других фреймворков для автоматизации;</li><li>использование паттерна PageObject для удобной поддержки сценариев;</li><li>практика работы с git и Github.</li></ul><p><b>5. <a href="https://experts1.ru/UdirwN?sub1=tproger-kf&amp;sub2=kursy-po-avtomatizaczii-testirovaniya&amp;sub4=netop">Тесты и тренажеры для тестировщиков</a> — LearnQA </b></p><p>Курс подойдет тем, кто только начинает путь в тестировании и хочет оценить свой уровень знаний или закрепить основы на практике. Он поможет проверить понимание популярных инструментов, выявить пробелы и подготовиться к собеседованиям. Формат построен так, чтобы студент мог не только пройти теорию, но и потренироваться в симуляторах реальных задач. Такой подход позволяет получить уверенность перед стартом карьеры.</p><p><b>Главное о курсе:</b></p><ul><li>тесты по Git, SQL, Java, Bash и базовым знаниям IT;</li><li>тренажеры с эмуляцией рабочих ситуаций и поиском багов;</li><li>подготовка к собеседованиям через практические задания;</li><li>возможность закрепить знания и проверить себя в удобном формате.</li></ul><h2>Видеоуроки по автоматизации тестирования</h2><p>Я предлагаю не игнорировать, а просмотреть и видеоуроки по автоматизации тестирования, чтобы еще глубже понять тему. Это дает возможность наглядно увидеть процесс работы и повторить действия за преподавателем. Видео поможет закрепить теорию и быстрее перейти к практике.</p><ol><li><a href="https://www.youtube.com/playlist?list=PLhoN48bkW44GNtpS3qUvCHXbBCVEGZjRG">Введение в автоматизацию для QA</a> — Simple Automation. Плейлист подойдет тем, кто хочет разобраться в автоматизации тестирования с нуля и получить базовые навыки работы с основными инструментами. Видеоуроки построены последовательно — от теории и языка Java до работы с Git, Maven, JUnit, REST Assured и Selenium WebDriver. Такой формат помогает шаг за шагом освоить практику и закрепить знания через наглядные примеры.</li><li><a href="https://www.youtube.com/playlist?list=PLB2iiSfKWtvykq9s0plSVI_Du60i0iphU">Автоматизация тестирования с Pytest и Python</a> — SolveMe. Плейлист подойдет тем, кто хочет научиться работать с Pytest и применять Python для автоматизации тестирования на практике. В уроках разбираются базовые приемы написания автотестов, работа с фикстурами, декораторами и генерацией отчетов. Отдельные видео посвящены использованию Pydantic, SQLAlchemy и Docker, что позволяет получить более глубокое понимание современного тестирования.</li><li><a href="https://www.youtube.com/playlist?list=PLZqgWWF4O-ziBZVXN19WcRHPM5DkH672c">Автоматизация тестирования java + selenium webdriver</a> — Алексей Маршал. Плейлист поможет тем, кто хочет освоить автоматизацию тестирования на Java с использованием Selenium WebDriver. В видеоуроках объясняются основы работы с DOM, локаторами, XPath и CSS-селекторами, а также показано, как взаимодействовать с элементами интерфейса. Отдельное внимание уделяется ожиданиям, работе с модальными окнами, вкладками браузера и построению фреймворка на основе PageObject.</li><li><a href="https://www.youtube.com/playlist?list=PLu2jtpHCDMuvb2o_uQesvGZEzbovgz_3i">Автоматизация на пальцах</a> — Стас Пешкур. Плейлист создан для тех, кто хочет разобраться в автоматизации тестирования на практике и понять ее основы простым языком. В видео разбираются ключевые инструменты и подходы, работа с API-тестами, использование Rest Assured, Cucumber, Selenide и Page Object. Также показаны примеры настройки Maven, Jenkins и Gitlab CI/CD, создания отчетов в Allure и отладки кода на реальных задачах.</li><li><a href="https://www.youtube.com/playlist?list=PLSf2MMXhdBGqMmU6R3pObw223LesJ9ddl">QA с нуля</a> — Александр Хвастович. Этот плейлист подойдет тем, кто только начинает путь в тестировании и хочет понять основы профессии с нуля. В видеоуроках разбираются ключевые темы — от базовых принципов QA и методологий разработки до тестовой документации, работы с Jira, Git и SQL. Формат построен так, чтобы постепенно вести новичка от теории к первым практическим навыкам и подготовке к старту карьеры в IT.</li></ol><h2>Часто задаваемые вопросы (FAQ)</h2><p>Курсы по автоматизации тестирования на Python стабильно занимают верхние позиции в рейтингах IT-обучения. Это объясняется сочетанием доступности языка, высокой востребованности специалистов и тем, что такие программы рассчитаны даже на новичков без опыта. Мы собрали ответы на самые популярные вопросы, которые помогают понять, чего ожидать от обучения и как строится процесс подготовки.</p><h4>Почему именно курсы по автоматизации тестирования на Python пользуются наибольшим спросом среди новичков в IT?</h4><p>Python отличается простым синтаксисом и богатым набором инструментов для тестирования. В курсах Skillbox и Яндекс Практикума студенты начинают с основ языка и сразу переходят к работе с Pytest и Selenium, что позволяет быстро освоить профессию и собрать портфолио.</p><h4>За какой срок реально перейти от нуля до трудоустройства в профессии тестировщика-автоматизатора на Python?</h4><p>Срок зависит от программы: от 5–6 месяцев в Яндекс Практикуме и OTUS до года в Skypro. Нетология предлагает 14-месячное обучение с углублением в ручное тестирование, автоматизацию и нейросети. Такой диапазон позволяет выбрать формат в зависимости от целей и доступного времени.</p><h4>Что конкретно умеют делать после завершения курса по автоматизации тестирования на Python выпускники профильных программ?</h4><p>Выпускники осваивают написание UI- и API-тестов, создание отчетов в Allure, работу с Jenkins, Docker и CI/CD. В Нетологии студенты дополнительно учатся использовать Cypress и Playwright, а в Skillbox углубляются в DevOps-практики и архитектуру тестов.</p><h4>Выбор курса: предпочесть программу с гарантией трудоустройства или сосредоточиться на содержании и уровне подготовки?</h4><p>Skypro и Нетология предоставляют карьерное сопровождение и помощь в поиске работы. В OTUS и Хекслете акцент делается на практических проектах и формировании портфолио. Поэтому выбор зависит от того, что важнее — поддержка в трудоустройстве или глубина подготовки.</p><h4>На каких инструментах делают упор в программах по автоматизации тестирования: Selenium, Pytest или другие решения?</h4><p>Почти в каждом курсе присутствуют Selenium и Pytest. В GeekBrains+Skillbox акцент дополнен Postman, SQL и Jira. В Хекслете главными инструментами становятся Playwright и Jest, а в Нетологии изучают также Cypress и Puppeteer.</p><h4>Подойдут ли курсы по автоматизированному тестированию тем, у кого нет технического образования?</h4><p>Да, большинство программ рассчитано на новичков. В Skypro и Яндекс Практикуме есть вводные блоки по основам тестирования и Python, а в Skillbox добавлены модули Python Basic и Advanced.</p><h4>Нужен ли практический опыт ручного тестирования прежде чем переходить к автоматизации тестов ПО?</h4><p>Некоторые школы начинают именно с ручного тестирования. В Нетологии и Skypro студенты сначала осваивают баг-репорты и тест-дизайн, а затем переходят к автоматизации. В OTUS требуется базовое знание Python, поэтому упор сразу делается на автотесты.</p><h4>Какие карьерные возможности открывает освоение автоматизации тестирования веб-приложений?</h4><p>Выпускники курсов могут претендовать на должности QA Automation Engineer или Python QA Engineer. Например, в GeekBrains+Skillbox студенты учатся работать с CI/CD и SQL, а в Яндекс Практикуме формируют портфолио из 10 проектов, что помогает быстрее выйти на рынок.</p><h4>Включают ли топовые школы обучение API-тестированию в базовую образовательную программу?</h4><p>Да, API-тестирование есть почти в каждом курсе. В Skypro студенты осваивают Postman и SoapUI, в OTUS работают с REST Assured, а в Яндекс Практикуме применяют Postman и Swagger.</p><h4>Содержат ли современные образовательные программы модуль по работе с базами данных и изучению SQL для автоматизаторов?</h4><p>Да, SQL включен в программы большинства школ. В Skillbox есть отдельный модуль для работы с базами, в Нетологии SQL используется в нагрузочном тестировании, а в Яндекс Практикуме он входит в базовую часть курса.</p><h4>Какие практические работы включают в портфолио выпускники программ по автоматизированному тестированию?</h4><p>Это проекты с автотестами для веб-приложений, API и мобильных сервисов, отчеты в Allure и кейсы с CI/CD. В OTUS выпускники создают собственный фреймворк, в Хекслете портфолио публикуется на GitHub, а в Яндекс Практикуме итоговый проект объединяет UI-, API- и юнит-тесты.</p><p>Профессия тестировщика-автоматизатора остается одной из самых востребованных в IT. Начинающие специалисты могут рассчитывать на зарплату от 70 000–90 000 руб., а опытные инженеры в крупных городах, особенно с навыками Python, Java и современными фреймворками, зарабатывают от 250 000 руб. и выше. Автоматизация открывает путь к стремительному карьерному росту, ведь компании ценят специалистов, которые умеют экономить ресурсы и ускорять выпуск продуктов. Выбирая курсы по автоматизации тестирования, важно обращать внимание на практическую часть, количество проектов и поддержку экспертов — это ключ к формированию портфолио и реальным навыкам, которые сразу пригодятся на рынке труда.</p><p><i>А теперь хочу услышать ваше мнение: поделитесь в комментариях, какие курсы по автоматизации тестирования вам показались наиболее полезными и эффективными, и что помогло вам быстрее освоить профессию.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Как непротестированная вкладка чуть не убила релиз</title>
      <link>https://tproger.ru/blogs/pochti-proval--pochti-pobeda</link>
      <comments>https://tproger.ru/blogs/pochti-proval--pochti-pobeda?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Елизавета Якушева]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/blogs/pochti-proval--pochti-pobeda</guid>
      <description><![CDATA[<p>История из первых рук о том, как незаметная «забытая» вкладка во время финальной проверки привела к 500-й ошибке, панике и спасению релиза в последний момент. Про усталость, стыд, самоиронию и то, как команды учатся на собственных провалах (иногда на горьком опыте).</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/blogs/pochti-proval--pochti-pobeda">Как непротестированная вкладка чуть не убила релиз</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[История успеха]]></category>
      <category><![CDATA[История IT]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Блоги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 25 Sep 2025 12:29:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>История ради истории про мой проход по тонкому льду и дефекты прямо перед демо.</p><p>Также подписывайтесь на мой ТГ, который я почти не веду.</p><p>Однажды, в самом начале карьеры, когда я была молода и горяча, мы пилили приложение. Большое, серьёзное, адски сложное и практически неподъёмное. Сидели до ночи, заливались литрами кофе, выходили в выходные и на ноябрьские праздники, чтобы на руках пронести первый релиз — сдобренный молитвами и нашими слезами.</p><p>Я помню, как сейчас, ту прекрасную зимнюю пору: готовилась к демо. Последняя попытка. Последний шанс выйти в прод до нового года. Коллеги из других команд уже ушли на новогодний корпоратив — пить, курить и веселиться. А мы узким кружком готовились к демонстрации. Часики тикали, всё почти готово. Я открываю финальную вкладку… и у меня схлопывается интерфейс в ошибку 500, приложение встаёт колом — ни туда, ни сюда.</p><p>Мы выкатываем глаза, разработчик начинает исправлять дефекты наживую, а минутная стрелка стремительно приближается к началу демо.</p><p>Пока все собираются, я начинаю тираду в духе: «Добрый день, здравствуйте, дорогие коллеги. Мы очень рады представить вам наш <i>мертворождённый</i> релиз…»</p><p>На фоне вижу, как разработчик машет руками и показывает пальцами вверх: он починил, всё будет хорошо.</p><p>Я радостно показываю новый функционал, который, вообще-то, был хорош — действительно годный для старта, чтобы опробовать и понять: надо/не надо. Мне он нравился от начала и до конца. Всё шло гладко, я подробно рассказывала про каждую кнопочку, вкладочку и ссылку — всё будет ровнее ровного.</p><p>И тут я понимаю… О боже. Холодный пот выступает на лбу, когда я осознаю, что в тестировании бэкенда я совсем забегалась и даже не открывала ту злополучную вкладку, которая может схлопнуть приложение.</p><p>Нет.</p><p>В ней не пророс буйным цветом дефект регресса. Она не тестировалась вообще.</p><p>Никогда.</p><p>Ошибка 500 не была случайностью. Она была слепым пятном, про которое в спешке я забыла!</p><p>Господь. Я была плохой девочкой и тестировала без документации и тест-кейсов. Но обещаю, что это мой последний провал (ха-ха — нет). Обещаю потом всё задокументировать (нет). Обещаю аккуратно ввести рабочие планы (всё ещё нет).</p><p>Я взмолилась (всем известным богам) и в частности своему разработчику, который стоял за моей спиной, пил кофе и следил за демо. Мне было страшно и стыдно; с трясущимися пальцами я медлила открыть ту самую вкладку.</p><p>Кажется, мозг отключился. Я уже приготовила монолог: «Мы так задумывали — чтобы приложение умирало между запросом и ответом. Так вы сможете сделать себе чай, пока серверы проходят свой персональный краш-тест.»</p><p>Быть опозоренной перед всеми: заказчиками, пользователями, инфобезой, командой разработки. Я ощутила как над моей головой нависла секира невидимого палача, чтобы одним рывком – точным и расчетливым – перерубить мою карьеру на корню. Я была готова выкладывать свое резюме на hh под бой курантов.</p><p>И вдруг кружок загрузки завертелся — вкладка открылась.</p><p>За моей спиной аналитик и разработчик дают друг другу «пять» и чокаются кружками мерзкого американо, потому что молоко скисло ещё вчера.</p><p>Мы справились. За час мы пролетели через все эмоциональные качели: провал — успех — осознание приближающегося конца — смерть — и снова успех.</p><p>Не помню, напились ли мы после того рабочего дня или залипали в стену до новогодних праздников. Кажется, мой мозг заблокировал те воспоминания, которые случились именно тогда.</p><p>Хочу отметить: потом мы долго и скрупулёзно доводили процессы до ума, чтобы уже не бегать с горящей задницей перед релизом.</p><p>Да, мы бегали.</p><p>Да, у нас были провалы.</p><p>Да, у нас были дефекты в проде.</p><p>Очень много «да». Я складываю руки в молитве за каждый такой провал и верю, что мне ещё много чему предстоит научиться. И да — я облажаюсь еще раз. Я в этом уверена и с какой-то тёплой надеждой жду момента, когда снова придётся преодолеть очередную катастрофу.</p><p>К чему это я? Приближается горячий сезон, и каждый из нас готовится к нему. Не знаю, как вы, но мои единственные планы на высокий сезон — это скидки на Алиэкспресс и попытка ухватить навесной унитаз по вопиюще низкой цене. Я слишком долго пила антидепрессанты, чтобы работать в таком режиме в свои 27.</p><p>Никто не вспомнит, как ты задерживался на работе. Тебя заменят другим человеком, и никто не поставит памятник (разве что ты сам соберёшь его из гор пластиковых кофейных стаканчиков).</p><p>sorry not sorry</p><p>Хочу поддержать каждого, кто проходил через подобное. У меня нет слов, чтобы описать, сколько боли и нервов было потрачено тогда, и сколько трудностей ждёт нас впереди.</p><p>Если вы дошли до этого места — спасибо вам. И помните: всё обязательно получится (или не получится). Не теряйте веры. Не теряйте надежды. Продолжайте учиться и совершенствоваться.</p><p>Будущее не будет радужным и безоблачным — на самом деле, никогда не будет.</p><p>Но я верю в вас. Я учусь на своих провалах и катастрофах. Я знаю, что иногда была не права и по-старинке остаюсь идиоткой время от времени (уже меньше, но всё ещё бывает).</p>]]></content:encoded>
    </item>
    <item>
      <title>Гайд по 2FA и MFA: как правильно внедрить многофакторную аутентификацию</title>
      <link>https://tproger.ru/articles/gajd-po-2fa-i-mfa--kak-pravilno-vnedrit-mnogofaktornuyu-autentifikaciyu</link>
      <comments>https://tproger.ru/articles/gajd-po-2fa-i-mfa--kak-pravilno-vnedrit-mnogofaktornuyu-autentifikaciyu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/gajd-po-2fa-i-mfa--kak-pravilno-vnedrit-mnogofaktornuyu-autentifikaciyu</guid>
      <description><![CDATA[<p>Полное руководство по внедрению многофакторной аутентификации для защиты бизнеса и личных данных. Эксперты рассказали про типичные ошибки и технические нюансы 2FA.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/gajd-po-2fa-i-mfa--kak-pravilno-vnedrit-mnogofaktornuyu-autentifikaciyu">Гайд по 2FA и MFA: как правильно внедрить многофакторную аутентификацию</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Быстрый старт]]></category>
      <category><![CDATA[Распознавание]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 24 Sep 2025 12:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>По данным IBM, компрометация учётных данных <a href="https://newsroom.ibm.com/2024-07-30-ibm-report-escalating-data-breach-disruption-pushes-costs-to-new-highs">стала</a> топ-вектором атак со средней ценой ошибки $4,81 млн. Verizon <a href="https://www.polymerhq.io/blog/verizon-dbir-2024-key-takeaways/">фиксирует</a>, что 74% утечек данных происходит из-за человеческого фактора. Ослабла связка «пароль + код из СМС»:</p><ul><li>CISA официально <a href="https://www.cisa.gov/sites/default/files/publications/fact-sheet-implementing-phishing-resistant-mfa-508c.pdf">относит</a> их к уязвимым факторам,</li><li>Microsoft <a href="https://www.microsoft.com/en-gb/security/security-insider/intelligence-reports/10-essential-insights-from-the-microsoft-digital-defense-report-2024">описывает</a>, как их обходят AiTM, SIM‑swap и кража токенов.</li></ul><p>Почти половина компаний <a href="https://blog.hypr.com/press-releases/hypr-2024-state-of-passwordless-identity-assurance-report">пережила</a> взлом в 2024 году — в 9 из 10 случаев атакующие сначала пробивались в корпоративные аккаунты. Вместе с экспертами рассказываем, как правильно внедрить многофакторную аутентификацию, чтобы не пополнить список взломанных компаний.</p><h2>Что такое двухфакторная аутентификация и чем она отличается от многофакторной</h2><p><b>Двухфакторная аутентификация (2FA)</b> <a href="https://tproger.ru/articles/odin-raz-nedostatochno--dvuhfaktornaya-autentifikaciya-kak-norma-bezopasnosti">встречает</a> на входе в банковские приложения. Сначала вводите пароль, потом указываете код из СМС.</p><p>При обычном входе вы используете только пароль. При 2FA добавляется второй шаг проверки:</p><ul><li>код из СМС или приложения,</li><li>отпечаток пальца,</li><li>USB-ключ,</li><li>пуш-уведомление на телефон.</li></ul><p><b>Многофакторная аутентификация (MFA)</b> <a href="https://tproger.ru/articles/podtverdite-lichnost--kak-rabotaet-mnogofaktornaya-autentifikaciya-v-multifactor">работает</a> также, но проверок может быть больше двух. Например, банк запросит пароль, потом код из СМС, затем ответ на секретный вопрос.</p><p><i>Анна Храмцова, старший руководитель направления разработки продукта Dion, соавтор тг-канала </i><a href="https://t.me/DiagnosisAnalyst">Диагноз:Аналитик</a><i>:</i></p><blockquote>2FA — это частный, самый распространённый случай MFA. Когда говорят «MFA», часто подразумевают именно 2FA. А когда говорят о «более чем двух факторах» (3FA+), то имеют в виду системы с экстремально высоким уровнем риска. Для большинства сценариев, включая банковские приложения, 2FA выступает «золотым стандартом» и достаточной мерой.</blockquote><h2>Почему СМС-коды больше не гарантируют безопасность</h2><p>В 2025 году мошенники чаще обходят 2FA, где используются коды из СМС.</p><p>Самый распространённый способ — подмена SIM-карты. Злоумышленник приходит в салон связи с поддельными документами и восстанавливает вашу SIM-карту. Оператор блокирует симку, выдаёт новую мошеннику, и все СМС приходят ему. В России такие случаи <a href="https://ria.ru/20250425/rossija-2013313630.html">происходят</a> регулярно.</p><p>Второй способ — перехват СМС через уязвимости в протоколе SS7, который используют операторы связи для маршрутизации звонков и сообщений между сетями.</p><blockquote>SMS-коды — ненадежный 2-ой фактор аутентификации. Сегодня операции с копированием номеров и перехватом сообщений не столько редки и невозможны, как, скажем, 5 лет назад.</blockquote><p>Третий — социальная инженерия. Мошенники звонят от имени  техподдержки с просьбой продиктовать код из СМС для «проверки безопасности» или «отмены подозрительной операции».</p><p><b>Какие методы защиты работают</b></p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-09-23/3de07d0b-08bb-43f7-9a53-992b7de35025.jpg" alt="" /></figure><p><b>Приложения-аутентификаторы</b> генерируют временные коды. Google Authenticator, Яндекс.Ключ обновляют комбинации каждые 30 секунд. Перечисленные сервисы работает по TOTP — код синхронизирован между телефоном и сервером через общий секретный ключ. Перехватить код невозможно, потому что он не передаётся по сети.</p><p><b>Физические ключи безопасности</b> — это USB-устройства размером с флешку. YubiKey, Google Titan Key подключаются к компьютеру или телефону и подтверждают личность. Взломать такую защиту практически невозможно. Ключ проверяет подлинность сайта, поэтому не сработает на фишинговой копии.</p><p><b>Пуш-уведомления</b> отправляют запрос на подтверждение входа в мобильное приложение.</p><p><b>Биометрия </b>— отпечатки пальцев, распознавание лица. Смартфоны хранят эти данные в защищённом чипе.</p><p><i>Александр Шибаловский, CTO:</i></p><blockquote>В исключительных случаях используется 4 фактора: например, логин + динамический код + физический носитель ЭП + биометрия. Только ключ в замке провернуть не хватает для верности 🙂</blockquote><h2>Делать самим или купить готовое решение</h2><p>Разработка системы 2FA с нуля займёт минимум полгода работы команды из 3-4 человек. Это зарплаты, тестирование, исправление ошибок и постоянные обновления. Ответственность за каждую уязвимость ляжет на вас.</p><p>Анна Храмцова комментирует:</p><blockquote>Моя рекомендация для большинства организаций: начать с оценки готовых решений на рынке. Фокус следует сместить с вопроса «разрабатывать или подключать?» на вопросы:<br />1. Какой сторонний сервис лучше всего соответствует нашим техническим требованиям и бюджету?<br />2. Как правильно интегрировать его в нашу ИТ-инфраструктуру?<br />3. Как его плавно внедрить для пользователей, чтобы повысить безопасность, а не создать барьеры?</blockquote><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-09-23/94d6e310-3078-4bd8-971c-7cf2ee823e82.jpg" alt="" /></figure><blockquote>Интеграция 2FA/MFA — это в подавляющем большинстве случаев использование стороннего сервиса, а не разработка с нуля. Создание собственной защиты требует огромных ресурсов, глубокой экспертизы в безопасности и постоянного сопровождения. Также в России есть риски, связанные с возможным отключением облачных сервисов, поэтому преимущество на стороне on-premise решений.<br />Разрабатывать своё решение имеет смысл только в очень специфических случаях. Например, если работаете в закрытой инфраструктуре, где запрещено подключение к внешним сервисам, или у вас уникальные требования, которые ни один вендор не покрывает. Но даже тогда лучше брать open-source библиотеки вроде privacyIDEA или Keycloak и дорабатывать их, чем писать всё с нуля.</blockquote><p>Готовые решения делятся на три типа:</p><ul><li><b>SaaS </b>(Software as a Service — программа как услуга) работает через интернет на серверах разработчика. Вы платите за подписку, подключаете сервис за пару дней и забываете про технические вопросы.</li><li><b>On-premise</b> (на вашей территории) устанавливается на серверы компании. Вы полностью контролируете данные, но нужны свои администраторы для поддержки системы.</li><li><b>Open-source</b> (открытый код) можно скачать бесплатно и доработать под свои нужды.</li></ul><p>Большинству компаний подходят SaaS-решения: быстрый старт, предсказуемые расходы и команда профессионалов, которая следит за безопасностью 24/7. On-premise имеет смысл при жёстких требованиях регуляторов или работе с гостайной.</p><p>Александр Шибаловский считает:</p><blockquote>Для крупных систем с высокими требованиями к безопасности целесообразнее не отдавать данные пользователей за контур компании, соответственно возможные варианты — разработать свой модуль или установить стороннее решение on-premises. Для быстрого запуска и небольших систем удобнее использовать SaaS.</blockquote><h2>Типичные ошибки при внедрении MFA и как их не допустить</h2><p>Проблемы чаще возникают у компаний, которые подключают 2FA только потому, что так требуют регуляторы или партнёры. Ставят галочку в отчёте и успокаиваются.</p><p>Распространённые ошибки:</p><ul><li><b>Нет запасных вариантов входа</b>. Сотрудник разбил телефон с приложением-аутентификатором, и всё — он не может войти в рабочие системы.</li><li><b>Один метод для всех</b>. Директору и стажёру предлагают одинаковую защиту. Хотя у директора доступ к финансам, а у стажёра — только к корпоративному чату.</li><li><b>Сложность вместо удобства</b>. Сотрудники вводят три разных пароля и ждут СМС по пять минут.</li><li><b>Забыли про гостевые аккаунты</b>. Подрядчики заходят в систему по старинке через логин-пароль, пока постоянный персонал мучается с токенами.</li></ul><blockquote>Про ошибки можно отдельную статью написать. Из очевидных: использование СМС, недостаточная энтропия при генерации секретов, неограниченное число попыток входа, игнорирование защиты сессии, слабые или однотипные резервные коды, отсутствие резервных способов восстановления доступа.</blockquote><h2>Когда два фактора достаточно, а когда нужно больше</h2><p>Двухфакторной защиты достаточно для личной почты и соцсетей. Уперевшись в 2FA, взломщики пойдут искать жертву попроще. Добавьте к паролю код из приложения — и спите спокойно.</p><blockquote>Выбор 2FA или MFA зависит от нескольких факторов:<br />Первый — стандарты и регуляторные требования (ГОСТы по идентификации и авторизации, финансовому сектору + требования ФСТЭК РФ + стандарты NIST SP 800 и др.). Второй — решение компании-поставщика услуги. Третий — решение пользователя (если компания-поставщик решила предоставить ему возможность выбора).<br />Для массовых пользователей (Госуслуги, банки, почта, соцсети) стандартом остаётся 2FA. Защита 3+ факторами встречаются преимущественно в сфере критичной инфраструктуры и крупных корпоративных решений. <br /><br /></blockquote><p>Компании часто перегибают палку с безопасностью. Например, бухгалтер заходит в систему раз в день посмотреть остатки и каждый раз проходит три проверки. В итоге сотрудники начинают искать обходные пути.</p><blockquote>Самая частая ошибка — внедрять 2FA как формальность, не продумывая пользовательский опыт, из-за чего пользователи саботируют систему. Часто забывают про резервные методы аутентификации, и когда пользователь теряет телефон или токен, компания теряет доступ к критичным системам на часы или дни.</blockquote><h2>Что делать, если пользователи саботируют защиту</h2><p>Сотрудники обходят двухфакторную защиту через общие аккаунты, записывают резервные коды на стикерах или просят коллег войти под их учёткой. Люди саботируют MFA не из вредности — им просто неудобно.</p><p>Анна Храмцова комментирует:</p><blockquote>Внедрение второго фактора ради второго фактора — это частая ошибка. Приступая к интеграции 2FA-решения, необходимо озадачиться вопросами потребностей бизнеса, требований ИБ и распространённых векторов атаки.</blockquote><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-09-23/3578adf4-2f95-4beb-a056-826a551a5b10.jpg" alt="" /></figure><p><b>Как сделать безопасность удобной</b></p><p><b>1.</b> Начните с малого.</p><p>Включите 2FA сначала для критичных систем — почты руководства, доступа к финансам, админки сайта. Когда сотрудники привыкнут, расширяйте охват.</p><p><b>2.</b> Дайте выбор</p><p>Кто-то предпочитает приложения-аутентификаторы, кому-то проще с пуш-уведомлениями. Предложите 2-3 варианта — люди охотнее используют то, что выбрали сами.</p><p><b>3.</b> Упростите вход для доверенных устройств</p><p>Настройте систему так, чтобы с рабочего компьютера в офисе второй фактор запрашивался раз в неделю, а не при каждом входе.</p><p><b>4.</b> Объясните выгоду</p><p>Вместо «компания требует» скажите «ваш аккаунт защищён от взлома, даже если пароль украдут».</p><p><b>5.</b> Решите технические проблемы заранее.</p><p>Выдайте резервные способы входа, настройте синхронизацию времени для кодов, подготовьте инструкции с картинками.</p><p>Чем меньше человек тратит времени на борьбу с системой, тем охотнее её использует.</p><blockquote>При выборе важно смотреть не только на функционал, но и на соответствие требованиям вашей отрасли — например, наличие сертификата SOC2, ISO 27001, поддержка GDPR. Также стоит учитывать удобство для конечных пользователей: если система слишком сложная, её будут обходить или отключать. Не забудьте проверить, как сервис ведёт себя при масштабировании и какие есть варианты восстановления доступа — это критично при сбоях.</blockquote><h2>Чек-лист для успешного внедрения 2FA и MFA</h2><p><b>Подготовка</b>:</p><ul><li>Составьте список всех систем, где нужна защита (почта, CRM, админка сайта).</li><li>Проверьте, какие методы 2FA поддерживает каждая система.</li><li>Определите критичность доступа: где хватит СМС, где нужен аппаратный ключ.</li></ul><p><b>Тестирование</b>:</p><ul><li>Настройте 2FA сначала для одного отдела.</li><li>Проверьте работу резервных кодов — распечатайте и сохраните в сейфе.</li><li>Убедитесь, что служба поддержки умеет сбрасывать 2FA.</li></ul><p><b>Запуск</b>:</p><ul><li>Начните с добровольного подключения — дайте бонусы первым пользователям.</li><li>Настройте автоматическое напоминание тем, кто не включил защиту через месяц.</li></ul><p>После запуска отслеживайте процент подключивших 2FA, фиксируйте проблемы пользователей и дорабатывайте инструкции. Через 1-2 месяца сделайте 2FA обязательной.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 VSCode расширений, которые реально повышают продуктивность</title>
      <link>https://tproger.ru/articles/10-vscode-raswirenij--kotorye-realno-povywayut-produktivnost</link>
      <comments>https://tproger.ru/articles/10-vscode-raswirenij--kotorye-realno-povywayut-produktivnost?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-vscode-raswirenij--kotorye-realno-povywayut-produktivnost</guid>
      <description><![CDATA[<p>Топ-10 расширений VSCode для повышения продуктивности: форматирование, тестирование API, управление проектами и многое другое. Ускорьте свою разработку с лучшими инструментами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-vscode-raswirenij--kotorye-realno-povywayut-produktivnost">10 VSCode расширений, которые реально повышают продуктивность</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[SEO]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[BASIC]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[ICO]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Английский]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 23 Sep 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Visual Studio Code — мощный редактор, который становится ещё лучше с правильными расширениями. В этой подборке мы собрали 10 инструментов, реально ускоряющих разработку: они избавляют от рутины и помогают сосредоточиться на главном — качественном коде.</p><h2>1. TabNine</h2><p>Если вам важна скорость — <a href="https://www.tabnine.com/">TabNine</a> стоит попробовать хотя бы ради этого. Расширение —  лёгкий AI-ассистент, который работает как умный автодополнитель кода, непохожий на аналоги вроде Codeium или Copilot.</p><p>TabNine обучен на миллионах строк открытого кода и умеет предсказывать, что вы напишете дальше, с учётом контекста проекта и языка. Отлично справляется с рутинными вещами: автозавершает функции, переменные, конструкции — всё быстро и чаще всего в тему.</p><p><b>Кому подойдёт</b>: тем, кто хочет ускорить набор кода, но не готов передавать весь проект в облако или открывать чат с Copilot. Поддерживает офлайн-режим и локальное обучение модели.</p><p>Плюсы:</p><ul><li>Работает из коробки, не требует тонкой настройки;</li><li>Есть локальная версия — удобно для закрытых проектов;</li><li>Поддерживает большинство языков и фреймворков.</li></ul><p><b>Чем полезен:</b> экономит время на повседневной разработке — особенно когда вы не хотите отвлекаться на документацию или поиск нужной переменной в другом файле.</p><h2>2. GitLens</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens">GitLens</a> встраивает историю изменений прямо в VSCode — и делает это максимально удобно. Показывает, кто и когда изменил строку, коммит-месседж, хэш, ветку и другие детали. Можно не уходить в консоль или отдельный Git-клиент для поиска информации.</p><p>Особенно полезен, когда работаете с чужим кодом или хотите быстро вспомнить, зачем вы сами что-то написали месяц назад.</p><p><b>Кому подойдёт</b>: тем, кто работает в команде, часто читает историю изменений или ревьюит чужие коммиты. Также пригодится в проектах с долгой историей или нестабильным кодом.</p><p>Плюсы:</p><ul><li>Информация о коммитах отображается прямо в редакторе под строкой;</li><li>Есть таймлайн изменений файла;</li><li>Удобный diff по коммитам, авторам, веткам и даже фрагментам кода.</li></ul><p><b>Чем полезен:</b> помогает быстрее разбираться в чужом коде, искать причины бага или откатывать ошибки. Особенно ценится за то, что делает Git прозрачным и доступным прямо в процессе разработки.</p><h2>3. Error Lens</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens">Error Lens</a> выводит диагностику ошибок и предупреждений прямо в строке кода. Это расширение превращает сообщения линтеров и компиляторов в наглядные подсказки, позволяя сразу видеть, что пошло не так.</p><p>Можно настроить отображение: выделять ошибки цветом, добавлять иконки или даже показывать краткие подсказки с предложениями по исправлению. Поддерживает большинство языков и линтеров, включая ESLint, TypeScript и других.</p><p><b>Кому подойдёт:</b> разработчикам, которые хотят моментально видеть ошибки в коде, и тем, кто ценит визуальную чистоту и скорость отладки.</p><p>Плюсы:</p><ul><li>Ошибки и предупреждения отображаются прямо в редакторе, рядом со строкой кода;</li><li>Гибкая настройка стилей и уровня детализации сообщений;</li><li>Ускоряет процесс отладки, особенно при работе с большими файлами.</li></ul><p><b>Чем полезен:</b> минимизирует время на поиск и анализ ошибок, позволяя сразу фокусироваться на их исправлении. Это особенно ценно, когда вы пишете код в реальном времени или работаете с новыми библиотеками, где легко допустить мелкие недочёты.</p><h2>4. Path Intellisense</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense">Path Intellisense</a> — одно из тех расширений, которое просто работает и экономит кучу времени. Оно автоматически подсказывает пути к файлам, папкам и модулям в вашем проекте, как только вы начинаете их набирать. Поддерживает абсолютные и относительные пути, учитывает структуру проекта и форматирует предложения так, как это принято в выбранном языке.</p><p>Работает особенно хорошо в проектах с вложенной структурой, когда нужно быстро сослаться на компоненты, конфиги или ассеты.</p><p><b>Кому подойдёт</b>: всем, кто устал вручную прописывать длинные relative-пути или путаться в структуре проекта. Особенно выручает на фронтенде, где модулей десятки и легко ошибиться в названии.</p><p>Плюсы:</p><ul><li>Подсказки появляются автоматически при наборе пути;</li><li>Поддерживает большинство языков и фреймворков;</li><li>Учитывает jsconfig.json и tsconfig.json при работе с alias-ами.</li></ul><p><b>Чем полезен</b>: снижает количество опечаток и неверных импортов, ускоряет переход между файлами и помогает писать код чуть быстрее.</p><h2>5. TODO Highlight</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight">TODO Highlight</a> подсвечивает комментарии с задачами (например, TODO, FIXME, NOTE) прямо в коде, делая их заметными и удобными для отслеживания. Расширение помогает не терять важные заметки, которые вы оставляете в коде, и быстро находить места, требующие доработки.</p><p>Можно настроить ключевые слова, цвета подсветки и даже добавить свои собственные метки. Работает с любыми языками программирования и интегрируется с панелью задач VSCode для удобного обзора всех TODO в проекте.</p><p><b>Кому подойдёт</b>: разработчикам, которые оставляют заметки в коде, и командам, которым нужно быстро находить задачи или недочёты в проекте.</p><p>Плюсы:</p><ul><li>Яркая подсветка TODO-комментариев прямо в редакторе;</li><li>Гибкая настройка ключевых слов и стилей;</li><li>Интеграция с панелью задач для быстрого обзора.</li></ul><p><b>Чем полезен</b>: экономит время на поиск и управление задачами в коде, помогая не упустить важные доработки или напоминания. Особенно удобно в больших проектах, где комментарии могут затеряться среди строк.</p><h2>6. Prettier – Code formatter</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode">Prettier</a> — расширение, которое автоматически приводит ваш код к единому стилю, избавляет от ручной правки отступов, кавычек и переносов. Оно поддерживает множество языков (JavaScript, TypeScript, CSS, HTML и другие) и интегрируется с линтерами, чтобы ваш код был не только красивым, но и консистентным.</p><p>Можно настроить правила форматирования под ваш проект или использовать готовые пресеты. Prettier форматирует код при сохранении файла или по команде, а также работает с выделенными фрагментами.</p><p><b>Кому подойдёт</b>: разработчикам, которые хотят экономить время на форматировании, и командам, стремящимся к единообразию кода.</p><p>Плюсы:</p><ul><li>Автоматическое форматирование при сохранении или по хоткеям;</li><li>Поддержка множества языков и кастомных настроек;</li><li>Интеграция с ESLint и другими инструментами для проверки кода.</li></ul><p><b>Чем полезен:</b> убирает рутину ручного форматирования, снижает количество ошибок в стиле кода и помогает сосредоточиться на логике, а не на внешнем виде. Идеально, чтобы ускорить работу и поддерживать чистоту в больших проектах.</p><h2>7. Live Server</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer">Live Server </a>запускает локальный сервер прямо из VSCode, позволяя просматривать изменения в HTML, CSS и JavaScript в браузере в реальном времени. После сохранения файла страница автоматически обновляется, что исключает необходимость ручного перезапуска или обновления браузера.</p><p>Поддерживает кастомные порты, HTTPS, и работает с любыми фронтенд-проектами, от простых HTML-страниц до сложных приложений на React или Vue. Можно настроить, чтобы сервер открывался автоматически при запуске проекта.</p><p><b>Кому подойдёт</b>: фронтенд-разработчикам, которые работают над веб-интерфейсами и хотят мгновенно видеть результат изменений без лишних действий.</p><p>Плюсы:</p><ul><li>Автоматическое обновление страницы при изменении кода;</li><li>Простая настройка и поддержка HTTPS для безопасного тестирования;</li><li>Лёгкий запуск сервера прямо из редактора.</li></ul><p><b>Чем полезен</b>: ускоряет цикл разработки и тестирования веб-приложений, избавляет от ручного обновления страниц. Это особенно экономит время при частых правках в стилях или скриптах, так как можно сразу видеть результат в браузере.</p><h2>8. Project Manager</h2><p>Если работаете над несколькими проектами одновременно — это расширение сэкономит вам часы. <a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager">Project Manager</a> позволяет создавать список избранных проектов и открывать их в один клик, без ручного поиска папок и недавних вкладок.</p><p>Можно задать свои алиасы, группировать по папкам, запускать с хоткеев — особенно удобно, если у вас десятки репозиториев на локалке или вы фрилансите на несколько команд.</p><p><b>Кому подойдёт</b>: разработчикам, которые ведут сразу несколько проектов, часто переключаются между ними и устали искать нужный путь через File &gt; Open Folder.</p><p>Плюсы:</p><ul><li>Быстрое переключение между проектами через интерфейс или хоткеи;</li><li>Поддержка избранного и тэгов;</li><li>Можно автоматически подтягивать все папки из заданной директории.</li></ul><p><b>Чем полезен:</b> избавляет от рутинных действий при переходе между проектами — особенно когда важно не терять фокус и не сбиваться с рабочего темпа.</p><h2>9. Code Spell Checker</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker">Code Spell Checker </a>выявляет орфографические ошибки в комментариях, строках и именах переменных прямо в редакторе VSCode. Расширение подчёркивает опечатки волнистой линией и предлагает варианты исправления через Ctrl+. или Cmd+., что позволяет быстро исправить ошибки.</p><p>Поддерживает множество ЯП и словари для разных языков (английский, русский, немецкий — с дополнительными расширениями). Можно добавлять свои слова в пользовательский словарь или игнорировать определённые термины, чтобы адаптировать проверку под проект. Работает с camelCase и snake_case, не помечая их как ошибки.</p><p><b>Кому подойдёт</b>: разработчикам, которые пишут много комментариев или документации в коде, и тем, кто хочет избежать опечаток в строках, API или логах, чтобы повысить читаемость.</p><p>Плюсы:</p><ul><li>Мгновенное обнаружение ошибок с подсказками для исправления;</li><li>Гибкая настройка словарей и игнорируемых слов;</li><li>Поддержка технических терминов и различных стилей написания кода.</li></ul><p><b>Чем полезен:</b> экономит время на поиск и исправление опечаток, особенно в документации или пользовательских сообщениях, которые могут повлиять на восприятие проекта.</p><h2>10. REST Client</h2><p><a href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client">REST Client </a>позволяет отправлять HTTP-запросы и просматривать ответы непосредственно в VSCode. Достаточно создать файл с расширением .http или .rest, написать запрос в простом текстовом формате, и вы увидите кнопку Send Request для моментального выполнения.</p><p>Поддерживает все типы запросов (GET, POST, PUT, DELETE и другие), авторизацию (Basic, OAuth, JWT), переменные окружения и даже генерацию кода на разных языках. Запросы можно сохранять в репозиторий, что удобно для командной работы. Расширение также позволяет использовать динамические переменные по типу {{$timestamp}} или {{$guid}}, всё для гибкой настройки запросов.</p><p><b>Кому подойдёт</b>: тем, кто работает с REST API и хочет тестировать эндпоинты прямо в VSCode, сохранять запросы в проекте и почти не переключаться между инструментами.</p><p>Плюсы:</p><ul><li>Простая отправка запросов через .http или .rest файлы с кнопкой Send Request;</li><li>Поддержка переменных окружения и авторизации для сложных API;</li><li>Возможность сохранять запросы в репозитории для совместной работы.</li></ul><p><b>Чем полезен:</b> ускоряет тестирование API, устраняет необходимость в сторонних приложениях. Запросы хранятся рядом с кодом, что упрощает документирование и повторное использование, особенно в проектах, где API-вызовы нужно часто проверять или делиться ими с командой.</p><p><i>А какими расширениями пользуетесь вы? Пишите в комментариях!</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Устраиваем свой Data QA с PyTest и фикстурами</title>
      <link>https://tproger.ru/articles/kak-testirovat-perenos-i-transformaciyu-dannyh-bez-boli</link>
      <comments>https://tproger.ru/articles/kak-testirovat-perenos-i-transformaciyu-dannyh-bez-boli?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Елизавета Якушева]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-testirovat-perenos-i-transformaciyu-dannyh-bez-boli</guid>
      <description><![CDATA[<p>Рабочий подход к тестированию трансформации данных в ETL-процессах. На примере Python-проекта с pytest, allure и psycopg2 демонстрируется, как автоматизировать создание и наполнение таблиц, хранить схемы и данные, а затем сравнивать результат. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-testirovat-perenos-i-transformaciyu-dannyh-bez-boli">Устраиваем свой Data QA с PyTest и фикстурами</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Анализ данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 01 Sep 2025 12:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Как тестировать перенос и трансформацию данных без боли</h2><p>Я всё думаю над тем, о чём говорить на своём канале. Казалось бы, инфы в интернете — вагон и маленькая тележка: бери, читай, вдохновляйся. Но вот что удивительно — про то, как тестировать данные, как они перетекают из одной таблицы в другую и не превращаются в тыкву, пишут мало.</p><p>А зря.</p><p>За свою практику я встречала разные подходы к организации Data QA. В этой статье я расскажу про самый простой и быстрый вариант, который можно «собрать на коленке», а потом уже развивать. С примерами кода и тем, зачем SQL нам нужен в этой жизни.</p><p>И небольшой дисклеймер. Если вы знаете, как сделать это на Python стильно модно молодежно, обязательно напишите мне об этом в комментариях, я с удовольствием почитаю про ваш подход.</p><p>Также подписывайтесь на мой ТГ, который я почти не веду. <br /><br /></p><h2>Базовый сценарий</h2><ol><li>Есть таблица-источник source_table.</li><li>Разработчик запускает свой код (Spark, Airflow или что у него там), и данные магическим образом перекладываются + преобразуются.</li><li>На выходе получаем result_table.</li></ol><p>Вопрос: как это тестировать?</p><h3>Самый быстрый и простой путь</h3><p>Подготовка:</p><ol><li>Создаём таблицу-источник.</li><li>Наполняем её данными (синтетика или реальные примеры с прода).</li></ol><p>Действие:</p><ol><li>Запускаем ETL код.</li><li>Сравниваем данные «как было» и «как стало».</li></ol><p>После теста:</p><ol><li>Удаляем таблицу-источник.</li><li>Удаляем таблицу-приёмник.</li></ol><p>На коленке это можно собрать так:</p><ol><li>CREATE TABLE …</li><li>INSERT INTO …</li><li>Ручной запуск пайплайна (Spark/Airflow).</li><li>Какой-нибудь скрипт для сравнения результатов.</li></ol><p>Рабочая схема? Да.</p><p>Удобная? Нет.</p><h2>Где хранить эти скрипты?</h2><p>Можно, конечно, прилепить их к задаче в Jira в виде файликов. Но выглядеть это будет как «фигня на палке». Через месяц никто не вспомнит, что это было и зачем.</p><p>Поэтому я решила собрать свой Python-проект для автоматизации. А вы можете склепать себе такой же, и жизнь сразу станет легче.</p><h3>Архитектура проекта</h3><h3>Минимальный стек</h3><h3>1. Utils — мелкие, но полезные</h3><p>Здесь мы храним всякую мелочёвку. Например, функцию для открытия JSON:</p><p>Важно отметить, что данные я всегда стараюсь хранить в виде массива с json. Так удобнее использовать.</p><h3>2. APIClient — для триггеров</h3><p>Здесь всё максимально тривиально: клиент для вызова API и запуска ETL джоб.</p><h3>3. PostgreSQLClient — основной игрок</h3><p>Класс для подключения, запросов, создания таблиц, вставки данных и удаления.</p><h2>Фикстуры (conftest.py)</h2><h3>API фикстуры</h3><p>Я показываю пример, как поднимаю один API клиент. Но у вас их может быть много: например, разные сервисы или разные перекладчики.</p><h3>DB фикстура</h3><p>Пример для дефолтной PostgreSQL, но вы можете добавить фикстуры для поднятия GreenPlum или ClickHouse.</p><h2>Как хранить данные?</h2><p>А теперь самый сок, которым я обмазываюсь сейчас.</p><p>Конечно, можно создать отдельный скрипт на чистом sql для создания и редактирования своих табличек: больших и маленьких. Но, если честно, это так *цензура* неудобно.</p><p>Поэтому я придумала хранить схему и данные в отдельных json файлах и налету генерить скрипты. Да, Америку я вновь не открываю, и очень жаль.</p><p>В директории тестов я создала папку resources, где храню эти файлы.</p><p>Конечно, в таком виде вы не передадите ничего в Postgres и ничего не слепите. Так что я услужливо предоставляю вам код, чтобы вы его копировали и вдохновлялись.</p><p>Вы можете взять и пропихнуть эти куски кода прямо в тело теста, но я предпочитаю оборачивать это дело в фикстуры-управленцы, которые будут делать это за меня и записывать отдельными шагами в Алюр:</p><p>Отдельное удовольствие мне даёт вот эта строчка кода db_client:PostgreSQLClient.Она значит, что если так вышло, что у меня есть куча разных PostgesSql, я могу в эту фикстуру прокинуть нужный мне клиент без дополнительных приседаний. И это, конечно, прекрасно.</p><h3>Пример: подготовка данных</h3><p>Самые внимательные уже заметили, что в примере выше я поднимала postgres-клиента.</p><p>Так что разницы почти никакой (ну, кроме тех случаев, когда внезапно очень даже есть 🙃).</p><h3>И сам тест</h3><p>Конечно, можно сравнивать всё это дело через всякие прослойки типа Pandas.</p><p>Но, камон, у меня что, куча времени сидеть, читать доки и писать суперсложные датафреймы ради пары простых проверок? Нет.</p><p>Позвольте мне радостно строчить свой первозданный код с дефолтными проверками и быть довольной этим минимализмом.</p><p>Это я отвлеклась. Вот такой код у меня получается. Я не очень люблю сверять даты и названия таблиц, у меня генерит тест на лету:</p><h2>Итог</h2><ul><li>Ручные скрипты → боль и страдания.</li><li>Автоматизация через Python+pytest → быстро, удобно, воспроизводимо.</li><li>JSON-файлы позволяют хранить схемы и данные в читаемом виде.</li><li>Allure даёт красивые отчёты.</li></ul><p>В итоге у вас появляется настоящий фреймворк для Data QA, который легко расширять и масштабировать.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 зарубежных VPS, где можно платить в рублях — без серых схем</title>
      <link>https://tproger.ru/articles/10-zarubezhnyh-vps--gde-mozhno-platit-v-rublyah---bez-seryh-shem</link>
      <comments>https://tproger.ru/articles/10-zarubezhnyh-vps--gde-mozhno-platit-v-rublyah---bez-seryh-shem?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-zarubezhnyh-vps--gde-mozhno-platit-v-rublyah---bez-seryh-shem</guid>
      <description><![CDATA[<p>Обзор 10 зарубежных VPS-провайдеров с официальной оплатой в рублях. Легальные серверы в Европе, США и Азии без серых схем, посредников и блокировок. Выбор для IT-команд и разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-zarubezhnyh-vps--gde-mozhno-platit-v-rublyah---bez-seryh-shem">10 зарубежных VPS, где можно платить в рублях — без серых схем</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Быстрый старт]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Английский]]></category>
      <category><![CDATA[PayPal]]></category>
      <category><![CDATA[Россия]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 26 Aug 2025 08:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Многие команды и разработчики сталкиваются с проблемой: зарубежные сервисы удобные по цене и качеству, но оплачивать их с российских карт или в рублях сложно. Возникают серые схемы, костыли с посредниками и риск, что в один день всё перестанет работать. В этой подборке собраны варианты VPS, которые официально принимают оплату в рублях и при этом остаются иностранным хостингом.</p><h2>1. Koara — зарубежный хостинг с регистрацией в Великобритании</h2><p><a href="https://koara.cloud/?from=678&amp;utm_source=tproger&amp;utm_medium=article&amp;utm_campaign=foreignvps&amp;utm_content=link">Сервера Koara расположены в Германии</a> — провайдер ориентируется на клиентов из России: здесь можно официально оплачивать услуги в рублях через СБП и банковские карты, при этом все расчёты проходят легально через регистрацию в России. Это снимает главный барьер при работе с иностранными провайдерами.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/73aa4335-7b2a-4346-acf6-6defa3ee97be.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>VPN для личных или корпоративных задач — на  тарифах можно развернуть готовый Wireguard VPN или установить другой вручную;</li><li>Telegram-боты и сервисы — подходит для небольших приложений с низкой нагрузкой;</li><li>Игровые серверы — тарифная линейка DE позволяет запускать высоконагруженные проекты;</li><li>Персональные сайты, блоги и лендинги — базовые тарифы с R9 3900 подойдут для старта;</li><li>SaaS-проекты или приложения на Windows — можно развернуть полноценное рабочее окружение, включая Visual Studio для сборки ПО.</li></ul><h3>Формат работы и особенности</h3><p>Есть две линейки тарифов:</p><ol><li>START — на базе AMD Ryzen R9 3900, оптимально для VPN, ботов и небольших сайтов;</li><li>DE — на базе AMD Ryzen R9 5950X, подходит для нагруженных сервисов, игровых серверов и блогов.</li></ol><p>Все сервера работают на NVMe SSD — это ускоряет доступ к файлам и повышает общую отзывчивость проектов. Панель управления позволяет установить готовые образы, включая ISPmanager.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/e690dc1d-b221-4de6-97ea-90073819e28d.png" alt="" /></figure><p>Поддержка доступна на русском и английском языках, что упрощает взаимодействие для команд, где английский не основной язык.</p><p><b>Тарифы и условия</b></p><p>START — от <b>239 рублей в месяц</b>; DE — от <b>349 рублей в месяц</b>. Оплата в рублях через СБП и Робокассу, чеки предоставляются, но работа с юридическими лицами не ведется (нет актов, счетов и УПД).</p><p>Также есть возможность апгрейдить тарифа без миграции данных. При заказе доступны разные ОС, включая Windows, тогда спектр использования расширяется на разнообразные десктопные приложения. Например, некоторые клиенты брали серверы для сборки ПО через Visual Studio. <a href="https://find-and-update.company-information.service.gov.uk/company/16080174">У провайдера официальная регистрация компании в Великобритании (Koara International Limited)</a>, а в России есть ИП для приёма платежей.</p><p><a href="https://koara.cloud/?from=678&amp;utm_source=tproger&amp;utm_medium=article&amp;utm_campaign=foreignvps&amp;utm_content=link">Koara </a>можно рассматривать как удобный вариант для тех, кто хочет пользоваться зарубежными ресурсами, но при этом не связываться с серыми схемами и сложными обходами. Сервис закрывает сразу несколько задач: даёт простую оплату в рублях, легальный статус в России и Великобритании, а также гибкие тарифы — от минимальных конфигураций для VPN и ботов до мощных решений на R9 5950X для игровых серверов и нагруженных проектов.</p><h2>2. Fornex — немецкий хостинг-провайдер с международным охватом</h2><p><a href="https://fornex.com/ru/">Fornex</a> предлагает VPS на базе KVM-виртуализации и быстрых NVMe-накопителей. Сервера доступны в нескольких странах Европы и США, а также в России, что делает платформу универсальной для проектов, где важны стабильность подключения и широкий выбор локаций.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/d2c265ed-ec83-4a00-a200-3a219b15ac2b.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Размещение веб-сайтов и интернет-магазинов, требующих стабильного аптайма;</li><li>Игровые серверы и высоконагруженные приложения благодаря KVM и NVMe;</li><li>VPN и прокси-сервисы с возможностью выбора географии;</li><li>SaaS-решения и тестовые окружения для команд разработки;</li><li>Развёртывание проектов с повышенными требованиями к безопасности — защита от DDoS входит в тариф.</li></ul><h3>Формат работы и особенности</h3><p>У Fornex можно выбрать сервера в разных странах — от России и Германии до США, Швейцарии и Испании. Виртуализация построена на KVM, что гарантирует полную изоляцию машин и даёт полный root-доступ. Подключаться можно привычным способом через SSH или при необходимости через VNC. Все серверы работают на NVMe SSD, благодаря чему приложения реагируют быстрее, а задержки при работе с данными минимальны.</p><p>Поддержка работает круглосуточно, при этом базовое администрирование входит в тариф, а расширенное предлагается за отдельную оплату. При установке доступен широкий выбор операционных систем, что позволяет гибко подстроить сервер под нужды проекта.</p><h3>Тарифы и условия</h3><p>Тарифы у Fornex начинаются от 536 рублей в месяц. В эту стоимость уже включён безлимитный трафик со скоростью до 100 Мбит/с, а также защита от DDoS-атак мощностью до 10 Гбит/с.</p><p>Оплатить услуги можно разными способами:</p><ul><li>принимаются карты Visa, Mastercard и «Мир»,</li><li>переводы через СБП, а также PayPal и другие методы.</li></ul><p>При выборе стоит учитывать и отзывы пользователей: некоторые отмечают случаи оверселлинга, поэтому нагрузку лучше мониторить самостоятельно.</p><h2>3. Webhost1 в Европе, Азии иСеверной Америке</h2><p><a href="https://webhost1.ru/">Webhost1</a> — российский провайдер виртуальных серверов, который работает не только внутри страны, но и предлагает инфраструктуру за рубежом. Основное направление — доступные VDS на быстрых NVMe-дисках с выбором локаций в Европе, Азии и Северной Америке.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/40177d3d-ec55-4c71-bb26-bfd5e051bfb6.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Размещение сайтов и корпоративных проектов с выбором нужного региона для снижения задержек;</li><li>Запуск приложений или сервисов с требованием к скорости отклика и SSD-производительности;</li><li>Хостинг игровых серверов с возможностью выбора ближних к игрокам точек;</li><li>VPN или прокси-решения для частных задач;</li><li>Тестирование и запуск проектов, где важно недорого протестировать разные рынки.</li></ul><h3>Формат работы и особенности</h3><p>Webhost1 делает упор на сочетание доступности и глобального охвата: сервера можно разместить как в России, так и в Молдавии, Израиле, США, Нидерландах, Гонконге, Франции, Армении, Турции и Германии. Оплата организована максимально удобно — принимаются международные и российские платёжные системы, включая Visa, Mastercard, «Мир», UnionPay, СБП, SberPay и «ЮMoney». Для пользователей предусмотрены дополнительные возможности без доплаты: встроенная защита от DDoS-атак и базовое администрирование.</p><h3>Тарифы и условия</h3><p>Стоимость начинается от <b>340 рублей в месяц</b>. Есть гарантия возврата средств в течение 30 дней, но полноценного тестового периода или почасовой/посуточной оплаты не предусмотрено. Провайдер подходит как для личных проектов, так и для коммерческих задач, где нужна стабильность по адекватной цене.</p><h2>4. RuWeb — европейский VPS с полной документацией</h2><p><a href="https://ruweb.net/?utm_source=tproger&amp;utm_medium=article&amp;utm_campaign=rating&amp;utm_term=10+zarubezhnyh+vps">RuWeb — российский хостинг-провайдер</a>, который предлагает VPS и VDS в европейском дата-центре, расположенном в Амстердаме, а также в Москве. Сервера работают на площадке уровня Tier III, есть защита от DDoS, стабильная производительность и прозрачные условия аренды. Оплата полностью легальна и проходит в рублях — через СБП, банковские карты (включая Visa, Mastercard, МИР и Белкард), а также ЮMoney, WebMoney, интернет-банки и прямые переводы на расчетный счёт.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-08-25/73af2cd7-35f5-49b3-82cf-0930873c9fc4.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Размещение сайтов и интернет-магазинов;</li><li>Игровые серверы;</li><li>VPN и прокси-сервисы;</li><li>Разработка и тестирование приложений;</li><li>SaaS-проекты и внутренние сервисы.</li></ul><h3>Формат работы и особенности</h3><p>Сервера доступны в Европе — дата-центр в Амстердаме с уровнем надежности Tier III. Конфигурации масштабируются: можно выбрать до 10 CPU, до 36 ГБ оперативной памяти и до 720 ГБ диска. Трафик не ограничен, дополнительно включают базовую защиту от DDoS и бесплатный тестовый период — 6 дней. Все проекты должны соответствовать оферте провайдера.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-08-25/971ac5cc-8005-40b7-93cd-3bf74ac530f1.png" alt="" /></figure><h3>Тарифы и условия</h3><p>Базовая цена начинается от 380 рублей в месяц. Оплатить можно через СБП, SberPay, ЮMoney, WebMoney, карты Visa, Mastercard, МИР, Белкард, а также с помощью интернет-банков (включая Сбербанк, Альфа-Банк, ВТБ, Русский Стандарт и другие).</p><p>Техническая поддержка работает круглосуточно и говорит по-русски. Доступен рублёвый банковский перевод на расчётный счёт. Для физических лиц провайдер предоставляет подтверждение оплаты, для юридических — полный пакет документов: договор, оригиналы счетов и ежемесячные акты выполненных работ. Также возможен моментальный возврат средств при необходимости. RuWeb официально входит в реестр хостинг-провайдеров России.</p><p>RuWeb подойдёт тем, кому нужна строгая официальность: прозрачная рублёвая оплата, российская юрисдикция, документы для отчётности — всё на месте. Сервера в Европе, стабильные ресурсы, нормальный тестовый период. Удобный вариант для тех, кто запускает проекты с перспективой роста, но не хочет связываться с зарубежными платёжными системами и неофициальными схемами.</p><h2>5. Cloud4box — более 20 локацийпо всему миру</h2><p><a href="https://cloud4box.com/vps/">Cloud4box</a> — российский провайдер VPS, который делает ставку на стабильность и предсказуемость работы. Здесь используется виртуализация KVM с гарантированными ресурсами и современные процессоры Intel и AMD. Нет оверселлинга: пользователи получают только те мощности, которые оплачивают. У провайдера география от Финляндии и Нидерландов до США, Японии и Гонконга, чтобы запускать проекты в нужной юрисдикции и снижать задержки для локальных пользователей.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/f7d515fa-cee4-44f5-8b59-7b74da9dbfc6.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Размещение сайтов и корпоративных порталов под разные регионы;</li><li>SaaS-сервисы с распределённой инфраструктурой;</li><li>Игровые серверы с выбором оптимальной локации по пингу;</li><li>VPN и прокси с гибкой географией;</li><li>Тестирование приложений с привязкой к определённым странам.</li></ul><h3>Формат работы и особенности</h3><p>Cloud4box предлагает более двадцати локаций по всему миру: Европа, Азия и Северная Америка. С помощью KVM-виртуализации ресурсы гарантированы и не зависят от нагрузки соседних клиентов. Конфигуратор позволяет собрать VPS под конкретные задачи: добавить больше процессорных ядер, памяти или дискового пространства. Панель управления ISPmanager и резервные копии доступны как отдельные услуги, а не включены в базовую стоимость.</p><h3>Тарифы и условия</h3><p>Стоимость начинается от 412 рублей в месяц. Оплата принимается разными способами: банковские карты (Visa, MasterCard, «Мир»), СБП, «Халва», «ЮMoney», интернет-банки и другие.</p><p>Бесплатного тестового периода нет, резервное копирование и панель ISPmanager оплачиваются отдельно. В отзывах пользователи отмечают, что аптайм может быть ниже заявленного.</p><h2>6. PQ.Hosting с множеством локаций и безлимитным трафиком</h2><p><a href="https://the.hosting/ru/">PQ.Hosting </a>— провайдер из Молдавии, предоставляющий VPS/VDS на базе виртуализации KVM. Используется современное оборудование и высокоскоростные подключения до 10 Гбит/с. Есть удобный перенос сайтов на свои мощности.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/25de87e2-cd2c-46f2-b59d-0de894225a3e.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Перенос и размещение сайтов на VPS/VDS;</li><li>Развёртывания, которым нужна высокая пропускная способность (до 10 Гбит/с);</li><li>Проекты с требованиями к географии размещения (Европа, Азия, Северная и Южная Америка);</li><li>Среды администрирования с бесплатными панелями управления;</li><li>Быстрый старт с моментальным подключением (до 15 минут);</li><li>Временные тестовые развертывания за счёт наличия тестового периода.</li></ul><h3>Формат работы и особенности</h3><p>Основа — KVM с гарантированными виртуальными ресурсами. Провайдер заявляет собственное современное оборудование последнего поколения и неограниченный трафик. Доступен бесплатный перенос сайта от другого провайдера и выбор бесплатных панелей управления. После оплаты сервер подключается быстро — до 15 минут.</p><p>Локаций много: Нидерланды, Великобритания, Германия, Гонконг, Израиль, Канада, Латвия, Молдавия, Россия, Словакия, США, Украина, Чехия, Турция, Польша, Болгария, Румыния, Италия, Финляндия, Венгрия, Португалия, Швеция, Швейцария, Казахстан, Сербия, Ирландия, Франция, Испания, Греция, Литва, Эстония, Дания, Австрия, Норвегия, Бельгия, Исландия, Бразилия, Япония, Словения, Северная Македония, Армения, Хорватия, Люксембург, Южная Корея. По отзывам клиентов, встречаются случаи оверселлинга и частые проблемы с оборудованием.</p><h3>Тарифыи условия</h3><p>Стоимость начинается от <b>₽460 в месяц</b>. Оплата услуг возможна банковскими картами (Visa, MasterCard, «Мир»), криптовалютами, банковским переводом, через СБП, мобильный платёж, безналичный расчёт и другие способы. Предусмотрен тестовый период. Трафик не ограничен. Подключение происходит быстро — до 15 минут. Перенос сайтов — бесплатно.</p><h2>7. Serverspace — VPS с SSD ибезлимитом</h2><p><a href="https://serverspace.ru/">Serverspace</a> — хостинг-провайдер, у которого можно арендовать VPS за рубежом и платить в рублях. Есть удобная панель для настройки конфигураций и SSD-накопители с тройной защитой данных. Дата-центры расположены в Европе, Азии, Северной и Южной Америке.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/6a8d19f1-d51e-4005-8838-174646f0d744.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Размещение VPS в зарубежных локациях с оплатой в рублях.</li><li>Проекты, где важен безлимитный трафик.</li><li>Быстрый запуск окружения через простой веб-интерфейс с гибкой настройкой ресурсов.</li><li>Развёртывание сервисов с выделенным IP-адресом.</li><li>Размещение ближе к аудитории в указанных странах (Россия, Нидерланды, США, Казахстан, Канада, Турция, ОАЭ, Бразилия).</li></ul><h3>Формат работы и особенности</h3><p>Провайдер предлагает простой веб-интерфейс для конфигурирования ресурсов. Используются скоростные SSD с тройной защитой данных и процессоры Intel Xeon Gold (3,1 ГГц). На всех тарифах действует безлимитный трафик. Доступен быстрый запуск сервера и круглосуточная техподдержка. Выделенный IP включён в стоимость. Локации: Россия, Нидерланды, США, Казахстан, Канада, Турция, ОАЭ, Бразилия.</p><h3>Тарифы и условия</h3><p>Стоимость начинается от ₽429,65 в месяц. Оплату принимают банковскими картами (Visa, MasterCard, «Мир»), через СБП, в криптовалюте Everscale, по счёту и другими способами. Бесплатного администрирования нет, пробного периода тоже нет. Согласно отзывам клиентов, скорость бывает ниже заявленной.</p><h2>8. Profitserver —российские VPS в 19 странах</h2><p><a href="https://profitserver.ru/?_gl=1%2A1twmwul%2A_gcl_au%2AMjE0MzkyMDQ2My4xNzU1ODU1NDAx%2A_ga%2ANjkzODkxNTEzLjE3NTU4NTU0MDE.%2A_ga_LQYJBR7693%2AczE3NTU4NTU0MDEkbzEkZzEkdDE3NTU4NTU0MDYkajU1JGwwJGgw">Profitserver</a> — российский провайдер виртуальных серверов с доступом к инфраструктуре в 19 странах. Услуга подойдёт тем, кто хочет использовать зарубежные локации, но платить в рублях через официальные платёжные системы. Провайдер работает с локациями в Европе, Азии и США, включая популярные направления вроде Германии, Великобритании, Гонконга и Канады.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/21cb1bf0-04d3-494e-820e-517e26743753.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Сайты и веб-приложения с международной аудиторией;</li><li>VPN-сервисы и прокси в нужных юрисдикциях;</li><li>Сервера для размещения скриптов и сборщиков;</li><li>Проекты, которым нужен свой ISO-образ ОС;</li><li>Разработка и тестирование с геопривязкой.</li></ul><h3>Формат работы и особенности</h3><p>Провайдер предлагает готовые шаблоны ОС и скрипты, а также возможность загрузить собственный ISO-образ. Это удобно, если проект требует специфической конфигурации. Безлимитный трафик входит в базовый тариф. Техническая поддержка работает 24/7. За расширенное администрирование нужно платить отдельно. В случае аварийного простоя предусмотрена компенсация — в 10 раз больше стоимости недоступного времени.</p><h3>Тарифы и условия</h3><p>Цены начинаются от 390 рублей в месяц. Доступны 19 локаций, включая Россию, Нидерланды, США, Канаду, Гонконг, Израиль и другие. Оплата возможна через карты (Visa, MasterCard, «Мир»), WebMoney, СБП и другие.</p><p>Стоит знать, что бесплатного периода нет, а администрирование сверх базового тарифа — за отдельную плату. Также возможны проблемы со скоростью сети, поэтому для высоконагруженных решений стоит провести тестирование.</p><h2>9. FirstByte — быстрый запуск и низкий порог входа</h2><p><a href="https://firstbyte.ru/">FirstByte</a> — российский хостинг-провайдер с возможностью аренды VPS/VDS в зарубежных локациях. Отличается простым запуском — сервер можно получить уже через 5 минут после заказа. Поддержка работает круглосуточно, а сами тарифы начинаются от 259 рублей в месяц. Это один из самых доступных вариантов с зарубежной географией.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/7a90f15b-22e1-419e-a887-37762a856261.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Быстрый запуск сайтов или тестовых окружений;</li><li>Развёртывание CMS (WordPress, Joomla и других) за пару минут;</li><li>Размещение проектов с клиентами в Европе, США или Азии;</li><li>Временные инстансы под задачу — благодаря низкому порогу входа и тестовому периоду.</li></ul><h3>Формат работы и особенности</h3><p>У FirstByte — дата-центры в России и за рубежом: Финляндия, Нидерланды, Германия, Франция, Испания, Болгария, США и Сингапур. Это позволяет выбрать оптимальное расположение для проекта. Доступен 1-дневный тестовый период — можно попробовать VPS перед оплатой.</p><p>Поддерживается автоматическая установка популярных CMS и широкий выбор дистрибутивов Linux.Поддержка отвечает 24/7, провайдер заявляет полную ответственность за инфраструктуру.</p><h3>Тарифы и условия</h3><p>Цены — от 259 рублей в месяц, оплата через банковские карты (включая Visa, MasterCard, «Мир», UnionPay), а также электронные деньги и интернет-банк. Минусы — есть вопросы к стабильности и качеству поддержки, судя по отзывам. Но если нужна зарубежная география за минимальный бюджет и вы готовы всё держать под контролем — вариант рабочий.</p><h2>10. King Servers — VPS в Европе и США с оплатой в рублях</h2><p><a href="https://kingservers24x7.com/">King Servers</a> — российский провайдер виртуальных серверов, предлагающий мощности в России, Нидерландах и США. Основная ставка сделана на стабильность и производительность: используется серверное оборудование Dell и Supermicro с процессорами Intel Xeon и полной изоляцией ресурсов. Это значит, что нагрузка соседних клиентов не влияет на ваши проекты.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-22/7351d252-2535-40a1-9e97-898caa345ca6.png" alt="" /></figure><p>Сценарии использования</p><ul><li>Развёртывание сайтов и корпоративных порталов;</li><li>Игровые серверы с минимальной задержкой для Европы и США;</li><li>VPN-сервисы с привязкой к зарубежным локациям;</li><li>SaaS-приложения и сервисы, где нужна стабильность и изоляция;</li><li>Запасные площадки для бэкапов и отказоустойчивых решений.</li></ul><h3>Формат работы и особенности</h3><p>Сервера расположены в трёх странах: России, Нидерландах и США. Поддержка работает 24/7 и отвечает на русском и английском. Дополнительно предусмотрена защита от DDoS-атак — полезно для публичных проектов и игровых платформ. Важный плюс — возможность гибкого масштабирования ресурсов по мере роста нагрузки, без полной миграции на другой тариф.</p><h3>Тарифы и условия</h3><p>Стоимость — от 451 рубля в месяц, оплата принимается через банковские карты (Visa, MasterCard, «Мир»), «ЮMoney» и другие популярные способы.</p><p>Минус — отсутствие бесплатного теста и неоднозначные отзывы о саппорте, поэтому перед выбором стоит чётко понимать свои требования. Если ключевой фактор — стабильность, железо Dell и Supermicro и честная изоляция ресурсов, этот провайдер закрывает эти задачи.</p><p>Когда выбираешь среди десятков VPS-провайдеров с разной географией, ценами и поддержкой, легко увязнуть в нюансах, но по факту всё сводится к <b>трём главным вопросам</b>.</p><p>Во-первых, где <b>физически будет стоять сервер</b>. Если важен пинг или географическая близость к пользователям — ищите конкретные страны. Кто-то даёт доступ к редким странам вроде Израиля и Гонконга, кому-то нужны просто стабильные дата-центры в ЕС.</p><p>Во-вторых,<b> как оплачивать</b> и что потом с этими оплатами делать. Кто-то работает с юрлицами, у кого-то только ИП или физлица. Одни дают полный комплект документов, другие — только чек. Если вы компания, которой нужно закрывать акты — это критично.</p><p>В-третьих — <b>сам сервер</b>. Какие процессоры, есть ли оверселлинг, можно ли сконфигурировать под себя или только готовые шаблоны. Плюс нюансы вроде DDoS-защиты, панелей управления, тестового периода.</p><p>Среди перечисленных решений точно найдутся те, что закроют конкретную задачу, поделится своим опытом и добавить рекомендацию — всегда можете в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>6 способов автоматизировать ревью кода — подборка сервисов</title>
      <link>https://tproger.ru/articles/6-sposobov-avtomatizirovat-revyu-koda---podborka-servisov</link>
      <comments>https://tproger.ru/articles/6-sposobov-avtomatizirovat-revyu-koda---podborka-servisov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/6-sposobov-avtomatizirovat-revyu-koda---podborka-servisov</guid>
      <description><![CDATA[<p>Устали от ручного код-ревью? Обзор инструментов, которые автоматически проверяют код, находят уязвимости и экономят время команды.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/6-sposobov-avtomatizirovat-revyu-koda---podborka-servisov">6 способов автоматизировать ревью кода — подборка сервисов</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 Aug 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Код-ревью — важный этап разработки, но он часто отнимает много времени и ресурсов, особенно у ведущих специалистов. Если вы хотите ускорить процесс и повысить качество кода, не обязательно нагружать команду. Есть инструменты, которые берут часть рутины на себя.</p><h2>BeeCR: автоматический помощник для ревью в GitLab</h2><p><a href="https://beecr.ru">BeeCR</a> — сервис, который автоматически просматривает изменения в запросах на слияние (Merge Requests) в проектах GitLab и добавляет к ним комментарии. Каждый файл, который вы меняете, получает свой набор комментариев.</p><p>Сервис пригодится всем, кто пишет код на популярных языках программирования, и понимает, зачем нужно код-ревью. BeeCR работает с кодом на Python, JavaScript, Java, Kotlin, Swift, C#, C++, Ruby, PHP, Go, Bash/Shell, TypeScript и др.</p><p>Этого помощника можно добавить в команды, где процессы уже работают с живыми специалистами, или внедрить код-ревью с нуля без лишних затрат по времени и деньгам.</p><h3>Что именно проверяет?</h3><p>BeeCR — это не замена линтерам или инструментам для строгой проверки кода по конкретным гайдам. Он действует скорее как человек-ревьюер. Сервис способен обнаружить:</p><ul><li>Нарушения логики в алгоритме.</li><li>Лишний код, который случайно остался после отладки.</li><li>Ошибочность информации в логах.</li><li>Неудачное именование сущностей. Его задача — помочь найти неочевидные проблемы и дать рекомендации.</li></ul><h3>Как он встраивается в процесс разработки?</h3><p>BeeCR <b>бесшовно интегрируется с GitLab</b>. Результаты автоматического ревью отображаются прямо в привычном интерфейсе GitLab Code Review, рядом с комментариями ваших коллег.</p><p>Есть два основных способа интеграции:</p><ul><li>Через Вебхук: это самый простой и удобный вариант для большинства. Вебхук BeeCR запускается автоматически при создании или обновлении Merge Request.</li><li>Через CI/CD: если у вас уже есть развитая конфигурация GitLab CI/CD, этот вариант позволит выполнить более тонкую настройку. BeeCR предоставляет готовые конфигурации или шаблоны CI/CD-задач, которые можно использовать как есть или доработать. Для новых версий GitLab (начиная с 17) доступен CI/CD-компонент.</li></ul><h3>Можно ли настроить BeeCR под себя?</h3><p>В BeeCR можно кастомизировать разные рабочие параметры:</p><ul><li>Язык комментариев: по умолчанию комментарии пишутся на английском, но вы можете указать другой язык, например, русский.</li><li>Фильтрация файлов: управляйте списком файлов для проверки (или исключения) с помощью регулярных выражений.</li><li>Языковая модель: в версии On-Premises можно выбрать языковую модель (например, OpenAI или Ollama) и настроить её параметры.</li><li>Дополнительные инструкции: можно задать промты, чтобы получить более специфичные комментарии, через конфигурационный файл или комментарий в Merge Request.</li><li>Триггер и путь к конфигу: вы можете переопределить ключевое выражение-триггер (по умолчанию /beecr) и путь к конфигурационному файлу .beecr.yml. Настройки задаются через HTTP-заголовки вебхука, параметры запроса в URL, конфигурационный файл .beecr.yml в корне репозитория, переменные окружения сервера API (для On-Premises) или параметры задачи CI/CD.</li></ul><h3>Как попробовать и сколько это стоит?</h3><p>BeeCR предлагает пробный период на 1 месяц без ограничений. Стоимость рассчитывается по количеству активных участников в запросах на слияние в GitLab. К таким участникам относятся разработчики, ревьюверы, участники дискуссий и ответственные за слияние ветки. Сервис доступен в облачной версии (SaaS) или для локальной установки (On-Premises).</p><p>В версии On-Premises можно использовать как локально развернутые, так и внешние модели ИИ (например, ChatGPT), при этом оплата внешних моделей ложится на клиента. BeeCR включен в реестр Российского программного обеспечения (реестровая запись №25382 от 12.12.2024).</p><h2>Reshift — автоматическая проверка безопасности JS-кода</h2><p><a href="https://github.com/Reshift-Security/npm_plugin">Reshift</a> предлагает легковесный JavaScript-плагин для npm, призванный выявлять уязвимости ещё на этапе разработки. Он выполняет быстрое сканирование изменений и даёт подсказки по исправлению, одновременно обучая и поддерживая разработчика через понятные рекомендации.</p><p>Поддерживаемые языки: JavaScript.</p><h2>Что именно проверяет?</h2><p>В функции плагина входят:</p><ul><li>Набор проверок безопасности, разработанных экспертами в области безопасности;</li><li>Подробные, понятные описания обнаруженных проблем (DevSec Coach);</li><li>Рекомендации по исправлению (remediation snippets);</li><li>Ссылки на дополнительные ресурсы по уязвимостям.</li></ul><h2>Как встраивается?</h2><p>Сейчас плагин доступен только ограниченной группе участников закрытого бета-тестирования. Чтобы подключиться, нужно записаться на waitlist через сайт Reshift.</p><h2>Collaborator — расширенное ревью с фокусом на командную работу</h2><p><a href="https://smartbear.com/product/collaborator/">Collaborator</a> от SmartBear — это мощный инструмент для организации командного ревью кода, документации и тестов. Он не ограничивается автоматической проверкой — ключевая особенность сервиса в том, что он объединяет разработчиков, тестировщиков, аналитиков и технических писателей в едином процессе. Здесь ревью — это не только поиск ошибок, но и улучшение коммуникации внутри команды.</p><p>Практически все популярные языки программирования, включая Java, Python, JavaScript, C#, C++, PHP, Go, Swift, Kotlin и др. Также поддерживается ревью не только исходного кода, но и документации (Markdown, reStructuredText, HTML, PDF, Word) и тестовых сценариев.</p><h2>Что именно проверяет?</h2><p>Collaborator сочетает автоматическую проверку и ручное ревью, в его функции входят:</p><ul><li>Ревью исходного кода и документов (Word, PowerPoint, Visio, PDF, изображения, URL и др.)</li><li>Совместное обсуждение изменений, пометки дефектов и контроль версий</li><li>Возможность создания шаблонов ревью, чек-листов и пользовательских рабочих процессов</li><li>Отчёты для анализа процессов, отслеживания дефектов и аудита</li></ul><h2>Как встраивается?</h2><ul><li>Поддерживаются более 11 систем контроля версий: Git, Subversion, Perforce, TFS, CVS, Mercurial, ClearCase, AccuRev, Rational Team Concert и др.</li><li>Также интеграция со средами разработки (Eclipse, Visual Studio), Jira, Web UI и API.</li></ul><h2>Можно ли настроить под себя?</h2><ul><li>Создание чек-листов для обязательных пунктов ревью (например, безопасность, оптимизация, тестирование).</li><li>Настройка уровней серьёзности комментариев (информация, предупреждение, ошибка).</li><li>Возможность использования шаблонов ревью и шаблонов отчётов для стандартизации процесса.</li><li>Поддержка метрик — можно отслеживать, сколько дефектов найдено, сколько времени уходит на ревью, кто из участников наиболее активен.</li></ul><h2>Как попробовать и сколько стоит?</h2><p><b>Community</b> — бесплатная для небольших команд (до ~10 пользователей), с базовым набором функций.</p><p><b>Team</b> — платная, для средних команд (до ~25 пользователей), с расширенными возможностями ревью. $755 в год за пакет на 5 пользователей (до 25 человек).</p><p><b>Enterprise</b> — полная версия для крупных организаций; включает мощные настройки, интеграции и поддержку Simulink моделей. Около $1349 в год за одну concurrent-лицензию, включая поддержку Simulink и расширенные возможности.</p><h2>Codestriker — лёгкий инструмент для асинхронного ревью</h2><p><a href="https://codestriker.sourceforge.net">Codestriker</a> —  это веб-приложение с открытым исходным кодом (написано на Perl под GPL), предназначенное для асинхронного код-ревью. Оно поддерживает работу с диффами из систем контроля версий и предоставляет удобный интерфейс для коллективного ревью.</p><p>Работает с любыми языками программирования, поскольку анализирует диффы и текст. Поддерживает также документальные ревью.</p><h2>Что именно проверяет?</h2><p>Сам по себе Codestriker не выполняет <b>глубокий автоматический</b> анализ кода.</p><p>Для статического анализа, проверки стиля или поиска уязвимостей его можно дополнить линтерами, CI-скриптами или внешними утилитами.</p><p>Основная функция — хранить диффы и обсуждения, предоставляя удобный интерфейс для комментариев и фиксации договорённостей.</p><h2>Как встраивается в процесс разработки?</h2><ul><li>Работает через веб-интерфейс, не требует сложной установки.</li><li>Поддерживает загрузку диффов и изменений напрямую или через интеграцию с системами контроля версий.</li><li>Сохраняет историю всех ревью для удобного поиска и аудита.</li><li>Поддерживает экспорт результатов и комментариев в HTML или текстовые файлы — полезно для отчётности и архивирования.</li><li>Интегрируется с системами контроля версий: CVS, Subversion, ClearCase, Perforce, Visual SourceSafe.</li><li>Паспортная интеграция с баг-трекерами (Bugzilla, Flyspray) и системой LXR для быстрого просмотра кода.</li></ul><h2>Можно ли настроить под себя?</h2><p>Можно дорабатывать под свои процессы, так как это open-source.</p><ul><li>Поскольку Codestriker — это open-source, его можно модифицировать под внутренние процессы: добавить плагины, интеграцию с баг-трекерами, отчёты в специфическом формате.</li><li>Можно настраивать шаблоны комментариев, порядок отображения изменений, форматы экспорта.</li><li>Код доступен для свободной доработки, что делает сервис особенно привлекательным для команд с собственными требованиями.</li><li>Требует наличие сервера и СУБД — поддерживаются MySQL, PostgreSQL, Oracle, SQL Server и любая база через DBI.</li><li>Разворачивается на сервере: конфигурация веб-сервера (Apache/IIS), базы данных, установка Perl-модулей.</li></ul><h2>Как попробовать и сколько стоит?</h2><ul><li><b>Полностью бесплатен</b> — распространяется под открытой лицензией.</li><li>Можно развернуть на любом сервере или даже локально.</li><li>Подходит как временное решение для небольших команд, так и как база для создания собственного инструмента ревью.</li></ul><h2>Gerrit — мощный инструмент для распределённых команд</h2><p><a href="https://www.gerritcodereview.com/">Gerrit</a> — это мощная open-source платформа для ревью кода, тесно интегрированная с Git. Она используется во многих крупных компаниях и open-source проектах, где требуется строгий контроль качества кода и формальный процесс утверждения изменений.</p><p>Поддерживаемые языки: любые Gerrit работает на уровне изменений в Git, а не конкретного языка. Можно ревьюить и код, и документацию, и конфигурационные файлы.</p><p>Проект начал развиваться как форк от системы Rietveld и был создан Шоном Пирсом (одним из авторов Git) для внутренней разработки Android в Google .</p><p>В версии 2.x проект был переписан с Python на Java (Java EE), с использованием SQL для метаданных. Начиная с версии 3.x, Gerrit перешёл на NoteDb, где все метаданные хранятся непосредственно в Git-репозитории.</p><h2>Что именно проверяет?</h2><p>Сам по себе Gerrit не выполняет статический анализ, но легко интегрируется с линтерами, CI/CD-пайплайнами и системами тестирования. Основная задача — управление процессом ревью: комментарии к конкретным строкам, обсуждения, обязательное одобрение перед слиянием. Поддерживает настройку правил мёрджа (например, «два апрува от сеньоров» или «все тесты должны пройти»).</p><p>Пользователи создают review, отправляя коммит на refs/for/branch, что отличает изменения, требующие ревью, от прямых коммитов. Ревьюеры могут голосовать, модель оценки, например, используется шкала от -2 до +2 для Code-Review и Verified чеков. Доступно изменение изменений в рамках одного change (patch set), с возможностью обсуждения и улучшения кода до принятия.</p><h2>Как встраивается?</h2><ul><li>Работает как веб-приложение поверх Git. Поддержка SSH и HTTPS для работы с Git-клиентами, возможность размещения и управления множеством репозиториев с продвинутым контролем доступа и репликацией (например, геораспределённые зеркала)</li><li>Предоставляет визуальный интерфейс для сравнения изменений и обсуждения.</li><li>Глубокая интеграция с Jenkins, GitHub Actions, GitLab CI и другими CI/CD-системами.</li><li>Поддерживает fine-grained permissions — можно задать права на просмотр, комментирование и утверждение кода на уровне проекта, папки или файла.</li><li>Расширяемый через серверные плагины, доступные в официальном репозитории.</li></ul><h2>Можно ли настроить под себя?</h2><p>Доступны плагины, собственные скрипты, тонкая настройка прав доступа:</p><ul><li>Плагины для интеграции с трекерами задач (Jira, Redmine и др.).</li><li>Скрипты для автоматизации ревью и проверки коммитов.</li><li>Возможность настроить workflow под конкретный проект: обязательные шаги, правила коммит-месседжей, формат патчей.</li></ul><h2>Как попробовать и сколько стоит?</h2><ul><li><b>Полностью бесплатен</b>, распространяется под лицензией Apache 2.0.</li><li>Можно развернуть на своих серверах или использовать облачные инсталляции.</li><li>Отлично подходит для крупных команд с формализованным процессом разработки.</li><li>Gerrit — полностью open-source. Обновления можно скачивать в виде .war или через Maven Central, подписанные ключом автора.</li><li>Сообщество активно поддерживает релизы, документацию и обсуждения через форумы, Discord и пользовательские мероприятия.</li></ul><h2>Crucible — код-ревью с аналитикой и интеграцией в Atlassian</h2><p><a href="https://www.atlassian.com/software/crucible">Crucible</a> от Atlassian — это инструмент для код-ревью, ориентированный на большие компании, которым нужны интеграции с экосистемой Atlassian (Jira, Bitbucket, Confluence) и детальная аналитика по процессу ревью.</p><p>Поддерживаемые языки: любые, так как Crucible анализирует текстовые изменения. Есть готовые плагины для популярных языков.</p><h2>Что именно проверяет?</h2><ul><li>Логические ошибки;</li><li>Историю коммитов с возможностью поиска;</li><li>Потенциальные баги и нарушения стиля кода (с помощью подключаемых линтеров);</li><li>Несоответствия между кодом и документацией;</li><li>Общие архитектурные недочёты (в рамках командного обсуждения).</li></ul><p>Доступны Review и обсуждения — есть возможность комментировать строки кода, запускать threaded-дискуссии, упоминания и встроенные обсуждения. Ленты событий показывают последние комментарии, обновления, активность команды.</p><h2>Как встраивается?</h2><ul><li>Поддерживает Git, SVN, Mercurial, Perforce и CVS.</li><li>Интегрируется с Jira — можно привязывать задачи к конкретным ревью.</li><li>Есть возможность планировать ревью, назначать ответственных, отслеживать прогресс и статистику по команде.</li><li>Поддерживает расширение через REST API, можно создавать надстройки через плагины.</li></ul><h2>Можно ли настроить под себя?</h2><p>Это кроссплатформенное (Windows, Linux, macOS)  Java-приложение — требует x86‑64 или аналогичный. Подключаются официально поддерживаемые СУБД: HSQLDB (для тестирования), MySQL, PostgreSQL, Oracle, SQL Server.</p><ul><li>Настраиваемые шаблоны ревью.</li><li>Чек-листы для проверки типовых требований.</li><li>Автоматические уведомления и напоминания для участников.</li><li>Гибкая настройка прав доступа.</li></ul><h2>Как попробовать и сколько это стоит?</h2><ul><li>Платная лицензия: от $10 для 5 пользователей, далее цена зависит от команды.</li><li>Есть 30-дневный бесплатный пробный период.</li><li>Оптимально для компаний, уже использующих Atlassian Jira и Bitbucket.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Где арендовать GPU в 2026: подборка GPU‑хостингов с адекватной ценой и SLA</title>
      <link>https://tproger.ru/articles/gde-arendovat-gpu-v-2025--podborka-gpu-hostingov-s-adekvatnoj-cenoj-i-sla</link>
      <comments>https://tproger.ru/articles/gde-arendovat-gpu-v-2025--podborka-gpu-hostingov-s-adekvatnoj-cenoj-i-sla?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/gde-arendovat-gpu-v-2025--podborka-gpu-hostingov-s-adekvatnoj-cenoj-i-sla</guid>
      <description><![CDATA[<p>Сравниваем GPU-хостинги 2025 года по ценам, доступности и гарантиям SLA.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/gde-arendovat-gpu-v-2025--podborka-gpu-hostingov-s-adekvatnoj-cenoj-i-sla">Где арендовать GPU в 2026: подборка GPU‑хостингов с адекватной ценой и SLA</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Быстрый старт]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Tesla]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Яндекс]]></category>
      <category><![CDATA[NVIDIA]]></category>
      <category><![CDATA[Техподдержка]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[VMware]]></category>
      <category><![CDATA[Сбер]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 13 Aug 2025 12:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году многие команды уже не просто экспериментируют с машинным обучением — они строят полноценные сервисы на базе глубоких нейросетей, генеративных моделей и классического HPC.</p><p>Покупка железа на свои деньги — удовольствие дорогое и мало гибкое: дорогие карты быстро устаревают, а спрос внутри команды может скакать от интенсивного обучения до редкого инференса.</p><p>В этой подборке мы собрали сервисы для облачной аренды — то есть платформы, которые позволяют:</p><ol><li>запускать модели прямо в облаке, без локальной инфраструктуры;</li><li>платить исключительно за те вычислительные ресурсы, которые реально используете;</li><li>легко наращивать мощности по мере роста нагрузки.</li></ol><h2>1. Hostkey — сервера с GPU на все случаи жизни</h2><p><a href="https://hostkey.ru/gpu-dedicated-servers/?utm_source=tproger.ru&amp;utm_medium=referral&amp;utm_campaign=benchmark">Hostkey </a>— один из проверенных хостинг-провайдеров на российском рынке, который сдаёт в аренду виртуальные и физические серверы с новыми видеокартами. У Hostkey гибкая почасовая оплата — значит, что вы используете мощность ровно столько, сколько нужно, без лишних трат.</p><h2>Задачи, для которых GPU-решения от Hostkey подойдут</h2><p>Современные GPU дают скорость для
обучения нейросетей. Для изображений — сверточные сети (CNN). Для
последовательностей — рекуррентные, как RNN, LSTM или GRU. Для больших моделей
вроде GPT или BERT — архитектуры Transformer. Параллельная обработка позволяет
запускать несколько моделей сразу, чтобы подбирать гиперпараметры. Интеграция с
фреймворками TensorFlow, PyTorch, JAX и HuggingFace Transformers работает без
проблем.</p><p><b>Генеративные
модели</b> для текстов — GPT, LLaMA или Falcon, чтобы
генерировать контент, чат-боты, копирайтинг или переводы. Для изображений —
Stable Diffusion, DALL·E или Midjourney, включая стилизацию. Аудио: TTS вроде
Tacotron или VITS, плюс клонирование голоса. Видео: генерация анимации или
upscaling с Topaz. Код: автогенерация через Codex, Code LLaMA или StarCoder.</p><p><b>Инференс:
</b>онлайн для быстрых ответов в чат-ботах, поиске или
персонализации; батч для больших объёмов, как генерация изображений по текстам.
Библиотеки ONNX, TensorRT и DeepSpeed оптимизируют скорость.</p><p><b>В
обработке естественного языка:</b> извлечение информации,
семантический поиск с векторами, суммаризация или перевод. Для изображений и
видео: обнаружение объектов, сегментация, inpainting или аналитика видеопотоков
в реальном времени.</p><h2>Параметры аренды: модели, цены и
варианты</h2><p><b></b>HOSTKEY предлагает выбор GPU-решений — от выделенных серверов с индивидуальными конфигурациями до виртуальных машин с гарантированным доступом к выделенной видеокарте, ресурсы которой не
разделяются с другими пользователями. По задачам и бюджету: игровые модели
вроде NVIDIA RTX 4090 или 5090; профессиональные вроде Tesla A100 и H100 — для
крупных ИИ-проектов и расчётов.</p><p>Аренда помесячная с большой скидкой или
почасовая. Серверы в России, Исландии, Франции, Нидерландах, Германии,
Финляндии или США.</p><p>Цены от 7000 рублей в месяц или от 10
рублей в час — это базовые тарифы. Аренда оборудования оформляется через
российскую компанию, даже для зарубежных дата-центров: оплата простая, без
международных переводов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-12/dd7b61e6-55c3-4f18-85d0-2b08f867ce2b.png" alt="" /></figure><h2>Примеры использования GPU-серверов клиентами HOSTKEY</h2><p>Один из примеров применения — наложение
рекламных объектов на элементы видеопотока во время прямых трансляций
спортивных событий. Благодаря мощности GPU, обработка происходит в реальном
времени, без задержек и с высоким качеством. Этот кейс описан в <a href="https://hostkey.ru/blog/72-kak-ai-pomogaet-poborot-monopoliyu-v-sportivnoj-reklame-i-pri-chem-tut-gpu-i-vydelennye-servery/">блоге на сайте компании</a>.</p><p>Другой кейс — виртуальная примерка в интернет-магазине: достаточно навести
камеру на стопу, и система в реальном времени покажет, как будут выглядеть
кроссовки. Здесь задействуются генеративные модели, способные мгновенно
адаптировать изображение под конкретного пользователя.</p><p>Ещё варианты: чат-боты для корпоративного
использования, анализ тона упоминаний бренда в соцсетях через большие данные,
запуск готовых LLM-моделей, тренировка нейросетей или рендеринг изображений и
видео по запросу — без переплат за простой.</p><h2>Как быстро арендовать
вычислительные ресурсы</h2><p>Заказать сервер можно <a href="http://hostkey.ru">на сайте</a> или в
личном кабинете, предварительно зарегистрировавшись. С момента заказа до
предоставления доступов к серверу проходит от 5 до 60 минут, в зависимости от
выбранного ПО. Если нужна индивидуальная конфигурация с ручной сборкой, то 1–3
рабочих дня. Доступ через веб-панель управления, API для автоматического
заказа, управления и расформирования сервера, или консоль.</p><p>Также HOSTKEY предлагает
предустановленное программное обеспечение из Маркетплейса. Подборка приложений
для GPU серверов находится в <a href="https://hostkey.ru/services/ai-platform/">разделе AI-платформа</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-12/9d4560aa-381f-4a35-bb62-61c78a6e31f0.png" alt="" /></figure><h2>Лимиты на данные и тесты</h2><p>Исходящий трафик 50 Тб в месяц бесплатно на скорости 1 или 10 Гбит/с.</p><p>Для крупных корпоративных клиентов —
тестовый период по запросу. Бесплатного пробного баланса нет, но короткая
аренда заменяет тест.</p><p>HOSTKEY предлагает серверы с картами последнего поколения Nvidia RTX PRO 6000 Blackwell с объемом видеопамяти 96 ГБ. RTX PRO 6000 предоставляет в 3 раза больше памяти, чем RTX 5090, и в 4 раза больше, чем RTX 4090, что делает ее уникальным решением, способным работать с моделями ИИ и наборами данных корпоративного уровня.</p><h4>Поддержка</h4><p>Поддержка круглосуточная, ответ на
обращение — не дольше 15 минут. Связаться можно через онлайн-чат на сайте,
мессенджеры WhatsApp или Telegram, по e-mail.</p><p>Сейчас у HOSTKEY действуют дополнительные <a href="https://hostkey.ru/gpu-dedicated-servers/">скидки
до 25%</a> на долгосрочную аренду серверов.</p><h2>2. ITGLOBAL.COM GPU Cloud — облачные ускорители для  AI, ML, HPC и сложной графики</h2><p><b>I</b>TGLOBAL.COM предлагает сервис<a href="https://itglobal.com/ru-ru/services/virtual-infrastructure/arenda-oblachnyh-gpu-serverov/?utm_source=tproger&amp;utm_medium=cdc&amp;utm_campaign=rating_gpu_hosting_2025"> GPU Cloud</a>, который позволяет арендовать виртуальные серверы с графическими ускорителями. Услуга актуальна для тех компаний, которым требуется быстрый доступ к мощным GPU без необходимости инвестировать в покупку собственного дорогостоящего оборудования. Сервис построен на базе платформы виртуализации VMware, виртуальные машины оснащены графическими ускорителями NVIDIA.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-12/a14b6948-1da1-4e99-af23-caf29b01c84b.png" alt="" /></figure><h2>Сценарии
применения: где работают облачные ускорители</h2><p>ITGLOBAL.COM перечисляет четыре ключевых сценария, где облачные GPU приносят максимальный эффект:</p><ol><li>Машинное обучение и ИИ. Модели обучаются быстрее благодаря параллельным вычислениям.</li><li>Высокопроизводительные вычисления. Ускорители позволяют специалистам быстрее решать математические задачи и проводить научные расчёты.</li><li>Научное моделирование и CUDA‑вычисления. Графические процессоры ускоряют выполнение сложных вычислений и симуляций.</li><li>Дизайн и графика. Дизайнеры используют облако для визуализации, анимации и рендеринга больших объёмов данных.</li></ol><h2>Аппаратные возможности и базовые тарифы</h2><p>Клиентам предлагают несколько поколений профессиональных видеокарт NVIDIA: A16, A800, A100, H100 и H200. Минимальная конфигурация виртуальной машины включает 1 vCPU, 1 ГБ RAM, 30 ГБ SSD и 4 ГБ памяти GPU на базе A16. Стоимость такой конфигурации начинается от 5 000 рублей с НДС, при этом минимальный срок аренды — один месяц.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-12/b02ec57d-934b-4b86-8147-c90d7115e21a.png" alt="" /></figure><h2>Типичные кейсы: обучение моделей и создание контента</h2><p>Мы нашли два наглядных примера, как используют сервис ITGLOBAL.COM:</p><ol><li>Тренировка и запуск моделей. Data Scientist или ML‑инженер развёртывает в облаке GPU‑сервер для обучения нейросетей (к примеру, для распознавания изображений или обработки текста). Преимущество в том, что не нужно покупать дорогое оборудование; ресурсы удобно масштабировать под задачу и менять тип видеокарты.</li><li>Видеорендеринг и 3D‑графика. Видеостудия или дизайнер отправляет сложные сцены на рендер в облако. Это избавляет от необходимости содержать мощные рабочие станции и даёт доступ к современному железу с высокой производительностью, позволяя легко обновлять конфигурацию по мере роста проектов.</li></ol><h2>Быстрый старт и тестовый период</h2><p>Сервис ориентирован на длительную аренду, но при этом позволяет быстро приступить к работе: стандартные конфигурации выдаются в течение одного дня. Для оценки возможностей предлагается бесплатный тестовый период на 30 дней, который заменяет собой традиционный «пробный баланс» и даёт время проверить, подходит ли производительность GPU‑клауда под ваши задачи.</p><h2>Как получить поддержку и консультацию</h2><p>Тем, кто ещё не является клиентом, ITGLOBAL.COM предлагает оставить заявку на сайте, написать на почту sales@itglobal.com или позвонить по указанному на сайте номеру. Действующие клиенты получают доступ к личному кабинету с системой тикетов, могут обращаться по e‑mail, телефону, в онлайн‑чат и даже через каналы экстренной поддержки 24/7 для решения срочных вопросов.</p><h2>3. immers.cloud — виртуальные и выделенные GPU с посекундной тарификацией</h2><p><a href="https://immers.cloud/?utm_source=tproger&amp;utm_medium=gpu-rating&amp;utm_campaign=2025">immers.cloud</a> — облачный провайдер, который сдаёт в аренду виртуальные и выделенные серверы с GPU на базе OpenStack. Главное отличие от других провайдеров — каждая виртуальная машина получает GPU целиком, без разделения ресурсов с другими пользователями и без оверселлинга.</p><h3>Задачи, для которых подойдут GPU-решения immers.cloud</h3><p>Ресурсы платформы используются для инференса и обучения нейросетей, файнтюнинга LLM, 3D-рендеринга, научного моделирования и обработки видео. Помимо самих серверов, доступны частные инстансы с<a href="https://immers.cloud/ai/model/"> Immers Foundation Models</a>, программно-определяемое S3-хранилище и маркетплейс образов с популярным ПО — Windows, Ubuntu, Debian и другими дистрибутивами Linux.</p><h3>Параметры аренды: модели, цены и варианты</h3><p>Immers.cloud предлагает 13 моделей GPU — от дата-центровых H200, H100 NVL, H100 и A100 до игровых RTX 5090, RTX 4090, RTX 3090 и RTX 3080, а также промежуточные варианты RTX A5000, A10, RTX 2080 Ti, A2, T4 и V100.</p><p>Тарификация посекундная — платите ровно за то время, что сервер реально работал. Цены стартуют от 20 рублей в час, минимальная конфигурация — teslat4-1.4.8.60.</p><p>На платформе можно арендовать виртуальные серверы с GPU и CPU (NVMe/SSD/HDD), выделенные серверы с GPU и CPU, а также подключать несколько видеокарт сразу: до 8 GPU на один виртуальный сервер и до 10 — на выделенный.</p><h3>Примеры использования GPU-серверов клиентами immers.cloud</h3><p>Команда «КС Авто» развернула автономную AI-систему для круглосуточной модерации контента — спама, фото и текстов. Мультимодальные модели работают через Ollama на трёх облачных RTX 4090 с NVMe, потоки изолированы по видеокартам, без Kubernetes. Система фильтрует сотни спам-атак ежедневно и полностью заменяет штат из 15 модераторов.</p><p>Команда IBS построила на платформе единую R&amp;D-песочницу для быстрых AI-экспериментов. Смешанная нагрузка — LLM, NLP, VLM — управляется через GPUStack и vLLM на пуле облачных видеокарт (A100, RTX 3090, RTX 4090) с гибридным сетевым доступом через VPN и прокси. Сейчас в работе 11 активных инстансов для 14 моделей, что позволяет тестировать новые гипотезы за часы, не разворачивая новые серверы.</p><h3>Как быстро арендовать вычислительные ресурсы</h3><p>Одно из главных преимуществ immers.cloud — быстрый онбординг: чтобы начать работу, достаточно зарегистрироваться и пополнить баланс от 100 рублей. Доступ к ресурсам — через API OpenStack (релиз Zed), причём используется немодифицированный native OpenStack, поэтому подходят любые стандартные клиенты и библиотеки для работы с API.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2026-07-07/ee7079a4-0a16-47be-b82f-465e7a979d58.webp" alt="" /><figcaption>Личный кабинет immers.cloud</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/99854/2026-07-07/b72b0240-3f9b-474c-81fd-db56c099ffa8.webp" alt="" /><figcaption>Создание сервера в immers.cloud</figcaption></figure><h3>Лимиты на данные и тесты</h3><p>Лимитов на загрузку и выгрузку данных нет. Для новых пользователей действуют квоты по умолчанию: 16 ядер vCPU, 128 ГБ RAM, до 10 томов, до 20 снимков, 1600 ГБ суммарного объёма хранения и 4 виртуальные машины. Квоты можно увеличить запросом в поддержку.</p><p>Бесплатный тестовый период до 30 дней или можно запросить индивидуальные тестовые сроки под задачу.</p><h3>Поддержка</h3><p>Техподдержка круглосуточная — через чат на сайте, Telegram (или Мах) и по электронной почте, плюс персональный менеджер.</p><h2>4. Yandex
Cloud — виртуальные машины с почасовой тарификацией</h2><p>Публичная облачная
платформа Яндекс.Облако предлагает виртуальные машины с графическими
ускорителями NVIDIA Tesla V100 (32 ГБ HBM2), Ampere A100 (80 ГБ HBM2e) и Tesla
T4 (16 ГБ GDDR6). GPU предоставляются целиком (без шаринга между клиентами) и
доступны конфигурации до 8 GPU на ВМ, включая кластерный режим с объединением
нескольких ВМ через высокоскоростную сеть (InfiniBand) для распределенного
обучения моделей.</p><h2>Сценарии использования</h2><p>Сервис ориентирован на
задачи машинного обучения, ИИ и высокопроизводительных вычислений.
GPU-ускорители подходят для ускорения обучения нейросетей и инференса, анализа
больших данных, а также для ресурсоёмкого 3D-рендеринга и работы с графикой.
Пользователи могут разворачивать как одиночные экземпляры для отладки моделей,
так и целые кластеры GPU для масштабных экспериментов. Яндекс.Облако
интегрировано с экосистемой инструментов (например, платформой DataSphere для
ML), упрощающих разработку и деплой решений ИИ.</p><h2>Формат аренды</h2><p>Ресурсы предоставляются по
модели IaaS с поминутной тарификацией. После подключения GPU-квоты (по
умолчанию изначально равна нулю) достаточно создать ВМ нужной конфигурации
через веб-консоль, CLI или API. Минимальная конфигурация — 1 GPU (например,
Tesla T4) с 4 vCPU и 16 ГБ RAM. Оплата почасовая (с поминутным биллингом), при
длительных резервациях ресурсов действуют скидки. Например, доступна бесплатная
квота (грант) на тестирование — для юридических лиц до 10 000 руб. на первые
два месяца использования облака.</p><h2>Поддержка и особенности</h2><p>Инфраструктура
Яндекс.Облака размещена в дата-центрах в РФ (соответствие 152‑ФЗ) и предлагает
SLA на уровне 99,95%. Имеется круглосуточная техническая поддержка (чат,
тикеты) с различными тарифами поддержки под потребности бизнеса. Все операции — от управления ВМ до мониторинга — доступны через удобный веб-интерфейс и API.</p><h2>VK Cloud — облачные ВМ с GPU и выделенные серверы</h2><p>VK Cloud (ранее Mail.Ru
Cloud Solutions) сдаёт облачные GPU-ресурсы для B2B-заказчиков. В 2024 году
платформа добавила графические процессоры NVIDIA L4 (24 ГБ, архитектура Ada
Lovelace), которые на 2,5 раза производительнее предыдущего поколения и подходят
для ускорения видео и графических приложений. Также доступны тензорные GPU
NVIDIA Tesla V100 16ГБ/32ГБ и A100 40ГБ/80ГБ.</p><h2>Кому подойдет и для каких задач</h2><p>Сервис рассчитан на задачи
ИИ/ML, обработку видео и графики, 3D-моделирование, рендеринг и другие
сценарии, требующие высокопроизводительных вычислений. Например, GPU L4
ориентированы на медиаданные (трансляции, кодирование видео, графические
рендеры) с поддержкой аппаратного ускорения AI, тогда как A100/V100
используются для обучения крупных моделей глубокого обучения и аналитики
данных.</p><h2>Условия аренды и конфигурации</h2><p>Облако VK Cloud предлагает
как виртуальные машины с GPU, так и выделенные физические серверы. Аренда
возможна по модели pay-as-you-go (с помесячной оплатой фактического потребления
ресурсов). Минимальная конфигурация — 1 GPU (например, Tesla V100 или L4) на
виртуальной машине с выделенными vCPU и RAM; более мощные конфигурации могут
включать несколько GPU на одну ВМ. Стоимость использования зависит от выбранной
карты и конфигурации; публично тарифы не раскрываются, расчёт производится
через персонального менеджера.</p><h2>Поддержка B2B клиентов и интеграция с платформами</h2><p>Каждому клиенту назначается
персональный менеджер, который консультирует по выбору оптимальной конфигурации
и обеспечивает сопровождение. Техподдержка VK Cloud работает 24/7. Возможна
интеграция облачных GPU с другими сервисами VK Cloud — например, объектным
хранилищем, управляемыми базами данных и инструментами для ML (AutoML, готовые
окружения и пр.).</p><h2>5. Cloud.ru
(СберCloud) — широкая линейка GPU до H100</h2><p>Cloud.ru — облачная
платформа, над которой работает компания «Сбер», — предлагают NVIDIA H100 80ГБ
(HBM2e/HBM3), а также A100 40/80ГБ, предыдущие Tesla V100 16/32ГБ и графические
ускорители NVIDIA A40 48ГБ. Флагманские H100/A100 поддерживают объединение через
NVLink и InfiniBand для горизонтального масштабирования — вплоть до связки 8
GPU в одной ноде или распределенного кластера из нескольких узлов (например,
решение HGX 8×H100).</p><h2>Для чего можно использовать</h2><p>Платформа используется для
обучения больших языковых моделей и генеративных сетей — самые требовательные
из них эффективно работают на кластерах H100/A100 с высокоскоростным обменом
данными. Также облако подходит для научных расчётов и моделирования (HPC) — исследователи могут запускать симуляции на GPU без очередей на доступ к
суперкомпьютерам. Для рендеринга видео, обработки медицинских снимков,
геологических вычислений и других специализированных сценариев предлагаются
конфигурации на основе V100 или A40.</p><h2>Формат аренды</h2><p>СберCloud предоставляет
несколько моделей аренды: виртуальные машины с GPU (на базе облачной платформы
«Advanced»), выделенные физические серверы с GPU (помесячная аренда), а также
специализированный <b>ML Space</b> — сервис
кластеров GPU с почасовой/поминутной тарификацией.</p><p>Виртуальные машины доступны
для запуска через консоль (необходим запрос на повышение квоты GPU, после чего
ресурс выдаётся в течение минут) — оплата почасовая в рублях.</p><p>Выделенные же серверы или
мощные конфигурации (например, 8× H100) предоставляются по заявке через
менеджера, с минимальным сроком аренды от 1 месяца.</p><h2>Поддержка и особенности</h2><p>Cloud.ru ориентирован на
корпоративных клиентов, поэтому процесс аренды крупных ресурсов сопровождается
персональным менеджером и архитектурной поддержкой. Заявки на GPU
рассматриваются оперативно, типовые конфигурации ВМ активируются в течение ~15
минут, нестандартные — до 1 рабочего дня.</p><p>Техподдержка работает 24/7,
доступна по телефону и через портал, SLA 99,95%. Облачная платформа
сертифицирована по требованиям 152‑ФЗ для работы с персональными данными. Также
доступны смежные сервисы (облачное хранилище S3, системы контейнеризации, виртуальные
рабочие места и пр.).</p><h2>Как выбирать сервис: несколько ориентиров</h2><p>Выбирая облачный
GPU‑хостинг, стоит смотреть не только на цену за час. Важно понимать, какие
задачи вы решаете и какие ресурсы требуются.</p><ol><li>Тип задач и необходимая гибкость. Для экспериментов и краткосрочных проектов подойдут сервисы с почасовой тарификацией и быстрым стартом. Для длительных расчётов и стабильных нагрузок разумнее выбирать помесячные тарифы и более мощные карты.</li><li>Доступные модели GPU. Если нужен трансформер с миллиардами параметров, выбирайте провайдера, у которого есть Tesla H100/H200; для инференса хватит А‑серии или потребительских карт.</li><li>География и сеть. Расположение дата‑центров влияет на задержки и требования по хранению данных. Продумайте, нужно ли вам европейское присутствие или достаточно российских площадок.</li><li>Управление и поддержка. Наличие API, быстрая выдача ресурсов и понятная панель управления экономят время. Поддержка 24/7 и тестовый период помогут избежать сюрпризов.</li><li>Тестовый доступ и трафик. Бесплатный тестовый период или пробный запуск на несколько минут помогает оценить производительность и стабильность, а квоты на трафик — планировать бюджеты.</li></ol><p>Аренда GPU — инструмент,
который нужно подбирать под конкретную задачу. Не гонитесь за абстрактными
мегахешами и гигафлопсами; лучше продумайте, какие модели будете запускать, как
будете масштабироваться и насколько быстро вам нужно стартовать. Тогда облачные
видеокарты станут не игрушкой для ML-ищков, а инструментом, который
действительно помогает команде работать быстрее и эффективнее.</p>]]></content:encoded>
    </item>
    <item>
      <title>Тест на профориентацию для IT-специалистов бесплатно онлайн. ТОП-10 лучших тестов</title>
      <link>https://tproger.ru/articles/test-na-proforientaciyu-dlya-it-specialistov-besplatno-onlajn--top-10-luchwih-testov</link>
      <comments>https://tproger.ru/articles/test-na-proforientaciyu-dlya-it-specialistov-besplatno-onlajn--top-10-luchwih-testov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/test-na-proforientaciyu-dlya-it-specialistov-besplatno-onlajn--top-10-luchwih-testov</guid>
      <description><![CDATA[<p>Тест на профориентацию бесплатно — как выбрать профессию: полное руководство по определению карьерного пути.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/test-na-proforientaciyu-dlya-it-specialistov-besplatno-onlajn--top-10-luchwih-testov">Тест на профориентацию для IT-специалистов бесплатно онлайн. ТОП-10 лучших тестов</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 01 Aug 2025 16:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как вы понимаете, что пора что-то менять? Код больше не радует, сеньорская стагнация наступила, а идеи писать Pet-проекты вызывают только зевоту? Тогда, возможно, пришло время… пройти профориентационный тест. Серьёзно. Даже если вы middle+ с 10 годами за плечами и двумя сертификациями по AWS.</p><h2>Почему айтишнику это может быть полезно</h2><p>По статистике, 70% выпускников работают не по специальности, а каждый третий взрослый хотя бы раз кардинально менял сферу деятельности. Почему так происходит?</p><p>Основные причины неудачного выбора профессии:</p><ul><li>Давление родителей и общества</li><li>Недостаток информации о реальных обязанностях</li><li>Игнорирование собственных склонностей и интересов</li><li>Выбор «за компанию» с друзьями</li></ul><p>А может ваш выбор и был удачным, но только для вас 10 лет назад. Время идёт, все мы меняемся, и чтобы работать было кайфово, а выгораний не случалось — возможно, пора что-то поменять.</p><p>Хорошая новость: современное профориентационное тестирование позволяет избежать этих ошибок и найти дело по душе!</p><p>Профориентация — это не только про «куда идти школьнику после девятого класса». В ИТ-мире всё меняется быстро. Сегодня вы пишете backend на Go, а завтра думаете: «А может, уйти в data?» Или ловите себя на том, что завидуете дизайнеру, который делает «понятный интерфейс для людей», пока вы деплоите микросервис №67.</p><p>В ИТ индустрии смена профилизации — обычное дело, ведь:</p><ol><li>Мир ИТ меняется быстро. Был backend — стал ML Ops. Был фронт — теперь вы размышляете о XR/AR (расширенная реальность/ дополненная реальность).</li><li>Горизонтальные переходы в профессии — норма. Разработчик → тимлид → техлид→ карьерный тупик или…CTO? Коуч? Консультант по карьере?</li><li>Карьерный выгорание = потеря вектора. Иногда полезно просто спросить у себя: а чем мне реально интересно заниматься?</li><li>Выгорание подкрадывается незаметно. Потеря интереса, постоянное ощущение «дня сурка», скука при виде даже нового фреймворка — это тревожные флажки.</li></ol><p>Технологии не стоят на месте. Кто ещё 5 лет назад слышал про ML Ops, XR или prompt engineering?</p><p>Современные профориентационные тесты не скажут «вы должны быть IT-рекрутером», но могут подсветить, где вам по-настоящему комфортно развиваться: глубже в технологию, ближе к людям или вообще в новое направление.</p><h2>Что такое профориентационное тестирование и зачем оно нужно</h2><p>Профориентационное тестирование — это научно обоснованная система оценки ваших способностей, интересов и личностных качеств для определения подходящих сфер деятельности.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/61c1594a-1c9d-44f7-9089-452846246ed9.jpg" alt="" /></figure><p>Современные тесты на профессию онлайн основаны на десятилетиях психологических исследований. Это не гадание «на ромашке» или расклад на таро. И даже не занимательный тест «узнайте, кто вы из команды Docker». Это инструмент, который анализирует:</p><p>🧠 Когнитивные способности:</p><ul><li>Логическое мышление</li><li>Пространственное восприятие</li><li>Вербальные навыки</li><li>Математические способности</li></ul><p>❤️ Эмоциональные предпочтения:</p><ul><li>Склонность к работе с людьми</li><li>Потребность в творческом самовыражении</li><li>Желание помогать другим</li><li>Стремление к лидерству</li></ul><p>⚡ Поведенческие паттерны:</p><ul><li>Способность к многозадачности</li><li>Предпочтение рутины или новизны</li><li>Склонность к командной или индивидуальной работе</li></ul><p>Признаки, что пора что-то срочно менять: «День сурка» на текущем проекте; отсутствие желания развиваться (технологически); зависть к чужим задачам (дизайну, продукту, бизнесу). Заметили у себя хотя бы один признак? Срочно проходите тестирование и смотрите, куда можно податься, чтобы вновь найти себя. Может, вы давно должны были быть тимлидом или стартапером?</p><p>Тест не даст ответ в виде готовой вакансии, но поможет сформулировать направление: ближе аналитика, креатив, управление или спокойная, чётко регламентированная работа.</p><h2>Какой профориентационный тест стоит пройти в 2025 году?</h2><p>Вот подборка топовых (и бесплатных) тестов, которые подойдут ИТ-специалистам:</p><h2>Для тех, кто жаждет конкретики — SkyPro</h2><p>Ищете тест на профориентацию? Лучший бесплатный вариант —<a href="https://sky.pro/test-na-proforientaciyu" rel="follow"> комплексный тест skypro</a> (20 минут, научная методика, персональные рекомендации).</p><p>Если вы хотите получить внятный результат, начните с него. Там есть персональные рекомендации с ориентацией на ИТ-рынок.</p><p>Пройдёте — получите список профессий, soft- и hard-скиллов, а главное — увидите вектор: развиваться в people-management, или, может, в исследовательскую часть (R&amp;D), или вообще уйти в евангелизм или стать адвокатом технологий</p><h2>Другие виды профориентационных тестов</h2><p>Вот ещё несколько классических тестов на вектор профессионального развития:</p><p><b>Тест Климова (ДДО </b>— «<b>Дифференциально-диагностический опросник</b>»<b>)</b></p><p>Что измеряет: предпочтения к пяти сферам деятельности</p><ul><li>Человек-природа (биолог, эколог, ветеринар)</li><li>Человек-техника (инженер, программист, механик)</li><li>Человек-человек (учитель, врач, менеджер)</li><li>Человек-знак (бухгалтер, лингвист, аналитик)</li><li>Человек-художественный образ (дизайнер, актер, музыкант)</li></ul><p>Особенности: 30 вопросов, время прохождения — 10 минут</p><p><b>Тест Голланда (типология RIASEC)</b></p><p>Что измеряет: соответствие шести психологическим типам</p><ul><li>R (Realistic) — практический тип</li><li>I (Investigative) — исследовательский тип</li><li>A (Artistic) — артистический тип</li><li>S (Social) — социальный тип</li><li>E (Enterprising) — предприимчивый тип</li><li>C (Conventional) — конвенциональный тип</li></ul><p>Особенности: 42 вопроса, дает детальный профиль личности</p><p><b>Тест Йовайши</b></p><p>Что измеряет: склонности к конкретным видам деятельности</p><ul><li>Работа с людьми</li><li>Практическая деятельность</li><li>Работа с техникой</li><li>Работа с художественными образами</li><li>Умственная работа</li><li>Материальные интересы</li></ul><p>Особенности: 24 вопроса, подходит для подростков</p><h2>Как проходить тест на профессию: пошаговая инструкция, чтоб не получить абракадабру</h2><p>Чтобы тест дал корректный результат, к его прохождению нужно подготовиться: вы должны быть спокойны, ничего не должно отвлекать. Позаботьтесь об этом заранее, чтобы не пришлось сдавать тест повторно.</p><h2>Этап 1. Подготовка к тестированию</h2><p>1. Выберите подходящее время. Лучше всего проходить профориентационную диагностику утром, когда ваш мозг максимально активен. Избегайте тестирования в стрессовом состоянии.</p><p>2. Обеспечьте комфортные условия</p><ul><li>Тихое место без отвлекающих факторов</li><li>Удобное кресло и хорошее освещение</li><li>Стакан воды рядом</li></ul><p>3. Настройтесь психологически. Помните: нет правильных или неправильных ответов. Тест должен отражать ваши искренние предпочтения.</p><h2>Этап 2. Прохождение теста</h2><p>4. Читайте вопросы внимательно. Не торопитесь. Если вопрос непонятен, перечитайте его еще раз.</p><p>5. Отвечайте честно. Выбирайте варианты, которые действительно вам близки, а не те, которые кажутся «правильными» или престижными.</p><p>6. Не зацикливайтесь на одном вопросе. Если сомневаетесь, выбирайте первый пришедший в голову ответ — он часто наиболее точен.</p><h2>Этап 3. Получаем результаты</h2><p>7. Проанализируйте результаты спокойно. Не принимайте кардинальных решений сразу после тестирования. Дайте информации «отлежаться».</p><p>8. Пройдите несколько разных тестов. Сравните результаты разных методик профориентации. Ищите пересечения и общие тенденции.</p><h2>Психологические тесты на определение типа личности для выбора профессии</h2><p>Кроме классических профориентационных тестов, есть ещё тесты психологические. Они не менее полезны, а их результаты прекрасно дополняют ранее полученные.</p><p>Рекомендуем обратить внимание на такие:</p><h2>16 типов личности (MBTI)</h2><p>Четыре шкалы оценки:</p><ul><li>E/I — Экстраверсия/Интроверсия</li><li>S/N — Сенсорика/Интуиция</li><li>T/F — Мышление/Чувствование</li><li>J/P — Суждение/Восприятие</li></ul><p>Примеры профессий для разных типов:</p><ul><li>ENFP (Активист) — журналист, психолог, артист</li><li>ISTJ (Логистик) — бухгалтер, администратор, инженер</li><li>ENTP (Полемист) — предприниматель, изобретатель, консультант</li></ul><h2>Big Five (Большая пятерка)</h2><p>Пять факторов личности:</p><ul><li>Открытость опыту → Исследователь, художник</li><li>Добросовестность → Менеджер, врач</li><li>Экстраверсия → Продажи, PR</li><li>Доброжелательность → Социальная работа, образование</li><li>Нейротизм → Влияет на стрессоустойчивость профессии</li></ul><h2>Как интерпретировать результаты профтестирования</h2><p>Полученные результаты нужно ещё правильно проинтерпретировать. Не воспринимайте результат как приговор.</p><p><b>Помните, что:</b></p><p>Профориентационная диагностика — это рекомендация, а не окончательное решение. У вас всегда есть выбор.</p><p>Обращайте внимание на проценты и рейтинги:</p><ul><li>80-100% — очень высокое соответствие</li><li>60-79% — хорошее соответствие</li><li>40-59% — умеренное соответствие</li><li>Ниже 40% — низкое соответствие</li></ul><p>Анализируйте топ-5 рекомендованных профессий. Часто несколько специальностей из верхней части списка связаны между собой и указывают на направление развития.</p><h2>Что делать с противоречивыми результатами</h2><p>Иногда результаты разных тестов кардинально отличаются. Это нормально!</p><p>Возможные причины — разные методики измеряют разные аспекты, ваша личность находится «на стыке» нескольких типов. А ещё на результат могли повлиять настроение и внешние обстоятельства.</p><p>Если сомневаетесь, обязательно пройдите тесты повторно через 1-2 недели. При оценке сфокусируйтесь на пересекающихся результатах. Если сомнения всё ещё возникают, проконсультируйтесь с профориентационным консультантом.</p><h2>Выводы</h2><ul><li>Качественные бесплатные тесты основаны на научных методиках и дают ценную информацию для самоанализа. Однако они не заменят комплексной диагностики у специалиста.</li><li>Оптимальная периодичность прохождения тестов: каждые 1-2 года для школьников, в начале и середине обучения для студентов, а для взрослых — при смене жизненных обстоятельств или неудовлетворенности работой.</li><li>Если вам не нравится результат теста, проанализируйте, почему именно. Также пройдите ещё несколько альтернативных для сравнения. Обратитесь к профориентационному консультанту, чтобы разобраться в себе и своих предпочтениях.</li><li>Помните: тест не определяет вашу судьбу, а лишь помогает с самопознанием.</li><li>Вы не обязаны навсегда быть в той роли, куда случайно занесло после вуза. Смена траектории — это не слабость, а зрелость. Тем более в ИТ, где сегодня вы DevOps, а завтра — сценарист образовательных симуляторов для ИИ. Пройдите тест. Проверьте себя. Поделись результатами в комментариях.</li></ul><h2>Бонус: ТОП-10 лучших бесплатных тестов на профориентацию онлайн</h2><p>Вот список тестов, которые вы можете открыть и пройти прямо сейчас:</p><p>1. Sky.pro — комплексный тест на профориентацию. Это профессиональная диагностика на основе современных методик с персональными рекомендациями.</p><ul><li>Время: 20 минут</li><li>Плюсы: Научная обоснованность, детальный анализ, связь с IT-профессиями</li><li>Особенности: Результаты с конкретными шагами развития</li><li>Ссылка: <a href="https://sky.pro/test-na-proforientaciyu" rel="follow">https://sky.pro/test-na-proforientaciyu</a></li><li>Рейтинг: ⭐⭐⭐⭐⭐</li></ul><p>2. Тест «Профориентатор» — комплексное профтестирование на основе методики Голланда.</p><ul><li>Время: 15 минут</li><li>Плюсы: Детальные результаты, описание профессий</li><li>Минусы: Требует регистрацию</li><li>Рейтинг: ⭐⭐⭐⭐</li></ul><p>3. «Навигатум» — тест для школьников с игровыми элементами.</p><ul><li>Время: 20 минут</li><li>Плюсы: Интерактивный формат, понятные результаты</li><li>Минусы: Ориентирован в основном на подростков</li><li>Рейтинг: ⭐⭐⭐⭐</li></ul><p>4. «Профгид» — быстрый тест на профессиональные склонности.</p><ul><li>Время: 5 минут</li><li>Плюсы: Мгновенный результат, большая база профессий</li><li>Минусы: Поверхностный анализ</li><li>Рейтинг: ⭐⭐⭐</li></ul><p>5. «Учёба.ру» — многоуровневое тестирование способностей.</p><ul><li>Время: 30 минут</li><li>Плюсы: Научная обоснованность, подробная интерпретация</li><li>Минусы: Длительность прохождения</li><li>Рейтинг: ⭐⭐⭐⭐⭐</li></ul><p>6. «ПрофВыбор» — тест на основе методики Климова с современными профессиями.</p><ul><li>Время: 12 минут</li><li>Плюсы: Актуальный список специальностей, простота</li><li>Минусы: Ограниченное количество вопросов</li><li>Рейтинг: ⭐⭐⭐⭐</li></ul><p>7. «Тестометрика» — психологический тест на определение типа личности для выбора профессии</p><ul><li>Время: 25 минут</li><li>Плюсы: Глубокий анализ, рекомендации по развитию</li><li>Минусы: Сложная терминология</li><li>Рейтинг: ⭐⭐⭐⭐</li></ul><p>8. «Профориентация Online» — комбинированный тест интересов и способностей.</p><ul><li>Время: 18 минут</li><li>Плюсы: Балансирует разные аспекты личности</li><li>Минусы: Устаревший интерфейс</li><li>Рейтинг: ⭐⭐⭐</li></ul><p>9. «Зарплата.ру» — тестирование с привязкой к уровню зарплат.</p><ul><li>Время: 10 минут</li><li>Плюсы: Показывает финансовые перспективы</li><li>Минусы: Материалистичный подход</li><li>Рейтинг: ⭐⭐⭐</li></ul><p>10. «Профи.ру» — экспресс-диагностика профессиональных предпочтений</p><ul><li>Время: 7 минут</li><li>Плюсы: Быстрота, связь с реальными вакансиями</li><li>Минусы: Упрощенная методология</li><li>Рейтинг: ⭐⭐⭐</li></ul><p><i>Реклама. Рекламодатель:  ОАНО ДПО «СКАЕНГ». ОГРН: 1187700001686. ИНН: 9709022748. Erid: 2SDnjcYuPcJ</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Фичи будущего в интерфейсе, которые можно и нельзя использовать в 2025 году: разбираем Baseline 2025</title>
      <link>https://tproger.ru/articles/fichi-budushhego-v-interfejse--kotorye-mozhno-i-nelzya-ispolzovat-v-2025-godu--razbiraem-baseline-2025</link>
      <comments>https://tproger.ru/articles/fichi-budushhego-v-interfejse--kotorye-mozhno-i-nelzya-ispolzovat-v-2025-godu--razbiraem-baseline-2025?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/fichi-budushhego-v-interfejse--kotorye-mozhno-i-nelzya-ispolzovat-v-2025-godu--razbiraem-baseline-2025</guid>
      <description><![CDATA[<p>Какие CSS- и HTML-фичи войдут в вёрстку к 2025 году? Разбираем доклад Михаила Балицкого (Яндекс) о Baseline 2025: сабгриды, попапы без JS, анимации скролла и почему SASS ещё рано списывать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/fichi-budushhego-v-interfejse--kotorye-mozhno-i-nelzya-ispolzovat-v-2025-godu--razbiraem-baseline-2025">Фичи будущего в интерфейсе, которые можно и нельзя использовать в 2025 году: разбираем Baseline 2025</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Яндекс]]></category>
      <category><![CDATA[YouTube]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 01 Aug 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>О чём говорили на <a href="https://www.youtube.com/live/qQmEGSFKB-8">Яндекс-субботнике</a> для разработчиков интерфейсов в Минске.</p><p>Михаил Балицкий, старший разработчик интерфейсов главной страницы Поиска Яндекс, рассказал об основных фичах ближайшего будущего. Какие-то уже можно пробовать применить в интерфейсах вашего приложения, а с какими-то придётся подождать.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/f4b90e42-47c4-4ea8-8f79-c2d1886f5e32.png" alt="" /></figure><p>Михаил сделал клон страницы Яндекс Поиска,
чтобы испробовать все нововведения (Baseline), поддерживаемые в браузерах на
2025 год. У каждой фичи есть веб-платформенные тесты от сообщества — набор
кейсов, который проверяет функциональность. Многие из фичей, несмотря на то, что
находятся в Baseline 2025 года, не имеют 100% покрытия тестов.</p><h2>Гриды и сабгриды</h2><p>За основу Layout страницы взяли гриды, которые
находятся в продакшене уже более 8 лет.</p><p>API первого уровня позволяет вам создавать
layout страницы как крупными мазками, то есть верхнеуровнево, так и
распределять элементы маленьких блоков.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/edc5e27d-a660-45f9-aebd-8713a0773d89.png" alt="" /></figure><p>Но гриды не стоят на месте, а двигаются вперёд. Недавно появилась спецификация второго уровня. Например, если
у нас есть блок сервисов, то мы его можем задать как грид. А каждый элемент
этого списка — в виде сабгрида. По сути, говоря ему, что он наследует
сетку родителя.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/7186b397-d620-4b3d-ae95-2594643235a9.png" alt="" /></figure><p>Это позволяет за счёт изменения одного
свойства родителя полностью изменить внешний вид элемента — например, сделать
иконки разного размера.</p><p>Но это ещё не всё. Если мы сверстали карточку
в ленте фида, она получилась классной, но тестирование указало нам на проблемы
с доступностью. У нас не оказалось тега &lt;article&gt; и тега
anchor element &lt;a&gt; для ссылки. Но при добавлении этих тегов вёрстка может
поплыть.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/142cce85-093c-4b70-bec0-d2924d9039b4.png" alt="" /></figure><p>Если вы используете сабгриды, всё нормально — будет унаследована сетка родителя, и элемент останется красивым. Это позволяет
верстать блок без использования position легко и удобно.</p><p>CSS сабгриды появились в 2023 году, но пока их
рано использовать, так как в случае, если бразуер пользователя их не
поддерживает, у вас может сломаться вся вёрстка. Но пройдёт несколько лет и их
можно будет использовать.</p><h2>Масштабирование</h2><p>Если у нас страница обладает свойством
резиновости: на больших экранах элементы увеличиваются, на маленьких —
уменьшаются.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/6e33385a-841d-4a46-abeb-f636144c5de9.png" alt="" /></figure><p>Достигается это за счёт того, что страница
свёрстана в em — это величина, которая меняет размер шрифта. А меняя его, мы
меняем размер элементов. Раньше это писалось с помощью медиа-выражений, который
зависит от min-width, то сейчас есть возможность упростить визуальный
синтаксис, добавив интервальный. Он позволяет дописать больше или
равно/ меньше или равно — то, что человеку понятнее. Есть post css плагин,
который позволяет завезти это поведение для старых браузеров, чтобы всё
работало хорошо.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/9516ac0e-8f9a-42fa-9ec0-9bbc0c1b3a50.png" alt="" /></figure><p>А можно ещё сильнее упростить код, за счёт
использования css Nesting из baseline 2023. Поэтому в браузерах новее 2023
года это работает из коробки, а в более старых можно с помощью post css плагина
затрансперировать поведение, чтобы всё корректно работало. Тем самым, мы
сэкономим немного строк кода.</p><p>Но можно пойти ещё дальше в будущее к
@function, и в 139 Chrome уже пообещали запустить эту функциональность, но пока
доступна только в Chrome Canary браузере (для опытных разработчиков). Позволяет
заменить mix in в CSS, SASS для препроцессинга.</p><p>Но можно пойти в @property.
Поддерживается почти во всех браузерах и позволяет задать кастомное
свойство, задать значение по умолчанию и узнать, наследуется ли оно. Здесь мы задаём
стандартное значение размера шрифта в em, потому что оно зависит от контекста.
По спецификации initial value должно быть постоянным значением, которое не
изменяется нигде.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/4c20575a-8f12-4be2-a928-9107c7f5f1dd.png" alt="" /></figure><h2>Отказ от SASS — не всё так просто</h2><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/a6a66ec6-38dd-4334-8b3c-73363f48a53b.png" alt="" /></figure><p>Если у нас есть полоска сервисов, которые в
зависимости от размеров экрана меняют свой размер, то за счёт селектора
nth-child мы можем указать: возьми все элементы, начиная с n, кроме all, и
примени к нему display: none. А внутри медиа-выражение в зависимости от размера
экрана срабатывает по-разному. У медиа-выражений есть явная проблема: если у
нас меняется продуктовое поведение, например, размер блока или расположение
компонента, то все стили устаревают и медиа-выражения приходится заново
переписывать.</p><p>Но у нас появились container queries, которые
позволяют мэтчиться не на размер страницы, а на размер конкретного элемента
— ширину или высоту. Работает с 2023 года, но в продакшен тащить рано
— в старых браузерах вёрстка поедет.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/6926118c-5d20-468a-9abf-f90458eda798.png" alt="" /></figure><p>Код в примере очень репетативен — мы повторяем
одно и тоже много раз.</p><p>Можно ли написать вот так?</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/e7c92318-fb7b-4334-bd63-ce20c02e8827.png" alt="" /></figure><p>Но в таком коде есть много проблем, он не
работает и никогда не будет работать.</p><p>В container queries у нас есть константы,
можно использовать calc, чтобы сложить em и пиксели. Но мы не можем там
использовать CSS-переменные, браузер их просто проигнорирует. А в nth-child всё
ещё хуже: можно использовать только целочисленные значения.</p><h2>Postcss-Preset-Env</h2><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/c8a14e8e-9b3d-4150-848b-52ee937a156c.png" alt="" /></figure><p>Плагин для postcss, который базируется на
возможностях веб-платформы и спецификации, позволяет контролировать, какие
спецификации вы затаскиваете в браузер. Можно контролировать набор возможностей
по списку браузеров и управлять явным списком фичей, включать и отключать
нестинг.</p><h2>Попап сервисов (dialog)</h2><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/f7e3c510-cc35-44cd-8064-63f93bdef40a.png" alt="" /></figure><p>Позволяет сделать доступное модальное окно без
JS. Есть два режима показа: обычный и модальный. В модальном режиме есть
ловушка фокуса, которая позволяет осуществлять навигацию через табы. Также при
использовании скринридера вы не уходите за пределы данного элемента. Раньше это достигалось с помощью JS, а теперь работает из коробки.</p><p>В будущем это должно будет работать так:</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/6f777cd8-a74d-4234-adca-4e9f28291467.png" alt="" /></figure><p>Но спецификация до сих пор не стабилизирована.
Всё, кроме закрытия по парандже работает без JS. Есть полифил (polyfill), но
для его работы нужно писать дополнительные селекторы и он не работает без
JavaScript, нет понятия Top Layer.</p><h2>Меню в фиде</h2><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/ea9f7945-49cb-4f11-b342-bc22135d6601.png" alt="" /></figure><p>В любой элемент страницы, будь то div, span или
dialog, нужно добавить интерактивности, чтобы он открывался по клику. В сочетании с
micro position меню позиционируется рядом с кодом без единой строчки JS и
работает с 2025 года, то есть через пять лет можно будет затащить решение в
продакшене.</p><h2>Прогрессивные улучшения</h2><p>Пользователи старых браузеров эти улучшения не
получают, но их опыт не ухудшается, а это важно.</p><p>Сюда входят дискретные анимации для бинарных
свойств с помощью allow-discrete. Так значение свойств изменится только к концу
анимации.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/977ea182-e64f-4984-b6f8-91dbc94b0410.png" alt="" /></figure><p>В сочетании с элементом @starting-style легко
добиться красивых анимаций — например, показ и скрытие попапа.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/e36097c7-2f7d-4654-b5d9-1634829414ca.png" alt="" /></figure><p>Но оказалось, что прогрессивные улучшения
могут навредить пользователям. В 120 и 121 Chrome есть баг, который крашит
браузер. Совет — экспериментировать, проверять и
замерять.</p><h2>Scrollbars</h2><p>Из коробки они могут вылезать за пределы или
оказаться неправильного цвета. Но с помощью color-scheme можно задать
конкретный цвет блока. Станет лучше, но Scrollbar всё равно может вылезать за
пределы элемента.</p><p>Появился Scrollbar Styling первого уровня,
который позволяет делать красивые скроллбары. Есть набор констант от none до
thin, и можно задавать цвет как самого трекера, так и подложки.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/739f6b9a-e925-4dc1-9744-96990e95cc3a.png" alt="" /></figure><p>Но Scrollbar может всё равно вылезать за
пределы страницы, а ещё сложно управлять цветом и расположением элемента.</p><p>Чтобы это исправить, можно использовать другое свойство без стабильной спецификации, поддерживаемое во всех браузерах — это
webkit-scrollbar.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/1f3a31dc-6c55-46a0-ab66-806a1312175f.png" alt="" /></figure><p>Правда с его помощью не получится добиться
красивого скругления. Но сочетать webkit-scrollbar и scrollbar-styling не выйдет. Либо одно, либо другое.</p><p>Можно использовать scrollbar-gutter, чтоб
зарезервировать пространство с двух сторон скролла. Но если есть элемент с
динамичной высотой, когда элементов может быть то меньше, то больше, то можно
избежать прыжка контента.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/3f103c28-1d11-4e11-b4e6-095587dce308.png" alt="" /></figure><p>Рекомендация — всегда добавлять на
html-тег это свойство, чтоб проблем не было и интерфейс не оказался сдвинут.</p><h2>Анимации</h2><p>Также сейчас можно сдвигать элемент на чистом
CSS без использования JS — с помощью animation timeline scroll или animation
timeline view.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/f420ed73-5f1b-4a97-826c-6a70d423c7bc.png" alt="" /></figure><p>Вы можете управлять положением скролла и тем,
какую часть анимация занимает, а также связываать две анимации.</p><p>Но нужно всегда задаваться вопросом: что
будет, если свойство не поддерживается в старых браузерах.</p><p>Например, в этом случае два элемента будут
наплывать друг на друга или произойдёт мерцание.</p><h2>View Transition API</h2><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-01/adb3207e-c79a-426d-bceb-61c6fb326f26.png" alt="" /></figure><p>API крайне мощный, но пока не очень
поддерживается.</p><h2>Итоги</h2><ul><li>Переменные уже заменены и их можно использовать $name-&gt;var(-name).</li><li>Миксины через 5 лет можно будет заменить mixin-&gt;@function.</li><li>Нативный нестинг — хорош!</li><li>Даже функция if() уже доступна в Chrome136.</li><li>Не скоро ещё можно будет отказаться от языков препроцессинга, например, от SASS.</li><li>Область использования var() и env() ограничена.</li><li>CSS не умеет в циклы.</li><li>@function пока слишком рано использовать.</li><li>Но мы можем перейти на CSS + Post CSS. И в Яндекс Поиске пошли по этому пути. При этом во всей кодовой базе mix in использовались всего несколько раз. Поэтому оказалось что функции препроцессора особо не используется. От нестига пришлось мигрировать — но это было не сложно.</li><li>Popover и полифилл есть в baseline 2025, но не все wpt проходят.</li><li>Полифилл имеет ограниченную поддержку.</li><li>Полифилл не работает в браузерах с частичной поддержкой popover.</li><li>Anchor-positioning есть в Inerop 2025 и у него есть полифилл, но спецификация ещё меняется.</li><li>Полифилл не поддерживает множество кейсов — практически никакие, кроме базовых.</li><li>Даже прогрессивные улучшения могут навредить.</li></ul><p>Давно пора исползовать:</p><ul><li>Dialog — упрощает написание кода и работает даже в старых браузерах с полифоллом.</li><li>CSS Nesting и CSS — Variables упрощают написание стилей и хорошо работает в связке с PostCSS.</li><li>Grid Layout — упрощает вёрстку сложных сайтов и работает в браузерах 8-летней давности.</li></ul><p><b>Через пять лет вёрстка сильно изменится за счёт новых фичей, которые появляются уже сейчас! А какую из фичей вы желаете больше всего затащить в продакшен? </b></p>]]></content:encoded>
    </item>
    <item>
      <title>Как эффективно дебажить баги</title>
      <link>https://tproger.ru/articles/kak-effektivno-debazhit-bagi</link>
      <comments>https://tproger.ru/articles/kak-effektivno-debazhit-bagi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Baskon]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-effektivno-debazhit-bagi</guid>
      <description><![CDATA[<p>В статье разбираем баг-трекеры, отладчики, логгеры, авто-тесты, профилировщики и статический анализ. Учимся быстро находить и устранять баги.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-effektivno-debazhit-bagi">Как эффективно дебажить баги</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Отладка]]></category>
      <category><![CDATA[Баги и ошибки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 27 Jul 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 1947 году инженеры, работавшие с компьютером Mark II в Гарварде, сделали знаменитую запись в журнале: «First actual case of bug being found» («Первый реальный случай обнаружения жучка»). Причиной сбоя оказалась моль, застрявшая между контактами реле. Хотя сама фраза прижилась, концепция «жучков» (bugs) как причин неисправностей в машинах гораздо старше: ещё в 1878 году Томас Эдисон<a href="https://www.techinsider.ru/popmem/756223-kogda-byl-obnaruzhen-pervyy-v-mire-kompyuternyy-bag/"> жаловался</a> на них в своих телеграфных аппаратах.</p><p>Сегодня под «багами» понимают уже не насекомых, а любые ошибки в работе систем. Этот термин прочно вошёл в обиход, давно выйдя за пределы IT.</p><p>Ошибки в программах неизбежны, но ключ к качественной разработке — умение быстро их находить и исправлять. <a href="https://queue.acm.org/detail.cfm?id=3068754#:~:text=Software%20developers%20spend%2035,embrace%20debugging%20as%20an%20exercise">Исследования показывают</a>, что разработчики тратят 35–50% рабочего времени на тестирование и отладку, а эти этапы поглощают 50–75% бюджета проекта.</p><p>В этой статье мы разберем современные инструменты и подходы к поиску и устранению багов.</p><h2>1. Трекеры багов</h2><p>История инструментов для отслеживания ошибок уходит корнями в прошлое. Ещё в 1970-х разработчики Bugtraq в AT&amp;T Bell Labs использовали физические баг-тикеты, прикрепляя их к пробковым доскам. Знаковый скачок произошёл в 1998 году, когда Mozilla открыла доступ к первому веб-трекеру — Bugzilla. Дальнейшая эволюция привела к появлению Jira от Atlassian в 2002 году и прототипа Sentry на GitHub в 2008-м.</p><h3>Зачем нужен баг-трекер ?</h3><p>Исправление ошибки начинается с её фиксации. На небольшом проекте с одним разработчиком запомнить пару багов возможно. Но по мере роста числа дефектов ручное отслеживание становится неэффективным. Баг-трекер — это специализированная система, где для каждой ошибки создаётся запись (тикет, задача). В тикете должны быть ответы на самые важные вопросы:</p><ul><li>Что пошло не так?</li><li>Что должно было происходить?</li><li>Как вызвать ошибку?</li><li>Какой контекст у ошибки ?</li></ul><p>Баг-трекеров существует великое множество, ведь по сути это автоматизированные цифровые записные книжки. Баги можно отслеживать с помощью Jira, Redmine, Битрикса, Yandex Tracker, GitHub Issues, Sentry, BugHerd и др.</p><p>Баг-трекеры выбираются исходя из потребностей команды. В больших компаниях популярны решения внутри их корпоративного трекера; часто в open-source проектах баг-трекером для комьюнити выступает GitHub Issues, а в небольших командах таковым выступает закреп в чатах TG-группы.</p><p>Без баг-трекера сложно держать всё под контролем. Даже в маленькой команде со временем начинают теряться детали и приоритеты. Трекеры дают структуру, прозрачность и позволяют планомерно исправлять ошибки.</p><h2>2. Отладчики</h2><p>Отладчики (дебаггеры) — это специализированные программы, позволяющие исследовать и контролировать выполнение другой программы (целевой) с целью поиска и исправления ошибок. Их основной функционал — исполнить программу построчно с фиксацией состояния памяти после каждого шага.</p><p>Отладчики с графическим интерфейсом по умолчанию встроены во все популярные IDE. Там можно напрямую в коде поставить точку остановки, удобно смотреть значения переменных и стек вызовов. Хоть и когда-то роль отладчиков выполнялась с помощью ручки, тетрадки и собственной памяти.</p><p>Основная задача отладчика — это предоставить информацию о ходе выполнения программы.</p><h3>Как эффективно использовать ?</h3><h4>Сформулируйте гипотезу и не одну</h4><p>Подумайте, какую информацию вам нужно получить, предположите, с какой строчки ход исполнения идёт неверно.</p><h4>Расставьте точки останова для проверки гипотезы</h4><p>Поставьте точки останова непосредственно перед строчками с ошибкой, чтобы пропускать участки с кодом, в котором вы уверены, и который оттестирован.</p><h4>Идите по шагам и следите за переменными с неправильными значениями</h4><p>Используйте бинарный поиск для локализации ошибки: сначала поставьте точку останова в середине подозрительного участка, проверьте состояние данных. Если ошибка «левее» — переместите точку в середину левой половины, иначе — в правую. Повторяйте до победного.</p><h4>Меняйте значения переменных по ходу выполнения</h4><p>Во время паузы в отладчике (на точке останова/шаге) вы можете изменить значение любой переменной вручную → продолжить выполнение → мгновенно увидеть последствия без перезапуска программы. Это нужно, чтобы проверить гипотезу о том, как исправить найденный баг или найти краевые случаи.</p><p>Отладчик показывает, что происходит в программе «внутри», но польза от него только тогда, когда у тебя есть тактика поиска.</p><h2>3. Профилировщики</h2><p>Смысл профилировщиков в том, чтобы измерять производительность программы (время выполнения функций, использование памяти, CPU, дисковых операций, сети) для выявления узких мест и оптимизации. Основной смысл профилировщиков — поиск багов, связанных с производительностью.</p><h3>Как эффективно использовать ?</h3><h4>Определите метрики и точки измерения</h4><p>Подумайте и поймите, какой именно показатель у вас проблемный (тестировать загрузку CPU, искать утечку памяти, следить за нагрузкой на процессор) и какие процессы вам нужно контролировать.</p><h4>Воссоздайте проблемную ситуацию</h4><p>Загрузите своё ПО массивом данных, имитирующим по объёму целевой. Убедитесь, что профилированная нагрузка репрезентативна.</p><h4>Оцените вызываемую нагрузку</h4><p>Не пытайтесь оптимизировать всё сразу. Начните с 1–2 самых проблемных функций или процессов, дающих наибольший выигрыш. Используйте принцип Парето, т.е. сначала займитесь проблемами, у которых соотношение улучшение производительности/время на починку самое лучшее.</p><h4>Изучите алгоритмы и структуры данных</h4><p>Чтобы уметь исправлять боттлнекс, надо знать, как эффективно работать с данными, какие алгоритмы существуют и в каких ситуациях применимы. Даже небольшая база знаний в этой области значительно ускорит вам профилирование программ.</p><p>Профилировщик — инструмент, помогающий экономить ресурсы компьютера. С ним понятно, где есть проблемы и наибольшее тормоза, и можно не тратить время на оптимизацию того, что и так работает быстро или ни на что не влияет.</p><h2>4. Логгеры</h2><p>Логгеры — инструменты для записи информации (логов) о ходе выполнения программы в файлы или консоль. Их основная задача — предоставить детальную историю работы программы после её выполнения или в реальном времени. Это критично для мониторинга, аудита, анализа ошибок (особенно тех, что сложно воспроизвести в отладчике) и понимания поведения системы в различных условиях. Логи помогут сформулировать сценарии возникновения ошибки для её воспроизведения.</p><p>Как правило, это первый инструмент поиска ошибок у всех разработчиков, который они реализуют через функции типа print().</p><h3>Как эффективно использовать ?</h3><h4>Структурируйте логирование</h4><p>Распределите логи по типам. Например, вы можете отслеживать действия пользователей или фиксировать выполнение ключевых функций. Пишите логи разных типов в разные файлы и директории — вам потом будет проще в них копаться.</p><h4>Выстройте иерархию логирования</h4><p>Стандартная такая: DEBUG, INFO, WARN, ERROR, FATAL.</p><p>Иерархия нужна, чтобы быстрее понимать, когда всё идёт в бездну, и быстрее реагировать. Неочевидно, но также это нужно вам, чтобы расставить приоритеты событий, происходящих в ПО.</p><h4>Добавляйте в логи контекст</h4><p>Фиксируйте время, пользователей, состояние ПО и любую другую информацию, потому что иначе логи перестанут быть полезными и читаемыми. Ваша задача — вложить максимально полезной информации, чтобы можно было чётко восстановить последовательность событий.</p><h4>Думайте о производительности</h4><p>Помните предыдущий пункт, но не переборщите: логи не должны забивать вам всю систему. Если вы будете фиксировать выполнение каждой строчки и дату/время — перезагрузите всю систему, и ваше ПО просто перестанет работать. Помните: вывод в консоль или файл — это дорогая операция.</p><h4>Пользуйтесь ИИ</h4><p>Все современные популярные модели достаточно умны, чтобы проанализировать код и добавить в него логи. Главное — заранее объяснить ей стратегию логирования. Воспользуйтесь для этого Cursor, WindSurf, Codex и иными ИИ-ориентированными IDE, чтобы они знали контекст.</p><p>Хорошие логи способы заменить все прочие инструменты поиска багов, но также способны и засыпать читающего тонной ненужных данных, а заодно и растратить ресурсы компьютера.</p><h2>5. Авто-тесты</h2><p>Авто-тесты (автоматизированные тесты) — это программный код, написанный для проверки корректности работы другого кода (продукта) без ручного вмешательства. Их основная задача — быстро, надёжно и повторяемо верифицировать функциональность, предотвращать регрессии (появление старых ошибок при внесении изменений) и документировать ожидаемое поведение системы.</p><p>Даже если вы не тестировщик — пишите автотесты. Вы значительно сократите себе часы жизни на ручной проверке результатов. Чем больше проект, тем важнее писать автотесты, чтобы избежать фразы: «А раньше работало?».</p><p>Регрессионные авто-тесты помогают найти баги при их появлении, убить жучка в зародыше, чтобы это насекомое не въелось в ваш код и не отложило там яйца, плодя проблемы каскадом.</p><h3>Какие бывают тесты ?</h3><p>Небольшое введение в классификацию тестов, чтобы лучше понимать, что именно можно тестировать и что проверять.</p><h4>Модульные тесты (Unit Tests)</h4><p>Проверяют отдельные мельчайшие части кода (функции, методы, классы) в изоляции от зависимостей (которые заменяются заглушками). Нужны, чтобы проверить корректность логики отдельного компонента. Быстрые, дешёвые, дают мгновенную обратную связь.</p><h3>Интеграционные тесты (Integration Tests)</h3><p>Проверяют взаимодействие нескольких модулей, компонентов или систем (например, проверить доступность API или успешное чтение/запись в БД). Нужны, чтобы убедиться, правильно ли соединённые части работают вместе, а также выявить проблемы взаимодействия.</p><h4>Сквозные тесты (End-to-End / E2E Tests):</h4><p>Тестируют всю систему целиком с точки зрения пользователя, имитируя его действия в реальной среде (браузер, мобильное приложение). Воспроизводят сценарии использования, например, покупку товара или загрузку Excel-файла из БД. Нужны, чтобы проверить работоспособность всей системы. Могут быть очень затратны.</p><h3>Как эффективно использовать ?</h3><h4>Пишите тесты по принципам FIRST</h4><ul><li><b>Fast</b> – тесты должны быть быстрые, иначе замедлят разработку.</li><li><b>Independent </b>– тесты должны быть изолированы друг о друга, чтобы не падать, как домино.</li><li><b>Repeatable</b> – воспроизводимые, при одинаковых вводных давать одинаковый результат.</li><li><b>Self-Validating</b> – результат строго бинарный: успех/не успех.</li><li><b>Timely</b> – тест нужно писать заранее, чтобы сэкономить себе часы жизни в будущем, а не писать их после того, как тысячу раз рукам сам проверял, что всё ок.</li></ul><h4>Следуйте Пирамиде тестирования</h4><p>Тесты должны выполняться в порядке от простых и быстрых к наиболее сложным и долгим, так, чтобы 90% ошибок попадали в первые и быстрые тесты, экономя вам время в ожидании окончания тестирования.</p><h4>Следите за покрытием тестов</h4><p>Отслеживайте, насколько ваш код покрыт тестами — так, чтобы минимальным количеством тестов покрыть максимальное количество кода.</p><h4>Настройте CI/CD сами или попросите вашего DevOps</h4><p>Интегрируйте запуск тестов в процесс сборки (CI/CD-пайплайн). Тесты должны запускаться автоматически при каждом коммите и пулл-реквесте. Это же всё-таки АВТО тесты.</p><p>Даже если вы не тестировщик, то неработающие функции  исправлять придётся вам же.</p><h2>6. Статический анализ кода</h2><p>Статический анализ кода — это процесс автоматической проверки исходного кода без его выполнения. Инструменты статического анализа (линтеры, SAST — Static Application Security Testing) сканируют код, ищут потенциальные ошибки, уязвимости безопасности, нарушения стиля кодирования, сложные для понимания конструкции.</p><p>По умолчанию есть во всех популярных IDE.</p><h3>Как эффективно использовать ?</h3><h4>Изучите их</h4><p>Изучите, какие анализаторы кода бывают, зачем они нужны и как работают. После чего принимайте решение: нужны ли они вам в проекте или будут только замедлять процесс CI/CD.</p><p>Если вы новичок, то можете узнать для себя много нового — например, самые банальные ошибки вроде SQL-инъекций.</p><h4>Настройте их</h4><p>После того как разобрались в том, как они работают и зачем нужны, настройте инструменты статического анализа под ваши задачи. Тот же линтер без единых настроек форматирования для всех будет просто вреден для проекта.</p><h4>Запускайте их как авто-тесты</h4><p>Статическая проверка кода — это тоже набор тестов, только написанный не вами и тестирующий не то, как ваш код работает, а то, как он написан.</p><p>Статические анализаторы кода — специфичные инструменты отлова ошибок. В большинстве своём хитрый баг они не найдут, но надо понимать, что на данный момент лучший статический анализатор кода — это мозг разработчика.</p><h2>Итог</h2><p>Баги — неизбежные спутники разработки, но их цена растет как снежный ком с каждым этапом жизненного цикла ПО.</p><p>Эффективная отладка — это не искусство, а системный подход, опирающийся на правильные инструменты и методики. Используйте описанные выше инструменты и подходы, чтобы отлавливать баги, но главное, не оставляйте их на потом, тогда <a href="https://www.youtube.com/watch?v=mS9LCR5P5wI">ваш Гомер из будущего</a> скажет спасибо.</p>]]></content:encoded>
    </item>
    <item>
      <title>Эволюция компьютерного зрения в автоматизации тестирования</title>
      <link>https://tproger.ru/articles/evolyuciya-kompyuternogo-zreniya-v-avtomatizacii-testirovaniya</link>
      <comments>https://tproger.ru/articles/evolyuciya-kompyuternogo-zreniya-v-avtomatizacii-testirovaniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марианна Юдина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/evolyuciya-kompyuternogo-zreniya-v-avtomatizacii-testirovaniya</guid>
      <description><![CDATA[<p>Как технологии компьютерного зрения и нейросети меняют подход к UI-тестированию? Рассказываем, почему Vision-Language модели вытесняют классические автотесты, и как они помогают автоматизировать тестирование на естественном языке.

</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/evolyuciya-kompyuternogo-zreniya-v-avtomatizacii-testirovaniya">Эволюция компьютерного зрения в автоматизации тестирования</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Компьютерное зрение]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 27 Jul 2025 10:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Автоматизация тестирования пользовательских интерфейсов прошла долгий путь — от простых скриптов с локаторами до современных методов на базе искусственного интеллекта. Изначально тесты писались вручную с помощью инструментов вроде Selenium: тестировщики указывали, какие элементы на странице найти (например, кнопки или поля ввода) с помощью <b>локаторов </b>— уникальных идентификаторов, XPath или CSS-селекторов. Позднее, чтобы упростить проверку интерфейсов, в дело стало вступать <b>компьютерное зрение</b> — анализ скриншотов с помощью OpenCV и подобных библиотек. Сегодня же на передний план выходят <b>Vision-Language модели (VLM)</b> — нейросети, которые умеют одновременно «видеть» содержимое экранов и понимать текстовые описания.</p><p>В этой статье рассмотрим технические детали каждого этапа эволюции: как работают классические локаторы, как применяются алгоритмы компьютерного зрения и как современные VLM и AI-агенты позволяют автоматизировать тестирование на естественном языке. Также обсудим плюсы и минусы этих подходов на практике и объясним, почему традиционная автоматизация уже не так эффективна по сравнению с новыми методами.</p><h2>Классическая автоматизация: локаторы и код</h2><p><b>Что такое локаторы</b>. Традиционная автоматизация UI опирается на поиск элементов в DOM-дереве страницы с помощью локаторов. Локатор — это указание браузеру, как найти нужный HTML-элемент. Существуют различные стратегии локаторов: по ID, имени, классу, XPath, тексту, а в случае мобильных приложений даже свои собственные механизмы, как UiSelector в Android, например.</p><p>В зависимости от платформы и инструмента, эти стратегии могут использовать различные способы поиска: от простого сопоставления атрибутов до навигации по иерархии элементов. Но все они опираются на представление интерфейса в виде структурированных данных — DOM в вебе или XML-дерево в мобильных приложениях.</p><p>Например, кнопку сабмита формы можно найти по уникальному атрибуту id="submit" или по CSS-классу .btn. Инструменты вроде Selenium WebDriver или современные фреймворки (Playwright, Cypress) позволяют записывать шаги теста, обращаясь к элементам через такие локаторы. Ни один GUI-тест не обходится без этой механики. <i>Какой бы инструмент вы ни выбрали для автоматизации, все они будут искать элементы с помощью локаторов</i>.</p><p><b>Как это работает</b>. Автоматизированный тест-приложение (скрипт на Java, Python, JavaScript и т.д.) взаимодействует с браузером через специальный драйвер. На каждом шаге скрипт отправляет команду: найти элемент по указанному селектору и выполнить действие (клик, ввод текста, чтение свойства). Например, Selenium, получив команду findElement(By.id("login")), просматривает DOM-структуру страницы, находит элемент с <i>id="login"</i> и затем может выполнить <i>click()</i>.</p><p>Локаторы привязаны к HTML-разметке, поэтому их надежность зависит от того, насколько стабильно разработчики поддерживают идентификаторы. Практика выработала некоторые правила: желательно использовать уникальные статические атрибуты (например, data-test), избегать сложных XPath, проверять, что локатор не изменится при перезагрузке или смене языка страницы.</p><p>Тем не менее, Web-интерфейсы со временем эволюционируют — меняются классы и ID элементов, верстка усложняется динамическими компонентами. <i>Автоматизация тестирования веб требует учитывать динамическую природу UI, скорость тестов и устойчивость локаторов</i>. Иначе говоря, традиционные автотесты хрупки: малейшее изменение в коде фронтенда (например, переименовали кнопку или перестроили раздел HTML) может сломать множество тестовых сценариев.</p><p><b>Проблемы и поддержка</b>. Главный недостаток локаторного подхода — дорогая поддержка тестов. При активной разработке приложения авто-тесты требуют постоянного обновления: исправлять селекторы, ждать загрузки динамических элементов, добавлять задержки. По опыту индустрии, на сопровождение тестовых скриптов уходит едва ли не больше усилий, чем на их изначальную разработку. Как признавался Кит Поуи, вице-президент по инжинирингу IDT: <i>«Мы тратили столько времени на поддержку тестов на Selenium, ... а теперь тратим почти ноль времени, используя testRigor»</i> [<a href="https://testrigor.com/case-study-idt/">testrigor.com</a>].</p><p>Иными словами, классические UI-тесты грозят превратиться в постоянную гонку за изменяющимся интерфейсом. Появлялись частичные решения, например, <b>Self-healing</b> («самоисцеление» локаторов) с помощью ИИ. Такие механизмы пытаются автоматически подобрать альтернативный селектор, если старый перестал работать. Но как отмечают разработчики CodeceptJS: <i>«AI-healing решает ровно одну проблему: если локатор элемента изменился, и действие не удалось, он подбирает новый локатор, повторяет команду и продолжает тест»</i> [<a href="https://codecept.io/ai/">codecept.io</a>]. Это снимает часть боли, но не меняет принципа: тест все так же опирается на предопределенные селекторы.</p><p>Кроме того, написание самих тестовых сценариев требует навыков программирования и знаний фреймворка, что создает высокий порог входа для неспециалистов.</p><p><b>Вывод</b>: Классическая автоматизация через локаторы была революционна для своего времени и до сих пор остается основой для многих команд. Она хорошо работает при стабильном UI и правильной стратегии локаторов (уникальные ID, атрибуты для тестов и т.п.). Плюсы такого подхода: высокая скорость выполнения (обращение к DOM напрямую), интеграция с CI/CD, детерминизм сценариев. Однако минусы перевешивают в быстро меняющихся продуктах: хрупкость, большие затраты на поддержку и необходимость вовлечения опытных автоматизаторов. Это подтолкнуло индустрию к поиску более гибких и «умных» решений.</p><h2>Компьютерное зрение: поиск элементов по изображению</h2><p>Следующим шагом стало привлечение технологий компьютерного зрения для распознавания элементов интерфейса так, как это делает человек. Вместо того чтобы полагаться на скрытые в коде страницы идентификаторы, тест можно проводить по <b>скриншотам</b>: видеть интерфейс и находить нужные кнопки/иконки по их графическому виду.</p><p>Один из первых популярных инструментов такого рода — <b>Sikuli </b>(MIT, ~2010 год). Sikuli позволил <a href="https://roborabbit-labs.com/2015/02/09/ui-testing-with-sikuli-and-opencv-computer-vision-api/#:~:text=This%20week%20I%E2%80%99ll%20be%20zooming,currently%20maintained%20by%20Raimund%20Hocke">автоматизировать </a>действия, <i>используя скриншоты GUI для поиска и кликов</i>. Внутри он <a href="https://roborabbit-labs.com/2015/02/09/ui-testing-with-sikuli-and-opencv-computer-vision-api/#:~:text=An%20interesting%20characteristic%20of%20Sikuli,page%20for%20a%20nice%20overview">задействовал </a>OpenCV — мощную библиотеку компьютерного зрения с сотнями алгоритмов для обработки изображений и распознавания объектов.</p><p>Принцип работы прост: тестировщик делает снимок элемента (например, кнопки «Поиск»), а Sikuli затем находит на экране участок, совпадающий с этим образцом, и симулирует нажатие. <i>«SikuliX </i><a href="https://wilsonmar.github.io/opencv-sikulix-robot/#:~:text=coordinates%20of%20objects%20it%20recognizes,in%20pictures">использует OpenCV</a><i>, чтобы найти местоположение указанного изображения... и выполняет клик мыши или ввод с клавиатуры по найденной координате»</i>. Таким образом, можно автоматизировать почти всё, что видит пользователь — хоть веб-страницу, хоть настольное приложение или игру — не обращаясь к внутреннему устройству программы.</p><p><b>Как это выглядит на практике</b>. Вместо текстовых селекторов тестер оперирует картинками. Сценарий на Sikuli или похожих фреймворках состоит из последовательности команд: «найти изображение X», «кликнуть по нему», «ввести текст Y», «убедиться, что изображение Z появилось на экране» и т.д.</p><p>По сути, тест <b>имитирует ручную проверку</b>: мы проверяем интерфейс глазами (через алгоритм сравнения изображений) и совершаем действия как пользователь. Этот подход приближает автотест к мануальному тестированию. Как <a href="https://roborabbit-labs.com/2015/02/09/ui-testing-with-sikuli-and-opencv-computer-vision-api/#:~:text=This%20week%20I%E2%80%99ll%20be%20zooming,currently%20maintained%20by%20Raimund%20Hocke">отметила</a> тестировщик Thosha Moodley: <i>«Sikuli... максимально близок к роли ручного тестировщика, который визуально проверяет интерфейс и позволяет автоматизировать тесты без серьёзных навыков разработки»</i>. Другими словами, порог входа снижается: не нужен глубокий кодинг, достаточно понимать, как выглядит нужный элемент.</p><p>Компьютерное зрение также открывает возможность ловить <i>чисто визуальные баги</i>, которые трудны для классических скриптов. Например, традиционный тест может проверить текст сообщения, но не заметит, что он вылез за границы кнопки или обрезан. А визуальный тест легко сравнит скриншот с эталоном и обнаружит искажения в рендеринге. Недаром появилось направление <b>visual testing</b> — сравнение скриншотов для выявления неожиданных изменений.</p><p>Инструменты вроде Applitools Eyes стали лидерами рынка в этой нише: их ИИ-алгоритмы анализируют два изображения (ожидаемый дизайн и фактический) и подсвечивают отличия, игнорируя незначительные артефакты. Такой пассивный подход <a href="https://software-testing.ru/library/testing/testing-automation/4318-how-to-write-visual-ui-automation-tests-using-graphics-instead-of-complex-locator-strings#:~:text=Applitools%20%E2%80%93%20%D0%BB%D0%B8%D0%B4%D0%B5%D1%80%20%D1%80%D1%8B%D0%BD%D0%BA%D0%B0%20%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2,%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%20%D0%B2%20%D1%83%D0%B6%D0%B5%20%D0%B8%D0%BC%D0%B5%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80%D0%B0%D1%85">полезен </a>для регрессионного тестирования UI — он фокусируется на том, <i>как страница выглядит</i>, а не только на её коде.</p><p><b>Проблемы визуального подхода</b>. Несмотря на перспективность, у визуального тестирования нашлось немало минусов. Прямое сравнение скриншотов чувствительно к любым пиксельным изменениям — сменился оттенок или шрифт, и тест «падает».</p><p>Нужно настраивать допуски, писать сложные алгоритмы сравнения, иначе будут ложные срабатывания. Бесплатные инструменты часто <a href="https://software-testing.ru/library/testing/testing-automation/4318-how-to-write-visual-ui-automation-tests-using-graphics-instead-of-complex-locator-strings#:~:text=%D0%92%20%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B5%20%D0%BE%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B0%D0%BB%D0%BE%D1%81%D1%8C%20%D0%BF%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5%20%D0%B8,%D0%B0%20%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%B0%D0%BC%D0%B8%20%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%B1%D1%83%D0%B4%D0%B5%D1%82">грешат </a>излишней чувствительностью или требуют ручной настройки сравнения изображений.</p><p>С другой стороны, слишком грубая настройка может пропустить реальный баг. Балансировать на грани довольно трудно. Кроме того, сами операции с изображениями <a href="https://software-testing.ru/library/testing/testing-automation/4318-how-to-write-visual-ui-automation-tests-using-graphics-instead-of-complex-locator-strings#:~:text=%D0%92%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%BD%D1%81%D1%82%D0%B2%D0%B5%20%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85%20%D0%B1%D0%B5%D1%81%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2%D1%8B%D1%85%20%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%85,Tricentis%20Tosca">ресурсозатратны</a>: <i>«манипуляции с картинками требовательны к вычислениям... сложные алгоритмы могут сильно замедлить тесты, поэтому их стараются применять только в исключительных случаях»</i>. Поэтому на практике визуальные проверки либо пускают отдельным шагом (например, финальный скриншот страницы сравнить с эталоном), либо используют маленькие шаблоны для критичных элементов.</p><p>Второй крупный недостаток — <b>обслуживание тестов на картинках</b>. Нужно хранить библиотеку образов для каждого элемента, обновлять их при малейшем редизайне. Представьте, дизайнер поменял иконку корзины — теперь все тесты, которые искали старую иконку, упадут, и QA-инженеру придется записывать новый образ и заменять в сценариях.</p><p>Наконец, <b>масштабируемость</b>: для разных разрешений, устройств, темной/светлой темы возможно потребуются разные эталонные скриншоты или шаблоны. В веб-тестировании это частично решается за счет унифицированности браузеров, но все же добавляет сложностей.</p><p><b>Современные решения и переходный этап</b>. Несмотря на перечисленные сложности, визуальные подходы не исчезли — наоборот, они эволюционировали. Коммерческие инструменты стараются абстрагировать хранение образов и минимизировать ложные срабатывания за счет ML. Например, Applitools <a href="https://software-testing.ru/library/testing/testing-automation/4318-how-to-write-visual-ui-automation-tests-using-graphics-instead-of-complex-locator-strings#:~:text=Applitools%20%E2%80%93%20%D0%BB%D0%B8%D0%B4%D0%B5%D1%80%20%D1%80%D1%8B%D0%BD%D0%BA%D0%B0%20%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2,%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%20%D0%B2%20%D1%83%D0%B6%D0%B5%20%D0%B8%D0%BC%D0%B5%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80%D0%B0%D1%85">применяет</a> ИИ для сравнения скриншотов, чтобы отличать существенные изменения от незначительных.</p><p>Многие codeless-платформы (Katalon, Tricentis Tosca, TestComplete и др.) включили в свой функционал поиск элементов по изображениям, но чаще как вспомогательную опцию. Нередко это реализовано через визуальный рекордер: пользователь сам кликает по интерфейсу, инструмент делает снимки элементов и генерирует тестовые шаги. Так, показательный пример —<a href="http://testup.io/"> testup.io</a>, где вся концепция построена вокруг изображений: точки взаимодействия задаются относительно визуальных маркеров, а на скриншоте шагов видно миниатюры элементов.</p><p>В итоге, хотя классическое компьютерное зрение приблизило автотесты к пользовательскому восприятию, ему не хватало «интеллекта». В 2020-х стало ясно, что нужен качественно новый уровень: использовать достижения современных нейросетей, чтобы научить машину понимать интерфейс не хуже человека.</p><h2>Vision-Language модели: тестирование на естественном языке</h2><p><b>От компьютерного зрения к мультимодальным моделям</b>. Vision-Language Models (VLM) — это класс нейросетей, который объединяет распознавание изображений и обработку естественного языка. Идея состоит в том, чтобы обучить модель, способную <b>видеть картинку и описывать её словами</b>, а также <b>понимать слова и искать соответствие на картинке</b>.</p><p>Большинство VLM устроены как две части: <i>визуальный энкодер</i> (обычно нейросеть на основе ResNet или Vision Transformer), который преобразует изображение в семантическое представление, и <i>языковой декодер/энкодер</i> (крупная языковая модель GPT или BERT), который <a href="https://dev.to/aairom/what-are-vision-language-models-vlms-and-how-do-they-work-4hl5#:~:text=linguistic%20information,descriptive%20image%20captions%20and%20answering">понимает текст</a>. Обучая эти модули на огромных наборах пар «картинка–описание», они добиваются того, что сеть начинает устанавливать связь между визуальными объектами, их названиями и свойствами.</p><p><b>Пример</b>: модель видит изображение с котом на кресле и подпись «кошка лежит на кресле», и со временем учится понимать, что на картинке кот, что «лежит» — это определенное положение, что диван — это что-то мягкое на чем можно лежать и т.д. В результате такие модели способны решать задачи <i>мульти-модального понимания</i>: генерировать текст по изображению (описание, подписи), отвечать на вопросы по картинке, находить по текстовому запросу нужный объект на изображении и пр.</p><p>Другими словами, VLM обладает зрением и речью одновременно, что открывает совершенно новые возможности для тестирования.</p><p><b>Применение VLM для тестирования UI</b>. Как VLM помогает автоматизировать тестирование? Проще всего это понять на примере: допустим, у нас есть скриншот веб-страницы или мобильного приложения. Ранее, чтобы проверить его содержимое, нам нужен был или человек-тестировщик, или набор проверок конкретных элементов (по DOM или по эталонным изображениям). Теперь же мы можем задать вопрос модели на естественном языке о содержимом UI, и она постарается ответить на основании картинки.</p><p>В блоге Smartesting <a href="https://www.smartesting.com/en/the-future-of-software-testing-harnessing-vision-language-models/#:~:text=%E2%80%9CHere%20is%20a%20screenshot%20of,a%20shirt%3F%20At%20what%20price%3F%E2%80%9C">показан кейс</a>: модели Claude 3.5 дали скриншот интернет-магазина и запрос на английском: <i>«Что изображено на странице? Найди, есть ли рубашка, и какая у нее цена»</i>. Модель проанализировала скриншот и выдала структурированный ответ - перечислила несколько товаров (платье, куртка, брюки, Checked Slim Fit Shirt - $48.99 и т.д.), а затем прямо ответила: мол, да, на картинке есть рубашка (Checked Slim Fit Shirt) по цене $48.99. Ранее такой сценарий потребовал бы либо проверки текста в DOM (искать слово Shirt и парсить цену), либо ручного взгляда. Vision-Language модель выполнила его <i>«с нуля»</i>, просто получив изображение и вопрос.</p><h2>Заключение</h2><p>Развитие методов автоматизации UI-тестирования — наглядный пример того, как технологии ИИ трансформируют привычные практики. Классический подход с локаторами и кодом, хотя и служил десятилетиями, начинает буксовать на требованиях гибкости и скорости.</p><p>Использование компьютерного зрения добавило тестам человеческого восприятия, позволило ловить визуальные дефекты и упростить взаимодействие с нестандартными интерфейсами — но полностью заменить код не смогло из-за ограничений старых алгоритмов.</p><p><b>Vision-Language модели в связке с AI-агентами</b> сделали следующий шаг: они фактически научили компьютер «думать» о том, что он видит на экране, и понимать наши инструкции почти как опытный тестировщик. Это позволило создать системы, где <i>шаги тест-кейса становятся его же автоматизацией.</i></p><p><i></i> Тестировщики и менеджеры могут описывать проверки простыми шагами на естественном языке, а умная платформа сама найдет нужные элементы по описанию, выполнит действия и сравнит ожидаемое с действительным. Такой подход сокращает время на подготовку автотестов, резко снижает расходы на поддержку (ИИ адаптируется к изменениям UI) и расширяет охват проверок за счет контекстных интеллектуальных ассертов.</p><p><b>Будущее автоматизации тестирования принадлежит умным, обучаемым системам</b>, которые совмещают зрение и интеллект. Тестировщики постепенно превращаются в наставников таких систем — формулируют проверки в человеческом формате, а ИИ берет на себя рутинное исполнение. Это повышает эффективность QA-процессов и позволяет сфокусироваться на действительно сложных, творческих задачах тестирования.</p>]]></content:encoded>
    </item>
    <item>
      <title>Выбираем российский хостинг в 2025: подборка на любой запрос</title>
      <link>https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros</link>
      <comments>https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros</guid>
      <description><![CDATA[<p>В этом материале — семь проверенных российских хостингов для разных задач: от стартапа до корпоративного проекта. Каждый прошел тестирование на аптайм (время бесперебойной работы), безопасность и доступность поддержки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros">Выбираем российский хостинг в 2025: подборка на любой запрос</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[Windows Server]]></category>
      <category><![CDATA[Техподдержка]]></category>
      <category><![CDATA[Россия]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Jul 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году российский хостинг переживает новый виток развития. После того как законодательство изменилось и добавились новые технологии, локальные провайдеры усилили инфраструктуру.</p><p>Теперь они предлагают решения, которые не хуже, а где-то даже и лучше международных аналогов и по надёжности, и по цене.</p><p>Посмотрим, кто из них есть в этом списке, и определим особенности хостингов для сайта.</p><h2>1. FirstVDS: профессиональные решения для любых проектов</h2><p><a href="https://firstvds.ru/">FirstVDS</a><a href="https://firstvds.ru/" rel="noopener noreferrer nofollow"></a> — хостинг-провайдер с опытом на рынке более 20 лет. Предлагают VPS и VDS с виртуализацией KVM для проектов любого размера. Все серверы работают на современном оборудовании. Трижды победитель в номинации «Хостер года» Национальной премии «ЦОДы.РФ».</p><p>Хостинг подойдет бизнесу любого масштаба: для любых сайтов — от визиток до высоконагруженных интернет-магазинов, для разработки и тестирования, для сервисов и других проектов. Отдельные решения для Битрикс, установка ОС семейства Linux и Windows Server.</p><h3>Особенности хостинга</h3><h4>Надёжность</h4><p>FirstVDS обеспечивает аптайм 99,97–99,99% в 2025 году, подтверждённый замерами (например, отклик из Москвы — 27 мс в апреле 2025). Серверы размещены в трёх дата-центрах уровня Tier III: два в Москве (IXcellerate и Web DC) и один в Амстердаме (euNetworks). Отказоустойчивый кластер Ceph гарантирует работу даже при сбоях точки или канала.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/80547603-f63a-4f2e-9bc1-332c9e061bf9.png" alt="" /></figure><h4>Инфраструктура</h4><p>Серверы работают на процессорах Intel Xeon и AMD EPYC (до 5,7 ГГц в линейке CPU.Турбо), с быстрыми NVMe-дисками объёмом до 8 ТБ и оперативной памятью DDR5 (до 768 ГБ в VDS Атлант). Это обеспечивает высокую производительность для ресурсоёмких задач, таких как Битрикс или высоконагруженные приложения.</p><h4>Гибкость</h4><p>Тарифы масштабируются: от базовых конфигураций (1 CPU, 1 ГБ RAM, 40 ГБ SSD) до мощных серверов (192 ядра, 768 ГБ RAM, 8 ТБ NVMe). Линейки:</p><ul><li>VDS Форсаж: AMD EPYC, до 128 ядер, 512 ГБ RAM, 4 ТБ NVMe, от 749 ₽/мес (Москва/Амстердам).</li><li>CPU.Турбо: AMD Ryzen до 5,7 ГГц, DDR5, от 624 ₽/мес (Москва).</li><li>VDS Атлант: отказоустойчивый, до 192 ядер, 8 ТБ NVMe, от 1619 ₽/мес (Москва).</li><li>VDS Storage: хранилище, от 704 ₽/мес (Москва).Горячее масштабирование (hot-resize) позволяет добавлять CPU, RAM или диск без перезагрузки.</li></ul><h4>Автоматизация</h4><p>Шаблоны для быстрого развёртывания: Django, Redmine, Tomcat, Teamspeak, Nextcloud, LAMP, LEMP, Forgejo Git, GitLab, Битрикс. Поддерживаются ОС Linux (Ubuntu, Alma, Debian, Rocky, CentOS, Oracle), FreeBSD, Windows Server. API и панель ispmanager 6 lite (бесплатно на месяц) упрощают управление.</p><h4>Безопасность</h4><p>Включена защита от DDoS-атак на сетевом уровне, BitNinja для защиты сервера и сайта, SSL-сертификаты GlobalSign. Доступны автобэкапы, снапшоты, Кибер-бэкап и объектное хранилище S3 для больших данных.</p><h4>Поддержка</h4><p>Круглосуточная поддержка 24/7 без чат-ботов, ответ до 15 минут через чат, личный кабинет или телефон. Бесплатно: помощь с активацией и первичной настройкой. Платно: установка ПО, администрирование. Экспертная линия для мониторинга и устранения сбоев.</p><h4>Бонусы</h4><ul><li>Тестовый период 3 дня.</li><li>Бесплатный перенос до 10 сайтов с другого хостера.</li><li>Скидки: 40% на первый месяц при оплате на 1/3/6 месяцев или 3 месяца бесплатно при оплате за год.</li><li>Лояльность: скидка 5–20% для клиентов от 5 лет.</li><li>Реферальная программа: 10% от расходов привлечённых клиентов для партнёра, 25% скидка для нового пользователя на первый месяц.</li><li>Домены: продление по цене регистрации.</li></ul><h3>Тарифы и условия</h3><p>Тестовый период 3 дня, после него подключаете один из основных тарифов:</p><ul><li>Линейка готовых конфигураций от 1 CPU, 1 Гб RAM, 40 Гб SSD-накопителя и от 219 руб/мес. до сервера с 8 CPU, 12 Гб RAM, 150 Гб NVMe-накопителя. Локация в РФ и Нидерландах.</li><li>VDS Форсаж: на AMD Epyc от 749 ₽/мес. Локации: РФ и Нидерланды.</li><li>CPU.Турбо: гибкая конфигурация на базе высокочастотных AMD Ryzen 9 от 624 ₽/мес. При покупке лицензии Битрикс дополнительная скидка 30% на 3 месяца аренды CPU.Турбо. Локация в РФ.</li><li>VDS Атлант: отказоустойчивый с автобэкапами от 1 619 ₽/мес. Локация: РФ.</li><li>VDS Storage: сервис как хранилище с гибкой конфигурацией от 704 ₽/мес. Локация: РФ</li></ul><p>Все тарифы доступны для тестирования по согласованию с отделом продаж. Для точного подбора конфигурации используйте гибкую настройку.</p><h2>2. UltraVDS: для малого бизнеса и стартапов</h2><p>Компания <a href="https://ultravds.com/">UltraVDS</a>, провайдер услуг виртуальных серверов (VPS/VDS), работает на рынке с 2014 года — предлагает решения для разных операционных потребностей. Сервисы UltraVDS можно использовать для развертывания торговых роботов, запуска чат-ботов, хостинга веб-сайтов, а также для создания FTP-хранилищ данных. Есть предложения для фрилансеров, цифровых агентств, корпоративных пользователей и стартапов, которым требуются функциональные инфраструктурные решения.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/edef3abb-6f77-4c69-be56-e22d90f379db.png" alt="" /></figure><h3>Технические особенности</h3><p>Серверы UltraVDS размещены в современном дата-центре, расположенном в Москве. Доступность сервиса (аптайм) составляет 99,98%, что обеспечивает высокую стабильность работы. Сетевая пропускная способность превышает 200 Мбит/с, при этом трафик предоставляется без ограничений.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/56ccb605-b64b-44f3-94b7-10e960541dda.png" alt="" /></figure><p>Система защиты от DDoS-атак способна обрабатывать трафик до 1,5 Тбит/с и поддерживает стабильность работы сервера даже при интенсивном внешнем воздействии. Лицензия на Windows Server входит в стоимость обслуживания в данном предложении. Это упрощает развертывание сервера: вам не нужно отдельно покупать и устанавливать лицензию. Плюс снижает общие операционные расходы для пользователей этой операционной системы.</p><h3>Тарифные планы</h3><p>Для новых пользователей UltraVDS предусмотрена возможность 3-дневного тестового периода, позволяющего оценить функциональность и производительность сервиса.</p><p>После тестового периода стоимость тарифов начинается от 119 рублей в месяц. На сайте доступен онлайн-калькулятор, позволяющий подобрать конфигурацию сервера и рассчитать итоговую стоимость.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/932d0cca-9f20-4723-8ae9-8d9c3218a08a.png" alt="" /></figure><p>Клиентам доступны различные варианты оплаты, включая ежемесячную систему без предоплаты. При авансовой оплате на период от 3 до 12 месяцев предоставляются скидки до 20%, размер которых зависит от выбранного срока. В случае досрочного прекращения использования сервиса, неиспользованный остаток средств возвращается на баланс пользователя.</p><h3>Поддержка и обслуживание</h3><p>Техническая поддержка UltraVDS работает круглосуточно, 7 дней в неделю. Среднее время ответа на запросы составляет до 15 минут. Связь со службой поддержки возможна по электронной почте и телефону, указанным на официальном сайте.</p><h2>3. RUVDS: 10 лет на рынке облачных решений</h2><p><a href="https://ruvds.com/ru-rub">RUVDS</a> — облачный провайдер, имеющий десятилетний опыт работы на рынке услуг виртуальных серверов (VPS/VDS). Является официальным партнером Huawei в России, работает по SLA. Компания предоставляет инфраструктурные решения, которые могут быть применены для широкого спектра задач, включая хостинг высоконагруженных интернет-магазинов, корпоративных порталов, игровых серверов, сложных backend-систем и чат-ботов.</p><p>Платформа RUVDS спроектирована для оптимизации процесса развертывания ресурсов. Одной из ее особенностей является маркетплейс, который позволяет быстро запускать серверы с предустановленным программным обеспечением. Это способствует ускорению старта проектов, снижая потребность в ручной настройке распространенных CMS, игровых серверов и сред разработки.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/aed25b96-b39b-4be9-b875-dc695645ef24.png" alt="" /></figure><h3>Тарифная политика и варианты оплаты</h3><p>RUVDS предлагает различные тарифные планы. Например, стоимость конфигурации Linux-сервера (1 CPU, 512 МБ RAM, 10 ГБ HDD, 1 IPv4) начинается от 139 ₽/месяц. Это может быть рассмотрено как экономичное решение для запуска небольших проектов и проведения тестирования.</p><p>Клиентам доступны разные опции оплаты:</p><ol><li>Ежемесячные платежи или предоплата на срок от 3 до 12 месяцев, при которой предоставляются скидки до 20%, зависящие от продолжительности периода.</li><li>Для проектов с динамической нагрузкой предусмотрена посекундная тарификация, оплата по которой взимается только за фактически использованные ресурсы. Неиспользованный остаток средств в рамках этой модели возвращается на баланс пользователя</li></ol><p>Дополнительно, до конца 2025 года панель управления ISP Manager для сервера и сайта предоставляется без дополнительной платы при создании любого VPS.</p><h3>Глобальная инфраструктура и стабильность</h3><p>Инфраструктура включает 17 дата-центров уровня Tier III, расположенных по всему миру. Это один из самых больших показателей по количеству геолокаций среди российских провайдеров. Для работы используются корпоративное оборудование и накопители (HDD, SSD, NVMe), чтобы обеспечить стабильную работу и производительность размещенных проектов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/3f3c970e-820f-4f0e-9b53-f227950e298b.png" alt="" /></figure><h3>Поддержка клиентов и доступные ресурсы</h3><p>Техническая поддержка RUVDS доступна круглосуточно, 7 дней в неделю. Среднее время ответа на запросы через тикет-систему или онлайн-чат составляет 15 минут. Клиентам предоставляются полные административные права и консультации по вопросам запуска и настройки серверов. Для самостоятельного изучения доступна база знаний, включающая инструкции и руководства.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/c086a963-2d51-4ada-86c8-0c1704cf8230.png" alt="" /></figure><h3>Безопасность и масштабирования</h3><p>В контексте безопасности данных, RUVDS предлагает несколько решений:</p><p>- Встроенная защита от DDoS-атак, способствующая поддержанию бесперебойной работы серверов при внешнем воздействии.</p><p>- Стандартный IPv4-адрес включен в стоимость каждой виртуальной машины, с опцией аренды дополнительных IP-адресов.</p><p>- API, соответствующий OpenAPI 3.0.0, предоставляет возможности для интеграции и автоматического масштабирования серверных ресурсов в зависимости от нагрузки.</p><p>- Компания официально подтверждает соответствие требованиям ФСТЭК и ФЗ-152 по защите персональных данных, что обеспечивает соблюдение соответствующих законодательных норм.</p><h2>4. McHost: решения для бизнеса разного масштаба</h2><p><a href="https://mchost.ru/"> McHost</a> предоставляет комплексные хостинговые решения, включая виртуальный хостинг и VPS/VDS с NVMe-накопителями. Сервис поддерживает популярные CMS (WordPress, Joomla, 1С-Битрикс) с оптимизированными настройками и автоматической установкой через панель управления.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/2ccc459a-8df5-41b6-bbf9-b751bed2e757.png" alt="" /></figure><p>McHost ориентирован на широкий круг клиентов:</p><ul><li>владельцы сайтов-визиток, блогов и лендингов — благодаря низким тарифам и полному набору опций;</li><li>интернет-магазины с небольшой нагрузкой — тарифы с SSD-накопителями и автоматическим резервным копированием обеспечивают стабильную работу;</li><li>разработчики, которым нужны<br />VPS/VDS с root-доступом — работают серверы на KVM-виртуализации с ОС Linux и Windows;</li><li>госучреждения и компании,<br />работающие с персональными данными — соответствие 152-ФЗ и размещение в дата-центрах Tier III в Москве.</li></ul><h3>Особенности сервиса</h3><p>McHost поддерживает стабильную работу с аптаймом 99.9% за счет размещения оборудования в дата-центрах уровня Tier III — в Москве и Нидерландах.</p><p>Сервис предоставляет защиту от DDoS-атак, автоматическое резервное копирование раз в два дня с хранением данных в течение 30 дней для виртуального хостинга и 14 дней для VPS, а также поддержку российских криптографических стандартов. Клиентам доступны различные варианты размещения: от виртуального хостинга с SSD (от 157.5 ₽/мес) до выделенных серверов с NVMe-накопителями.</p><h3>Технические параметры и условия</h3><p>Инфраструктура McHost базируется на серверах Dell с NVMe-накопителями и процессорами Intel Xeon (частота ядер от 2.35 ГГц). Для виртуального хостинга используется CloudLinux с технологией CageFS, обеспечивающей изоляцию аккаунтов. Поддержка российских ОС («Альт») подтверждена для VPS-тарифов.</p><p>В техподдержку можно обратиться по телефону, через тикет или в Telegram-боте. Время ответа — до 10 минут.</p><p>Текущие тарифы:</p><ul><li>Виртуальный хостинг: от 157 ₽/мес<br />(3 ГБ SSD, 1 сайт).</li><li>VPS: от 396 ₽/мес (15 ГБ SSD, 1<br />ядро CPU).</li><li>Выделенные серверы: от 3 000 ₽/мес<br />(32 ГБ RAM, 2×1 ТБ HDD).</li></ul><h2>5. UFO Hosting: VPS/VDS и выделенные серверы с портом до 10 Гбит/с и безлимитным трафиком</h2><p><a href="https://ufo.hosting/">UFO Hosting </a>предлагает VPS/VDS и выделенные серверы на партнёрской инфраструктуре IXcellerate (Tier III). В портфолио — недорогие виртуальные машины и серверы с портом 10 Gbps для проектов, которым нужна стабильность без завышенных цен.</p><p>Сервис подходит для пользователей разных масштабов: от фрилансеров и веб‑студий до средних и крупных компаний. Для DevOps‑специалистов доступны API и инструменты автоматизации.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-19/3cfc6e79-bab0-48ab-862b-f523c0ad24e8.png" alt="" /></figure><h3>Основные сценарии использования</h3><ul><li>корпоративные сайты, CRM‑системы и веб‑приложения;</li><li>аналитические сервисы и SaaS‑продукты;</li><li>инфраструктура для разработки и тестирования;</li><li>задачи фрилансеров, агентств и digital‑команд.</li></ul><h3>Формат работы, особенности и интеграции</h3><p>Серверы установлены в российском дата‑центре Tier III (IXcellerate), что означает резервирование по питанию и каналам связи. Заявленный аптайм — 99,98 %. Поддержка работает круглосуточно в тикетах, чате и по телефону; среднее время ответа 5–10 минут.</p><p>Сервис UFO Hosting делает акцент на безопасности и гибкости. Есть сеть с защитой от DDoS, возможность горячего расширения ресурсов, автоматическое развёртывание из шаблонов и API для интеграции. Поддерживаются популярные фреймворки и CMS, есть интеграции с GitLab, Telegram и DockerHub. Бэкапы, снапшоты и резервирование входят в стандартный набор, так что восстанавливать тестовую среду не придётся вручную.</p><p>В панели управления можно автоматически установить популярные CMS, панели управления, хранилища и DevOps‑инструменты. Это экономит время на настройку и подходит тем, кто не хочет поднимать всё с нуля.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-08-06/e4433ae3-898b-4c14-90c1-2a4bbb8b13a1.png" alt="" /></figure><h3>Условия использования и тарифы</h3><p>Базовые конфигурации начинаются от 577 руб./месяц. Заявленная скорость порта — до 10 Gbps, что подходит для проектов, где много трафика.</p><p>Есть возможность бесплатно попробовать сервис присутствует, но предоставляется по запросу в поддержку, а при оплате на срок от трёх месяцев действуют скидки, а также регулярно проводятся акции: это поможет оптимизировать бюджет.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-08-06/1e2e0191-1194-4a60-a612-fcac5d8cf76d.png" alt="" /></figure><p>В целом, UFO Hosting выглядит как практичное решение для тех, кому нужны производительные VPS/VDS и выделенные серверы в России. При выборе стоит оценить, насколько конфигурации подходят под конкретные нагрузки и есть ли необходимость в интеграциях из коробки.</p><h2>6. Timeweb: хостинг для веб-проектов</h2><p><a href="https://timeweb.com/">Timeweb </a>предоставляет услуги хостинга для различных типов веб-проектов. Сервис поддерживает популярные CMS, включая WordPress, 1C-Битрикс и Joomla, что делает его подходящим как для личных блогов, так и для корпоративных сайтов.</p><p>Платформа использует собственную панель управления с инструментами для работы с сайтами, базами данных и резервными копиями. Ежедневное автоматическое резервное копирование с хранением данных до 30 дней включено во все тарифные планы. Базовая защита от DDoS-атак доступна для всех клиентов без дополнительной платы.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/b443bfef-bccb-4672-bd55-cb67a1146bc3.png" alt="" /></figure><p>Инфраструктура Timeweb размещена в дата-центрах уровня Tier III в России (Санкт-Петербург) и Казахстане (Алматы). Гарантированный показатель uptime составляет 99.98%. Поддерживаются современные технологии: PHP версий от 5.3 до 8.4, MySQL от 5.6 до 8.0, а также Perl, Python, SSH, FTP и Cron.</p><p>Тарифные планы:</p><ul><li>Year+: от 164 ₽/мес (2 сайта, 15<br />ГБ NVMe, 2 БД);</li><li>Optimo+: от 248 ₽/мес (15 сайтов,<br />40 ГБ NVMe, безлимитные БД);</li><li>Century+: от 347 ₽/мес (35 сайтов,<br />50 ГБ NVMe, безлимитные БД);</li><li>Millennium+: от 482 ₽/мес (60<br />сайтов, 60 ГБ NVMe, безлимитные БД).</li></ul><p>Все тарифы включают бесплатный SSL-сертификат, 10 ГБ почтовой квоты с неограниченным количеством ящиков и DNS-хостинг. При оплате годового тарифа предоставляется домен в зонах .RU/.РФ в подарок.</p><p>Техническая поддержка доступна круглосуточно через онлайн-чат, тикет-систему и по телефону. Среднее время ответа не превышает 15 минут. Новые клиенты могут протестировать сервис бесплатно в течение пробного периода.</p><h2>7. Reg.ru: комплексные решения для сайтов и доменов</h2><p><a href="https://www.reg.ru/">Reg.ru </a>сочетает услуги хостинга и регистрации доменов, что упрощает управление веб-проектами. Компания работает с 2005 года, имеет статус аккредитованного регистратора доменных имён в зонах .RU и .РФ.</p><h3>Функциональные возможности</h3><p>Платформа предоставляет доступ к трём панелям управления: ISPmanager, cPanel и Plesk. Это позволяет выбрать наиболее удобный интерфейс для работы с сайтами. Все тарифы включают бесплатный SSL-сертификат от Let’s Encrypt, который автоматически устанавливается при создании сайта.</p><p>Начинающим пользователям доступен конструктор сайтов с готовыми шаблонами. Поддерживаются популярные CMS, включая WordPress, Joomla и 1С-Битрикс. Ежедневное резервное копирование данных с хранением копий в течение 30 дней входит в стандартный набор услуг.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/c1ac0c6a-51ae-4ae5-8875-f18a01ffdc2c.png" alt="" /></figure><h3>Техническая инфраструктура</h3><p>Серверы размещены в дата-центрах уровня Tier III в Москве. Средний показатель uptime составляет 99.9%, что подтверждается ежемесячной статистикой. Подключение к сети осуществляется по выделенным каналам со скоростью до 1 Гбит/с на выделенных серверах.</p><h3>Поддержка и тарифы</h3><p>Техническая поддержка доступна 24/7 через онлайн-чат и тикет-систему. Среднее время ответа составляет 15-20 минут. Для срочных вопросов можно обратиться по телефону.</p><p>Тарифы — от 151 ₽/мес (7 ГБ SSD, 15 сайтов). При регистрации домена в зонах .RU или .РФ предоставляется скидка на другие доменные имена.</p><h2>8. Спринтхост: хостинг с персональным подходом</h2><p><a href="https://sprinthost.ru/">Sprinthost</a> предлагает услуги хостинга с акцентом на индивидуальную поддержку клиентов. Сервис работает с 2011 года и специализируется на VPS-решениях для различных веб-проектов.</p><h2>Особенности сервиса</h2><p>Компания предоставляет персонального менеджера для каждого клиента, который помогает с настройкой сервера и решением технических вопросов. А если вы остались недовольны услугами, то в течение 30 дней сервис вернёт деньги. Sprinthost проводит бесплатные обучающие вебинары по DevOps и администрированию серверов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/7acc90d0-655a-4cda-906f-a7e5ad4f9a8e.png" alt="" /></figure><h3>Технические характеристики и тарифы</h3><p>Инфраструктура размещена в дата-центрах Москвы и Санкт-Петербурга с аптаймом 99.9%. Поддерживаются современные технологии разработки, включая Ruby on Rails, Node.js, Python и Docker. Все серверы используют SSD-накопители с гарантированной скоростью чтения/записи.</p><p>Тарифные планы:</p><ul><li>Start: 290 ₽/мес (1 ядро, 1 ГБ<br />RAM, 15 ГБ SSD);</li><li>Turbo: 1 900 ₽/мес (4 ядра, 8 ГБ<br />RAM, 100 ГБ NVMe).</li></ul><h3>Поддержка</h3><p>Техническая помощь доступна 24/7 через тикет-систему и онлайн-чат. Среднее время ответа составляет 10-15 минут. Для корпоративных клиентов предусмотрена приоритетная поддержка по телефону.</p><h2>Как выбрать хостинг в 2025 году</h2><p>Выбор хостинга зависит от типа проекта и его требований. Для небольших сайтов и блогов подойдет виртуальный хостинг с поддержкой популярных CMS — важно проверить наличие автоматических бэкапов и базовой защиты от DDoS. Если проект связан с обработкой персональных данных, убедитесь, что провайдер соответствует 152-ФЗ и использует сертифицированное оборудование.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/3a0b1d01-c4e0-424d-86b2-8988d43bcdb1.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/b3c26558-3a50-4eb3-a9f3-89c899fd9e59.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/3408c453-b5db-44ce-b6ab-f1b3bcb5abd1.png" alt="" /></figure><p>Для высоконагруженных сервисов и интернет-магазинов лучше рассматривать VPS или выделенные серверы. Обратите внимание на тип накопителей (SSD/NVMe), возможность масштабирования ресурсов и аптайм дата-центров (рекомендуется от 99.9%).</p><p>Перед покупкой протестируйте сервис — большинство провайдеров предлагают пробный период. Проверьте скорость работы панели управления и отзывчивость поддержки. Не забывайте о резервном копировании: даже если хостинг предоставляет эту услугу, дублируйте критически важные данные самостоятельно.</p><p>Главное правило — выбирайте решение, которое покрывает текущие потребности проекта. Важно, чтобы конфигурацию можно было оперативно менять по мере роста запросов и масштабирования бизнеса. Технологии меняются быстро, и гибкость конфигурации часто важнее сиюминутной экономии.</p><h2>FAQ</h2><h3>Что такое виртуальный хостинг и когда его выбирать?</h3><p>Виртуальный хостинг — это экономичное решение, где один физический сервер делит ресурсы между множеством сайтов. Подходит для небольших проектов с низкой нагрузкой: личных блогов, лендингов или стартовых страниц.</p><p>Преимущества: низкая стоимость, простота управления через панели, автоматические обновления и базовая защита. Минусы: ограниченные ресурсы; производительность зависит от соседних сайтов; минимальный контроль над настройками.</p><h3>Что такое VPS/VDS и для каких проектов он подходит?</h3><p>VPS (Virtual Private Server) или VDS — это виртуальный сервер с выделенными ресурсами (процессор, память, диск), предоставляющий доступ для полной настройки. Идеален для проектов среднего масштаба: интернет-магазинов, API, SaaS, чат-ботов, корпоративных порталов или приложений с умеренным трафиком.</p><p>Преимущества: гибкость конфигураций, выбор ОС, изоляция ресурсов. Минусы: требует базовых навыков администрирования, стоимость выше, чем у виртуального хостинга.</p><h3>Что такое выделенный сервер и когда его использовать?</h3><p>Выделенный сервер — это физический сервер, полностью зарезервированный под ваш проект. Подходит для высоконагруженных систем: крупных интернет-магазинов, игровых платформ, корпоративных ERP или аналитических сервисов с большим трафиком.</p><p>Преимущества: максимальная производительность, полный контроль, высокая отказоустойчивость. Минусы: высокая цена, сложность настройки и обслуживания.</p><h3>В чём основные различия между виртуальным хостингом, VPS и выделенным сервером?</h3><p>Виртуальный хостинг — самый дешёвый и простой, но ресурсы делятся между пользователями, что ограничивает производительность (до 1000–2000 посетителей в сутки).</p><p>VPS обеспечивает выделенные ресурсы и гибкость, справляясь с нагрузкой до 5000–10 000 пользователей в сутки.</p><p>Выделенный сервер — максимум мощности для пиков свыше 10 000 пользователей, но требует значительных затрат и технических знаний.</p><p>Выбор зависит от масштаба: виртуальный для старта, VPS для роста, выделенный для enterprise.</p><h3>Нужны ли навыки администрирования для хостинга?</h3><p>Для виртуального хостинга навыки не нужны — управление идёт через интуитивные панели, а провайдеры обеспечивают обновления и базовую поддержку. Для VPS желательны базовые знания (настройка ОС, установка ПО), хотя многие провайдеры предлагают помощь. Для выделенного сервера навыки администрирования необходимы, так как вы полностью отвечаете за сервер, хотя провайдеры могут предлагать платное администрирование.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 библиотек Python, которые меняют карьеру</title>
      <link>https://tproger.ru/articles/10-bibliotek-python--kotorye-menyayut-kareru</link>
      <comments>https://tproger.ru/articles/10-bibliotek-python--kotorye-menyayut-kareru?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-bibliotek-python--kotorye-menyayut-kareru</guid>
      <description><![CDATA[<p>10 библиотек Python, которые помогут прокачаться в аналитике, ML и разработке. Как они работают и почему меняют карьеру.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-bibliotek-python--kotorye-menyayut-kareru">10 библиотек Python, которые меняют карьеру</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Парсинг]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Отладка]]></category>
      <category><![CDATA[Нейронные сети]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Jupyter Notebook]]></category>
      <category><![CDATA[Визуализация]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Анализ данных]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 17 Jul 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>У Python тысячи библиотек, но лишь немногие действительно меняют карьеру. Они помогают не просто решать задачи, а ускорять проекты, прокачивать навыки и выходить на следующий уровень в аналитике, машинном обучении и разработке. В этом материале мы собрали 10 библиотек, которые помогут зарабатывать на Python и развивать навыки.</p><h2>1. Pandas</h2><p>Pandas — библиотека для работы с данными в Python, позволяющая легко загружать, анализировать, очищать и преобразовывать числовую информацию в удобной табличной форме. По сути, это Excel, который смог, и позволяет делать всё автоматизировано и на порядки быстрее.</p><p>Библиотека строится вокруг двух ключевых структур: <b>Series</b> (одномерный массив с индексами); <b>DataFrame </b>(таблица с индексами и колонками).</p><h3>Какие задачи решает библиотека</h3><p>Pandas полезна для следующих задач:</p><ul><li>Сам анализ данных: можно быстро фильтровать, группировать, агрегировать и строить сводные таблицы.</li><li>Очистка данных: удаляем пустые строки, заменяем значения, приводим типы.</li><li>Загрузка данных из CSV, Excel, SQL.</li><li>Визуальная разведка данных (EDA) перед построением моделей.</li><li>Подготовка данных для ML и отчётов.</li><li>Автоматизация отчётов и ETL-пайплайнов.</li></ul><p>Благодаря Pandas аналитик превращается в инженера данных, а ML-специалист может сосредоточиться на моделях, а не на ручной подготовке датасетов.</p><h3>Как пользоваться</h3><p>Ниже разберём простейший кейс: нужно загрузить данные о зарплатах разработчиков из CSV, посчитать среднюю зарплату по языкам программирования и отобрать топ-5.</p><h3>Почему это меняет карьеру</h3><p>Работа с Pandas становится границей между знанием Python и умением решать задачи бизнеса. Для <b>джуна </b>это шанс сразу показать практическую пользу: выгрузки, отчёты и базовый анализ можно делать в десятки раз быстрее и аккуратнее, чем вручную в эксельке.</p><p>Для <b>аналитика</b> Pandas превращается в главный рабочий инструмент, позволяя не просто проверять гипотезы и делать сводные таблицы, а строить полноценные отчётные пайплайны, автоматизировать рутинные выгрузки и концентрироваться на сути данных, а не на правках ручками.</p><p>Для <b>ML-инженера</b> владеть Pandas — значит уметь готовить датасеты качественно; быстро очищать и приводить данные к нужному виду, что напрямую влияет на результат моделей. Без этого работа над проектами машинного обучения часто превращается в бесконечную возню с данными.</p><p>Наконец, даже для <b>разработчиков</b> Pandas может стать неожиданным бустом в карьере. Например, когда нужно автоматизировать отчёты для бизнеса или быстро анализировать логи и данные из БД без поднятия дашбордов — Pandas даёт гибкость и скорость, которые редко даёт что-то ещё в экосистеме Python.</p><h2>2. Django</h2><p>Django — фреймворк для веб-разработки на Python, который позволяет быстро создавать надежные и масштабируемые веб-приложения. Он следует принципам DRY (Don’t Repeat Yourself — не повторяй себя), предоставляя разработчику ORM, роутинг, систему авторизации, админку, работу с формами, шаблонами и инструментами безопасности из коробки.</p><p>Django подходит как стартапам, которым нужно быстро выйти на рынок, так и крупным проектам с миллионами пользователей. Это не просто библиотека, а полноценный каркас для построения и сопровождения веб-сервисов.</p><h3>Какие задачи решает библиотека</h3><p>Каркас, действительно, каркасный. Задачи следующие:</p><ul><li>Создание веб-приложений и API любой сложности.</li><li>Быстрая разработка MVP, прототипов и коммерческих проектов.</li><li>Упрощение работы с базами данных через ORM, без написания сырого SQL.</li><li>Построение административных панелей для управления данными без ручной разработки.</li><li>Гибкая маршрутизация и работа с формами, валидацией и шаблонами.</li><li>Реализация аутентификации, авторизации и защиты приложений.</li></ul><p>Django позволяет сосредоточиться на бизнес-логике и продукте, не тратить недели на настройку инфраструктуры.</p><h3>Как пользоваться</h3><p>Устанавливаем:</p><p>Создаем проект и приложение:</p><p>Пример модели:</p><p>Миграция базы данных:</p><p>Создание админки:</p><p>После этого можно запустить сервер:</p><p>И перейти по адресу http://127.0.0.1:8000/admin для управления записями через готовую админ-панель.</p><h2>3. PyTorch</h2><p>PyTorch — мощная библиотека Python. Она позволяет строить и обучать нейронные сети, проводить вычисления с автоматическим дифференцированием и работать с GPU для ускорения самих вычислений.</p><p>Главное отличие PyTorch от других ML-фреймворков — динамическая вычислительная графика (define-by-run): модель строится и изменяется во время выполнения кода, что даёт гибкость при создании и отладке сложных моделей.</p><p>Сегодня PyTorch используется в продакшен системах, научных исследованиях, компьютерном зрении, NLP и генеративных моделях, занимая ведущее место в индустрии.</p><h3>Какие задачи решает библиотека</h3><p>В функционал PyTorch входят:</p><ul><li>Построение нейронных сетей любой сложности (CNN, RNN, трансформеры);</li><li>Обучение и тестирование моделей на CPU и GPU;</li><li>Реализация кастомных слоёв и loss-функций;</li><li>Разработка и деплой ML/AI моделей в продакшен;</li><li>Быстрая итерация гипотез с удобной отладкой.</li></ul><p>С PyTorch можно начать с простых нейронных сетей, а затем перейти к реализации современных архитектур.</p><h3>Как пользоваться</h3><p>Установим PyTorch (на CPU, для GPU потребуется версия с CUDA):</p><p>Рассмотрим кейс обучения простой нейронной сети для классификации рукописных цифр MNIST.</p><p>После обучения можно использовать torch.save() для сохранения модели и torch.load() для загрузки в продакшн.</p><h3>Почему это меняет карьеру</h3><p>PyTorch — билет в мир современной разработки AI и машинного обучения. Владение инструментом даёт <b>разработчику</b> возможность уверенно войти в области, которые продолжают оставаться топовыми на рынке: искусственный интеллект, компьютерное зрение, NLP, генерация изображений и видео и т.д.</p><p>Для <b>начинающего ML/AI-специалиста </b>PyTorch помогает лучше понять, как устроены нейронные сети, и под капотом увидеть, как происходят вычисления. Это ускоряет рост навыков и делает разработчика востребованным в исследованиях и R&amp;D-проектах.</p><p>Для <b>дата-сайентистов</b> PyTorch позволяет превратить исследовательские ноутбуки в готовые к деплою модели, благодаря PyTorch Lightning, TorchScript и ONNX.</p><p>Для<b> разработчиков, которые хотят выйти на рынок AI</b>, PyTorch — это мастхев: проекты в стартапах и крупных компаниях всё чаще строятся вокруг него. Умение писать кастомные loss-функции, проектировать сложные пайплайны обучения, настраивать обучение на кластерах и GPU — компетенции, которые существенно бустят зарплату.</p><p>PyTorch в целом помогает расширять портфолио: с ним можно создавать генеративные модели, строить LLM, участвовать в соревнованиях и работать с самыми современными подходами в машинном обучении.</p><h2>4. Polars</h2><p>Polars — современная библиотека для обработки данных в Python, созданная как альтернатива Pandas. Она использует колоночную архитектуру и многопоточность, что позволяет работать с большими объёмами данных значительно быстрее и с меньшим потреблением памяти.</p><p>Polars вдохновлена Pandas, но её API оптимизировано для производительности и удобства, а также даёт разработчику возможность писать цепочки ленивых вычислений, которые оптимизируются перед выполнением. Это делает её отличным инструментом для аналитиков, дата-инженеров и дата-сайентистов, которым нужно обрабатывать данные быстро.</p><h3>Какие задачи решает библиотека</h3><p>Polars явно есть, чем гордиться:</p><ul><li>Загрузка, очистка и преобразование больших датасетов;</li><li>Анализ данных с использованием цепочек преобразований;</li><li>Быстрая агрегация и группировка данных;</li><li>Ленивые вычисления: построение пайплайнов преобразования данных, которые выполняются только при вызове collect().</li><li>Обработка данных, которые не помещаются в память, за счёт эффективности и колоночной архитектуры.</li></ul><p>Если Pandas начинает притормаживаться на данных в несколько гигабайт, Polars обычно продолжает работать быстро, позволяя без боли обрабатывать большие CSV.</p><h3>Как пользоваться</h3><p>Установка:</p><p>Давайте загрузим данные и проведем базовые трансформации:</p><p>А вот и пример ленивых вычислений:</p><p>В чем особенность:</p><ul><li>pl.read_csv загружает данные сразу.</li><li>pl.scan_csv создаёт план вычислений для последующей оптимизации.</li><li>Используются выражения (pl.col, .with_columns, .agg), которые композируются без создания промежуточных копий, это ускоряет процесс.</li></ul><h3>Почему это меняет карьеру</h3><p>Polars меняет карьеру, потому что даёт преимущество в скорости и эффективности при работе с данными. Там, где Pandas уже не справляется, полярный медведь приходит на помощь.</p><p>Для <b>дата-инженеров</b> Polars полезен при построении ETL и пайплайнов обработки данных, где важна скорость и предсказуемое потребление ресурсов. Его можно использовать в продакшен-скриптах, для подготовки данных к ML и для автоматизации отчётности.</p><p>Для <b>дата-сайентистов </b>Polars даёт возможность анализировать больше данных за меньшее время, быстро итерировать гипотезы и ускорять исследования. Его API достаточно близок к Pandas, поэтому переход не требует месяцев переучивания.</p><p>Освоение Polars показывает работодателям, что ты не просто знаешь стандартные инструменты, но умеешь выбирать оптимальные решения для реальных задач, повышая эффективность работы команды. В эпоху роста данных это критично для любого Python-разработчика, работающего с аналитикой и машинным обучением.</p><h2>5. FastAPI</h2><p>FastAPI — современный фреймворк для создания API на Python, заточенный под скорость, асинхронность и валидацию данных из коробки. Он построен на Starlette и Pydantic, автоматически создаёт OpenAPI-документацию, поддерживает асинхронное программирование и позволяет писать производительные REST и WebSocket API с минимальным количеством кода.</p><p>Вместо долгой настройки, как у Flask или Django, в FastAPI многое готово изначально: удобная работа с запросами и ответами, декларативная валидация, документация Swagger, асинхронность и высокая производительность без лишних усилий.</p><h3>Какие задачи решает</h3><p>Задач, действительно, много:</p><ul><li>Быстрая разработка REST API для мобильных и веб-приложений;</li><li>Создание бэкенда для ML/DS моделей (деплой моделей в виде API);</li><li>Построение микросервисов с хорошей производительностью;</li><li>Реализация websocket-серверов и асинхронных API;</li><li>Подготовка внутренних инструментов или бэкендов для MVP.</li></ul><p>FastAPI помогает быстро запускать API и уверенно масштабировать его в полевых условиях. Это один из немногих фреймворков Python, который по скорости работы сопоставим с Node.js и Go.</p><h3>Как пользоваться</h3><p>Во-первых, нужно установить FastAPI и Uvicorn (используем ASGI-сервер для запуска):</p><p>Простейший API-пример с эндпоинтом GET /:</p><p>Запускаем сам сервер:</p><p>После запуска API будет доступен по адресу http://127.0.0.1:8000/. Автоматически доступна интерактивная документация Swagger по адресу http://127.0.0.1:8000/docs.</p><p>FastAPI поддерживает валидацию параметров запроса, тел запросов и путей прямо через типы Python. Например, простой эндпоинт с параметром:</p><p>При вызове http://127.0.0.1:8000/items/10?q=test FastAPI автоматически проверит, что item_id — это число, и распарсит q как строку.</p><h3>Почему это меняет карьеру</h3><p>FastAPI — билет в мир бэкенда, где скорость и чистота кода имеют довольно высокое значение. Для <b>Python-разработчика </b>это возможность быстро освоить создание API и микросервисов, не увязнув в громоздкой настройке, как в Django, и при этом получить систему, готовую к продакшену.</p><p>Для <b>ML-специалиста</b> FastAPI становится инструментом для деплоя моделей: можно обернуть пайплайн предсказаний в API, подключить авторизацию или логирование и получить работающий сервис за считанные дни.</p><p>Вообще умение быстро поднимать и поддерживать API — навык, который ценят в бигтехе и стартапах. На разработчиков, которые владеют FastAPI, часто равняются: они умеют превращать идеи бизнеса в работающие сервисы за минимальное время.</p><h2>6. Typer</h2><p>Typer — современная библиотека для создания CLI-приложений на Python с минимальным количеством кода и автоматической генерацией документации. Автор библиотеки — Себастьян Рамирес, создатель FastAPI.</p><p>Главная особенность Typer — использование type hints для автоматического парсинга аргументов командной строки. Вы получаете удобную и читаемую CLI с поддержкой автодополнения и цветного вывода за считанные минуты.</p><h3>Какие задачи решает библиотека</h3><p>Список задач такой:</p><ul><li>Создание CLI-утилит любого уровня сложности.</li><li>Быстрое прототипирование и упаковка Python-скриптов в удобные инструменты для продакшена.</li><li>Генерация подробной справки (--help) и автодополнения команд.</li><li>Облегченная поддержка и масштабирование CLI за счёт структуры и читаемого кода.</li><li>Организация CLI с подкомандами, вложенными аргументами и обработкой ошибок.</li></ul><p>Typer использует аннотацию типов и минимум шаблонного кода.</p><h3>Как пользоваться</h3><p>Установка:</p><p>Пример минимальной CLI:</p><p>Теперь можно запустить из консоли:</p><p>Результат будет такой: Привет, Алиса! Тебе 25 лет.</p><h3>Почему это меняет карьеру</h3><p>Typer меняет карьеру тем, что открывает путь к созданию удобных CLI-инструментов, которые автоматизируют рутину и повышают продуктивность.</p><p>С Typer можно быстро превращать свои Python-скрипты в надежные утилиты, которыми удобно пользоваться и другим разработчикам, и сотрудникам из других отделов. CLI-приложения часто становятся клеем инфраструктуры: они позволяют автоматизировать деплой, миграции БД, сбор данных, интеграцию с внешними API и локальную разработку.</p><p>Если вы <b>Data Scientist или ML-инженер</b>, Typer позволяет оборачивать пайплайны в CLI, которые легко запускать из Jenkins, Airflow или вручную. Если вы <b>DevOps или Backend-инженер</b>, можете создавать CLI для работы с инфраструктурой и сервисами без сложных зависимостей.</p><p>Кроме того, работа с Typer улучшает навык структурирования кода, понимание CLI, использования type hints и разработки инструментов, которые делают работу проще для других. А это, очевидно, ценится в любой команде и повышает востребованность специалиста.</p><h2>7. Rich</h2><p>Rich — библиотека Python для красивого форматирования и интерактивного отображения информации в терминале. С её помощью можно выводить цветные таблицы, маркдаун, прогресс-бары, подсвеченный синтаксис кода, деревья каталогов и логирование в понятной и привлекательной форме.</p><p>Rich создана для того, чтобы «оживить» консоль Python, сделать логи удобными для восприятия, а CLI-инструменты — профессионально выглядящими без лишних усилий. Это библиотека, которая улучшает и UX, и DX.</p><h3>Какие задачи решает</h3><p>Про красоту не забываем! Задачи следующие:</p><ul><li>Цветное и структурированное логирование, понятное при чтении логов в реальном времени.</li><li>Отображение прогресс-баров для долгих операций.</li><li>Вывод таблиц, деревьев каталогов, JSON прямо в терминале.</li><li>Подсветка синтаксиса кода для CLI-инструментов.</li><li>Создание CLI-интерфейсов, которые выглядят профессионально и современно.</li><li>Улучшение читаемости при отладке скриптов.</li></ul><p>С помощью Rich можно быстро сделать понятными даже сложные данные при отладке или демонстрации.</p><h3>Как пользоваться</h3><p>Установка Rich:</p><p>Для примера выведем таблицу с подсветкой в консоли:</p><p>В результате в терминале получится цветная таблица, которая выглядит понятно и презентабельно.</p><h3>Почему это меняет карьеру</h3><p>Rich — это библиотека, которая помогает быстро повысить качество любого CLI-инструмента или дев-опыт в команде. <b>Разработчик</b>, который использует Rich, делает свои инструменты удобными не только для себя, но и для коллег: логирование становится понятным, а отладка скриптов — наглядной.</p><p>Во многих стартапах и продвинутых командах важна скорость обратной связи при тестировании пайплайнов и автоматизаций, и Rich помогает выводить ключевую информацию максимально читаемо.</p><p>Кроме того, Rich позволяет быстро создавать CLI-интерфейсы, которые выглядят как продакшен-продукты, даже если это внутренние инструменты. Руководство будет радоваться и думать о вас как о крутом разрабе.</p><p>Для <b>дата-инженеров и разработчиков DevOps</b> Rich полезна при создании админ-утилит и при мониторинге пайплайнов, для <b>Python-разработчиков</b> — при создании библиотек и фреймворков с CLI.</p><h2>8. LangChain</h2><p>LangChain — фреймворк для создания приложений на базе LLM, например, GPT, Claude, Mistral, Gemini. Он позволяет строить цепочки обработки запросов, интегрировать LLM с данными и инструментами, добавлять память и управление состояниями, а также связывать работу модели с внешними API и базами знаний.</p><p>LangChain предоставляет удобный слой абстракции над вызовами LLM и ускоряет разработку чат-ботов, RAG-приложений, агентов с инструментами, систем анализа документов и других AI-сервисов.</p><h3>Какие задачи решает</h3><p>Список внушительный:</p><ul><li>Интеграция LLM в Python-приложения без необходимости писать тот самый клеевой код вручную.</li><li>Построение цепочек с последовательной обработкой сообщений, включая преобразования и вызовы внешних функций.</li><li>Добавление памяти в чат-боты для сохранения истории общения и контекста.</li><li>Использование агентов для динамического вызова инструментов (веб-поиск, базы данных, API).</li><li>Создание RAG-систем с интеграцией LLM и векторных БД.</li><li>Быстрая сборка прототипов LLM-приложений, которые можно развернуть в продакшен.</li></ul><h3>Как пользоваться</h3><p>Установка:</p><p>Создадим простую цепочку с чатом GPT:</p><p>Благодаря единым абстракциям, можно гибко комбинировать цепочки, память и вызов внешних инструментов, не усложняя код.</p><h3>Почему это меняет карьеру</h3><p>LangChain меняет карьеру, потому что открывает новый пласт Python-разработки в AI и LLM-инженерии, быстро превращая пользователя GPT в создателя полноценных AI-приложений. Вместо того чтобы писать хаотичный клеевой код, вы начинаете системно проектировать цепочки запросов, учитесь строить продуманные промпты и объединять их с инструментами, памятью и внешними API.</p><p>Работа с LangChain погружает в практическую LLM-инженерию: вы начинаете создавать RAG-приложения, которые умеют искать и анализировать данные перед генерацией ответа и строить агентов. Это востребовано в продуктах, где нужно подключать ИИ к базам знаний, автоматизировать задачи и разрабатывать интерактивные системы, которые реально используют модели в продакшене.</p><p>LangChain позволяет быстро собирать и запускать MVP AI-продуктов, что дает конкурентное преимущество при создании стартапов или внутренних сервисов. А ещё учит мыслить структурами и проектировать масштабируемую архитектуру LLM-приложений и видеть, как генеративный ИИ можно превратить в рабочий инструмент.</p><h2>9. SQLAlchemy</h2><p>SQLAlchemy — это мощная ORM и toolkit для работы с базами данных в Python, позволяющая писать SQL-запросы декларативно, создавать модели таблиц и управлять транзакциями в Python-коде без ручного написания SQL.</p><p>Библиотека даёт разработчику два уровня контроля:</p><ul><li>Core: низкоуровневая работа с SQL выражениями и соединениями;</li><li>ORM: высокоуровневая декларативная работа с моделями, классами и связями между таблицами.</li></ul><p>SQLAlchemy поддерживает PostgreSQL, MySQL, SQLite, Oracle и другие СУБД, давая единую абстракцию, без привязки к конкретному движку.</p><h3>Какие задачи решает</h3><p>Пул задач следующий:</p><ul><li>Описание таблиц в виде Python-классов и управление ими через сессии;</li><li>Создание, чтение, обновление и удаление данных;</li><li>Миграция SQL на декларативный стиль без потери гибкости;</li><li>Полный контроль над транзакциями и выполнением запросов;</li><li>Работа с асинхронными приложениями при создании FastAPI/Django-приложений;</li><li>Экранирование параметров, которое снижает вероятность SQL-инъекций и ошибок.</li></ul><h3>Как пользоваться</h3><p>Создадим минимальный пример для SQLite с таблицей пользователей:</p><p>Этот код создаёт базу example.db, таблицу users, добавляет туда одного пользователя и выводит всех пользователей в базе. При необходимости можно использовать SQLAlchemy Core для написания гибких запросов вручную, если нужно работать ближе к SQL.</p><h3>Почему это меняет карьеру</h3><p>SQLAlchemy меняет карьеру <b>Python-разработчика</b> тем, что даёт понимание системной работы с данными, архитектуры приложений и взаимодействия с реальными базами данных. Вы учитесь строить продуманные бэкенды, которые работают с транзакциями, миграциями, связями между таблицами и сложными выборками.</p><p>Знание SQLAlchemy открывает дорогу в мир API, микросервисов и продуктов, где требуется качественное управление данными и гибкая логика работы с БД. Работа с SQL теперь совсем не страшная.</p><h2>10. Seaborn</h2><p>Seaborn — библиотека для визуализации данных на Python, построенная поверх Matplotlib и упрощающая создание информативных и стильных графиков с минимальным количеством кода.</p><p>Она автоматически заботится о красивых стилях, цветах, разметке графиков, легендах и позволяет легко строить распределения, линейные графики, тепловые карты и другие визуализации.</p><p>Библиотека тесно интегрируется с Pandas DataFrame, позволяя использовать колонки данных напрямую для построения графиков, что делает её идеальной для EDA (разведочного анализа данных) и подготовки визуализаций для отчётов и презентаций.</p><h2>Какие задачи решает</h2><p>Визуализация безумно важна, особенно в контексте дата-аналитики. Seaborn отвечает за:</p><ul><li>Быстрое построение информативных графиков для анализа данных и поиска инсайтов;</li><li>Автоматическую обработку ошибок отображения и масштабирования, что экономит время;</li><li>Поддержку сложных визуализаций по типу ящиков с усами или тепловых карт без десятков строк кода;</li><li>Стилизацию графиков без ручных настроек Matplotlib;</li><li>Возможность добавлять статистические элементы (линию регрессии, KDE, распределение);</li><li>Интеграцию с Jupyter Notebook для интерактивного анализа данных.</li></ul><h3>Как пользоваться</h3><p>Допустим, у нас есть датасет с данными о чаевых:</p><p>В три строки мы получаем чистый и читаемый ящик с усами, показывающий, как счет за ужин распределяется по дням недели.</p><p>Для построения более сложных графиков можно использовать диаграмму рассеяния:</p><p>Тут мы добавляем цветовую кодировку по полу, чтобы увидеть зависимости между переменными.</p><h3>Почему это меняет карьеру</h3><p>Seaborn меняет карьеру, потому что даёт навык визуального анализа данных, что критично в современной аналитике и дата-инженерии. Умение быстро строить графики и видеть аномалии, распределения и взаимосвязи между переменными превращает работу с данными из слепого копания в числах в структурный анализ.</p><p>Использование Seaborn в Python-стеке помогает выделиться среди разработчиков, которые ограничиваются Pandas и текстовыми логами, ведь визуализация часто позволяет быстрее заметить закономерности и убедить команду или заказчика в правильности гипотезы.</p><p>Seaborn также учит пониманию данных через визуальные паттерны, что улучшает навыки построения моделей машинного обучения (так понятнее, какие признаки важны), и помогает создавать наглядные отчёты для продуктовых решений, где результат анализа нужно доносить до людей не из айти-индустрии.</p><p><i>А какими библиотеками пользуетесь вы? Делитесь в комментариях!</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Как из РФ опубликовать приложение в App Store и Google Play</title>
      <link>https://tproger.ru/articles/kak-iz-rf-opublikovat-prilozhenie-v-app-store-i-google-play</link>
      <comments>https://tproger.ru/articles/kak-iz-rf-opublikovat-prilozhenie-v-app-store-i-google-play?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-iz-rf-opublikovat-prilozhenie-v-app-store-i-google-play</guid>
      <description><![CDATA[<p>Разбираемся, как опубликовать приложение в App Store и Google Play в РФ и СНГ легально и без проблем: особенности, подводные камни, условия 2025 года.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-iz-rf-opublikovat-prilozhenie-v-app-store-i-google-play">Как из РФ опубликовать приложение в App Store и Google Play</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[VPN]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[App Store]]></category>
      <category><![CDATA[Россия]]></category>
      <category><![CDATA[5g]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 10 Jul 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Выложить приложение в App Store и Google Play сегодня мешают три вещи: санкции, блокировки и противоречивые советы в сети. Ошибиться легко: где-то советуют заводить счёт в СНГ, где-то — ждать разблокировки карт. Потерять время тоже просто: регистрацию аккаунтов нередко затягивают проверки документов и падают способы оплаты.</p><p>Чтобы не сорвать сроки, заложите месяц на подготовку. Большая часть работы — не сама загрузка APK или IPA, а открытие кабинетов и их оплата. И пока вы не решите эти вопросы, к кнопке публикации даже не подойдёте.</p><p>В этом материале мы рассказали про путь, который помогает пройти регистрацию, оплату и модерацию без лишних кругов и откатов.</p><h2>Как подтвердить личность, чтобы не завернули</h2><p>Прежде чем мечтать о миллионах скачиваний, пройдите главный квест: регистрация аккаунта разработчика. Заложите на этот этап не меньше месяца, если планируете меньше — появляется риск сорвать сроки.</p><p><b>Для Apple Developer</b>: тут относительно просто. Понадобится ваш Apple ID. Если вы регистрируетесь как юридическое лицо, то будьте готовы предоставить DUNS-номер. Об этом мы ещё поговорим, но для Apple получить его часто можно прямо через сайт Apple, просто запросив его, и он приходит на почту через пару дней.</p><p><b>Для Google Play</b>: а вот тут Гугл вас прощупает посерьёзнее. Сначала укажите паспортные данные. Это только начало. Затем для подтверждения аккаунта понадобится дополнительный документ, где будут ваше имя и адрес. Что это может быть? Вполне подойдёт квитанция об оплате интернета. Главное правило: ваши ФИО в паспорте, аккаунте и этом документе должны совпадать. И, конечно, адрес тоже должен быть идентичен.</p><p>Важный совет: если вы решили регистрировать приложение от имени какой-то страны СНГ (такой совет часто встречается), то и документ, подтверждающий адрес, должен быть из этой же страны.Выбирайте одностраничные документы. Форма для загрузки часто предполагает одно изображение, и если ваш документ на несколько страниц, придётся заниматься склейкой в одну картинку. Не усложняйте себе жизнь.</p><h3>Выберите нормальный VPN и следуйте инструкции</h3><p>Скорее всего, все манипуляции придётся делать через VPN. Apple ID тоже может чудить: например, зависнуть на этапе регистрации без видимых причин. Тут тоже VPN часто спасает.</p><p>Но будьте готовы к сюрпризам: иногда всё работает и без VPN. Вероятно, это зависит от вашего интернет-провайдера.</p><h3>Таинственная кнопка «Enroll me now» в Apple Developer: когда она ломается</h3><p>Apple Developer в целом проще, чем Google, но и здесь есть свои «сюрпризы», о которых сама Apple молчит. Самая распространённая проблема — неактивная кнопка «Enroll me now». Под ней может появиться надпись: “Enrollment through the Apple Developer app is not available for this Apple ID. Visit http://developer.apple.com/programs/enroll/”.</p><p>В интернете гуляет куча теорий, как это решить: включить/выключить VPN, поменять браузер, использовать FaceID, создать новый аккаунт, попробовать с другого устройства. Из всего этого многообразия помогает лишь один вариант — попробовать с нового устройства.</p><p>Но есть стопроцентно работающий, хоть и банальный, способ: напишите в поддержку Apple. Да, это не быстро. Они проблему решат, но ждать ответа можно от пары дней до пары недель. В одном случае, например, ожидание составило 10 дней. Так что, если у вас не горит, просто пишите и ждите. Это надёжнее всего.</p><h2>Оплата аккаунта: без карты заплатить реально</h2><p>Казалось бы, мелочь — оплатить аккаунт. Но и тут есть свои подводные камни, особенно если вы из России или Беларуси. Готовьте сразу несколько вариантов оплаты и искать новые решения, если текущие не подойдут.</p><h3>Для App Store: Забудьте про карты. Только мобильный счет</h3><p>В интернете ходят слухи, что оплатить новый аккаунт в App Store из России невозможно, мол, можно только продлевать старые. Это не так. Оплатить можно, но не картой. Рабочий метод — через мобильный счет.</p><p>Подойдут операторы МТС или Билайн. Вам нужно сразу привязать номер телефона как способ оплаты. Платите только через приложение Apple Developer на телефоне, не через браузер. Попытки привязать заграничную банковскую карту для оплаты из России обречены на провал и выдадут ошибку. Просто не тратьте время.</p><h3>Для Google Play: Здесь без иностранной карты никак</h3><p>С Google ситуация сложнее. Учтите, что карты российских банков Google Play не принимает. Нужна именная иностранная карта. Предоплаченные (неименные) карты не подойдут. В идеале, карта должна быть с биометрической аутентификацией 3DS. Ищите компании, которые помогут вам получить иностранные карты. Такие компании легко находятся через поиск.</p><h2>Если вы компания: Получаем DUNS-номер</h2><p>DUNS-номер — это международный идентификатор вашей организации, своего рода цифровой паспорт компании.</p><p><b>Как получить DUNS-номер для Apple App Store</b></p><ol><li>Часто достаточно просто запросить DUNS через сайт Apple прямо при регистрации аккаунта разработчика.</li><li>Номер приходит на электронную почту через пару дней.</li></ol><p><b>Для Google Play и в более сложных случаях</b></p><ol><li>Google Play требует DUNS-номер для регистрации корпоративного аккаунта.</li><li>Официально его можно получить на сайте Dun &amp; Bradstreet (<a href="https://www.dnb.com">dnb.com</a>), подав онлайн-заявку, это бесплатно.</li><li>Внимание для России: Сайт<a href="https://www.dnb.com"> dnb.com</a> работает для стран СНГ, но не для России. Решение для России: Используйте российского представителя Dun &amp; Bradstreet —<a href="https://www.dnb.ru"> </a><a href="http://dnb.ru">dnb.ru</a>.</li><li>При заполнении заявки обязательно укажите причину запроса и для какого магазина вы публикуете приложение.</li><li>Процесс получения номера через<a href="https://www.dnb.ru"> dnb.ru</a> займёт от пары недель до месяца.</li></ol><p>Для Google Play Store необходимо указать следующий текст: Получение D-U-N-S® номера для официальной регистрации нашей компании в целях разработки и публикации мобильных приложений в магазине Google Play Store.</p><p><b>Ключевой момент для Google Play из России/Беларуси (особенно с 2025 года). </b>Начиная с 2025 года, для полноценной работы с Google Play и получения дохода от монетизации вам потребуется учетная запись, не связанная с РФ и РБ. Это означает, что для сохранения возможности монетизации и работы от юрлица, вам, скорее всего, придется открывать юридическое лицо за рубежом. Соответственно, и DUNS-номер должен быть для этой зарубежной компании.</p><h2>Тестирование: не формальность, а требование</h2><p>После всех бюрократических процедур приходит время проверить приложение. В разных сторах к этому свои подходы.</p><h3>Для App Store: без обязательного тестирования</h3><p>Apple не требует обязательного периода тестирования перед публикацией. Модерация вашего приложения обычно занимает от нескольких часов до недели.</p><h3>Для Google Play: обязательно и строго</h3><p>Здесь без вариантов: Google Play ввел обязательное 14-дневное тестирование для новых приложений. В этом тестировании должны участвовать не менее 20 пользователей. Тестировщикам нужно заходить в приложение каждый день в течение всего двухнедельного периода. Необязательно проводить глубокое функциональное тестирование; часто достаточно пройтись по вкладкам, чтобы засчитать вход.</p><p>Где найти тестировщиков: не переживайте, если у вашей компании нет 20 свободных тестировщиков. В Telegram есть специальные группы, где разработчики бесплатно помогают друг другу, тестируя приложения, например, можно заглянуть в этот <a href="https://t.me/testimgoogleplay">чат для тестировщиков Google Play</a>. Для ускорения процесса существуют платные сервисы по поиску тестировщиков.</p><h2>Осторожно: санкции, или как не попасть в черный список</h2><p>Даже косвенная связь с подсанкционными компаниями может серьезно затянуть или вообще заблокировать публикацию вашего приложения. Например, если ваше приложение — финансовый маркетплейс, а в нём есть продукты подсанкционных банков, будьте готовы к проблемам.</p><p>Особый, критически важный момент: если в переписке с поддержкой сторов (Apple или Google) хоть раз прозвучало слово «санкции», или отказ в размещении был мотивирован «санкционным законодательством США», то, скорее всего, убедить их, что вы сами не под санкциями, уже не получится. Менеджеры сторов предельно осторожны. При малейшем подозрении на такие связи они могут долго и придирчиво уточнять все детали, но в конечном счете всё равно вернутся к отписке о санкциях.</p><p>Если «санкции» прозвучали в диалоге хоть раз, проще начать коммуникацию заново с другого аккаунта, чем пытаться донести все тонкости и объяснить ситуацию.</p><h2>Финальная проверка: чек-лист перед публикацией</h2><p>Теперь ваша задача — убедиться, что вы не допустили банальных ошибок, из-за которых приложение может зависнуть на модерации или получить отказ. Это ваш финальный чек-лист.</p><h3>Скриншоты — одно из самых главных</h3><p>Если на скриншотах нарисованы силуэты смартфонов, убедитесь, что они соответствуют продукту компании. Для Apple это значит, что на скриншотах должен быть силуэт iPhone с характерной «челкой» или динамическим островом. На скриншотах для Apple строго должны использоваться иконки, применяемые на этой платформе, один в один.</p><h3>Ссылки — ваш пропуск к ревью</h3><p>Убедитесь, что ссылки на «Политику конфиденциальности» и «URL техподдержки», которые вы указываете, доступны на момент прохождения ревью. Если они окажутся недоступными, ревью отклонят. Google автоматически проверяет доступность этих ссылок и после публикации. Если они вдруг станут недоступны, вы получите предупреждение со сроком устранения проблемы.</p><h3>Тестовый аккаунт для модераторов: must-have!</h3><p>Если ваше приложение имеет форму авторизации, вы обязаны предоставить магазину аккаунт для проведения тестирования. Доступ с этого аккаунта должен быть гарантирован ко всем разделам и функциям приложения. Если модераторы обнаружат, что к каким-то разделам нет доступа, ревью будет отклонено.</p><h3>Функционал удаления аккаунта: не забудьте об этом!</h3><p>Если ваше приложение подразумевает создание аккаунта, то в нём должна быть и функция его удаления. Apple очень строго относится к этому: при отсутствии механики удаления аккаунта поддержка может задать множество вопросов и в конечном итоге выдаст отказ.</p><h3>Сбор личных данных: Только по необходимости</h3><p>Внимательно изучите ваш процесс регистрации аккаунта для пользователя. Убедитесь, что все запрашиваемые данные действительно необходимы для работы приложения, и вы не спрашиваете ничего лишнего.</p><p>Apple и Google строго относятся к сбору личных данных. Обширные формы регистрации вызывают вопросы на стадии ревью: зачем нужна та или иная информация? Например, в одном случае был отказ за запрос пола пользователя, и даже после текстового обоснования пришлось добавить третий вариант — «не указан».</p><h3>Запросы разрешений: будьте максимально прозрачны</h3><p>Тщательно вычитайте тексты запросов разрешений. Если ваше приложение, например, использует геолокацию, текст запроса должен в полной мере раскрывать, как и для каких функций приложения это разрешение требуется.</p><p>Apple очень ревностно относятся к навязчивым напоминаниям пользователю о необходимости выдать разрешение после его отказа. Такие уведомления также приводят к отклонению ревью.</p><h2>Как быть с монетизацией в Google Play (для россиян и белорусов)</h2><p>С 2024 года монетизация Google Play недоступна для разработчиков из России и Беларуси. С декабря 2024 года выплаты полностью отключены, последние были 15 января. Начиная с 2025 года, единственный вариант полноценной работы — учетная запись, не связанная с РФ и РБ.</p><p>Единственное рабочее решение — для полноценной работы с Google Play и получения дохода, вам потребуется учетная запись и, соответственно, юридическое лицо, открытое за рубежом.</p><p>Для публикации приложения в сторах в 2025 году, особенно в условиях ограничений, запаситесь терпением и проверяйте все детали. Но, как видите, все проблемы решаемы, если знать, куда смотреть и к чему готовиться. Надеемся, этот роадмап поможет вам избежать сюрпризов и сократит ваш time-to-market. Удачи!</p><p>Своим опытом вы всегда можете поделиться в комментах.</p>]]></content:encoded>
    </item>
    <item>
      <title>Безопасное исполнение ненадёжного кода</title>
      <link>https://tproger.ru/articles/bezopasnoe-ispolnenie-nenadyozhnogo-koda</link>
      <comments>https://tproger.ru/articles/bezopasnoe-ispolnenie-nenadyozhnogo-koda?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Межов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bezopasnoe-ispolnenie-nenadyozhnogo-koda</guid>
      <description><![CDATA[<p>Методы безопасного исполнения ненадёжного кода. Рассматриваются уровни изоляции кода, методы ограничения ресурсов процесса, проблемы жёсткого лимитирования и подходы к их решению. Обсуждаются вопросы управления песочницами, а также использование инструментов контейнеризации.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bezopasnoe-ispolnenie-nenadyozhnogo-koda">Безопасное исполнение ненадёжного кода</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Песочница]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 06 Jul 2025 09:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мы привыкли к тому, что ведем разработку, используя лучшие инженерные практики, включая настройку CI/CD-конвейера. Сначала код проходит многоэтапные стадии проверки и тестирования, а только потом попадает в production-среду.</p><p>Давайте представим ситуацию, что нужно запустить код, минуя все эти стадии. Прям в production-среде. На первый взгляд — бред! Но если подумать, то на самом деле, не такая уж редкость. Например, некоторые системы предоставляют своим пользователям возможность расширять функциональность за счет прикладных скриптов. Наш любимый CI/CD-конвейер зачастую построен на пользовательских скриптах.</p><p>С одной стороны, для большинства подобная постановка вопроса — крайность. С другой, появляется возможность рассмотреть проблему с разных ракурсов. Уверен, что какие-то части общего решения, о котором пойдёт речь далее, могут быть использованы повторно и в других проектах.</p><p>Предлагаю по частям разобрать проблему безопасного исполнения ненадёжного кода. Последовательно рассмотрим вопросы, ответы на которые поворотные в выборе целевой архитектуры. Большая часть статьи касается разработки, но в конце сделаны важные акценты относительно администрирования и развертывания.</p><h2>Ненадёжный код</h2><p>Для начала определимся, что же считать ненадёжным кодом? На самом деле ответ зависит от решаемой задачи, правил и процессов, принятых в компании:</p><ul><li>Код, который не прошел CI, review и т.п.</li><li>Код из ненадёжного или неизвестного источника.</li><li>Закрытый (проприетарный) код.</li><li>Код, содержащий уязвимости.</li><li>Код, использующий запрещенные функции.</li><li>Любой код, который написал коллега:)</li></ul><p>Чтобы отделять код разрабатываемого приложения от ненадёжного, первый буду называть кодом приложения, а второй — <i>ненадёжным</i> или <i>внешним кодом</i>. Необходимость запуска ненадёжного кода в некоторых случаях буду называть <i>задачей</i>.</p><h2>Уровни изоляции кода</h2><p>Можно выделить три варианта запуска внешнего кода — три уровня изоляции. Каждый следующий увеличивает дистанцию между кодом приложения и запускаемым кодом. Чем выше уровень изоляции, тем меньше вероятность, что запускаемый код нанесет вред приложению и системе.</p><h3>Уровень 1: тот же процесс</h3><p>Запуск внешнего кода в адресном пространстве процесса приложения.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/191fd454-6837-4e91-abbf-c6d4a1fb6121.png" alt="Запуск внешнего кода в адресном пространстве процесса приложения." /><figcaption>Запуск внешнего кода в адресном пространстве процесса приложения.</figcaption></figure><p>Такой способ определяет самый слабый уровень изоляции, поскольку запущенный код теоретически имеет доступ ко всему тому, к чему имеет доступ код самого приложения.</p><p>Примером может служить использование интерпретаторов скриптов (<a href="https://github.com/mozilla/rhino">Rhino</a>, <a href="https://github.com/IronLanguages/ironpython3">IronPython</a>, <a href="https://github.com/jython/jython">Jython</a> и т.п.), визуальных языков программирования (workflow-движков) или подключение модулей расширения (плагинов).</p><p>Способов защиты на этом уровне не так много. Пожалуй, самым эффективным выступает (self-sandboxing), при котором приложение делает самозапрет на доступ к некоторым ресурсам системы. Например, сразу после инициализации — самозапрет на доступ к файловой системе.</p><p>Дополнительно запускаемый код можно подвергать строгому (синтаксическому) анализу, запрещая использование определенных функций, модулей, пакетов и т.п. Некоторые интерпретаторы имеют точки расширения, которые позволяют контролировать процесс исполнения. Если такой возможности нет, можно воспользоваться одной из техник самоизоляции — <a href="https://www.kernel.org/doc/html/latest/userspace-api/seccomp_filter.html">фильтрацией системных вызовов</a>.</p><p>Что же касается плагинов, то они призваны расширять возможности приложения, поэтому их использование изначально не предполагает сильной изоляции. Здесь можно предложить усилить контроль взаимодействия на уровне контракта (API). В идеале — если плагины будут публиковаться в некоторый центральный репозиторий, которому вы доверяете и который может производить дополнительные проверки и тестирование до этапа запуска кода плагина.</p><h3>Уровень 2: отдельный процесс</h3><p>Запуск внешнего кода на той же машине, но в отдельном процессе ОС.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/e0bf62de-65a9-4370-9986-ed21c6e63b8e.png" alt="Запуск внешнего кода на той же машине, но в отдельном процессе ОС." /><figcaption>Запуск внешнего кода на той же машине, но в отдельном процессе ОС.</figcaption></figure><p>Поскольку и приложение, и внешний код взаимодействуют в рамках одного узла, используя локальные ресурсы ОС (оперативная память, файловая система и т.п.), скорость межпроцессного взаимодействия очень высокая.</p><p>Этот уровень изоляции предполагает использование широкого арсенала возможностей. Как минимум, внешний код может быть запущен от имени менее привилегированного пользователя, с ограниченным доступом к ресурсам ОС. Сильные способы изоляции ограничивают ресурсы с помощью средств ОС или инструментов контейнеризации. Однако, чем сильнее контроль, тем больше накладных расходов на запуск и исполнение процесса, что при решении некоторых задач неприемлемо дорого или неоправданно сложно.</p><h3>Уровень 3: отдельная машина</h3><p>Запуск внешнего кода на отдельной машине — песочнице.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/5e48bc50-75c9-4789-9dc7-3bbf2c1659a7.png" alt="Запуск внешнего кода на отдельной машине — песочнице." /><figcaption>Запуск внешнего кода на отдельной машине — песочнице.</figcaption></figure><p>Это максимальный уровень изоляции из всех возможных. Здесь появляется возможность ограничить ресурсы самой песочницы (CPU, память, дисковое пространство, доступ к сети и т.п.). Если в результате исполнения внешнего кода песочница выйдет из строя, приложение продолжит свою работу.</p><p>Самый главный недостаток этого подхода — необходимость сетевого взаимодействия между узлом, на котором работает приложение, и песочницей. Передача входных данных в песочницу, запуск процесса внутри, ожидание окончания его исполнения, получение выходных данных — всё это сетевые обращения. Так существенно замедляется процесс исполнения, а само взаимодействие подвержено сетевым сбоям, что ведёт к нестабильности системы и получаемых результатов.</p><h2>Использование песочницы</h2><p>Предположим, требуется максимальный уровень изоляции ненадёжного кода, следовательно, нужно остановиться на варианте запуска на отдельной машине. Если так, то для принятия последующих архитектурных решений нужно ответить на следующую пару вопросов.</p><h3>Пересоздание или переиспользование песочницы</h3><p>Песочницу требуется пересоздавать перед исполнением каждой задачи, если требуется особенное окружение (например, определенная версия ОС, пакетов или ресурсов) или идентичность этого окружения (для стабильности получаемых результатов). Схожие вопросы возникают, например, при интеграционном тестировании: каждому тесту нужны свои предустановки.</p><p>Переиспользование песочницы становится возможным, если задачи могут исполняться в одном окружении и не оказывают влияния друг на друга (предыдущая задача не портит результаты последующей). Продолжая аналогию с интеграционным тестированием: всем тестам нужны одинаковые предустановки, и тесты могут запускаться повторно на одном стенде, демонстрируя один и тот же результат.</p><p>Основным преимуществом пересоздания песочницы выступает стабильность получаемых результатов. К недостаткам относится медленный запуск и перерасход ресурсов. На пересоздание песочницы уходят десятки секунд или даже минут, следовательно, большая часть ресурсов будет тратиться именно на это. Существует множество техник ускорения пересоздания, благодаря которым можно сократить время запуска. Прежде всего, сюда можно отнести backup/restore (snapshot песочницы, базы данных и т.п.). Также если поток задач небольшой и ресурсы позволяют, можно попробовать организовать пул песочниц и создавать их заранее.</p><p>Ставка на переиспользование делается в случае, когда поток задач большой и нужно сократить время ожидания их запуска. При этом возрастает вероятность получения нестабильных результатов и, возможно, требуется производить какую-то очистку окружения до или после исполнения очередной задачи.</p><h3>Последовательное или параллельное исполнение</h3><p>Теперь осталось ответить на вопрос, как именно можно или нужно исполнять задачи: последовательно или параллельно. Последовательное исполнение требуется в следующих случаях:</p><ul><li>важен порядок следования и исполнения задач;</li><li>задачам нужен эксклюзивный доступ к определенному ресурсу;</li><li>задачи ёмкие и их совместное исполнение вызовет нехватку ресурсов;</li><li>задачи могут мешать исполнению друг друга из-за борьбы за ресурсы.</li></ul><p>Например, шаги установки и настройки ПО; шаги CI/CD-конвейера; рендеринг изображения на GPU; интенсивные вычисления. Все эти задачи, скорее всего, придётся исполнять <b>последовательно</b>.</p><p>В остальных случаях допустимо <b>параллельное исполнение</b>. Яркой аналогией может служить одна из лучших практик в тестировании: тесты не должны оказывать влияние друг на друга, а порядок их запуска не должен иметь значения.</p><p>Последовательное исполнение обеспечивает стабильность получаемых результатов, однако приводит к низкой пропускной способности и дороговизне масштабирования (песочница обходится дороже процесса ОС). Параллельное исполнение, напротив, увеличивает пропускную способность системы и улучшает утилизацию ресурсов песочницы, но одновременно повышает вероятность нестабильных результатов. Более того, при параллельном исполнении появляется шанс перегрузить песочницу или вывести её из строя таким образом, что приведет к увеличению времени исполнения всех запущенных задач или потере результатов их работы.</p><p>На практике было замечено, что при параллельном исполнении, несмотря на увеличенную общую пропускную способность, время исполнения каждой отдельной задачи увеличивается. Если уровень параллелизма становится больше числа CPU-ядер, время исполнения начинает деградировать намного сильней.</p><h2>Управление песочницами</h2><p>Допустим, переиспользование песочниц возможно. В таком случае необходимо определить способ управления ими. Можно выделить два подхода, основанные на принципах микросервисной архитектуры, но адаптированные к специфике рассматриваемой проблемы.</p><h3>Оркестрация</h3><p>Оркестрация предполагает, что приложение совмещает две роли: оркестратор исполнения и оператор песочниц. Оркестратор координирует процесс исполнения кода: выбор подходящей песочницы, загрузка в неё входных данных, запуск удалённого процесса, получение результатов его работы и т.п. Оператор, в свою очередь, отслеживает доступные песочницы и их состояние.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/93758cab-2542-4a80-b47a-d65b04ef4f14.png" alt="Оркестрация песочниц." /><figcaption>Оркестрация песочниц.</figcaption></figure><p>Основное преимущество оркестрации в контексте решаемой проблемы — её простота и ясность. Код легко читается и сосредоточен в одном месте. Однако у этого решения есть и недостатки. Рассмотрим их в порядке от простого к сложному.</p><ul><li><i>Синхронное взаимодействие.</i> Так или иначе, для результата приложение вынуждено ожидать окончания исполнения задачи. Для продуктивного использования ресурсов приходится прибегать к техникам асинхронного программирования: пока задача исполняется, приложение будет занято полезной работой. Это малозаметный недостаток в языках со встроенной поддержкой концепции асинхронного программирования. Для упрощения работы с асинхронным кодом в Java я создал небольшую вспомогательную библиотеку <a href="https://github.com/AlexMAS/asynchronizer">asynchronizer</a>, снабдив её подробной <a href="https://github.com/AlexMAS/asynchronizer/blob/main/docs/README.ru.md">документацией</a>.</li></ul><ul><li><i>Отслеживание доступности песочниц.</i> Поскольку хотелось бы, чтобы количество песочниц менялось в зависимости от нагрузки на систему, придётся отслеживать их доступность. Это прямая обязанность оператора песочниц, которую можно выделить в отдельный discovery-сервис (например, на базе <a href="https://github.com/spring-cloud/spring-cloud-netflix">Netflix Eureka</a>), либо реализовать как часть приложения с использованием инфраструктурных механизмов (например, <a href="https://github.com/fabric8io/kubernetes-client">Kubernetes API</a>). Важно отметить, что оператор песочниц не имеет отношения к бизнес-логике приложения.</li></ul><ul><li><i>Отслеживание загруженности песочниц.</i> Оркестратор исполнения должен выбрать подходящую <a href="https://samwho.dev/load-balancing/">стратегию балансировки</a>, основанную на состоянии песочниц, предоставляемых оператором. На практике наилучшую эффективность демонстрирует алгоритм Least connections, с помощью которого можно выбирать наименее загруженные песочницы. Для этого достаточно вести учёт количества задач, исполняемых каждой песочницей. Конечно, это не серебряная пуля, а лишь частное наблюдение, поэтому в идеале нужно предусмотреть несколько стратегий балансировки и выбрать наилучшую по результатам нагрузочного тестирования.</li></ul><ul><li><i>Неопределённость результата, если нет ответа от песочницы.</i> Песочница может быть недоступна по различным причинам, включая не только проблемы с сетью, но и падения песочницы из-за ненадёжного кода. К сожалению, в общем случае эта проблема не имеет решения, так как делать повторные запуски (retries) может быть опасно. Всё, что остаётся, это использовать таймауты и откладывать неуспешную задачу на потом.</li></ul><p>Ещё один существенный минус, который стоит упомянуть, это возможный побочный эффект, возникающий при масштабировании системы и проявляющийся в виде перегрузки песочниц. Для наглядности рассмотрим конкретный пример.</p><p>Для отслеживания нагрузки на песочницы экземпляр приложения ориентируется на количество задач в каждой из доступных песочниц. Предположим, что было принято решение увеличить количество экземпляров приложения. Этот экземпляр исполняет 5 задач в двух песочницах (3 процесса в одной и 2 в другой). Известно, что каждая песочница может вынести максимум 4 параллельных задачи.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/623f7e7c-71d0-41da-8681-731ef43d3716.png" alt="Экземпляр исполняет 5 задач в двух песочницах (3 процесса в одной и 2 в другой)." /><figcaption>Экземпляр исполняет 5 задач в двух песочницах (3 процесса в одной и 2 в другой).</figcaption></figure><p>Добавив новый экземпляр приложения, неизвестно, сколько задач исполняет каждая песочница. Такая ситуация может произойти по разным причинам.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/7131d310-7c0d-44b8-b031-055436bd64d8.png" alt="Новый экземпляр приложения не знает, сколько задач исполняет каждая песочница." /><figcaption>Новый экземпляр приложения не знает, сколько задач исполняет каждая песочница.</figcaption></figure><p>Вполне очевидно, что новый экземпляр приложения направит очередную задачу в первую попавшуюся песочницу, чем может спровоцировать её перегрузку. В итоге результат исполнения будет испорчен или потерян из-за падения песочницы.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/c65090e5-020f-4eff-826b-566d3dc6da5c.png" alt="Очередная задача направляется в первую песочницу и провоцирует её перегрузку." /><figcaption>Очередная задача направляется в первую песочницу и провоцирует её перегрузку.</figcaption></figure><p>В качестве решения можно предложить два способа, каждый из которых уменьшает вероятность возникновения перегрузок, но не избавляет от них.</p><ul><li><i>Для контроля количества исполняемых задач в песочнице использовать распределённый счётчик</i> (например, на базе Redis). Проблема в том, что распределённый счётчик имеет латентность и на момент запуска задач может выдать устаревшее значение. Кроме того, в системе появляется еще один инфраструктурный компонент, который не несёт бизнес-пользы.</li></ul><ul><li><i>Выделить каждому экземпляру приложения эксклюзивное подмножество песочниц.</i> Подобное решение существенно усложнит deployment-скрипты и процесс масштабирования, а также снизит степень утилизации выделенных ресурсов, ведь нет никаких гарантий того, что экземпляр приложения сможет хорошо нагрузить все выделенные ему песочницы.</li></ul><p>Кстати, после доклада на TechLeadConf 2025 мне задали интересный вопрос: <i>Можно ли при балансировке нагрузки на песочницы учитывать не только количество исполняемых задач, но и процент загрузки CPU, памяти и прочих ресурсов? </i>Если у кого-то возник такой же вопрос, то отвечу, что это не имеет смысла, поскольку ситуация в песочнице может поменяться мгновенно. Полученный практический опыт и нагрузочное тестирование показали, что простой подсчёт задач работает эффективно.</p><h3>Самоорганизация</h3><p>В микросервисной архитектуре подобный подход принято называть хореографией, однако чтобы не возникало неправильных ассоциаций, предлагаю использовать термин <i>самоорганизация</i>.</p><p>Ключевой момент в архитектуре — это появление двух очередей: очередь задач на исполнение (Task Queue) и очередь результата их исполнения (Result Queue). Все поступающие задачи приложение направляет в первую очередь, а результаты — во вторую. Дополнительно появляется роль агента — микросервиса, который исполняется в рамках узла песочницы и координирует исполнение поступающих задач.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/0d449846-e767-49bd-bd50-d1c77c49cf10.png" alt="Самоорганизация песочниц." /><figcaption>Самоорганизация песочниц.</figcaption></figure><p>Основной недостаток самоорганизации — распределённый процесс обработки задач. Учитывая простоту алгоритма обработки, это не так существенно. Стоит отметить преимущества этой архитектуры.</p><ul><li><i>Максимальная изоляция ненадёжного кода.</i> Ненадёжный код, как и в случае с оркестрацией, по-прежнему работает в песочнице в рамках отдельного процесса ОС.</li></ul><ul><li><i>Скорость и стабильность взаимодействия.</i> Никаких проблем с сетью  из-за локальности взаимодействия между агентом и песочницей.</li></ul><ul><li><i>Контролируемая нагрузка на песочницы.</i> Агент, выступая в роли консюмера очереди задач, может точно контролировать степень параллелизма и выбирать новые задачи только тогда, когда он закончил обрабатывать предыдущие.</li></ul><ul><li><i>Минимум инфраструктурного кода.</i> Очереди избавляют от необходимости иметь оператор песочниц, отслеживать их состояние и осуществлять балансировку нагрузки.</li></ul><ul><li><i>Простота масштабирования.</i> Приложение и песочницы масштабируются независимо друг от друга без негативных побочных эффектов.</li></ul><h2>Запуск процесса ОС</h2><p>К запуску процесса ОС, в рамках которого будет исполняться ненадёжный код, нужно подойти с особой осторожностью. Здесь важно ответить как минимум на три вопроса.</p><ul><li><i>Как ограничить права доступа к ресурсам.</i> Самое простое решение — запуск процесса от имени пользователя с ограниченными правами (на доступ к ресурсам ОС).</li></ul><ul><li><i>Как ограничить объем используемых ресурсов.</i> Для запускаемого процесса нужно определить доступные ресурсы и возможные действия.</li></ul><ul><li><i>Как осуществлять анализ поведения и результатов исполнения.</i> Наличие и решение этой проблемы целиком и полностью зависит от специфики проекта. Здесь невозможно предложить универсального решения.</li></ul><p>Рассмотрим варианты ограничения ресурсов процесса ОС.</p><h3>Ограничение ресурсов процесса</h3><p>Ресурсы процесса могут быть ограничены на трех уровнях:</p><ul><li><i>Лимиты узла.</i> Физические ограничения машины, на которой исполняется процесс. В частном случае можно говорить об инфраструктурных лимитах, определённых для Docker/Kubernetes контейнера.</li></ul><ul><li><i>Лимиты контейнера.</i> Программные лимиты, задаваемые выбранным инструментом контейнеризации (cgroup, Docker, <a href="https://dzen.ru/a/Z8sdaQvf5w96SRes">Bubblewrap</a>, <a href="https://github.com/AlexMAS/ProcessSandbox">ProcessSandbox</a> и т.п.).</li></ul><ul><li><i>Лимиты процесса.</i> Программные лимиты, задаваемые средствами ОС. На этом уровне можно осуществлять гибкую настройку вариантов запуска и исполнения.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/d11a1ee8-1780-4ca6-b826-a09d4d95ed0d.png" alt="Уровни лимитирования ресурсов процесса." /><figcaption>Уровни лимитирования ресурсов процесса.</figcaption></figure><p>Можно использовать все три уровня лимитирования, либо какой-то определенный.</p><p>Между тем, важно отметить некоторые трудности, которые могут возникнуть при использовании инструментов контейнеризации.</p><p>Например, для использования cgroup или Docker внутри Kubernetes-контейнера нужно эскалировать привилегии контейнера, что в общем случае небезопасно в контексте исполнения ненадёжного кода. Более того, практика показала, что легковесных rootless-средств, предоставляемых ОС, вполне достаточно, чтобы снять большую часть рисков. В частности, Linux API позволяет не только лимитировать CPU и память, но и блокировать доступ к некоторым возможностям самой ОС. Например, можно наложить фильтр, который запретит вызов определённых системных функций.</p><h3>Проблемы жёсткого лимитирования</h3><p>Рассмотренные выше способы лимитирования задают жёсткие границы (hard limit), нарушение которых замедляет исполнение процесса, либо приводит к его принудительному завершению. При этом поведение наблюдаемого процесса и системы сильно варьируется в зависимости от того, какой лимит был превышен. Например, превышение по использованию CPU может привести к троттлингу (throttling), приостановке работы или принудительному завершению; превышение по использованию памяти заканчивается принудительным завершением со стороны ОС (OOM Killer) либо самостоятельным падением процесса (с ошибкой Out Of Memory).</p><p>Подобная вариативность осложняет <i>анализ поведения и результатов исполнения.</i> В этом случае можно использовать подход с программной мягкой границей (watchdog limit). Суть заключается в запуске дополнительного следящего потока (или процесса) ОС, который контролирует поведение и расход ресурсов у наблюдаемого. Как только детектируется превышение одного из лимитов, производится принудительное завершение наблюдаемого процесса, но уже не со стороны ОС, а со стороны приложения.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/e38eb138-04f3-439f-89b5-9b810f112a69.png" alt="Программная мягкая граница (watchdog limit)." /><figcaption>Программная мягкая граница (watchdog limit).</figcaption></figure><p>Такой подход имеет несколько преимуществ.</p><ul><li><i>Точное определение причин принудительного завершения.</i> Жёсткие лимиты чуть выше мягких, благодаря чему для исполняемого кода создаётся иллюзия отсутствия каких-либо лимитов. Между тем, если лимиты всё-таки нарушаются, процесс всё равно будет завершен (либо со стороны приложения, либо гарантированно со стороны ОС). Но подобный дополнительный контроль со стороны приложения оставляет для него гораздо больше шансов понять причину принудительного завершения наблюдаемого процесса.</li></ul><ul><li><i>Возможность гибкого лимитирования ресурсов.</i> Приложение (или агент), ответственное за запуск наблюдаемого процесса, может обратиться к средствам ОС (в частности, к Linux API) и гибко настроить параметры запуска и исполнения. Как минимум, жёстко определить лимиты по CPU и памяти; наложить ограничения на объем I/O; создать запрет на вызов некоторых системных функций (например, запрет использования сетевых операций или файловой системы) и т.п.</li></ul><p>Такой подход я назвал watchdog и в целях иллюстрации реализовал его в виде .NET-библиотеки <a href="https://github.com/AlexMAS/ProcessSandbox">ProcessSandbox</a>. Помимо прочего, на странице проекта подробно рассмотрена проблематика контроля и анализа поведения процесса ОС со стороны прикладного кода.</p><p>Итоговая схема лимитирования может выглядеть так, как показано на рисунке ниже. Вместо тяжеловесных инструментов контейнеризации используется легковесный rootless-инструмент (watchdog) на базе средств ОС и только.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/2c5e74e4-125b-467d-8b27-30b005364523.png" alt="Лимитирование ресурсов процесса с помощью watchdog." /><figcaption>Лимитирование ресурсов процесса с помощью watchdog.</figcaption></figure><p>Для задач, где не нужен анализ поведения процесса и тонкая настройка лимитов, можно воспользоваться готовым инструментом — утилитой.</p><h2>Многоконтейнерные поды</h2><p>Зная, что контейнеры одного Kubernetes-пода работают на одном и том же узле, можно попытаться решить проблему нестабильности сетевого взаимодействия приложения и песочницы, разместив их контейнеры в одном поде.</p><figure><img src="https://media.tproger.ru/user-uploads/115455/2025-06-18/62400b6a-9c5b-4285-bff8-b0adb5ac8868.png" alt="Размещение контейнера приложения и песочницы в одном Kubernetes-поде." /><figcaption>Размещение контейнера приложения и песочницы в одном Kubernetes-поде.</figcaption></figure><p>Несмотря на всю заманчивость данной идеи, она несёт ряд недостатков.</p><ul><li><i>Плохая масштабируемость.</i> Соотношение приложение-песочница всегда один к одному. Однако не исключено, что в некоторых случаях это вполне приемлемо.</li></ul><ul><li><i>Плохая утилизация ресурсов.</i> Сможет ли приложение достаточно нагрузить песочницу, если количество песочниц будет в избытке; и наоборот, нужно ли столько же экземпляров приложения, сколько и песочниц.</li></ul><ul><li><i>Возможность перегрузки песочницы.</i> В распоряжении экземпляра приложения только одна песочница, которая может не справиться с потоком задач, обрабатываемых приложением.</li></ul><ul><li><i>Риск нарушить работоспособность приложения.</i> Выход песочницы из строя скорее всего приведет к перезапуску всего пода. Более того, если приложение и песочница обмениваются файлами через общий раздел (<a href="https://kubernetes.io/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/">shared volume</a>), это может стать уязвимым местом.</li></ul><h2>Образ для песочницы</h2><p>Основные моменты, которые следует учесть при создании (Docker) образов песочниц:</p><ul><li><i>Заменить init-процесс</i> на <a href="https://github.com/krallin/tini">tini</a>, чтобы не превысить лимит по PIDs.</li></ul><ul><li><i>Создать непривилегированного пользователя,</i> ограничив ему права на доступ к ресурсам.</li></ul><ul><li><i>Регулярно сканировать версии образов</i> и пакетов на наличие уязвимостей.</li></ul><h2>Инфраструктура исполнения</h2><p>Основные моменты, которые следует учесть при настройке инфраструктуры исполнения:</p><ul><li><i>Обеспечить быстрый (пере)запуск песочниц.</i> Нужно быть готовым к тому, что песочницы будут падать. Если речь идет о Kubernetes, то улучшить время запуска может подходящая настройка <a href="https://kubernetes.io/docs/concepts/containers/images/">Image Pull Policy</a>. При этом лучше не использовать тег `latest`, а указывать конкретную версию или хэш-код образа, чтобы не тратить время на попытки определения последней версии при каждом запуске.</li></ul><ul><li><i>Установить приемлемый <a href="https://kubernetes.io/docs/concepts/policy/pid-limiting/">лимит на PIDs</a>.</i> Необходимо контролировать число активных процессов в системе. Особо вредоносный код может попытаться создать очень много дочерних процессов, поэтому при отсутствии лимита на PIDs узел быстро будет выведен из строя. Важно отметить, что лимит задаётся для пользователя, а не для запускаемого процесса. По этой причине он должен быть разумно большим.</li></ul><ul><li><i>Установить <a href="https://kubernetes.io/docs/concepts/policy/resource-quotas/">лимиты на ресурсы узла</a>.</i> В Kubernetes для каждого контейнера нужно указать, как минимум, лимиты по CPU и памяти. Значения лимитов лучше всего определить в ходе нагрузочного тестирования или путём сбора метрик приложения.</li></ul><h2>Заключение</h2><p>Как можно заметить, задача исполнения ненадёжного кода всегда решается в комплексе, начиная с анализа, продолжая разработкой и заканчивая вопросами уровня DevOps. Думаю, что многие техники и инструменты применимы и к коду самого приложения.</p><p>Я постарался показать последовательность шагов по направлению к целевой архитектуре, которая будет отвечать требованиям бизнеса и справляться с ненадёжным кодом. <i>Если вам интересна данная тематика, подписывайтесь на мой Telegram-канал Архитектоника в ИТ (@arch_and_dev). Буду рад поделиться опытом. </i></p>]]></content:encoded>
    </item>
    <item>
      <title>Дизайн интуитивного интерфейса: как простота и удобство повышают лояльность клиентов</title>
      <link>https://tproger.ru/articles/dizajn-intuitivnogo-interfejsa--kak-prostota-i-udobstvo-povywayut-loyalnost-klientov</link>
      <comments>https://tproger.ru/articles/dizajn-intuitivnogo-interfejsa--kak-prostota-i-udobstvo-povywayut-loyalnost-klientov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Маргарита Савченко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/dizajn-intuitivnogo-interfejsa--kak-prostota-i-udobstvo-povywayut-loyalnost-klientov</guid>
      <description><![CDATA[<p>Продуктовый дизайнер клиентских приложений Flowwow расскажет, как минимизировать пользовательский путь, создавать понятные интерфейсы и балансировать между функциональностью и эстетикой в фичах</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/dizajn-intuitivnogo-interfejsa--kak-prostota-i-udobstvo-povywayut-loyalnost-klientov">Дизайн интуитивного интерфейса: как простота и удобство повышают лояльность клиентов</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 30 Jun 2025 16:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Я Маргарита Савченко, продуктовый дизайнер клиентских приложений маркетплейса Flowwow. Сегодня поговорим о том, какие принципы и инструменты помогают сделать интерфейс интуитивно понятным.</p><p>Ни для кого не секрет, что люди по-разному взаимодействуют с одним и тем же сайтом или приложением. Кто-то сразу находит нужную функцию, а кому-то приходится блуждать по меню часами. Это не случайность, а результат работы команды дизайна над простотой и логикой интерфейса. Создание интуитивного UX начинается не с выбора цвета кнопок, а с анализа целевой аудитории и ее потребностей. Задача дизайнера — сделать взаимодействие с приложением понятным: минимизировать лишние действия и при этом найти баланс между функциональностью и эстетикой продукта. Именно об этом расскажу сегодня в статье.</p><h2>Анализ пользователей — фундамент эффективного интерфейса</h2><p>Понимание того, как мыслит и действует пользователь, — основа для понятного и эффективного интерфейса. Важно знать, на что аудитория обращает внимание, что цепляет ее больше всего, а также как она проходит путь от открытия приложения до совершения покупки. Наша команда использует четыре основных инструмента, чтобы понять все тонкости взаимодействия клиента с продуктом. Перейдем к ним.</p><ul><li><b>Внутренний и командный груминг. </b>Дизайнеры сначала испытывают фичи сами: абстрагируются от реальности и представляют себя на месте пользователя. А потом проводят груминг-встречи, на которых с командой обсуждают идеи и на уровне небольшой фокус-группы проверяют гипотезы.</li><li><b>Коридорное тестирование.</b> В этом случае мы показываем новый интерфейс коллегам и просим дать короткую обратную связь. Важно собирать отзывы в моменте, а не давать время на обдумывание. Цель коридорного исследования — понять, что нравится или отталкивает в продукте в первые минуты пользования.</li><li><b>A/B-тесты.</b> Это довольно дорогой метод, поэтому мы применяем его только для масштабных изменений в функционале. Например, новую категорию «Премиум» с товарами от 20 000 рублей мы вводили обособленно для пользователей из пяти городов, включая Москву, Санкт-Петербург и Екатеринбург, чтобы протестировать фичу на узкой аудитории. Сперва оценили, стали ли люди покупать больше из новой категории, увеличился или упал их средний чек и как изменилось поведение. Только после того, как мы убедились, что функция полезная и помогает пользователям, внедрили ее на всех остальных.</li><li><b>Аналитика поведения пользователей. </b>Для построения CJM (Customer Journey Map) — карты пути клиента можно использовать разные инструменты. Например, «вебвизор» — это бесплатный инструмент, который позволяет «подсмотреть» за действиями человека на сайте. На видеозаписи можно увидеть, на какие страницы пользователь переходит, чему он уделяет больше внимания, а в какой момент он закрывает вкладку. Единственный минус — для мобильных приложений опция недоступна.</li></ul><p>Поэтому мы изучаем поведение пользователя по данным аналитики наших платформ, а именно «навешиваем» события на кнопки, переходы и определенные действия и экраны, которые нам важны. После анализируем собранные данные и делаем выводы, например, сколько людей из тех, кто добавил товар в корзину в итоге совершили покупку. Также мы изучаем отзывы и на основании полученной информации строим CJM. Карта помогает увидеть реальные сценарии взаимодействия, определить узкие места и точки неудобства, а также понять, где пользователи сталкиваются с трудностями или уходят, чтобы затем сделать путь максимально простым и логичным.</p><p>Это не финальный список, для каждого продукта важно находить свои способы аналитики. Во Flowwow мы уделяем особое внимание обратной связи от клиентов. Это связано с особенностью маркетплейсов: люди часто оставляют отзывы на товары и активно общаются со службой поддержки. И иногда в их фидбэке можно найти ценные данные, которые не покажет ни одно исследование.</p><h2>Пользователи знают лучше: как мы работаем с обратной связью</h2><p>Мы внимательно собираем и анализируем обратную связь от клиентов, чтобы сделать продукт удобным и понятным для них. При этом далеко не все комментарии сразу же переходят в работу. Важно помнить, что продукт создается под запрос большинства, а не одного клиента.</p><p>Рассмотрим пример из нашей практики: в прошлом году мы внедряли опцию переключения на самовывоз в приложении в процессе оформления заказа. Фича была создана для случаев, когда клиентам удобнее забрать заказ самостоятельно. Казалось бы, удобный функционал, однако не всем было легко в нем разобраться. Некоторые люди по ошибке нажимали не те кнопки, путались в экранах, в частности, могли отменить и заново повторить заказ. Такое произошло, потому что функционал переключения на самовывоз вводился в сжатые сроки перед пиковым периодом в работе маркетплейса. Поэтому интерфейс новой фичи дорабатывался уже после понимания, что проблема взаимодействия с переключением массовая, а не единичная, как казалось сначала.</p><p>Почти все изменения, даже незначительные, могут потребовать времени на адаптацию пользователя. Некоторые действия выполняются по уже привычному сценарию, у клиентов нет времени вникать в подробности использования приложения. Поэтому даже новый цвет иконки может оттолкнуть, поскольку первое время ее придется долго искать на экране.</p><p>Кроме того, в работе с фидбэком пользователей дизайнеру важно снимать верхние слои эмоций и мыслить рационально. Например, мы не будем менять расположение кнопки или добавлять дополнительный текст, если об этом попросили несколько человек. Прежде всего мы оцениваем, проблема единичная или повторяющаяся. Для этого мы заходим в чаты с клиентами и смотрим, как много людей жалуются на неудобства. Далее приоритизируем задачу. Так, баги, которые влияют на общее впечатление о бренде мы исправляем в первую очередь.</p><p>Мы всегда исходим от рационального вопроса «зачем?». Это помогает понять, что изменение в интерфейсе даст продукту и как оно ускорит путь клиента. Если ответа нет, значит, опция не нужна. Также необходимо сверяться с цифрами. Если мы видим, что неудобное расположение кнопки не просто огорчает пользователей, а снижает покупки, то также повысим приоритет запроса и исправим ошибку.</p><h2>Интуитивно понятный интерфейс: психология и принципы</h2><p>Комфорт и понятность интерфейса зависят не только от визуальных решений, но и от того, как человек воспринимает информацию. На основе психологических закономерностей, в частности, на особенностях восприятия визуальной информации, строится большинство удачных интерфейсов.</p><p>Например, прежде всего дизайнер учитывает культурные особенности аудитории. В русскоязычном пространстве мы привыкли к чтению слева направо, но при адаптации интерфейса для арабских стран потребуется зеркальное отражение всех элементов, так как там принято обратное направление чтения.</p><p>Однако существуют фундаментальные правила, которые работают независимо от культуры:</p><ol><li><a href="https://habr.com/ru/companies/cloud4y/articles/347444/">Принципы гештальта</a> (их около 7), описывающие, как человек группирует и разделяет визуальную информацию, чтобы получить простую для понимания форму. Например, принцип близости: элементы, расположенные рядом, воспринимаются как связанные. Это может быть заголовок и подзаголовок.</li><li><a href="https://ux-journal.ru/teoriya-tsveta-dlya-dizajnerov-chast-1-znachenie-tsveta.html">Цветовые ассоциации</a>: красный — для ошибок, зеленый — для успешных действий.</li></ol><p>Хотя цвет действительно влияет на восприятие, не стоит переоценивать его значение. Фиолетовый может ассоциироваться и с депрессией, и с творчеством — все зависит от контекста. Мы создаем простые и понятные интерфейсы, где каждый элемент служит конкретной цели, а не становится предметом для интерпретации.</p><p>Главное правило нашей команды: дизайн должен быть интуитивным и функциональным, а не требовать от пользователя расшифровки скрытых смыслов.</p><p>Кроме того, внедряя обновления в интерфейс, важно учитывать и скорость восприятия изменений у пользователей. Масштабные изменения могут вызвать негативные эмоции у аудитории, даже если новые фичи удобные и обоснованные.</p><ol><li>Необходимо постепенно внедрять новые элементы. Например, такой опыт постепенных обновлений мы прошли во время масштабного ребрендинга Flowwow. Мы начали с внедрения нового онбординга (последовательности первых экранов), обновили экран загрузки и баннерную сетку. Только после этого заменили основные цвета, шрифты и изображения.</li><li>Важно сохранить удобные для пользователя шрифты. Кажется, что для консистентности в брендинге важно использовать одинаковые шрифты во всех продуктах, но это не всегда так. Важнее учитывать особенности площадки. Поэтому для Android- и iOS-приложений в процессе ребрендинга мы будем использовать системные шрифты, которые помогают плавно перейти из интерфейса телефона в приложение. Для Android это Roboto Flex, а для iOS — San Francisco.</li></ol><h2>Чем меньше действий, тем лучше</h2><p>Идеальный интерфейс — тот, в котором человеку достаточно нажать одну или две кнопки, чтобы получить результат. Но этого добиться практически невозможно. Однако важно стремиться к тому, чтобы минимизировать путь пользователя. Это возможно в не перегруженном информацией интерфейсе. У пользователя возникает запрос, и через пару кликов экран дает на него ответ. Например, таким решением может стать ссылка на подборку подарков к 8 Марта, список популярных товаров или кнопка повтора заказа.</p><p>Главное правило при создании интерфейса, где минимизируется путь пользователя, — делать акцент на действительно важном. Например, в карточке магазина мы не станем выделять огромным шрифтом его название — вместо этого на первый план выведем ассортимент товаров. Точно так же на странице товара мы покажем только ту информацию, которая влияет на решение о покупке.</p><p>Ключ к удобному интерфейсу — понимание, на чем именно нужно сделать акцент. Для этого мы:</p><ol><li>анализируем поведение пользователей с помощью различных инструментов;</li><li>постоянно задаемся вопросом: как можно сделать еще проще?</li></ol><p>Второй из них, кстати, прописан в нашем регламенте для дизайнеров и продуктовых команд. Если приходится добавлять десятки подсказок и баннеров, чтобы пользователь нашел нужную кнопку, проблема скорее всего не в кнопке, а в неочевидной логике всего интерфейса.</p><p>Так, интуитивный интерфейс строится на умении слышать и понимать потребности пользователей. А оправданность каждого элемента становится основой для простых и рациональных решений. Такой подход обеспечивает удобный пользовательский опыт и способствует естественному росту лояльности к продукту.</p>]]></content:encoded>
    </item>
    <item>
      <title>Black Box Testing — ищем баги не смотря в код</title>
      <link>https://tproger.ru/articles/black-box-testing---ishhem-bagi-ne-smotrya-v-kod</link>
      <comments>https://tproger.ru/articles/black-box-testing---ishhem-bagi-ne-smotrya-v-kod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/black-box-testing---ishhem-bagi-ne-smotrya-v-kod</guid>
      <description><![CDATA[<p>Как понять, работает ли программа правильно, не зная, как она устроена изнутри? В статье расскажем, что такое Black Box Testing, как и когда его применять, а главное — как не ошибиться, проверяя то, чего не видно.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/black-box-testing---ishhem-bagi-ne-smotrya-v-kod">Black Box Testing — ищем баги не смотря в код</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 18 Jun 2025 15:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Тестирование программного обеспечения — это не просто поиск багов. Безусловно, обнаруживать ошибки важно, но самое главное — выпустить полезный для пользователя продукт. Всегда помните: функция, которая кажется очевидной вам или кажется логичной с вашей точки зрения, может не быть такой для конечного пользователя. Увидели <a href="https://dev.to/gablemathias/black-box-testing-53fd">эту</a> статью и теперь рассказываем, как тестировать ПО с помощью Black Box.</p><h2>Что такое black box</h2><p>Black-box тестирование — подход, в котором тестировщик смотрит на продукт глазами обычного пользователя. Другими словами, вы тестируете приложение как конечный юзер, который не имеет ни малейшего представления, что у него под капотом. Зато он может оценить, хорошо ли оно работает и насколько удобно в использовании.</p><p>Здесь нет анализа кода и внутренних схем — только входы, выходы и реальный пользовательский опыт.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-17/714fc0c6-33a6-45f8-b7c7-ed7f6ee0466a.png" alt="" /></figure><p>Тестировщик проверяет функциональность ПО, не вникая в детали реализации. Он вводит данные (имитируя действия пользователя) и наблюдает за результатом (время отклика, удобство, надежность).</p><h2>Знайте ваших пользователей</h2><p>Очень важно понимать, кто будет пользоваться системой — лучше всего даже поговорить с конечными пользователями. Знание их целей и задач критично: без этого можно упустить важные детали.</p><p>Тестировщику необязательно быть разработчиком, главное — разбираться в требованиях. Но, например, если речь об ERP-системе, а пользователь работает только с одной ее частью, то спецификаций может быть недостаточно. Если не знать контекста, легко принять нормальное поведение интерфейса за ошибку — просто потому, что оно выглядит непривычно.</p><h2>Когда применять</h2><p>Black-box тестирование может включать:</p><ul><li>Функциональное тестирование</li><li>UI-тестирование</li><li>Юзабилити-тестирование</li><li>Ad-hoc тестирование</li></ul><p>Они обеспечивают всестороннее покрытие и уменьшают риски: проверяются границы, моделируются реальные сценарии.</p><h2>Техники Black‑Box тестирования</h2><ul><li><b>Эквивалентное разбиение. </b>Вход разбивается на классы допустимых и недопустимых данных.</li><li><b>Анализ граничных значений. </b>Проверяются пограничные значения диапазона. <i>Пример: если допустимое количество товаров от 1 до 100, стоит протестировать 0, 1, 100, 101. </i></li><li><b>Тестирование по решающей таблице. </b>Таблица с комбинациями входов и ожидаемыми выходами. <i>Пример: авторизация по email и паролю:</i></li></ul><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-06-17/3b4fae40-fd6e-42db-8d17-91f486f69cde.png" alt="" /></figure><ul><li><b>Другие методы: </b>тестирование переходов состояний (state transition), исследовательское тестирование (exploratory), тестирование догадками (error guessing).</li></ul><p>Black-box тестирование помогает посмотреть, как система работает снаружи — без знания внутренней логики. Это помогает проверить поведение приложения и UX/UI, чтобы выпустить качественный продукт.</p>]]></content:encoded>
    </item>
    <item>
      <title>Мошенники рассылают фейковые вакансии тестировщиков и крадут деньги с карт через APK-файлы</title>
      <link>https://tproger.ru/news/mowenniki-rassylayut-fejkovye-vakansii-testirovshhikov-i-kradut-dengi-s-kart-cherez-apk-fajly</link>
      <comments>https://tproger.ru/news/mowenniki-rassylayut-fejkovye-vakansii-testirovshhikov-i-kradut-dengi-s-kart-cherez-apk-fajly?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/mowenniki-rassylayut-fejkovye-vakansii-testirovshhikov-i-kradut-dengi-s-kart-cherez-apk-fajly</guid>
      <description><![CDATA[<p>Под видом вакансий для тестировщиков приложений злоумышленники рассылают трояны. С апреля жертвами стали около 1000 человек, ущерб — более 14 млн рублей.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/mowenniki-rassylayut-fejkovye-vakansii-testirovshhikov-i-kradut-dengi-s-kart-cherez-apk-fajly">Мошенники рассылают фейковые вакансии тестировщиков и крадут деньги с карт через APK-файлы</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Хакеры]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 17 Jun 2025 09:35:44 GMT</pubDate>
      <content:encoded><![CDATA[<p>Специалисты компании F6 <a href="https://www.f6.ru/media-center/press-releases/scamtest/">обнаружили </a>вредоносную кампанию, нацеленную на IT-специалистов и фрилансеров, находящихся в поиске заработка. Под видом вакансий тестировщиков мобильных приложений злоумышленники распространяют вредоносные APK-файлы. После установки трояна преступники получают доступ к устройству жертвы и крадут деньги с банковских карт. С начала апреля атаки принесли хакерам более 14 млн рублей — пострадали около 1000 человек.</p><p>Больше новостей в нашем тг-канале<a href="https://t.me/your_tech"> Представляешь</a></p><h2>Как работает схема</h2><p>Схема построена на доверии: злоумышленники размещают фальшивые вакансии на популярных платформах объявлений, в Telegram-чатах и соцсетях, представляясь сотрудниками известных компаний. Они обещают оплату от 3000 до 5000 рублей в час и просят кандидатов указать модель телефона, возраст, ФИО и банковские реквизиты — якобы для выплаты зарплаты.</p><p>Дальнейшее общение переводится в мессенджеры Telegram или WhatsApp. Под видом «тестового задания» жертве присылают APK-файл. Приложение содержит троян удалённого доступа (RAT), который получает полный контроль над устройством: от перехвата SMS до управления банковскими приложениями.</p><p>Чтобы убедить пользователя установить вредоносный файл, мошенники заявляют, что антивирус может ложно определить его как вредоносный, и просят выдать все разрешения. Также якобы «для постановки в очередь тестировщиков» жертве предлагают ввести код и подождать 30 минут — время, необходимое преступникам для кражи денег, пока пользователь не заметил подозрительные списания.</p><p><a href="https://xakep.ru/2025/06/17/scam-testing/">По словам</a> Марии Синицыной, старшего аналитика департамента Digital Risk Protection F6, атаки ориентированы на новичков: студентов, джунов, людей без опыта, готовых использовать личный смартфон для работы. «Злоумышленники сразу отсеивают профессионалов с несколькими тестовыми устройствами — с ними схема не работает», — поясняет она.</p><p>Эксперты призывают никогда не устанавливать APK-файлы из непроверенных источников и не вводить личные данные на подозрительных условиях — особенно, если речь идёт о «работе мечты» с высокой оплатой за час.</p>]]></content:encoded>
    </item>
    <item>
      <title>7 курсов, с которых реально стартуют в IT в 2025</title>
      <link>https://tproger.ru/articles/7-kursov--s-kotoryh-realno-startuyut-v-it-v-2025</link>
      <comments>https://tproger.ru/articles/7-kursov--s-kotoryh-realno-startuyut-v-it-v-2025?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/7-kursov--s-kotoryh-realno-startuyut-v-it-v-2025</guid>
      <description><![CDATA[<p> Хотите начать карьеру в IT с нуля? Рассказываем, какие курсы в 2025 реально помогают попасть в IT, даже без опыта и тех.образования.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/7-kursov--s-kotoryh-realno-startuyut-v-it-v-2025">7 курсов, с которых реально стартуют в IT в 2025</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Английский]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Вебинар]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 11 Jun 2025 15:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году старт карьеры в IT намного сложнее, чем несколько лет назад. Работодатели больше не берут новичков только за диплом или сертификат — теперь всем нужны реальные практические навыки, которые можно сравнить с опытом работы.</p><p>В этой подборке — 7 курсов, после которых реально получить первую работу в IT за 3–6 месяцев.</p><h2>Почему в 2025 попасть в IT и легче, и сложнее одновременно</h2><p>Войти в IT в 2025 реально, но рынок сильно изменился. С одной стороны, спрос на junior-специалистов вернулся: компании снова набирают новичков, открывают стажировки и гибридные программы. Но конкуренция стала выше, а фильтры — жёстче.</p><h3>Что легче</h3><ul><li>После карьерного спада 2022–2023 спрос на junior-специалистов начал восстанавливаться. Появилось больше стажировок и вакансий для начинающих. Согласно отчёту<a href="https://www.roberthalf.com/us/en/insights/research/data-reveals-which-technology-roles-are-in-highest-demand"> Robert Half</a>, начать успешную карьеру могут инженеры по данным, DevOps-инженеры и разработчики ПО. Однако конкуренция остаётся высокой, и работодатели ожидают от кандидатов не только базовых знаний, но и быстрой адаптации к новым инструментам.</li><li>Образование и работа в IT всё чаще переходят в <a href="https://trends.rbc.ru/trends/social/63a374dd9a794731007f44da">гибридный </a>формат: можно совмещать онлайн- и офлайн-обучение, работать удалённо и периодически встречаться в офисе.</li></ul><h3>Что сложнее</h3><ul><li>Конкуренция выше, чем раньше. Даже на стартовые позиции часто подаётся по сотне кандидатов.</li><li>Работодатели ждут не просто знаний или диплома, а быстрой адаптации.</li></ul><h3>Что изменилось в 2025 по сравнению с 2020–2024</h3><p>Во-первых, образование стало прагматичнее. С 2020 по 2022 год рынок был наводнен короткими курсами «на джуна». В 2025-м большинство таких школ либо закрылись, либо переформатировались: люди устали платить за теорию без практики. Сейчас ценятся программы, в которых есть командные проекты, ревью от наставников, работа с Git и проектный пайплайн, близкий к реальному.</p><p>Во-вторых, работодатели всё чаще оценивают кандидатов по их реальным навыкам и опыту, а не по формальному образованию. Согласно <a href="https://dzen.ru/a/aB4XGcZqiXGuE2wI">прогнозам</a>, 39% текущих навыков работников устареют к 2030 году, что подчеркивает необходимость постоянного обновления и адаптации.</p><p>Так, расширяются границы образования. А вместе с ними – появляются онлайн-курсы.</p><h2>7 курсов, с которых начинают карьеру в IT</h2><h3>1. Kata Academy — GO-разработчик</h3><p><a href="https://kata.academy/courses/go-backend-developer?utm_source=web&amp;utm_medium=article&amp;utm_campaign=go&amp;utm_content=tproger_11_06_25">Ссылка на курс</a></p><p>Go (Golang) — это билет в backend-разработку, где в 2025 году крутятся большие деньги и хардовые задачи. Язык, созданный Google, ценят за скорость и простоту, а компании от стартапов до гигантов вроде Яндекса выстраиваются в очередь за Go-разработчиками. Курс от Kata Academy учит писать серверный код, работать с SQL, Git, Linux и Docker, чтобы выпускники могли строить масштабируемые приложения.</p><h4>📚Что получают выпускники</h4><p>На курсе студент осваивает Go и смежные технологии, создает портфолио из практических проектов, готовится к собеседованиям с поддержкой школы и приходит к главной цели — устраивается на работу по новой специальности. Кроме этого:</p><ul><li>Есть карьерная поддержка: резюме, собеседования, вакансии;</li><li>В договоре — гарантированная зарплата от 120 000 ₽ (может быть выше).</li></ul><h4>🎓Длительность и формат</h4><p>Курс проводится полностью онлайн. Длительность обучения — 9 месяцев, включая подготовку к собеседованиям. Нагрузка: от 25 часов обучения в неделю (3-4 часа в день), есть дедлайны. Выпускник устраивается на работу после курса, в течение 1-2 месяцев (в среднем).</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/8eb864d0-b80e-40a4-9de5-df9ee68d9c5d.png" alt="" /><figcaption>Скриншот траектории обучения с сайта программы</figcaption></figure><h4>👥Кому подойдет</h4><ul><li>Новичкам без опыта в программировании;</li><li>Студентам и начинающим разработчикам, которые хотят освоить Go;</li><li>Может быть интересен тем, кто работает во фронтенде или техподдержке и хочет сменить направление.</li></ul><p>Не требует знаний математики и программирования — рассчитан на обучение с нуля.</p><h4>🏆Возможности после курса</h4><p>На сайте указано, что выпускники устраиваются в компании, такие как Яндекс, Альфа-Банк и Kaspersky, часто в течение первого месяца после завершения основной программы курса. Если выпускник не найдет работу с зарплатой от 120.000 рублей, то оплачивать обучение не придется.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/1a7f9220-659a-4942-b49a-f4cfd1c06651.png" alt="" /><figcaption>Отзывы с сайта программы</figcaption></figure><h4>💸 Стоимость и условия участия</h4><p>Есть два варианта обучения:</p><ul><li>Интенсивное (стоимость — 110 000 рублей во время учебы плюс 20% от зарплаты в первый год работы). Для тех, кто живет в Москве или Санкт-Петербурге, или готов туда переехать.</li><li>Асинхронное (стоимость — 262 000 рублей). Обучение в своем темпе, нет дедлайнов. Можно искать работу в любом городе-миллионнике, если не получится устроиться — есть гарантия возврата денег.</li></ul><h3>2. CyberEd — Пентестер</h3><p><a href="https://cyber-ed.ru/b2c-courses/pentester/?utm_medium=tproger&amp;utm_campaign=7kursov">Ссылка на курс</a></p><p>Пентест (тестирование на проникновение) — это процесс поиска уязвимостей в IT-системах путем имитации атак хакеров.</p><p>Курс обучает анализу защищенности веб-приложений, сетей и инфраструктуры, а также использованию инструментов вроде Nessus и Nmap.</p><p>В программе будут техники атак, методы их обнаружения и составление отчетов. Курс готовит специалистов к реальным задачам в области кибербезопасности для работы в топовых компаниях.</p><h4>📚Что получают выпускники</h4><ul><li>Выпускники получают диплом о профессиональной переподготовке или удостоверение о повышении квалификации (зависит от формата).</li><li>Студенты формируют цифровое резюме и портфолио на основе практических заданий.</li><li>Все студенты проходят карьерную подготовку — от тренировки прохождения собеседований до подбора стажировок и вакансий.</li></ul><h4>🎓Длительность и формат</h4><p>Обучение длится 24 недели (365 академических часов) и проходит полностью онлайн. Есть два формата:</p><ul><li>Синхронный формат — с расписанием и онлайн-занятиями в группе. Включает 24 онлайн-семинара по 4 часа, регулярную обратную связь от наставников и карьерные консультации.</li><li>Асинхронный формат — без привязки ко времени: обучение проходит в удобном для студента темпе. Доступ ко всем материалам курса, заданиям и модулям открыт сразу.</li></ul><p>Оба формата включают более 100 практических заданий, поддержку менторов и итоговый проект.</p><h4>👥Кому подойдет</h4><ul><li>Айтишникам, которые хотят научиться пентесту или прокачаться в кибербезопасности.</li><li>Системным администраторам, веб-разработчикам, специалистам по ИБ, а также джунам и миддлам из пентеста, Blue Team или AppSec.</li></ul><p>В общем, полезно будет тем, у кого уже есть хотя бы год опыта и кто хочет перейти на следующий уровень.</p><h4>🏆Возможности стажировки и трудоустройства</h4><p>Выпускники устраиваются на позиции инженеров по безопасности или пентестеров, в том числе в крупные IT-компании. По отзывам студентов, некоторые находят стажировку уже на 4 месяц обучения, а часть получает постоянные позиции в течение 1 года после финала курса.</p><h4>💸 Стоимость и условия участия</h4><p>138 000 рублей за синхронный формат, 74 000 рублей за асинхронный. Доступна рассрочка на 2 года — 6 900 рублей в месяц.</p><p>Для поступления необходимо подать заявку через сайт. Точные требования к участникам не указаны, но курс предполагает наличие базовых знаний IT.</p><h3>3. Яндекс Практикум — Инженер по тестированию</h3><p><a href="https://practicum.yandex.ru/qa-engineer/?utm_source=partners&amp;utm_medium=cpc&amp;utm_campaign=tproger_cpc_RF_Prog_qaEn_b2c_Article_None_None">Ссылка на курс</a></p><p>Инженер по тестированию (QA-инженер) проверяет качество программных продуктов: ищет ошибки  в веб-приложениях, мобильных приложениях и API.</p><p>В программе курса Яндекс Практикума будут основы ручного тестирования, работа с тестовой документацией и инструментами, базовые навыки автоматизации, а также отдельные модули по информационной безопасности, Figma, Python и SQL.</p><p>Из интересного: обучение построено по принципу симуляции стажировки: студенты работают над проектами, которые похожи на реальные рабочие задачи.</p><h4>📚Что получают выпускники</h4><ul><li>В финале курса Практикум выдаёт диплом о профессиональной переподготовке.</li><li>Также у выпускников остаётся портфолио из 7 учебных проектов (в расширенной версии курса — из 9). Среди них, например, — итоговая работа над сервисом Яндекса (тестирование Яндекс.Маршрутов и т.д.).</li><li>Дополнительно открывается доступ к модулю по YandexGPT и YandexART.</li><li>В течение семи месяцев после окончания обучения доступна карьерная поддержка. При желании можно набираться опыта в Мастерской Практикума — это агентство внутри Практикума, где выпускники работают над задачами реальных заказчиков.</li></ul><h4>🎓Длительность и формат</h4><ul><li>Курс рассчитан на пять месяцев — это 318 академических часов, в среднем около 20 часов в неделю. Обучение проходит онлайн.</li><li>Теоретическая часть будет в виде интерактивного учебника, а практические задачи выполняются по спринтам: каждые три недели — новый проект.</li><li>Воркшопы и консультации с наставниками проходят по расписанию. У студентов есть дедлайны по проектным заданиям.</li></ul><h4>👥Кому подойдет</h4><ul><li>Новичкам без опыта в IT — студентам, тем, кто хочет сменить профессию, и специалистам из смежных областей.</li><li>Техническое образование и навыки программирования не требуются, но базовый английский будет плюсом, особенно если планируете развиваться в сторону автоматизации.</li></ul><h4>🏆Возможности стажировки и трудоустройства</h4><p>После завершения программы карьерный центр помогает в трудоустройстве (доступны карьерная поддержка в течение 6+ месяцев после обучения, фриланс-трек для тех, кто хочет работать на себя, вакансии и стажировки от партнёров и мастерская проектов). В среднем, стажёры зарабатывают около 52 000 рублей, джуниоры — 76 000, мидлы — 142 000 рублей.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/20143499-8f64-456d-84d7-a9fb2f205b5f.png" alt="" /><figcaption>Отзывы студентов. Скриншот с сайта программы</figcaption></figure><h4>💸 Стоимость и условия участия</h4><ul><li>Junior-трек. Подходит для старта в тестировании. 77 000 ₽ — при полной оплате; 16 500 ₽/мес. × 5 месяцев — при рассрочке.</li><li>Расширенный трек. Тут больше практики и навыков, чтобы быстрее вырасти до мидла. 148 000 ₽ — при полной оплате; 18 500 ₽/мес. × 9 месяцев — при рассрочке.</li><li>От новичка до автоматизатора. Сразу две профессии: ручное и автоматизированное тестирование. 156 000 ₽ — при полной оплате. 20 000 ₽/мес. × 9 месяцев — при рассрочке.</li></ul><p>Перед стартом можно пройти бесплатный вводный модуль на всех треках. Также получить налоговый вычет или частично вернуть деньги, если не понравится.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/c167cf4d-f1f8-4308-ad0d-75931e3b8048.png" alt="" /><figcaption>Как выглядит вводный бесплатный модуль. Скриншот с сайта программы</figcaption></figure><h3>4. Rebrain — Мини-практикум Golang с нуля</h3><p><a href="https://rebrainme.com/golang-s-nulya/?utm_source=tproger&amp;utm_medium=post&amp;utm_campaign=devops_mako&amp;utm_content=27052025">Ссылка на курс</a></p><p>Мини-практикум от Rebrain знакомит с основами Go, включая синтаксис, работу с каналами, контекстами и микросервисами. Программа ориентирована на практическое освоение языка через выполнение задач, моделирующих реальные сценарии backend-разработки.</p><h4>📚Что получают выпускники</h4><p>Выпускники получают сертификат Rebrain, подтверждающий освоение основ Go. В программу входят более 10 практических задач, демонстрирующих навыки работы с языком и современными подходами к разработке.</p><p>Доступ к комьюнити и онлайн-мероприятиям Rebrain позволяет продолжать обучение и налаживать профессиональные связи. Теоретические материалы остаются доступными навсегда.</p><h4>🎓Длительность и формат</h4><ul><li>Курс длится около 2 недель, но продолжительность зависит от темпа студента.</li><li>Программа полностью онлайн и асинхронная, что позволяет учиться в удобное время без привязки к расписанию.</li><li>Формат текстовый, без видеолекций, с акцентом на практику (90% времени).</li></ul><p>Студенты выполняют более 10 задач, а менторы на связи для обратной связь и поддержки.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/2fcb2893-3d65-4211-a18a-2adde491fc05.png" alt="" /><figcaption>Скриншот программы практикума с сайта Rebrain</figcaption></figure><h4>👥Кому подойдет</h4><ul><li>Студентам с потенциалом для Go;</li><li>Начинающим разработчикам без практического опыта;</li><li>Специалистам из смежных IT-направлений.</li></ul><p>Здесь нужны минимальные навыки работы с системами контроля версий (GitHub/GitLab), но глубокие знания программирования не требуются.</p><h4>🏆Возможности стажировки и трудоустройства</h4><p>HR-центр Rebrain помогает выпускникам с поиском работы, предоставляя консультации по резюме и подготовке к собеседованиям.  Участники комьюнити Rebrain могут попробовать себя в хакатонах и профессиональных событиях, где легче найти работу.</p><h4>💸 Стоимость и условия участия</h4><p>Стоимость курса — 14 990 рублей при полной оплате или 1 249 рублей в месяц при рассрочке на 12 месяцев. Для поступления достаточно подать заявку через сайт; специальных требований, кроме базового понимания IT, нет. Курс подходит для самостоятельного обучения, но требует дисциплины из-за асинхронного формата.</p><h3>5. Systems.Education — Системный аналитик / Проектировщик корпоративных информационных систем</h3><p><a href="https://systems.education/systems-analyst-bootcamp?utm_source=social&amp;utm_medium=tproger&amp;utm_campaign=rp">Ссылка на курс</a></p><p>Цель программы — получить профессию системного аналитика, которая соответствует актуальным требованиям вакансий на рынке.</p><p>На курсе от Systems.Education вы за 3 месяца пройдёте реальный кейс за счёт работы с:</p><ul><li>Формальным моделированием бизнеса и бизнес-проблемы: Event Storming, BPMN, Opportunity canvas.</li><li>Разработкой пользовательских требований: Impact map, User story map, Use case diagram, Use case scenario.</li><li>Концептуальным проектированием ИТ-решений: моделирование предметной области, UML диаграмма состояний, Контекстная диаграмма, Концептуальная модель данных, Макеты приложений.</li><li>Спецификацией требований к системе: Функциональные требования к системе, Нефункциональные требования к системе, Требования к информационной безопасности, Системные алгоритмы.</li><li>Техническим проектированием ИТ-решений: Диаграмма взаимосвязи объектов, диаграммы в нотации С4, Требования к интеграции, UML диаграмма последовательности, Data flow diagram.</li></ul><h4>📚Что получают выпускники</h4><ul><li>Сертификат на основании лицензии об образовательной деятельности, подтверждающий квалификацию системного аналитика уровней 4 и 5 по российскому профстандарту.</li><li>Портфолио, включающее результаты их учебного проекта.</li><li>Демонстрацию финальных результатов кейса перед приглашенными HR и техническими специалистами из компаний-потенциальных работодателей.</li></ul><h4>🎓Длительность и формат</h4><p>Курс длится 3 месяца (200+ академических часов) и проводится полностью онлайн: 8 часов в неделю — занятия с преподавателем в Zoom, дополнительно — командные и индивидуальные созвоны с ментором. Процесс обучения осуществляется в командах, в которых участники работают над реальным кейсом.</p><p>Каждую неделю студенты взаимодействуют с заказчиком, роль которого выполняет ведущий специалист школы SE: команды проводят с ним интервью, собирают требования, выявляют проблемы бизнеса, формируют цель разработки, определяют границы проекта и утверждают концепцию решения. Под руководством ментора переходят от системного анализа к проектированию информационной системы: выбирают подходящий архитектурный паттерн и тип базы данных, проектируют поток информации через интеграции API и брокеров. Каждую неделю студенты получают обратную связь от менторов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/fba4356b-cef4-4b24-b693-1800ca41b24e.png" alt="" /><figcaption>Скриншот отзывов с сайта программы</figcaption></figure><h4>👥Кому подойдет</h4><ul><li>Не системным аналитикам, которые хотят освоить практики проектирования информационных систем и/или стать системными аналитиками.</li><li>Системным аналитикам, которые хотят получить поддержку старших коллег при отработке практик проектирования, а также систематизировать знания в области проектирования ИС.</li></ul><h4>🏆Возможности стажировки и трудоустройства</h4><ul><li>Защитите итоговый проект прямо перед HR и техспецами из компаний.</li><li>Получите портфолио из настоящих проектных документов (артефактов) — всё, что требуют работодатели на позиции младшего системного аналитика.</li><li>В течение всего обучения вас будут сопровождать менторы-практики: помогут с проектом, дадут фидбек, подготовят к собеседованиям.</li></ul><p>По статистике школы, выпускники за год могут дорасти до уровня Middle-аналитика.</p><h4>💸 Стоимость и условия участия</h4><ul><li>205 000 рублей для физических лиц</li><li>255 000 рублей для юридических лиц.</li></ul><p>Действует скидка на раннее бронирование. Потоки стартуют раз в три месяца. Для поступления требуется подать заявку через сайт. Базовые знания IT-процессов желательны, но специальных тестов нет. Гарантируется 100% возврат средств при отказе до начала обучения.</p><h3>6. Karpov.Courses — Аналитик данных</h3><p><a href="https://karpov.courses/analytics?utm_source=tproger&amp;utm_medium=partners&amp;utm_campaign=1_dscoursestartda_tproger_partners_article_course_all_ds_kc">Ссылка на курс</a></p><p>Курс от karpov.courses учит работать с Python, SQL, Power BI и другими нужными инструментами для анализа, визуализации и автоматизации. В программе много практики: решаете реальные задачи — A/B-тесты, расчёт метрик, анализ больших данных, работа с хранилищами.</p><h4>📚Что получают выпускники</h4><ul><li>Сертификат, подтверждающий освоение программы, и портфолио из более чем 10 учебных проектов, включая работу с реальными бизнес-кейсами.</li><li>Доступ к рабочей инфраструктуре и более 490 заданиям, моделирующим задачи аналитиков.</li><li>Карьерную поддержку.</li></ul><p>Материалы курса остаются доступны бессрочно.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/3c48685a-bca9-47ac-9375-9fc377a3f790.png" alt="" /><figcaption>Что предлагает программа. Скриншот с сайта Karpov.courses</figcaption></figure><h4>🎓Длительность и формат</h4><p>Курс длится 5 месяцев и проводится полностью онлайн на LMS-платформе. Студенты проходят уроки и выполняют домашние задания в удобном темпе, с ежедневной поддержкой кураторов и экспертов.</p><h4>👥Кому подойдет</h4><ul><li>Новичкам без опыта в IT, студентам, чтобы освоить аналитику данных.</li><li>Маркетологам и менеджерам, чтобы рассчитывать метрики бизнеса и их эффективность.</li><li>Специалистам с релевантным опытом (джуниорам и выше).</li></ul><p>Базовые навыки работы с данными (например, Excel или SQL) полезны, но не обязательны.</p><p>По итогу — будете уметь вытаскивать инсайты из данных, делать понятные дашборды и находить ответы для решения бизнес-задач.</p><h4>🏆Возможности стажировки и трудоустройства</h4><p>Karpov.Courses предлагает карьерную поддержку по поиску работы, чат с консультантами и доступ к вакансиям от партнеров.</p><p>Выпускники могут стать младшими аналитиками данных или Data Scientist с медианной зарплатой на старте 100–120 000 рублей, а если уровень мидл — от 180 000 рублей. По данным школы, 3 месяца — средний срок успешного трудоустройства.</p><h4>💸 Стоимость и условия участия</h4><p>Стоимость базового тарифа — 80 000 рублей при единовременной оплате. Доступна беспроцентная рассрочка на 24 месяца (платёж примерно 4 408 рублей в месяц).</p><p>Для поступления достаточно подать заявку через сайт, специальных требований или вступительных тестов нет.</p><h3>7. Нетология — Инженер по тестированию</h3><p><a href="https://netology.ru/programs/qa-middle#/program_variants">Ссылка на курс</a></p><p>Инженер по тестированию (QA-инженер) отвечает за проверку качества программного обеспечения, выявляя ошибки в веб-приложениях, мобильных сервисах и API. Курс от Нетологии обучает ручному и автоматизированному тестированию, включая работу с инструментами и языками программирования (Python, Java, JavaScript).</p><p>Программа предлагает три трека:</p><ul><li>«Ручное тестирование» для новичков;</li><li>«QA-инженер уровня Junior» с основами автоматизации;</li><li>«QA-инженер уровня Middle» с углубленным изучением JavaScript, мобильного и нагрузочного тестирования.</li></ul><p>Студенты работают над реальными кейсами от партнеров — Dragons, OneTwoTrip и GOD.</p><h4>📚Что получают выпускники</h4><ul><li>Диплом о профессиональной переподготовке и портфолио из 5 крупных проектов, включая тестирование сайтов, веб-сервисов, приложений и командный дипломный проект.</li><li>Программа включает до 74 практических заданий, моделирующих реальные задачи тестировщиков.</li><li>Карьерная поддержка предусматривает тестовые собеседования, помощь в составлении резюме и возможность стажировки у партнеров.</li><li>Дополнительно студенты проходят воркшоп по применению нейросетей для автоматизации задач.</li></ul><p>Материалы курса доступны в личном кабинете навсегда.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/0c758546-2119-4983-b661-2b66ba079d76.png" alt="" /><figcaption>Обещают официальный диплом. Скриншот с сайта курса</figcaption></figure><h4>🎓Длительность и формат</h4><ul><li>Курс проводится полностью онлайн, длительность зависит от трека: в среднем, 4–6 месяцев.</li></ul><ul><li>Занятия включают вебинары по расписанию (не чаще 2 раз в неделю после 19:00 МСК), видеолекции, тесты и практические задания.</li></ul><ul><li>На обучение требуется 8–10 часов в неделю. Формат сочетает синхронные вебинары с асинхронной работой через личный кабинет.</li></ul><h4>👥Кому подойдет</h4><ul><li>Новичкам без опыта, студентам и специалистам из смежных сфер.</li></ul><ul><li>Трек Junior подходит для начинающих, интересующихся автоматизацией, а трек Middle — для тех, кто хочет углубить навыки и претендовать на более высокие позиции. Базовый английский полезен, но программирование не обязательно для старта.</li></ul><h4>🏆Возможности стажировки и трудоустройства</h4><p>Программа позволяет начать карьеру в ручном тестировании уже через 2 месяца обучения, на фрилансе или в найме.</p><p>Выпускники трека Junior могут начать карьеру младших QA-инженеров (медианная зарплата около 76 000 рублей), а трека Middle — на более сложные роли с зарплатой от 142 000 рублей.</p><h4>💸 Стоимость и условия участия</h4><p>Стоимость зависит от трека (цены указаны с учетом скидки 40%):</p><ul><li>Ручное тестирование: 56 700 рублей (или 2 487 рублей/мес. на 24 месяца)</li><li>QA-инженер уровня Junior: 105 000 рублей (или 3 070 рублей/мес. на 36 месяцев).</li><li>QA-инженер уровня Middle: 130 500 рублей (или 3 816 рублей/мес. на 36 месяцев).</li></ul><p>Для поступления нужно подать заявку через сайт, вступительных тестов нет. Возможен возврат средств в течение 7 дней, если курс не подошел.</p><h2>Как выбрать правильный курс под себя?</h2><p>Выбор IT-курса в 2025 году зависит от ваших интересов, доступного времени и бюджета. Собрали таблицу, чтобы помочь сориентироваться среди представленных программ.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/0b69693c-0870-4afb-ae44-921e6856ade6.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-06-11/4a01e788-550b-4e34-adba-e1ff701d9527.png" alt="" /></figure><h2>FAQ: частые вопросы от новичков</h2><h3>Можно ли войти в IT без высшего образования?</h3><p>Да, можно. Но в некоторых крупных компаниях или госструктурах формальное образование может быть требованием. Если нет профильного образования, стоит выбирать курсы с сильной практической базой и поддержкой трудоустройства.</p><h3>Реально ли устроиться после курсов?</h3><p>Да, но результат зависит от трёх факторов: качества курса, вашей активности и текущего спроса на рынке труда.</p><h3>Что выбрать: универсальный курс или узкую специализацию?</h3><p>Зависит от вашей подготовки:</p><ul><li>Универсальный курс: подходит новичкам. Дает обзор направлений, помогая выбрать специализацию. Минус — знания менее глубокие.</li><li>Узкая специализация: для тех, кто знает, чего хочет. Дает глубокие навыки для конкретной роли, но требует начальной базы или четкой цели.</li></ul><p>Так НЕ надо:</p><ul><li>Брать узкую специализацию «потому что все советуют», без анализа своих склонностей (например, идти в кибербезопасность, хотя нравится работа с данными).</li><li>Выбирать универсальный курс в надежде потом определиться — это растягивает сроки выхода на рынок.</li></ul><p>Новичкам лучше начать с универсального курса, чтобы понять рынок, а затем углубиться в нишу.</p>]]></content:encoded>
    </item>
    <item>
      <title>NVIDIA начала отказываться от C в критичных модулях ради безопасности</title>
      <link>https://tproger.ru/news/nvidia-nachala-otkazyvatsya-ot-c-v-kritichnyh-modulyah-radi-bezopasnosti</link>
      <comments>https://tproger.ru/news/nvidia-nachala-otkazyvatsya-ot-c-v-kritichnyh-modulyah-radi-bezopasnosti?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/nvidia-nachala-otkazyvatsya-ot-c-v-kritichnyh-modulyah-radi-bezopasnosti</guid>
      <description><![CDATA[<p>NVIDIA отказывается от C в критических модулях — компания переходит на формально проверяемый SPARK ради безопасности, стабильности и доверия клиентов</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/nvidia-nachala-otkazyvatsya-ot-c-v-kritichnyh-modulyah-radi-bezopasnosti">NVIDIA начала отказываться от C в критичных модулях ради безопасности</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Язык Си]]></category>
      <category><![CDATA[NVIDIA]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 11 Jun 2025 05:55:56 GMT</pubDate>
      <content:encoded><![CDATA[<p>NVIDIA совместно с AdaCore <a href="https://blog.adacore.com/nvidia-security-team-what-if-we-just-stopped-using-c">опубликовала</a> кейс, который показывает: компания активно внедряет <b>формально верифицированный код на языке SPARK</b> вместо традиционного C в критически важных модулях.</p><p>Причина — невозможность гарантировать безопасность через тестирование.</p><blockquote><i>Тестировать безопасность невозможно. Нельзя понять, когда ты действительно закончил</i></blockquote><h2>Почему C больше не устраивает</h2><p>На фоне усиления киберугроз, в NVIDIA начали пересматривать подходы к разработке и верификации ПО.</p><p>Тестирование, считают в компании, не может гарантировать безопасность — оно дает понимание качества функциональности, но не защищенности. Поэтому ставка была сделана на <b>доказуемость поведения кода</b> — через формальную верификацию.</p><h2>Что такое SPARK и как его внедрили</h2><p>SPARK — это строго типизированный, безопасный для памяти подмножество языка Ada, предназначенный для написания кода, который можно формально верифицировать. Такие программы можно математически доказать на предмет корректности, отсутствия ошибок и уязвимостей — задолго до запуска.</p><p>Еще в 2018 году NVIDIA провела proof-of-concept: две низкоуровневые, чувствительные к безопасности C-программы были переписаны на SPARK за три месяца. Итоги оказались настолько успешными, что спустя несколько лет:</p><ul><li>в SPARK пишутся <b>целые модули коммерческих продуктов</b> NVIDIA;</li><li><b>обучено более 50 разработчиков</b>;</li><li>верификация значительно упростила <b>процессы аудита</b> и укрепила доверие клиентов.</li></ul><p><i>«Мы не просто запустили инструмент поиска багов — мы формально верифицировали этот код. Это сильно повышает доверие со стороны клиентов»</i>, — отмечается в кейсе.</p><h2>Возражения скептиков развеялись</h2><p>Переход с C на SPARK изначально вызывал сомнения внутри компании. Однако практический опыт показал:</p><ul><li><b>производительность не упала</b>: «разницы с C не заметили», — признались разработчики;</li><li><b>формальная верификация сократила затраты на аудиты</b>;</li><li><b>некоторые изначальные критики стали активными сторонниками</b> подхода.</li></ul><h2>Что дальше</h2><p>Хотя SPARK пока используется точечно, его уже применяют в чувствительных к безопасности частях — там, где традиционные языки и методы верификации не дают нужного уровня уверенности. NVIDIA делает ставку на <b>переход от тестов к доказательствам</b>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как отправлять email из кода: nodemailer, SMTP и HTML-письма</title>
      <link>https://tproger.ru/articles/kak-otpravlyat-email-iz-koda--nodemailer--smtp-i-html-pisma</link>
      <comments>https://tproger.ru/articles/kak-otpravlyat-email-iz-koda--nodemailer--smtp-i-html-pisma?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-otpravlyat-email-iz-koda--nodemailer--smtp-i-html-pisma</guid>
      <description><![CDATA[<p>Как отправлять email из кода. Показываем, как отправлять письма через Nodemailer, SMTP и HTML. Рассматриваем пошаговую инструкцию и основные нюансы ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-otpravlyat-email-iz-koda--nodemailer--smtp-i-html-pisma">Как отправлять email из кода: nodemailer, SMTP и HTML-письма</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Яндекс]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[Google Analytics]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 05 Jun 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Задача кажется простой: взял библиотеку, добавил в приложение — и письма полетели. На практике возникают вопросы:</p><ul><li>Как настроить подключение к SMTP-серверу?</li><li>Что делать, если письма летят в спам?</li><li>Как отправить HTML-письмо, чтобы вёрстку не перекосило?</li></ul><p>После прочтения статьи вы научитесь создавать простые текстовые уведомления и HTML-письма с вложениями. Рассмотрим настройку SMTP-провайдера Яндекс, научимся слать письма с персональными вложениями.</p><p>Информация пригодится вам, если вы подключаете форму обратной связи или добавляете систему уведомлений. Прежде чем погружаться в практику, вспомним основы — как работает доставка электронной почты.</p><h2>SMTP — простой протокол передачи email</h2><p>По протоколу SMTP почтовые серверы «договариваются» о передаче писем от отправителя к получателю. Архитектура проверена десятилетиями: каждый почтовый сервер в мире понимает SMTP. Протокол справляется с миллиардами писем ежедневно, не принадлежит ни одной компании, а новые решения не ломают старые системы.</p><h3>Как работает SMTP</h3><p>Принцип работы электронной почты напоминает обычную почтовую службу. Бумажное письмо кладут в конверт, подписывают адрес получателя и опускают в ящик. Дальше почтовая служба разбирается, как доставить письмо до адресата.</p><p>В электронной почте происходит нечто похожее:</p><ol><li>Когда написали письмо и нажимаете «Отправить», ваша программа соединяется с SMTP-сервером.</li><li>Сервер проверяет адрес получателя и определяет, куда дальше передавать письмо.</li><li>Письмо путешествует между SMTP-серверами, пока не достигнет сервера получателя.</li><li>Сервер получателя сохраняет письмо в почтовый ящик, откуда адресат может его прочитать.</li></ol><p>Начинающие разработчики путают SMTP с другими почтовыми протоколами, хотя они выполняют принципиально разные функции.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-05-28/40a2c5f6-f20e-455f-a717-a20af573efe1.jpg" alt="" /><figcaption>Электронные письма пересылаются между серверами по SMTP. Чтобы адресат получил сообщение от почтовой службы, используется протокол POP3 или IMAP</figcaption></figure><p><b>SMTP </b>отвечает только за отправку писем. Он работает как «исходящая почта», передавая письма от отправителя к серверу получателя. SMTP используют, когда отправляют письма из приложений.</p><p><b>POP3 </b>и <b>IMAP </b>предназначены только для получения писем. Они работают как «входящая почта» и позволяют клиентам загружать письма с сервера. Разница между ними в том, что POP3 скачивает и удаляет письма с сервера, а IMAP синхронизирует состояние писем между всеми устройствами пользователя.</p><h3>Основные типы SMTP-серверов</h3><p>По назначению SMTP-серверы можно разделить на две большие группы:</p><ul><li><b>Обычные серверы</b> для переписки. Их предоставляют интернет-провайдеры, хостинг-компании и почтовые сервисы. Единственная проблема — лимиты. Можно отправлять не более 100-500 писем в день.</li><li><b>Специальные серверы</b> для массовых рассылок и автоматических уведомлений от сайтов (например, подтверждение регистрации или чек покупки). Через такие серверы можно отправлять тысячи и даже миллионы писем без риска блокировки.</li></ul><p>Выбор зависит от ваших потребностей. <b>Отправлять десятки писем в день</b> можно через  бесплатные сервисы: Gmail или Яндекс. Если планируете <b>рассылки из сотен или тысяч писем</b>, обратите внимание на SendGrid, Mailgun, Amazon SES. Они гарантируют защиту от блокировок, но работают по платной подписке.</p><p>Можно развернуть <b>почтовый сервер на собственном железе</b>. Этот подход выбирают, когда нельзя доверять переписку даже Яндексу. Назир Наурзоков — инженер по проектным решениям Acer в России — рассказал об особенностях этого решения в статье «<a href="https://tproger.ru/articles/nuzhen-li-vashej-kompanii-sobstvennyj-pochtovyj-server">Нужен ли вашей компании собственный почтовый сервер</a>».</p><h2>Установка и настройка nodemailer</h2><p>Практиковаться будем на бесплатной библиотеке <a href="https://nodemailer.com/">Nodemailer</a>. Через неё можно слать обычный текст и HTML-письма со сложным дизайном, вложенными файлами.</p><p>Перед установкой потребуется Node.js версии 8.0.0 или выше:</p><p>Если среда Node.js не установлена или устарела, <a href="https://nodejs.org/en/download">скачайте актуальную версию</a>.</p><p>Чтобы загрузить Nodemailer, откройте терминал, перейдите в директорию проекта и выполните команду:</p><h3>Тестовый скрипт для отправки письма</h3><p>Не беспокойтесь, если не определились с почтовым сервером. Отправим первое письмо в тестовом режиме — результат видно без реальной отправки.</p><p>Создайте новый файл, например <i>send-email.js</i>, и вставьте следующий код:</p><p>Запустите скрипт:</p><p>В консоли будет сообщение об успешной отправке и ссылка, по которой можно посмотреть, как выглядит ваше письмо. После подключения к реальному SMTP-серверу тестовые сообщения можно слать на личную или временную почту (<a href="https://temp-mail.org/ru/">Temp Mail</a>, <a href="https://internxt.com/ru/temporary-email">Internxt</a>).</p><p>Подробнее по теме: <a href="https://tproger.ru/articles/chto-takoe-vremennaya-pochta-i-kak-ee-ispolzovat">Что такое временная почта и как ее использовать</a>.</p><h2>Отправка простого текстового письма</h2><p>Код для отправки через SMTP-сервер Яндекса:</p><p>В user указываем логин от почты без @yandex.ru, а пароль нужно <a href="https://id.yandex.ru/security/app-passwords">сгенерировать</a> в Яндекс ID.</p><p>Поле from можно указывать в нескольких форматах:</p><p>Имя отправителя нужно заключать в кавычки, если оно содержит пробелы или спецсимволы.</p><h3>Различие между cc и bcc</h3><p><b>CC (Carbon Copy) </b>— открытая копия письма. Все получатели видят адреса в поле cc:</p><p><b>BCC (Blind Carbon Copy)</b> — скрытая копия. Получатели в bcc не видны другим адресатам:</p><h3>Настройка reply-to</h3><p>Если хотите получать ответы на другой адрес, используйте replyTo:</p><h2>Создание и отправка HTML-писем</h2><p>Самый простой способ отправить текст с применением стилей — передать HTML-код в виде строки:</p><p>HTML-код реальных писем сложнее, занимает сотни строчек. Поэтому рекомендуется использовать встроенный модуль <i>fs </i>для чтения из файла:</p><h3>Встраивание изображений</h3><p>Nodemailer поддерживает 2 способа работы с картинками:</p><ul><li>Ссылки на внешние ресурсы, которые загружаются при открытии письма.</li><li>Встраивание картинки прямо в письмо через параметр <i>attachments </i>с флагом <i>cid</i>.</li></ul><p>Встроенные изображения увеличивают размер письма, но спасают от ситуаций, когда источник картинки может быть заблокирован в стране получателя.</p><h3>Адаптив и совместимость</h3><p>Вёрстка в почтовых клиентах не работает как в браузерах. <b>Многие CSS-свойства не поддерживаются, JavaScript полностью заблокирован.</b></p><p>HTML-письмо — это большая таблица, которая тоже состоит из таблиц.</p><p>Раньше таблицами верстали сайты, потом пришли к flexbox и grid. Электронная почта тоже эволюционирует, но медленно — в HTML-письмах эффективна только табличная вёрстка.</p><p>Таблицы корректно отображаться в Gmail, Mail.ru, Outlook и других почтовых клиентах.</p><h3>Тестирование писем</h3><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-05-28/84db2113-a6f0-4b97-9dcc-00147f3a9a9a.jpg" alt="" /><figcaption>Панель для контроля превью, трекинга писем, блокировок — Litmus.com</figcaption></figure><p>Для проверки используйте:</p><ul><li><a href="https://www.litmus.com/">Litmus</a> — платформа для тестирования в 90+ клиентах.</li><li><a href="http://emailonacid.com">Email on Acid</a> — альтернатива Litmus.</li><li><a href="http://mail-tester.com">Mail Tester</a> — бесплатная проверка на спам.</li><li><a href="http://caniemail.com">Can I Email</a> — таблица поддержки CSS в письмах.</li></ul><p>Начинайте с простых шаблонов и постепенно усложняйте. Всегда тестируйте в основных клиентах: Gmail, Outlook и обязательно на мобильных устройствах.</p><h2>Подключение шаблонов и вложений</h2><p>Шаблоны нужны, чтобы отправлять персонализированные письма множеству получателей. Вместо создания отдельного HTML для каждого пользователя вручную, один шаблон подставляет имена, данные заказов, списки товаров автоматически.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-05-28/210cd4f3-5dc2-45ed-bb1c-e8b148c9766e.jpg" alt="" /><figcaption>Пример персонализированного письма</figcaption></figure><p>При отправке 100 писем с приветствием «Привет, Максим!» и уникальными номерами заказов ручное создание HTML превращается в кошмар. Шаблонизатор Handlebars решает эту проблему. Также он упрощает поддержку — изменения в дизайне вносятся в один файл.</p><p>Handlebars превращает статичные HTML-шаблоны в динамические письма. Переменные заменяются реальными данными при компиляции.</p><p>Handlebars поддерживает условные блоки {{#if}} и циклы {{#each}}. С их помощью можно показывать разные части письма в зависимости от данных или выводить списки товаров, уведомлений, участников.</p><p>HTML-шаблоны реального проекта хранятся в отдельной папке. Модуль fs читает файл, Handlebars компилирует его с данными, результат передается в nodemailer. Такой подход разделяет логику приложения и вёрстку писем.</p><h2>Добавление файлов-вложений</h2><p>Параметр attachments в nodemailer принимает массив объектов с описанием файлов. Каждое вложение содержит имя файла и путь к нему или буфер с содержимым:</p><p>Размер всех вложений не должен превышать лимиты почтового сервера — 25 МБ для Gmail и Outlook.</p><h2>Генерация файлов на лету</h2><p>Популярная задача — создание PDF-документов прямо в коде. Библиотека <a href="https://github.com/foliojs/pdfkit">pdfkit </a>генерирует PDF в памяти, результат передается как буфер в nodemailer. Аналогично работают библиотеки для создания Excel-файлов или изображений. Получается персонализированное письмо с документами и красивым оформлением.</p><h2>Ошибки при отправке писем и их обработка</h2><p><b>Ошибки аутентификации</b> встречаются чаще всего. Коды 535 и 534 указывают на проблемы с логином или паролем. Почтовые провайдеры требуют использования паролей приложений вместо основных паролей аккаунтов. Gmail и Яндекс.Почта не позволят войти с обычным паролем, если не включена 2-Fa.</p><p><b>Проблемы с получателями</b> проявляются кодами 550 (пользователь не найден) и 553 (неверный формат email). Ошибка 552 сигнализирует о превышении размера письма.</p><p>Реальная система должна различать критические и временные ошибки. Временные проблемы (таймауты, недоступность сервера) требуют повторных попыток с задержкой. Критические ошибки (неверный email, проблемы аутентификации) нужно логировать и обрабатывать немедленно.</p><p>Простейший подход — попытки отправки с увеличивающимися интервалами: 2, 4 и 8 секунд.</p><h2>Как понять, дошло ли письмо?</h2><p>Nodemailer сообщает только о том, что SMTP-сервер принял письмо для доставки. Это не гарантирует доставку в почтовый ящик получателя.</p><p>Фактическая доставка зависит от множества факторов:</p><ul><li>репутации отправителя,</li><li>содержимого письма,</li><li>настроек получателя.</li></ul><p>Для отслеживания реальной доставки используют <b>скрытый пиксель</b> — невидимые изображения размером 1×1 px, встроенные в HTML-письма. Когда получатель открывает письмо, изображение загружается с вашего сервера, фиксируя факт прочтения.</p><h2>Почему письма попадают в спам?</h2><p>Спам-фильтры анализируют множество факторов. Основные проблемы: отправка с бесплатных почтовых сервисов для бизнес-рассылок, использование <a href="https://vc.ru/marketing/1092370-email-protiv-bdsm-200-stop-slov-iz-za-kotoryh-vasha-rassylka-mozhet-popast-v-spam">спам-слов</a> в теме (“СРОЧНО!!!”, “СКИДКА 90%”).</p><p>Технические аспекты:</p><ul><li>отсутствие SPF, DKIM и DMARC записей в DNS;</li><li>неправильно настроенный reverse DNS;</li><li>высокий процент отказов (bounce rate) в предыдущих рассылках.</li></ul><p>Хотите улучшить доставляемость? Добавьте ссылку для отписки, поддерживайте чистоту списков рассылки и наращивайте объем писем постепенно.</p><h2>Безопасность при отправке писем</h2><p>Первое правило: никогда не храните пароли прямо в коде. Даже если это тестовый проект, который никто не увидит. Используйте переменные окружения.</p><p>Создайте файл<i> .env </i>в корне проекта:</p><p>Не забудьте добавить <i>.env</i> в <i>.gitignore</i>. В коде обращайтесь к этим переменным через <i>process.env</i>:</p><h2>OAuth2 и пароли приложений</h2><p>Если работаете с Gmail, Яндексом или другими крупными почтовыми сервисами, забудьте про обычные пароли. Используйте OAuth2 или пароли для приложений:</p><ul><li>Пароли приложений работают только для конкретной задачи, их можно в любой момент отозвать.</li><li>OAuth2 — более сложный, но безопасный способ.</li></ul><p>Подробнее по теме: <a href="https://tproger.ru/articles/oauth-2-0-i-oidc--kak-zashhitit-api-i-polzovatelskie-dannye-253181">OAuth 2.0 и OIDC: как защитить API и пользовательские данные</a>.</p><h2>SPF, DKIM, DMARC</h2><p>Это записи в DNS, которые говорят почтовым серверам: «Да, это письмо действительно от нас, а не от мошенников»:</p><ul><li><b>SPF </b>— список IP-адресов, с которых можно отправлять письма от вашего домена.</li><li><b>DKIM </b>— цифровая подпись письма.</li><li><b>DMARC </b>— политика обработки писем, которые не прошли проверку.</li></ul><p>Если используете свой домен, настройте эти записи. Если нет — не переживайте, это задача для более продвинутого уровня.</p><h2>Что дальше?</h2><p>Следующий шаг — <b>автоматизация рассылок</b>. Когда пользователь регистрируется, система отправляет приветственное письмо, при оформлении заказа — подтверждение с деталями покупки.</p><p>Для больших объёмов писем понадобятся <b>SendGrid</b>, <b>Mailgun </b>и <b>Amazon SES</b>. Эти сервисы решают проблемы с доставляемостью и предоставляют статистику — сколько писем доставлено, открыто, по каким ссылкам кликнули получатели.</p><p>Персонализация выходит за рамки подстановки имени в шаблон. Анализ поведения пользователей позволяет отправлять релевантный контент — подборки товаров на основе предыдущих покупок, напоминания о брошенной корзине.</p><p>Тестирование email-кампаний помогает улучшить результаты. <a href="https://tproger.ru/articles/kak-uluchshit-produkt-s-pomoshhju-a-b-testirovanija">A/B-тесты</a> показывают, какие заголовки чаще открывают, эксперименты с временем отправки выявляют оптимальные часы для конкретной аудитории.</p><p>Интеграция с аналитикой замыкает цикл. <b>UTM-метки</b> в ссылках письма показывают в Google Analytics, сколько пользователей перешло из рассылки на сайт и что там делали. Эти данные помогают оценить эффективность email-маркетинга и планировать следующие кампании.</p>]]></content:encoded>
    </item>
    <item>
      <title>Valkey оказался быстрее Redis: до +37 % в SET и −60 % по задержкам в GET</title>
      <link>https://tproger.ru/news/valkey-okazalsya-bystree-redis--do--37---v-set-i--60---po-zaderzhkam-v-get-256233</link>
      <comments>https://tproger.ru/news/valkey-okazalsya-bystree-redis--do--37---v-set-i--60---po-zaderzhkam-v-get-256233?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/valkey-okazalsya-bystree-redis--do--37---v-set-i--60---po-zaderzhkam-v-get-256233</guid>
      <description><![CDATA[<p>Valkey обогнал Redis: до +37% в SET и −60% по задержкам в GET — Amazon помог форку выжать максимум из многопоточности и сетевых оптимизаций</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/valkey-okazalsya-bystree-redis--do--37---v-set-i--60---po-zaderzhkam-v-get-256233">Valkey оказался быстрее Redis: до +37 % в SET и −60 % по задержкам в GET</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Amazon]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 04 Jun 2025 12:22:50 GMT</pubDate>
      <content:encoded><![CDATA[<p>Независимое тестирование последних версий Redis 8.0 и форка Valkey 8.1 <a href="https://www.gomomento.com/blog/valkey-turns-one-how-the-community-fork-left-redis-in-the-dust/">показало</a>: форк теперь не просто не уступает оригиналу, но и значительно его опережает.</p><p>Благодаря переданному Amazon коду для многопоточной обработки I/O, Valkey добился серьезного прироста производительности.</p><h2>Что показали тесты</h2><p>Тесты проводились на AWS-инстансе Graviton4 c8g.2xlarge с 8 виртуальными ядрами. Valkey 8.1.1 продемонстрировал:</p><ul><li><b>999,8 тыс SET-запросов в секунду</b> — против 729,4 тыс у Redis;</li><li><b>+37% к производительности в SET и +16% в GET</b>;</li><li><b>−30% по задержкам в SET и −60% в GET</b>.</li></ul><p>Особенно заметен прирост при увеличении числа I/O-потоков: при шести потоках Valkey выдает 678 тыс SET-запросов/сек против 563 тыс у Redis (при 256 соединениях). А при 400 соединениях — уже 832 тыс.</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-06-04/cfcd6260-5e21-488c-ba71-1d9645da8c5f.jpeg" alt="" /></figure><h2>Как достигли такого результата</h2><p>Оптимизация прошла не только на уровне кода, но и на уровне системной настройки:</p><ul><li>Сократили количество переключений контекста, выделив два ядра под обработку прерываний.</li><li>Остальные шесть ядер были закреплены за I/O-потоками Redis и Valkey.</li><li>Использовали ethtool и smp_affinity, чтобы точно задать, какие ядра обрабатывают сетевые IRQ.</li></ul><p>В итоге система позволила выжать максимум из архитектуры и достичь почти <b>миллиона SET-запросов в секунду</b>.</p><h2>Вывод</h2><p>Valkey — больше не просто «альтернатива Redis». Это полноценный, производительный форк с активной поддержкой сообщества и промышленной оптимизацией от крупных игроков вроде Amazon.</p><p>И если раньше Valkey рассматривали как запасной аэродром после смены лицензии Redis, то теперь он становится приоритетным выбором для высоконагруженных систем.</p>]]></content:encoded>
    </item>
    <item>
      <title>6 советов, которые реально прокачают навыки работы с Docker</title>
      <link>https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker</link>
      <comments>https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker</guid>
      <description><![CDATA[<p>Шесть практик, которые прокачают навыки работы с Docker: минимизация образов, ручная сборка, sandbox-подход, нестандартная контейнеризация и отказ от Docker CLI.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker">6 советов, которые реально прокачают навыки работы с Docker</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Безопасный код]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 03 Jun 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Docker давно стал стандартом в разработке: контейнеры запускают фронтенд, бэкенд, базы данных, пайплайны и тесты. Но большинство разработчиков использует его как ещё один способ запустить проект, не вдаваясь в детали. А ведь за docker build и docker run скрывается целая экосистема. Сегодня рассмотрим шесть практик, которые реально прокачают навыки работы с Docker.</p><h2>Сделайте минимальный Docker-образ, не ломая прод</h2><p>Большинство Docker-образов в проектах содержат больше данных, зависимостей и инструментов, чем требуется для работы приложения. Это приводит к избыточному объёму, медленной сборке и повышенным рискам безопасности. Умение собирать минимальный образ — один из базовых навыков работы с Docker, который напрямую влияет на стабильность и скорость развёртывания.</p><p>Начать стоит с multi-stage сборки: на первом этапе — установка зависимостей и сборка, на втором — только нужные артефакты. Это позволяет исключить лишние файлы и утилиты из финального образа. В качестве базового слоя лучше использовать alpine, distroless или даже scratch, если вы точно понимаете, какие бинарники и библиотеки требуются приложению.</p><p>Хорошая практика — использовать утилиты docker history и dive для анализа того, какие файлы и слои попали в образ. Если размер превышает ожидания, стоит проверить, не остались ли во внутреннем слое временные файлы, dev-зависимости или директории кэша.</p><p>Полезный навык — намеренно уменьшить образ до минимума и посмотреть, на каком этапе он перестанет работать. Это позволяет выявить неочевидные зависимости, которые могут мешать переносимости и воспроизводимости. Например, отсутствие системной библиотеки, необходимость в переменных окружения или некорректная настройка путей.</p><p>Результат — меньше уязвимостей, быстрая сборка и уверенность в том, что образ содержит только то, что действительно нужно для запуска в проде.</p><h2>Попробуйте контейнизировать то, что изначально не предназначалось для этого</h2><p>Работа с Docker чаще всего начинается с бэкенд-приложений, сервисов и утилит, которые изначально проектировались как самостоятельные процессы. Они хорошо вписываются в модель контейнеров: запускаются из CLI, работают в изоляции, не требуют доступа к UI или железу. Но стоит выйти за эти рамки — начинаются сложности.</p><p>Попробуйте упаковать в контейнер любую графическую программу. Технически это возможно: X11 или Wayland можно пробросить через сокет, устройства передать через volume, окружение прописать вручную. Но на практике вы столкнётесь с рядом ограничений: отсутствие звука, глюки интерфейса, ошибки в драйверах, проблемы с доступом к GPU или нестабильное поведение при рендеринге.</p><p>В этом упражнении ценен не сам результат, а путь. Вы увидите, как устроена изоляция в Docker, почему графические приложения не работают «из коробки» и где находятся реальные границы контейнеризации. Контейнер — это не виртуальная машина, у него нет полноценного init, драйверов или прямого доступа к оборудованию. Многие фичи, которые работают локально, в контейнере требуют дополнительных танцев с бубном.</p><p>Такая практика особенно полезна, если вы имеете дело с devtool'ами, UI-обвязкой или тестированием в headless-средах. Понимание, что именно ломается и почему, позволяет более точно проектировать окружение и избегать архитектурных ловушек в будущем.</p><h2>Соберите базовый образ с нуля</h2><p>Когда разработчик пишет FROM node или FROM ubuntu, он автоматически получает десятки слоёв, библиотек и утилит, о которых, скорее всего, не задумывается. Это удобно, но не даёт понимания, как вообще работает контейнер на низком уровне. Попробуем разобраться.</p><p>Укажите в Dockerfile FROM scratch — и не увидите ни bash, ни glibc, ни стандартных каталогов. Вам придётся самостоятельно добавить всё необходимое: бинарник, зависимости, библиотеки, конфигурацию. Если пишете на Go, задача упрощается: можно собрать статически слинкованный исполняемый файл и скопировать его в образ. Для других языков, особенно тех, что зависят от динамических библиотек или рантайма (например, Python или Node.js), придётся вручную подтягивать зависимости.</p><p>Такая практика заставляет иначе взглянуть на структуру контейнера. Вы начнёте понимать, чем отличается CMD от ENTRYPOINT, зачем в некоторых образах используется sh -c, и что произойдёт, если не задать WORKDIR. Вы столкнётесь с ошибками «no such file or directory» даже тогда, когда файл вроде бы существует — потому что в контейнере не хватает нужной libc.</p><p>Отдельный повод для размышлений — Alpine. Его любят за размер и минимализм, но он использует musl вместо glibc, и не всё с ним работает корректно. В процессе сборки на практике увидите, почему иногда проще остаться на Debian Slim, чем пытаться адаптировать всё под Alpine.</p><p>Этот эксперимент не нужен для продакшена — он нужен вам, как разработчику. Прокачивает понимание, как устроен Docker, что по-настоящему важно приложению для запуска, и какие зависимости вы добавляете бессознательно.</p><h2>Делайте разные варианты Docker-образов</h2><p>Хороший Dockerfile — тот, который гибко адаптируется под разные сценарии: продакшен, отладку, тестирование, запуск на ARM или x86. Если вы умеете собирать только один универсальный образ — вы ещё не освоили Docker по-настоящему.</p><p>Попробуйте собрать сразу несколько версий своего образа: на Debian и на Alpine, с минимальным размером и с полным набором утилит, для amd64 и arm64. Добавьте build-аргументы (ARG) — они позволяют передавать параметры на этапе сборки: выбрать базовый образ, включить или выключить зависимости, задать переменные окружения. Используйте RUN if или шаблонизацию через Dockerfile.template, чтобы варьировать поведение без дублирования кода.</p><p>Вот типичный пример: в режиме отладки вам нужен образ с установленным curl, vim, доступом к логам и расширенной трассировкой. А в продакшене — максимально облегчённый, с удалёнными временными файлами, сжатым слоем и только необходимыми бинарниками. Один и тот же проект — два разных образа. Добавьте сюда ещё поддержку разных архитектур (multi-arch build через --platform), и вы выйдете на уровень CI/CD, где из одного пайплайна собирается три-четыре артефакта.</p><p>Такая практика решает сразу несколько задач. Во-первых, помогает лучше понять, как влияет каждый шаг сборки на финальный размер и поведение контейнера. Во-вторых, избавляет от лишних костылей, когда на проде всё работает, а на локалке — нет. И главное — прокачивает навык автоматизации. Один Dockerfile, разные образы, ноль копипасты.</p><h2>Поиграйте в «А что если запустить чужой (небезопасный) код?»</h2><p>Представьте задачу: вам нужно запустить код, который написал кто-то другой. Вы не уверены, что он безопасен. Это может быть скомпилированный бинарник, питоновский скрипт или даже npm-зависимость с подозрительным хуком. Где-то в коде может быть rm -rf /, попытка выйти за пределы контейнера, установить рутовый доступ или просто майнить крипту. И теперь этот код запускается на вашей машине — внутри Docker.</p><p>Кажется, контейнер защитит? Не всегда.</p><p>Docker не является полноценной песочницей. По умолчанию контейнер может обращаться к файловой системе, к ядру и к хостовым ресурсам — особенно если вы запускаете его                 с --privileged или без ограничения пользователя. Даже docker run -it ubuntu работает от root внутри контейнера, что уже создаёт риски.</p><p>Если вы действительно хотите запустить небезопасный код, нужно жёстко ограничить контейнер:</p><ul><li>отключить права root (через --user);</li></ul><ul><li>запретить модификацию файловой системы (--read-only);</li></ul><ul><li>отобрать лишние возможности ядра (--cap-drop=ALL);</li></ul><ul><li>включить seccomp-профиль, AppArmor или SELinux;</li></ul><ul><li>отключить доступ к сети или монтированию сокетов.</li></ul><p>Список можно продолжать. Главное — понять, что Docker по умолчанию не даёт изоляции на уровне VM. Если вы работаете с кодом, которому не доверяете, этого может быть недостаточно.</p><p>Это упражнение учит думать о безопасности как о процессе. И особенно важно пройти его, если вы когда-нибудь планируете запускать user-generated code: плагины, кастомные скрипты, пайплайны CI. Только на практике становится ясно, где заканчиваются возможности Docker и начинаются границы настоящей песочницы.</p><h2>Работайте без Docker CLI</h2><p>Если убрать Docker CLI — что останется? Больше, чем кажется.</p><p>Docker ― это не единый монолит. Он работает поверх набора инструментов и стандартов: buildkit, containerd, спецификация OCI. CLI просто прячет эту архитектуру за удобными командами: docker build, docker run, docker push. Но всё, что кажется магией, можно повторить вручную.</p><p>Попробуйте отказаться от docker как от инструмента. Сконфигурируйте buildctl напрямую и соберите образ без Dockerfile. Или вообще создайте его вручную: сформируйте структуру, описания слоёв, метаданные, манифест. Прочитайте спецификацию <a href="https://github.com/opencontainers/image-spec">OCI Image Format </a>и идите по ее шагам. Понадобится tar, sha256sum, немного JSON — и внимательность.</p><p>Образ собрали? Отлично. Теперь отправьте его в реестр без docker push. Используйте oras, skopeo или curl с аутентификацией и ручной отправкой слоёв по HTTP API. Узнаете много нового: как работает digest, что такое manifest list и зачем нужны media types.</p><p>Наконец, запустите контейнер без docker run. Через ctr, runc или даже напрямую с помощью systemd-nspawn.</p><p>Зачем это нужно? Чтобы воспринимать Docker глубже. Так, вы понимаете, как устроен pipeline сборки и запуск контейнера, и точнее управляете им. Особенно это важно в продакшн-среде: когда образы не собираются, push падает, реестр отвечает 403, а пайплайн горит.</p><p>Ты точно программист, если читаешь это! Больше мемов, инсайтов и боли кодеров <a href="https://t.me/+ajgz7pDecB4xZTI6">тут</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Сломал ногу — выучил Python: как ИИ помог экс-консультанту стать программистом за 100 дней</title>
      <link>https://tproger.ru/news/slomal-nogu---vyuchil-python--kak-ii-pomog-eks-konsultantu-stat-programmistom-za-100-dnej</link>
      <comments>https://tproger.ru/news/slomal-nogu---vyuchil-python--kak-ii-pomog-eks-konsultantu-stat-programmistom-za-100-dnej?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/slomal-nogu---vyuchil-python--kak-ii-pomog-eks-konsultantu-stat-programmistom-za-100-dnej</guid>
      <description><![CDATA[<p>Экс-консультант стал программистом за 100 дней с помощью ChatGPT и Python — собрал портфолио, прошел собеседование и получил работу без курсов и Leetcode</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/slomal-nogu---vyuchil-python--kak-ii-pomog-eks-konsultantu-stat-programmistom-za-100-dnej">Сломал ногу — выучил Python: как ИИ помог экс-консультанту стать программистом за 100 дней</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 02 Jun 2025 18:09:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Эрик Леннрот, бывший консультант в Big Four, <a href="https://eriklonnroth.com/100-days/">стал программистом</a> всего за 100 дней — благодаря больничному, упорству и ChatGPT.</p><p>Все началось, когда 38-летний Эрик сломал лодыжку во время пробежки. Лежа дома, он увидел в соцсетях истории о том, как люди запускали SaaS-проекты за выходные с помощью ИИ. Это вдохновило его на третью попытку освоить программирование.</p><h2>Учеба без бюджета — только ИИ и бесплатные курсы</h2><p>Эрик решил не тратить ни копейки на курсы. Он выбрал Python как основной язык и прошел CS50 от Гарварда — сначала курс по Python, потом по веб-разработке.</p><p>С ИИ он работал как с личным наставником: писал псевдокод, просил ChatGPT раскритиковать его, затем вручную набирал код. Синтаксис — по запросу. Такой подход позволил быстрее понять концепции, а не просто запомнить команды.</p><p>Свой первый проект он сделал по мотивам Wordle — игру на угадывание слов он реализовал на Python под названием PyWordle.</p><p>Затем собрал полноценное веб-приложение Make My Meal Plan: генерация рецептов, списки покупок, TailwindCSS, Django, PostgreSQL, CI/CD и даже тестирование через Playwright — все своими руками за 150 часов. Проект включал 25 000 строк кода.</p><h2>Работа после 100 дней</h2><p>Через 3 месяца обучения он получил оффер. Без Leetcode, без алгоритмических задач — только благодаря портфолио. Его взяли на испытательный срок в консалтинговую компанию в Лондоне, чтобы он заменил Excel и устаревшие тулзы на автоматизированные пайплайны.</p><p>Эрик честно рассказал, что научился программировать за пару месяцев и активно использовал ИИ — и все равно его приняли.</p><p>По его словам, весь путь стоил $120 — подписки на Claude Pro и Cursor. Все остальное — бесплатные курсы и открытые материалы. Недавно он прошел испытательный срок, получил повышение и теперь работает с геоданными и статистикой, используя pandas и ArcGIS. Параллельно пишет Django-приложение для анализа населения и доходов в Великобритании.</p><h2>«Точно вовремя» вместо «на всякий случай»</h2><p>Эрик считает, что его история — отражение новой реальности: вместо долгих программ и формального образования — самостоятельное обучение под задачи, с фокусом на инициативу и реальные результаты. ИИ в этом — не костыль, а катализатор.</p>]]></content:encoded>
    </item>
  </channel>
</rss>