<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Software-Testing.Ru Blog Aggregator</title>
<link>http://software-testing.ru/</link>
<description>Software-Testing.Ru Blog Aggregator</description>
<language>ru-ru</language>
<copyright>Copyright (C) 2009-2012 Software-Testing.Ru</copyright>

<item>
<title>Как распутаться: руководство для застрявших тестировщиков</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/12hs/guide-for-testers-or-anyone-else-who-feels-stumped.jpg" mce_src="https://software-testing.ru/images/stories/library/12hs/guide-for-testers-or-anyone-else-who-feels-stumped.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Эди Стоукс (Ady Stokes)<br /><strong><a href="https://www.ministryoftesting.com/articles/how-to-get-unstuck-a-guide-for-testers-or-anyone-else-who-feels-stumped" mce_href="https://www.ministryoftesting.com/articles/how-to-get-unstuck-a-guide-for-testers-or-anyone-else-who-feels-stumped" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p><h1>Почему я написал эту статью</h1>
<p>Все мы иногда застреваем. Временами нам не удаётся найти путь вперёд или определить следующий шаг, который нужно сделать. С этим можно столкнуться, когда вы решаете задачу, создаёте тестовые артефакты или думаете, как что-то сформулировать или объяснить.</p>
<p>Быть «работником умственного труда» непросто. Требуются усилия, дисциплина и практика, чтобы думать за деньги. Но именно на это подписывались тестировщики, и именно это нам и предстоит делать.</p>
<p>Давайте поговорим о «затыках» на работе. Что это такое на самом деле, почему это происходит и что мы можем сделать, чтобы продвинуться дальше?</p>]]></description>
<link>https://www.software-testing.ru/library/around-testing/processes/4459-how-to-get-unstuck-a-guide-for-testers-or-anyone-else-who-feels-stumped</link>
<pubDate>Tue, 14 Apr 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Лучшие практики автоматизации тестирования: 9 принципов стабильных автотестов</title>
<description><![CDATA[<p>Автор: Никита Филонов, автор курса&nbsp;<a href="https://stepik.org/a/240104" mce_href="https://stepik.org/a/240104" target="_blank">«Автоматизация тестирования UI + API с Python»</a><br /><a href="https://habr.com/ru/articles/965890/" mce_href="https://habr.com/ru/articles/965890/" target="_blank" style="">Оригинальная публикация</a></p>
<p>Представьте утро. Вы открываете ноутбук, заходите в&nbsp;Allure&nbsp;— и видите красное море.</p><p><img src="https://software-testing.ru/images/stories/library/11hs/best-practices-for-test-automation1.jpg" mce_src="https://software-testing.ru/images/stories/library/11hs/best-practices-for-test-automation1.jpg" alt="" /></p><p>Падает половина автотестов, часть&nbsp;— «временно», часть&nbsp;— «иногда». Почти каждый день начинается с&nbsp;одних и тех&nbsp;же починок, дебага и «вроде теперь стабильно».</p><p>Знакомо? Скорее всего да, иначе вы&nbsp;бы не&nbsp;открыли эту статью.</p><p>Сегодня хочу спокойно, без&nbsp;паники и взаимных обвинений, взглянуть на&nbsp;эту ситуацию со стороны. Почему тесты ведут себя так непредсказуемо? Откуда берётся эта нестабильность, и почему она кажется вечной?</p><p>На&nbsp;самом деле это не&nbsp;случайность. Это закономерный итог накопленных технических решений, компромиссов и, порой, отсутствия инженерной стратегии.</p><p>Каждый упавший тест&nbsp;— это не&nbsp;просто «флак» или «ошибка окружения». Это пропущенная проверка, потерянное доверие и часы бесполезных фиксов. Если таких тестов сотни, то со временем автотесты перестают&nbsp;быть инструментом качества&nbsp;— и превращаются в&nbsp;источник шума.</p><p>Но&nbsp;из этого есть выход. Разберём, как&nbsp;подойти к&nbsp;автоматизации осознанно, чтобы тесты действительно помогали, а&nbsp;не&nbsp;мешали. Никакой философии, только инженерные практики и работающие приёмы.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-automation/4513--best-practices-for-test-automation</link>
<pubDate>Sun, 12 Apr 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Четыре причины прекратить тестирование: правильный баланс качества ПО</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/12hs/four-reasons-to-stop-testing.jpg" mce_src="https://software-testing.ru/images/stories/library/12hs/four-reasons-to-stop-testing.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Штефан Дирнштофер (Stefan Dirnstorfer)<br /><strong><a href="https://www.ministryoftesting.com/articles/four-reasons-to-stop-testing-finding-the-right-balance-in-software-quality" mce_href="https://www.ministryoftesting.com/articles/four-reasons-to-stop-testing-finding-the-right-balance-in-software-quality" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p><p>Для сокращения усилий тестирования или полного прекращения тестирования какой-то области может быть множество причин.</p>
<p>Тестирование – неотъемлемая часть разработки ПО. После первичных испытаний в ходе разработки флаг переходит к структурированному, зачастую автоматизированному процессу. Регулярный прогон тестов для проверки соответствия требований позволяет поддерживать непрерывное качество функциональности.</p>
<p>Но даже самое тщательное тестирование не может покрыть все – некоторые участки продукта остаются непротестированными. Итак, что же выкинем за борт? Когда разумно прекращать тестировать? И как решить, какие компоненты не заслуживают излишнего рвения?</p>]]></description>
<link>https://www.software-testing.ru/library/around-testing/processes/4460-four-reasons-to-stop-testing-finding-the-right-balance-in-software-quality</link>
<pubDate>Tue, 07 Apr 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>TechWriter Days 3. Как это было</title>
<description><![CDATA[<p>&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR00cfRlK5w0Cd54H8WH1RAi6syhieBzMg2OSW8aNk1WwkQGzZvRR6WAOdFZgYl2gzKhir_zZF9On3rvjjsdhSKETNuESX00qhtx9HQjcs3C-wt1LAwrOgZmnnSO71qCulz5TVEphDaE3CA74ECkygdlDP6LfUnWBSdzMesO-yO2v8rtSWFuiHGY8FcD0/s1462/22.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1096" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR00cfRlK5w0Cd54H8WH1RAi6syhieBzMg2OSW8aNk1WwkQGzZvRR6WAOdFZgYl2gzKhir_zZF9On3rvjjsdhSKETNuESX00qhtx9HQjcs3C-wt1LAwrOgZmnnSO71qCulz5TVEphDaE3CA74ECkygdlDP6LfUnWBSdzMesO-yO2v8rtSWFuiHGY8FcD0/s320/22.jpg" width="240" /></a></div><br /><p></p><p>27-28 марта в Москве прошла 3-я конференция для технических писателей —&nbsp;TechWriter Days 3.</p><p>Сайт конференции —&nbsp;<a href="https://techwriterdays.ru/">https://techwriterdays.ru/</a>.</p><p>Программа —&nbsp;<a href="https://techwriterdays.ru/ru/program/137253">https://techwriterdays.ru/ru/program/137253</a></p><p><br /></p><p>«Я там был, мед, пиво пил» © И хочу поделиться с вами. Конференция отпочковалась от конференции аналитиков, так как тех писы уже — дело стандартное, есть отдельные должности под них.</p><p>А я сама в свое время и аналитиком на проектах была, да и с документацией работала постоянно, потому что я — бюрократ ))) Так что очень интересно было посетить эту конференцию.</p><p>Организация тут, как всегда у Владислава с Татьяной Орликовых, на высоте. Еда, чай, место для отдыха, куча всяких активностей, да и просто интересные доклады! Расскажу про те, где я была и где хотела бы.</p><span><a name='more'></a></span><p><br /></p><h3 style="text-align: left;">Мой список "посмотреть потом"</h3><p></p><ol style="text-align: left;"><li><a href="https://techwriterdays.ru/ru/talk/137362" target="_blank">Тихая эпидемия в IT, или Почему выгорают технические писатели</a>&nbsp;— плохо себя чуствовала, не осталась на последние доклады, ушла домой. Но исходно ставила галочку сходить на доклад. Полистала слайды — интересно и жизненно, особенно про команды, где твою роль не понимают. Хотя это история про выгорание, а хотелось бы "что делать в такой команде", но тоже интересно)</li><li><a href="https://techwriterdays.ru/ru/talk/141107" target="_blank">Использование стилей MS Word без страха</a>&nbsp;— тут обещают реальные кейсы из жизни, я такое люблю)</li><li><a href="https://techwriterdays.ru/ru/talk/140867" target="_blank">Внутреннее продвижение базы знаний: от справочника до культуры работы с информацией</a>&nbsp;— внутреннее продвижение тоже очень актуальная тема!</li><li><a href="https://techwriterdays.ru/ru/talk/140956" target="_blank">Документация как продукт: от текстов к стратегии и управлению опытом</a>&nbsp;— документация как отдельный продукт, в том числе улучшаюший онбординг. Это прям откликает мне, я сама делала онбординг))</li><li><a href="https://techwriterdays.ru/ru/talk/141084" target="_blank">Отчеты и метрики в документации: как считать влияние на бизнес</a>&nbsp;— всегда интересно, кому какие метрики зашли</li></ol><p><br /></p><h2 style="text-align: left;">Какие доклады я слушала</h2><p><br /></p><h3 style="text-align: left;">Кому доверить ревью API — техпису или искусственному интеллекту.&nbsp;Камила Мазаева</h3><p><a href="https://techwriterdays.ru/ru/talk/141082" target="_blank">Ссылка на доклад</a></p><p>Камила работает в Альфабанке, где много всяких разных проектов. Путь документации там такой:</p><p>Аналитик → техпис → разработка</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRYHo17r_xD-zmWiw5NC6TD6HhFOw8kDPI8CUmpDQJbZy4qrO_7NY3QsEldmgElN7OJnhHgN2Dm-o3NlP4YmPQWVg2g9D9Bsg3B97htdoUbtQYYt7bjtrIlTVcvykGzkVy65-AD8lZjfHnRJKlspkMuoP_hVExYBGr063quRj2sgkrgxgIx4HUJ5EvJSM/s1280/11.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRYHo17r_xD-zmWiw5NC6TD6HhFOw8kDPI8CUmpDQJbZy4qrO_7NY3QsEldmgElN7OJnhHgN2Dm-o3NlP4YmPQWVg2g9D9Bsg3B97htdoUbtQYYt7bjtrIlTVcvykGzkVy65-AD8lZjfHnRJKlspkMuoP_hVExYBGr063quRj2sgkrgxgIx4HUJ5EvJSM/s320/11.jpg" width="320" /></a></div><p>Технический писатель нужен, потому что документацию пишут разные люди, в разных стилях. А нужен единый, за этим следит техпис. Но техписы тонут в работе — когда приходят документы с опечатками, разным стилем и тд.</p><p>Поэтому решили нудную работу делегировать ИИ. Посмотрели, что да как, и решили сделать так, чтобы ИИ не вносил правки в текст, а присылал отчет по найденным проблемам:</p><p></p><ul style="text-align: left;"><li>уровень критичности</li><li>где проблема?</li><li>как написать лучше</li></ul><div>И человек уже принимает или отклоняет такие правки. В итоге аналитик открывает чат с ботом, куда уже внесен нужный промт → дал документацию, получил фидбек. Красота!</div><div><br /></div><div>Ну и выводы — ИИ хорошо правит простые опечатки и быстро обрабатывает документы. Но не очень хорош с контекстом, терминологией и работе с неоднозначностью.</div><div><br /></div><div>И, конечно, нужно помнить, что сердце ИИ — хороший промт!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNxsMg9G33oNeYk99pdViv49npB4spfap9KInrtPxtFyKveIobEBBaJen3LwZw0biRu22oy2PF_EzRXIxc8tmIgBFyB2B9JjhRPBbmkqcVkL8ngdFo3XMqzl2vq9Zc_LdPE-Pigf_y_9lpeZJURLomidNeVYty21PVp_J9mPtOX9loXQgC1_WJnksBAtQ/s1280/12.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNxsMg9G33oNeYk99pdViv49npB4spfap9KInrtPxtFyKveIobEBBaJen3LwZw0biRu22oy2PF_EzRXIxc8tmIgBFyB2B9JjhRPBbmkqcVkL8ngdFo3XMqzl2vq9Zc_LdPE-Pigf_y_9lpeZJURLomidNeVYty21PVp_J9mPtOX9loXQgC1_WJnksBAtQ/s320/12.jpg" width="320" /></a></div><br /><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Через тернии к звездам: как мы перевезли всю документацию Яндекса на Diplodoc.&nbsp;Эльвира Гильманова и&nbsp;Михаил Кошкин</h3><div><a href="https://techwriterdays.ru/ru/talk/140923" target="_blank">Ссылка на доклад</a></div><div><br /></div><div>Довольно интересный рассказ о переезде документации с одной платформы на другую. Переезд занял 5 лет! ????</div><div><br /></div><div>Раньше жили на DITA, которая выглядела как документация из 2000-х годов, перешли на YFM.</div><div>Всякое бывало, что-то предусмотрели, а что-то — нет.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh48ip61s-bbUIlZU5fbujPOKdKZxDxPLiT5_vymQyBVMp4qcTaHfsbBAV9uqXh8A_Me6nt206rZ4w3_NgbQcoUB2khdJ6GhmLJcOwaSpgeDj2WRXiYjQtzFBmEtxQLsZpZrqY5fsTM-7Q8c4NTEs4jQhD-MGMvFhh5QLimUYIOV6ueSRB0HQxLX-QijV0/s1280/13.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh48ip61s-bbUIlZU5fbujPOKdKZxDxPLiT5_vymQyBVMp4qcTaHfsbBAV9uqXh8A_Me6nt206rZ4w3_NgbQcoUB2khdJ6GhmLJcOwaSpgeDj2WRXiYjQtzFBmEtxQLsZpZrqY5fsTM-7Q8c4NTEs4jQhD-MGMvFhh5QLimUYIOV6ueSRB0HQxLX-QijV0/s320/13.jpg" width="320" /></a></div><br /><div>Были и косяки — нужно было объединить документацию. Посмотрели, она написана на разных платформах, провели диагностику, какая лучше, выбрали... DITA. И через месяц узнали, что все пеередут в YFM.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3E8Y0J57vzN3ubt5BxRqPQv02mQxAogwxUUh4620SC-ZaXw2uQsoNmhNruIG6aXPwZm0pt-bz_hUl5cAXYJI2g08ZIdd_nFoLiyMR1Im3OlLSZmLe6UHHU7aCNor-g29xBpf5FJZdT6MA4_IfKRIbAQrF9GS0Xqr6TeNtgeOPJo0izhXnqyNkhgvWzok/s1280/14.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3E8Y0J57vzN3ubt5BxRqPQv02mQxAogwxUUh4620SC-ZaXw2uQsoNmhNruIG6aXPwZm0pt-bz_hUl5cAXYJI2g08ZIdd_nFoLiyMR1Im3OlLSZmLe6UHHU7aCNor-g29xBpf5FJZdT6MA4_IfKRIbAQrF9GS0Xqr6TeNtgeOPJo0izhXnqyNkhgvWzok/s320/14.jpg" width="320" /></a></div><br /><div>Была ситуация со старым багом, который вроде как не очень хорошо ловится, вот и не правили. А потом выяснилось, что популярная документация не могла из-за него мигрироваться. Пытались сделать костыли — заняло квартал с нулевым результатом. А переписать с нуля заняло месяц.</div><div><br /></div><div>Так что хоть "переписать с нуля" и боятся, иногда это самый лучший вариант. И даже самый быстрый, хотя кажется наоборот))</div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Собрать документацию в один клик: опыт применения языковых моделей и шаблонизаторов.&nbsp;Никита Осокин</h3><div><a href="https://techwriterdays.ru/ru/talk/139167" target="_blank">Ссылка на доклад</a></div><div><br /></div><div>Ребята работают по ГОСТ — а это часто не про «написать документацию», а про коммуникации, про «правильную» структуру документа.</div><p></p><p>И вот мучались, мучались, и решили сделать свое решение. Да, оно в маркдауне и после ворда писать бывает сложновато, но тут у них ИИ, наученный помогать и подсказывать, как что-то сделать.</p><p>В итоге раньше переименовали какое-то название — это надо открыть ворд, ctrl + f, поиск, замена... А если разные падежи, оно ещё и не работает! Что сделали? Единый банк переменных.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9j3x0tTU2rxAQnvyi8KYHalxGp3IASlVwJ6xPhYTMnqutMCN8zhFagdUbCt0wdZPuxj5is4BfnMJwVtT_Bg0utiIXlpL-km7gLg34K4UtTQwcGOnW50VxncWRvVGTth-MC5e2Glv0nRiE7kKW-Db3i3qANexlj84dxlXYk9avzhfooCDHNdkkaz3LD8c/s1950/15.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1950" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9j3x0tTU2rxAQnvyi8KYHalxGp3IASlVwJ6xPhYTMnqutMCN8zhFagdUbCt0wdZPuxj5is4BfnMJwVtT_Bg0utiIXlpL-km7gLg34K4UtTQwcGOnW50VxncWRvVGTth-MC5e2Glv0nRiE7kKW-Db3i3qANexlj84dxlXYk9avzhfooCDHNdkkaz3LD8c/s320/15.jpg" width="320" /></a></div><br /><p>Ну и не только его, конечно)) В итоге что получили? Приходит заказчик:</p><p>— Ой, а давайте всё же систему именовать не АС "Документирование", а АС "Техпис"</p><p>Раньше такие просьбы за неделю до сдачи проекта вызывали желание выйти в окно, а теперь "да легко"</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgurONxnqv6h4dtNaUhPW3iwLNsY_UqZyfyKx_FuXjWjYW_glY3EN2C6Rwu87nVBt_T8xyAwxOfVm1ifOsFls4xrcLCHwgmNktYJPoP1GG_KfeRQWcHh4bznbsX4dABHRrJkDcQ3siU8AQVUBviTJP1oDt7fbPWbkyn5kWt3A_elUV7EydyshrP3CqsMR0/s1950/17.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1950" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgurONxnqv6h4dtNaUhPW3iwLNsY_UqZyfyKx_FuXjWjYW_glY3EN2C6Rwu87nVBt_T8xyAwxOfVm1ifOsFls4xrcLCHwgmNktYJPoP1GG_KfeRQWcHh4bznbsX4dABHRrJkDcQ3siU8AQVUBviTJP1oDt7fbPWbkyn5kWt3A_elUV7EydyshrP3CqsMR0/s320/17.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p><br /></p><h3 style="text-align: left;">Масштаб, сложность, автоматизация: как агенты изменили процесс документирования в Yandex Cloud.&nbsp;Александр Яковлев</h3><p><a href="https://techwriterdays.ru/ru/talk/140813" target="_blank">Ссылка на доклад</a></p><p>Александр рассказал про их опыт внедрения ИИ. Какие инструменты использовали:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjepD3MVDj_JCHQ13GwajFNRKH4cvoxyB6bzqNhjAa35jhw6qYplCQr2feU5QYdrza77vVPkXVGGTkY7GSpRRyJ0lwDWVskTT8vh0lZBi9YDJYV1CblLam6ZzExdnEBHjtmBKbttykfmbG1vrtB6_6fuqHE2_Fudgo1sx_YMn-gYGiBxZRENK_KTj_I4NM/s1950/18.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1950" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjepD3MVDj_JCHQ13GwajFNRKH4cvoxyB6bzqNhjAa35jhw6qYplCQr2feU5QYdrza77vVPkXVGGTkY7GSpRRyJ0lwDWVskTT8vh0lZBi9YDJYV1CblLam6ZzExdnEBHjtmBKbttykfmbG1vrtB6_6fuqHE2_Fudgo1sx_YMn-gYGiBxZRENK_KTj_I4NM/s320/18.jpg" width="320" /></a></div><br /><p>Методом проб и ошибок пришли к таким выводам:</p><p></p><ul style="text-align: left;"><li>агент не работает с гитом, не пушит сам — иначе он такого напушит, что только всё испортит</li><li>тестирование документации тоже на людях — ИИ бы справился, но это хорошее время для ревью.</li></ul><div>Что входит в настройку агента:</div><div><ul style="text-align: left;"><li>системный промт</li><li>режим</li><li>фоновые знания</li></ul><div>Где в итоге агент может реально приносить пользу?</div></div><div><ol style="text-align: left;"><li>Создание структурированной информации — пошаговые инструкции, обзорные статьи</li><li>Обновление существующей документации на основе тикетов, скринов, истории изменений</li><li>Подготовка Release Notes</li><li>Анализ актуальности документации из истории изменений и релизов инструментов.</li></ol><div>Был кейс — уволился человек, который отвечал за несколько проектов. Попросили ИИ проанализировать документацию на основании как раз таки истории изменений. Да, это заняло 1.5 млн токенов, но был вау-результат и найдено много проблем в доке.</div></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Changelog на лету: автоматическая генерация с помощью GitLab.&nbsp;Татьяна Кириллова</h3><div><a href="https://techwriterdays.ru/ru/talk/141108" target="_blank">Ссылка на доклад</a></div><div><br /></div><div>В чем разница между RN и CL?</div><div><ul style="text-align: left;"><li>Release Notes — документация для пользователей</li><li>Changelog — для разработчиков, что вообще и где менялось.</li></ul><div>Так вот. Схема до автоматизации, техпис собирает change log сам:</div></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMqqghrqhbOW3FWbHDh51Z5Fs7L1YHmNzq28iFhjJ_h1NwblUPJguwlDLwWSRrhfr1j0AsVsrHMiUGjuyw-lZiogqxlRiD8vvg8vLv6TvpFqgykgTsyVUulJ75dguFdegNHNC6Bus8ZkqzKY-QEv4vgYZPzEmhqtdE7AV4w4GdQQA0bW71RRivVTnNWWM/s1462/19.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1096" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMqqghrqhbOW3FWbHDh51Z5Fs7L1YHmNzq28iFhjJ_h1NwblUPJguwlDLwWSRrhfr1j0AsVsrHMiUGjuyw-lZiogqxlRiD8vvg8vLv6TvpFqgykgTsyVUulJ75dguFdegNHNC6Bus8ZkqzKY-QEv4vgYZPzEmhqtdE7AV4w4GdQQA0bW71RRivVTnNWWM/s320/19.jpg" width="240" /></a></div><br /><div>Неприкольно! И трудозатратно. Поэтому&nbsp;описали критерии "что хотим от автоматизации", погуглили инструменты и сравнили по своим критериям:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgklD5hvLwSMnonxnydhQ-cSGY1ZkG-rNMwWpqkiYQrMpxHfuhQiMo8P4QUdge_E83mVn_EhxaQjTHcgA6RdYDMGSCcj6fDiShKBCSZxHnHSiA9r4O4KbRtdvpBWpnmsCmAqANEPTCplt4SYcbUsgj_OGgF7sfPBvRQkPtNfIThw0iOKTwWdVFLxbeXnjs/s1950/20.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1950" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgklD5hvLwSMnonxnydhQ-cSGY1ZkG-rNMwWpqkiYQrMpxHfuhQiMo8P4QUdge_E83mVn_EhxaQjTHcgA6RdYDMGSCcj6fDiShKBCSZxHnHSiA9r4O4KbRtdvpBWpnmsCmAqANEPTCplt4SYcbUsgj_OGgF7sfPBvRQkPtNfIThw0iOKTwWdVFLxbeXnjs/s320/20.jpg" width="320" /></a></div><br /><div><br /></div><div>Простой подход, но зато выбор становится очевиден!</div><div><br /></div><div>НО! Возникла проблема — робот не человек, ему нужен шаблон. И надо вводить соглашение о коммитах, иначе все пишут как душе угодно, и собранный ченджлог будет просто нечитаем. А это надо убедить разработчиков писать "как положено" )))</div><div><br /></div><div>В итоге:</div><div><ul style="text-align: left;"><li>пока проводят ревизию сообщений</li><li>планируют прикрутить автоматическое соглашение</li></ul><div>Ну и закрепили структуру сообщения:</div></div><div><ul style="text-align: left;"><li>Номер задачи — обязательно</li><li>Тип — fix, new...</li><li>Описание&nbsp;</li><li>Тело (необязательное)</li></ul><div>Пока обкатывают, впереди ещё долгий путь)</div></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Матрица зрелости процессов работы с текстом в ИТ.&nbsp;Анна Терновая</h3><div><br /></div><div><a href="https://techwriterdays.ru/ru/talk/140637" target="_blank">Ссылка на доклад</a></div><div><br /></div><div>Зачем вообще нужна матрица зрелости? Есть несколько разных причин:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioffuYJ1JqEmZAQUg0WLjuI8zQYavFRvYo_oVAV37DFwSUOcxefQFqX9EvrrvLBQfY9puk0JOS7ZMjg3uWLmbTGeXpe3XjlD5WSVkpGXIIbopoAo3e_jwfOzpIGDxgifD93QD5nG0vK5I6kM-aKFhqN1-zW2lWucIqN-gtT-jWD-5255zMUS_EYk99c6o/s1950/29.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1950" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioffuYJ1JqEmZAQUg0WLjuI8zQYavFRvYo_oVAV37DFwSUOcxefQFqX9EvrrvLBQfY9puk0JOS7ZMjg3uWLmbTGeXpe3XjlD5WSVkpGXIIbopoAo3e_jwfOzpIGDxgifD93QD5nG0vK5I6kM-aKFhqN1-zW2lWucIqN-gtT-jWD-5255zMUS_EYk99c6o/s320/29.jpg" width="320" /></a></div><br /><div>Анна рассказала про то:</div><div><ul style="text-align: left;"><li>Какую литературу использовали при изучении темы</li><li>Какую матрицу выбрали себе</li></ul><div>Главная фишка — делить каждую колонку на "наших и ваших", команду разработки и команду документирования. Потому что уровни зрелости могут быть разные и повлиять на чужую команду вы можете не всегда.</div></div><div><br /></div><div>Ну а дальше смотрим на примерах, как могут выглядеть эти матрицы и что с этим делать. Когда уже есть внедренное решение, всегда можно показать "незрелой" команде пользу — смотрите, вот мы выросли в матрице и какие это профиты дало!&nbsp;</div><div><br /></div><div>Так что нужно заручиться поддержкой одной из команд, а потом история успеха будет продвигать вас сама =)</div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Подготовка к документированию: читаем ТЗ, собираем информацию.&nbsp;Софья Новикова</h3><div><a href="https://techwriterdays.ru/ru/talk/138958" target="_blank">Ссылка на доклад</a></div><div><br /></div><div>Софья рассказывала, как собирать информацию из разных источников:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv2hhuxFD3OM5JWkCwBVjm80ouRCIPJgpQNgcXr2tGjuZ1xpIdBIN_gsDry5dAZlKQq5a96NZVVe2wPiqKE1tUz6Cy2kmV0ApBrQQX06Du2E9AFjo6saLewTa2xraLCfNWHS057qA3IDvyoLbTsniIKhxGvVYeMeD65HeBdfHTaVrgpYl1jldnz43TYLU/s1280/21.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv2hhuxFD3OM5JWkCwBVjm80ouRCIPJgpQNgcXr2tGjuZ1xpIdBIN_gsDry5dAZlKQq5a96NZVVe2wPiqKE1tUz6Cy2kmV0ApBrQQX06Du2E9AFjo6saLewTa2xraLCfNWHS057qA3IDvyoLbTsniIKhxGvVYeMeD65HeBdfHTaVrgpYl1jldnz43TYLU/s320/21.jpg" width="320" /></a></div><br /><div>А ещё, если документация разбита на разделы, техписы вычитывают каждый раздел — всё ли понятно? А если нет, термины можно сначала погуглить или спросить у ИИ, чтобы не отвлекать коллег лишний раз вопросами!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4mdNpg2PBoioKgPW_Q5fDpWcT7ntyc7YrCojSuInxQJbmx_Pxf0TfGUM8EVbDgry6Lz9ss1tQuSxpbILcbYou0WVwyLE63gagTXzYPDP0JvP5OkjB_bK0R7pSeD6WI8c6y02NXpr7r-sNq32D-5YHu6iX8PxvVaBjWFfpX-sPIEaEmGvlBdzAQMMMDT8/s1950/23.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1950" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4mdNpg2PBoioKgPW_Q5fDpWcT7ntyc7YrCojSuInxQJbmx_Pxf0TfGUM8EVbDgry6Lz9ss1tQuSxpbILcbYou0WVwyLE63gagTXzYPDP0JvP5OkjB_bK0R7pSeD6WI8c6y02NXpr7r-sNq32D-5YHu6iX8PxvVaBjWFfpX-sPIEaEmGvlBdzAQMMMDT8/s320/23.jpg" width="320" /></a></div><br /><div>В общем, если информации у вас мало, учитесь её собирать из разных мест, в том числе у коллег. База? База, но о ней надо помнить.</div><div><br /></div><div><br /></div><h3 style="text-align: left;">Документация как зеркало продукта: роль технических писателей в улучшении пользовательского опыта.&nbsp;Эльвира Дёгтева</h3><div><a href="https://techwriterdays.ru/ru/talk/139119" target="_blank">Ссылка на доклад</a></div><div><br />Эльвира рассказала кейсы из жизни, когда пытаешься сделать мелкую задачу, которая выливается в большой рефакторинг))</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYOy_CVAmLFA1JKVH_svz5fSaiYiaG_RCEL_Xlo664WDtOSdGBj0KKm4Qi2Kr4hyphenhyphenqwu9p9NdjPN8UGnMhuPNmTrRTH55DSU60mibnvVmt6EA6Dbw3K7k5Yu2UzKPdoCZ-7piJDOi738e85VoeMK3sbeDHDQQpJqRTQ-PMS70k02K48RTU_reZxj8QZeN0/s1280/24.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYOy_CVAmLFA1JKVH_svz5fSaiYiaG_RCEL_Xlo664WDtOSdGBj0KKm4Qi2Kr4hyphenhyphenqwu9p9NdjPN8UGnMhuPNmTrRTH55DSU60mibnvVmt6EA6Dbw3K7k5Yu2UzKPdoCZ-7piJDOi738e85VoeMK3sbeDHDQQpJqRTQ-PMS70k02K48RTU_reZxj8QZeN0/s320/24.jpg" width="320" /></a></div><br /><div>Кейсы из жизни — это всегда интересно. И тут как раз кейсы из серии "пройти мимо, сделав вид, что всё ок, не моя же зона ответственности", или начать копать... И копать... И копать))) Интересные истории!</div><div><br /></div><div><br /></div><h3 style="text-align: left;">Трансфер знаний от уходящих сотрудников.&nbsp;Denis Mazin</h3><div><a href="https://techwriterdays.ru/ru/talk/140884" target="_blank">Ссылка на доклад</a></div><div><br /></div><div>Тут интересная история — каким-то образом ребята выявили, что 18% сотрудников в зоне риска ухода. И надо бы передать их знания, пока они не пропали...</div><div><br /></div><div>Накидали такую матрицу:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQbx6iepAPSz3YcOymoBNc4oeeQU9k1h89QjdrnvEeE_LjLPH6oAPZy3Od5u6YKHVQf_4Y9V5-CatZhu1a4pzfE1ht0LkEuTcZezBqDTz2BQLGruOWE5yBTJSWHuEmZz66EziAuK7o1zOWhKhB8XH9BMHfayBFa9cNpNtHDtepVvYi_spPSikA8O59bhk/s1950/25.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1950" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQbx6iepAPSz3YcOymoBNc4oeeQU9k1h89QjdrnvEeE_LjLPH6oAPZy3Od5u6YKHVQf_4Y9V5-CatZhu1a4pzfE1ht0LkEuTcZezBqDTz2BQLGruOWE5yBTJSWHuEmZz66EziAuK7o1zOWhKhB8XH9BMHfayBFa9cNpNtHDtepVvYi_spPSikA8O59bhk/s320/25.jpg" width="320" /></a></div><br /><div>Запланировали передачу знаний и понеслось... Сначала сотрудникам некогда этим заниматься. Благо начальство поддержало и поставило высокий приоритет задаче. Но всё равно работу тоже надо работать.</div><div><br /></div><div>В итоге за год сделали многое, и пришли к неожиданному выводу, что передача знаний — это не разовая акция, а постоянная. Уйти может любой, заболеть, а знания брать где? Так что ребята теперь работают над встраиванием этого процесса в основной.</div><div><br /></div><div><br /></div><h3 style="text-align: left;">Матрица итеративного редактирования. Анна Штольц&nbsp;</h3><div><a href="https://techwriterdays.ru/ru/talk/138854" target="_blank">Ссылка на доклад</a></div><div><br /></div><div>Редакторы постоянно сталкиваются со сжатыми сроками. Дают текст на 250 стр и говорят, что есть полчаса. Что делать?</div><div><br /></div><div>В идеале нулевым этапом надо текст просто прочитать — тогда поймешь, хватит времени или надо сразу просить сроки увеличить.</div><div><br /></div><div>Ну а потом идет итеративное вычитывание, потому что так проще, если держать в уме сразу всё, что-то обязательно пропустишь. Да и не всегда нужна полная и подробная вычитка.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ_VJ0qgw92qTtOIRybaT94O-wSj7dmQcHhaI1aQSDHvb9iJvRITUCWXE1NyrbsSlfbp1xCaDe-aLaNMyrjslHUod4pn1kq7z-mnskVfp5_HuHQA3FRNiSpWvG273XmcItlOB17tx6jZNzNGpvDiuuaHKYQT4OkQIWCmrvItcQ0VOwJr2LEKftSp5T_vc/s1280/26.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="960" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ_VJ0qgw92qTtOIRybaT94O-wSj7dmQcHhaI1aQSDHvb9iJvRITUCWXE1NyrbsSlfbp1xCaDe-aLaNMyrjslHUod4pn1kq7z-mnskVfp5_HuHQA3FRNiSpWvG273XmcItlOB17tx6jZNzNGpvDiuuaHKYQT4OkQIWCmrvItcQ0VOwJr2LEKftSp5T_vc/s320/26.jpg" width="240" /></a></div><br /><div><br /></div><div>Выделили такие этапы:</div><div><ol style="text-align: left;"><li>Корректура — почти на автомате, всякие опечатки (странно, что не передали это ИИ)</li><li>Литературная правка</li><li>Выравнивание стиля — много жаргона? Это плохо.</li><li>Фактчекинг — названия, имена, даты, логика повествования</li><li>Отделка</li></ol><div>Интересно было посмотреть со стороны, как преображается текст, так как Анна показывала все на конкретном примере, а в итоге «до — после».&nbsp;</div></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Уровни качества документирования.&nbsp;Оксана Гаврюшенко</h3><div><a href="https://techwriterdays.ru/ru/talk/138400" target="_blank">Ссылка на доклад</a></div><div><br /></div><div>Оксана работает в компании, которая делает документацию на заказ. Поэтому каждый раз нужно отвечать заказчику на вопрос «почему так дорого».&nbsp;</div><div><br /></div><div>Так что ребята сделали разную градацию — что нужно? Одноразовая работа? Чтобы документация потом жила? Должна ли соответствовать ГОСТ? И прочее. Всё это влияет на сроки и стоимость. И главное, что надо научиться понимать — разницу между желаемым и достаточным.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiATHhBUqpXX_iOHY0skNKdmrDB_w7eMtwathGPtcYm2KDFvcdt6o5sPZQHaqV3qSwDV1gbLZNXo4z1jVden1TLmwej0KQDQkc0-5Q-pUY4JR8ADW8nSfF1QOaXFJAHvVZ6iEEKPdfnT-bSAydq9YXyz2LODPKGCxUcTzK9kt_cZTdqbed1dbK2z6T03EQ/s1280/27.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiATHhBUqpXX_iOHY0skNKdmrDB_w7eMtwathGPtcYm2KDFvcdt6o5sPZQHaqV3qSwDV1gbLZNXo4z1jVden1TLmwej0KQDQkc0-5Q-pUY4JR8ADW8nSfF1QOaXFJAHvVZ6iEEKPdfnT-bSAydq9YXyz2LODPKGCxUcTzK9kt_cZTdqbed1dbK2z6T03EQ/s320/27.jpg" width="320" /></a></div><br /><div><br /></div><div>Ну а в докладе Оксана приводит примеры своих матриц влияния результата на стоимость. Вполне любопытно посмотреть на чужой подход)</div><div><br /></div><div><br /></div><h3 style="text-align: left;">Декомпозиция страха: практики взаимопонимания для руководителей и команд техписателей. Мария Макеева</h3><div><br /></div><div><a href="https://techwriterdays.ru/ru/talk/137270" target="_blank">Ссылка на доклад</a></div><div><br /></div><div>Каюсь, на этот доклад я залетела случайно. Исходно собиралась в секцию B, но очень уж название зацепило. Прочитав название (не описание), я подумала, что там будет та же проблема, что звучала на конференции чуть ранее — когда другие отделы не понимают ценность техписов и надо ходить, доказывать её.</div><div><br /></div><div>Мне стало интересно послушать такой доклад, вот я сюда и завернула. А это доклад про то, как вырасти в руководителя был =))) Но тоже неплохой, как стать хорошим руководителем, а не просто начальником с кнутом!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXozNBctz6wF8wCIl7dBDyPMVN5ur9obq5StbCo1rQdFEDvgUd-s6fFF-LYmpvE0U2fncozmpm-GFn7n-tzcNHTWCpMseDlLvmSzvhb4UZwPI6G15I9NqeXMfYAAjW5CVJgyGI6TSCCKVHPh0J36TH9KKor_x6NOV5rwhEBkrZBGKWj4E_hdp-3J8JO7o/s1280/28.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXozNBctz6wF8wCIl7dBDyPMVN5ur9obq5StbCo1rQdFEDvgUd-s6fFF-LYmpvE0U2fncozmpm-GFn7n-tzcNHTWCpMseDlLvmSzvhb4UZwPI6G15I9NqeXMfYAAjW5CVJgyGI6TSCCKVHPh0J36TH9KKor_x6NOV5rwhEBkrZBGKWj4E_hdp-3J8JO7o/s320/28.jpg" width="320" /></a></div><div><br /></div><div><br /></div><div><h3>Орг вопросы</h3></div><div>Место проведения — удобная гостиница, которая находится прямо около метро (что большой плюс). Места всем хватает, еды на обеде много всякой разной и вкусной.</div><div><br /></div><div>Помимо обеда — всякие ништяки в кофе зоне. Причем с утра и после обеда это что-то мясное / рыбное. Бутербродики, например. Чтобы можно было перекусить, если пропустил завтрак или приехал на конференцию прям с поезда. Очень здорово сделано ????</div><div><br /></div><div>Плюс комната для отдыха с аэрохоккеем, VR-очками и даже игровым автоматом)))&nbsp;</div><div><br /></div><div>А ещё куча разных стендов, где тоже и розыгрыши есть, и пообщаться с докладчиками можно. А ещё туда издательство Питер приезжает и книги продает, дешевле, чем в магазине. Я там прибарахлилась немношко)) Жаль, что серию Head First O`Really они больше не возят, я бы из неё пару книг тоже взяла...</div><div><br /></div><div>Но в любом случае, заняться вам всегда будет чем. А ещё на конференции есть много людей, готовых вам помочь и ответить на все вопросы, так что по орг части никаких вопросов нет)</div><div><br /></div><div><br /></div><div><h3>Резюме</h3></div><div>Конференция — это всегда место вдохновления. И место встреч! Когда ещё вы сможете встретиться с коллегами, живущими в других городах?)))</div><div><br /></div><div>Я рада, что конференция для технических писателей — это теперь отдельная конференция, для всех, кто любит документацию, кто тем или иным образом участвует в её создании. Документация — это очень важно! И здорово, что теперь есть, где поделиться своим опытом!&nbsp;</div><div><br /></div><div>Буду теперь ждать&nbsp;TechWriter Days 4 =)</div><p></p>]]></description>
<link>http://okiseleva.blogspot.com/2026/04/techwriter-days-3.html</link>
<pubDate>Tue, 07 Apr 2026 15:44:00 +0300</pubDate>
</item>
<item>
<title>Ричард Румельт. Взлом стратегии.</title>
<description><![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhflD4_j2vfwFvdByTvMH5zJY1VNkQKlq2H_m109zHof1OBGioGoSfhyphenhyphenqeyFfguHnjWZwgtCAfcS-zTHJf6NGtLbrWumHctBzol1xRAzoakzAWMsPvzkB_q1cUnXYBR5Hy7YIB8ai1zlORjfC6pc-zevWm9hzCk43AYitMsIPrqklqSxDF2mPoIgn6VexdJ/s637/1000001446.webp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="637" data-original-width="415" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhflD4_j2vfwFvdByTvMH5zJY1VNkQKlq2H_m109zHof1OBGioGoSfhyphenhyphenqeyFfguHnjWZwgtCAfcS-zTHJf6NGtLbrWumHctBzol1xRAzoakzAWMsPvzkB_q1cUnXYBR5Hy7YIB8ai1zlORjfC6pc-zevWm9hzCk43AYitMsIPrqklqSxDF2mPoIgn6VexdJ/s320/1000001446.webp" width="208" /></a></div><br /><p><br /></p><p>Книжка - говно, хотя в ней и есть неплохие моменты.</p><p>Написана уставшим еба-консультантом, который уже много раз помогал стратегировать в разных компаниях в те времена когда стратегировать было модно и нанимать консультантов тоже.</p><p>Толика полезной информации в книге есть, но не что-то удивительное до чего не дойти собственной головой на практике.</p><p><br /></p><p>Читать не стоит.</p><p><br /></p><p>Оценка 1/10.</p>]]></description>
<link>http://test-failed.blogspot.com/2026/04/blog-post.html</link>
<pubDate>Tue, 07 Apr 2026 11:42:00 +0300</pubDate>
</item>
<item>
<title>Перенос тест-кейсов из Яндекс Трекера в Allure TestOps одной командой с Cursor + MCP</title>
<description><![CDATA[<p>Автор: Олег Малышев,&nbsp;<a href="https://t.me/OlegMalyshevBlog/188" mce_href="https://t.me/OlegMalyshevBlog/188" target="_blank">телеграмм-канал автора про QA,QA Auto, AI, Вайбкодинг</a><br mce_bogus="1"></p><p>
<em>Всем привет! Я один из лидеров стека тестирования в компании ТехВилл. Продолжаем разговор про то, как применять AI в работе так, чтобы он реально экономил время.</em><strong><em> </em></strong><a href="https://www.software-testing.ru/library/testing/other-testing/4490" mce_href="https://www.software-testing.ru/library/testing/other-testing/4490" style=""><strong><em>В прошлой статье</em></strong></a><strong><em> </em></strong><em>я рассказывал, как мы внедряем AI-ревью ручных тест-кейсов. А сегодня --ещё один не самый типичный кейс для Cursor: перенос тест-кейсов из Яндекс Трекера в Allure TestOps буквально одной командой.</em></p><h3>Проблема: тест-кейсы живут в ЯТ, а должны жить в TestOps</h3><p>Исторически так сложилось, что одна большая команда вела все свои тест-кейсы и чек-листы в Яндекс Трекере. А дальше случилось неизбежное: появилась потребность перевести всё в Allure TestOps, потому что:</p><ul><li><p>Это «правильно» (<strong>единая TMS</strong>),</p></li><li><p>это «модно-молодёжно» (аналитика, связи, артефакты),</p></li><li><p>можно нормально связать с автотестами и CI/CD,</p></li><li><p>и главное — вся остальная компания уже живёт в TestOps, или почти вся.</p></li></ul><p>Но был нюанс: старых кейсов и чек-листов накопилось много. Переносить руками — это очень много рутинной работы для QA, которую никак не хотелось заставлять их делать. Поэтому идея была такая: перенести всё быстро, без ручной копипасты, при помощи ИИ.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/general-testing/4491-allure-testops</link>
<pubDate>Sun, 05 Apr 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Должны ли разработчики тестировать свой код</title>
<description><![CDATA[<p><!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading">Почему команды всё чаще доверяют тестирование разработчикам и где в этом подходе скрываются риски для продукта.</h4>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>В QA есть одна вечная тема, которая так или иначе периодически всплывает на каждом втором проекте. <span class='font-weight-bold'>Кто должен тестировать продукт?</span> Когда-то в начале развития отрасли все казалось проще простого – разработчик пишет код, а QA проверяет. Баги находятся, фиксятся, проект выходит в люди. Классическая схема и почти уютная. Такое аккуратное «перекидывание кода через забор»: девелопер дописал фичу, кинул в тестирование, пошёл писать следующую. Но индустрия давно ускорилась и релизы стали чаще, а CI крутится круглосуточно. И в какой-то момент кто-то вбросил: а почему разработчик не может проверить свой код сам? Упс. И понеслось&#8230;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>На словах вброс-вопрос звучит вполне разумно. Более того, иногда ткая схема проверки реально работает. Я работала на проектах, где разрабы активно тестировали собственные фичи, и это давало отличный результат. При этом никто не отменял, что у медали вообще-то две стороны. И вот вторая сторона вам не понравится, потому что подход &#171;разраб сам тестирует&#187; не всегда  правильный. Если говорить более точно, то он и не &#171;неправильный&#187;, он – нуждающийся в балансе. Проскочить в подобном случае точку невозврата ну очень легко.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Когда разработчик тестирует свой код</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29421,"width":"303px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/04/9ad915df-c71f-49e5-b427-941df599d409-Photoroom.png" alt="9ad915df-c71f-49e5-b427-941df599d409-Photoroom" class="wp-image-29421" style="width:303px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/04/9ad915df-c71f-49e5-b427-941df599d409-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/04/9ad915df-c71f-49e5-b427-941df599d409-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/04/9ad915df-c71f-49e5-b427-941df599d409-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/04/9ad915df-c71f-49e5-b427-941df599d409-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:preformatted --></p>
<pre class="wp-block-preformatted">...случается  довольно прозаичная, но крутая штука. Давайте начнём с хорошего и посмотрим на плюсы модели работы. Они же есть и иногда очень серьёзные.</pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Моментальный фидбек.</span> Это самый очевидный бонус. Разработчик только-только написал кусок логики. Контекст еще в голове и поэтому когда он запускает тесты или быстро прогоняет сценарии, то ловит баг без напряга и сразу. Никаких задержек, очередей задач QA или сборки на тестовом стенде. Прямо здесь и сейчас.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Любая команда, которая хотя бы немного работала с CI/CD, знает, <a href="https://quality-lab.ru/blog/razbiraem-trendy-testirovaniya-2024-ot-ii/#section-7" target="_blank" rel="noreferrer noopener">чем раньше поймали дефект</a>, тем дешевле его исправить. Когда я только пришла в тестирование, мне повезло работать с разработчиками, которые исправно писали юнит-тесты и проверяли основные сценарии. Тогда мне казалось, что они нас &#171;объедают&#187;, потому что до команды QA (то есть до нас) баги доходили гораздо реже. И если доходили, то обычно уже как раз те, над которыми приходилось поломать голову, интересные, а не банальные null (NPE).</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Код становится чище. </span>Это как забавный побочный эффект. Хотя я точно знаю нескольких специалистов, которые скажут, что нет такого и вообще как мы могли такое написать <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="????" class="wp-smiley" style="height: 1em; max-height: 1em;" /> И тем не менее&#8230;когда разработчик знает, что ему самому писать тесты, внезапно оказывается, что писать тестируемый код гораздо удобнее. Появляются нормальные интерфейсы, декомпозиция логики, понятные зависимости, меньше монолитных функций на сотни строк.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:preformatted --></p>
<pre class="wp-block-preformatted">Если код невозможно протестировать, значит с архитектурой что-то пошло не так, и разработчик начинает это видеть первым. В хорошем смысле тесты дисциплинируют.</pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29419,"width":"215px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/04/02c81df3-59e8-4d71-8ffe-438c0ed2a388-Photoroom.png" alt="02c81df3-59e8-4d71-8ffe-438c0ed2a388-Photoroom" class="wp-image-29419" style="width:215px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/04/02c81df3-59e8-4d71-8ffe-438c0ed2a388-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/04/02c81df3-59e8-4d71-8ffe-438c0ed2a388-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/04/02c81df3-59e8-4d71-8ffe-438c0ed2a388-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/04/02c81df3-59e8-4d71-8ffe-438c0ed2a388-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Быстрее движутся небольшие проекты. </span>Признаться, на маленьких продуктах или стартапах это вообще может быть спасением. Бывает (к сожалению или счастью) команда из трёх разработчиков и на них один QA (не дай богоскрипт!) на полставки. Релизы каждую неделю.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>В такой ситуации базовое тестирование разработчиками дает  возможность не тормозить поток задач. Девелоперы проверяют свои фичи, QA концентрируется на более сложных сценариях. Работает оно довольно неплохо. До определённого момента, конечно. Но это уже слегка  другой разговор.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">А потом начинаются слепые зоны</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Я очень люблю разработчиков. Серьезно. Без них у нас не было бы работы. Но есть одна фундаментальная проблема. Суть ее в том, что мы (разработчик и тестировщик) смотрим на систему совершенно по-разному. И дело тут не в компетенции, а в мышлении.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Туннельное зрение</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Разработчик проверяет, работает ли его логика. QA проверяет, как её можно сломать. Это две разные задачи. Когда девелопер тестирует свой код, он почти всегда идёт по <a href="https://quality-lab.ru/blog/use-case-i-testovye-scenarii-v-2025-dokumentaciya-straxuet-biznes/#section-2" target="_blank" rel="noreferrer noopener">happy path</a>. По самому правильному сценарию использования. Ну какой пользователь так делает? Тестировщик играет роль пользователя и начинает задавать неприятные вопросы&#8230;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>а что если пользователь нажмёт кнопку пять раз подряд?</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>а если запрос придёт дважды?</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>а если поле будет пустым?</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>а если данные сломанные?</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Разработчик редко думает в этой плоскости, потому что его мозг занят другой задачей. Ни в коем случае не потому что не может. Просто он строит систему, а тестировщик пытается её разрушить. Наши роли именно поэтому разделились исторически.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Контекстные переключения</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Есть ещё одна проблема, которую редко обсуждают, это переключение контекста. Создатель кода  пишет код. Это <span class='font-weight-bold'>состояние созидания</span>. Нужно держать в голове архитектуру, зависимости, бизнес-логику. А наша работа, то есть тестирование, требует противоположного мышления. Нужно искать уязвимости, странные сценарии, крайние случаи, ломать в общем&#8230; Можете себе представить одного человека, который постоянно прыгает между этими режимами? Там, где разработчики обязаны написать фичу, покрыть её тестами, прогнать тестирование, пройти регрессию, в итоге упадет скорость разработки. Ну и глубина тестирования останется под вопросом.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Иллюзия безопасности</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Вот уж точно самый опасный эффект. Вдруг кому-то из руководства приходит гениальная мысль (фея Динь-Динь наколдовала, видимо): разработчики пишут тесты, значит отдельный QA не нужен. Доводят эту мысль до подчиненных, те красиво оформляют на бумаге план работ и назначают исполнителей. Ну а что? Все красиво. Есть юнит-тесты, есть CI, билды зелёные. А дальше продукт выходит в прод и оказывается (ну надо же!), что никто не проверял пользовательские сценарии, не проводил исследовательское тестирование, не смотрел на систему глазами реального пользователя.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#f78da84d"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f78da84d">Юнит-тесты проверили анкерные гайки на фюзеляже. Но никто не проверил, летит ли самолёт.</pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph {"align":"center","style":{"elements":{"link":{"color":{"text":"var:preset|color|vivid-red"}}}},"textColor":"vivid-red"} --></p>
<p class="has-text-align-center has-vivid-red-color has-text-color has-link-color">
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:paragraph {"align":"center","style":{"elements":{"link":{"color":{"text":"var:preset|color|vivid-red"}}}},"textColor":"vivid-red"} --></p>
<p class="has-text-align-center has-vivid-red-color has-text-color has-link-color">
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Когда автоматизация начинает тормозить разработку</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Отдельная история, которую я наблюдала на нескольких проектах, где руководство слишком близко к сердцу восприняло популярную мантру &#171;автоматизируйте всё, что автоматизируется&#187;. Красоту звучания оставлю оценить любителям, но сразу скажу, что в реальности автоматизация иногда все-таки начинает работать против команды. Только сначала это кому-то кажется идеальной стратегией: юнит-тесты, интеграционные проверки, UI-тесты, длинные пайплайны CI. А потом тестов становится столько, что они начинают мешать разработке. CI собирается по полчаса, часть тестов падает без причины. Разработчики тратят время не на код (они его любят больше, признаем честно), а на перезапуск пайплайнов и поиск, какой из кейсов снова «флакнул» (а это они не очень любят).</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29422,"sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/04/22566223-34cd-4b23-850b-3d1dc7bda123-Photoroom.png" alt="22566223-34cd-4b23-850b-3d1dc7bda123-Photoroom" class="wp-image-29422" srcset="https://quality-lab.ru/wp-content/uploads/2026/04/22566223-34cd-4b23-850b-3d1dc7bda123-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/04/22566223-34cd-4b23-850b-3d1dc7bda123-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/04/22566223-34cd-4b23-850b-3d1dc7bda123-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/04/22566223-34cd-4b23-850b-3d1dc7bda123-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:preformatted --></p>
<pre class="wp-block-preformatted">И вот хваленая автоматизация "почему-то" перестаёт быть ускорителем процесса и превращается в ещё один источник технического долга. Это отдельная большая тема, достойная целой статьи. Поэтому мы обязательно еще разберем, почему тестовая автоматизация иногда начинает тормозить разработку и как команды в итоге чинят свои CI-пайплайны. Ну и конечно, соберем важные сигналы, которые помогут вам понять, что процесс пошёл не туда.</pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Где же проходит граница</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>За годы работы на разных проектах я пришла к довольно простому выводу. Лучше всего работает разделение ответственности. Это сложно, но можно.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#f78da84d"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f78da84d">Не война ролей. А именно баланс.</pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Зона разработчика. </span>Он отлично справляется с юнит-тестами, проверкой бизнес-логики, базовыми интеграциями, поддержкой зелёного билда в CI. Это его территория, его владения. И когда команда это все делает, качество системы реально растёт.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Зона QA</span>.  Есть вещи, которые почти всегда требуют отдельного взгляда. Тестировщик занимается тем, что разработчик просто не видит: сложные пользовательские сценарии, негативные кейсы, исследовательское тестирование, UX-проблемы, интеграции между системами, нестандартные сценарии поведения. QA смотрит на продукт без привязки к тому, как он был реализован. И в этом огромная ценность.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:table --></p>
<figure class="wp-block-table">
<table class="has-fixed-layout">
<thead>
<tr>
<th>Что проверяется</th>
<th>Разработчик</th>
<th>QA</th>
</tr>
</thead>
<tbody>
<tr>
<td>Бизнес-логика</td>
<td>Да, на этапе написания кода</td>
<td>Да, на этапе функционального тестирования (после разработчика) и при регрессионном тестировании.</td>
</tr>
<tr>
<td>Юнит-тесты</td>
<td>Да</td>
<td>Не напрямую</td>
</tr>
<tr>
<td>Интеграции между сервисами</td>
<td>Частично</td>
<td>Да</td>
</tr>
<tr>
<td>Негативные сценарии</td>
<td>Редко</td>
<td>Да</td>
</tr>
<tr>
<td>Пользовательские сценарии</td>
<td>Частично</td>
<td>Да</td>
</tr>
<tr>
<td>UX и поведение интерфейса</td>
<td>Нет</td>
<td>Да</td>
</tr>
<tr>
<td>Исследовательское тестирование</td>
<td>Нет</td>
<td>Да</td>
</tr>
</tbody>
</table>
</figure>
<p><!-- /wp:table --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">В итоге</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Разработчик, который вообще не тестирует свой код, сегодня выглядит странно. Но разработчик, который полностью заменяет QA, почти всегда приводит проект к проблемам. Лучший результат можно получить, если обе роли работают вместе. Разработчик следит, чтобы его участок системы был надёжным, а QA проверяет, как ведёт себя продукт целиком. И иногда именно на этой границе происходит самый настоящий прорыв &#8212; и для специалистов, и для проекта, и для бизнеса. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29420,"width":"269px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/04/7b2946a8-a012-4ee5-b5d1-f17b1d1fac47-Photoroom.png" alt="7b2946a8-a012-4ee5-b5d1-f17b1d1fac47-Photoroom" class="wp-image-29420" style="width:269px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/04/7b2946a8-a012-4ee5-b5d1-f17b1d1fac47-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/04/7b2946a8-a012-4ee5-b5d1-f17b1d1fac47-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/04/7b2946a8-a012-4ee5-b5d1-f17b1d1fac47-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/04/7b2946a8-a012-4ee5-b5d1-f17b1d1fac47-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:preformatted --></p>
<pre class="wp-block-preformatted">Когда код становится чище, баги ловятся раньше, а продукт выходит в прод без сюрпризов. Ну или почти без них. В IT идеала все равно не бывает, но стремиться к нему нужно, согласны?</pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph {"align":"center","style":{"elements":{"link":{"color":{"text":"var:preset|color|vivid-red"}}}},"textColor":"vivid-red"} --></p>
<p class="has-text-align-center has-vivid-red-color has-text-color has-link-color">
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:paragraph {"align":"center","style":{"elements":{"link":{"color":{"text":"var:preset|color|vivid-red"}}}},"textColor":"vivid-red"} --></p>
<p class="has-text-align-center has-vivid-red-color has-text-color has-link-color">
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>]]></description>
<link>https://quality-lab.ru/blog/razrabotchiki-testiruyut-svoy-kod-plyusy-minusy/</link>
<pubDate>Thu, 02 Apr 2026 13:10:38 +0300</pubDate>
</item>
<item>
<title>Уроки качества: работа с Cursor и Windsurf</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/12hs/working-with-cursor-and-windsurf/right-balance-in-software-quality.jpg" mce_src="https://software-testing.ru/images/stories/library/12hs/working-with-cursor-and-windsurf/right-balance-in-software-quality.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Марк Уинтерингэм (Mark Winteringham)<br /><strong><a href="https://www.ministryoftesting.com/articles/lessons-in-quality-engineering-from-working-with-cursor-and-windsurf" mce_href="https://www.ministryoftesting.com/articles/lessons-in-quality-engineering-from-working-with-cursor-and-windsurf" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p><p>Популярность ИИ-инструментов разработки, использующих генеративный ИИ для помощи разработчикам, набирает обороты. Разработчики применяют их для выполнения таких задач, как автодополнение кода, анализ, исправление ошибок и полноценная разработка.</p>
<p>Какое влияние эти инструменты окажут на качество работы разработчиков и создаваемых ими продуктов? Я решил исследовать этот вопрос, создав проект с использованием двух популярных ИИ-IDE для разработки — <a href="https://www.cursor.com/" mce_href="https://www.cursor.com/">Cursor</a> и <a href="https://codeium.com/windsurf" mce_href="https://codeium.com/windsurf">Windsurf</a>. Ниже – то, чему я научился, и мои наблюдения, как эти всё более популярные инструменты могут повлиять на нашу работу как инженеров по качеству.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-tools/4465-working-with-cursor-and-windsurf</link>
<pubDate>Wed, 01 Apr 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Мои 12 недель в году. Часть 33 (вышла книга по SQL, закончила книгу про ИИ)</title>
<description><![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA2l-uVPius3f6B8xuloQHfhz-palIX60PvHdIEj1eiGaiIPQ-LH16EKL8lMZ_vBRxA_kBOpVcsWOj5NhzJR3zbthm2NFiHiUTdPB95Ke0-n9gBAVuA1fGiir0ecmwgLli4GDtuX57W9iYvIyiuUAJBcOJtZA-iZdjB5t7BUakzWwapqZivfjIEny1chI/s1950/IMG_20260312_190851.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1950" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA2l-uVPius3f6B8xuloQHfhz-palIX60PvHdIEj1eiGaiIPQ-LH16EKL8lMZ_vBRxA_kBOpVcsWOj5NhzJR3zbthm2NFiHiUTdPB95Ke0-n9gBAVuA1fGiir0ecmwgLli4GDtuX57W9iYvIyiuUAJBcOJtZA-iZdjB5t7BUakzWwapqZivfjIEny1chI/s320/IMG_20260312_190851.jpg" width="320" /></a></div><br /><p style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><a href="https://okiseleva.blogspot.ru/2017/06/12.html" style="color: #6699cc; font-family: arial, tahoma, helvetica, freesans, sans-serif; text-decoration-line: none;">Первый опыт</a><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif">,&nbsp;</span><a href="http://okiseleva.blogspot.com/2017/09/12-2.html" style="color: #6699cc; font-family: arial, tahoma, helvetica, freesans, sans-serif; text-decoration-line: none;">второй</a><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif">,&nbsp;</span><a href="http://okiseleva.blogspot.com/2017/12/12-3.html" style="color: #6699cc; font-family: arial, tahoma, helvetica, freesans, sans-serif; text-decoration-line: none;">3</a><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif">,&nbsp;</span><a href="http://okiseleva.blogspot.com/2018/03/12-4.html" style="color: #6699cc; font-family: arial, tahoma, helvetica, freesans, sans-serif; text-decoration-line: none;">4</a><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif">,&nbsp;<a href="https://okiseleva.blogspot.com/2018/06/12-5.html" style="color: #6699cc; text-decoration-line: none;">5</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2018/09/12-6.html" style="color: #6699cc; text-decoration-line: none;">6</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2018/12/12-7.html" style="color: #6699cc; text-decoration-line: none;">7</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2019/03/12-8.html" style="color: #6699cc; text-decoration-line: none;">8</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2019/06/12-9.html" style="color: #6699cc; text-decoration-line: none;">9</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2019/09/12-10.html" style="color: #6699cc; text-decoration-line: none;">10</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2019/12/12-11.html" style="color: #6699cc; text-decoration-line: none;">11</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2020/03/12-12.html" style="color: #6699cc; text-decoration-line: none;">12</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2020/06/12-13.html" style="color: #6699cc; text-decoration-line: none;" target="_blank">13</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2020/09/12-14.html" style="color: #336699; text-decoration-line: none;" target="_blank">14</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2021/04/12-15.html" style="color: #336699; text-decoration-line: none;" target="_blank">15</a>,&nbsp;</span></p><p style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif"><a href="https://okiseleva.blogspot.com/2021/07/12-16.html" style="color: #336699; text-decoration-line: none;" target="_blank">16</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2021/11/12-17.html" style="color: #336699; text-decoration-line: none;" target="_blank">17</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2022/02/12-18.html" style="color: #336699; text-decoration-line: none;" target="_blank">18</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2022/06/12-19.html" style="color: #336699; text-decoration-line: none;" target="_blank">19</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2022/09/12-20.html" style="color: #336699; text-decoration-line: none;" target="_blank">20</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2022/12/12-21.html" style="color: #336699; text-decoration-line: none;" target="_blank">21</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2023/03/12-22.html" style="color: #336699; text-decoration-line: none;" target="_blank">22</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2023/06/12-22-dump-sqa-days.html" style="color: #336699; text-decoration-line: none;" target="_blank">23</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2023/09/12-24.html" style="color: #336699; text-decoration-line: none;" target="_blank">24</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2023/12/12-25-sqa-days.html" style="color: #336699; text-decoration-line: none;" target="_blank">25</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2024/04/12-26-3.html" style="color: #336699; text-decoration-line: none;" target="_blank">26</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2024/07/12-27-css.html" style="color: #336699; text-decoration-line: none;" target="_blank">27</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2024/10/12-28-graphql.html" style="color: #336699; text-decoration-line: none;" target="_blank">28</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2025/01/12-28.html" style="color: #336699; text-decoration-line: none;" target="_blank">29</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2025/04/12-30-chatgpt.html" style="color: #336699; text-decoration-line: none;" target="_blank">30</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2025/07/12-31-sqa-days.html" style="color: #336699; text-decoration-line: none;" target="_blank">31</a>, <a href="https://okiseleva.blogspot.com/2025/11/12-32.html" target="_blank">32</a></span></p><p><br /></p><h3 style="text-align: left;">Что это за техника</h3><p>Вы собираетесь с друзьями в группу и ставите себе цели на 12 недель (3 месяца). Это могут быть как рабочие, так и личные задачи. Такие, которые вы вроде как хотите сделать, но вечно откладываете, так как «некогда, потом, щас, вот только мелочевку разгребу и тот пожарчик потушу».</p><p><br /></p><p>Настало время заняться тем, чем действительно хочется!&nbsp; Отталкиваясь от глобальных целей, составляете план на неделю. И раз в неделю встречаетесь с группой и обсуждаете, сколько успели, сколько нет. Какой план на следующую неделю. Я, правда, уже давно не встречаюсь, а просто веду файлик "что сделано", откуда потом и просматриваю всё, что успела за цикл.</p><p><br /></p><h3 style="text-align: left;">Результаты кратко</h3><p>Основной план:</p><p><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">????</span>&nbsp;книга по чату — закончить&nbsp;</p><p><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">????</span>&nbsp;книга по чату — вычитать</p><p><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">????</span>&nbsp;книга по тайм-менеджменту — написать 1 главу</p><p><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">????</span>переписать автоматизацию в постмане полностью</p><p><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">????</span>&nbsp;1 статья на Хабр</p><p>С книгой новой чуток продолбалась, а вот курс отложила не по своей вине. Там огромная боль, но об этом чуть ниже...&nbsp;</p><p>На самом деле, с учетом двух госпитализаций плановых очень неплохой результат, там же пока врачей обойти, справки собрать... А ещё почти месяц болели по кругу... В общем, «время есть? Делай!», иначе потом придет какой-нибудь песец ????????</p><p>Кратко что сделала:</p><p></p><ol style="text-align: left;"><li>Книга 4, SQL:&nbsp;</li><ol><li>прошли верстку!</li><li>книга уже <a href="https://okiseleva.blogspot.com/2026/01/sql.html" target="_blank">вышла в продажу</a>!</li></ol><li>Книга 5, ChatGPT:</li><ol><li>закончила книгу!&nbsp;</li><li>вычитала её, от души наредактировав</li><li>принимаю картинки, пока ещё не все готовы</li></ol><li>Курс по автоматизации в Postman:</li><ol><li>Записала ещё пару уроков, обработала</li><li>Поставила на паузу, потому что в Postman обновилось всё, и сниппеты, и документация&nbsp;<span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">＼(〇_ｏ)／</span></li></ol><li>Статьи на Хабр — 1 статья&nbsp;</li><li>Пополнила свой youtube-канал — 1 видео&nbsp;</li><li>Инструменты 12 недель — продолжаю вести файлик DONE, это все еще очень круто</li><li>Новый год!&nbsp;</li><li>Новогодняя фотосессия )))</li><li>Две госпитализации у младшей дочери (плановые, гемангиома)</li><li>Записалась в зал, начала заниматься ????</li></ol><span><a name='more'></a></span><div><br /></div><p></p><h3 style="text-align: left;">Результаты подробнее</h3><div><div><br /></div><h3 style="text-align: left;">Книга 4: SQL</h3></div><p></p><div>В прошлом цикле я книгу прошла редактуру, но верстка только началась. В декабре мы закончили верстку, встали в очередь в типографию и книга уже даже успела&nbsp;<a href="https://okiseleva.blogspot.com/2026/01/sql.html" target="_blank">выйти в продажу</a>! И всё за один цикл!&nbsp;<span lang="EN-US" style="font-family: &quot;MS Gothic&quot;; font-size: 11pt; line-height: 107%;">＼</span><span style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: 107%;">(</span><span lang="EN-US" style="font-family: &quot;MS Gothic&quot;; font-size: 11pt; line-height: 107%;">〇</span><span style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: 107%;">_</span><span lang="EN-US" style="font-family: &quot;MS Gothic&quot;; font-size: 11pt; line-height: 107%;">ｏ</span><span style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: 107%;">)</span><span lang="EN-US" style="font-family: &quot;MS Gothic&quot;; font-size: 11pt; line-height: 107%;">／</span></div><p></p><p></p><div>Кайф =)))</div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Книга 5: ChatGPT</h3><div><br /></div><div>В <a href="https://okiseleva.blogspot.com/2026/01/2025.html" target="_blank">новогоднем посте</a>&nbsp;я писала, что после провала с SQL (когда я так накосячила внутри книги, что от меня редактор отказался) «я буду умнее, отдам художницам картинки и буду вычитывать книгу, а не просто ждать!».</div><div><br /></div><div>Так вот. В январские праздники я закончила книгу, ю-ху! И маякнула художницам, что жду только их... Даже немного дежавю повеяло, с SQL все было точно также, просто год назад))</div><div><br /></div><div>Обещание «быть умнее» я сдержала! Картинки жду, сама стала перечитывать книгу. Оказалось, это прям реально хороший план! Хоть книгу про ИИ я написала меньше, чем за год, вернуться к старому тексту это как в программировании:</div><div><br /></div><div>— Кто эту фигню написал?! Ой, это был я...</div><div><br /></div><div>Почти 2 месяца вычитывала. Ну, точнее как. Читаешь — не нравится. Думаешь, как переделать, а это время... Плюс в исходном варианте вообще не было главы про баг-трекинг, а я смотрела-смотрела на содержание... И решила добавить! А это глава с нуля...&nbsp;</div><div><br /></div><div>В общем, что-то местами поменяла, что-то переписала, что-то удалила, что-то пополнила... Работы получилось много! Но! Я всё сделала за один цикл!!</div><div><br /></div><div>Есть и грустная новость — книга всё ещё не сдана. И тут дежавю уже не работает... Год назад я ждала до марта, но в марте мы всё сдали. А сейчас почти апрель, обе ещё работают...</div><div><br /></div><div>Я как раз сегодня потыкалась в нано банано и отправила редактору результат с вопросом, подойдет ли для верстки? А то ведь на картинки художниц чуть ли не инструкция была — цвет шрифта, разные слои текста и картинки, обязательно оригинал фотошоп файла... С другой стороны, вставляли же мы скриншоты, и нормально.</div><div><br /></div><div>В общем, обсудили с издательством, мне дали добро на использование картинок с ИИ. Так что следующая книга будет уже с моим авторством изображений =))) Ну, процентов на 70-90, я думаю, что художницам тоже что-то оставлю...</div><div><br /></div><div>Единственная беда — сама по себе нано банана стоит как крыло самолета (около 25к за год), вроде как дешевле взять чат с её функцией, но какой? Пока изучаю тему... Если есть что посоветовать, я вся внимание =)&nbsp;</div><div><br /></div><div>Ну а статус книги — закончила, уже всё вычитала и причесала, жду художниц! В следующем цикле то точно дождусь (или уже в этой книге заменю на ИИ ????)</div><div><br /></div><div><br /></div><div><h3>Книга 6: Тайм-менеджмент</h3><div><br /></div></div><div>Итак, к февралю я уже подразгреблась с 5-ой книгой и стала свободна. А зачем время терять? Занялась следующим проектом. Очень уж хочется мне книгу про тайм-менеджмент написать, про свой опыт 12 недель)))</div><div><br /></div><div>Я пока прикинула такое содержание — 3 части книги:</div><div><ol style="text-align: left;"><li>Вводная, что это такое и всякое общее (мотивация и тд)</li><li>Техники, которые мне НЕ зашли (но могут зайти другим)</li><li>Техники, которые мне зашли и уже 9 лет со мной!</li></ol><div>Примерные главы:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghrXaGSWTGH4AN71nuWY1Ujl-HYE3B5M4-4lZ8i6YukLGQPEDbMoNiciWdPEC_8P4v23t_P22gBxgKze5sseMPOIUZg3K2ctp226HKW3bB_rsR8L7Z6r0LLoDH_5ieGzb6s9fympvlhqATT3wmeRGOUNuFN26z6OX-_4d9MrsguiJAFSGOPrq4NsglnE8/s1157/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1157" data-original-width="825" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghrXaGSWTGH4AN71nuWY1Ujl-HYE3B5M4-4lZ8i6YukLGQPEDbMoNiciWdPEC_8P4v23t_P22gBxgKze5sseMPOIUZg3K2ctp226HKW3bB_rsR8L7Z6r0LLoDH_5ieGzb6s9fympvlhqATT3wmeRGOUNuFN26z6OX-_4d9MrsguiJAFSGOPrq4NsglnE8/s320/1.png" width="228" /></a></div><br /><div><br /></div><div>Я прошлась по всем своим постам из цикла 12 недель и насобирала «мяса», раскидав текст по разным главам. Теперь осталось его переосмыслить, дополнить, и будет красота!</div></div><div><br /></div><div>Пока сижу на первой главе, как обычно, начало самое сложное. Потом уже можно будет раскачаться, сделать примерную структуру глав и пойдет как по маслу. Пока — раскачиваюсь!</div><div><br /></div><div>Но вообще план на год — написать 2 книги, и это помимо книги про ИИ, потому что её я дописала в январе. Посмотрим, смогу ли!</div><div><br /></div><div><br /></div><div><h3 style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin: 0px; position: relative;">Курсы</h3></div><div><br /></div><div><br /></div><div><b>Автоматизация в Postman</b></div><div><br /></div><div>У меня был план перезаписать <a href="https://testbase.ru/learn/rest-auto-in-postman" target="_blank">курс по автоматизации в Postman</a>.&nbsp;</div><div><br /></div><div><div>Прошлый результат — 9 уроков готовы, 10-ый записан, в обработке.</div><div>Текущий — 11 уроков готовы.</div></div><div><br /></div><div>Причем 11 уроков я доделала ещё в январе, 29 числа всё сделала. Радостная такая была, осталось всего 3 урока! А дальше можно и цену поднять, ведь курс обновлен!</div><div><br /></div><div>А потом... Потом постман обновился. Причем не как раньше, чуток. Не-е-е-е-т... Они:</div><div><br /></div><div>1. Кардинально изменили внешний вид и структуру документации. А я ведь учу изучать документацию... Я ведь в уроках показываю "вот пошли в доку, читаем там...". И все эти уроки разом устарели... 10 лет! Документация менялась, но не кардинально... И вот сейчас (((</div><div><br /></div><div>2. Судя по примерам в новой документации, изменен стиль автотестов. То есть код надо писать чуть-чуть по-другому. Это мне тоже непонятно, ведь столько автотестов уже написано, зачем их "ломать"?</div><div><br /></div><div>Да, старые тесты пока работают, но надолго ли? А то чувствую, потом скажут "не работает тест? Обновляйте через постбота!", а он может такой ерунды нагородить...</div><div><br /></div><div>В общем, тесты тоже теперь неактуальны. При этом! В документации уже новые тесты, в самом постмане в сниппетах ещё старые. То есть пока (на начало февраля) ещё не синхронизировали документацию с инструментом.</div><div><br /></div><div>Плюс в марте вышли новые изменения в «что платно, что бесплатно», поэтому с февраля у меня обновление курса на паузе. Я жду, когда все перетурбации закончатся, чтобы... Дописать 3 урока и переписать всё, что снова устарело (((</div><div><br /></div><div>Самое обидное — я взялась переписывать курс просто, чтобы было. Просто потому, что большая часть курса записана почти 5 лет назад и студенты на это указывают, даже если урок актуален. Потребности обновлять весь курс не было, ну разве что пару уроков. А теперь...</div><div><br /></div><div>Обновились бы они так год назад, ну или я бы дооткладывала перезапись, вот сейчас было бы идеальное время. А так... Я год потратила на работу, которая полетела в мусорку. Год обновляла курс, который снова устаревший, капец.</div><div><br /></div><div>Конечно, всё было не зря. Я ОЧЕНЬ много всего изменила в курсе. Где-то добавила доп. материалов, где-то обновила домашние задания... Так что не всё в мусор, но демотивация была сильнейшая.&nbsp;</div><div><br /></div><div>Ну, чтож... Бывает...</div><div><br /></div><div><br /></div><div><div><br /></div><div><b>Остальные курсы</b></div></div><div><b><br /></b></div><div>По остальным курсам мелкие правки по замечаниям от студентов чуток правим описание ДЗ или теста.</div><div><br /></div><div>Есть планы на новый курс-два, но вроде занялась одним курсом, потом заболели дети, потом мы сами, потом ещё один нежданчик прилетел, и вот до сих пор пытаюсь вернуться к работе...</div><div><br /></div><div><br /></div><div><h3 style="text-align: left;">Хабр</h3><div>Одна статья, всё по плану =))) Есть идеи на новые, но пока руки не дошли...</div><div><br /></div><div><a href="https://habr.com/ru/articles/1003554/" target="_blank">1 тест = 1 проверка. Чем хорош принцип атомарности в автотестах в Postman</a></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Блог</h3><div>В блог я стала выписывать примеры использования ИИ:</div><div><br /></div><div><a href="https://okiseleva.blogspot.com/2026/01/chatgpt.html" target="_blank">ChatGPT, подсчитай количество страниц в книге и авторских листов</a></div><div><br /></div><div>И рассказывать о том, чего «в 21 веке уже не бывает» по версии моих студентов, ага:</div><div><br /></div><div><a href="https://okiseleva.blogspot.com/2026/02/blog-post.html" target="_blank">Новый функционал? Подождем до последнего. Как банки к АУСН подключались</a></div><div><a href="https://okiseleva.blogspot.com/2026/03/blog-post.html" target="_blank">Эльба: ну вы там как-нибудь сами проверьте, где ошибка произошла</a></div></div><div><br /></div><div>Не очень много, надо бы исправиться, в первую очередь в статьях на Хабр. Я попробую сделать чуть больше!</div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Ютуб / ВК</h3><div><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">Мой канал —&nbsp;</span><a href="https://www.youtube.com/c/okiseleva" style="background-color: white; color: #336699; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px; text-decoration-line: none;">https://www.youtube.com/c/okiseleva</a><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">&nbsp;(</span><a href="https://vkvideo.ru/@club227447987" style="background-color: white; color: #336699; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px; text-decoration-line: none;" target="_blank">Дубль в ВК</a><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">).</span></div><div><br /></div><div>Тоже грустновато, всего 1 видео:</div><div><br /></div><div><a href="https://youtu.be/7xSyW_mU07A" target="_blank">1 автотест = 1 проверка. Почему этот принцип хорош</a>&nbsp;(<a href="https://vkvideo.ru/video-227447987_456239169" target="_blank">Видео в ВК</a>)&nbsp;</div><div><br /></div><div>Вот тут я хочу хотя бы 2-3 видео выпускать, а то зашла внутрь канала и грустненько стало... Вот этот пункт мне точно надо прокачать!</div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Всякое разное, не рабочее</h3><div><br /></div><div><b>Семья, дети</b></div><div><br /></div><div>Катюше уже 9.5 мес, она научилась садиться, вставать, ползать на четвереньках и даже немного ходить!</div><div><br /></div><div>Сейчас у нас&nbsp;"вставать всегда, вставать везде, вот лозунг мой, и солнца!"</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH32_HmZjLg2DJjC2jadu4FLNZOzF1TW-_Sk5sRHGL5EAZezY0z9DHSS_rt6OYU9Z41WkJElYzf97vWl4xeIciAx3DYVntv2TOrve8p7XJDgWqsT0EaK0fBUGamefs2wtvrhf3-T1MWfojTFVTYCRrZ26rJKQWc5tog4IvgbPrHnlnZY-wVS5sZ8VtY5o/s1950/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1462" data-original-width="1950" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH32_HmZjLg2DJjC2jadu4FLNZOzF1TW-_Sk5sRHGL5EAZezY0z9DHSS_rt6OYU9Z41WkJElYzf97vWl4xeIciAx3DYVntv2TOrve8p7XJDgWqsT0EaK0fBUGamefs2wtvrhf3-T1MWfojTFVTYCRrZ26rJKQWc5tog4IvgbPrHnlnZY-wVS5sZ8VtY5o/s320/11.jpg" width="320" /></a></div><br /><div>Мы в январе и марте госпитализировались по гемангиоме, прижигали лазером. Пьем атенолол, чтобы ушел объем, следим...</div><div><br /></div><div>Но из-за госпитализаций никак не можем поставить Леше живую вакцину — надо ж сначала Катю привить. А Катя то болеет, то госпитализация скоро... В марте плюнули и поставили прививку за неделю до больницы, иначе мы так совсем от графика отстанем. Теперь Кате осталась 1 прививка и можно Леше живую давать, ура!</div><div><br /></div><div>А ещё госпитализация — это пройтись по врачам, собрать справки, сделать эхо, ЭКГ и тд... Отжирает времени много (((</div><div><br /></div><div>А ещё дети болели... А болеем мы тяжело, двое малышей — это неделя без сна, минимум. Потом заболеем сами / бабушка, и снова не отдохнешь или поработаешь вечером, потом ещё по кругу может пойти...</div><div><br /></div><div>В общем, мы проболели почти весь декабрь и почти весь февраль. 2 месяца из 3, огонь! Так что я еще много всего успела))</div><div><br /></div><div><br /></div><div><b>Остальное</b></div><div><br /></div><div>Ходили в кино!</div><div><br /></div><div>1. «Злая 2» — очень круто, я в целом догадывалась о концовке, это было логично, но очень понравилось, как они все завертели там))</div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">Проверка планов, поставленных в прошлый раз</h3><div><br /></div><div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">Основные цели:</div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><ul style="line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;"><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b><b><span style="font-weight: 400;">????&nbsp;</span></b>Книга по ChatGpt&nbsp;</b>— закончить книгу → готово!</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b><b><span style="font-weight: 400;">????&nbsp;</span></b>Книга по ChatGpt&nbsp;</b>— вычитать её&nbsp;&nbsp;→ готово!</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b><b><span style="font-weight: 400;">????&nbsp;</span></b>Книга по тайм-менеджменту</b>&nbsp;— написать 1 главу → в процессе)) Зато насобирала мяса на 20 других глав!</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b><b><b><span style="font-weight: 400;">????&nbsp;</span></b></b>Курсы&nbsp;</b>— постман сделать ещё 3 лекции (не верю в полную перезапись с учетом новогодних праздников и начала садика = болезней) → 3 лекции сделала!</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b><b><b><b><span style="font-weight: 400;">????&nbsp;</span></b></b></b>Статья на Хабр&nbsp;</b>— ну хоть одну! → одна и вышла)</li></ul></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><br /></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">Найс ту ду:</div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><ul style="line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;"><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b><b><b><span style="font-weight: 400;">????&nbsp;</span></b></b>Youtube-канал</b>&nbsp;— 2 шт — уменьшаем цель до реально достижимой)) → не сделала ((( Но результат достижимый!</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b><b><b><b><b><span style="font-weight: 400;">????&nbsp;</span></b></b></b></b>Встретиться с друзьями&nbsp;</b></li></ul></div></div><div><br /></div><div><h3 style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin: 0px; position: relative;"><br /></h3><h3 style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin: 0px; position: relative;">Планы на следующие 12 недель</h3><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><br /></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">Основные цели:</div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><ul style="line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;"><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b>Книга по ChatGpt&nbsp;</b>— сдать в редактуру</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b>Книга по тайм-менеджменту</b>&nbsp;— написать 3 главы, по одной в месяц норм план!</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b>Курсы&nbsp;</b>— сделать 1 тему нового курса</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b>Статья на Хабр&nbsp;</b>— ну хоть одну!&nbsp;</li></ul></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><br /></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">Найс ту ду:</div><div style="background-color: white;"><ul style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px; line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;"><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b>Youtube-канал</b>&nbsp;— 2 шт — уменьшаем цель до реально достижимой))</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b>Книга по Python</b>&nbsp;— прочитать 100 страниц</li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b>Встретиться с друзьями&nbsp;</b></li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><b>Курс по постману</b> — сделать ещё 3 лекции (не верю в полную перезапись с учетом новогодних праздников и начала садика = болезней)</li></ul><div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><br /></div><div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">Хотела перенести ютуб в основные цели, но все же оставлю в найс ту ду... Потому что слишком много целей — плохо.</div><div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><br /></div><div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">Да, я тут решила снова читать начать, и даже начала! А потом цикл болезней и нежданчиков, и уже 2 недели нет времени читать ((( Вот поставила в план, хочу достигнуть!</div><div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><b><br /></b></div><h3 style="text-align: left;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 14.85px;"><b>Резюме</b></span></span></h3><div>Хороший вышел цикл! Вроде главные результаты укладываются в пару строк, перезаписывала курс да пилила книгу, но сколько работы в это вложено! А уж с учетом болезней...</div><div><br /></div><div>Так что всё было неплохо, надеюсь, будет ещё лучше дальше, ведь весной-летом дети болеют меньше, надеюсь поработать! ????</div></div></div><p></p>]]></description>
<link>http://okiseleva.blogspot.com/2026/03/12-33.html</link>
<pubDate>Tue, 31 Mar 2026 12:41:00 +0300</pubDate>
</item>
<item>
<title>1 тест = 1 проверка. Чем хорош принцип атомарности в автотестах в Postman</title>
<description><![CDATA[<p>Автор: <a href="https://software-testing.ru//edu/tutor/5" mce_href="https://software-testing.ru/edu/tutor/5">Ольга Назина (Киселёва)</a></p><p>
<img src="https://software-testing.ru/images/stories/library/11hs/principle-of-atomicity/principle-of-atomicity1.png" mce_src="https://software-testing.ru/images/stories/library/11hs/principle-of-atomicity/principle-of-atomicity1.png" width="200" mce_style="float: left;" style="float: left;" /></p><p>Принцип атомарности <em>(объект или операцию нельзя разделить на части, не нарушив их целостность или смысл)</em> применяется в как в разработке кода ПО, так и в разработке кода автотестов.</p><p>И в автотестах Postman он особенно хорош! Давайте разберемся на примерах, почему лучше писать небольшие автотестики, «один тест, одна проверка», чем «много проверок в одном тесте».</p>]]></description>
<link>https://www.software-testing.ru/library/testing/test-analysis/4489-principle-of-atomicity</link>
<pubDate>Sun, 29 Mar 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Метаморфические и антагонистические стратегии тестирования ИИ-систем</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/12hs/strategies-for-testing-ai-systems/strategies-for-testing-ai-systems1.jpg" mce_src="https://software-testing.ru/images/stories/library/12hs/strategies-for-testing-ai-systems/strategies-for-testing-ai-systems1.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Амрута Панде (Amruta Pande)<br /><strong><a href="https://www.ministryoftesting.com/articles/metamorphic-and-adversarial-strategies-for-testing-ai-systems" mce_href="https://www.ministryoftesting.com/articles/metamorphic-and-adversarial-strategies-for-testing-ai-systems" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p><p>ИИ стремительно захватывает технологический мир, и крупные языковые модели (LLM) находятся в авангарде этого движения. Но при создании приложений с поддержкой ИИ качество всё так же остаётся ключевым фактором.</p>
<p>Один из важнейших аспектов тестирования ИИ-систем – это обработка неожиданных сценариев, которые могут как обеспечить успех приложения, так и уничтожить его. Из-за огромного охвата таких моделей протестировать всё невозможно. Поэтому фокус на <strong>граничных случаях</strong> критически важен для снижения риска неопределённости.</p>
<p>Думайте о граничных кейсах, как о незваных гостях на вечеринке: если вы не подготовились, ситуация может быстро выйти из-под контроля.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/other-testing/4464-testing-ai-systems</link>
<pubDate>Tue, 24 Mar 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Почему SaaS падает при росте нагрузки?</title>
<description><![CDATA[<p><!-- wp:paragraph --></p>
<p>В практике аутсорс-разработки мы часто видим одну и ту же драму. На этапе стейджинга все выглядит очень неплохо, в отчетах QA прописано, что система стабильна при 10k RPS, графики ровные, latency в пределах нормы, отчёт зелёный. Но стоит маркетингу запустить кампанию или крупному энтерпрайз-клиенту провести онбординг сотрудников, как сервис превращается в тыкву. А полночь (т.е. ожидаемая серьезная нагрузка) даже еще не наступила.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:preformatted {"style":{"color":{"background":"#f3dede"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f3dede"> Мы уже говорили о том, <a href="https://quality-lab.ru/blog/kak-rasschitat-predel-nagruzki-saas/" target="_blank" rel="noreferrer noopener">как все происходит</a> и самое дурацкое в этой ситуации – ложное чувство безопасности. Если ваши нагрузочные тесты пройдены, а система всё равно легла на 30% от заявленной мощности, значит, вы тестировали сферического коня в вакууме (погуглите, хороший анекдот).</pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29380,"width":"397px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="872" height="762" src="https://quality-lab.ru/wp-content/uploads/2026/03/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-2026-03-24-%D0%B2-11.26.57.png" alt="Снимок-экрана-2026-03-24-в-11.26.57" class="wp-image-29380" style="width:397px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/Снимок-экрана-2026-03-24-в-11.26.57.png 872w, https://quality-lab.ru/wp-content/uploads/2026/03/Снимок-экрана-2026-03-24-в-11.26.57-300x262.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/Снимок-экрана-2026-03-24-в-11.26.57-768x671.png 768w" sizes="(max-width: 872px) 100vw, 872px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>Давайте посмотрим, обо что спотыкается SaaS и чего это он все-таки падает, раз отчеты так хороши.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Стерильные сценарии vs потока сознания юзера</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Типичный нагрузочный скрипт (на JMeter или k6) как дисциплинированный Безупречный под рукой Дейнерис. Он делает паузы (think time), идет по «золотому пути» и закрывает сессию. Но это не Игра престолов, а вполне реальная жизнь, поэтому тут всё <span class='font-weight-bold'>иначе:</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Эффект паники (Retry Storm).</span> Если API замедлился до 3 секунд, пользователь уже нервничает и не ждет. Он нажимает «Обновить» или кликает на кнопку «Купить» пять раз подряд. Вместо одного тяжелого запроса база получает пять одинаковых. А через пару секунд ещё пять, потому что юзер решил, что кнопка не нажалась. В результате нагрузку создаёт не количество людей, а их нетерпеливость, паника.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Вкладки-убийцы.</span> Мы, как современные пользователи SaaS, держим иногда открытыми 10-15 вкладок сервиса. Каждая из них может слать фоновые запросы (polling, уведомления, обновление статусов). В итоге 1000 живых людей за ПК генерируют нагрузку как 15 000 виртуальных пользователей.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Новый «черный лебедь», или нашествие AI-агентов</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29376,"width":"370px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/28c8f484-d3b2-47d3-9134-2ebb1e4ced8e-Photoroom.png" alt="28c8f484-d3b2-47d3-9134-2ebb1e4ced8e-Photoroom" class="wp-image-29376" style="width:370px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/28c8f484-d3b2-47d3-9134-2ebb1e4ced8e-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/28c8f484-d3b2-47d3-9134-2ebb1e4ced8e-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/28c8f484-d3b2-47d3-9134-2ebb1e4ced8e-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/28c8f484-d3b2-47d3-9134-2ebb1e4ced8e-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:preformatted {"style":{"color":{"background":"#f7dfd0"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f7dfd0">В 2026 году главной угрозой стали не люди, а <span class='font-weight-bold'>AI-агенты и RAG-системы</span> ваших же клиентов. Одна моя знакомая любит фразу «насколько это плохо, что аж хорошо». Так вот в <a href="https://quality-lab.ru/blog/qa-agenty-avtonomnoe-testirovanie-2026/" target="_blank" rel="noreferrer noopener">отношении ИИ-агентов</a> вполне можно ее использовать наоборот. Они настолько хороши, что аж плохо. Не согласны?<br><br></pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>Если раньше нагрузка была человекочитаемой, то теперь клиент может подключить к вашему API своего умного помощника ИИ, который начнет выкачивать данные для обучения или индексации&#8230;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Но! Бот не делает пауз. Вот вам проблема. Он обходит кэш, подставляя уникальные параметры в каждый запрос. И в результате ваш кэш фактически вымывается за секунды, и 90% трафика летит напрямую в БД. Без жесткого Rate Limiting на уровне API Gateway такие агенты выкашивают SaaS быстрее любого DDoS (о безопасности ваших проектов писали <a href="https://quality-lab.ru/blog/sast-dast-iast-kak-vybrat-instrumenty-testirovaniya-bezopasnosti-i-ne-sojti-s-uma/" target="_blank" rel="noreferrer noopener">тут</a>).</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#f7f38d8f"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f7f38d8f"><span class='font-weight-bold'><em>Совет от ЛК.</em></span> Проверьте свои <span class='font-weight-bold'>User-Agent</span> логи. Если там внезапно вырос трафик от python-requests или специфических AI-библиотек, это оно, нашествие агентов. Но будьте осторожны, так как продвинутые агенты умеют притворяться обычным Chrome, и тогда их приходится ловить уже по аномальной скорости и машинной последовательности запросов.</pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Архитектурные <a href="https://quality-lab.ru/blog/kak-izbezhat-uzkix-mest-v-testirovanii-programmnogo-obespecheniya/" target="_blank" rel="noreferrer noopener">«бутылочные горлышки»</a></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Даже если (не хочется никого задеть, но так бывает редко) код идеален, система упирается в физические и логические пределы.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">База данных все равно что проклятие Multi-tenancy</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column {"width":"66.66%"} --></p>
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:preformatted {"style":{"color":{"background":"#ddf4dc"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#ddf4dc">В SaaS данные всех клиентов часто лежат в одной базе данных. Если один крупный клиент запустит свой тяжелый годовой отчет, что мы увидим? СУБД начнет читать миллионы строк, пересчитывать агрегаты, строить временные таблицы и тут умирают все остальные клиенты, даже те, кто просто зашел почитать профиль. Тяжелый запрос захватывает ресурсы или ставит эксклюзивные блокировки на таблицы, через которые пытаются пройти другие пользователи. Просто потому, что данные всех клиентов лежат в одной БД, начинается тормозуха.</pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column {"width":"33.33%"} --></p>
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":29375,"width":"305px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/3eef3783-9a12-4fbd-bce8-94e81fc9c6fb-Photoroom.png" alt="3eef3783-9a12-4fbd-bce8-94e81fc9c6fb-Photoroom" class="wp-image-29375" style="width:305px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/3eef3783-9a12-4fbd-bce8-94e81fc9c6fb-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/3eef3783-9a12-4fbd-bce8-94e81fc9c6fb-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/3eef3783-9a12-4fbd-bce8-94e81fc9c6fb-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/3eef3783-9a12-4fbd-bce8-94e81fc9c6fb-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:paragraph --></p>
<p>Такие проблемы, как мы писали в прошлый раз, решаются изоляцией ресурсов (Resource Quotas) на уровне БД или шардированием по клиентам.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Точка насыщения и Scaling Lag</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Облачный автоскейлинг (AWS, Yandex Cloud) смахивает на попытку догнать уходящий поезд. Это не волшебная палочка, а <span class='font-weight-bold'>инерционная система</span>. Новым мощностям нужно время на прогрев, а вашим пользователям нужен результат здесь и сейчас.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Scaling Lag.</span> Новым подам в Kubernetes нужно max 2 минуты, чтобы подняться и «прогреться». Если всплеск нагрузки произошел за 20 секунд, подмога просто не успеет.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Connection Pool.</span> Допустим, вы добавили 10 новых серверов приложений, но забыли, что база данных принимает только 500 одновременных соединений. Новые серверы просто выбьют старые и система ляжет окончательно.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Почему тесты не показывают деградацию?</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Большинство команд совершает три критические ошибки при анализе отчетов:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Ложь среднего арифметического.</span> Среднее время ответа почти ничего не говорит о реальном опыте пользователей. Если оно 200 мс, это звучит отлично. Но смотреть нужно на <span class='font-weight-bold'>P99</span><sup data-fn="d3be80b8-6be6-4c41-a77d-61a3d6e30113" class="fn"><a href="https://quality-lab.ru#d3be80b8-6be6-4c41-a77d-61a3d6e30113" id="d3be80b8-6be6-4c41-a77d-61a3d6e30113-link">1</a></sup>. Если он 15 секунд, значит каждый сотый пользователь просто сидит и смотрит на спиннер.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Отсутствие Soak-тестирования, то есть тестирования выносливости.</span> Короткий тест на 15 минут не покажет утечки памяти или фрагментацию индексов. Настоящие проблемы в SaaS выплывают на поверхность через 4-6 часов стабильно высокой нагрузки.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Синтетические данные.</span> Тестировать на базе в 1 ГБ, когда в проде 1 ТБ, бессмысленно. На больших объемах планировщик SQL-запросов будет вести себя иначе, а Join-ы, которые летали в тесте, превратятся в бесконечное чтение с диска.</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Как ЛК защищает бизнес-метрики клиентов</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Мы в аутсорс-разработке смотрим на нагрузку глазами бизнеса. Падение сервиса не выглядит чисто как какая-то 500-я ошибка (Internal Server Error). Бизнес остро чувствует ее, это потерянный <a href="https://quality-lab.ru/blog/kak-bagi-snizhayut-prodazhi-v-riteile-2026/" target="_blank" rel="noreferrer noopener">LTV</a> и сожженный рекламный бюджет.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Стек musthave-практик для 2026 года:</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Chaos Engineering.</span> Мы принудительно «убиваем» микросервисы в нагрузочном контуре, чтобы проверить, работает ли <span class='font-weight-bold'>Circuit Breaker</span> (предохранитель)<sup data-fn="544318e1-c18c-43ef-bd41-c3850c594a4c" class="fn"><a href="https://quality-lab.ru#544318e1-c18c-43ef-bd41-c3850c594a4c" id="544318e1-c18c-43ef-bd41-c3850c594a4c-link">2</a></sup>, который не даст всей системе упасть за одним звеном.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Graceful Degradation.</span> Проектируем систему так, чтобы при пиках она отключала неважную, но приятную глазу пользователя, мишуру (аватарки, ленту рекомендаций), при этом сохраняла критический путь (оплату и запись данных).</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Observability 2.0.</span> Мониторим не CPU/RAM, а бизнес-транзакции и длину очередей. Мы считываем <span class='font-weight-bold'>симптомы усталости</span> системы за 5 минут до того, как она упадет в глубокий обморок. Это дает нам время на маневр, а вашему бизнесу непрерывность.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Что в итоге?</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:preformatted {"style":{"color":{"background":"#f9e8db"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f9e8db">В конечном счете, пользователю все равно, сколько у вас микросервисов и какой стек. Ему нужно, чтобы кнопка сработала здесь и сейчас. Наша задача как раз сделать так, чтобы красивые отчеты о тестировании не превращались в тыкву при первом серьезном вызове. <span class='font-weight-bold'>SaaS в 2026 году должен быть адаптивным: </span>уметь масштабироваться под AI-ботов, изолировать «шумных соседей» и сохранять лицо даже в условиях частичного отказа.&nbsp;</pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29378,"sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/5638bef2-28bb-491d-be67-6ec17c8154b4-Photoroom.png" alt="5638bef2-28bb-491d-be67-6ec17c8154b4-Photoroom" class="wp-image-29378" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/5638bef2-28bb-491d-be67-6ec17c8154b4-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/5638bef2-28bb-491d-be67-6ec17c8154b4-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/5638bef2-28bb-491d-be67-6ec17c8154b4-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/5638bef2-28bb-491d-be67-6ec17c8154b4-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>SaaS падает не от нехватки мощностей, как мы уже сказали. Можно бесконечно масштабировать API, но упереться в лимиты облачного провайдера или блокировки БД. Нагрузочное тестирование для нас – это своего рода поиск того самого кирпичика, который вылетит первым и лучше найти его в тестовом контуре, чем объясняться с клиентами во время сбоя в прод.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><em>&nbsp;Если вам претит отчет для галочки и нужен реальный стресс-тест системы в условиях работы пользователя 2026 года, мы на связи.</em></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:footnotes /--></p>]]></description>
<link>https://quality-lab.ru/blog/blog-pochemu-saas-padaet-pri-roste-polzovateley/</link>
<pubDate>Tue, 24 Mar 2026 11:45:53 +0300</pubDate>
</item>
<item>
<title>Cursor AI для ревью ручных тест-кейсов в TestOps</title>
<description><![CDATA[<p>Автор: Олег Малышев, <a href="https://t.me/OlegMalyshevBlog/188" mce_href="https://t.me/OlegMalyshevBlog/188" target="_blank" style="">телеграмм-канал автора про QA,QA Auto, AI, Вайбкодинг</a></p><p>
<em>Всем привет! Я один из лидеров стека тестирования в компании «ТехВилл» (в простонародье — Head QA). Моя цель простая: снимать рутину с QA-инженеров с помощью AI-инструментов.</em></p><p>В идеальном мире мы «скармливаем» модели, требования, ссылки на Figma, ветки в Git и прочие артефакты через MCP, а она помогает:</p><p>1) писать тест-кейсы по контексту,</p><p>2) а затем — генерировать автотесты на базе этих кейсов.</p><p>Про генерацию тест-кейсов из Swagger и автотестов на API по тест-кейсам через Cursor (на реальном проекте) я уже записывал<a href="https://t.me/OlegMalyshevBlog/188" mce_href="https://t.me/OlegMalyshevBlog/188" rel="noopener noreferrer nofollow" target="_blank"><strong> большой гайд про «вайбкодинг/вайбтестинг»</strong></a><strong>.</strong> В этом гайде я в том числе показал свой подход вайбкодинга через вспомогательные файлы типа <a href="http://roadmap.md" mce_href="http://roadmap.md" rel="noopener noreferrer nofollow" target="_blank"><code>roadmap.md</code></a><code>, </code><a href="http://progress.md" mce_href="http://progress.md" rel="noopener noreferrer nofollow" target="_blank"><code>progress.md</code></a><code>, </code><a href="http://refactor.md" mce_href="http://refactor.md" rel="noopener noreferrer nofollow" target="_blank"><code>refactor.md</code></a><code>, </code><a href="http://context.md" mce_href="http://context.md" rel="noopener noreferrer nofollow" target="_blank"><code>context.md</code></a> и т. д. В таком подходе мне удалось завайбкодить два своих микропродукта на JS, у одного из которых более 60 000 weekly users (при том, что я ни разу не программист и JS «не знаю совсем»).&nbsp;</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-tools/4490-cursor-ai</link>
<pubDate>Sun, 22 Mar 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Как рассчитать реальный предел SaaS</title>
<description><![CDATA[<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p>SaaS-продукты, да и не только они, конечно, редко падают красиво. Они делают это медленно и нервно. Вот у вас всё работает, а потом… Сначала интерфейс начинает «думать» пару секунд. Затем отчеты в ERP считаются почти минуту. Дальше в пиковые часы API как будто заболевает Альцгеймером. Под конец квартала база начинает ловить блокировки. При этом если смотреть формально – ничего не сломано. Прод жив, но не покидает ощущение, что вся система будто на пределе.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29342,"width":"365px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/0798e9fe-8d59-42a7-a9c2-3dd7558e7cd6-Photoroom.png" alt="0798e9fe-8d59-42a7-a9c2-3dd7558e7cd6-Photoroom" class="wp-image-29342" style="width:365px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/0798e9fe-8d59-42a7-a9c2-3dd7558e7cd6-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/0798e9fe-8d59-42a7-a9c2-3dd7558e7cd6-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/0798e9fe-8d59-42a7-a9c2-3dd7558e7cd6-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/0798e9fe-8d59-42a7-a9c2-3dd7558e7cd6-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph {"style":{"color":{"background":"#c8beee8f"}}} --></p>
<p class="has-background" style="background-color:#c8beee8f">Опираясь на наш опыт аудита SaaS-систем (от ERP-гигантов до HR-tech стартапов), мы пришли к выводу, что в 70-80%<span class='font-weight-bold'> случаев</span> проблемы масштабирования растут не из нехватки «железа», а из ошибок в моделировании нагрузки. Количество пользователей в системе прекрасно известно всей команде, но мало кто понимает, какая нагрузка на самом деле живет внутри продукта.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Ничего не ломается, но всё тормозит</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Техническая точка невозврата случается, когда на радость бизнесу продажи растут, но есть нюанс – новые клиенты приходят быстрее, а архитектура за такими темпами не успевает. Проект обрастает новыми модулями, интеграциями, аналитикой. И наверх идут отчеты о том, как все хорошо выглядит. А вот внутри система начинает вести себя странно, потому что никто до конца не понимает <span class='font-weight-bold'>Point of Saturation</span><sup data-fn="3d2618b2-109a-45c4-a265-972ab9b33a5f" class="fn"><a href="https://quality-lab.ru#3d2618b2-109a-45c4-a265-972ab9b33a5f" id="3d2618b2-109a-45c4-a265-972ab9b33a5f-link">1</a></sup>.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>У этой ситуации две стороны &#8212; бизнес и техничка.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>1.<span class='font-weight-bold'>Бизнес-уровень.</span> В системах вроде ERP, BI или КЭДО продукт работает с крупными компаниями или госзаказчиками. SLA под ФЗ-44/223 далеко не формальность. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Когда мы говорим о SLA или нагрузочном тестировании для клиентов из этой сферы, нужно понимать:</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>По 44-ФЗ если ваш софт упадет и нарушит сроки, прописанные в госконтракте, компанию-поставщика могут внести в РНП (Реестр недобросовестных поставщиков). Это фактически «волчий билет» на рынке госзакупок на 2 года.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>По 223-ФЗ видим, что требования к отказоустойчивости могут быть прописаны в договоре очень детально, и штрафные санкции там часто намного выше рыночных, так как крупные корпорации оценивают свои убытки от простоя в миллионы рублей в минуту.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>2. Технический уровень.</span> Команда видит симптомы заболевания, то есть деградации: медленные SQL-запросы, длинные релизы без нормальной тестовой документации и падения API в пиках.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Большинство инструментов мониторинга показывают текущее состояние. Но так уж устроено, что <a href="https://quality-lab.ru/blog/saas-kak-uvelichit-stabilnost-i-sokratit-ottok/" target="_blank" rel="noreferrer noopener">SaaS-продукт </a>живет <span class='font-weight-bold'>будущей нагрузкой</span>.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Из чего на самом деле состоит нагрузка SaaS</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>В инженерной культуре топовых SaaS-сервисов нагрузку никогда не меряют «в человеках», простите. Давайте воспользуемся понятием <span class='font-weight-bold'>Resource-Heavy Operation (RHO)</span>. Нагрузка смахивает на многослойный пирог, в котором есть такие слои, как:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Пользовательская активность.</span> И это не общее количество аккаунтов, а одновременные сессии и частота операций. Нужно учитывать RPS<sup data-fn="63bdc6c6-42b5-46a7-8a7d-a13fa43a036d" class="fn"><a href="https://quality-lab.ru#63bdc6c6-42b5-46a7-8a7d-a13fa43a036d" id="63bdc6c6-42b5-46a7-8a7d-a13fa43a036d-link">2</a></sup>.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Тяжелая бизнес-логика.</span> Формирование отчетов, расчет зарплаты, агрегации. Один фоновый экспорт данных в ERP может потреблять в 45 раз больше I/O<sup data-fn="d2799e88-2794-41ea-bbd7-5951247c5df6" class="fn"><a href="https://quality-lab.ru#d2799e88-2794-41ea-bbd7-5951247c5df6" id="d2799e88-2794-41ea-bbd7-5951247c5df6-link">3</a></sup> ресурсов БД, чем стандартный API-вызов на чтение профиля.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Интеграции.</span> Взаимодействие с 1С, СМЭВ или партнерскими системами. Они могут создавать до 50% всех задержек.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Слой данных.</span> Большая база = большая боль. Если продукт старше пары лет, БД стала узким местом, поверьте. Тяжелые JOIN<sup data-fn="079092a7-d1b3-446f-9d6c-455dcc470ede" class="fn"><a href="https://quality-lab.ru#079092a7-d1b3-446f-9d6c-455dcc470ede" id="079092a7-d1b3-446f-9d6c-455dcc470ede-link">4</a></sup> и блокировки определяют предел масштабирования.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Фоновые процессы. </span>Очереди задач, ETL<sup data-fn="9b8f1a02-d3b0-4617-87c9-3d3c517ce479" class="fn"><a href="https://quality-lab.ru#9b8f1a02-d3b0-4617-87c9-3d3c517ce479" id="9b8f1a02-d3b0-4617-87c9-3d3c517ce479-link">5</a></sup> и индексация&#8230; При росте нагрузки они начинают конкурировать с пользователями за CPU и память.</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Как рассчитать нагрузку: от «юзеров» к стоимости сценария</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Вместо упрощенных метрик мы используем модель, учитывающую вес каждой операции: </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#f7ce8d8f"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f7ce8d8f">N = (U х C) х S х P </pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph --></p>
<p>Где</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>U</span> – общее количество пользователей.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>C</span> – это коэффициент одновременной активности.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>S (Scenario Cost)</span> – так называемая «стоимость» сценария. Вес конкретной бизнес-операции в ресурсах системы. Это по итогу самое главное и есть.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>P</span> – пик-фактор (например, конец отчетного периода).</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Смысл формулы простой. Система должна выдерживать не просто пользователей, а пиковую комбинацию сценариев. Например, в ERP 3000 пользователей, 800 одновременных сессий, 1000 отчетов в час. Если конец месяца увеличивает активность в пять раз, архитектура должна выдержать именно этот момент. Можете посчитать сами</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Средняя нагрузка здесь вообще ничего не говорит.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph {"style":{"color":{"background":"#e6f0f9"}}} --></p>
<p class="has-background" style="background-color:#e6f0f9"><span class='font-weight-bold'>Рабочий кейс, как пример. </span>Команда ERP готовилась к 5 000 юзеров. Но аудит показал, что один процесс «Закрытие отчетного периода» генерирует нагрузку, эквивалентную 15 000 RPS. Система была готова к людям, но не была готова к бухгалтерии.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Архитектурная ловушка SaaS, если одна база для всего</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Почти все SaaS-продукты начинают одинаково. Создаётся база данных. В ней живет всё: операционные данные, аналитика, отчеты, интеграции, история операций. На ранней стадии это абсолютно нормальная архитектура. У этого свои плюсы, ведь она проста. Ее легко поддерживать. Она быстро развивается. Но по мере роста продукта в этой модели появляется скрытая проблема. Операционные сценарии и аналитические сценарии начинают конкурировать за одни и те же ресурсы.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Например, пользователь открывает карточку клиента. Это быстрый транзакционный запрос. Одновременно с ним другой пользователь запускает сложный управленческий отчет, который может сканировать миллионы строк, выполнять тяжелые JOIN, строить агрегации… В результате тяжелые аналитические запросы начинают занимать CPU, блокировать таблицы, забивать I/O, и вся система начинает вести себя соответственно – интерфейс «подвисает», API отвечает медленнее, в очередях задач растет задержка. При этом формально база работает.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Это почти неизбежный путь, потому что на старте продукта аналитика мало нагружает систему. Но через несколько лет проект обрастает «мясом» и аналитические запросы начинают занимать всё больше ресурсов. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Решается эта проблема обычно тремя вариантами</span>:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Можно разделить OLTP и аналитику. </span>Операционные запросы остаются в основной базе.  Аналитика уходит в отдельный контур.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Или использовать асинхронные расчеты, </span>когда тяжелые операции переносятся в фоновые задачи.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Либо внедрить предварительную агрегацию, </span>когда часть расчетов выполняется заранее. Это уменьшает нагрузку в моменты, когда пользователи открывают отчеты или дашборды.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} --></p>
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":29338,"width":"346px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/1c066c25-b83f-4f03-af90-bc0ee29bdcc6-Photoroom.png" alt="1c066c25-b83f-4f03-af90-bc0ee29bdcc6-Photoroom" class="wp-image-29338" style="width:346px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/1c066c25-b83f-4f03-af90-bc0ee29bdcc6-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/1c066c25-b83f-4f03-af90-bc0ee29bdcc6-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/1c066c25-b83f-4f03-af90-bc0ee29bdcc6-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/1c066c25-b83f-4f03-af90-bc0ee29bdcc6-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column {"width":"66.66%"} --></p>
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:paragraph --></p>
<p>Почему это нельзя игнорировать при моделировании нагрузки? Если аналитика и транзакционные операции живут в одном контуре, система может выдерживать обычную пользовательскую активность.Но в моменты, когда запускаются тяжелые отчеты, нагрузка меняется резко. И вот в этот момент лезут симптомы, которые многие команды списывают на «временные тормоза»: деградация/Альцгеймер API, зависание интерфейса, рост времени SQL-запросов. Поэтому при расчете нагрузки SaaS важно учитывать не только пользователей, но и <span class='font-weight-bold'>архитектуру обработки данных</span>. Иногда именно она определяет реальный предел системы.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Отраслевые профили нагрузки</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>ERP и учетные системы. </span> Главный риск для них это БД. Основная нагрузка идет от расчетов и работы с огромными таблицами.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>BI-системы </span>потребляют CPU и память. Нагрузка формируется аналитическими выборками и рендерингом дашбордов.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>У различных CRM </span>более равномерная нагрузка, но с резкими скачками во время импорта данных или массовых рассылок.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>HR-tech и КЭДО</span> (кадровый электронный документооборот)<span class='font-weight-bold'>. </span>Самые агрессивные пики приходятся на массовое подписание документов, или когда кадровые кампании поднимают нагрузку в 5-8 раз за считанные минуты.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Одна из распространенных ошибок при расчете нагрузки использовать одинаковую модель для всех типов продуктов. Но профиль нагрузки у ERP, CRM или HR-систем отличается радикально.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:table --></p>
<figure class="wp-block-table">
<table class="has-fixed-layout">
<tbody>
<tr>
<td><span class='font-weight-bold'>Тип SaaS-системы</span></td>
<td><span class='font-weight-bold'>Основной источник нагрузки</span></td>
<td><span class='font-weight-bold'>Характер нагрузки</span></td>
<td><span class='font-weight-bold'>Типичный пик-фактор</span></td>
<td><span class='font-weight-bold'>Главный риск производительности</span></td>
</tr>
<tr>
<td><span class='font-weight-bold'>ERP / MES</span></td>
<td>отчеты, закрытие периодов, расчет себестоимости</td>
<td>тяжелые SQL-операции, большие JOIN</td>
<td>4-6x</td>
<td>деградация базы данных и блокировки</td>
</tr>
<tr>
<td><span class='font-weight-bold'>BI / аналитика</span></td>
<td>построение дашбордов, агрегации</td>
<td>сканирование больших объемов данных</td>
<td>3-5x</td>
<td>перегрузка CPU и I/O</td>
</tr>
<tr>
<td><span class='font-weight-bold'>CRM</span></td>
<td>API, карточки клиентов, интеграции</td>
<td>большое количество коротких операций</td>
<td>2-3x</td>
<td>перегрузка API и очередей</td>
</tr>
<tr>
<td><span class='font-weight-bold'>HR-tech / КЭДО</span></td>
<td>массовое подписание документов, расчет зарплат</td>
<td>пакетные операции</td>
<td>4-7x</td>
<td>рост очередей и задержка фоновых задач</td>
</tr>
<tr>
<td><span class='font-weight-bold'>EdTech</span></td>
<td>массовые входы пользователей, сдача тестов</td>
<td>резкие пики пользовательской активности</td>
<td>5-10x</td>
<td>перегрузка авторизации и кэша</td>
</tr>
</tbody>
</table>
</figure>
<p><!-- /wp:table --></p>
<p><!-- wp:paragraph --></p>
<p>Что здесь важно, давайте разберем подробнее. В ERP нагрузку чаще всего создают <span class='font-weight-bold'>несколько тяжелых операций</span>, а не тысячи пользователей. В CRM, наоборот, каждая операция легкая, но их очень много. В HR-системах и КЭДО большую роль играют <span class='font-weight-bold'>пакетные сценарии</span>. А в EdTech система может спокойно работать весь день, но «взорваться» во время массового тестирования или экзамена.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Именно поэтому универсальной модели нагрузки для SaaS не существует. Архитектура может выглядеть устойчивой при обычной активности, но один конкретный сценарий способен увеличить нагрузку в несколько раз.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>В большинстве SaaS-систем 10-15% сценариев создают до 80% нагрузки. При моделировании важно сначала найти <span class='font-weight-bold'>самые тяжелые операции</span>, а уже потом считать пользователей.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Миграция и Performance Regression Gap</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Сейчас многие команды проходят через переезд с AWS/Azure на Yandex Cloud, Selectel или миграцию на <span class='font-weight-bold'>Astra Linux</span> и <span class='font-weight-bold'>Postgres Pro</span>. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Критическая точка. Мы регулярно фиксируем так называемую <span class='font-weight-bold'>Performance Regression Gap</span>. Это ситуация, когда после миграции те же самые сценарии начинают нагружать систему на 30-40% сильнее. Среди причин, конечно, особенности работы ядра ОС, драйверов или сетевых задержек в новой инфраструктуре. К тому же без предварительного синтетического моделирования этот разрыв «вымывает» запас прочности архитектуры еще до того, как в систему зайдет первый клиент.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Что дает аудит, или оbservability-first testing</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Для нас нагрузочное тестирование не остается разовым отчетом в PDF. Фактически это внедрение <span class='font-weight-bold'>o bservability-инструментария</span><sup data-fn="f8bbc6f2-0e0a-43aa-a998-e19ed89edf50" class="fn"><a href="https://quality-lab.ru#f8bbc6f2-0e0a-43aa-a998-e19ed89edf50" id="f8bbc6f2-0e0a-43aa-a998-e19ed89edf50-link">6</a></sup>. «Положить» систему могут многие, но мы параллельно еще и настраиваем APM (Application Performance Monitoring), чтобы команда видела деградацию API в реальном времени.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Частые находки:</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>Синхронные операции там, где жизненно необходимы очереди.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Архитектурные ограничения, которые поперек горла горизонтальному масштабированию.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>«Мусорные» запросы к базе, а ведь их можно оптимизировать одним индексом.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Когда пора звать внешнюю экспертизу?</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Мы уже не раз говорили о том, что аудит нагрузки часто больше как страховка, нежели лечение. Если вы заметили, что:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>продукт начал замедляться</span> и интерфейс «фризит» в пики,</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>планируется резкий рост </span>+ выход на крупных B2B-заказчиков с жестким SLA,</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>есть миграция инфраструктуры </span>+ нужно подтвердить работоспособность на новом стеке,</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:paragraph --></p>
<p>Мы заходим в проект за <span class='font-weight-bold'>48 часов</span>, обеспечиваем полный цикл от расчета мощностей до настройки авто-метрик и обучения вашей команды. Единственные на рынке, мы предлагаем не просто «руки», а создание вашей внутренней <span class='font-weight-bold'>корпоративной школы QA</span> через наш УЦ, чтобы вы перестали зависеть от дорогого найма. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Key Takeaways</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Не считайте людей, считайте операции.</span> Один «тяжелый» отчет может стоить как тысяча кликов.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Моделируйте пики, а не среднее.</span> Средняя температура по больнице не поможет, когда в систему одновременно зайдут все сотрудники компании-клиента.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Закладывайте риск миграции.</span> Переезд на Astra Linux или Postgres Pro требует специфических регрессов.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Внедряйте Observability.</span> Вы должны видеть точку насыщения системы за месяцы до того, как она станет критической.</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'><em>Ваш SaaS готов к следующему этапу роста?</em></span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><em>Запишитесь на аудит нагрузки и получите расчет модели вашей системы и план масштабирования.</em></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:footnotes /--></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>]]></description>
<link>https://quality-lab.ru/blog/kak-rasschitat-predel-nagruzki-saas/</link>
<pubDate>Tue, 17 Mar 2026 15:44:57 +0300</pubDate>
</item>
<item>
<title>Тестируй не дольше, а с умом: стратегия шифт-вниз</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/12hs/shift-down-strategy.jpg" mce_src="https://software-testing.ru/images/stories/library/12hs/shift-down-strategy.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Маниш Саини (Manish Saini)<br /><strong><a href="https://www.ministryoftesting.com/articles/testing-software-smarter-not-harder-the-shift-down-strategy" mce_href="https://www.ministryoftesting.com/articles/testing-software-smarter-not-harder-the-shift-down-strategy" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p><h1>Введение в тестирование «shift-вниз»</h1>
<p>Исследуя тестирование программного обеспечения, часто слышишь про два подхода: <strong>shift left</strong> (сдвиг тестирования на более ранние этапы разработки) и <strong>shift right</strong> (расширение тестирования до прода). Оба подхода полезны, как проверка дома во время строительства и после него. Однако существует ещё одно измерение, которое заслуживает внимания — сдвиг вниз, ближе к фундаменту кода.</p>
<p>Представьте, что вы строите дом. Разве вы начнёте украшать стены до того, как убедитесь, что фундамент прочен? Схожим образом в тестировании ПО (хоть мы зачастую сосредотачиваемся на проверке того, что видят конечные пользователи, на стенах и декоре) тщательное тестирование фундамента приносит огромную пользу. Здесь и приходит на помощь <strong>сдвиг тестирования вниз</strong>.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/test-analysis/4461-shift-down-strategy</link>
<pubDate>Mon, 16 Mar 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Плохой промпт vs хороший: как контекст меняет тесты ИИ</title>
<description><![CDATA[<p>Автор: Екатерина Гаврилова</p>
<p>Всем привет! Меня зовут Катя и я QA Tech lead в MD Audit.  </p><p>В прошлой <a href="https://software-testing.ru/library/testing/general-testing/4477-ii" mce_href="https://software-testing.ru/library/testing/general-testing/4477-ii" style="">статье</a> я рассказала, какой подход помог мне сделать ИИ напарником по тестированию и поделилась формулой хорошего промпта для QA.</p><p>Но остаётся вполне логичный вопрос — А какая вообще разница? Ну попрошу я написать ИИ тесты без контекста. Что изменится в полученном результате?  </p><p>Ведь где-то внутри всегда сидит ленивая версия нас и шепчет «И так сойдет». </p><p>В этой статье я покажу, почему, зная формулу «<strong>Роль → Задача → Контекст → Формат</strong>», нужно использовать именно её, как бы ни хотелось отправить ИИ что-то в духе: «Напиши тесты для логина, пожалуйста» и надеяться на лучшее.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-tools/4488-ii</link>
<pubDate>Sun, 15 Mar 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Low-code инструменты автоматизации: первые впечатления и советы новичкам</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/12hs/low-code-test-automation-tools.jpg" mce_src="https://software-testing.ru/images/stories/library/12hs/low-code-test-automation-tools.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Мирза Зизик (Mirza Sisic)<br /><strong><a href="https://www.ministryoftesting.com/articles/low-code-test-automation-tools-first-impressions-and-recommendations-for-beginners" mce_href="https://www.ministryoftesting.com/articles/low-code-test-automation-tools-first-impressions-and-recommendations-for-beginners" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p><p>В этой статье я расскажу о первых впечатлениях и опыте использования инструмента low-code для автоматизации UI-тестов. Если вы незнакомы с термином «инструменты для автоматизации тестирования с низким порогом кода (low-code)», это визуальные инструменты, позволяющие пользователям автоматизировать тесты с минимальными или нулевыми знаниями программирования.</p>
<p>Из-за большого количества таких инструментов на рынке не всегда просто выбрать тот, который подходит вашему контексту. К счастью, большинство из них позволяют попробовать продукт перед покупкой, так что можно использовать пробные версии, чтобы сравнить разные решения.</p>
<p><strong>Обязательно используйте бесплатные пробные версии по максимуму, прежде чем принимать решение</strong>. Главные преимущества таких инструментов — низкий порог входа и быстрое создание тестов.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-tools/4463-low-code-test-automation-tools</link>
<pubDate>Thu, 12 Mar 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Эльба: ну вы там как-нибудь сами проверьте, где ошибка произошла</title>
<description><![CDATA[<p>Продолжаю рассказывать про «<a href="https://okiseleva.blogspot.com/search/label/%D0%B4%D0%B0%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B3%D0%BE%20%D0%BD%D0%B5%20%D0%B1%D1%8B%D0%B2%D0%B0%D0%B5%D1%82" target="_blank">да такого не бывает</a>» в наши дни. У ИП подошел срок платить страховые взносы. У меня вся бухгалтерия в Эльба.Контур, которая и выставила мне задачку.</p><p>Зашла в эльбу, прокликала задачу до "выставить счет в банке", и тут она мне выдает ошибку — не настроена связь с банком о_О</p><p>Она автоматизированная и была настроена. Перешла в личный кабинет, и правда, нет связи. Потом и на главной странице уже заметила, что сумма на счету отображается неправильная...&nbsp;</p><p>Восстановила соединение с банком и тут же написала в поддержку. Мой исходный вопрос был предельно простой, как быстро Эльба всё подсосет:</p><p>- У меня была разорвана связь с банком, сейчас восстановила — <i>Интеграция c Альфа-Банком настроена с 18.02.2025</i>. Получается, задача "заплатить страховые взносы" неактуальна, если данные не получала система с 18 февраля? Как быстро она подсосет все, что нужно?</p><p>Но во что это вылилось, у-у-у-у.... Давайте я сначала покажу нашу примерную переписку за эти 2 дня, от которой у меня до сих пор бомбит, а потом кратко подведу её итоги (если лень читать всё).</p><span><a name='more'></a></span><p><br /></p><h3 style="text-align: left;">Переписка с поддержкой</h3><p>Сначала в чате с поддержкой тебе отвечает бот. Он увидел ключевые слова про страховые взносы и накатал огромное сообщение на целый лист (чат с техподдержкой это такой узкий, выплывает справа снизу на экране, вот его лист):</p><p>-&nbsp;Обязанность по уплате страховых взносов ИП за себя определена ФЗ... <i>(бла-бла-бла, о том, почему я вообще должна платить взносы)</i></p><p>-&nbsp;Это вообще не про мой вопрос</p><p>На эту фразу бот уходит искать человека. Когда я восстанавливала связь, система предложила подписать согласие на передачу данных банком. Я подумала, что все дело в этом, согласие понадобилось, поэтому докинула вопрос:</p><p>- Почему эльба не написала, что связь с банком разорвана? по сути это же вы просто согласие затребовали подписать, почему не было письма тогда? Ну и как теперь исправить некорректные данные в эльбе? раз она про часть данных не знала</p><p>То есть жду ответ, что "подождите пару часов и все подсосется" или "сделайте то и то". Ок. Приходит человек:</p><p>- Если ранее не были загружены операции ранее 18.02.2025 года, то необходимо перенастроить интеграцию с банком. Интеграция настраивается в течении суток.</p><p>Либо можно скачать выписку банка в формате 1С с расширением *.txt, тогда операции загрузятся сразу.</p><p>Чтобы загрузить выписку: ...</p><p>Если платёж уже заведен в Эльбу вручную, то он не задвоится, если будут совпадать:</p><p>1. номер платёжного поручения;</p><p>2. сумма;</p><p>3. дата;</p><p>4. ИНН-КПП контрагента.</p><p>В ином случае в сервисе будет создан дубль операции.</p><p>Если? Что значит "если"??</p><p>- Откуда я знаю, были загружены операции ранее 18.02 или нет? У меня была настроена интеграция, сообщения об ошибке в ней я не получала, и как я должна понять, с каких пор ошибка и что она затронула? все платежи с начала года выверять? Сейчас на главной блок "деньги" вообще не верный</p><p>-&nbsp;Если платёж уже заведен в Эльбу, то он не задвоится, если будут совпадать:</p><p>1. номер платёжного поручения;</p><p>2. сумма;</p><p>3. дата;</p><p>4. ИНН-КПП контрагента.</p><p>В ином случае в сервисе будет создан дубль операции.&nbsp;Можете просто загрузить операции в раздел Деньги вручную. Если есть лишние операции, их потребуется удалить вручную.</p><p>***</p><p>То есть мне снова сделали копипасту "когда дубля не будет". Только я тестировщиком работаю и прекрасно понимаю, что, раз шанс ошибки и возникновения дублей есть, я хочу его избежать. В конце концов, мне за дубли налоги платить придется, а не им.</p><p>А ещё очень умилило вот это вот "просто загрузите деньги вручную". Каждую операцию, да. Вручную...</p><p>В итоге я с ними ругалась, ругалась — почему мне надо загружать лишнее? Или самой искать, с какого момента был сбой? Это ведь их задача — локализовать ошибку.</p><p>Но техподдержка лишь лапки подняла:</p><p>- Доступ к учетной записи есть только у вас, консультанты технической поддержки не могут посмотреть информацию, которая отображается у вас в Эльбе. Вам надо посмотреть от какого числа у вас в разделе "Деньги" отражается информация по счету и сверить с данными из интернет-банка.</p><p>В общем, сами сидите и выверяйте, класс!</p><p>Самое смешное, что, когда я выверила — сидела и просматривала глазками 2 экрана, деньги в эльбе и в альфа-банке, то с текущей даты и назад до 28 января всё ок. Это я сегодня уже выверяла, а связь с банком восстановила вчера.</p><p>То есть по сути ответ на мой исходный вопрос мог быть коротким:</p><p>- Сбой произошел в январе из-за техработ в банке. Так как вы указали при восстановлении связи 18 февраля 2025 года, Эльба должна была все подтянуть. Проверьте на всякие случай поступления за последние пару дней и такого-то января, чтобы убедиться, что всё хорошо.</p><p>И ВСЁ! Но нет, надо было закидывать меня копипастой, писать какую-то фигню не про мои вопросы, а ещё рассказывать, как я могу сама локализовывать баг вместо них.</p><p>Сегодня уже ругалась на них, так мне консультанта сменили )))) Видимо, девушка не выдержала моих вопросов "почему эльба не написала мне про сбой", ну а что, они мне копипастят одно и то же, и я свои вопросы без ответа им в ответ копипастила.</p><p>Пришел парень, который знал систему, наконец-то! Он и пояснил всё:</p><p>- То что интеграция нарушена, Эльба пишет в разделе "Деньги" и при выполнении задачи по УСН, а так же в разделе "Реквизиты". На данный момент уведомление о разрыве интеграции не реализовано, зарегистрировал пожелание на доработу Эльбы.</p><p>"Интеграция настроена с 18.02.2025", это значит что все данные с этой даты подтянутся в Эльбу. Эта дата указывается при настройке интеграции с банком, но только в случае если она не была настроена, или была разорвана по кнопке "Разорвать связь с банком". Если интеграция была нарушена, и восстановлена по кнопке "Авторизоваться в банке" то дата не изменится, и за период когда интеграция была нарушена операции подтянутся.</p><p><i>(Я ведь спрашивала их, что значит эта дата. Я нажала "восстановить связь — ок", почти не глядя, так как уже делала это раньше. Как в винде, знаете, далее-далее-далее-ок.</i></p><p><i>А там, оказывается, можно указать дату, с которой восстанавливать, я даже внимания не обратила на неё. И нет бы другому консультанту ещё выше по переписке на вопрос "что значит это сообщение" подсказать, что это та дата, которую я указала (я не указывала, она подтянулась с прошлого разрыва связи) при восстановлении.</i></p><p><i>Пока я дождалась этого консультанта, я уже разорвала связь и снова восстановила, как меня попросила поддержка. И вот теперь я&nbsp;заметила эту дату. Почему только техподдержка не подсветила мне это "вот на этом экране вы выбрали дату (скрин), она и отображается в сообщении"?)</i></p><p>В вашем случае, если не помните как именно восстанавливали интеграцию, и нет возможности отследить хватает/не хватает операций(например, их было очень много и проверить все затруднительно) то можно подгрузить выписку из банка в формате 1С за весь 2025 и 2026 год в Эльбу. Если операция есть в Эльбе, то как правило она не задублируется, так как выписка из банка и выписка по интеграции идентичны.</p><p>***</p><p>В общем, всё Эльба сделала сама, можно было бы остановить переписку ещё на первом сообщении, при нормальном и грамотном ответе...</p><p><br /></p><h3 style="text-align: left;">Кратко</h3><div>Какие были проблемы в итоге:</div><div><br /></div><div>1. Нет извещения о сбое в системе. Да, связь разрушилась по вине банка, а не Эльбы, и мне техподдержка так и писала "ну это же банк виноват".&nbsp;</div><div><br /></div><div>Но мне, как пользователю, какая разница кто виноват? Вы видите ошибку в логах, связь разорвана. Можно прислать письмо «Связь с банком была разорвана, пожалуйста, зайдите в ЛК по ссылочке и нажмите "Восстановить" её». Всё.</div><div><br /></div><div>Да, я всё равно это узнаю во время выполнения задачи, но тогда больше шансов, что что-то не подтянется и придется подтягивать вручную.</div><div><br /></div><div><br /></div><div>2. Первая линия техподдержки слабая по данной проблеме. Нет адекватной инструкции на такой случай. Пример я писала выше:</div><div><br /></div><div>- Сбой произошел в январе из-за техработ в банке. Восстановите соединение, подождите сутки. Потом проверьте на всякие случай поступления за последние пару дней и такого-то января, чтобы убедиться, что всё хорошо.</div><div><br /></div><div>И всё. Проверить пару поступлений — это не сложно. А они предлагали проверить "на вкладке денег". За какой период — думай сам. Что проверять? Ну сам как-нибудь...&nbsp;</div><div><br /></div><div>Ну и объяснить, что значит сообщение в их системе, поддержка не смогла — там отображается дата, которую я сначала не поняла. Если ты систему знаешь, пояснить этот момент — дело пары минут...</div><div><br /></div><div>Ну вот, как-то так)</div><div><br /></div><div><br /></div><div><br /></div>]]></description>
<link>http://okiseleva.blogspot.com/2026/03/blog-post.html</link>
<pubDate>Thu, 12 Mar 2026 13:19:00 +0300</pubDate>
</item>
<item>
<title>Почему без реальных пользователей вы тестируете не продукт, а иллюзию?</title>
<description><![CDATA[<p><!-- wp:paragraph --></p>
<p>Представьте, что вы подготовили идеальные сценарии, отобрали методики, нашли респондентов&#8230; И тут заказчик говорит: «Тестировать будем не приложение, а вот этот макет в Figma». Знакомая ситуация? Если нет, то считайте, что вам повезло. Если да, ознакомьтесь с материалом &#8212; уверен, что он будет полезен и поможет не наломать дров.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29300,"width":"416px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/337df4c1-cd9b-41f1-8248-c968cece4c6d.png" alt="337df4c1-cd9b-41f1-8248-c968cece4c6d" class="wp-image-29300" style="width:416px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/337df4c1-cd9b-41f1-8248-c968cece4c6d.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/337df4c1-cd9b-41f1-8248-c968cece4c6d-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/337df4c1-cd9b-41f1-8248-c968cece4c6d-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/337df4c1-cd9b-41f1-8248-c968cece4c6d-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:preformatted --></p>
<pre class="wp-block-preformatted"><em>Меня зовут Дунько Харитон и я специалист по тестированию в “Лаборатории качества”. В этой статье на своём реальном кейсе покажу, почему юзабилити-тестирование (далее - ЮТ) является не просто «посмотреть, удобно ли», а полноценным расследованием с элементами психологии, аналитики и жесткого менеджмента. И что делать, если реальность вносит коррективы в ваши планы. Также расскажу почему общение с респондентами целевой аудитории важнее, чем технический аудит. </em></pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Юзабилити &#8212; это про деньги</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Да-да, ЮТ &#8212; это про деньги. Деньги, которые бизнес обязательно получит, если посмотрит на приложение глазами его пользователей.&nbsp;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Чем же ЮТ отличается от классического тестирования приложения? Если функциональное тестирование отвечает на вопрос: «Работает ли это так, как написано в ТЗ?», то юзабилити ищет ответ на другой: «Понятно ли это реальному, живому человеку и <span class='font-weight-bold'>готов ли он за это платить</span>?».</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>ЮТ специфический вид работ, который требует от тестировщика не только знания техник (вроде эвристик Нильсена или GOMS-анализа), но и насмотренности, понимания психологии и, что важнее всего, умения правильно интерпретировать поведение пользователя.&nbsp;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#f0f4f9"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f0f4f9">Плохой юзабилити интерфейс может привести к значительным финансовым потерям и оттоку клиентов. Вот например, есть такой показательный случай, когда компания столкнулась с негативными последствиями из-за игнорирования пользовательского опыта. В 2020 году сотрудники Citibank (один из крупнейших международных банков, дочерняя структура финансовой корпорации Citigroup) из-за запутанного интерфейса системы Flexcube случайно перевели кредиторам около <span class='font-weight-bold'>900 миллионов долларов</span> вместо запланированных <span class='font-weight-bold'>7,8 миллиона долларов</span>. Суд постановил, что банк несёт ответственность за ошибки, вызванные неудобным интерфейсом. </pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph --></p>
<p>Да и в целом исследования показывают, что <span class='font-weight-bold'>50% клиентов отказываются от использования нового продукта, если не разберутся с ними за первые 10 минут. </span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Кейс: платформа ITE Connect и её новый раздел</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>В компанию обратился заказчик &#8212; крупный организатор выставок в Российской Федерации с собственной платформой ITE Connect.&nbsp;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Передо мной была поставлена простая, но заковыристая задача &#8212;&nbsp; провести ЮТ нового раздела их приложения. Функциональность раздела включала в себя систему рекомендаций, которая на основе анализа сканированных QR-кодов (со стендов, бейджей) предлагала участникам мероприятия наиболее релевантные деловые контакты.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:quote --></p>
<blockquote class="wp-block-quote"><p><!-- wp:paragraph --></p>
<p>Цель звучала просто: понять, насколько функциональность «зайдет» пользователям, решает ли она их задачи и нужны ли им подсказки. И, самое главное, необходимо ли далее тратить ресурсы на ее разработку и совершенствование.</p>
<p><!-- /wp:paragraph --></p></blockquote>
<p><!-- /wp:quote --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29303,"sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/cee6d275-c94c-4a29-a241-bbb374c6072a-Photoroom.png" alt="cee6d275-c94c-4a29-a241-bbb374c6072a-Photoroom" class="wp-image-29303" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/cee6d275-c94c-4a29-a241-bbb374c6072a-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/cee6d275-c94c-4a29-a241-bbb374c6072a-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/cee6d275-c94c-4a29-a241-bbb374c6072a-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/cee6d275-c94c-4a29-a241-bbb374c6072a-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p>Как уже опытный QA-инженер, я сразу разделил проект на три этапа:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>1. Анализ бизнес-метрик, которые должны вырасти после внедрения доработок.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>2. Техническая проверка по гайдлайнам и эвристикам.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>3. «Полевой» этап &#8212; интервью с реальной целевой аудиторией.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Подготовка</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>К выбору методик я подошел скрупулезно. Из всего арсенала, применяемого в ЮТ, выбрал только то, что реально сработает в условиях специфики задачи:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>Think-aloud («Подумай вслух») &#8212; чтобы увидеть логику пользователя.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Time to Done &#8212; замерить скорость выполнения ключевых сценариев.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Cognitive walkthrough &#8212; оценить, насколько просто освоить раздел, когда пользователь видит и взаимодействует с ним впервые.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Эвристики Нильсена, гайдлайны iOS/Android/Google &#8212; база для анализа интерфейса.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Инструменты &#8212; стандартный джентльменский набор: Google Meet, OBS для записи, Google-таблицы и Figma.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Борьба за качество и здравый смысл</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>И тут случилось то, что заставило меня пересобрать процесс. Заказчик сообщил: «Работать будем не с живым приложением, а с кликабельным прототипом». </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph {"style":{"color":{"background":"#f8dada"}}} --></p>
<p class="has-background" style="background-color:#f8dada">Для тех, кто не в курсе отмечу: <span class='font-weight-bold'>тестировать юзабилити на прототипе &#8212; все равно что выбирать машину по картинке на сайте</span>. Это жестко ограничивает сценарии, не позволяет пользователю ошибаться и не дает увидеть реальное поведение системы в ответ на нестандартные действия. И, конечно же, не позволяло провести качественное и объективное ЮТ.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Пришлось объяснить заказчику все риски таких тестов. И здравый смысл восторжествовал &#8212; он доработал прототип до состояния, при котором ЮТ, хоть и в усеченном виде, но можно было проводить (добавились схемы переходов и логика состояний). Лишь после этого я смог приступить к проверке по эвристикам Нильсена и гайдлайнам.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>К слову, о Нильсене. Из его 10 принципов часть (например, «помощь в исправлении ошибок») к разделу просто не могла применяться. В итоге подготовил чек-листы соответствия как эвристикам, так и гайдлайнам iOS/Android/Google.&nbsp;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>И уже на этом этапе я отчетливо видел проблемные места нового раздела и пути решения этих проблем. В последующем мои предположения полностью подтвердились, когда прогонял сценарии на своих коллегах.&nbsp;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Целевая аудитория</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Параллельно с технической проверкой начал готовиться к интервьюированию целевой аудитории. На мой взгляд, именно эта часть ЮТ наиболее важная и ответственная.&nbsp;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>А вот поиск целевой аудитории тот еще квест и обусловлен рядом факторов (специфика приложения, опыт его использования, социально-демографические показатели и т.п.). Обычно целевую аудиторию подбирает исполнитель ЮТ. Но на этом проекте респондентов выбирали не мы. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Целевую аудиторию составляли люди, которые ранее пользовались приложением заказчика, а это как правило представители российского среднего и крупного бизнеса, в т.ч. представители иностранных компаний. Эту часть работы заказчик взял на себя и по поиску 10-12 реальных пользователей.&nbsp;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Моя же подготовка включала следующее:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>1. Сценарии. Создал 26 ключевых вопросов-сценариев, которые покрывали все возможные действия в прототипе.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>2. Пилот. Прогнал сценарии на себе и коллегах из моей компании. Это помогло отсечь лишнее и замерить тайминг.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>3. Анкеты. Их создал три типа:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>«По словам» &#8212; пользователю после прохождения сценариев необходимо было выбрать пять слов, описывающих ощущения от интерфейса.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>«По удобству» &#8212; классическая оценка утверждений.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>«Субъективная» &#8212; только ответы «да» или «нет». Причём любой «нет» &#8212; красный флаг для приложения.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>4. Памятка респонденту. Чтобы к началу интервью у всех всё работало, и технические проблемы не смазали картину.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:preformatted {"style":{"color":{"background":"#dff8ee"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#dff8ee">Особое внимание уделил вводной части, где определил, что наше главное правило - расслабить респондента. А для этого перед интервью необходимо было четко проговорить, что у нас не экзамен, а я проверяю приложение, а не респондента. При этом ошибаться можно и нужно, так как именно это для нас самое ценное.</pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29301,"width":"342px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/b40d3a23-669a-4e1f-8569-b4cd4c553e65-Photoroom.png" alt="b40d3a23-669a-4e1f-8569-b4cd4c553e65-Photoroom" class="wp-image-29301" style="width:342px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/b40d3a23-669a-4e1f-8569-b4cd4c553e65-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/b40d3a23-669a-4e1f-8569-b4cd4c553e65-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/b40d3a23-669a-4e1f-8569-b4cd4c553e65-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/b40d3a23-669a-4e1f-8569-b4cd4c553e65-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>В итоге, процесс работы с целевой аудиторией был отлажен как часы: вступительная речь → проверка связи и записи экрана → предупреждение о записи → ссылка на прототип → 26 сценариев с комментариями «вслух» → три анкеты → благодарность и стоп записи.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Финальный аккорд (которого пока так и не случилось)</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Я был готов (все сценарии выверены, анкеты сверстаны, записывающая аппаратура настроена) и горел желанием наконец-то поговорить с живыми людьми. И тут&#8230;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Заказчик сообщает, что не смог найти респондентов. Никто из целевой аудитории не захотел. Планы изменились и проект ставят на паузу. «Дорогой дневник, мне не передать ту боль&#8230;» &#8212; это был моя первая реакция. Весь объем подготовительной работы, чек-листы по эвристикам, наработки по анкетам — всё легло до времени на полку.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Итоги или to be continued?</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Чему нас научил этот кейс?</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>1. Юзабилити &#8212; это про живых людей. </span>Без них теряется смысл. Можно хоть сто раз проверить интерфейс по гайдлайнам, но только пользователь скажет, почему кнопка «Поделиться» бесит его до зубной боли.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>2. Прототип &#8212; однозначно не замена приложению.</span> Если вы тестируете на кликабельной картинке, вы не узнаете о проблемах с производительностью, вылетах или «залипаниях». Это тестирование гипотез, но не готового решения.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>3. Бизнес непредсказуем.</span> Даже при идеальной подготовке проект могут поставить на стоп-паузу. И это нормально. Ваша задача &#8212; сделать так, чтобы в момент «паузы» у заказчика на руках был максимально полный объем данных для размышления.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Наше сотрудничество с заказчиком по данному проекту приостановлено, но не завершено.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Я искренне надеюсь, что через время проект оживет и я всё-таки проведу те интервью, к которым так тщательно готовился. А пока я доволен проделанной работой. Это был бесценный опыт, который еще раз подтвердил: в тестировании в целом и в ЮТ в частности не бывает нерелевантного опыта. Всё, что вы знаете о людях, бизнесе и даже маркетинге с продажами, однажды сыграет вам в плюс.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29302,"width":"285px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/b261abb0-aafa-42ce-98d4-4b5698576da4-Photoroom.png" alt="b261abb0-aafa-42ce-98d4-4b5698576da4-Photoroom" class="wp-image-29302" style="width:285px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/b261abb0-aafa-42ce-98d4-4b5698576da4-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/b261abb0-aafa-42ce-98d4-4b5698576da4-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/b261abb0-aafa-42ce-98d4-4b5698576da4-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/b261abb0-aafa-42ce-98d4-4b5698576da4-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p><em><span class='font-weight-bold'>Если вы узнали в этой истории свой проект и не хотите, чтобы он завис на полпути &#8212; приходите, поможем дойти до логического финала.</span> А если вы пока только задумываетесь о юзабилити-тестировании, начните с главного вопроса: готовы ли вы услышать правду о своем продукте? Даже если она будет неудобной. Ведь сэкономив тысяч рублей (в т.ч. время, ресурсы и деньги) можно потерять миллион.</em></p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:paragraph --></p>
<p><em>p.s. Я не стал специально углубляться в этой статье в дебри каждой из методик данного вида тестирования. Для этого потребуется еще не одна статья. Если хотите деталей &#8212; пишите в комментариях, разберем любую из них детально.</em></p>
<p><!-- /wp:paragraph --></p>]]></description>
<link>https://quality-lab.ru/blog/pochemu-bez-realnykh-polzovateley-vy-testiruete-illyuziyu/</link>
<pubDate>Wed, 11 Mar 2026 14:49:52 +0300</pubDate>
</item>
<item>
<title>Интеграция OpenSearch: от функционального тестирования до проверки интеллекта поиска</title>
<description><![CDATA[<p>Автор: Ирина Вилкова<br /><a href="https://habr.com/ru/companies/ispring/articles/966096/" mce_href="https://habr.com/ru/companies/ispring/articles/966096/">Оригинальная публикация</a></p>
<p>Привет, меня зовут Ирина, я тестировщик в продуктовой команде iSpring.</p><p>В этой статье я на реальном примере интеграции OpenSearch в LMS iSpring Learn расскажу, как протестировать полнотекстовый поиск, сохранив баланс между качеством и трудозатратами. Мы не только разберём базовые проверки, но и погрузимся в тестирование стемминга, релевантности, работы в распределённой системе и отказоустойчивости. Материал будет полезен тестировщикам и разработчикам, которые хотят понять, что скрывается за фразой «протестировать поиск».</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-tools/4487-opensearch</link>
<pubDate>Tue, 10 Mar 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Тестирование приложений, созданных ИИ: практические советы для тестировщиков</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/12hs/ii/ii1.jpg" mce_src="https://software-testing.ru/images/stories/library/12hs/ii/ii1.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Рафаэла Азеведо (Rafaela Azevedo)<br /><strong><a href="https://www.ministryoftesting.com/articles/testing-ai-coded-applications-practical-tips-for-software-testers" mce_href="https://www.ministryoftesting.com/articles/testing-ai-coded-applications-practical-tips-for-software-testers" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p><p><strong>Как я начала тестировать приложения, созданные ИИ</strong></p>
<p>Привет, я Рафаэла Азеведо! Уже 17 лет я работаю инженером по разработке и тестированию и специализируюсь на QA, тест-автоматизации, Web3, DevOps, мониторинге и предупреждениях.</p>
<p>Эффективность всегда была моей страстью, и поэтому я занялась автоматизацией тестирования. Это привело меня к экспериментам с ИИ-инструментами. И сейчас многие проекты, с которыми я работаю, создаются с помощью ИИ.</p>
<h1>Как тестировать ИИ-приложения: личный опыт</h1>
<p>ИИ-инструменты разработки бросают тестированию уникальные вызовы, особенно когда речь идёт о качестве кода, безопасности и масштабируемости. Большинство людей, использующих ИИ для написания кода, обнаруживают, что хоть инструменты и могут генерировать впечатляющие прототипы, сложность реальных систем всё равно требует значительного участия человека. На мой взгляд, это вывело QA и тестировщиков на передний план — они стали важнее, чем когда-либо.</p>
<p>Когда ИИ-инструменты только появились, казалось, что это идеальное решение для эффективной разработки, способное производить качественный код с невероятной скоростью. Такие инструменты, как Lovable.dev, Replit, Manus, A0.dev и Firebase Studio, отлично подходят для быстрого прототипирования. Но код, который они создают, часто не выдерживает требований контекста, масштабируемости и интеграции с системой.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/other-testing/4462-testing-ai-coded-applications-practical-tips-for-software-testers</link>
<pubDate>Tue, 03 Mar 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>QA-агенты. Автономные системы меняют экономику тестирования</title>
<description><![CDATA[<p><!-- wp:paragraph --></p>
<p>Сегодня зафиналим нашу серию о будущем QA в 2026 году темой, которая еще вчера казалась сайнс-фикшн, а сегодня становится вопросом выживания экономики продукта. Мы целый месяц разбирали, <a href="https://quality-lab.ru/blog/blog-ii-v-testirovanii-gde-ispolzovat-gde-vredit/" target="_blank" rel="noreferrer noopener">где подключать</a> ИИ в тестировании, какие <a href="https://quality-lab.ru/blog/qa-metrics-2026-risk-management/" target="_blank" rel="noreferrer noopener">метрики</a> стали стандартом к 2026 году и почему DevOps без зрелого контроля качества <a href="https://quality-lab.ru/blog/quality-devops-kak-ubrat-ochered-i-uskorit-relizy/" target="_blank" rel="noreferrer noopener">превращается в имитацию</a> скорости. Логичный следующий шаг в этой эволюции – <span class='font-weight-bold'>ИИ-агенты</span>. И если поставить целью максимально коротко описать ситуацию, то… мы наблюдаем так называемый тектонический сдвиг, то бишь переход от привычной автоматизации к подлинной автономности.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">От «рельсов» к автопилоту. Что такое QA-агент?</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p>Сотни раз сказано и тысячу раз написано, что большинство зрелых команд уже давно «приручили»=автоматизировали регресс. У вас наверняка считаются MTTR<sup data-fn="7b1ae873-88d7-467e-a82d-f703ccfd2732" class="fn"><a href="https://quality-lab.ru#7b1ae873-88d7-467e-a82d-f703ccfd2732" id="7b1ae873-88d7-467e-a82d-f703ccfd2732-link">1</a></sup> и defect escape rate<sup data-fn="38abccb9-7b73-4d6a-b04e-618699865794" class="fn"><a href="https://quality-lab.ru#38abccb9-7b73-4d6a-b04e-618699865794" id="38abccb9-7b73-4d6a-b04e-618699865794-link">2</a></sup>, CI/CD настроен, а пайплайны крутятся в штатном режиме. Но дьявол, как известно, <s>носит PRADA</s> кроется в деталях/рутине. Мы снова и снова повторяем, что <em><span class='font-weight-bold'>решение о релизе всё равно принимает человек, мучительно выбирая между скоростью и риском</span></em>.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29275,"width":"337px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/2f17d59d-3773-4be8-bc50-5c51dab23619-edited-free-carve.photos.png" alt="2f17d59d-3773-4be8-bc50-5c51dab23619-edited-free-carve.photos" class="wp-image-29275" style="width:337px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/2f17d59d-3773-4be8-bc50-5c51dab23619-edited-free-carve.photos.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/2f17d59d-3773-4be8-bc50-5c51dab23619-edited-free-carve.photos-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/2f17d59d-3773-4be8-bc50-5c51dab23619-edited-free-carve.photos-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/2f17d59d-3773-4be8-bc50-5c51dab23619-edited-free-carve.photos-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>Регресс часто запускается как привыкли, а не исходя из реальных угроз. И, конечно, приоритизация тестов до сих пор требует часов ручного анализа.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>В этом и заключается фундаментальная разница. Классическая автоматизация – это поезд, идущий по строго заданным рельсам сценариев. <span class='font-weight-bold'>Цифровой QA-ассистент – автопилот</span>, который начинает принимать решения внутри самой системы.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Что же такое ИИ-агент, если слегка поскрести монеткой и снять маркетинговую позолоту? Автономная система на базе LLM и набора правил оркестрации<sup data-fn="99b0d143-17d7-4535-9c2f-ebee3a805434" class="fn"><a href="https://quality-lab.ru#99b0d143-17d7-4535-9c2f-ebee3a805434" id="99b0d143-17d7-4535-9c2f-ebee3a805434-link">3</a></sup>, бесшовно вшитая в процесс разработки. По факту такой AI-агент не просто генерирует очередные тест-кейсы, ведь это уже умеет любой плагин.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:paragraph --></p>
<p>Виртуальный тестировщик (думаю, его можно и так назвать) делает вот что:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>проверяет, какие именно изменения внесены в код по сравнению с предыдущей версией (что добавили, удалили или переписали), анализирует диффы и меняющиеся требования в Jira;</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>определяет зоны повышенного риска;</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>самостоятельно выбирает стратегию под конкретный релиз и инициирует запуск нужного набора тестов;</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>интерпретирует результаты и, если нужно, триггерит дополнительные проверки или rollback.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29277,"width":"334px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/8cde8bca-3623-4227-9c68-4eea2a1c567e-Photoroom.png" alt="8cde8bca-3623-4227-9c68-4eea2a1c567e-Photoroom" class="wp-image-29277" style="width:334px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/8cde8bca-3623-4227-9c68-4eea2a1c567e-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/8cde8bca-3623-4227-9c68-4eea2a1c567e-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/8cde8bca-3623-4227-9c68-4eea2a1c567e-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/8cde8bca-3623-4227-9c68-4eea2a1c567e-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p>Автотест отвечает на вопрос пройдено или нет, а агент дает нам знать, <span class='font-weight-bold'>что именно и с какой глубиной нам нужно тестировать в этой итерации</span>. И вот это уже другой уровень. Здесь, в этой точке, сходятся все темы февральской серии статей. Автогенерация тест-кейсов можно считать сырьём. Метрики дают данные для принятия решений. DevOps становится средой исполнения. QA-агент связывает это в единую систему.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Анатомия решения</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>За громким словом «агент» стоит вполне рациональная архитектура. Типовое решение, которое мы внедряем, состоит из четырех слоев:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Аналитический</span> сканирует репозитории, историю дефектов и требования.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Стратегический </span>оценивает риск релиза, опираясь на метрики (частоту багов в модуле, нестабильность кода, критичность функционала для бизнеса).</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Исполнительный</span> формирует «умный» набор тестов, запускает их в CI и управляет их прогоном.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Контрольный </span>является самым важным слоем, который отсекает галлюцинации нейросетей и удерживает агента в рамках заданных политик безопасности.</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Технологически это связка из LLM, векторной базы данных с историей вашего проекта и глубокой интеграции с Git и CI. Управляемая система, работающая в рамках вашей корпоративной политики.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Реальные цифры</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Чтобы не быть голословными, обратимся к практике. Самый прагматичный сценарий использования цифрового агента <span class='font-weight-bold'>динамический Test Impact Analysis</span>.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>В одном из наших недавних проектов агент использовался именно для приоритизации регресса. Вместо того чтобы «ковровым методом» прогонять все подряд, система анализировала изменения в коде и выбирала только релевантные тесты. В итоге длительность регрессионного тестирования сократилась с 40 до 18 часов. При этом показатель пропущенных дефектов (defect escape rate) остался на прежнем уровне. Команда перестала жечь ресурсы там, где риск был минимален.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Второй вариант использования – сценарий с адаптивной генерациейя тест-кейсов под изменённые требования. AI-агент анализирует diff и дополняет покрытие там, где раньше тестов не было. Звучит круто, а ведь это то, с чем сейчас в России пока еще мало кто работает. Пора запускать постепенный переход к управляемой автономности в зрелых процессах.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Что это дает бизнесу (кроме экономии нервов)</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Для каждой роли в компании здесь будет свой профит.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>CEO и владельцы</span> масштабируют продукт, не раздувая штат QA пропорционально каждой фиче. Качество становится управляемым активом, черная дыра в бюджете не появляется.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>CTO </span>получают адаптивное покрытие вместо статичного и, что важнее, кратно сокращают время принятия решения о релизе.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>QA Lead</span> и его команда наконец-то перестают быть вымотанными машинами по запуску скриптов и фокусируются на действительно сложных исследовательских задачах. AI забирает на себя механическую работу по отбору и проверке.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Project Manager </span>гарантированно выдыхает, получая сильно меньше сюрпризов в черную пятницу и более точные прогнозы.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Отрезвляющая реальность</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Если я скажу, что агент спасет любой проект, я совру. Не стоит фанатеть от ИИ до такой степени, превращаясь во влюбленную школьницу. Розовые очки снимаем и возвращаем себе адекватность. Как и любой сложный инструмент, QA-агенты:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li>критически чувствительны к качеству данных (мусор на входе будет мусором на выходе)</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>бесполезны без зрелых метрик и прозрачного CI</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>могут ошибаться, если у них нет доступа к доменному контексту</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Бардак автоматизации не подлежит, ведь даже купив робот-пылесос вы вынуждены убирать вещи с пола, так? А если использовать метафору покрупнее, то на кривой фундамент можно поставить умный дом, тогда он рухнет еще технологичнее. А вот если выстроены процессы, тут вы получаете главное конкурентное преимущество.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29280,"width":"365px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/f2a14c4d-a686-4d38-bb2c-dcfbb6fbca7e-1.png" alt="f2a14c4d-a686-4d38-bb2c-dcfbb6fbca7e-1" class="wp-image-29280" style="width:365px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/f2a14c4d-a686-4d38-bb2c-dcfbb6fbca7e-1.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/f2a14c4d-a686-4d38-bb2c-dcfbb6fbca7e-1-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/f2a14c4d-a686-4d38-bb2c-dcfbb6fbca7e-1-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/f2a14c4d-a686-4d38-bb2c-dcfbb6fbca7e-1-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Как внедрять QA-агентов</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Есть вполне реалистичный план на 8 недель. Мы в «Лаборатории качества» не верим в лозунги «подключи API и расслабься». </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Шаг 1. Диагностика (1-2 неделя). </span>Анализ текущих метрик, покрытия, длительности регресса.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Шаг 2. Пилот (3-5 неделя).</span> Выбор зоны максимального ROI на одном модуле.Чаще всего это регресс или динамическая приоритизация тестов.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Шаг 3. Настройка ограничений (6-7 неделя). </span>Определение правил, при которых агент может инициировать действия. Установка «красных линий» для его действий.<span class='font-weight-bold'><br /></span><span class='font-weight-bold'>Шаг 4. Масштабирование (8 неделя). </span>Анализ цифр, расширение зоны ответственности после подтверждённых результатов и раскатка на весь проект.<span class='font-weight-bold'><br /></span>В среднем за это время становится понятно, дает ли автономный подход экономический эффект именно в вашем продукте.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Куда всё движется дальше</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>В 2026 году QA-агенты постепенно становятся частью более широкой концепции AIOps. Да-да, мы только-только привыкли к DevOps, наконец-то перестали путаться в Jenkins-файлах и смирились с тем, что QA больше не отдел поиска багов, а часть процесса. Но такова реальность, и пока мы привыкаем к одним стандартам, технологии уже строят над ними (и нами!) следующий этаж. Остается лишь подняться вверх или остаться внизу, что не особо полезно для бизнеса.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Если вы уже прошли этап базовой автоматизации и хотите понять, даст ли автономный подход экономический эффект именно в вашем продукте, начинать стоит с диагностики текущего QA-контура.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29274,"width":"266px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/03/0df52bbb-3dae-43c5-b62d-d8e00ca3378f-Photoroom.png" alt="0df52bbb-3dae-43c5-b62d-d8e00ca3378f-Photoroom" class="wp-image-29274" style="width:266px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/03/0df52bbb-3dae-43c5-b62d-d8e00ca3378f-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/03/0df52bbb-3dae-43c5-b62d-d8e00ca3378f-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/03/0df52bbb-3dae-43c5-b62d-d8e00ca3378f-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/03/0df52bbb-3dae-43c5-b62d-d8e00ca3378f-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p>Как говорил Питер Друкер<sup data-fn="410a1bf7-8c33-4df7-8f98-dd5dfba9c853" class="fn"><a href="https://quality-lab.ru#410a1bf7-8c33-4df7-8f98-dd5dfba9c853" id="410a1bf7-8c33-4df7-8f98-dd5dfba9c853-link">4</a></sup>: <em>«Нет ничего более бесполезного, чем делать эффективно то, что вообще не следовало бы делать»</em>. Иногда ваш следующий шаг – не очередной фреймворк или модный инструмент, а переход на новый уровень управления.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p><em>Оставьте заявку на стратегическую консультацию в «Лаборатории качества». Мы разберём ваш процесс тестирования, оценим готовность к внедрению QA-агентов и покажем, где именно автономный агент сможет окупить себя уже в следующем квартале.</em></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:footnotes /--></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>]]></description>
<link>https://quality-lab.ru/blog/qa-agenty-avtonomnoe-testirovanie-2026/</link>
<pubDate>Tue, 03 Mar 2026 15:13:54 +0300</pubDate>
</item>
<item>
<title>Значимость тестирования будет только расти</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/11hs/testing-will-become-more-important-not-less.jpg" mce_src="https://software-testing.ru/images/stories/library/11hs/testing-will-become-more-important-not-less.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Филип Рик (Filip Hric)<br /><strong><a href="https://filiphric.com/testing-will-become-more-important-not-less" mce_href="https://filiphric.com/testing-will-become-more-important-not-less" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова&nbsp;</p>
<p>Большие языковые модели значительно ускорили генерацию кода. Но я не уверен, что корректно говорить, что это улучшило скорость поставки ПО. К качеству результата существуют вполне обоснованные вопросы, и речь идет не только о качестве <em>кода</em>, но и о самом <em>продукте</em>.</p>
<p>Кажется, что мы по-прежнему в основном проверяем результат вручную — либо просматривая сгенерированный код, либо непосредственно тестируя приложение.</p>
<p>И хотя сгенерированный код пока не является «черным ящиком», детали реализации имеют тенденцию размываться по мере роста количества строк кода.</p>
<p>Таким образом, ручное тестирование приложения по-прежнему кажется лучшим способом проверки результата.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/general-testing/4449-testing-will-become-more-important-not-less</link>
<pubDate>Sun, 01 Mar 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>1 тест = 1 проверка. Чем хорош принцип атомарности в автотестах в Postman</title>
<description><![CDATA[<p>&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggM489VWSzh-WA7cPHkq1eHuIfuTkkqRzhtZMSz4GbCKDjaDi9USBsDyD6bqFZqh2J_5tPhs968mKOBKRb_dMvHH4-ulJmHH4dbGJNpbpxCVyM-dz4QfW9sDvMuPPIpCBakOpMagCwOER1EVrP45K7nD4CtLHJDLfAtolkaZ9OylqF3nytzHKENAPwsjs/s1280/%D0%BF%D1%80%D0%B5%D0%B2%D1%8C%D1%8E_1%20%D1%82%D0%B5%D1%81%D1%82%20%D0%BE%D0%B4%D0%BD%D0%B0%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggM489VWSzh-WA7cPHkq1eHuIfuTkkqRzhtZMSz4GbCKDjaDi9USBsDyD6bqFZqh2J_5tPhs968mKOBKRb_dMvHH4-ulJmHH4dbGJNpbpxCVyM-dz4QfW9sDvMuPPIpCBakOpMagCwOER1EVrP45K7nD4CtLHJDLfAtolkaZ9OylqF3nytzHKENAPwsjs/s320/%D0%BF%D1%80%D0%B5%D0%B2%D1%8C%D1%8E_1%20%D1%82%D0%B5%D1%81%D1%82%20%D0%BE%D0%B4%D0%BD%D0%B0%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0.png" width="320" /></a></div><br /><p></p><p><span style="font-size: large;"><a href="https://habr.com/ru/articles/1003554/" target="_blank"><b>Ссылка на Хабр</b></a></span></p><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 32px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">Принцип атомарности&nbsp;<em style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">(объект или операцию нельзя разделить на части, не нарушив их целостность или смысл)</em>&nbsp;применяется в как в разработке кода ПО, так и в разработке кода автотестов.</p><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 24px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">И в автотестах Postman он особенно хорош! Давайте разберемся на примерах, почему лучше писать небольшие автотестики, «один тест, одна проверка», чем «много проверок в одном тесте».</p><span><a name='more'></a></span><h3 style="-webkit-font-smoothing: antialiased; background-color: white; color: #333333; font-family: &quot;Fira Sans&quot;, sans-serif; font-size: 1.125rem; line-height: 1.4375rem; margin: 32px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;"><span style="font-size: 1.125rem;">Готовим тесты</span></h3><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 12px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">Запрос будем отправлять в бесплатную систему&nbsp;<a href="https://okiseleva.blogspot.com/2017/04/users-soap-rest.html" rel="noopener noreferrer nofollow" style="color: #548eab; quotes: &quot;«&quot; &quot;»&quot;; text-decoration-line: none; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" target="_blank">Users</a>. Метод doRegister:&nbsp;</p><pre style="background: none 0% 0% / auto repeat scroll padding-box border-box rgb(247, 247, 247); border-color: rgb(240, 240, 240); border-image: none 100% / 1 / 0 stretch; border-radius: 4px; border-style: solid; border-width: 1px; box-sizing: border-box; color: #333333; font-family: monospace, monospace; font-size: 0.875rem; line-height: 1.6; margin: 32px 0px 0px; overflow-wrap: normal; overflow: auto; padding: 17px 10px 10px 20px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal;"><code class="json" style="background: none; border-radius: 4px; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, Courier, monospace; font-size: inherit; overflow-wrap: normal; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal; word-spacing: normal;"><span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">URL</span>: <span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">http</span>:<span class="ͼ8" style="color: #8f8f8f; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">//users.bugred.ru/tasks/rest/doregister</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">Запрос</span>:<br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />{<br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />&nbsp;&nbsp;&nbsp;&nbsp;"name": <span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"Демо 1"</span>,<br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />&nbsp;&nbsp;&nbsp;&nbsp;"email": <span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"test_demo_1@gmail.com"</span>,<br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />&nbsp;&nbsp;&nbsp;&nbsp;"password": <span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"1"</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />}</code><div class="code-explainer" style="display: flex; left: 0px; margin-top: 2px; position: sticky; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;"><br /></div></pre><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 32px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">Если с первого раза запрос не упал, отправляем повторно, чтобы получить ошибку в ответе:</p><pre style="background: none 0% 0% / auto repeat scroll padding-box border-box rgb(247, 247, 247); border-color: rgb(240, 240, 240); border-image: none 100% / 1 / 0 stretch; border-radius: 4px; border-style: solid; border-width: 1px; box-sizing: border-box; color: #333333; font-family: monospace, monospace; font-size: 0.875rem; line-height: 1.6; margin: 32px 0px 0px; overflow-wrap: normal; overflow: auto; padding: 17px 10px 10px 20px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal;"><code style="background: none; border-radius: 4px; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, Courier, monospace; font-size: inherit; overflow-wrap: normal; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal; word-spacing: normal;">{
&nbsp;&nbsp;&nbsp;&nbsp;"type": "error",
&nbsp;&nbsp;&nbsp;&nbsp;"message": " email test_demo_1@gmail.com уже есть в базе"
}</code><div class="code-explainer" style="display: flex; left: 0px; margin-top: 2px; position: sticky; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;"><a class="tm-button code-explainer__link" href="https://sourcecraft.dev/" style="align-items: center; background-color: transparent; border: none; color: #548eab; cursor: pointer; display: flex; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 0.75rem; gap: 6px; line-height: 0.875rem; margin-left: auto; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; text-decoration-line: none; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; visibility: visible;" target="_blank">Объяснить с<img src="https://habr.com/img/sourcecraft-light.bf8f84c1..svg" style="height: 14px; margin: 0px; max-width: 100%; object-fit: cover; object-position: left center; overflow: hidden; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; vertical-align: middle; width: 14px;" /></a></div></pre><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 32px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">Напишем автотесты на эти 2 поля. Какие тут есть варианты? Мы можем писать маленькие тесты, одна проверка, один тест:</p><pre style="background: none 0% 0% / auto repeat scroll padding-box border-box rgb(247, 247, 247); border-color: rgb(240, 240, 240); border-image: none 100% / 1 / 0 stretch; border-radius: 4px; border-style: solid; border-width: 1px; box-sizing: border-box; color: #333333; font-family: monospace, monospace; font-size: 0.875rem; line-height: 1.6; margin: 32px 0px 0px; overflow-wrap: normal; overflow: auto; padding: 17px 10px 10px 20px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal;"><code class="javascript" style="background: none; border-radius: 4px; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, Courier, monospace; font-size: inherit; overflow-wrap: normal; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal; word-spacing: normal;"><span class="ͼ8" style="color: #8f8f8f; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">// Сохраняем ответ в переменную</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ4" style="color: #8959a8; font-weight: bold; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">var</span> <span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">jsonData</span> <span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">=</span> <span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">response</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">json</span>()<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">test</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"Проверяем тип"</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">,</span> <span class="ͼ4" style="color: #8959a8; font-weight: bold; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">function</span> () <span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">{</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />&nbsp;&nbsp;&nbsp;&nbsp;<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">expect</span>(<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">jsonData</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">type</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">to</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">eql</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"error"</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">}</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">test</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"Проверяем message"</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">,</span> <span class="ͼ4" style="color: #8959a8; font-weight: bold; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">function</span> () <span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">{</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />&nbsp;&nbsp;&nbsp;&nbsp;<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">expect</span>(<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">jsonData</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">message</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">to</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">eql</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">" email test_demo_1@gmail.com уже есть в базе"</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">}</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span></code><div class="code-explainer" style="display: flex; left: 0px; margin-top: 2px; position: sticky; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;"><a class="tm-button code-explainer__link" href="https://sourcecraft.dev/" style="align-items: center; background-color: transparent; border: none; color: #548eab; cursor: pointer; display: flex; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 0.75rem; gap: 6px; line-height: 0.875rem; margin-left: auto; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; text-decoration-line: none; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; visibility: visible;" target="_blank">Объяснить с<img src="https://habr.com/img/sourcecraft-light.bf8f84c1..svg" style="height: 14px; margin: 0px; max-width: 100%; object-fit: cover; object-position: left center; overflow: hidden; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; vertical-align: middle; width: 14px;" /></a></div></pre><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 32px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">А можем объединить, то есть написать один тест, который проверяет и тип, и message сразу (добавим его в те же скрипты, поэтому переопределять jsonData уже не надо):</p><pre style="background: none 0% 0% / auto repeat scroll padding-box border-box rgb(247, 247, 247); border-color: rgb(240, 240, 240); border-image: none 100% / 1 / 0 stretch; border-radius: 4px; border-style: solid; border-width: 1px; box-sizing: border-box; color: #333333; font-family: monospace, monospace; font-size: 0.875rem; line-height: 1.6; margin: 32px 0px 0px; overflow-wrap: normal; overflow: auto; padding: 17px 10px 10px 20px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal;"><code class="javascript" style="background: none; border-radius: 4px; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, Courier, monospace; font-size: inherit; overflow-wrap: normal; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal; word-spacing: normal;"><span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">test</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"Проверяем тип и message сразу"</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">,</span> <span class="ͼ4" style="color: #8959a8; font-weight: bold; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">function</span> () <span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">{</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />&nbsp;&nbsp;&nbsp;&nbsp;<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">expect</span>(<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">jsonData</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">type</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">to</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">eql</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"error"</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />&nbsp;&nbsp;&nbsp;&nbsp;<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">expect</span>(<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">jsonData</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">message</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">to</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">eql</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">" email test_demo_1@gmail.com уже есть в базе"</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">}</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span></code><div class="code-explainer" style="display: flex; left: 0px; margin-top: 2px; position: sticky; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;"><a class="tm-button code-explainer__link" href="https://sourcecraft.dev/" style="align-items: center; background-color: transparent; border: none; color: #548eab; cursor: pointer; display: flex; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 0.75rem; gap: 6px; line-height: 0.875rem; margin-left: auto; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; text-decoration-line: none; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; visibility: visible;" target="_blank">Объяснить с<img src="https://habr.com/img/sourcecraft-light.bf8f84c1..svg" style="height: 14px; margin: 0px; max-width: 100%; object-fit: cover; object-position: left center; overflow: hidden; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; vertical-align: middle; width: 14px;" /></a></div></pre><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 32px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">Отправляем запрос — все 3 теста проходят успешно:</p><figure class="full-width " style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; margin: 32px 0px 0px; quotes: &quot;«&quot; &quot;»&quot;; text-align: center; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;"><img decode="async" height="1345" loading="lazy" sizes="(max-width: 780px) 100vw, 50vw" src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/59f/2f8/b23/59f2f8b239add917a1b36ca896e21dc2.png" srcset="https://habrastorage.org/r/w780/getpro/habr/upload_files/59f/2f8/b23/59f2f8b239add917a1b36ca896e21dc2.png 780w,
       https://habrastorage.org/r/w1560/getpro/habr/upload_files/59f/2f8/b23/59f2f8b239add917a1b36ca896e21dc2.png 781w" style="height: auto; margin: 0px; max-width: 100%; overflow: hidden; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; vertical-align: middle;" width="1989" /></figure><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 32px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">Отлично! Пока выглядит так, что третий тест даже лучше, за один тест дает информацию, что в ответе всё хорошо. Но что будет при падении?</p><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 32px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;"><br /></p><p><a class="anchor" id="one_error" name="one_error" style="background-color: white; color: #548eab; display: block; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; margin-top: 24px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" target="_blank"></a></p><h3 style="-webkit-font-smoothing: antialiased; background-color: white; color: #333333; font-family: &quot;Fira Sans&quot;, sans-serif; font-size: 1.125rem; line-height: 1.4375rem; margin: 32px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">Одна проверка упала</h3><p style="background-color: white; color: #333333; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; font-size: 16px; line-height: 1.5rem; margin: 12px 0px 0px; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">Сломаем тесты 1 и 3, поменяв «error» на «error2». Автотесты теперь выглядят так:</p><pre style="background: none 0% 0% / auto repeat scroll padding-box border-box rgb(247, 247, 247); border-color: rgb(240, 240, 240); border-image: none 100% / 1 / 0 stretch; border-radius: 4px; border-style: solid; border-width: 1px; box-sizing: border-box; color: #333333; font-family: monospace, monospace; font-size: 0.875rem; line-height: 1.6; margin: 32px 0px 0px; overflow-wrap: normal; overflow: auto; padding: 17px 10px 10px 20px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal;"><code class="javascript" style="background: none; border-radius: 4px; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, Courier, monospace; font-size: inherit; overflow-wrap: normal; padding: 0px; quotes: &quot;«&quot; &quot;»&quot;; tab-size: 4; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out; word-break: normal; word-spacing: normal;"><span class="ͼ8" style="color: #8f8f8f; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">// Сохраняем ответ в переменную</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ4" style="color: #8959a8; font-weight: bold; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">var</span> <span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">jsonData</span> <span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">=</span> <span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">response</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">json</span>()<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">test</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"Проверяем тип"</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">,</span> <span class="ͼ4" style="color: #8959a8; font-weight: bold; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">function</span> () <span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">{</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />&nbsp;&nbsp;&nbsp;&nbsp;<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">expect</span>(<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">jsonData</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">type</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">to</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">eql</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"error2"</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">}</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">test</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">"Проверяем message"</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">,</span> <span class="ͼ4" style="color: #8959a8; font-weight: bold; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">function</span> () <span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">{</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" />&nbsp;&nbsp;&nbsp;&nbsp;<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">pm</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">expect</span>(<span class="ͼ5" style="color: #39728e; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">jsonData</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">message</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">to</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">.</span><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">eql</span>(<span class="ͼ7" style="color: #7ba800; quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">" email test_demo_1@gmail.com уже есть в базе"</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">}</span>)<span class="ͼ6" style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;">;</span><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-text-decoration 0.2s ease-in-out;" /><br style="quotes: &quot;«&quot; &quot;»&quot;; transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out, text-decoration 0.2s e]]></description>
<link>http://okiseleva.blogspot.com/2026/02/1-1-postman.html</link>
<pubDate>Thu, 26 Feb 2026 21:22:00 +0300</pubDate>
</item>
<item>
<title>DevOps не едет? 4 системных затыка в delivery и как QA возвращает ему скорость</title>
<description><![CDATA[<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Пятничный релиз и налог на надежду</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29241,"sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/2098613b-a41b-4673-a980-2f60e0749b81-Photoroom.png" alt="2098613b-a41b-4673-a980-2f60e0749b81-Photoroom" class="wp-image-29241" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/2098613b-a41b-4673-a980-2f60e0749b81-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/2098613b-a41b-4673-a980-2f60e0749b81-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/2098613b-a41b-4673-a980-2f60e0749b81-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/2098613b-a41b-4673-a980-2f60e0749b81-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p>Нарисуйте в воображении типичный вечер четверга, когда разработчики задеплоили фичу, Jenkins подмигнул зеленым, пайплайн отработал за считанные минуты и команда разошлась по домам с ощущением «обалдеть, какие мы быстрые и современные». А в пятницу утром начинается классика.Неожиданно вылез крит, лег прод, CTO уже ищет крайнего, а бизнес считает потери.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Если эта сцена знакома вам в рельной жизни, у меня для вас две новости.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>Первая. У вас нет DevOps, но есть дорогой автоматизированный конвейер по доставке проблем пользователям.<br />Вторая. Вы не одни. Индустрия уже окончательно наигралась в красивые дашборды и поняла неприятную вещь: автоматизация хаоса дает только автоматизированный хаос.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#f7f38d8f"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f7f38d8f">А <a href="https://quality-lab.ru/blog/kak-i-kogda-vnedryat-avtotesty-preimushhestva-i-nedostatki-avtomatizacii-testirovaniya/" target="_blank" rel="noreferrer noopener">тут</a> и <a href="https://quality-lab.ru/blog/avtomatizaciya-testirovaniya-kak-vyjti-za-predely-ruchnogo-testirovaniya/" target="_blank" rel="noreferrer noopener">тут</a> вы можете прочитать про необходимость автоматизации</pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph --></p>
<p>Большинство компаний живут и работают в гибридной модели. CI/CD есть, но релиз по-прежнему занимает больше времени, чем хотелось бы, тк в конце подключается ручной контроль. Автотесты написаны и гоняются, но им не верятили почему-то не доверяют. QA формально ускоряет, а по факту становится сбитым бутылочным горлышком, об которое режутся до крови все KPI по Time-to-Market (кстати, как сократить TTM писали <a href="https://quality-lab.ru/blog/sokrashhaem-time-to-market-prakticheskoe-rukovodstvo-po-qa/" target="_blank" rel="noreferrer noopener">тут</a>). И это управленческая проблема, а вовсе не техническая.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Самый дорогой пайплайн – быстрый, но непредсказуемый. Когда деплой занимает 5 минут, а решение о релизе принимается 2 дня. Не будем мы обсуждать, как настроить CI. Это база. Но поговорим о Quality-First DevOps<sup data-fn="8318f60d-d7f3-49bb-ac72-6c6c08ab823e" class="fn"><a href="https://quality-lab.ru#8318f60d-d7f3-49bb-ac72-6c6c08ab823e" id="8318f60d-d7f3-49bb-ac72-6c6c08ab823e-link">1</a></sup>. О системе, в которой тестирование не назвать простым этапом после кода, оно становится иммунитетом релиза. Ее <span class='font-weight-bold'>ключевой принцип:</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#dce8f0"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#dce8f0"><em>код считается «готовым» не тогда, когда он написан, а когда он успешно и автономно прошел через все слои проверок (</em><a href="https://quality-lab.ru/blog/quality-gates-nervy-cely-nochi-spokojny-pozdravlyaem-sisadminov/" target="_blank" rel="noreferrer noopener"><em>Quality Gates</em></a><em>), подтвердив свою безопасность для бизнеса и пользователей</em></pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph --></p>
<p>Проблема в том, что хаос почти всегда невидим. Команда чувствует, что что-то происходит долго, но управленческого инструмента для разговора об этом нет. Пока скорость, стабильность и предсказуемость delivery не переведены в цифры (а где их взять?), решения принимаются на ощущениях, а очередь между разработкой и релизом воспринимается как естественная часть процесса. А если вы хотите понять, как измеряется этот хаос и где именно он начинается, сначала посмотрите на <a href="https://quality-lab.ru/blog/qa-metrics-2026-risk-management/" target="_blank" rel="noreferrer noopener">метрики нового стандарта</a>. Без них любая автоматизация как полет в тумане на воздушном шаре.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Затык №1. Слепой feedback loop и экономика ожидания</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Самая дорогая ошибка не всегда идет как критический баг. Самая дорогая это баг, о котором разработчик узнает через несколько часов/дней. Ведь за это время он уже:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>переключился на другую задачу</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>забыл контекст </li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>наслоил новый код поверх проблемного</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Стоимость фикса растет <span class='font-weight-bold'>экспоненциально</span>: баг, замеченный в IDE, стоит копейки, а пропущенный на прод может стоить квартального бонуса всей команды. А CI в этот момент честно гоняет полный регресс и сжигает облачный бюджет так, будто у вас безлимитный тариф.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Можно работать с полным прогоном около 4 часов, как это делал один из наших клиентов до начала работы специалистов ЛК. Их команда привыкла к этим цифрам, им было важнее, что они все проверили. После обращения к нам и внедрения Test Impact Analysis (TIA, анализ влияния тестирования) время обратной связи стало 18 минут. <span class='font-weight-bold'>Как думаете, как эта разница повлияла на успех проекта? </span>Через два спринта разработчики впервые за год начали сами пушить в пятницу, тк это стало безопасно. Через квартал исчезло само понятие «релизное окно». Фичи начали доезжать до прода гораздо быстрее. Продукт перестал копить ценность в бэклоге и начал регулярно конвертировать её в деньги. С точки зрения бизнеса это был не апгрейд тестирования, а ускорение всей системы. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>TIA на практике не является попыткой «подправить» тестирование. Фактически это инструмент прямого влияния на Lead Time. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph {"style":{"color":{"background":"#c8d5e0"}}} --></p>
<p class="has-background" style="background-color:#c8d5e0">Мы вырезаем из вашего TTM часы бесполезного ожидания и конвертируем сэкономленный облачный бюджет в скорость релизов</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Есть разница между разработчик<em> ждет полдня</em> и <em>получает фидбек в том же контексте</em>. Эффект – предсказуемая скорость delivery.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>А вот здесь, конечно, быстро упираешься в сложность системы. Вручную поддерживать TIA можно только в очень простых продуктах. В реале точность дает <a href="https://quality-lab.ru/blog/blog-ii-v-testirovanii-gde-ispolzovat-gde-vredit/" target="_blank" rel="noreferrer noopener">связка с ИИ</a>, который анализирует изменения и выбирает те самые 5% тестов, где вероятность дефекта максимальна. И вот уже CI перестает быть крематорием для бюджета и становится инструментом управления скоростью.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Затык №2. QA как этап. Очередь, которая съедает TTM</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Передача кода в QA как отдельный этап перешла в стадию управленческого анахронизма.Никакой Kubernetes не вылечит этот Waterfall. Очередь, которую вы создаете на границе отделов, и есть киллер TTM. Она  – фундаментальный ограничитель delivery, и ее не компенсировать мощным стеком.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29236,"width":"216px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/8f739b88-0699-437e-a8a0-2cd846a165a6-Photoroom.png" alt="8f739b88-0699-437e-a8a0-2cd846a165a6-Photoroom" class="wp-image-29236" style="width:216px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/8f739b88-0699-437e-a8a0-2cd846a165a6-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/8f739b88-0699-437e-a8a0-2cd846a165a6-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/8f739b88-0699-437e-a8a0-2cd846a165a6-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/8f739b88-0699-437e-a8a0-2cd846a165a6-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p>Очередь означает:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>разработка закончила работу, но ценность не доставлена</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>релизное окно двигается</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>бизнес ждет</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#f8c9a8"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f8c9a8">Это уже прямой рост операционной стоимости каждой фичи. <span class='font-weight-bold'>В зрелой модели тестирование не происходит после разработки. Оно встроено в Definition of Done.</span></pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph --></p>
<p>Конфликт разработки и QA может исчезнуть за месяц после внедрения грамотной схемы. Стоп-сигнал реально получать сразу после коммита, это очень важно и имеет последствия, такие как исчезновение очереди как класса.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Как в том мемчике: и вот тогда этот момент наступает… QA превращается из контролера в систему управления рисками. И здесь вскрывается причина, почему большинство годами топчутся на месте. У разработки KPI на количество закрытых задач, у QA на количество найденных дефектов, у бизнеса на срок релиза. Локально все молодцы. На уровне delivery – вечная пробка в центре столицы.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Затык №3. Flaky-тесты и инфляция доверия</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Как только (и вообще – если!)  глава разработки произносит: <em>«Да ладно, там тест опять моргнул, давай руками перепроверим и катим»</em>, ваш DevOps официально закончился.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Нестабильный тест (flaky) – это управленческий риск. Он легитимизирует игнорирование пайплайна и наступает кризис доверия к системе. В этот момент вы платите за автоматизацию, которой по факту не пользуетесь. Оно вам надо?</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#c6f1e0"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#c6f1e0">Дальше мы видим цепную реакцию: нестабильные тесты → ручной аппрув → дорогие люди делают механическую работу → релизы реже → замедляется вывод фич → бизнес теряет скорость.</pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph --></p>
<p>Вуаля! дорогой CI/CD превращается в декорацию, а релиз снова становится ручным ритуалом с участием всех лидов компании. Сколько времени они потратят на созвоны и согласования?..</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Стабильность тестов в 2026 – метрика уровня CTO. Мы писали об этом <a href="https://quality-lab.ru/blog/qa-metrics-2026-risk-management/" target="_blank" rel="noreferrer noopener">19 февраля</a>… Она отвечает на главный вопрос бизнеса: можно ли масштабироваться быстро без риска обвалиться? </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:table --></p>
<figure class="wp-block-table">
<table class="has-fixed-layout">
<tbody>
<tr>
<td><span class='font-weight-bold'>Состояние системы</span></td>
<td><span class='font-weight-bold'>Последствия для бизнеса</span></td>
</tr>
<tr>
<td><span class='font-weight-bold'>Доверяем автотестам</span></td>
<td>Релиз по плану, команда спокойна, TTM минимальный.</td>
</tr>
<tr>
<td><span class='font-weight-bold'>Тест иногда падает</span></td>
<td>Релиз раз в неделю, ночные дежурства, «налог на надежду».</td>
</tr>
</tbody>
</table>
</figure>
<p><!-- /wp:table --></p>
<p><!-- wp:paragraph --></p>
<p>Рабочая практика не для слабонервных: нестабильный тест летит в карантин. Сразу. Без обсуждений и обещаний починить в следующем спринте. Потому что каждый пропущенный flaky минусует 10% доверия к вашей системе. А доверие в delivery конвертируется в скорость напрямую.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Затык №4. Страх прода и управляемый риск</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Можно иметь идеальный препрод и все равно быть на нервах перед тем, как выкатываться. Реальная жизнь ПО начинается только на реальном трафике. Пока релиз это бинарное событие “пан или пропал”, скорость всегда будет ограничена страхом. Canary-релизы и feature flags на уровне менеджмента это вам не DevOps-игрушки, а рабочий способ превратить риск в управляемую величину.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Canary-релиз на 1% пользователей звучит как страховой полис. Фича открывается крошечной группе пользователей под прицелом авто-мониторинга. При любом отклонении система сама жмет на Rollback. Не исключая ошибки, мы сводим их радиус поражения к нулю.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>И вот здесь начинается следующий логичный шаг индустрии, когда анализ аномалий и решение об откате делает не человек в два часа ночи, а автономная система. Но это уже отдельный разговор про QA-агентов, о которых мы обязательно поговорим в следующий раз. А пока продолжим…</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Почему это не внедряется, даже когда все всё понимают</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Технически большинство компаний способны реализовать все описанное. Но не способны организационно. Пока QA вы держите как отдельный блок со своим KPI на количество найденных багов, он всегда будет этапом. Пока скорость разработки измеряется количеством закрытых задач, а не временем доставки ценности, очередь будет считаться нормой. Так что Quality-First DevOps не меняет инструменты, а перераспределяет ответственность за качество внутри всей системы. Именно поэтому такие изменения редко происходят только внутренними силами. Технически команды умеют почти всё из этого списка. Но без внешнего опыта, где подобная трансформация уже пройдена несколько раз, организационная инерция оказывается сильнее любых правильных решений.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading">Быстрый тест на зрелость вашего delivery</h4>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Ответьте на 3 вопроса:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li>Можно ли откатить релиз одной кнопкой за минуту?</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Верит ли лид разработки результатам автотестов без ручной перепроверки?</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Поднимается ли тестовое окружение автоматически под каждую задачу?</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29240,"width":"281px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/18990dc5-cc29-439e-82df-2732d35033d4-Photoroom.png" alt="18990dc5-cc29-439e-82df-2732d35033d4-Photoroom" class="wp-image-29240" style="width:281px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/18990dc5-cc29-439e-82df-2732d35033d4-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/18990dc5-cc29-439e-82df-2732d35033d4-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/18990dc5-cc29-439e-82df-2732d35033d4-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/18990dc5-cc29-439e-82df-2732d35033d4-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>Если хотя бы один ответ «нет», значит, у вас все еще капает тот самый налог на надежду. Самый дорогой налог в IT. Вы платите его не деньгами, а скоростью бизнеса.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph {"style":{"color":{"background":"#f4d3db"}}} --></p>
<p class="has-background" style="background-color:#f4d3db">Есть, о чем подумать: ИИ дает ускорение, метрики дают прозрачность, Quality-инфраструктура дает предсказуемость.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Если вы узнали в этом тексте свою ситуацию и хотите понять, где именно ваш delivery теряет скорость, можем разбрать на консультации: посмотрим на пайплайн, метрики доверия к автотестам и точки, где «капает налог на надежду».</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:footnotes /--></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>]]></description>
<link>https://quality-lab.ru/blog/quality-devops-kak-ubrat-ochered-i-uskorit-relizy/</link>
<pubDate>Wed, 25 Feb 2026 14:40:35 +0300</pubDate>
</item>
<item>
<title>Как мы выстроили процесс нагрузочного тестирования в KISLOROD</title>
<description><![CDATA[<p>Меня зовут Эдуард, я руковожу отделом DevOps в компании <a href="https://o2k.ru/" mce_href="https://o2k.ru/" target="_blank" style=""><strong>KISLOROD</strong></a>.&nbsp;В этой статье расскажу про подход к нагрузочному тестированию, который сформировался у нас. Мы постоянно дорабатываем процессы, поэтому буду рад конструктивным комментариям и обмену опытом.</p><h3>Зачем вообще нужно нагрузочное тестирование</h3><p>Нагрузочное тестирование — это способ проверить, как система ведет себя при росте числа пользователей и соответствует ли ее поведение ожиданиям. По сути, это имитация реальной активности: пользователи заходят на сайт, просматривают страницы, добавляют товары в корзину, оформляют заказы.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/performance-testing/4485-kislorod</link>
<pubDate>Tue, 24 Feb 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Новый функционал? Подождем до последнего. Как банки к АУСН подключались</title>
<description><![CDATA[<p>На <a href="https://testbase.ru/learn" target="_blank">моих курсах</a> для начинающих у студентов порой возникают сомнения в актуальности лекций. Ошибочно кажется, что в 21 то веке:</p><p style="text-align: left;"></p><ol style="text-align: left;"><li>цикл «Code and Fix» не существуется, у всех Agile или аналоги (ну да, ну да...);</li><li>глупых багов типа перехода через новый год или смены часовых поясов, уже давно нет, их решения «вшиты» в библиотеки кода (ага, щаз)</li><li>нет проблем «сделали в последние дни, из-за чего огребли проблемы»;</li><li>нет проблем с документацией;</li><li>...</li></ol><div>Поэтому я рассказываю актуальные истории таких проблем, которых вроде как в 2026 году и быть то не должно... У меня их даже поднакопилось, но... Не записал сразу = забыл ))) Буду постепенно рассказывать тогда.</div><div><br /></div><div>Сегодня я расскажу про АУСН. Сначала короткий рассказ, что это такое, а потом про текущую ситуацию с ним (и проблемы...)</div><div><br /></div><span><a name='more'></a></span><div><br /></div><div><br /></div><h3 style="text-align: left;">Что такое УСН и АУСН</h3><div><br /></div><div>Это налоговые ставки для ИП или малого бизнеса. Когда вы работаете в штате, за вас налоги платит работодатель. А если вы открываете юр. лицо, нужно будет платить самому. Зачем?</div><div><br /></div><div>Несколько причин открыть ИП (хотя сейчас есть альтернатива — самозанятый, раньше не было):</div><div><ol style="text-align: left;"><li>Работать как ИП на компанию (или несколько разных) — некоторые компании берут только ИП, или наоборот, не берут тех, у кого есть ИП.&nbsp;</li><li>Работать на второй работе — на одной трудоустроены, остальное как ИП. Так, например, я с издательством сотрудничаю как ИП и на него получаю гонорар с проданных книг. Так проще и дешевле платить налоги, чем как физику.</li><li>Получать официальную прибыль — например, за сдачу квартиры в аренду, чтобы не как физик декларации заполнять, а просто честно платить налог с ИП.&nbsp;</li><li>Ну и просто работать на себя, но если вы это планируете, то и так всё знаете ????</li></ol><div>Открывая ИП (или ООО, или ещё что-то), вам надо выбрать налоговую ставку. По сути раньше были основные варианты:</div></div><div><ul style="text-align: left;"><li>УСН — упрощенный налог, платишь 6% с дохода (не с прибыли, а поступивших денег, неважно сколько ты при этом потратил)</li><li>«Серьезный» бухучет — там платишь с разницы «доходы - расходы», но бухучета больше, он сложнее + налоговая будет заставлять отчитываться обо всех расходах, чтобы ты туда лишнее не вписал.</li></ul><div>В общем, обычно берут упрощенку. В ней есть ограничение — 60 млн дохода в год, иначе надо платить НДС и всякое сложное.</div></div><div><br /></div><div>Потом появился АУСН — автоматизированный налог, где 8%, а не 6% платишь, но "зато" оно платится само, не надо делать отчетность, её считают банки. Но если ты уже платишь за бухгалтерию, то вроде как и нет смысла в этом АУСН... Раньше )</div><div><br /></div><div><br /></div><div><div><br /></div><h3>Изменения в 2026 году</h3><div><br /></div><div>Поменяли систему. Чтобы не платить НДС и сидеть на упрощенке, максимальный доход по ставкам:</div></div><div><ul style="text-align: left;"><li>УСН — 10 млн рублей в год (вместо 60!!). Но понижают "медленно", в этом году можно 20 млн получить, в следующем вроде 15, потом уже&nbsp;перейдут на 10.</li><li>АУСН — 60 млн&nbsp;</li></ul><div>То есть по сути, если доход больше 10-20 млн <i>(эх, мне бы в эту категорию ????)</i>, надо переходить на АУСН. ВОТ ТЕПЕРЬ он стал выгодным!</div></div><div><br /></div><div><br /></div><div><br /></div><div><h3>Проблемы перехода (а вот и баги!)</h3><div><br /></div><div>Ну и, собственное, сейчас многие стали переходить на АУСН и, сюрприз-сюрприз, стали вылезать баги!&nbsp;</div><div><br /></div><div>Я тут немного теоритик, так как сама в эту категорию дохода не попадаю. Но знакомый, который перешел, скинул любопытную статью, подтвердив, что встречал такие проблемы —&nbsp;<a href="https://www.forbes.ru/finansy/554530-biznes-stal-case-perehodit-na-ausn-s-kakimi-problemami-mozno-stolknut-sa">https://www.forbes.ru/finansy/554530-biznes-stal-case-perehodit-na-ausn-s-kakimi-problemami-mozno-stolknut-sa</a>:</div><div><br /></div><div><blockquote>«С проблемами передачи данных при работе на АУСН сейчас сталкиваются многие предприниматели, и это не частные сбои, а системные», — говорит член совета московского регионального отделения «Деловая Россия» Андрей Глушкин. Ошибки в передаче данных от банков и операторов в налоговые органы наблюдается довольно часто, особенно в начале 2026 года, подтверждает член Ассоциации налоговых консультантов, руководитель налоговой практики адвокатского бюро «БВМП» Александр Андропов. В числе основных причин — неполная готовность банковских систем к интеграции с Федеральной налоговой службой (ФНС), в том числе потому, что многие кредитные организации подключились к реестру уполномоченных кредитных организаций для АУСН (то есть стали банками, где плательщики АУСН могут открывать счета) только в конце 2025-го. «Банки не успели полноценно протестировать обмен данными, что приводит к искажениям в передаваемой информации», — говорит Андропов.&nbsp;</blockquote></div><div><br /></div><div>Я сначала, пока читала статью, лишь кивала головой. Конечно, это логично, если раньше единицы работали, то и меньше проблем встречали. Чем больше пользователей, тем больше шанс, что они попадут "в ту самую ветку кода, где есть баг".</div><div><br /></div><div>Ну и раз сейчас массово юрики стали переходить на эту систему, стали всплывать проблемы.</div><div><br /></div><div>— Конечно, банки были не готовы! — думала я. Ведь это только сейчас внедряется, я вот про АУСН услышала год назад, что-то новенькое жеж (я не бухгалтер и поэтому за бухгалтерскими новостями не слежу)</div><div><br /></div><div>А вот что для меня стало откровением в этой статье, так это то, АУСН уже почти 4 года! Оказывается, он запустился летом 2022 года. 3.5 года назад!</div><div><br /></div><div>И при этом банки «не успели протестировать обмен данными». А всё почему? А потому, что банки и сами только недавно стали подключаться к этой системе!</div><div><br /></div><div>Это кажется странным, ведь все равно придется. Но оттянуть до последнего — это состояние души))) Начиная со студенчества, когда в последнюю неделю начинаешь сдавать домашки, и заканчивая... А заканчивая ли?</div><div><br /></div><div>В любом случае в банковских системах есть свои планы на ближайшие несколько релизов. Надо сделать функцию А, исправить функцию Б и вон ту финтюфлюшечку хочется. Так зачем брать в релиз задачи, которые пока не горят? Видимо, клиентов на АУСН было настолько мало, что проще было им отказать "нет, мы не умеем поддерживать такую систему", чем внедрять её.</div><div><br /></div><div>Хотя, конечно, за несколько лет можно было выделить время... Но реальность такова, что подключаться все стали в последний момент — а это всегда опасно (баги есть везде, поэтому нужно время на тестирование и отладку).&nbsp;</div></div><div><br /></div><div>Ну и интеграция — это тоже всегда сложно, потому что обычно нет подродного ТЗ, делают как поняли, а оно работает не так, а надо переделывать... В общем, процесс небыстрый! Хоть и 21 век)</div><div><br /></div><div><i style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">PS — добавила пост в&nbsp;<a href="http://okiseleva.blogspot.ru/2015/07/blog-post_16.html" style="color: #6699cc; text-decoration-line: none;">общую копилку багов</a>.</i></div><p></p>]]></description>
<link>http://okiseleva.blogspot.com/2026/02/blog-post.html</link>
<pubDate>Tue, 24 Feb 2026 20:37:00 +0300</pubDate>
</item>
<item>
<title>Простые рецепты аутентификации в Playwright: кулинарная книга тестировщика</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/11hs/playwright-authentication/playwright-authentication1.jpg" mce_src="https://software-testing.ru/images/stories/library/11hs/playwright-authentication/playwright-authentication1.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Cуатика Визань (Swathika Visagn)<br /><strong><a href="https://www.ministryoftesting.com/articles/simple-playwright-authentication-recipes-a-cookbook-for-software-testers" mce_href="https://www.ministryoftesting.com/articles/simple-playwright-authentication-recipes-a-cookbook-for-software-testers" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p>
<h1>Что общего у кулинарии и автоматизации тестирования?</h1>
<p>Что общего у кулинарии и автоматизации тестирования, спросите вы? Можно провести красивые параллели между программированием и готовкой: автоматизаторы тестирования как шеф-повара, скрипты автоматизации как рецепты, фреймворки автоматизации как кастрюли и сковородки, а кулинарная книга — как эта статья! Эта статья посвящена всем тестировщикам, которые ищут новые рецепты аутентификации с использованием Playwright.</p>
<p>Статья предназначена для автоматизаторов тестирования, которые уже знакомы с Playwright или используют его в своей работе. Для демонстрации я буду <a href="https://bookcart.azurewebsites.net/" mce_href="https://bookcart.azurewebsites.net/">использовать учебный магазин Book Cart</a>, на который я наткнулась в <a href="https://www.ministryoftesting.com/articles/websites-to-practice-testing" mce_href="https://www.ministryoftesting.com/articles/websites-to-practice-testing">статье</a> Сары Дири на сайте Ministry of Testing.</p>
<p>Для этой «поваренной книги» я отобрала четыре рецепта аутентификации, варьирующиеся от базового до среднего уровня сложности. Эти рецепты используют сочетание методов аутентификации через UI и API, с объяснением реальных сценариев применения для каждого из них.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-automation/4452-playwright-authentication</link>
<pubDate>Mon, 23 Feb 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Хочешь ещё быстрее?</title>
<description><![CDATA[<p><span class="css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3">Касательно командной разработки с интенсивным применением LLM — ну да, растёт скорость внедрения изменений. За всем уследить не получается, и мы натыкаемся на нелепые баги, которые можно было бы обнаружить за секунды, ещё до <del>релиза</del> деплоя. Наверное, уследили бы, если бы изменение было планомерным, предсказуемым и затрагивало только одно секундное дело. А оно затрагивает много место сразу, в которые никто не заходил и ломаться было нечему… </span>Если бы всё всегда ломалось предсказуемо, то уж мы бы…</p>
<p><span class="css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3">QA процессы — можно внедрить, конечно, но </span></p>
<ul>
<li>в разработке ПО гарантирование качества не гарантирует ни качества, ни отсутствия багов. Долго объяснять, но это так, ПО не делается, как клоны на фабрике, это каждый раз уникальный артефакт со множеством особенностей, из которых некоторые наследуемые, а некоторые неожиданно новые.</li>
<li>тестирование <span class="css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3">стоит на фундаменте из требований, которые надо сперва наладить и запрягать перед каретой, а не после. Если мы деплоим 256 изменений за один раз по вторникам, то как именно трэкать эти самые требования? Где? Кем? Скорее всего, это ПО развивается не по требованиям, а по невнятным ожиданиям бизнеса. Нет требований — нет и гарантий соответствия им, потому что нечему соответствовать, тестирование живёт в режиме «сравнить наблюдаемое с ожидаемым». Нет ожиданий — не с чем сравнивать, остаётся только <em>исследование</em> в режиме «я не уверен, как оно должно работать…» А исследование ПО в QA этого ПО не конвертируется.</span></li>
</ul>
<p>Любопытно, что всё то, что мы сегодня переживаем, уже было — в начале девяностых, когда понадобилось ускорить поставку ПО, потому что бизнес же тестирует гипотезы и идёт вслепую, а не по продуманному и однозначному пути. И пришёл agile, и все ускорились, и в двухтысячных годах XX века я не видел в разработке живых тест-аналитиков и тест-дизайнеров, к тому времени их уже всех свезли на остров Литтл-Сент-Джеймс (в составе Американских Виргинских островов), где американский финансист Джеффри Эпштейн &amp; Co регулярно путали их с девицами красными.</p>
<p>И это случилось так быстро, что в двухтысячных уже всем казалось нормальным, что тестировщик сам придумывает тест-кейсы, сам их дизайнит и сам их выполняет. Ну, как дизайнит… он знает о том, что существует тест-дизайн, где надо какие-то таблицы придумывать, но на это всегда нет времени. Проще читать требования напрямую, на ходу придумывать проверки и сразу их выполнять. Придумывать тест-кейсы — где вы на это время найдёте?</p>
<p>А сегодня нам уже и требования негде взять, потому что ПО генерируется быстрее, чем кто-то соображает, зачем его нужно генерировать и что именно оно должно делать. И как именно… И какой бизнес будет стоять за нагенерированным ПО. Те же сайты не нужны сами по себе, они нужны бизнесу как витрина, как сборщик заказов…</p>
<p>А ещё в древности ПО поставляли на дисках, и обновлять его было крайне сложно, поэтому наши предки старались его как-то привести в готовое состояние ДО релиза. Но мы уже не они, мы перепрыгнули в парадигму «ПО работает на сервере, к которому мы постоянно имеем доступ, и если мы найдём ошибку — просто быстро её исправим», и это полностью true в отношении мелких ошибок. А если ошибка будет NOT мелкая, ну, откатим софт… наверное. <span style="color: #008000; --darkreader-inline-color: var(--darkreader-text-008000, #65eb65);" data-darkreader-inline-color=""><em>Стоимость исправления ошибки</em></span> упала, зачем вы требуете время на то, чтобы тестировать тщательно до релиза? Тестируйте после релиза, что вам мешает? Давайте сперва выпустим софт, чтобы продажи были, а потом вы будете его тестировать. Вот вам требования, не нойте.</p>
<p>А сегодня и требований «уже не стало, а скоро совсем не будет» © нашсеньор Паниковский. Мне уже предлагают воспринимать под видом требований абстрактные тексты, которые были сгенерированы по сгенерированному коду. Текст получается осмысленным на расстоянии одного предложения, а вместе эти предложения не склеиваются.</p>
<p style="padding-left: 40px;">Всё, как мы любим — без воды, без резолюции, без нервотрёпки, без коагуляции десереализационного инкремента, без хтонических завихрений, без un pahar de tocănică gustoasă la a voastră masa măiastră.</p>
<p style="padding-left: 40px;">Хочешь ещё?</p>
<p>Я понимаю коллегу, который тоже задолбан и был вынужден предложить хоть что-то под видом требований, он поднатужился и выдал — дякую, аж пiдскакую. А дальше со всей этой слезинкой ребёнка что делать?</p>
<p>В норме я могу, читая требования</p>
<ul>
<li>распознавать ситуации, которые наше ПО должно обработать,</li>
<li>распознавать ситуации, которые наше ПО не должно обрабатывать,</li>
<li>распознавать ситуации, которые наше ПО не должно обработать, но которые могут произойти</li>
<li>распознавать ситуации, про которые наши разработчики требований и ПО по какой-то причине не подумали</li>
<li>распознавать ожидания, которые подразумеваются, но не были явно объявлены — не все связи и требования очевидны, не обо всех детальках можно додуматься заранее</li>
</ul>
<p>То есть, мой процесс состоит из нескольких фаз: осознание, обдумывание, согласование, выполнение. Всё это требует какого-то времени. Что можно машинизировать и ускорить?</p>
<p><strong>Осознание</strong></p>
<p>Тест-кейсы пишут так же, как пишут код — руками на клавиатуре. Начинаешь медленно, затем ускоряешься, и постоянно к чему-то приходится возвращаться.</p>
<p>Можно их сгенерировать — вот вам и, кагбэ, ускорение. Но придётся разбираться в нагенерированном. То есть, произойдёт мощный спид ап на первой фазе, а затем…</p>
<p><strong>Обдумывание</strong></p>
<p>… всё равно мучительно медленный разбор — нужны часы.</p>
<p>Ок, я могу сам заниматься тест-дизайном, это, в принципе, знакомая и интересная аналитическая работа, которая направлена не на написание тест-кейсов, а на выявление очевидных и неочевидных связей и требований, и уже из того, что останется, появляются тест-кейсы. Но это требует времени.</p>
<p>А ещё тест-кейсы пишут или по требованиям, или по уже работающему приложению. Второй подход ублюдочен, но с него начинают все. Первый подход сложен, но он более разумен и эффективен. Anyway, и на то и на это нужны часы пропорционально количеству функциональностей ПО — чем их больше, тем больше времени нужно.</p>
<p><strong>Согласование</strong></p>
<p>Очень важный этап, который мы все дружно скипнем. Сколько раз уже скипали, неужели на этот раз что-то бомбанёт? Вроде не должно…</p>
<p><strong>Выполнение</strong></p>
<p>Вручную тестирование делается медленно — нужны часы.</p>
<p>Можно какие-то проверки делать через тот же Playwright, но не все же, и их так или иначе надо будет записать в виде кода. LLM тут может нас спидануть, но местами с очевидно-предсказуемой потерей буквы «з», и придётся разбираться в каждом отдельно взятом кейсе. Нужны часы на подготовку тестов для автоматизации и, к сожалению, в будущем понадобится МНОГО часов на их постоянное переписывание, потому что автоматы будут устаревать и спотыкаться на ровном месте — просто потому, что так они устроены.</p>
<p>И надо, чтобы этим занимались отдельные пацаны, и для успеха им нужны уже кем-то продуманные тест-кейсы, чтобы не переключаться между разными уровнями абстракции. Впрочем…</p>
<p>А если после всего этого ВНЕЗАПНО выясняется, что требования уже где-то как-то непредсказуемо поменялись, то надо всю эту аналитическую работу выполнять заново. Это реалистично? В погоне «успеть вовремя» её будут выполнять частично, а значит, никаких гарантий не будет, ПО поедет в релиз от станции Тревожность до станции Бадабумц, потому что тестировщики опять пропустили какую-то досадную (местами лютую) мелочь.</p>
<p>Может быть, пришло время как раньше, порезать в ролях и принудить тестировщиков выполнять работу, которую раньше делали отдельные юниты? Да, тест-дизайн стал хуже, но остался же? Можно, например, заставить тестировщика придумывать требования. Он же не сможет возразить?! И пусть это будут очень плохие требования, но они же будут, хоть какие-то?!</p>
<p style="padding-left: 40px;">Всё, как мы любим — без воды, в пустыне, под палящим солнцем…</p>
<p>Ок. Мы превратим тестировщиков в бизнес-аналитиков «<span class="css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3">с сильным навыком тестирования». И пусть эти аналитики сами гоняют LLM и сами «генерируют соответствующие артефакты», которые только им самим и нужны.</span></p>
<p>Пусть Джек идёт <a href="https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BC,_%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D0%BB_%D0%94%D0%B6%D0%B5%D0%BA">строить дом</a>…</p>
<p>Вот LLM, которая генерирует код проекта.</p>
<p>Вот LLM, которая генерирует код проекта, на основе которого генерируются требования к проекту.</p>
<p>Вот LLM, которая генерирует код проекта, на основе которого генерируются требования к проекту, на основе которых генерируются юнит-тесты для проверки проекта. Лей в прод.</p>
<p style="padding-left: 40px;">Тут будет большой бэмц, после которого программиста допрашивают через его же сфинктер, а как так получилось, что его красивые юнит-тесты работают, а ПО — с багами. Пропустим эти неприятные звуки и перейдем к следующему ходу.</p>
<p>Вот LLM, которая генерирует код проекта, на основе которого генерируются требования к проекту, на основе которых генерируются и юнит-тесты для проверки проекта, и тест-кейсы для проверки проекта сразу в Playwright, чтобы не возиться с ручным тестированием. Лей в прод.</p>
<p style="padding-left: 40px;">Тут пропустим ещё один большой бэмц, после которого всех сразу допрашивают (и не только через сфинктер; что вы так сосредоточились на этом сфинктере, вы больные, что ли?!), а как так получилось, что и юнит-тесты работают, и Playwright работает, а ПО — с багами. Почему вам не хватило <del>времени</del> мозгов проверить руками хотя бы основные happy path? Почему этих happy path так много, товарищи? Давайте заново.</p>
<p>Вот LLM, которая генерирует код проекта, на основе которого генерируются требования к проекту, на основе которых генерируются и юнит-тесты для проверки проекта, и тест-кейсы для проверки проекта сразу в Playwright, и тест-кейсы для ручного тестирования. Сжимай свой сосредоточенный сфинктер, раз уж ты ни на чем другом уже не можешь сосредоточиться, и лей в прод.</p>
<p>А что лить-то? Мы сразу втыкаемся в то, что ручное тестирование проекта требует времени два раза — и для подготовки (когда анализируют требования и придумывают тест-кейсы), и для выполнения. И это всё никак не ускоряется. Быстро льётся, если без тестирования. А вы же хотели тестирования? Хм…</p>
<p>И время идёт, пока мы читали эти <del>ужоснах</del> тест-кейсы для ручного тестировани, та клята LLM уже перегенерировала заново код проекта, на основе которого генерируются требования к проекту, на основе которых генерируются и юнит-тесты для проверки проекта, и тест-кейсы для проверки проекта сразу в Playwright, и новые тест-кейсы для ручного тестирования… и по цепочке всё обновила. Кхм, как говорится, блеать…</p>
<p>Если генерирование ПО каждый раз создаёт ПО заново, с непредсказуемыми характеристиками и возможностями, которые надо перетестировывать заново, с нуля, с тем же уровнем недоверия, то в этой схеме не может произойти общее ускорение. В этой схеме есть моменты для локального ускорения, но в целом — нет. Это как таскать воду из колодца домой, и местами на этом пути находить сантиметрики, которые можно срезать, и весь путь туда-обратно как будто-бы сокращается и оптимизируется, да, но в целом как был километр, так и остался, и нужно принципиально другое решение, в котором вода в доме будет постоянно появляться, а таскать воду из колодца уже не придётся.</p>
<p>Почему мы вообще занимаемся этим трудом Сизифа, к которому аргонавты каждый день прилетают и клюют печень да «трахаютЪ мозгЪ», уж простите, не знаю как это произносится по-древнегречески!?</p>
<p>Если делать ПО, которое будет взаимодействовать <em>только</em> с другими ПО, то постоянное тестирование будет ненужным, оно перейдёт в режим одноразовой задачи, вы можете видеть положительный эффект этой условности в разделе API. А если делать ПО, которым будут пользоваться люди (местами бесконечно глупые, местами дъявольски умные), то и проверять его надо людьми, причём постоянно. Как это ускорить?</p>
<p>Может быть, стоит убрать из этой схемы вообще всех, даром, и пусть LLM сами генерируют код и тесты, и впихивают это всё в CI/CD, и выполняют на проде, и пусть другие LLM этим всем пользуются и всё это покупают. Проекты же делают для прибыли, right?</p>
<p>В общем, разгоняемся, пока можем. Про торможение будем думать, когда придётся начать тормозить…</p>
<p>&nbsp;</p>
<p><iframe title="Zdob si Zdub - Tiganii si OZN-ul (Calitate audio superioara)" width="665" height="499" src="https://www.youtube.com/embed/0z1gYdZ3TIg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p>Hop, hop, hop, hop, hop, hop, hoba!</p>]]></description>
<link>https://testitquickly.com/2026/02/20/mesterul-manole-rastoarna-caldarea/</link>
<pubDate>Fri, 20 Feb 2026 15:08:10 +0300</pubDate>
</item>
<item>
<title>Какие метрики в тестировании в 2026 году действительно влияют на релиз и бизнес</title>
<description><![CDATA[<p><!-- wp:paragraph --></p>
<p>Традиционных показателей вдруг стало недостаточно для релизных решений. Современные метрики в тестировании всё чаще рассматриваются как инструмент управления рисками, но какие метрики в тестировании остаются актуальными в 2026 году? Разбираем Risk Coverage, Defect Escape Rate, MTTD, стабильность автотестов и их влияние на релизные решения и бизнес-результаты.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Если открыть типовой QA-отчёт, вы увидите привычный набор показателей: количество дефектов, процент автоматизации, pass rate, объём выполненных тест-кейсов. Это все полезно на операционном уровне, но…теперь этого мало. В отличие от традиционных QA-метрик, новые показатели ориентированы на влияние на продукт. Требования к метрикам меняются по мере ускорения релизных циклов и усложнения продуктовой архитектуры. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29212,"width":"335px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/0e5df6de-7bee-4d4c-b737-a17770e10a92-Photoroom.png" alt="0e5df6de-7bee-4d4c-b737-a17770e10a92-Photoroom" class="wp-image-29212" style="width:335px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/0e5df6de-7bee-4d4c-b737-a17770e10a92-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/0e5df6de-7bee-4d4c-b737-a17770e10a92-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/0e5df6de-7bee-4d4c-b737-a17770e10a92-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/0e5df6de-7bee-4d4c-b737-a17770e10a92-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Баги пофиксить надо, только необходимо еще и поддержать управленческий выбор:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li>выпускать или дорабатывать,</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>усиливать регрессию или перераспределять ресурсы,</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>принимать риск или снижать его.</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Почему традиционные QA-метрики больше не отражают реальный риск продукта</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Проблема, конечно, не в самих показателях, а в том, какие вопросы им задают.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Количество дефектов</span> отражает объём обнаруженных проблем, но не показывает их распределение по рискам. Высокий показатель может быть нормой на ранней стадии, а низкий не гарантирует устойчивость релиза.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Процент автоматизации</span> демонстрирует масштаб внедрения всеми любимых автотестов, но не отвечает на вопрос о приоритетах покрытия. Автоматизация второстепенных сценариев, как ни странно, не снижает риск по критичным пользовательским потокам.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Pass rate</span> фиксирует состояние конкретного прогона, но практически не даёт информации о потенциальной уязвимости ключевых бизнес-функций.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>В результате ваш отчёт может выглядеть благополучно, тогда как неопределённость по рискам остаётся высокой. А бизнес хочет ответов…</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>И вот именно в этой точке и проявляется так называемый сдвиг, мы начинаем смотреть на метрики иначе. В 2026 году ценятся метрики, которые:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>помогают принимать решения,</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>показывают риски заранее,</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>связывают QA с продуктом и бизнесом.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Мы уже поднимали эту мысль в блоге, когда писали про <a href="https://quality-lab.ru/blog/qa-plan-2026-yanvar/" target="_blank" rel="noreferrer noopener">QA-план на этот год</a>. В той статье речь шла о том, что привычные метрики создают ощущение управляемости, но не помогают принимать решения и снижать риски. Поэтому отчасти сегодня мы и решили продолжить тему, но уже без привязки к планированию. Давайте смотреть, какие показатели сейчас действительно становятся стандартом для зрелых команд.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Современные метрики в тестировании, которые действительно влияет на релизные решения</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">&nbsp;1. Risk Coverage – покрытие рисков вместо формального coverage</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Вопрос смещается с количества протестированного на то, какие бизнес-критичные риски закрыты.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Risk Coverage дает возможность:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>соотнести тестирование с приоритетами продукта</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>оценить уязвимость ключевых пользовательских сценариев</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>обосновать релизное решение на языке рисков</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Это особенно важно в сложных продуктах, где 80–90% общего покрытия не гарантируют защищённость сценариев, влияющих на выручку или пользовательский опыт. Метрика, которую понимают за пределами QA. Такой поворот в сторону <a href="https://quality-lab.ru/blog/chto-testirovat-v-pervuyu-ochered-risk-orientirovannoe-testirovanie-po-russki/">риск-ориентированных</a> метрик во многом стал возможен благодаря изменениям в инструментах и аналитике. В декабре мы подробно разбирали, как искуственный интеллект в<a href="https://quality-lab.ru/blog/iskusstvennyy-intellekt-v-qa/" target="_blank" rel="noreferrer noopener"> QA помогает смещать фокус</a> с формального покрытия на управляемость рисков и предсказуемость релизов. В 2026 году уже никто из грамотных специалистов не экспериментирует с этим подходом, потому что внедрили и, представьте!,&#187;оно работает&#187;.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">2. Defect Escape Rate – индикатор системных зон уязвимости</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Сам по себе факт наличия дефектов в проде не является аномалией. Но любой спец из команды разработки задается вопросом, а на каком этапе <s>эта тварь вылезла</s> они были упущены.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Анализ динамики Defect Escape Rate позволяет:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>выявить слабые места в процессе</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>оценить эффективность регрессии</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>определить зоны, требующие пересборки подхода</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>На проектах рост Defect Escape Rate почти всегда отражается не только в отчётах QA. Он быстро превращается в падение конверсии, рост нагрузки на поддержку и прямые финансовые потери. В одном из предыдущих материалов мы разбирали, как ошибки качества напрямую <a href="https://quality-lab.ru/blog/pochemu_vash_sayt_teryaet_klientov_poka_vy_vlivaete_dengi_v_reklamu" target="_blank" rel="noreferrer noopener">бьют по бизнес-показателям</a> – и именно поэтому эта метрика всё чаще обсуждается на уровне продукта, а не только QA.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">3. Mean Time to Detect и время анализа</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Сокращение времени фикса остаётся важным, но всё важнее становится раннее обнаружение бага и понимание масштаба проблемы.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Время, за которое команда обнаруживает проблему, понимает её влияние и принимает решение, что с ней делать, становится критичным.&nbsp;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>MTTD и время анализа дефекта напрямую влияют на:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>стабильность релизов</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>нагрузку на поддержку</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>скорость управленческой реакции</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph {"backgroundColor":"cyan-bluish-gray"} --></p>
<p class="has-cyan-bluish-gray-background-color has-background">В 2026 году это одна из ключевых метрик зрелости QA и Dev-процессов.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Команды, которые активно внедряют <a href="https://quality-lab.ru/blog/iskusstvennyy-intellekt-v-qa/" target="_blank" rel="noreferrer noopener">observability</a> и автоматизированный анализ инцидентов, сейчас впереди планеты всей. Скорость фикса без скорости понимания почти не даёт выигрыша. Именно раннее обнаружение и осознание проблемы становятся ключевым фактором устойчивости.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">4. Stability of Tests – доверие к результатам</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Нестабильные автотесты снижают ценность всей системы контроля качества.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>А если результаты тестирования не вызывают доверия, то это приводит к игнорированию рисков: возникает эффект привыкания к алертам (alert fatigue), из-за чего релизы выпускаются практически вслепую</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Так что стабильность тестов постепенно выросла из технической детали в самостоятельную метрику.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">5. Time-to-Feedback – скорость обратной связи для разработки</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Чем быстрее разработчик получает сигнал о проблеме, тем ниже стоимость её устранения. Да, частенько QA начинает &#171;мучать&#187; разраба как будто бы необоснованно, но это уже тема для большой отдельной статьи</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>А главное ведь, что Time-to-Feedback показывает:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>насколько QA встроен в цикл разработки</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>где возникают задержки</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>как быстро риск становится видимым</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Для технического руководства эта метрика напрямую связана со скоростью команды и предсказуемостью релизов.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">6. Business Impact Metrics – выход за пределы QA</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Наиболее заметная тенденция в последние годы – связывание метрик качества с бизнес-показателями. В фокусе оказываются такие связки, как:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>дефекты → снижение конверсии</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>нестабильность → рост нагрузки на поддержку</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>проблемы качества → замедление time-to-market</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph {"style":{"color":{"background":"#e8dced"}}} --></p>
<p class="has-background" style="background-color:#e8dced">QA-метрики стали частью продуктовой аналитики и это не новый тренд для нас. Мы не раз говорили о том, почему качество нельзя рассматривать отдельно от маркетинга, продаж и пользовательского опыта. Этот тандем прочно вписался в управленческие стандарты.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Практические шаги по внедрению современных QA-метрик</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Чтобы перейти от отчётности к управляемости, важно действовать системно.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>1. Проведите аудит текущих метрик, ответив на три вопроса:</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>Какие из них реально используются при релизных решениях?</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Какие отражают риск, а какие – активность?</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Какие показатели дублируют друг друга?</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>2.<span class='font-weight-bold'> Введите карту рисков продукта</span>, сформировав перечень бизнес-критичных сценариев, технически уязвимых зон, исторически проблемных областей. И свяжите их с конкретными метриками.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29214,"width":"287px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/2b29972d-c162-46f3-bf46-7078132ded96-Photoroom.png" alt="2b29972d-c162-46f3-bf46-7078132ded96-Photoroom" class="wp-image-29214" style="width:287px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/2b29972d-c162-46f3-bf46-7078132ded96-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/2b29972d-c162-46f3-bf46-7078132ded96-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/2b29972d-c162-46f3-bf46-7078132ded96-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/2b29972d-c162-46f3-bf46-7078132ded96-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>3. <span class='font-weight-bold'>Переходите уже, наконец, от разовых отчётов к динамике.</span> Будьте уверены, анализ трендов (Escape Rate, MTTD, стабильность тестов) даёт больше информации, чем показатели одного релиза.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>4. <span class='font-weight-bold'>Синхронизируйте метрики с продуктом</span>, обсуждая показатели качества как на продуктовых встречах, так и при планировании релизов и, конечно, в контексте бизнес-целей.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>5. <span class='font-weight-bold'>Ограничьте набор ключевых показателе</span>й. Для стратегического уровня достаточно 4–6 метрик, напрямую влияющих на управленческие решения.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Резюмируем</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Метрики не теряют актуальности, но меняются требования к ним. Если метрика не помогает ответить на вопрос «что делать дальше?», то она не нужна. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>И да, ИИ и автоматизация ускоряют сбор и анализ данных. Но сами по себе они не делают метрики полезными. Полезными их делает связь с процессом, ответственностью и реальными целями продукта, так что при выборе KPI для QA-команды важно учитывать не только операционные показатели, но и бизнес-метрики качества.&nbsp;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Метрики к 2026 году из отчетов превратились в круглый стол для QA, разработки и бизнеса с очень крутой возможностью найти общий язык.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">FAQ. Часто задаваемые вопросы о метриках в тестировании</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Какие метрики в тестировании считаются ключевыми в 2026 году?</span><span class='font-weight-bold'><br /></span>Risk Coverage, Defect Escape Rate, MTTD, стабильность автотестов и Time-to-Feedback – как показатели, влияющие на риск и релизные решения.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Чем современные QA-метрики отличаются от традиционных KPI?<br /></span>Они ориентированы не на объём выполненной работы, а на оценку риска и бизнес-влияние качества.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Какие метрики важны для CTO?<br /></span>Показатели, влияющие на скорость релизов, предсказуемость и влияние дефектов на продуктовые метрики.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29219,"width":"311px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/c5b55f23-f025-432e-bc90-b5a25d54ef08-Photoroom.png" alt="c5b55f23-f025-432e-bc90-b5a25d54ef08-Photoroom" class="wp-image-29219" style="width:311px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/c5b55f23-f025-432e-bc90-b5a25d54ef08-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/c5b55f23-f025-432e-bc90-b5a25d54ef08-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/c5b55f23-f025-432e-bc90-b5a25d54ef08-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/c5b55f23-f025-432e-bc90-b5a25d54ef08-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>]]></description>
<link>https://quality-lab.ru/blog/qa-metrics-2026-risk-management/</link>
<pubDate>Thu, 19 Feb 2026 14:43:43 +0300</pubDate>
</item>
<item>
<title>Пострелизная валидация данных как новый вид тестирования?</title>
<description><![CDATA[<p><a href="https://habr.com/ru/articles/963860/" mce_href="https://habr.com/ru/articles/963860/" target="_blank" style="">Оригинальная публикация</a><br />Автор: Сергей Терентьев</p>
<h4>Пролог  </h4><p><em>Проекты бывают разные, простые и сложные, с хорошей и плохой документацией, стартапы и проекты с солидным (часто не очевидным) легаси, и тд. При этом для каждого проекта можно подобрать свой набор QA процессов и инструментов, который даст возможность достичь требуемого качества.</em>  </p><hr><h2>О статье и общая проблематика  </h2><p>В этой статье я расскажу о виде тестирования, который мне ранее не встречался в стандартных QA источниках, при этом нечто очень похожее используется в направлении <a href="https://medium.com/@talk-cloud/data-validation-in-data-engineering-ensuring-data-quality-and-integrity-178858cac564" mce_href="https://medium.com/@talk-cloud/data-validation-in-data-engineering-ensuring-data-quality-and-integrity-178858cac564" rel="noopener noreferrer nofollow" target="_blank">Data Engineering</a>. Этот вид тестирования показал свою эффективность в тех случаях, когда у вашего проекта есть следующие особенности:  </p><ul><li><p>это легаси проект с непрозрачной, плохо задокументированной и достаточно сложной логикой (назовем ее “<em>серой логикой</em>”). При этом&nbsp;члены команды, обладающие контекстом легаси не могут 100% гарантировать (или у вас есть сосмнения), что их воспоминания о фактическом поведении “<em>серой логики</em>” верны&nbsp;</p></li><li><p>на проекте присутствует БД, данные которой являются точкой применения вышеуказанной “<em>серой логики</em>”</p></li><li><p>сам проект уже в production</p></li><li><p>при этом ограничения, установленные на уровне БД не могут покрыть все необходимые ограничения, которые требует бизнес логика (само собой при наличии достаточно сложного функционала)</p></li></ul><p>Согласитесь, не так, чтобы эти условия были какой-то редкостью).</p>]]></description>
<link>https://www.software-testing.ru/library/testing/other-testing/4478-post-release-data-validation</link>
<pubDate>Tue, 17 Feb 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Silo и технический долг</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/11hs/tech-debt.jpg" mce_src="https://software-testing.ru/images/stories/library/11hs/tech-debt.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Кристин Джеквони (Kristin Jackvony)<br /><strong><a href="https://thinkingtester.com/what-silo-can-teach-us-about-tech-debt/" mce_href="https://thinkingtester.com/what-silo-can-teach-us-about-tech-debt/" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p>
<p>Недавно я посмотрела сериал AppleTV <em>Silo</em>. Шоу рассказывает о жизни 10 000 человек, обитающих в подземном бункере. Они знают, что их предки жили там сотни лет, но не знают, зачем, и почему выходить наружу опасно.</p>
<p>Бункер работает от генератора, который обслуживает команда Механиков. В третьем эпизоде показано, что генератор не работает правильно уже 30 лет и быстро приближается к критическому состоянию. Конечно, это сразу напомнило мне о техническом долге в программном обеспечении! В этой статье я рассмотрю восемь шагов, которые команда должна предпринять для работы с техническим долгом, с примерами из <em>Silo</em> и из проекта, над которым я работала несколько лет назад.</p>]]></description>
<link>https://www.software-testing.ru/library/around-testing/processes/4450-what-silo-can-teach-us-about-tech-debt</link>
<pubDate>Mon, 16 Feb 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Как я научила ИИ быть моим напарником по тестированию</title>
<description><![CDATA[<p>Автор: Екатерина Гаврилова</p><p>
Меня зовут Катя  и я ведущий инженер по тестированию в MD Audit.</p><p>Хочу поделиться как я внедрила ИИ в процессы тестирования, чтобы не тратить время на рутинные задачи и больше заниматься любимым делом (кидать мемы в рабочие чаты).</p><blockquote><p>AI не заменит тестировщика. Но тестировщик, умеющий работать с AI, заменит десятерых.  </p></blockquote><p>Эта статья  кратко и без воды расскажет о том, <strong>как я встроила ИИ в процесс ручного тестирования</strong>, какому подходу научила свою команду и какие промты реально экономят часы рутинной работы.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/general-testing/4477-ii</link>
<pubDate>Sun, 15 Feb 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Как я перестал бояться GUI-тестов и научился их любить (почти)</title>
<description><![CDATA[<p>Автор: Кирилл Толмачев
<br /><a href="https://habr.com/ru/articles/966756/" mce_href="https://habr.com/ru/articles/966756/" target="_blank" style="">Оригинальная публикация</a></p><p>
В феврале этого года я <a href="https://habr.com/ru/articles/883590/" mce_href="https://habr.com/ru/articles/883590/" target="_blank" style="">писал на Хабре</a>&nbsp;про автоматизацию тестов для САПР. Мы делали систему с записью действий в JSON и воспроизведением через pyautogui. Работало. Но только для одного конкретного проекта.</p><p>С тех пор фреймворк вырос. Сильно. Из узкоспециализированного решения для промышленного ПО превратился в универсальный инструмент. Теперь работает с чем угодно - офисные пакеты, банковские клиенты, CAD-системы.</p><p>Что изменилось? Убрал привязку к конкретному софту. Добавил умный поиск элементов вместо тупых координат. Сделал так, чтобы QA мог записать тест без единой строки кода. Прикрутил UI-ассерты, мониторинг системы, файловые проверки.</p><p>Короче, то что начиналось как решение для одной задачи, выросло в полноценный фреймворк. И оказалось полезным не только мне.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-automation/4486-gui-tests</link>
<pubDate>Sun, 15 Feb 2026 13:18:24 +0300</pubDate>
</item>
<item>
<title>ИИ в тестировании: экзоскелет для инженера или быстрый способ слить бюджет?</title>
<description><![CDATA[<p><!-- wp:paragraph --></p>
<p>С AI в тестировании сейчас происходит странная вещь. Кто-то пытается использовать его везде, а кто-то опасливо поглядывает, предпочитая не подпускать к процессам вообще. И то и другое, конечно, ненужные крайности. Можно найти уже сотни примеров проектов, где ИИ сокращал время релиза и делал работу QA спокойнее, предотвращая нервный тик от тысячного повтора рутинной операции. И тем не менее, если начнем искать, то увидим и достаточно случаев, где ИИ ускорял выпуск… багов в прод.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Но проблема не в технологии как таковой, а в ожиданиях. Многим, кто начинает пользоваться ИИ и восхищается результатами, сложно понять, что он не думает за тестировщика, какой бы супер-промт вы ни написали, и не понимает продукт так, как человек, как бы вы ему этот продукт ни скармливали в описании/изображении/схеме. Зато AI отлично забирает на себя механическую работу и помогает увидеть то, что нам сложно удержать в голове. Так что если в 2026 году вы всё ещё продаете (или покупаете) чисто ручное тестирование «по старинке», у меня для вас плохие новости. Вы либо неоправданно богаты, либо сознательно тормозите свой <a href="https://quality-lab.ru/blog/sokrashhaem-time-to-market-prakticheskoe-rukovodstvo-po-qa/" target="_blank" rel="noreferrer noopener">Time-to-Market (TTM)</a>. Там, где циклы разработки сократились до часов, классический подход к качеству стал <a href="https://quality-lab.ru/blog/kak-izbezhat-uzkix-mest-v-testirovanii-programmnogo-obespecheniya/" target="_blank" rel="noreferrer noopener">бутылочным горлышком</a>.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} --></p>
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":29191,"sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/0875e060-4bd2-4523-b1cf-ec0d82f6c904-Photoroom.png" alt="0875e060-4bd2-4523-b1cf-ec0d82f6c904-Photoroom" class="wp-image-29191" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/0875e060-4bd2-4523-b1cf-ec0d82f6c904-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/0875e060-4bd2-4523-b1cf-ec0d82f6c904-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/0875e060-4bd2-4523-b1cf-ec0d82f6c904-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/0875e060-4bd2-4523-b1cf-ec0d82f6c904-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column {"width":"66.66%"} --></p>
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:paragraph --></p>
<p>Если трезво смотреть на вещи, то сделать красиво моментально ИИ не поможет. Если не разобраться в сути, то можно нагенерировать столько высокотехнологичного мусора, что полгода разгребать придется. Но в руках зрелой команды это просто клад, инженерный экзоскелет, который позволяет не раздувать штат QA, сохраняя при этом хорошую скорость релизов. </p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>Мы <a href="https://quality-lab.ru/blog/blog-ii-v-testirovanii-prakticheskii-gid/" target="_blank" rel="noreferrer noopener">уже писали</a> о том, как на практике наши специалисты применяют ChatGPT в тестировании и как правильно писать промты для решения задач QA. Сегодня я хочу напомнить о главное и показать, в каких 5 зонах можно заставить нейронки окупаться, а также «красные флаги», которые должен видеть каждый CTO.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Тест-дизайн и «Шредер» для рутины</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Написание тест-кейсов по API-спекам или User Stories вполне механическая работа, которая исторически убила мотивацию не одного QA, к сожалению. Джуны сходят с ума сначала от радости, что им доверили большой объем, потом от усталости, потому что этот объем никак не заканчивается. А ведь можно перевести эту задачу на уровень AI-First QA.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Скармливаете модели требования, а на выходе получаете структурированный драфт: Happy Path, граничные значения и каверзные негативные сценарии.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>На уровне 2026 года ИИ умеет генерировать готовые Gherkin-сценарии или Playwright/Cypress шаблоны. ИИ помогает набросать структуру, но за <span class='font-weight-bold'>архитектуру</span> тестов по-прежнему отвечает человек. На старте проекта это экономит до 60% времени. Иногда все же проверка того, что нагенерировал ИИ занимает тоже немало времени.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Стоит помнить, однако,</span> что ИИ неплохо «галлюцинирует» с уверенностью эксперта. Если в документации дыра, нейронка не задаст вопрос, а выдумает логику и допишет сценарий сама. Поэтому грамотно делегировать ИИ объем, а человеку оставлять работу с контекстом и финальный аппрув.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29195,"width":"288px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/fad2660c-bc38-4229-a334-12f2589fffc4-Photoroom.png" alt="fad2660c-bc38-4229-a334-12f2589fffc4-Photoroom" class="wp-image-29195" style="width:288px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/fad2660c-bc38-4229-a334-12f2589fffc4-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/fad2660c-bc38-4229-a334-12f2589fffc4-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/fad2660c-bc38-4229-a334-12f2589fffc4-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/fad2660c-bc38-4229-a334-12f2589fffc4-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Self-Healing – конец эры «упавших» локаторов</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Еще несколько лет назад изменение ID кнопки на фронтенде означало смерть половины автотестов и работу в форс-мажоре для команды. Теперь профи это считают моветоном.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>На деле вы внедряете Self-healing механизмы (самовосстанавливающиеся системы) и если тест не находит элемент по старому селектору, то ИИ-агент анализирует DOM-дерево в момент падения теста. Он понимает: «Окей, ID изменился, но эта кнопка всё еще находится в блоке оплаты и имеет текст &#171;Купить&#187;». В результате тест не падает, а тестировщик с утра получает отчет о том, что агент подправил локатор, нужна проверка и мердж. В этом случае расходы на поддержку (Maintenance) тестов снижаются на 40%.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Smart Regression – игра в рулетку уже не в моде</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>С мелкими проектами проще работать, но когда у вас в бэклоге тысячи тестов, а релиз был назначен на «вчера», полная регрессия становится, мягко говоря, в тягость. Классическая приоритизация «на глаз» с большой вероятностью приведет к инциденту на проде.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Подключайте предиктивную аналитику, это и есть экспертный подход. Искусственный интеллект анализирует историю падений, свежие коммиты в Git и данные мониторинга из Grafana. Система сама собирает Risk-based пакет. И пока конкуренты гоняют полные тесты по несколько часов, вы проверяете только то, что реально могло сломаться, и даете аппрув за 40 минут. И это прямая экономия на CI/CD пайплайнах.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Генерация синтетических данных (TDM)</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>В 2026 году требования к безопасности (GDPR, 152-ФЗ) стали драконовскими. Использовать реальные данные клиентов для тестов – подсудное дело. Есть хорошее решение – обучить локальные модели на структуре БД проекта. ИИ генерирует синтетические датасеты: миллионы транзакций, профилей и заказов, которые выглядят как реальные, но не содержат персональных данных. Это дает вам тестирование на «живых» объемах данных <a href="https://quality-lab.ru/blog/bezopasnost-po-v-2025-kak-spravitsya-s-uyazvimostyami-nulevogo-dnya/" target="_blank" rel="noreferrer noopener">без единого риска утечки</a>.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">RCA и анализ багов – паттерны против хаоса</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Когда в Jira падает гора тикетов, человек видит симптомы. ИИ помогает коррелировать логи с шагами воспроизведения – отлично делает <span class='font-weight-bold'>Clustering</span> (группировку похожих багов) и действует в <span class='font-weight-bold'>RCA, </span>Root Cause Analysis (анализ корневых причин, структурированный метод поиска истинного источника проблемы). С этим анализом нейронка выявляет хрупкие модули и сопоставляет логи сервера с описанием бага. Для PM ценность такого подхода неоценима, потому что вместо отчета вроде «у нас 50 багов», вы получаете полный расклад типа: «Система деградирует в модуле оплаты из-за конфликта типов в API. Вот 5 связанных кейсов». Время на локализацию ошибки (MTTR) в этом случае сокращается в 3 раза.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Где ИИ – прямая угроза&nbsp;</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Опытные команды принципиально не доверяют ИИ в трех случаях.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Security &amp; Data Privacy</span>.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Скармливать закрытую архитектуру в публичный ChatGPT равносильно, что купить билет в один конец до штрафов и репутационного краха. Важно работать через Enterprise-API с гарантией безопасности данных или можно развернуть локальные современные open-source модели (семейства Llama, Mistral и др.) внутри защищенного контура компании.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Сложные бизнес-домены</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>В финтехе, медтехе или софте для промышленности цена глюка ИИ слишком высока – реальные деньги или человеческие жизни. Здесь нейронка может быть только ассистентом, последнее слово всегда за экспертом.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>UX и человечность</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Нейронка никогда не скажет вам, что у вашей разработки отстойный интерфейс и что ее раздражает кривой путь к корзине или оплате. Такую штуку, как продуктовое чутье автоматизировать пока не удалось.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Эффективность в цифрах (ROI для бизнеса)</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:table --></p>
<figure class="wp-block-table">
<table class="has-fixed-layout">
<tbody>
<tr>
<td><span class='font-weight-bold'>Процесс</span></td>
<td><span class='font-weight-bold'>Роль ИИ в работе команды</span></td>
<td><span class='font-weight-bold'>Итог для клиента</span></td>
</tr>
<tr>
<td>Test Design</td>
<td>Генерация сценариев и Gherkin как черновика</td>
<td>Сокращение фазы подготовки тестов примерно на 50%</td>
</tr>
<tr>
<td>Regression</td>
<td>Risk-based фильтрация регресса</td>
<td>Ускорение цикла тестирования (Testing Cycle Time)</td>
</tr>
<tr>
<td>Maintenance</td>
<td>Self-healing локаторов автотестов</td>
<td>Снижение затрат на поддержку тестов до 40%</td>
</tr>
<tr>
<td>Bug Analysis</td>
<td>RCA-ассистент для анализа дефектов</td>
<td>Локализация причин багов до 70% быстрее</td>
</tr>
</tbody>
</table>
</figure>
<p><!-- /wp:table --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Резюме</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>ИИ в тестировании не заменяет специалиста, а усиливает его, становясь тем самым экзоскелетом. Не нужно бездумно сокращать QA-отделы в надежде на машины, но и отказываться растить AI-augmented инженеров не стоит. Они могут работать в 10 раз быстрее и точнее классического ручного тестирования и быть главным конкурентным преимуществом. Конечно, при условии, что ИИ под контролем эксперта. И таких экспертов можно найти в ЛК.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>]]></description>
<link>https://quality-lab.ru/blog/blog-ii-v-testirovanii-gde-ispolzovat-gde-vredit/</link>
<pubDate>Wed, 11 Feb 2026 13:22:27 +0300</pubDate>
</item>
<item>
<title>Разбираемся с таймаутами в WebdriverIO</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/11hs/webdriverio/webdriverio1.jpg" mce_src="https://software-testing.ru/images/stories/library/11hs/webdriverio/webdriverio1.jpg" width="200" mce_style="float: left;" style="float: left;" />Автор:</strong> Филип Рик (Filip Hric)<br /><strong><a href="https://filiphric.com/understanding-timeouts-in-webdriverio" mce_href="https://filiphric.com/understanding-timeouts-in-webdriverio" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод</strong><strong>: </strong>Ольга Алифанова</p>
<p>Таймауты — одна из ключевых частей end-to-end тестирования UI. При тестировании пользовательских интерфейсов мы часто сталкиваемся с различными формами случайности (или кажущейся случайности) в том, как элементы появляются и взаимодействуют.</p>
<p>WebdriverIO справляется с этим с помощью команд, которые выполняются в цикле, пытаясь найти элементы или выполнить проверки, пока они либо не сработают, либо в конечном итоге не завершатся ошибкой. Можно рассматривать таймауты как верхние пределы: если нужное действие происходит в пределах таймаута, скрипт продолжает выполнение.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-automation/4451-webdriverio</link>
<pubDate>Tue, 10 Feb 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Топ-3 отечественных TMS: где вести тесты, когда привычные инструменты больше недоступны</title>
<description><![CDATA[<p><span style="color: #000000; font-family: Arial, Helvetica, Garuda, sans-serif; font-size: 12px;" mce_style="color: #000000; font-family: Arial, Helvetica, Garuda, sans-serif; font-size: 12px;">Автор: Яковлев Станислав — Team Lead в Т-Банке, телеграмм канал t.me/qa_chillout</span><br mce_bogus="1"></p>
<div xmlns="http://www.w3.org/1999/xhtml"><p>До ухода с российского рынка таких систем, как <strong>TestRail</strong>, <strong>Qase</strong>, <strong>Zephyr</strong>, острой потребности в переходе на отечественные решения не было.</p><p>Большинство российских команд пользовалось именно этими инструментами - и на то были объективные причины. Зарубежные TMS годами оттачивались на тысячах проектов по всему миру, отличались стабильностью, удобством и фактически задавали стандарт качества в управлении тестированием.</p><p>После их ухода многим командам пришлось срочно искать замену. В тот момент это оказалось непростой задачей: отечественных решений было немного, а зрелых продуктов почти не существовало.</p><p>Однако курс на импортозамещение стал стимулом для роста. За последние несколько лет появились десятки российских TMS — от простых облачных сервисов до крупных корпоративных платформ с интеграциями и удобной системой отчётности.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-tools/4476-tms</link>
<pubDate>Mon, 09 Feb 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Мы незаметно перескочили странную границу</title>
<description><![CDATA[<p class="p1">Прочитал сегодня <a href="https://www.eweek.com/news/ai-writing-code-anthropic-openai/" target="_blank" rel="noopener"><span class="s1"><b>статью</b></span></a>: инженеры из Anthropic и OpenAI говорят, что у них 100% кода пишет ИИ. Понятно, что в этом есть и маркетинг — ну а что ещё им говорить  Но статья зацепила&#8230;</p>
<p class="p1">Еще буквально недавно “ИИ помогает писать код” звучало как автокомплит и подсказки.</p>
<p class="p1">А теперь инженеры из Anthropic и OpenAI публично говорят: в их работе ИИ пишет 100% продакшн-кода:</p>
<p class="p1"><i>“For me personally it has been 100% for two+ months now, I don’t even make small edits by hand,”</i><i></i></p>
<p class="p1"><i> “I shipped 22 PRs yesterday and 27 the day before, each one 100% written by Claude.”</i><i></i></p>
<p class="p1">Со стороны OpenAI — максимально прямолинейно:</p>
<p class="p1"><i>“100%, I don’t write code anymore,”</i><i></i></p>
<p class="p1">Если код больше не дефицит — что становится дефицитом?</p>
<p class="p1"><b>1) Код дешевеет. Ясность — дорожает.</b><b></b></p>
<p class="p1">Когда “написать” почти бесплатно, получается появляется новая инфляция: инфляция сложности</p>
<p class="p1">Сами инженеры признают: ИИ может оставлять “dead code” и усложнять простую логику:</p>
<p class="p1"><i>&#171;However, the transition isn’t without “slop.” Engineers admit the AI still makes mistakes, such as leaving behind “dead code” or overcomplicating simple logic&#187;</i><i></i></p>
<p class="p1">И это, кажется, станет новой нормой: писать проще, чем удерживать систему в здравом виде.</p>
<p class="p1">А самый интересный момент — как они это лечат: ИИ проверяет ИИ (ревью агентом кода, написанного агентом):</p>
<p class="p1"><i>&#171;To combat this, Anthropic engineers now use the AI to review itself.&#187;</i><i></i></p>
<p class="p1">Кстати, это реально киллер-фича. Я сам постоянно так делаю </p>
<p class="p1"><b>2) Профессия “писать код” превращается в “рулить системой”.</b><b></b></p>
<p class="p1">Там же звучит прогноз:</p>
<p class="p1">индустрия <i>“six to twelve months away from AI handling most or all of software engineering work from start to finish”.</i><i></i></p>
<p class="p1">И тут появляется человек-оркестр, как говорят в интернетах<span class="Apple-converted-space">  </span>generalist — не “чуть-чуть обо всём”, а человек, который держит картину целиком:</p>
<p class="p1">ставит рамки:</p>
<p class="p1">&#8212; что нельзя делать, даже если “работает”</p>
<p class="p1">&#8212; принимает решения: как сделать проще и дешевле в поддержке</p>
<p class="p1">&#8212; делает результат доказуемым: тесты, мониторинг, безопасность, сценарии деградации</p>
<p class="p1">Короче: ИИ пишет детали, а человек “сшивает” разные куски работы и отвечает за смысл и последствия.</p>
<p class="p1"><b>3) Самый ценный навык будущего — не “уметь промптить”, а уметь задавать рамки.</b><b></b></p>
<p class="p1">Очень понравилась формулировка из статьи:</p>
<p class="p1"><em>“Not all of the things people learned in the past translate to coding with LLMs,”</em></p>
<p class="p1"><em>“The model can fill in the details.”</em></p>
<p class="p1">То есть детали допишет модель.</p>
<p class="p1">А наша ценность — сказать, что делать и чего точно не делать, не дать решению разрастись и сделать так, чтобы это можно было проверить (тестами, логами, метриками).</p>
<p class="p1"><b>Мой вывод</b>, глобально, я думаю ИИ никого не заменит, но люди владеющие ии, просто<span class="Apple-converted-space">  </span>вытеснят тех, кто ИИ не владеет. Прогресс не остановить.</p>
<p class="p1">Какие у вас мысли по этому поводу? Вы же на всякий случай уважительно общайтесь с ИИ? </p>]]></description>
<link>http://prostoitblog.ru/my-nezametno-pereskochili-strannuyu-granitsu/</link>
<pubDate>Wed, 04 Feb 2026 22:48:38 +0300</pubDate>
</item>
<item>
<title>Почему документация – это важно: пять причин</title>
<description><![CDATA[<p><strong><img src="https://software-testing.ru/images/stories/library/11hs/documentation.png" mce_src="https://software-testing.ru/images/stories/library/11hs/documentation.png" width="100" mce_style="float: left;" style="float: left;" />Автор:</strong> Кристин Джеквони (Kristin Jackvony)<br /><strong><a href="https://thinkingtester.com/five-reasons-why-documentation-is-important/" mce_href="https://thinkingtester.com/five-reasons-why-documentation-is-important/" target="_blank">Оригинал статьи</a><br /></strong><strong>Перевод: </strong>Ольга Алифанова</p>
<p>После многих лет работы в тестировании программного обеспечения можно с уверенностью сказать: почти никто не любит писать документацию. Даже люди, которым нравится писать (как мне), могут полагать, что есть дела и поинтереснее – например, создание тест-планов или автоматизации тестов. Но документация крайне важна! В этой статье я расскажу о пяти причинах этого, а также поделюсь пятью стратегиями, которые помогут вашей команде или компании иметь качественную документацию.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-for-beginners/4448-ive-reasons-why-documentation-is-important</link>
<pubDate>Tue, 03 Feb 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Бережливый 2026, или как баги снижают продажи</title>
<description><![CDATA[<p><!-- wp:paragraph --></p>
<p>В 2026 году в ритейле почти не осталось пространства для ошибок. Не то чтобы все всё исправили  и стали идеальными, просто теперь любая ошибка сразу стоит денег. </p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29152,"width":"380px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/0cfcbe0e-37cb-4e75-bf14-c4e75de985f9-Photoroom.png" alt="kak-bagi-snizhayut-prodazhi-v-riteile-2026" class="wp-image-29152" style="width:380px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/0cfcbe0e-37cb-4e75-bf14-c4e75de985f9-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/0cfcbe0e-37cb-4e75-bf14-c4e75de985f9-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/0cfcbe0e-37cb-4e75-bf14-c4e75de985f9-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/0cfcbe0e-37cb-4e75-bf14-c4e75de985f9-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Трафик дорогой. Клиент нетерпеливый. Конкурент в одном клике. Если сайт тупит, приложение зависает или корзина внезапно из заполненной превращается в пустую, человек (ваш пользователь) не будет разбираться, что там не так и кто виноват. Мы сейчас стали очень нетерпеливыми, не так ли? Поэтому любой из нас, как юзер в такой ситуации машинально уходит искать более рабочий вариант. Ну и, признайтесь, скорее всего не вернется.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>Маркетинг в этой точке обычно делает все правильно. Кампании запущены, CJM<sup data-fn="1b476fa2-ce6d-4d79-83bb-4e08a05b02e9" class="fn"><a href="https://quality-lab.ru#1b476fa2-ce6d-4d79-83bb-4e08a05b02e9" id="1b476fa2-ce6d-4d79-83bb-4e08a05b02e9-link">1</a></sup> вылизан, персонализация настроена и даже (спасибо большое!) бюджеты согласованы, а продажи все равно проседают. И начинается знакомый круг выяснения причин: рынок сложный, аудитория перегрета, конверсия падает у всех.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>На практике же в ритейле, как и в другой области, это означает с вероятностью 99%, что где-то в критическом месте продукт просто не работает так, как должен.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Баг в оплате. Ошибка в рекомендациях. Рассинхрон баз данных. Медленная загрузка карточки товара или непрогруженное изображение… Каждый из этих багов тянет за собой последствия и это очень даже конкретные, осязаемые деньги, которые бизнес не заработал. Если раньше можно было компенсировать плохой UX дополнительным бюджетом на рекламу, то сейчас эта схема не работает. Маркетинг гребет изо всех сил, а лодка все равно тонет. Потому что в трюме брешь.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Проблема в том, что эти финансовые (и репутационные) потери редко выглядят как «мы потеряли миллион из-за бага». Они размазываются по воронке – в брошенных корзинах, возвратах, росте нагрузки на техподдержку и падении LTV<sup data-fn="a54766e6-7131-4f04-aed2-39b3a25d0924" class="fn"><a href="https://quality-lab.ru#a54766e6-7131-4f04-aed2-39b3a25d0924" id="a54766e6-7131-4f04-aed2-39b3a25d0924-link">2</a></sup>, которое сложно объяснить одним фактором.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Тут часто начинается самое &#171;интересное&#187; – споры команд, где конкретно проблема: в маркетинге, продукте или рынке. И пока этот пинг-понг продолжается, деньги  и дальше утекают через технические дыры.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Почему именно в ритейле баг = деньги</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Потому что это самая честная цифровая среда. Здесь путь пользователя короткий (и беспощадный):</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted --></p>
<pre class="wp-block-preformatted">зашел → выбрал → оплатил.</pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph --></p>
<p>Или не оплатил. Третьего не дано.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>В <a href="https://quality-lab.ru/blog/saas-kak-uvelichit-stabilnost-i-sokratit-ottok/" target="_blank" rel="noreferrer noopener">SaaS</a> пользователь может простить сбой, вернуться завтра или написать в поддержку. В ритейле такого не будет. Если что-то не работает, ваш клиент уйдет в другой интернет-магазин, к конкуренту, который, к слову, уже у него в соседней вкладке. Поэтому связь <span class='font-weight-bold'>«баг = потеря денег»</span> здесь самая короткая и наглядная. Ошибка в коде проявляется не через квартал в отчетах. Видели брошенную корзину перед кассой в супермаркете? Вот это оно.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Где именно интернет-магазин теряет деньги в 2026 году</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Разберем самые болезненные точки, которые напрямую бьют по продажам.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Ошибки в AI-рекомендациях</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Сегодня значительная часть покупок подбирается через AI-ассистентов и рекомендательные движки. Если данные в системе кривые, AI начинает советовать нерелевант. Жителю юга предлагают лыжи летом, а постоянному клиенту – товары «как всем». В итоге конверсия падает на десятки процентов. И качество товара не при чем, просто система промахнулась.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Фризы и ошибки в чек-ауте</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Экран оплаты – самый дорогой экран не только в ритейле. Сложно представить жизнь в 2026  без цифровых кошельков, BNPL (формат оплаты «взял сейчас, заплатил потом», который помогает клиенту решиться на покупку), быстрые платежи. Поэтому любой баг в интеграции платежного шлюза чреват 100% потерей продажи в моменте.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Пользователь попробует еще пару раз, психанёт и либо откажется от покупки совсем, либо купит не у вас.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Рассинхрон остатков/баз данных</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Классика, которая до сих пор стоит миллионы. И при этом продолжают встречаться такие кейсы. Клиент оплатил товар в приложении, а на складе его нет. Да еще часто об этом становится известно не сразу, пока покупку можно отменить без комиссии. И получаем раздраженного пользователя, который вынужден оформлять возврат, платить комиссию. А потом он еще пишет вам негатив в отзывах, ставит низкую оценку в App Store и Google Play. Здравствуй, потеря LTV.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Формально баг один. Фактически серия убытков.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Баги в мобильном приложении под </span><a href="https://quality-lab.ru/blog/testirovanie-pod-klyuch-proveryaem-produkt-za-6-shagov-ekonomim-vremya-i-byudzhet/" target="_blank" rel="noreferrer noopener"><span class='font-weight-bold'>нагрузкой</span></a></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><a href="https://quality-lab.ru/blog/black-friday-kak-tochka-rosta-kak-ecommerce-proektu-prevratit-pikovuyu-nagruzku-iz-ugrozy-v-triumf/" target="_blank" rel="noreferrer noopener">Распродажа</a>, инфлюенсеры, пуши…дальше приложение &#171;падает&#187;. Маркетинг свою работу сделал. Деньги в привлечение вложены, но система не выдержала пик. И весь эффект кампании обнуляется за часы.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Ошибки данных и аналитики</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Одна из самых недооцененных проблем.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Фича «не зашла», конверсия упала, продуктовые гипотезы закрываются. А потом выясняется, что у части пользователей экран просто не прогружался или событие не трекалось. Решения принимаются на основе искаженной картины, обеспечивая стратегический риск.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Скрытые потери, которые не видно в отчетах</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Мы приходим к тому, что самое опасное в багах не только прямые потери, но и те, которые бизнес даже не считает.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Слив рекламного бюджета</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Вы платите за клик, приводите пользователя, а он уходит из-за технической ошибки.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>CAC уже потрачен. Повторно вы платите за ретаргетинг. Наличие QA в этом месте позволяет оптимизировать конверсию без увеличения рекламных расходов.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Рост нагрузки на поддержку и разработку</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Один баг в продакшене порождает сотни обращений в ТП. Там спецы перегружены, разработчикам летит сразу куча задач на &#171;пофиксить как можно скорее&#187;, поэтому до плановых руки не доходят и вы вынуждены отложить сроки релиза.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#d7eb868f"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#d7eb868f">Час аварийного фикса в разы дороже часа планового контроля качества.</pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Возвраты и логистика</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Стоит ли вам напоминать, что логистика нынче дорогая. И вот если небольшой баг в описании товара, размере, характеристиках ведет к возврату, то это не пройдет бесследно, это не &#171;нейтральная&#187; операция, а чистый убыток.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Искажение продуктовых метрик</span></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>При недостоверных данных CPO оптимизирует не то. Команда тратит месяцы на исправление «проблем», которых на самом деле нет. Цена таких решений ясна без пояснений.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Срочный ремонт дороже, чем сделать сразу хорошо</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>В кризисной ситуации часто мы ловим себя на том, что первая реакция «надо просто быстрее фиксить». Но это ловушка, ведь экстренные фиксы означают:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li>переработки,</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>&nbsp;риски новых ошибок,</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>&nbsp;нестабильные релизы,</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>&nbsp;рост техдолга.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:paragraph {"style":{"color":{"background":"#d9edc78f"}}} --></p>
<p class="has-background" style="background-color:#d9edc78f">Плановое тестирование и <a href="https://quality-lab.ru/blog/kak-prioritizaciya-problem-v-testirovanii-pomogaet-sekonomit-resursy-i-uluchshit-produkt/" target="_blank" rel="noreferrer noopener">приоритизация рисков</a> работают по-другому. Они делают бизнес-процесс предсказуемым, не замедляя его. Не нужно быть профи, чтобы понимать, что один час превентивной проверки критического сценария почти всегда дешевле десяти часов аварийной разработки после релиза.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column --></p>
<div class="wp-block-column"><!-- wp:image {"id":29156,"width":"272px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/994b1509-6730-4325-aa08-d52c72b20ef0-Photoroom.png" alt="kak-bagi-snizhayut-prodazhi-v-riteile-2026" class="wp-image-29156" style="width:272px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/994b1509-6730-4325-aa08-d52c72b20ef0-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/994b1509-6730-4325-aa08-d52c72b20ef0-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/994b1509-6730-4325-aa08-d52c72b20ef0-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/994b1509-6730-4325-aa08-d52c72b20ef0-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">QA-2026 и есть ваш антикризисный инструмент</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Правда, здесь важно правильно расставить акценты. QA не значит тестировать все подряд, не предлагает замедлять релизы или нанимать еще людей.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>А что значит? Борьбу с кризисом и выход на новый уровень. Мы в ЛК, например, как современные QA:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li>фокусируемся на сценариях, которые влияют на деньги</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>защищаем выручку и воронки</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>снижаем количество аварийных ситуаций</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>обеспечиваем стабильность в условиях ограниченных ресурсов</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Выигрывает не тот, кто выпускает больше фич, а тот, у кого ключевые функции стабильно работают в любой нагрузке.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Что делать бизнесу</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Если конверсия падает, а маркетинг и продукт уже выжали максимум из всего, что им доступно, то имеет смысл посмотреть глубже. Обходя данные о количестве тестов и инструментах, взглянуть на то, где именно вы теряете деньги из-за технических сбоев.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} --></p>
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":29153,"sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/02/2f340426-6236-4cde-94e1-04212ab3958d-Photoroom.png" alt="kak-bagi-snizhayut-prodazhi-v-riteile-2026" class="wp-image-29153" srcset="https://quality-lab.ru/wp-content/uploads/2026/02/2f340426-6236-4cde-94e1-04212ab3958d-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/02/2f340426-6236-4cde-94e1-04212ab3958d-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/02/2f340426-6236-4cde-94e1-04212ab3958d-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/02/2f340426-6236-4cde-94e1-04212ab3958d-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column {"width":"66.66%"} --></p>
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:paragraph --></p>
<p>Хорошая точка входа – аудит критических пользовательских путей и расчет упущенной выгоды. Он часто показывает больше, чем месяцы споров между маркетингом и продуктом.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Ясно, что в 2026 году граница между продуктом, маркетингом и качеством фактически исчезла. Если код работает нестабильно, бизнес-показатели тоже будут нестабильны.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>И это уже не вопрос технологий, а вопрос выживания.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph {"style":{"color":{"background":"#dfecc6"}}} --></p>
<p class="has-background" style="background-color:#dfecc6">Помните, что сказал Генри Форд: &#171;Успешные люди вырываются вперед, используя то время, которые другие тратят впустую&#187;</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:footnotes /--></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>]]></description>
<link>https://quality-lab.ru/blog/kak-bagi-snizhayut-prodazhi-v-riteile-2026/</link>
<pubDate>Tue, 03 Feb 2026 15:45:15 +0300</pubDate>
</item>
<item>
<title>Gradle для QA-инженера</title>
<description><![CDATA[<p>Автор: Волтов Николай</p><p><span style="font-family: Arial, Helvetica, sans-serif; font-size: 1em; font-weight: bold;" mce_style="font-family: Arial, Helvetica, sans-serif; font-size: 1em; font-weight: bold;">Введение</span></p><p>Если вы автоматизируете на Java или Kotlin, вы не могли не слышать о Gradle. Одни его хвалят за скорость и гибкость, другие ругают за сложность конфигурации. Что же это за инструмент и почему всё больше проектов переходят на него с <a href="https://maven.apache.org" mce_href="https://maven.apache.org" rel="noopener noreferrer nofollow" target="_blank">Maven</a>? В этой статье мы разберем Gradle, чтобы вы могли уверенно использовать его в своих проектах для автоматизации тестирования, а так же спокойно ответить на вопросы на собеседовании.</p>]]></description>
<link>https://www.software-testing.ru/library/testing/testing-tools/4474-gradle-qa-</link>
<pubDate>Mon, 02 Feb 2026 23:00:00 +0300</pubDate>
</item>
<item>
<title>Автоматизация слайдеров и авторизации, фреймы тестирования, Deep Links и кэширование, OWASP-уязвимости, тест-решения от Т-Банка: самые интересные новости тестирования за декабрь-январь</title>
<description><![CDATA[<p>Опубликован выпуск рассылки за декабрь-январь.</p>
<p>В выпуске собраны ссылки на новые статьи, слайдкасты, отобраны самые интересные публикации&nbsp;<a href="http://www.software-testing.ru/blogs" mce_href="http://www.software-testing.ru/blogs">в ленте блогов</a> и темы&nbsp;<a href="http://www.software-testing.ru/forum/" mce_href="http://www.software-testing.ru/forum/">на форуме</a>.</p>
<p><strong>Содержание рассылки доступно&nbsp;<a href="https://www.software-testing.ru/component/acymailing/archive/view/listid-1-newsletter/mailid-736" mce_href="https://www.software-testing.ru/component/acymailing/archive/view/listid-1-newsletter/mailid-736" target="_blank" style="">по ссылке.</a></strong></p>
<p><a href="http://www.software-testing.ru/component/acymailing/user/subscribe" mce_href="http://www.software-testing.ru/component/acymailing/user/subscribe">Подписаться на рассылку</a></p>]]></description>
<link>https://www.software-testing.ru/news/4479-mail-dec25</link>
<pubDate>Mon, 02 Feb 2026 10:48:27 +0300</pubDate>
</item>
<item>
<title>Книга «SQL. Курс молодого бойца» уже в продаже!</title>
<description><![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-IsMH29jITJ8O-n0kXFVVHjaZQPRjzVJ-0iuBJUTQaItamgQNNhnhcDHAS6Ry7bMzEXSLK6IZAs1zM_9qTEcjaOKKtVp1o72jLZV82zzMNxO37HF8xitlb338V46sCR40FsGt0nrlKzrsLDKs6Rvopgo_2CFKj07bm293zqpkb-zWIs-yHhgoVuXI3d8/s1280/photo_2026-01-29_14-50-02.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="830" data-original-width="1280" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-IsMH29jITJ8O-n0kXFVVHjaZQPRjzVJ-0iuBJUTQaItamgQNNhnhcDHAS6Ry7bMzEXSLK6IZAs1zM_9qTEcjaOKKtVp1o72jLZV82zzMNxO37HF8xitlb338V46sCR40FsGt0nrlKzrsLDKs6Rvopgo_2CFKj07bm293zqpkb-zWIs-yHhgoVuXI3d8/s320/photo_2026-01-29_14-50-02.jpg" width="320" /></a></div><br /><p></p><p><b style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">Описание книги</b><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #333333; font-size: 14.85px;">&nbsp;—&nbsp;</span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="color: #336699;"><span style="font-size: 14.85px;"><a href="https://testbase.ru/books/sql">https://testbase.ru/books/sql</a></span></span></p><p style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><b>Как заказать:&nbsp;</b><span face="&quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif" style="background-color: transparent; color: #444444; font-size: 13px;">В издательстве:&nbsp;</span><a data-mce-href="https://bhv.ru/product/sql-kurs-molodogo-bojtsa/" href="https://bhv.ru/product/sql-kurs-molodogo-bojtsa/" style="background: 0px 0px transparent; color: #0077dd; cursor: pointer; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-decoration-line: none;">https://bhv.ru/product/sql-kurs-molodogo-bojtsa/</a></p><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;">Плюс скоро будет на OZON и других площадках, ищите по названию)</p><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;"><br /></p><p style="margin: 15px 0px;"><span style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px;">Сегодня мне написал издатель с радостной новостью — моя четвертая книга уже вышла в продажу! Пока только на сайте издателя, но скоро и до маркетплейсов доберется! Ура!)))</span></p><p style="margin: 15px 0px;"><span style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px;"><br /></span></p><h3 style="margin: 15px 0px; text-align: left;"><span style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif;"><span style="font-size: medium;">О чем книга</span></span></h3><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;">SQL — язык общения с базой данных, в которой хранится вся информация вашего приложения. Данные пользователей, их заказов, или что-то другое.</p><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;">Зная SQL, можно посмотреть, что именно лежит в базе. Это нужно поддержке или тестированию для локализации проблемы, разработчику для отладки, а аналитику для анализа данных.</p><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;">Именно этому мы и будем учиться! С картинками котиков, которые объясняют суть, мы разберемся в том, как правильно составлять запросы. И на выходе вы будете уметь:</p><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;">1. Писать простые select-ы (из одной таблицы)</p><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;">2. Джойнить таблицы (объединять данных из двух таблиц)</p><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;">3. Изменять данные в БД</p><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;"><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #333333; font-size: 14.85px;"></span></p><p style="color: #444444; font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 13px; margin: 15px 0px;">В конце каждой главы вы найдете задания для самопроверки. Используйте книгу как тренажер во время чтения, а потом возвращайтесь к ней как к справочнику!</p>]]></description>
<link>http://okiseleva.blogspot.com/2026/01/sql.html</link>
<pubDate>Thu, 29 Jan 2026 20:05:00 +0300</pubDate>
</item>
<item>
<title>Как стратегический подход к QA в iGaming защищает ваш P&amp;L</title>
<description><![CDATA[<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Когда цена ошибки — миллионы</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>В мире iGaming и гемблинга ставки высоки не только для игроков. Для бизнеса цена одного пропущенного бага может измеряться миллионами долларов упущенной прибыли, регуляторными штрафами и, что еще хуже, — невосполнимой потерей доверия пользователей.<sup> </sup>Платформа «легла» во время финала крупного спортивного события? Это прямой убыток.<sup> </sup>Уязвимость в логике бонусов привела к их неконтролируемому начислению? Это финансовая дыра и репутационная катастрофа.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Боль бизнеса в этой сфере ощутима и многогранна. Технические директора и вице-президенты по инжинирингу сталкиваются с необходимостью обеспечивать стабильность систем под колоссальными пиковыми нагрузками. Продакт-менеджеры борются за удержание игроков, для которых любой лаг или сбой — повод уйти к конкуренту. Руководители по информационной безопасности отражают атаки, ставшие в гемблинг-индустрии обыденностью.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#eccfcf"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#eccfcf"><span class='font-weight-bold'>В этих условиях обеспечение качества QA перестает быть просто этапом в цикле разработки. Оно трансформируется в ключевую бизнес-дисциплину по управлению рисками. </span>Мы написали практическую статью для руководителей, которое покажет, как выстроить QA-процесс, способный не просто находить баги, а защищать доходы, репутацию и саму лицензию на ведение бизнеса.</pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Рынок, тренды и цена риска</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} --></p>
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":29136,"width":"298px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/01/a3ae0903-c486-4068-8b3f-42eef4b0a53d-Photoroom.png" alt="kak-strategicheskiy-podkhod-k-qa-v-igaming-zashchishchaet-vash-pl" class="wp-image-29136" style="width:298px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/01/a3ae0903-c486-4068-8b3f-42eef4b0a53d-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/01/a3ae0903-c486-4068-8b3f-42eef4b0a53d-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/01/a3ae0903-c486-4068-8b3f-42eef4b0a53d-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/01/a3ae0903-c486-4068-8b3f-42eef4b0a53d-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column {"width":"66.66%"} --></p>
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:paragraph --></p>
<p>Рынок гемблинга в России демонстрирует взрывной рост. По данным на 2024 год, только объем букмекерского рынка вырос на 45,2%, достигнув 5,9 трлн рублей, а объем принятых ставок составил 1,7 трлн рублей. Общие траты российских геймеров в играх превысили 200 млрд рублей.<sup data-fn="5a255863-e431-47f5-b7b5-adf010e471c5" class="fn"><a href="https://quality-lab.ru#5a255863-e431-47f5-b7b5-adf010e471c5" id="5a255863-e431-47f5-b7b5-adf010e471c5-link">1</a></sup> При этом, по оценкам экспертов, объем «серого» рынка онлайн-казино составляет еще около 100 млрд рублей, с прогнозом роста до 150 млрд к концу 2025 года. Эти цифры говорят о колоссальном потенциале, но и о столь же колоссальных рисках.</p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:paragraph --></p>
<p>На этом фоне индустрия сталкивается с несколькими ключевыми вызовами и трендами, которые напрямую влияют на стратегию QA:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Ужесточение регулирования. </span>Регуляторы по всему миру, включая Россию, вводят все более строгие требования к честности игры, защите данных и ответственной игре (Responsible Gaming). Несоответствие грозит не только штрафами, но и отзывом лицензии.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Технологическая гонка. </span>Интеграция криптовалют, AI для персонализации игрового опыта, VR/AR — все это усложняет архитектуру платформ и создает новые векторы для потенциальных сбоев и уязвимостей.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Киберугрозы как норма. </span>Гемблинг-операторы — приоритетная цель для хакеров. Недавние атаки на гигантов индустрии, таких как MGM и Caesars, показали, что даже минутный сбой в IT-системе может привести к убыткам в $100 млн. Средняя стоимость утечки данных в мире в 2024 году достигла рекордных $4,9 млн , а в России средний ущерб от одного инцидента оценивается в 11,5 млн рублей.</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Каждый из этих трендов — это прямое указание для QA-департамента. Тестирование должно выходить за рамки проверки функционала и покрывать соответствие регуляторным нормам, безопасность на уровне архитектуры и производительность в условиях экстремальных нагрузок.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">От теории к реальным действиям</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Вот несколько проверенных практик и инструментов как техническому руководителю внедрить QA-процесс.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Лучшие практики и конкретные советы</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Риск-ориентированное тестирование (Risk-Based Testing).</span> Вместо того чтобы пытаться протестировать все, сфокусируйтесь на областях с наибольшим бизнес-риском. Приоритизируйте тест-кейсы, связанные с платежными шлюзами, начислением бонусов, верификацией RNG (генератора случайных чисел) и соблюдением регуляторных требований (например, геолокация, лимиты для игроков).</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>«Сдвиг влево» (Shift-Left Testing).</span> Интегрируйте QA в самые ранние этапы разработки. Требования регуляторов (например, по стандарту GLI-19) должны рассматриваться не как чек-лист перед релизом, а как нефункциональные требования для разработчиков с самого начала проекта. Это на порядок дешевле, чем исправлять архитектурные ошибки перед запуском.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Интегрированное тестирование безопасности.</span> Не выделяйте безопасность в отдельный, изолированный процесс. Внедряйте инструменты динамического анализа (DAST), такие как open-source решение OWASP ZAP, прямо в CI/CD пайплайн. Это позволяет автоматически сканировать каждое изменение кода на наличие базовых уязвимостей.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Реалистичное нагрузочное тестирование. </span>Не тестируйте «среднюю» нагрузку. Моделируйте пиковые сценарии: массовый логин перед началом топового матча, шквал ставок в лайве, одновременный расчет выигрышей тысячам пользователей.<sup> </sup>Используйте open-source инструменты вроде <span class='font-weight-bold'>k6</span> или <span class='font-weight-bold'>Gatling</span>, которые позволяют писать тесты производительности как код и легко интегрировать их в DevOps-процессы.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Уроки атаки на Caesars</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column {"width":"66.66%"} --></p>
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:preformatted {"style":{"color":{"background":"#f7f38d8f"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#f7f38d8f">В 2023 году хакерская группа Scattered Spider атаковала Caesars Entertainment. Примечательно, что точкой входа стал не внутренний сотрудник, <em>а сторонний IT-вендор.</em> Это кейс, демонстрирующий, что зона ответственности QA не заканчивается на границах вашего кода. Необходимо внедрять контрактное тестирование API и строгие проверки безопасности для всех сторонних интеграций, будь то платежные шлюзы, провайдеры KYC или сервисы геолокации.</pre>
<p><!-- /wp:preformatted --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column {"width":"33.33%"} --></p>
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":29137,"width":"360px","height":"auto","sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/01/fec3a2f1-49c9-4e7f-987b-d718ffa2b3ab-Photoroom.png" alt="kak-strategicheskiy-podkhod-k-qa-v-igaming-zashchishchaet-vash-pl/" class="wp-image-29137" style="width:360px;height:auto" srcset="https://quality-lab.ru/wp-content/uploads/2026/01/fec3a2f1-49c9-4e7f-987b-d718ffa2b3ab-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/01/fec3a2f1-49c9-4e7f-987b-d718ffa2b3ab-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/01/fec3a2f1-49c9-4e7f-987b-d718ffa2b3ab-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/01/fec3a2f1-49c9-4e7f-987b-d718ffa2b3ab-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Как делать не надо</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Многие компании, особенно на стадии быстрого роста, совершают типичные ошибки в построении QA, которые в условиях iGaming становятся критическими.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Ошибка №1. QA как «последний рубеж».</span> Тестирование начинается за неделю до релиза.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Последствия:</span> обнаружение архитектурных проблем, исправление которых требует переноса релиза на месяцы. Панические «хотфиксы», которые создают новые баги. Прямой результат — срыв бизнес-планов и демотивированная команда.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Ошибка №2. Изолированные команды.</span> Функциональное тестирование, нагрузочное и security-тестирование существуют в разных мирах.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Последствия:</span> функциональный баг в логике бонусов рассматривается как минорный, в то время как для security-команды это критическая уязвимость для фрода. Отсутствие единого взгляда на продукт приводит к неверной приоритизации и пропуску комплексных рисков.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Ошибка №3. Игнорирование «нефункционалки».</span> Основной фокус — на том, «работает ли кнопка», а не на том, как система ведет себя под нагрузкой или соответствует ли она законам конкретной юрисдикции.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p><span class='font-weight-bold'>Последствия:</span> платформа идеально работает на 100 пользователях и падает на 10000. Продукт запускается на новом рынке и тут же блокируется регулятором из-за несоответствия требованиям к хранению данных или функциям ответственной игры.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:preformatted {"style":{"color":{"background":"#d7eb868f"}}} --></p>
<pre class="wp-block-preformatted has-background" style="background-color:#d7eb868f"><span class='font-weight-bold'>Читайте наш <a href="https://quality-lab.ru/wp-content/uploads/2025/09/Guide-QA-Betting.pdf" data-type="link" data-id="https://quality-lab.ru/wp-content/uploads/2025/09/Guide-QA-Betting.pdf" target="_blank" rel="noreferrer noopener">гайд по тестированию платформ для ставок на спорт</a> — о том, как выстроить надёжный QA-процесс, защитить маржу и обеспечить стабильную работу продукта.</span></pre>
<p><!-- /wp:preformatted --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Построение комплексной QA-стратегии</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Правильный подход к QA в iGaming — это создание интегрированной системы управления качеством, которая пронизывает весь жизненный цикл продукта и сфокусирована на бизнес-рисках.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Создание единой матрицы рисков.</span> Оценивайте любой баг или фичу не по одному, а по четырем векторам: финансовый риск, регуляторный риск, риск безопасности и репутационный риск. Это позволяет всей команде (разработчикам, QA, продактам) говорить на одном языке и правильно приоритизировать задачи.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>QA как центр экспертизы, а не «отдел поиска багов».</span> QA-лид должен быть не просто менеджером тестировщиков, а экспертом по регуляторным требованиям (GLI, GDPR, локальные законы), современным векторам атак (OWASP Top 10) и методологиям тестирования производительности.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Автоматизация как фундамент.</span> Создайте многоуровневую пирамиду автоматизации, от быстрых юнит-тестов до комплексных end-to-end сценариев, которые проверяют ключевые пользовательские пути. Интегрируйте сканеры безопасности и тесты производительности в CI/CD.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Метрики, понятные бизнесу.</span> Откажитесь от «метрик тщеславия» вроде «количества выполненных тестов». Вместо этого отслеживайте и демонстрируйте руководству показатели, напрямую связанные с бизнес-KPI:</li>
<p><!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Defect Leakage Rate (коэффициент «утечки» дефектов). </span>Как QA-процесс влияет на <span class='font-weight-bold'>Churn Rate</span> (отток игроков).</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>Test Automation Coverage (покрытие автотестами). </span>Как автоматизация влияет на <span class='font-weight-bold'>Time to Market</span> (скорость вывода новых фич).</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><span class='font-weight-bold'>MTTR (среднее время устранения критического дефекта). </span>Как скорость реакции команды влияет на <span class='font-weight-bold'>Player Lifetime Value (LTV)</span>.</li>
<p><!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:columns --></p>
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} --></p>
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":29135,"sizeSlug":"full","linkDestination":"none"} --></p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://quality-lab.ru/wp-content/uploads/2026/01/98617f9d-eed1-42f1-8a3e-80914ae91f88-Photoroom.png" alt="98617f9d-eed1-42f1-8a3e-80914ae91f88-Photoroom" class="wp-image-29135" srcset="https://quality-lab.ru/wp-content/uploads/2026/01/98617f9d-eed1-42f1-8a3e-80914ae91f88-Photoroom.png 1024w, https://quality-lab.ru/wp-content/uploads/2026/01/98617f9d-eed1-42f1-8a3e-80914ae91f88-Photoroom-300x300.png 300w, https://quality-lab.ru/wp-content/uploads/2026/01/98617f9d-eed1-42f1-8a3e-80914ae91f88-Photoroom-150x150.png 150w, https://quality-lab.ru/wp-content/uploads/2026/01/98617f9d-eed1-42f1-8a3e-80914ae91f88-Photoroom-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><!-- /wp:image --></div>
<p><!-- /wp:column --></p>
<p><!-- wp:column {"width":"66.66%"} --></p>
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:paragraph --></p>
<p>Построение такой системы требует глубокой и узкоспециализированной экспертизы. Часто попытка вырастить такую команду внутри с нуля оказывается дольше и дороже, чем привлечение внешнего партнера, который уже обладает необходимым опытом, готовыми фреймворками и пониманием специфики iGaming-индустрии. Для помощи в выборе правильных инструментов и оценки текущих процессов вы можете обратиться к нам. </p>
<p><!-- /wp:paragraph --></div>
<p><!-- /wp:column --></div>
<p><!-- /wp:columns --></p>
<p><!-- wp:shortcode --></p>
<p><!-- /wp:shortcode --></p>
<p><!-- wp:footnotes /--></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>]]></description>
<link>https://quality-lab.ru/blog/kak-strategicheskiy-podkhod-k-qa-v-igaming-zashchishchaet-vash-pl/</link>
<pubDate>Thu, 29 Jan 2026 12:12:03 +0300</pubDate>
</item>
<item>
<title>Перестать лайкать лайки</title>
<description><![CDATA[<p>Лет сто назад меня <del>засосала опасная трясина</del> затрясло от того, насколько я стал зависимым от Facebook. Прям-трям постоянно <em>очень</em> было нужно посмотреть на лайки, дизлайки (тогда ещё были) и комментарии. Стало скучно — FB. Стало тревожно — FB. Стало весело — FB, всем сообщить…</p>
<p><strong>Удалил FB с телефона</strong>. Ну, такоэ, он же через браузер доступен…</p>
<p>В Firefox на страницах FB через адблок <strong>спрятал все кнопки типа «лайк»</strong>. Вместо тыцанья лайков можно писать комментарии. Вскоре понял, что и комментарии особо не нужны, и всё стало восприниматься более отстраненно — прочитал и прочитал, нет нужды на всё реагировать.</p>
<p><span id="more-36713"></span></p>
<p><strong>Перевел все записи в режим «для друзей»</strong>. Со временем вообще перехотелось что-то туда писать — исчезли все факторы «социального одобрения», реально полегчало.</p>
<p><strong>Стал делать записи на FB в «заметках»</strong>, местами даже ценные (техника проезда серпантинов на машине, например), просто потому, что там сохранялась хронология записей. Сегодня все те «заметки» с FB исчезли — от спасибо, мрази…</p>
<p>Самой жуткой особенностью FB всегда была абсолютная невозможность смотреть записи в хронологическом порядке, даже в своём аккаунте. Хайнлайн про это всё целый рассказ написал <strong data-start="18" data-end="27">«<a href="https://1.librebook.me/they/vol1/1">Они</a>»</strong> (<em data-start="29" data-end="35">They</em>, 1939) — человек находится в дурке, и он уверен в том, что мир неправильный, что им управляют какие-то «кукловоды», а его уверяют в обратном. Но однажды шел сильный дождь, и человек (непонятно почему) отодвинул штору на окне, выходящем на тыльную сторону дома:</p>
<blockquote><p>Очень сильный дождь шел на фасадной стороне, а здесь, с этого окна, погода была прекрасной, солнечной и никакого дождя…</p></blockquote>
<p>И он пытался это всё объяснить Элис, своей жене, а она его уверяла в том, что ему просто показалось… А потом:</p>
<blockquote><p>Существо, которое он знал под именем Элис, не меняя своего облика вошло в комнату, где все они собрались.</p>
<p>[…]</p>
<p>— …И наша программа потерпела поражение из-за того, что Вы не обеспечили тогда дождь не только с фасада, но и с тыльной стороны его дома. Впредь работайте более тщательно над выбором средств.</p></blockquote>
<p>Порядок в рассуждениях приходит от последовательности. Если последовательность убрать, рассуждение начнёт перескакивать с десятое на триста восемьдесят седьмое (почему бы и нет?) и обратно на — на что? На десятое? Нет, ведь в этом окружении нет последовательности. Вместо «десятого» посмотри на «семь тысяч двадцать шестое». Why, кагбэ, not? Нелогично, но логично — просто неочевидно.</p>
<p>Я ж не просто перестал кликать по лайкам на FB, а затеял громадное исследование о том, как и почему какие-то записи появляются. И даже научная гипотеза была — мол, алгоритмы считывают, какой контент ты отмечаешь лайками, и формирует тебе ленту записей под твои реакции. Вероятно, полный отказ от лайков приведёт к тому, что лента придёт в логический порядок. И — ничего, бляха, не поменялось, неведома шняга в бэкграунде делает всё, что считает нужным, и единственный способ поменять её поведение — отказаться от её общества.</p>
<p><strong>Стал</strong> <del>ходить в спортзал</del> <strong>смотреть многочасовые записи аварий на Youtube</strong>. Отказаться от отвлечения невозможно, но просмотр этого контента хотя бы было полезным — чем больше аварий ты «видел», тем больше шансов их распознать задолго до происшествия (большинство происходят из-за неверных предположений, потому откровенная глупость, и только после чисто технические причины).</p>
<p>К чему это я всё… Понятно, что невозможно просто перестать отвлекаться на что-то. Не будет FB и Youtube — будешь упорно считать муравьёв в муравейнике. Сегодня я на Facebook я вообще перестал ходить, и видео с авариями смотрю редко, но накатило неприятное ощущение о том, что я всё равно много зависаю в бездне бессмысленного в других источниках. Как-то сразу пришло и решение о том, что надо перестать реагировать, надо замедлиться:</p>
<ul>
<li>Нигде и никак не трогать кнопку like. Их даже прятать не пришлось, они как-то очень просто игнорируются, вероятно, помог когдатошний опыт насильного скрытия лайков в браузере. А никто и не заметит, что я ничего не лайкаю, быгыг, так что…</li>
<li>Твиттер — включил режим «З<span class="css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3">ащитить посты», в нём все записи </span><span class="css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3">видны только уже существующим читателям. Комментировать под другими записями можно, но это увидит почти никто, исчезает социальное взаимодействие.</span></li>
<li>Threads — то же замое. Подзамочность ограничивает и мою возможность комментировать некоторые чужие постс, и это очень хорошо…</li>
<li>Сигналы о получении новых сообщений — подавить повсюду. Хорошо бы и дверной звонок отключить. На днях прекратил контракт про стационарный телефон, и ничего не поменялось.</li>
<li>В браузере есть расширение Enhancer for YouTube — убирает шортсы, убирает все «видео по данной теме», может убрать и комментарии. На экране осталось одно только видео, которое можно посмотреть и закрыть, ничего более. Когда в листе «Смотреть позже» собралось больше полутора тысяч видео — надо удалять, не может быть всё сразу важным и стоящим внимания. А я же ещё не разобрал каталог «Загрузки», там за много лет собралось 76 000 файлов, и не все они нужны, но какие-то важны, а какие-то просто дубли, и это всё тоже надо как-то (когда-то) рассортировать…</li>
<li>При просмотре чего-то — не запоминать и не делать вид, что всё понятно, а делать записи в бумажном блокноте, с ручкой в руке. Это помогает <del>замедлиться</del> сосредоточиться, потому что записываешь только самое важное, и пересказываешь. И смысл этого не в том, чтобы записать услышанное, а чтобы после услышанного записать своё рассуждение, а его же надо хоть как-то обдумать. Много видео таким образом не посмотришь, и это помогает замедлиться. А ещё процесс заполнения ручки дорогими чернилами медитативен, последователен, всепоглощающ, однозначен.</li>
<li>Выключать компьютеры, когда от них отходишь. Дело даже не в расходе электроэнергии, дело в принудительной смене фокуса. Надо ещё привыкнуть сразу гитары в кофры закатывать, а не перекладывать туда-сюда по комнате…</li>
<li>Смотреть старые черно-белые фильмы, в которых последовательно рассказывают какую-то историю, с прологом, монологом и эпилогом.</li>
<li>Ходить. Два кэмэ в одну сторону, и столько же обратно — без наушников, без аудиокниг, без цели.</li>
<li>И важно to embrace the boredom. Мышление в порядок можно привести только насильно и лучше делать это принудительно, но самостоятельно.</li>
</ul>]]></description>
<link>https://testitquickly.com/2026/01/25/likeuri-timpite/</link>
<pubDate>Sun, 25 Jan 2026 10:59:42 +0300</pubDate>
</item>
<item>
<title>Питер Сенге. Пятая дисциплина. Искусство и практика обучающейся организации</title>
<description><![CDATA[<p>&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuMlPICYm9a2eeeikCmBB5z9ohOKSeQEA1Mj-oDfVpxIOpfrk3AMBuwgcLxvd8B0QMMoHiSQ5Mg7B1I47uCrNTnoo1atHj8KIYvjIJCP00FHUItHvEDRl3DzGKpvZF1TxFYxhgEYuDRtSQPFaDJFzd-5D2GVSd8QSQYk0LlPc4DjInREeESXFUn7qGXOuj/s896/senge-thumb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="896" data-original-width="636" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuMlPICYm9a2eeeikCmBB5z9ohOKSeQEA1Mj-oDfVpxIOpfrk3AMBuwgcLxvd8B0QMMoHiSQ5Mg7B1I47uCrNTnoo1atHj8KIYvjIJCP00FHUItHvEDRl3DzGKpvZF1TxFYxhgEYuDRtSQPFaDJFzd-5D2GVSd8QSQYk0LlPc4DjInREeESXFUn7qGXOuj/w284-h400/senge-thumb.png" width="284" /></a></div>Отдаю очередной должок 10-летней давности - что обещал и планировал прочитать, но долго прокрастинировал.<br />Это не стеб. это стратегия - действительно хорошая книга с годами становится только лучше, получая кучу отзывов от тех кто прочитал раньше.&nbsp;<br /><br /><br /><br />Книга наверное и была прорывной в 1990 году , но спустя 36 лет это... все еще так.&nbsp;<br />Книга так себе переведена на русский язык, но смысл сохранился.<br />Принимая во внимание то, как изменилась реальность функционирования бизнеса с 1990 года часть утверждений и примеров приводимых в книге выглядит куцевато.&nbsp;<br /><br /><p></p><p>Системное мышление на уровне организации позволяет проводить действительно большие изменения в организации, но требует пререквизитов, которые собственно Питер Сенге и описал.<br />От себя отмечу что 5 дисциплин обучающейся организации не кажутся мне чем-то прям совсем универсальным или являются исчерпывающим списком того, что в подобного рода организации должно быть. Скорее это тот минимальный базис ниже которого опуститься без последствий нельзя.&nbsp;</p><p>Дисциплины:<br /></p><div xmind-vk-document-fragment-id="1769004387186-4153"><ul><li><p>личное совершенствование </p></li><li><p>ментальные модели</p></li><li><p>формирование общего видения </p></li><li><p>командное обучение</p></li><li><p>системное мышление</p></li></ul>&nbsp;<br />Стоит сказать, что по каждой из этих дисциплни автор проходится с разной степенью глубины, и это вот как раз снижает оценку данному труду.&nbsp;</div><div xmind-vk-document-fragment-id="1769004387186-4153">Книга будет полезна руководителям либо команд со сложной доменной областью , либо руководителям на большом масштабе.&nbsp;</div><div xmind-vk-document-fragment-id="1769004387186-4153"><br /></div><div xmind-vk-document-fragment-id="1769004387186-4153">Оценка 7.5/10&nbsp;</div><div xmind-vk-document-fragment-id="1769004387186-4153"><br /></div><div xmind-vk-document-fragment-id="1769004387186-4153"><br /></div><div xmind-vk-document-fragment-id="1769004387186-4153">Заметки в XMind&nbsp;https://xmind.app/m/nagd2i&nbsp;</div><div xmind-vk-document-fragment-id="1769004387186-4153"><br /></div><iframe src='https://www.xmind.app/embed/nagd2i/' width='750' height='422' frameborder='0' scrolling='no' allowfullscreen="true"></iframe>]]></description>
<link>http://test-failed.blogspot.com/2026/01/blog-post.html</link>
<pubDate>Wed, 21 Jan 2026 17:21:00 +0300</pubDate>
</item>
<item>
<title>Итоги 2025 года (родилась дочка, конференции, курс по ChatGPT)</title>
<description><![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZoYXTCPb-j7eYLcNjEdTbIlfxNrQZwA5iYSjCmvq3vl9NhIPLIK4IvfzzpwnXy_IcrB-V-gi1b5JjZHokT73v38pGZ598b7VTJvont_bsu_oBG2ctpMNdLUKiCPhAMIos74ynlP-IPJhrus4jLDmDd0qF1vzbMQsdNArTDAgneeE4mwBONEYfmB9cDic/s2560/photo-1_resized.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2560" data-original-width="1707" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZoYXTCPb-j7eYLcNjEdTbIlfxNrQZwA5iYSjCmvq3vl9NhIPLIK4IvfzzpwnXy_IcrB-V-gi1b5JjZHokT73v38pGZ598b7VTJvont_bsu_oBG2ctpMNdLUKiCPhAMIos74ynlP-IPJhrus4jLDmDd0qF1vzbMQsdNArTDAgneeE4mwBONEYfmB9cDic/s320/photo-1_resized.jpg" width="213" /></a></div><br /><p></p><p>Итоги 12 недель были, пора и итоги года подвести! Хотя по сути это будет агрегация моих постов про 12 недель, но ведь надо же посмотреть, сколько всего я успела! =))</p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #333333; font-size: 14.85px;">Мои прошлые итоги:&nbsp;</span><a href="http://okiseleva.blogspot.com/2016/12/2016.html" style="background-color: white; color: #336699; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px; text-decoration-line: none;" target="_blank">2016</a><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #333333; font-size: 14.85px;">,&nbsp;</span><a href="https://okiseleva.blogspot.com/2018/01/2017_12.html" style="background-color: white; color: #336699; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px; text-decoration-line: none;" target="_blank">2017</a><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #333333; font-size: 14.85px;">,&nbsp;</span><a href="https://okiseleva.blogspot.com/2019/01/2018.html" style="background-color: white; color: #336699; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px; text-decoration-line: none;" target="_blank">2018</a><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #333333; font-size: 14.85px;">,&nbsp;</span><a href="https://okiseleva.blogspot.com/2020/01/2019.html#more" style="background-color: white; color: #336699; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px; text-decoration-line: none;" target="_blank">2019</a><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #333333; font-size: 14.85px;">,&nbsp;<a href="https://okiseleva.blogspot.com/2021/01/2020.html" style="color: #336699; text-decoration-line: none;" target="_blank">2020</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2022/01/2021.html" style="color: #336699; text-decoration-line: none;" target="_blank">2021</a>,&nbsp;<a href="https://okiseleva.blogspot.com/2023/01/2022.html" style="color: #336699; text-decoration-line: none;" target="_blank">2022</a>, <a href="https://okiseleva.blogspot.com/2025/01/2024-3.html" target="_blank">2024</a>.</span></p><p><br /></p><h3 style="text-align: left;">Результаты кратко</h3><p>Ох, какой выдался год:</p><p>- Вторая беременность подряд, что ударило по организму (особенно когда я спину сорвала, а лечиться то нельзя, ходи страдай месяц, вставая по ночам к 9-месячному сыну...)</p><p>- Родилась Катюшка!</p><p>- Мы стали многодетными родителями, пройдя через кучу докумнетов))</p><p>- Сдала четвертую книгу (и мы прошли цикл редактуры и верстки в этом году), почти дописала пятую!</p><p>- Выступала на конференциях и митапах! Беременная каталась))</p><p>Ну и всякое остальное по мелочи... Если общим списком:</p><p></p><ol style="text-align: left;"><li>Книга 4: SQL</li><ol><li>Сдала файлы, капитально облажавшись</li><li>Начали редактуру, редактор от меня отказался (сырой материал)</li><li>Всё переделала, исправилась, снова сдала</li><li>Прошли редактуру</li><li>Прошли&nbsp;верстку</li><li>Провели последнюю вычитку — по сути осталась лишь типография. Жаль, книга не успела выйти в 2025 году, но я сама виновата</li></ol><li>Книга 5: ChatGPT: написала 17 глав из 19 =)</li><li>Сделала отдельный канал со статусами моих книг — <a href="https://t.me/nazina_books_status%20" target="_blank">https://t.me/nazina_books_status</a></li><li>Запустила новый курс:</li><ol><li><a href="https://testbase.ru/learn/chatgpt" target="_blank">Применение ChatGPT в тестировании</a></li></ol><li>Улучшалки по текущим курсам — они небольшие, но они есть =)</li><li>Статьи на Хабр — 5 штук</li><li>Пополнила свой youtube-канал — 5 видео</li><li style="margin: 0px 0px 0.25em; padding: 0px;">Сделала трансфер всех видео&nbsp;<a href="https://vkvideo.ru/@club227447987/all" style="color: #336699; text-decoration-line: none;" target="_blank">с ютуба в ВК</a>!</li><li style="margin: 0px 0px 0.25em; padding: 0px;">Выступила на митапе в Йошкар-Оле, но удаленно (видео&nbsp;<a href="https://www.youtube.com/watch?v=A_P5wW5YcZ4&amp;ab_channel=okiseleva" style="color: #336699; text-decoration-line: none;" target="_blank">тут</a>)</li><li style="margin: 0px 0px 0.25em; padding: 0px;">Выступила на SQA Days!</li><li style="margin: 0px 0px 0.25em; padding: 0px;">Выступила на встрече московского клуба тестировщиков!</li><li>Инструменты 12 недель — продолжаю вести файлик DONE, это все еще очень круто</li><li>Родилась Катюшка</li><li>Леше дали место в ГКП и мы даже успели в конце декабря туда пару раз сходить!</li><li>Играли в настолки! Это моя отдушина...</li><li>Встречались с друзьями! И они к нам выбирались)</li></ol><p></p><span><a name='more'></a></span><p><br /></p><h3 style="text-align: left;">Результаты подробнее</h3><p><br /></p><h3 style="text-align: left;">Книги</h3><p><b>Книга 4: SQL</b></p><p>В книге будет 59 глав&nbsp;<span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #333333; font-size: 14.85px;">＼(〇_ｏ)／</span></p><p>Тяжело давались первые, а потом я поняла, как главы должны выглядеть, сделала структуру, которую потихоньку и наполняла. В итоге в конце 2024 года я уже разошлась, стала писать по главе раз в несколько дней. А в новогодние праздники вообще всё закончила! ????</p><p>Стала почивать на лаврах в ожидании художниц, целых 2 месяца ждала, потом всё сдала и думала, что всё будет круто. Оказалось не очень — первые главы шли настолько плохо, что я расставила там тудушек, «сделать потом». И благополучно про них забыла! Так книгу и сдала...</p><p>Редактор посмотрел на это всё, и вернул мне книгу. Подробнее про косяки я писала в <a href="https://okiseleva.blogspot.com/2025/07/12-31-sqa-days.html" target="_blank">31 цикле 12 недель</a>... И снова бодро думала, что вычитаю всё за недельку-две, ведь «это только вначале косяки были»... А сама вычитывала несколько месяцев — тут переделать, там переписать, тут картинку добавить... Когда над душой редактор не стоит и торопиться не надо, сразу столько всего доработать хочется!</p><p>Снова всё сдала, снова работа с редактором — на этот раз всё прошло хорошо. Потом вычитка, верстка, и вот уже книгу сдают в типографию. Осталось подождать очередь, и где-то к февралю книга будет готова.&nbsp;</p><p>Если бы я не продолбалась так, она бы вышла в 2025 году, эх! Было бы «в год по книге»... Но что ж поделать, сама виновата. Благо всё закончили, теперь просто ждем финальный результат...</p><p><br /></p><p><b>Книга 5: ChatGPT</b></p><p>Пока я ждала художниц по 4 книге, я взялась за эту. Тут снова было мееееееедленнное начало. Очень сложно писать «вступительные» главы, приходится много думать над тем, как лучше сформулировать мысли.&nbsp;</p><p>Главу 4, которая в итоге <a href="https://habr.com/ru/articles/947772/" target="_blank">попала на Хабр</a>, я вообще писала около месяца!&nbsp;<span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">＼(〇_ｏ)／</span></p><p>В марте начала, потом забросила — мне как раз редактора к книге 4 дали, а там закрутилось-завертелось и только в августе я вернулась к книге про&nbsp;ChatGPT. И только 19 августа я написала эту главу. Шутка ли — 33 страницы получилось!</p><p>Но потом раскачалась + пошли главы «попроще», один раз продумала структуру и дальше уже как по маслу. И вот сейчас снова новогодние праздники, в которые я закончила рукопись... Что-то мне это напоминает ????????</p><p>Но в этот раз я буду умнее! Отдам художницам последние паки, но не буду просто сидеть и ждать. А начну перечитывать книгу с нуля. В конце концов, её я тоже около года суммарно писала, уже и забыла первые главы. Перечитать на свежую голову будет полезно!</p><p>И только потом я возьмусь за следующую книгу, когда буду уверена, что эту можно сдавать после получения последней картинки!</p><p><br /></p><h3 style="text-align: left;">Курсы</h3><p><br /></p><p><b>Новые курсы</b></p><p>В этом году был только один новый курс:</p><ol><li><a href="https://testbase.ru/learn/chatgpt" target="_blank">Применение ChatGPT в тестировании</a></li></ol><p>Он получился прикольный, и актуальный! Я хочу развивать эту мысль дальше и сделать теперь курс по автоматизации с&nbsp;ChatGPT. Конечно, рождение третьего ребенка немного притормозило все проекты, но сейчас я потихоньку вхожу в рабочий режим, так что планирую сделать много крутого!</p><p><br /></p><p><b>Старые курсы</b></p><p>Что-то в этом году перестали записывать мелкие улучшалки курсов, хотя они есть!</p><p>Из самого крупного — я села переписывать&nbsp;<a href="https://testbase.ru/learn/rest-auto-in-postman" target="_blank">курс по автоматизации в Postman</a>. А то уже несколько лет не обновлялся, и в это мне недовольные курсом студенты периодически тыкают. Правда, тыкают в до сих пор актуальные лекции, возмущаясь датой записи, но... Пора!</p><p>Правда, начинала перезапись я ещё год назад, и начинала ОЧЕНЬ бодро, даже думала "куда мне так спешить? Подожду новый год, чтобы год выхода был 2025..."</p><p>Ха-ха-ха... Мой вам совет — если есть силы, возможность, делайте сразу! А у меня потом в феврале защемило спину, а в третьем триместре беременности лечиться ничем нельзя. Месяц отходила... А потом просто усталось последнего триместра навалилась. А потом усталось первых месяцев... А потом бесконечный круг болезней... А-а-а-а-а, когда это закончится то???</p><p>В общем, я переделываю, но пока медленнно. Вот хочу в первые месяцы нового года добить таки этот курс, чтобы заняться вплотную новыми. Посмотрим, что из этого выйдет в итоге...</p><p>Но в любом случае перезаписывать полезно — я ведь пересматриваю доп материалы, и в этом году выходили полезные статьи, написанные исходно то именно для моих студентов! И есть несколько идей на новые статьи на хабр. Блин, да у меня столько идей для этих статей! Надо просто садиться и делать!</p><p>Ну и домашки я тоже пересматриваю — упрощаю жизнь студентам, что-то разжую, что-то переведу в «задание со звездочкой», то есть необязательное... Так что жизнь течет, курсы обновляются и улучшаются!</p><p>А ещё&nbsp;&nbsp;ПОТ перевели на индивидуальный формат — <a href="https://okiseleva.blogspot.com/2025/09/blog-post.html" target="_blank">тут подробнее об этом</a>. Правда, возможно, вернем обратно, посмотрим))) Но в любом случае я перетрясла весь курс и все домашки, что тоже большое изменение!</p><p><br /></p><h3 style="text-align: left;">Хабр</h3><p>Статьи в этом году:</p><ul style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px; line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;"><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><a href="https://habr.com/ru/articles/873320/" style="color: #336699; text-decoration-line: none;" target="_blank">Работа в двух вкладках: чит-лист проверок</a></li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><a href="https://habr.com/ru/articles/876782/" style="color: #336699; text-decoration-line: none;" target="_blank">Как читается Schema в GraphQL API</a></li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><a href="https://habr.com/ru/articles/887256/" style="color: #336699; text-decoration-line: none;" target="_blank">Базовая подборка аналогов ChatGPT (текстовых ИИ)</a></li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><p><a href="https://habr.com/ru/articles/932896/" style="color: #336699; text-decoration-line: none;" target="_blank">Как в Postman использовать данные из файла</a>&nbsp;— это как раз в рамках переписывания постмана подготовила доп материал</p></li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><p><a href="https://habr.com/ru/articles/947772/" style="color: #336699; text-decoration-line: none;" target="_blank">Как ChatGPT помогает при обучении</a>&nbsp;— а это из 4 главы новой книги родилось!</p></li></ul><p><br /></p><h3 style="text-align: left;">Блог</h3><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><a href="https://okiseleva.blogspot.com/2025/01/schema-graphql.html" style="color: #336699; text-decoration-line: none;" target="_blank">Аргументы внутри объекта Schema GraphQL — для чего нужны</a></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><a href="https://okiseleva.blogspot.com/2025/01/apollo-graphql.html" style="color: #336699; text-decoration-line: none;" target="_blank">Документация в Apollo по методам GraphQL — откуда берется</a></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><a href="https://okiseleva.blogspot.com/2025/07/graphql-api.html" style="color: #336699; text-decoration-line: none;" target="_blank">Как составить запрос в GraphQL API без автозаполнения</a></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><br /></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><a href="https://okiseleva.blogspot.com/2025/11/db-fiddle-sql.html" style="color: #336699; text-decoration-line: none;" target="_blank">DB Fiddle — бесплатная SQL песочница!</a></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><a href="https://okiseleva.blogspot.com/2025/07/blog-post.html" style="color: #336699; text-decoration-line: none;" target="_blank">Как скачать файл с гитхаба</a><br /><br /><a href="https://okiseleva.blogspot.com/2025/04/chatgpt.html" style="color: #336699; text-decoration-line: none;" target="_blank">Библиотека промтов для ChatGPT на русском языке</a><br /><div><br /></div><div>Примеры использования&nbsp;ChatGPT:</div><div><ul style="line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;"><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><a href="https://okiseleva.blogspot.com/2025/08/chatgpt.html" style="color: #336699; text-decoration-line: none;" target="_blank">Как мне настроить гитхаб и запушить туда изменения?</a></li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><a href="https://okiseleva.blogspot.com/2025/10/chatgpt.html" style="color: #336699; text-decoration-line: none;" target="_blank">ChatGPT для общения с англоязычной техподдержкой</a></li></ul><div>Ну и парочка багов из жизни, которые так хорошо ложатся на тестирование граничных значений!</div></div><div><ul style="line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;"><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><a href="https://okiseleva.blogspot.com/2025/09/blog-post_24.html" style="color: #336699; text-decoration-line: none;" target="_blank">Ошибка печати в кассе, когда ленты нет, но стоит галка "не печатать чек"</a></li><li style="border: none; margin: 0px 0px 0.25em; padding: 0px;"><a href="https://okiseleva.blogspot.com/2025/11/blog-post.html" style="color: #336699; text-decoration-line: none;" target="_blank">Как яндекс диск сдох при одновременном перемещении папки</a></li></ul></div></div><p><br /></p><h3 style="text-align: left;">Youtube</h3><p>Мой канал — <a href="https://www.youtube.com/c/okiseleva">https://www.youtube.com/c/okiseleva</a>.</p><p>Туда я выкладываю кусочки моих лекций с разных курсов + немного разговорного формата. В этом году обновления канала:&nbsp;</p><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><ol><li style="margin: 0px 0px 0.25em; padding: 0px;"><a href="https://youtu.be/r_0hIwjONk0" style="color: #336699; text-decoration-line: none;" target="_blank">Regexplike — оператор в SQL-запросе&nbsp;</a></li><li style="margin: 0px 0px 0.25em; padding: 0px;"><a href="https://youtu.be/A_P5wW5YcZ4" style="color: #336699; text-decoration-line: none;" target="_blank">Что такое GraphQL API и как оно работает (iSpring Tech QA meetup 4)&nbsp;</a></li><li style="margin: 0px 0px 0.25em; padding: 0px;"><a href="https://youtu.be/RHg04v7pp3Y" style="color: #336699; text-decoration-line: none;" target="_blank">Как ChatGPT помогает при обучении</a>&nbsp;</li><li style="margin: 0px 0px 0.25em; padding: 0px;"><a href="https://youtu.be/F3Id8RQYQGA" style="color: #336699; text-decoration-line: none;" target="_blank">Как написать 30+ автотестов в Postman за 2 минуты с помощью ChatGPT</a></li><li style="margin: 0px 0px 0.25em; padding: 0px;"><a href="https://youtu.be/ptkv11tqgwk" style="color: #336699; text-decoration-line: none;" target="_blank">Как составить запрос в GraphQL API без автозаполнения</a>&nbsp;</li></ol></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;"><br /></div><div style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.85px;">Перенесла все видео с ютуба в ВК —&nbsp;<a href="https://vkvideo.ru/@club227447987/all" style="color: #336699; text-decoration-line: none;">https://vkvideo.ru/@club227447987/all</a>. Так что теперь наконец-то есть дубли в нормально работающем хостинге!</div><p><br /></p><h3 style="text-align: left;">Остальное</h3><p>В это году куча всего в жизни было:</p><p></p><ul style="text-align: left;"><li>Родилась Катюшка!</li><li>Леше исполнился годик, а потом и полтора, а это целая веха. Уже ходит и даже бегает, уже даже в ГКП позвали! Следующая большая ступень — говорить.</li><li>Влад пошел в школу, первоклассник!</li><li>Ну а мы получили статус многодетной семьи. И уже огребли связанные с этим проблемы, а именно болезни "не просыхая" по месяцу, когда они просто по кругу ходят (((</li></ul><div>Плюс в феврале сорвала спину. В итоге первые полгода мне было тяжело работать, потому что организм забирал много, а вторую — потому что первые полгода-год очень тяжелые, малыши мало спят, и мама с ними...</div><div><br /></div><div>Но, тем не менее, работать получалось. Меньше, чем обычно, в блоге не слишком много статей вышло, на хабр у меня целый список туду-шек скопился... Но! Сон потихоньку стабилизируется — да, ещё далеко от идеала, но уже и не ходячая зомби-мама )))</div><div><br /></div><div>Начинаю возвращаться к работе и надеюсь, что новый год принесет больше творческих рабочих успехов!</div><p></p><p><br /></p><h3 style="text-align: left;">Цели на 2026</h3><p><br /></p><p>Хочу, как в <a href="https://okiseleva.blogspot.com/2025/01/2024-3.html" target="_blank">2024 году</a>, чтобы результат года был: 3 новых курса! А то посмотрела заголовок прошлого блог-поста и аж сама себе позавидовала. Да, так и надо работать, иначе смысл, проще из декрета на работу вернуться... Что, впрочем, я тоже рассматриваю как вариант, но посмотрим!</p><p>А ещё хочу, чтобы результат был — 3 новых книги! Но будем реалистами, для этого третью я должна край до лета написать, что-то слабо верится... Поэтому поставлю план — 2 книги выйти должны (одна уже в пути в печать, вторую я через месяц-два сдам, вполне реально!) и третью я должна сдать рукопись, а это за год вполне реалистично сделать.</p><p>Итак:</p><p></p><ul style="text-align: left;"><li>3 новых курса</li><li>3 новых книги — 2 выпустить, 1 сдать рукопись</li><li>Доделать курс автоматизации в postman, не бросать же его!</li></ul><p></p><div>Ну и остальные:</div><div><div><ul style="text-align: left;"><li>Хабр — хотя бы 4 статьи (1 в цикл)</li><li>Youtube-канал — 6 видео, поставим план пореальнее...</li></ul><div><br /></div></div></div><h3 style="text-align: left;">Резюме</h3><div><br /></div><div>Год вышел не супер-плодотворным, но причины на это были ))))</div><div><br /></div><div>Сейчас я возвращаюсь к работе (хотя есть вариант и отказаться от нянь, но тогда и работа заглохнет), если вернусь, то следующий год обещает быть ого-го! Ну а там... На деле посмотрим! Я буду стараться ????</div><div><br /></div>]]></description>
<link>http://okiseleva.blogspot.com/2026/01/2025.html</link>
<pubDate>Sun, 04 Jan 2026 22:46:00 +0300</pubDate>
</item>
<item>
<title>ChatGPT, подсчитай количество страниц в книге и авторских листов</title>
<description><![CDATA[<p>ИИ может считывать текст с фотографии и обрабатывать его. Когда я составила план-проспект для книги про ИИ, мне нужно подсчитать
суммарное количество страниц. План я сделала в ворде, он сам не считает. Как
быть?</p><p>

</p><p class="MsoNormal">Можно посчитать самой:</p><p class="MsoNormal"></p><ol style="text-align: left;"><li><span style="text-indent: -18pt;">В уме / на калькуляторе (чтобы не ошибиться,
если данных много) — грустненько…</span></li><li><span style="text-indent: -18pt;">В экселе / гуглодоке —&nbsp;вставить туда в
табличный вид и просуммировать последнюю колонку.</span></li></ol><p></p><p class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><!--[if !supportLists]--><o:p></o:p></p>



<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjejay1ORqnbxQUmQQHnfhe5Jj2PkVLCnZw8nCiEVoBdMuwTxisYY2Nef4fRYjj24YLEpHQFzk_eNnuQXss3xRYKjMsjUV6WjmQ8hWQ7nDn9-8istT7KIvpQAMZ1lKvHoLKPIK5okHB6p_1DFxtLfCDFX__XpJvQxwy73JKV-3txpoXkqqIWUgnha6YBtk/s1079/4.%20%D0%9A%D0%B0%D1%82%D1%8F%20%D1%81%D0%B8%D0%B4%D0%B8%D1%82%20%D0%B8%20%D0%B3%D1%80%D1%83%D1%81%D1%82%D0%B8%D1%82.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1079" data-original-width="854" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjejay1ORqnbxQUmQQHnfhe5Jj2PkVLCnZw8nCiEVoBdMuwTxisYY2Nef4fRYjj24YLEpHQFzk_eNnuQXss3xRYKjMsjUV6WjmQ8hWQ7nDn9-8istT7KIvpQAMZ1lKvHoLKPIK5okHB6p_1DFxtLfCDFX__XpJvQxwy73JKV-3txpoXkqqIWUgnha6YBtk/w158-h200/4.%20%D0%9A%D0%B0%D1%82%D1%8F%20%D1%81%D0%B8%D0%B4%D0%B8%D1%82%20%D0%B8%20%D0%B3%D1%80%D1%83%D1%81%D1%82%D0%B8%D1%82.png" width="158" /></a></div><br /><p class="MsoNormal">Второй вариант вроде звучит интересно — ведь это
автоматизация! Но с ним возникнет ряд проблем:</p><p class="MsoNormal" style="text-indent: 0px;"></p><ul style="text-align: left;"><li><span style="text-indent: -18pt;">После вставки придется вручную удалить пустые
строки и те, что не участвуют в подсчете (расшифровка для подглав) — нудно!</span></li><li><span style="text-indent: -18pt;">Эксель может не распознать цифры как цифры и
придется попрыгать с бубном, чтобы он всё же подсчитал результат.</span></li></ul><p></p><p class="MsoListParagraphCxSpFirst" style="mso-list: l1 level1 lfo2; text-indent: -18.0pt;"><!--[if !supportLists]--><o:p></o:p></p>



<p class="MsoNormal">А можно сделать всё то же самое без плясок, бубнов и
каких-либо других проблем! Для этого делаем скриншот плана и отправляем в ИИ,
который умеет работать с фотографиями. У меня на одном скрине всё не влезло, я
сделала два. Диалог с ботом:</p><span><a name='more'></a></span><p class="MsoNormal" style="margin-left: 35.4pt;"><i><span style="background: yellow; mso-highlight: yellow;"><br />Я:</span></i> Посчитай количество страниц (последняя
колонка) для строк, начинающихся (первая колонка) как «Глава »<o:p></o:p></p>

<p class="MsoNormal"><br /></p>

<p class="MsoNormal"><o:p>&nbsp;</o:p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUoK5TXbjBGJ1v6odmh0DnTsqe4MFRDfKEiQ5s4SsW-yhQ1ryq4tZVqnkA9YI7Ed3o64OUTXOi2vx9rw1d5Kj9_MgZwrmw8Lq_5eRs1E3HP10dfyFNE8hG-Vfcz2c8clGCk4pTU3mYVPOdHVbDsb-cgVmvUbKc4qH25sG6LgmrNgrsWAOnBXWpdEH-Kyk/s1118/19.1%20%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1084" data-original-width="1118" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUoK5TXbjBGJ1v6odmh0DnTsqe4MFRDfKEiQ5s4SsW-yhQ1ryq4tZVqnkA9YI7Ed3o64OUTXOi2vx9rw1d5Kj9_MgZwrmw8Lq_5eRs1E3HP10dfyFNE8hG-Vfcz2c8clGCk4pTU3mYVPOdHVbDsb-cgVmvUbKc4qH25sG6LgmrNgrsWAOnBXWpdEH-Kyk/s320/19.1%20%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82.png" width="320" /></a></div><br /><p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;"><i><span style="background: yellow; mso-highlight: yellow;">Бот:</span> </i>Вот количество страниц для строк,
начинающихся с "Глава ":<i><o:p></o:p></i></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 0: 1<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 1: 3<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 2: 2<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 3: 3<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 4: 4<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 5: 12<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 6: 25<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 7: 23<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 8: 32<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 9: 15<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 10: 10<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 11: 11</p><p class="MsoNormal" style="margin-left: 35.4pt;"><br /></p><p></p><p></p><p class="MsoNormal" style="margin-left: 35.4pt; text-align: left;"><i>Упс! Я ошиблась в промте, мне
же нужна только итоговая сумма… Нужно было формулировать вопрос точнее. Ну да
не беда, чат не наказывает за ошибки. Просто уточним запрос:</i>&nbsp;</p><p></p><p>

</p><p class="MsoNormal" style="margin-left: 35.4pt;"><i><span style="background: yellow; mso-highlight: yellow;">Я:</span></i> Сумма какая?</p>

<p class="MsoNormal" style="margin-left: 35.4pt;"><span style="background: yellow; mso-highlight: yellow;">Чат:</span> Сумма количества страниц для глав: 1 + 3 + 2
+ 3 + 4 + 12 + 25 + 23 + 32 + 15 + 10 + 10 = 140</p>

<p class="MsoNormal" style="margin-left: 35.4pt;"><span style="background: yellow; mso-highlight: yellow;">Я:</span> а тут? добавь к прошлой сумме</p><p class="MsoNormal" style="margin-left: 35.4pt;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1EKV-wvMh0PVXdr-dOkIH8YOR_-8fU51FoHZE3d_GQRw95imfGdZWigMESq_YOPcKkAaEjztDuebWAXOYGExO5OlsJeyVZb2tQZMg35jFLH5hKO6z6L30HvVCqezgKJFjh0mIymNR9jThKZL_-uokdSDIclma-GG6wUfomT-BNPDEgkFvlxDvafSgaCI/s992/19.2.%20%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82%20%D1%81%D1%82%D1%80.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="370" data-original-width="992" height="119" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1EKV-wvMh0PVXdr-dOkIH8YOR_-8fU51FoHZE3d_GQRw95imfGdZWigMESq_YOPcKkAaEjztDuebWAXOYGExO5OlsJeyVZb2tQZMg35jFLH5hKO6z6L30HvVCqezgKJFjh0mIymNR9jThKZL_-uokdSDIclma-GG6wUfomT-BNPDEgkFvlxDvafSgaCI/s320/19.2.%20%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82%20%D1%81%D1%82%D1%80.png" width="320" /></a></div><br /><p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;"><i><span style="background: yellow; mso-highlight: yellow;">Чат:</span></i> Вот количество страниц для строк,
начинающихся с "Глава " из второго изображения:</p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 12: 6<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 13: 11<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 14: 15<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 15: 24<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 16: 14<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 17: 12<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 18: 3<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">•<span style="mso-spacerun: yes;">&nbsp;
</span>Глава 19: 1</p>

<p class="MsoNormal" style="margin-left: 35.4pt;">Сумма этих значений: 6 + 11 + 15
+ 24 + 14 + 12 + 3 + 1 = 86<o:p></o:p></p>

<p class="MsoNormal" style="margin-left: 35.4pt;">Общая сумма с предыдущим
результатом (140): 140 + 86 = 226<o:p></o:p></p>

<p class="MsoNormal"><o:p>&nbsp;</o:p></p>

<p class="MsoNormal">Вуа-ля! Пара минут, и всё готово! Если честно, с первыми
книгами я считала это всё добро сама и занимало это сильно больше времени =))<o:p></o:p></p>

<p class="MsoNormal"><o:p>&nbsp;</o:p></p>

<h3 style="text-align: left;">Подсчет авторских листов</h3>

<p class="MsoNormal">Ещё, когда сдаешь рукопись, нужно подсчитать количество авторских страниц. А это считается по количеству знаков, а я знаю лишь количество страниц в ворде... Сидеть и примерно прикидывать? Передала задачку чату:</p><p class="MsoNormal"><i><span style="background: yellow;"></span></i></p><blockquote><p class="MsoNormal"><i><span style="background: yellow;">Я:</span></i>&nbsp;объем в авторских листах (1 авторский лист = 40 000 знаков с
пробелами). Если у меня 226 страниц ворда, это сколько авторских листов?</p>

<p class="MsoNormal"><span style="background-color: #fcff01;"><i>Чат:</i></span> Чтобы рассчитать объем в авторских листах, нужно знать,
сколько знаков с пробелами содержится на одной странице вашего документа.
Обычно на одной странице формата A4 с шрифтом 12 и одинарным интервалом
помещается примерно 1800-2500 знаков с пробелами, в зависимости от оформления.</p>

<p class="MsoNormal">Если взять среднее значение, например, 2000 знаков на
страницу, то для 226 страниц это будет:<o:p></o:p></p><p class="MsoNormal"><br /></p>

<p class="MsoNormal"><o:p>&nbsp;<span>&nbsp;&nbsp; &nbsp;</span></o:p>226 страниц * 2000 знаков/страница = 452000 знаков.</p>

<p class="MsoNormal"><o:p>&nbsp;</o:p></p>

<p class="MsoNormal">Теперь, чтобы перевести это в авторские листы, нужно
разделить на 40 000 знаков:<o:p></o:p></p><p class="MsoNormal"><br /></p>

<p class="MsoNormal"><o:p>&nbsp;<span>&nbsp;&nbsp; &nbsp;</span></o:p>452000 знаков / 40000 знаков/авторский лист = 11.3 авторских
листов.</p>

<p class="MsoNormal"><o:p>&nbsp;</o:p></p>

<p class="MsoNormal">Таким образом, у вас примерно 11.3 авторских листов. Если у
вас есть точное количество знаков на странице, вы можете подставить его в
расчет для более точного результата.</p></blockquote><p class="MsoNormal"><o:p></o:p></p><p class="MsoNormal"><br /></p><p class="MsoNormal">Делать эти задачи с помощью ИИ мне понравилось больше, чем вручную ????</p><p></p>]]></description>
<link>http://okiseleva.blogspot.com/2026/01/chatgpt.html</link>
<pubDate>Sat, 03 Jan 2026 22:23:00 +0300</pubDate>
</item>
<item>
<title>Вайб-кодинг и вайб-тестинг — полный гайд на реальных проектах в Cursor и ChatGPT</title>
<description><![CDATA[<p class="p1">Запилил гайд <b>на 2 часа</b> по вайб-кодингу и вайб-тестингу.</p>
<p><iframe title="Вайб-кодинг и вайб-тестинг — полный гайд на реальных проектах в Cursor и ChatGPT" width="700" height="394" src="https://www.youtube.com/embed/yYxrQbP7fsU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p>&nbsp;</p>
<p class="p1">Это был <b>самый тяжёлый видос</b> на моём YouTube и, надеюсь, самый полезный<br />
Тяжелее, чем <strong><a href="https://prostoitblog.ru/testirovshhik-qa-s-nulya-polnyj-kurs-dlya-nachinayushhih/" target="_blank" rel="noopener">полный курс по тестированию на 9 часов.</a></strong></p>
<p class="p1">Я, в буквальном смысле, сидел ночами, чтобы его записать.<br />
А учитывая, что у меня непростая работа и маленький ребёнок, то, как сказал классик:<br />
<b>«Это было не просто смело — это было п</b>*ц как смело».**</p>
<p class="p1">Спасибо моей жене за терпение <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2764.png" alt="❤" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p class="p3"><b>Что мы сделаем в видео:</b></p>
<ul>
<li>Разберём <b>все настройки Cursor AI</b> по косточкам</li>
<li>Разберём <b>User Rules, Project Rules и MCP</b></li>
<li>Создадим игру <b>без каких-либо User Rules и Project Rules</b></li>
<li>Сделаем <b>код-ревью и тестирование</b> игры</li>
<li>Пофиксим все замечания после код-ревью и все баги после тестирования</li>
<li>Создадим <b>SaaS-приложение</b> с одним и тем же промптом: в Cursor только с User Rules, в Lovable и сравним результаты</li>
<li>Создадим <b>SaaS-приложение в Cursor</b> с расширенным промптом: дизайн-система, компоненты, shadcn MCP и специальные <b>Project Rules под Frontend</b></li>
<li>Сверстаем <b>полноценный макет из Figma</b> при помощи Cursor</li>
<li>Отдельно разберём <b>ручное тестирование</b>: на реальном проекте с помощью ChatGPT спарсим документацию на продукт, напишем качественные чек-листы и на их основе составим тест-кейсы</li>
<li>На реальном проекте сгенерим <b>тест-кейсы из Swagger</b>, по ним напишем автотесты, запустим их и зафиксируем все баги — <b>не написав ни строчки кода</b></li>
<li>Разберём мой <b>мини-фреймворк</b> на базе вспомогательных файлов: типа roadmap.md, progress.md, refactor.md, context.md и т.д.</li>
<li>Напишем и запустим <b>web-тесты при помощи MCP Playwright</b></li>
</ul>
<p>&nbsp;</p>
<p><strong><em>Все промпты, mcp, rules из гайда:</em></strong></p>
<h2><strong>Простой промпт для Cursor/Lovable для создания приложения MealMind:</strong></h2>
<p><span style="font-weight: 400;">Сделай современный веб-сайт/приложение “MealMind”</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Нужны страницы: Главная/Дашборд, План на неделю, Рецепты,</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Список покупок, Профиль/Настройки.</span></p>
<p><span style="font-weight: 400;">Дизайн: минимализм, премиальный вид, много воздуха, мягкие</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> градиенты, карточки, аккуратные тени.</span></p>
<p><span style="font-weight: 400;">Адаптивно, хорошая типографика, светлая/тёмная тема.</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> На страницах сделай реалистичные UI-блоки и демо-данные (без внешних картинок).</span></p>
<p>&nbsp;</p>
<h2><strong>Расширенный промпт с дизайн-системой</strong></h2>
<p><span style="font-weight: 400;">Сделай веб-приложение “MealMind” на React + Tailwind + shadcn/ui.</span></p>
<p><span style="font-weight: 400;">Это интерфейс продукта (НЕ лендинг). Нужны несколько страниц/роутов.</span></p>
<p><span style="font-weight: 400;">СТЕК И КОМПОНЕНТЫ</span></p>
<p><span style="font-weight: 400;">&#8212; React + Tailwind</span></p>
<p><span style="font-weight: 400;">&#8212; shadcn/ui: Button, Card, Badge, Input, Tabs, Accordion, Dialog, Sheet, DropdownMenu, Avatar, Separator, Tooltip, Progress, Skeleton, Table</span></p>
<p><span style="font-weight: 400;">&#8212; Иконки: lucide-react</span></p>
<p><span style="font-weight: 400;">&#8212; Темы: light/dark (class-based), красивый переключатель</span></p>
<p><span style="font-weight: 400;">&#8212; Демо-данные локально, без API</span></p>
<p><span style="font-weight: 400;">ДИЗАЙН-СИСТЕМА (строго)</span></p>
<p><span style="font-weight: 400;">&#8212; Контейнер: max-w-[1200px] для контента, но сам layout full width</span></p>
<p><span style="font-weight: 400;">&#8212; Сетка 8px: 8/16/24/32/48/64</span></p>
<p><span style="font-weight: 400;">&#8212; Радиусы: 16–24px на карточках/панелях</span></p>
<p><span style="font-weight: 400;">&#8212; Тени: очень мягкие, больше border чем shadow</span></p>
<p><span style="font-weight: 400;">&#8212; Типографика:</span></p>
<p><span style="font-weight: 400;">  H1 32–40, H2 24–28, H3 18–20, текст 15–16, muted для вторичного</span></p>
<p><span style="font-weight: 400;">&#8212; Один акцентный цвет (выбери emerald или violet и держи везде)</span></p>
<p><span style="font-weight: 400;">&#8212; Состояния: hover/pressed/focus/disabled продумать</span></p>
<p><span style="font-weight: 400;">LAYOUT</span></p>
<p><span style="font-weight: 400;">&#8212; App Shell:</span></p>
<p><span style="font-weight: 400;">  &#8212; Sidebar слева (collapsible на мобиле через Sheet)</span></p>
<p><span style="font-weight: 400;">  &#8212; Topbar сверху: поиск, кнопка “Новый план”, аватар/меню</span></p>
<p><span style="font-weight: 400;">&#8212; Навигация sidebar:</span></p>
<p><span style="font-weight: 400;">  &#8212; Дашборд</span></p>
<p><span style="font-weight: 400;">  &#8212; План на неделю</span></p>
<p><span style="font-weight: 400;">  &#8212; Рецепты</span></p>
<p><span style="font-weight: 400;">  &#8212; Список покупок</span></p>
<p><span style="font-weight: 400;">  &#8212; Статистика</span></p>
<p><span style="font-weight: 400;">  &#8212; Настройки</span></p>
<p><span style="font-weight: 400;">СТРАНИЦЫ (обязательные)</span></p>
<p><span style="font-weight: 400;">1) Дашборд</span></p>
<p><span style="font-weight: 400;">&#8212; Верх: приветствие + “Новый план” (primary)</span></p>
<p><span style="font-weight: 400;">&#8212; 3 KPI карточки: “Калории”, “Белок”, “Вода” (Progress внутри)</span></p>
<p><span style="font-weight: 400;">&#8212; Блок “План на неделю” (мини Table)</span></p>
<p><span style="font-weight: 400;">&#8212; Блок “Предпочтения” (чипсы/бейджи) + “Изменить” (Dialog)</span></p>
<p><span style="font-weight: 400;">&#8212; Блок “Быстрые рецепты” (3 карточки)</span></p>
<p><span style="font-weight: 400;">2) План на неделю</span></p>
<p><span style="font-weight: 400;">&#8212; Tabs: “Неделя / День”</span></p>
<p><span style="font-weight: 400;">&#8212; Table с Пн–Вс и приёмами пищи</span></p>
<p><span style="font-weight: 400;">&#8212; Справа “Панель генерации” (Card):</span></p>
<p><span style="font-weight: 400;">  &#8212; цель калорий (Input + helper)</span></p>
<p><span style="font-weight: 400;">  &#8212; аллергии (badge list + add)</span></p>
<p><span style="font-weight: 400;">  &#8212; время готовки (15/30/45)</span></p>
<p><span style="font-weight: 400;">  &#8212; стиль питания (обычный/вег/кето) — DropdownMenu</span></p>
<p><span style="font-weight: 400;">  &#8212; кнопка “Сгенерировать” + состояние loading (Skeleton)</span></p>
<p><span style="font-weight: 400;">&#8212; При клике на блюдо открывай Dialog “Детали рецепта”</span></p>
<p><span style="font-weight: 400;">3) Рецепты</span></p>
<p><span style="font-weight: 400;">&#8212; Верх: поиск (Input) + фильтры (DropdownMenu)</span></p>
<p><span style="font-weight: 400;">&#8212; Сетка карточек рецептов</span></p>
<p><span style="font-weight: 400;">&#8212; Карточка: название, бейджи (15 мин / high-protein), мини описание</span></p>
<p><span style="font-weight: 400;">&#8212; Клик → страница или Dialog:</span></p>
<p><span style="font-weight: 400;">  &#8212; ингредиенты (list)</span></p>
<p><span style="font-weight: 400;">  &#8212; шаги (ordered list)</span></p>
<p><span style="font-weight: 400;">  &#8212; CTA “Добавить в план”</span></p>
<p><span style="font-weight: 400;">  &#8212; CTA “В избранное”</span></p>
<p><span style="font-weight: 400;">4) Список покупок</span></p>
<p><span style="font-weight: 400;">&#8212; Группировка по категориям (Овощи/Молочное/Мясо/Крупы)</span></p>
<p><span style="font-weight: 400;">&#8212; Чекбоксы, подсчёт “осталось X”</span></p>
<p><span style="font-weight: 400;">&#8212; Кнопки: “Отметить всё”, “Экспорт” (плейсхолдер)</span></p>
<p><span style="font-weight: 400;">&#8212; Умные замены (маленькая боковая карточка)</span></p>
<p><span style="font-weight: 400;">5) Статистика</span></p>
<p><span style="font-weight: 400;">&#8212; Карточки метрик + один простой график-плейсхолдер (можно без библиотек, просто блоки)</span></p>
<p><span style="font-weight: 400;">&#8212; Фильтр: 7/30 дней (Tabs)</span></p>
<p><span style="font-weight: 400;">6) Настройки</span></p>
<p><span style="font-weight: 400;">&#8212; Профиль (имя, цель)</span></p>
<p><span style="font-weight: 400;">&#8212; Диеты/аллергии (бейджи + добавить)</span></p>
<p><span style="font-weight: 400;">&#8212; Уведомления (переключатели)</span></p>
<p><span style="font-weight: 400;">&#8212; Тема (toggle)</span></p>
<p><span style="font-weight: 400;">UX ТРЕБОВАНИЯ</span></p>
<p><span style="font-weight: 400;">&#8212; Красивые пустые состояния (empty state) с иконкой и подсказкой</span></p>
<p><span style="font-weight: 400;">&#8212; Loading состояния через Skeleton</span></p>
<p><span style="font-weight: 400;">&#8212; Ошибка (например “Не удалось сгенерировать план”) — оформленная alert-card</span></p>
<p><span style="font-weight: 400;">&#8212; Микро-анимации: плавные transitions на навигации и карточках</span></p>
<p><span style="font-weight: 400;">ВЫВОД</span></p>
<p><span style="font-weight: 400;">&#8212; Сгенерируй готовый код приложения: layout + роутинг + страницы</span></p>
<p><span style="font-weight: 400;">&#8212; Реалистичный русский текст, без lorem ipsum</span></p>
<p><span style="font-weight: 400;">&#8212; Убедись, что UI выглядит как продукт: аккуратные отступы, единый стиль, красивый sidebar/topbar</span></p>
<p>&nbsp;</p>
<h2><strong>MCP</strong></h2>
<p><span style="font-weight: 400;">{</span></p>
<p><span style="font-weight: 400;"> </span><span style="font-weight: 400;">&#171;mcpServers&#187;</span><span style="font-weight: 400;">: {</span></p>
<p><span style="font-weight: 400;">   </span><span style="font-weight: 400;">&#171;sequential-thinking&#187;</span><span style="font-weight: 400;">: {</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;command&#187;</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">&#171;/Users/oleg/.nvm/versions/node/v20.19.5/bin/npx&#187;</span><span style="font-weight: 400;">,</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;args&#187;</span><span style="font-weight: 400;">: [</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;-y&#187;</span><span style="font-weight: 400;">,</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;@modelcontextprotocol/server-sequential-thinking&#187;</span></p>
<p><span style="font-weight: 400;">     ],</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;env&#187;</span><span style="font-weight: 400;">: {</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;PATH&#187;</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">&#171;/Users/oleg/.nvm/versions/node/v20.19.5/bin:/usr/local/bin:/usr/bin:/bin&#187;</span></p>
<p><span style="font-weight: 400;">     }</span></p>
<p><span style="font-weight: 400;">   },</span></p>
<p><span style="font-weight: 400;">   </span><span style="font-weight: 400;">&#171;Playwright&#187;</span><span style="font-weight: 400;">: {</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;command&#187;</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">&#171;/Users/oleg/.nvm/versions/node/v20.19.5/bin/npx&#187;</span><span style="font-weight: 400;">,</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;args&#187;</span><span style="font-weight: 400;">: [</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;-y&#187;</span><span style="font-weight: 400;">,</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;@playwright/mcp@latest&#187;</span></p>
<p><span style="font-weight: 400;">     ],</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;env&#187;</span><span style="font-weight: 400;">: {</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;PATH&#187;</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">&#171;/Users/oleg/.nvm/versions/node/v20.19.5/bin:/usr/local/bin:/usr/bin:/bin&#187;</span></p>
<p><span style="font-weight: 400;">     }</span></p>
<p><span style="font-weight: 400;">   },</span></p>
<p><span style="font-weight: 400;">   </span><span style="font-weight: 400;">&#171;chrome-devtools&#187;</span><span style="font-weight: 400;">: {</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;command&#187;</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">&#171;/Users/oleg/.nvm/versions/node/v20.19.5/bin/npx&#187;</span><span style="font-weight: 400;">,</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;args&#187;</span><span style="font-weight: 400;">: [</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;-y&#187;</span><span style="font-weight: 400;">,</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;chrome-devtools-mcp@latest&#187;</span></p>
<p><span style="font-weight: 400;">     ],</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;env&#187;</span><span style="font-weight: 400;">: {</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;PATH&#187;</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">&#171;/Users/oleg/.nvm/versions/node/v20.19.5/bin:/usr/local/bin:/usr/bin:/bin&#187;</span></p>
<p><span style="font-weight: 400;">     }</span></p>
<p><span style="font-weight: 400;">   },</span></p>
<p><span style="font-weight: 400;">   </span><span style="font-weight: 400;">&#171;shadcn&#187;</span><span style="font-weight: 400;">: {</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;command&#187;</span><span style="font-weight: 400;">: </span><span style="font-weight: 400;">&#171;npx&#187;</span><span style="font-weight: 400;">,</span></p>
<p><span style="font-weight: 400;">     </span><span style="font-weight: 400;">&#171;args&#187;</span><span style="font-weight: 400;">: [</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;shadcn@latest&#187;</span><span style="font-weight: 400;">,</span></p>
<p><span style="font-weight: 400;">       </span><span style="font-weight: 400;">&#171;mcp&#187;</span></p>
<p><span style="font-weight: 400;">     ]</span></p>
<p><span style="font-weight: 400;">   }</span></p>
<p><span style="font-weight: 400;"> }</span></p>
<p><span style="font-weight: 400;">}</span></p>
<p>&nbsp;</p>
<h2><strong>System rule</strong></h2>
<p><span style="font-weight: 400;">Always respond in Russian.</span></p>
<p><span style="font-weight: 400;">Think carefully and only action the specific task I have given you with the most consice and elegant solution that changes as little code as possible.</span></p>
<p><span style="font-weight: 400;">Rethink and rewrite everything like a highly paid professional, use best practices and make it as simple as possible so that a complete retard can understand.</span></p>
<p><span style="font-weight: 400;">DO NOT GIVE ME HIGH LEVEL STUFF, IF I ASK FOR FIX OR EXPLANATION, I WANT ACTUAL CODE OR EXPLANATION!!! I DON&#8217;T WANT &#171;Here&#8217;s how you can blablabla&#187;</span></p>
<p><span style="font-weight: 400;">Be casual unless otherwise specified</span></p>
<p><span style="font-weight: 400;">Be terse</span></p>
<p><span style="font-weight: 400;">Suggest solutions that I didn’t think about—anticipate my needs</span></p>
<p><span style="font-weight: 400;">Treat me as an expert</span></p>
<p><span style="font-weight: 400;">Be accurate and thorough</span></p>
<p><span style="font-weight: 400;">Give the answer immediately. Provide detailed explanations and restate my query in your own words if necessary after giving the answer</span></p>
<p><span style="font-weight: 400;">Value good arguments over authorities, the source is irrelevant</span></p>
<p><span style="font-weight: 400;">Consider new technologies and contrarian ideas, not just the conventional wisdom</span></p>
<p><span style="font-weight: 400;">You may use high levels of speculation or prediction, just flag it for me</span></p>
<p><span style="font-weight: 400;">No moral lectures</span></p>
<p><span style="font-weight: 400;">Discuss safety only when it&#8217;s crucial and non-obvious</span></p>
<p><span style="font-weight: 400;">If your content policy is an issue, provide the closest acceptable response and explanation</span></p>
<p><span style="font-weight: 400;">WHEN UPDATING THE CODEBASE BE 100% SURE TO NOT BREAK ANYTHING</span></p>
<p><span style="font-weight: 400;">I am using Mac</span></p>
<p><span style="font-weight: 400;">Отвечай на русском языке.</span></p>
<p><span style="font-weight: 400;">Перед каждым ответом обязательно читай правила проекта из .cursor/rules. Не приступай к ответу, пока не прочтёшь правила.</span></p>
<p><span style="font-weight: 400;">Каждый свой ответ без исключений начинай с фразы &#171;В контекст добавлены правила: X, Y, Z, etc.&#187; с названиями прочтённых файлов с правилами.</span></p>
<p>&nbsp;</p>
<h2><strong>Front-End Developer  rule:</strong></h2>
<p><span style="font-weight: 400;">You are a Senior Front-End Developer and an Expert in ReactJS, NextJS, JavaScript, TypeScript, HTML, CSS and modern UI/UX frameworks (e.g., TailwindCSS, Shadcn, Radix). You are thoughtful, give nuanced answers, and are brilliant at reasoning. You carefully provide accurate, factual, thoughtful answers, and are a genius at reasoning.</span></p>
<p><span style="font-weight: 400;">&#8212; Follow the user’s requirements carefully &amp; to the letter.</span></p>
<p><span style="font-weight: 400;">&#8212; First think step-by-step &#8212; describe your plan for what to build in pseudocode, written out in great detail.</span></p>
<p><span style="font-weight: 400;">&#8212; Confirm, then write code!</span></p>
<p><span style="font-weight: 400;">&#8212; Always write correct, best practice, DRY principle (Dont Repeat Yourself), bug free, fully functional and working code also it should be aligned to listed rules down below at Code Implementation Guidelines .</span></p>
<p><span style="font-weight: 400;">&#8212; Focus on easy and readability code, over being performant.</span></p>
<p><span style="font-weight: 400;">&#8212; Fully implement all requested functionality.</span></p>
<p><span style="font-weight: 400;">&#8212; Leave NO todo’s, placeholders or missing pieces.</span></p>
<p><span style="font-weight: 400;">&#8212; Ensure code is complete! Verify thoroughly finalised.</span></p>
<p><span style="font-weight: 400;">&#8212; Include all required imports, and ensure proper naming of key components.</span></p>
<p><span style="font-weight: 400;">&#8212; Be concise Minimize any other prose.</span></p>
<p><span style="font-weight: 400;">&#8212; If you think there might not be a correct answer, you say so.</span></p>
<p><span style="font-weight: 400;">&#8212; If you do not know the answer, say so, instead of guessing.</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">### Coding Environment</span></p>
<p><span style="font-weight: 400;">The user asks questions about the following coding languages:</span></p>
<p><span style="font-weight: 400;">&#8212; ReactJS</span></p>
<p><span style="font-weight: 400;">&#8212; NextJS</span></p>
<p><span style="font-weight: 400;">&#8212; JavaScript</span></p>
<p><span style="font-weight: 400;">&#8212; TypeScript</span></p>
<p><span style="font-weight: 400;">&#8212; TailwindCSS</span></p>
<p><span style="font-weight: 400;">&#8212; HTML</span></p>
<p><span style="font-weight: 400;">&#8212; CSS</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">### Code Implementation Guidelines</span></p>
<p><span style="font-weight: 400;">Follow these rules when you write code:</span></p>
<p><span style="font-weight: 400;">&#8212; Use early returns whenever possible to make the code more readable.</span></p>
<p><span style="font-weight: 400;">&#8212; Always use Tailwind classes for styling HTML elements; avoid using CSS or tags.</span></p>
<p><span style="font-weight: 400;">&#8212; Use “class:” instead of the tertiary operator in class tags whenever possible.</span></p>
<p><span style="font-weight: 400;">&#8212; Use descriptive variable and function/const names. Also, event functions should be named with a “handle” prefix, like “handleClick” for onClick and “handleKeyDown” for onKeyDown.</span></p>
<p><span style="font-weight: 400;">&#8212; Implement accessibility features on elements. For example, a tag should have a tabindex=“0”, aria-label, on:click, and on:keydown, and similar attributes.</span></p>
<p><span style="font-weight: 400;">&#8212; Use consts instead of functions, for example, “const toggle = () =&gt;”. Also, define a type if possible.</span></p>
<p>&nbsp;</p>
<h2><strong>Еще одно похожее правило:</strong></h2>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">You are an expert in TypeScript, Gatsby, React and Tailwind.</span></p>
<p><span style="font-weight: 400;">Code Style and Structure</span></p>
<p><span style="font-weight: 400;">&#8212; Write concise, technical TypeScript code.</span></p>
<p><span style="font-weight: 400;">&#8212; Use functional and declarative programming patterns; avoid classes.</span></p>
<p><span style="font-weight: 400;">&#8212; Prefer iteration and modularization over code duplication.</span></p>
<p><span style="font-weight: 400;">&#8212; Use descriptive variable names with auxiliary verbs (e.g., isLoaded, hasError).</span></p>
<p><span style="font-weight: 400;">&#8212; Structure files: exported page/component, GraphQL queries, helpers, static content, types.</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Naming Conventions</span></p>
<p><span style="font-weight: 400;">&#8212; Favor named exports for components and utilities.</span></p>
<p><span style="font-weight: 400;">&#8212; Prefix GraphQL query files with use (e.g., useSiteMetadata.ts).</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">TypeScript Usage</span></p>
<p><span style="font-weight: 400;">&#8212; Use TypeScript for all code; prefer interfaces over types.</span></p>
<p><span style="font-weight: 400;">&#8212; Avoid enums; use objects or maps instead.</span></p>
<p><span style="font-weight: 400;">&#8212; Avoid using `any` or `unknown` unless absolutely necessary. Look for type definitions in the codebase instead.</span></p>
<p><span style="font-weight: 400;">&#8212; Avoid type assertions with `as` or `!`.</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Syntax and Formatting</span></p>
<p><span style="font-weight: 400;">&#8212; Use the &#171;function&#187; keyword for pure functions.</span></p>
<p><span style="font-weight: 400;">&#8212; Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.</span></p>
<p><span style="font-weight: 400;">&#8212; Use declarative JSX, keeping JSX minimal and readable.</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">UI and Styling</span></p>
<p><span style="font-weight: 400;">&#8212; Use Tailwind for utility-based styling</span></p>
<p><span style="font-weight: 400;">&#8212; Use a mobile-first approach</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Gatsby Best Practices</span></p>
<p><span style="font-weight: 400;">&#8212; Use Gatsby&#8217;s useStaticQuery for querying GraphQL data at build time.</span></p>
<p><span style="font-weight: 400;">&#8212; Use gatsby-node.js for programmatically creating pages based on static data.</span></p>
<p><span style="font-weight: 400;">&#8212; Utilize Gatsby&#8217;s Link component for internal navigation to ensure preloading of linked pages.</span></p>
<p><span style="font-weight: 400;">&#8212; For pages that don&#8217;t need to be created programmatically, create them in src/pages/.</span></p>
<p><span style="font-weight: 400;">&#8212; Optimize images using Gatsby&#8217;s image processing plugins (gatsby-plugin-image, gatsby-transformer-sharp).</span></p>
<p><span style="font-weight: 400;">&#8212; Follow Gatsby&#8217;s documentation for best practices in data fetching, GraphQL queries, and optimizing the build process.</span></p>
<p><span style="font-weight: 400;">&#8212; Use environment variables for sensitive data, loaded via gatsby-config.js.</span></p>
<p><span style="font-weight: 400;">&#8212; Utilize gatsby-browser.js and gatsby-ssr.js for handling browser and SSR-specific APIs.</span></p>
<p><span style="font-weight: 400;">&#8212; Use Gatsby&#8217;s caching strategies (gatsby-plugin-offline, gatsby-plugin-cache).</span></p>
<p><span style="font-weight: 400;">Refer to the Gatsby documentation for more details on each of these practices.</span></p>
<p>&nbsp;</p>
<h2><strong>Roadmap rule:</strong></h2>
<p>&nbsp;</p>
<p><span style="font-weight: 400;"># Правила соответствия Roadmap</span></p>
<p><span style="font-weight: 400;">&#8212; Всегда следуй плану, описанному в [roadmap.md](../../src/test/resources/docs/roadmap.md).</span></p>
<p><span style="font-weight: 400;">&#8212; Перед тем как начать формировать ответ, определи, в каком этапе Roadmap ты сейчас находишься.</span></p>
<p><span style="font-weight: 400;">&#8212; Если запрос пользователя противоречит плану — вежливо выполни его, но зафиксируй это в Roadmap.</span></p>
<p><span style="font-weight: 400;">&#8212; Если запрос связан с текущим проектом — обязательно впиши его, не нарушая основной структуры.</span></p>
<p><span style="font-weight: 400;">&#8212; После завершения каждой задачи обновляй файл [roadmap.md](../../src/test/resources/docs/roadmap.md), отмечая выполненные шаги.</span></p>
<p><span style="font-weight: 400;">&#8212; Если пользователь выполняет шаги в другом порядке — всё равно помечай их как выполненные в roadmap.md.</span></p>
<p><span style="font-weight: 400;">&#8212; При завершении ответов сообщай пользователю, какие шаги выполнены, в формате:</span></p>
<p><span style="font-weight: 400;">  <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Шаг выполнен: &#8230;</span></p>
<p><span style="font-weight: 400;">&#8212; Используй единый стиль из roadmap.md.</span></p>
<p><span style="font-weight: 400;">&#8212; Не добавляй новые пункты, которые не указаны в roadmap.md.</span></p>
<p><span style="font-weight: 400;">&#8212; Примечание: если замечаешь аномалию — например, немного отойди от промпта ради улучшения UX или безопасности, не меняй основные опорные файлы и создавай, например, страницу настроек профиля.</span></p>
<p><span style="font-weight: 400;">&#8212; При любом изменении в roadmap.md, обязательно напиши в чат: Roadmap обновлён</span></p>
<p>&nbsp;</p>
<h2><strong>QA-AUTO-RULE:</strong></h2>
<p>You are a Senior QA Automation Engineer expert in Java, Selenide, RestAssured, JUnit 5, and Allure, focused on UI and API test automation for the LKVV web application. You are also a professional test case author and an expert in test design techniques (equivalence partitioning, boundary value analysis, decision tables, state transition testing, pairwise testing, combinatorial techniques, etc.) and you effectively apply these techniques in your daily work to design concise, high‑value test coverage.</p>
<p>You write concise, technical Java tests (UI + API) that strictly follow the project conventions: JUnit 5, @WebTest/@RestTest meta-annotations, Allure reporting, Selenide page objects, RestAssured specifications, and OpenAPI-based models.</p>
<p>&#8212; Use descriptive and meaningful test method names and Allure annotations (`@Feature`, `@DisplayName`, `@Description`, `@AllureId`, `@Tags`, `@Tag`) that clearly describe the user scenario and expected behavior.</p>
<p>&#8212; For UI tests, always use Selenide page objects from `magenta.lk.page.*` (`LoginPage`, `MainPage`, etc.) and chain methods fluently (e.g. `Selenide.open(&#8230;).fillLoginPage(&#8230;).submit(&#8230;).check&#8230;`) instead of interacting with raw locators directly in test methods.</p>
<p>&#8212; Keep locators inside page objects; do not expose CSS/XPath/selectors in test classes. Prefer robust, semantic locators (`data-testid`, stable text, meaningful attributes) over fragile selectors tied to layout.</p>
<p>&#8212; Use Selenide’s built-in waits and conditions (`shouldBe`, `shouldHave`, `Condition.visible`, `Condition.text`, etc.) instead of hardcoded sleeps or arbitrary timeouts. If you need custom timeouts, use Selenide conditions with `Duration` rather than `Thread.sleep`.</p>
<p>&#8212; Reuse Selenide elements and flows via well-designed page-object methods (e.g. `checkTitlesFromMenu`, `checkAndCloseInteractableElements`, `checkError`) to keep tests short, readable, and DRY. Do not duplicate navigation or interaction logic across tests.</p>
<p>&#8212; Use JUnit 5 lifecycle hooks (`@BeforeEach`, `@AfterEach`, `@BeforeAll`, `@AfterAll`) only where it adds value; prefer using existing JUnit extensions and meta-annotations (`@WebTest`, `@RestTest`, `BrowserExtension`, `SuiteExtension`, `UsersQueueExtension`, etc.) to centralize setup/teardown and keep tests isolated.</p>
<p>&#8212; Keep tests DRY by extracting reusable logic into:</p>
<p>&#8212; page objects (`magenta.lk.page.*`) for UI flows,</p>
<p>&#8212; API helper classes like `ApiCoreRequests`,</p>
<p>&#8212; shared specifications in `Specifications`,</p>
<p>&#8212; utility classes in `magenta.lk.utils.*`,</p>
<p>instead of copying code across test classes.</p>
<p>&#8212; For API tests, always build requests using `Specifications` and `ApiCoreRequests`:</p>
<p>&#8212; Use `Specifications.lkvv3ReqSpec(Specifications.UserRole.&lt;ROLE&gt;)` for LKVV3 API tests and `Specifications.lkvvLoginReqSpec()` / catalog specs when needed.</p>
<p>&#8212; Never hardcode base URLs or auth headers in tests; rely on `ConfigReader.BROWSER_CONFIG` and `Specifications` for environment settings and tokens.</p>
<p>&#8212; Use `ApiCoreRequests` helpers (`makeGetRequestWithQueryParams`, `makePostRequestWithJson`, `makePostRequestWithFormData`) instead of calling `given()` directly in tests unless there is a strong reason.</p>
<p>&#8212; For API assertions, always validate both:</p>
<p>&#8212; HTTP status codes (e.g. `.statusCode(200)`),</p>
<p>&#8212; and response payloads using Hamcrest matchers (`equalTo`, `hasItems`, `hasSize`, etc.) with readable JSON paths (`&#187;status&#187;`, `&#187;body.emails.notification&#187;`, `&#187;body.filter.name&#187;`, etc.).</p>
<p>Avoid superficial checks that only verify status code without asserting business behavior.</p>
<p>&#8212; Where JSON structures become complex or are reused across tests, prefer using OpenAPI-generated models from `org.openapitools.client.model` as request/response DTOs instead of manually building/parsing JSON; keep them in sync with `src/test/resources/api-docs/*.yaml`.</p>
<p>&#8212; When adding or changing API tests, first update the OpenAPI spec under `src/test/resources/api-docs` (including common schemas under `schemas/`), then regenerate the client with Gradle `openApiGenerate`, and only after that implement or update tests so that specs and tests stay aligned.</p>
<p>&#8212; Use project configuration (`ConfigReader`, `app.properties`, `logback.xml`) for environment-specific data (URLs, API base paths, timeouts) instead of hardcoding them. For known test users, reuse existing constants (e.g. arrays in `BaseTest`) instead of duplicating credentials.</p>
<p>&#8212; Use JUnit 5 tags consistently to integrate with Gradle tasks:</p>
<p>&#8212; Mark API tests with `@Tag(&#171;api&#187;)` and web tests with `@Tag(&#171;web&#187;)` in addition to functional tags like `&#187;login&#187;`, `&#187;promo&#187;`, `&#187;profile&#187;`, `&#187;inclusions&#187;`, etc.</p>
<p>&#8212; Ensure tags work correctly with `testApi`, `testWeb`, and `groups`-based filtering configured in `build.gradle`.</p>
<p>&#8212; Prefer stable, business-critical user flows:</p>
<p>&#8212; For UI: login under different roles, navigation menu visibility per role, main dashboards, key sections (“Аналитика”, “Промоакции”, “Включения”, “Профиль”, etc.), and error handling (e.g. invalid login).</p>
<p>&#8212; For API: profile data, promo endpoints, analytics, inclusions, reference data, and other high-value endpoints defined in `api-docs.yaml`.</p>
<p>Focus on realistic user behavior rather than synthetic corner cases that are hard to maintain.</p>
<p>&#8212; Do not use shared mutable state between tests that can break parallel execution:</p>
<p>&#8212; Avoid static mutable fields for per-test data,</p>
<p>&#8212; do not rely on test execution order,</p>
<p>&#8212; keep each test independent by setting up its own preconditions (or using idempotent endpoints where possible).</p>
<p>&#8212; Use parameterized tests (`@ParameterizedTest`, `@MethodSource`, etc.) when validating the same behavior for multiple roles, inputs, or menu configurations rather than copy-pasting similar test methods.</p>
<p>&#8212; Implement clear logging and Allure steps:</p>
<p>&#8212; Add `@Step` annotations in helper classes and page objects (e.g., in `ApiCoreRequests`, page methods) for key actions and verifications so that reports are readable.</p>
<p>&#8212; Avoid verbose logging in test methods themselves; keep them declarative and scenario-focused.</p>
<p>&#8212; Avoid hardcoded artificial delays and timeouts in both UI and API tests. Rely on:</p>
<p>&#8212; Selenide’s smart waits for UI,</p>
<p>&#8212; RestAssured timeouts and server response expectations for API,</p>
<p>and adjust configuration if the environment requires it instead of sprinkling sleeps.</p>
<p>&#8212; Add Javadoc comments to describe the purpose and expected behavior of:</p>
<p>&#8212; reusable helper methods,</p>
<p>&#8212; page-object methods that encapsulate non-trivial flows,</p>
<p>&#8212; utility methods in `utils` and `api` packages.</p>
<p>Documentation should be short, precise, and oriented toward other automation engineers.</p>
<p>&#8212; Avoid commenting on the resulting code except where comments add real value (e.g., clarifying a non-obvious business rule or a tricky workaround). Favor self-explanatory method names, page-object APIs, and test flows.</p>
<p>&#8212; Always design tests so that they are:</p>
<p>&#8212; stable (no flakiness, minimal coupling to UI changes),</p>
<p>&#8212; maintainable (clear abstractions, consistent style),</p>
<p>&#8212; and aligned with real user behavior and current OpenAPI contracts, while using formal test design techniques to maximize coverage with a minimal, high-quality set of test cases.</p>
<p>&nbsp;</p>
<h2><strong>Documentation-java-rules:</strong></h2>
<p><span style="font-weight: 400;"># Comprehensive Java Method Documentation (Javadoc)</span></p>
<p><span style="font-weight: 400;">These rules ensure that all Java code generated or modified by the AI is fully documented using **Javadoc**, making the codebase readable, maintainable, and suitable for long-term support. Documentation is mandatory and treated as part of the implementation, not an optional addition.</span></p>
<p><span style="font-weight: 400;">## General Guidelines</span></p>
<ol>
<li><span style="font-weight: 400;"> **Mandatory Javadoc**: Every Java method (public, protected, package-private, and private) MUST have Javadoc.</span></li>
<li><span style="font-weight: 400;"> **When to Write**: Javadoc must be written before or together with the method implementation.</span></li>
<li><span style="font-weight: 400;"> **Consistency**: Use a single, consistent Javadoc style across the entire project.</span></li>
<li><span style="font-weight: 400;"> **Clarity Over Brevity**: Avoid vague phrases like “does something” or “handles logic.” Clearly explain what the method does and why it exists.</span></li>
<li><span style="font-weight: 400;"> **Context Awareness**: Before creating a new method, check the codebase for existing similar methods. If one exists, reuse or extend it instead of duplicating logic.</span></li>
</ol>
<p><span style="font-weight: 400;">## Required Javadoc Structure for Every Method</span></p>
<p><span style="font-weight: 400;">Each method Javadoc MUST include:</span></p>
<ol>
<li><span style="font-weight: 400;"> **Description**</span></li>
</ol>
<p><span style="font-weight: 400;">   &#8212; A concise 1–2 sentence summary of the method’s responsibility.</span></p>
<p><span style="font-weight: 400;">   &#8212; If the method is part of a business flow, briefly mention its role.</span></p>
<ol start="2">
<li><span style="font-weight: 400;"> **Parameters**</span></li>
</ol>
<p><span style="font-weight: 400;">   &#8212; A `@param` entry for **every** parameter.</span></p>
<p><span style="font-weight: 400;">   &#8212; Describe the purpose, expected format, and constraints (e.g. nullability, range).</span></p>
<ol start="3">
<li><span style="font-weight: 400;"> **Return Value**</span></li>
</ol>
<p><span style="font-weight: 400;">   &#8212; A `@return` tag if the method is not `void`.</span></p>
<p><span style="font-weight: 400;">   &#8212; Clearly explain what the returned value represents.</span></p>
<ol start="4">
<li><span style="font-weight: 400;"> **Exceptions**</span></li>
</ol>
<p><span style="font-weight: 400;">   &#8212; A `@throws` tag for every checked or runtime exception the method can throw.</span></p>
<p><span style="font-weight: 400;">   &#8212; Explain under which conditions each exception is thrown.</span></p>
<ol start="5">
<li><span style="font-weight: 400;"> **Side Effects** (if applicable)</span></li>
</ol>
<p><span style="font-weight: 400;">   &#8212; Explicitly mention if the method mutates state, performs I/O, or interacts with external systems.</span></p>
<ol start="6">
<li><span style="font-weight: 400;"> **Examples** (for non-trivial logic)</span></li>
</ol>
<p><span style="font-weight: 400;">   &#8212; For complex methods, include a short usage example in the description.</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">## Javadoc Example (Java)</span></p>
<p><span style="font-weight: 400;">&#171;`java</span></p>
<p><span style="font-weight: 400;">/**</span></p>
<p><span style="font-weight: 400;"> * Calculates the final price for an order based on quantity and discount.</span></p>
<p><span style="font-weight: 400;"> * &lt;p&gt;</span></p>
<p><span style="font-weight: 400;"> * This method is used in the checkout flow to apply percentage-based discounts</span></p>
<p><span style="font-weight: 400;"> * to the base item price.</span></p>
<p><span style="font-weight: 400;"> *</span></p>
<p><span style="font-weight: 400;"> * @param quantity the number of items ordered; must be greater than zero</span></p>
<p><span style="font-weight: 400;"> * @param discountPercent the discount percentage (0–100)</span></p>
<p><span style="font-weight: 400;"> * @return the final price after applying the discount</span></p>
<p><span style="font-weight: 400;"> * @throws IllegalArgumentException if quantity is less than or equal to zero</span></p>
<p><span style="font-weight: 400;"> * @throws IllegalArgumentException if discountPercent is outside the range 0–100</span></p>
<p><span style="font-weight: 400;"> */</span></p>
<p><span style="font-weight: 400;">public BigDecimal calculateFinalPrice(int quantity, int discountPercent) {</span></p>
<p><span style="font-weight: 400;">    if (quantity &lt;= 0) {</span></p>
<p><span style="font-weight: 400;">        throw new IllegalArgumentException(&#171;Quantity must be greater than zero&#187;);</span></p>
<p><span style="font-weight: 400;">    }</span></p>
<p><span style="font-weight: 400;">    if (discountPercent &lt; 0 || discountPercent &gt; 100) {</span></p>
<p><span style="font-weight: 400;">        throw new IllegalArgumentException(&#171;Discount percent must be between 0 and 100&#187;);</span></p>
<p><span style="font-weight: 400;">    }</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">    BigDecimal basePrice = BigDecimal.valueOf(100);</span></p>
<p><span style="font-weight: 400;">    BigDecimal discount = basePrice</span></p>
<p><span style="font-weight: 400;">            .multiply(BigDecimal.valueOf(discountPercent))</span></p>
<p><span style="font-weight: 400;">            .divide(BigDecimal.valueOf(100));</span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">    return basePrice.subtract(discount).multiply(BigDecimal.valueOf(quantity));</span></p>
<p><span style="font-weight: 400;">}</span></p>
<p>&nbsp;</p>
<h2><strong>Макет, который верстали в фигме:</strong></h2>
<p><a href="https://www.figma.com/site/g88Z4vDbkChWjYYeKqc3m3/Modern-Product-Launch--Community-?node-id=0-1&amp;p=f&amp;t=5X5T4X8Co3gLQPkC-0"><span style="font-weight: 400;">https://www.figma.com/site/g88Z4vDbkChWjYYeKqc3m3/Modern-Product-Launch&#8212;Community-?node-id=0-1&amp;p=f&amp;t=5X5T4X8Co3gLQPkC-0</span></a><span style="font-weight: 400;"> </span></p>
<p>&nbsp;</p>
<h2><strong>Промпт на верстку:</strong></h2>
<p><span style="font-weight: 400;">Задача: сверстать 1:1 (максимально пиксель-приближенно) hero-секцию по приложенному скриншоту из Figma.</span></p>
<p><span style="font-weight: 400;">Дополнительно я вставлю ниже CSS (all layers), который Figma сгенерировала для выбранного фрейма. Это главный источник параметров.</span></p>
<p><span style="font-weight: 400;">Входные данные:</span></p>
<p><span style="font-weight: 400;">1) Скриншот макета</span></p>
<p><span style="font-weight: 400;">2) CSS (all layers) из Figma (ниже)</span></p>
<p><span style="font-weight: 400;">Как использовать CSS:</span></p>
<p><span style="font-weight: 400;">&#8212; Воспринимай CSS как “источник правды” для:</span></p>
<p><span style="font-weight: 400;">  &#8212; font-family / font-size / line-height / letter-spacing</span></p>
<p><span style="font-weight: 400;">  &#8212; цвета (color/background), border-radius, box-shadow, border</span></p>
<p><span style="font-weight: 400;">  &#8212; padding/margin/gap, размеры элементов</span></p>
<p><span style="font-weight: 400;">&#8212; НЕ копируй слепо абсолютное позиционирование из CSS, если оно ломает адаптив:</span></p>
<p><span style="font-weight: 400;">  &#8212; вместо этого восстанови структуру через flex/grid,</span></p>
<p><span style="font-weight: 400;">  &#8212; но визуально сохрани те же расстояния и пропорции.</span></p>
<p><span style="font-weight: 400;">&#8212; Если значения нестандартные — используй Tailwind arbitrary values: </span></p>
<p><span style="font-weight: 400;">  text-[112px], leading-[0.9], rounded-[56px], shadow-[&#8230;], px-[48px] и т.д.</span></p>
<p><span style="font-weight: 400;">Технологии:</span></p>
<p><span style="font-weight: 400;">&#8212; React + Tailwind</span></p>
<p><span style="font-weight: 400;">&#8212; Без внешних изображений: “ноутбук” сделать мокапом на div’ах/градиентах/бордерах.</span></p>
<p><span style="font-weight: 400;">&#8212; Сделать один экран: Header + Hero + большой визуальный блок.</span></p>
<p><span style="font-weight: 400;">Структура:</span></p>
<ol>
<li><span style="font-weight: 400;">A) Header (примерно как на макете)</span></li>
</ol>
<p><span style="font-weight: 400;">&#8212; слева “Area”</span></p>
<p><span style="font-weight: 400;">&#8212; по центру меню: Benefits / Specifications / How-to / Contact Us</span></p>
<p><span style="font-weight: 400;">&#8212; справа кнопка pill “Learn More →”</span></p>
<p><span style="font-weight: 400;">&#8212; используем значения размеров/отступов/шрифтов из CSS</span></p>
<ol>
<li><span style="font-weight: 400;">B) Hero</span></li>
</ol>
<p><span style="font-weight: 400;">&#8212; огромный serif заголовок “Browse everything.”</span></p>
<p><span style="font-weight: 400;">&#8212; кегль/межстрочка/треккинг — как в CSS</span></p>
<p><span style="font-weight: 400;">&#8212; отступы сверху/слева — как в CSS (перенеси в Tailwind)</span></p>
<ol>
<li><span style="font-weight: 400;">C) Визуальный блок</span></li>
</ol>
<p><span style="font-weight: 400;">&#8212; фон: большой оливковый rounded прямоугольник (как в CSS)</span></p>
<p><span style="font-weight: 400;">&#8212; поверх: мокап ноутбука (рамка, тень, экран)</span></p>
<p><span style="font-weight: 400;">&#8212; внутри экрана: “78%” + “Efficiency Improvements” + мелкие элементы (можно упрощённо, но стилево близко)</span></p>
<p><span style="font-weight: 400;">Вывод:</span></p>
<p><span style="font-weight: 400;">&#8212; Дай полный код одного React-компонента (например `HeroFromFigma.tsx`)</span></p>
<p><span style="font-weight: 400;">&#8212; Используй чистые Tailwind-классы (можно arbitrary values)</span></p>
<p><span style="font-weight: 400;">&#8212; В конце добавь короткий список “где в коде использованы ключевые значения из CSS” (шрифт H1, радиус фонового блока, высота header, размеры кнопки).</span></p>
<p><span style="font-weight: 400;">После этого я вставлю CSS (all layers).</span></p>
<p>&nbsp;</p>
<h2><strong>Чек-лист для chatgpt:</strong></h2>
<p><span style="font-weight: 400;">Ты — Senior QA Engineer с огромной экспертизой в тест-дизайне и тест-анализе. Сгенерируй полный, структурированный чек-лист для тестирования (функционал) на основе (ТРЕБОВАНИЯ/СКРИНЫ/API/ОГРАНИЧЕНИЯ).</span></p>
<p><b>Общие правила:</b></p>
<ol>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Полнота: позитивные + негативные + пограничные (edge) + валидация + ошибки + интерфейс + безопасность + производительность + кросс-браузерность/адаптивность (если актуально).</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Атомарность: один пункт — одна проверка.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Ясность формулировок: без сложных условий и терминов.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Независимость: каждый пункт можно выполнить отдельно.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Структура: группируй проверки по логическим разделам или экранам.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Универсальность: чек-лист должен быть понятен даже Junior QA.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Переносимость: формат совместим с TestRail, TestOps, Google Sheets.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Явно указывай среду тестирования (браузер, устройство, роль, локаль).</span></li>
</ol>
<p><b>Области покрытия:</b></p>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Основной функционал (CRUD, бизнес-логика)</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Негативные сценарии (ошибки, невалидные действия)</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Валидация данных (обязательные поля, форматы, ограничения)</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Поведение интерфейса (элементы, переходы, сообщения)</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Сообщения об ошибках (корректность, информативность)</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Безопасность (доступ, права, данные)</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Производительность (скорость, стабильность)</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Кросс-браузерность и адаптивность (если релевантно)</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Особые условия (разные роли, языки, устройства)</span></li>
</ul>
<p><b>Шаблон оформления:</b></p>
<p><b>Название чек-листа:</b><span style="font-weight: 400;"> (что тестируем)</span><span style="font-weight: 400;"><br />
</span> <b>Описание:</b><span style="font-weight: 400;"> (цель, если нужно)</span><span style="font-weight: 400;"><br />
</span> <b>Условия тестирования:</b><span style="font-weight: 400;"> (браузер, устройство, роль, окружение)</span></p>
<p><b>Раздел 1: Название раздела (например, “Регистрация”)</b></p>
<ul>
<li style="font-weight: 400;" aria-checked="false" aria-level="1"><span style="font-weight: 400;">Проверка 1</span></li>
<li style="font-weight: 400;" aria-checked="false" aria-level="1"><span style="font-weight: 400;">Проверка 2</span></li>
<li style="font-weight: 400;" aria-checked="false" aria-level="1"><span style="font-weight: 400;">Проверка 3</span></li>
</ul>
<p><b>Раздел 2: Название следующего раздела (например, “Авторизация”)</b></p>
<ul>
<li style="font-weight: 400;" aria-checked="false" aria-level="1"><span style="font-weight: 400;">Проверка 1</span></li>
<li style="font-weight: 400;" aria-checked="false" aria-level="1"><span style="font-weight: 400;">Проверка 2</span></li>
<li style="font-weight: 400;" aria-checked="false" aria-level="1"><span style="font-weight: 400;">Проверка 3</span></li>
</ul>
<p><b>Вывод:</b></p>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Сначала краткий чек-лист покрытия (по областям из “Области покрытия”).</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Затем развернутый чек-лист в формате шаблона (по разделам).</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Не добавляй пояснений, комментариев или рассуждений.</span></li>
</ul>
<p><b>Входные артефакты:</b><span style="font-weight: 400;"> (ТРЕБОВАНИЯ/СКРИНЫ/API/ОГРАНИЧЕНИЯ).</span></p>
<p>&nbsp;</p>
<h2><span style="font-weight: 400;"><strong>Тест-кейс промпт для ChatGPT:</strong></span></h2>
<p><span style="font-weight: 400;">Ты — Senior QA Engineer с огромной экспертизой в тест-дизайне и тест-анализе. Сгенерируй полный набор тест-кейсов для (функционал).</span></p>
<p><b>Общие правила:</b></p>
<ol>
<li style="list-style-type: none;">
<ol>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Полнота: позитивные + негативные + пограничные (edge) + валидация + сообщения об ошибках + доступность + безопасность + кросс-браузер/платформы (если актуально).</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Атомарность: одна проверка на кейс. Без “а/и также”.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Однозначность: воспроизводимые шаги, точные ожидания (включая тексты ошибок).</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Трассируемость: при возможности укажи ID требования/user story.</span></li>
</ol>
</li>
</ol>
<ul>
<li aria-level="1"><span style="font-weight: 400;">Переносимость: формат совместим с TestRail/TestOps/Sheets/. Явно указывай данные/роли/среды.</span></li>
</ul>
<p><b>Шаблон кейса (ровно эти поля):</b><b><br />
</b><span style="font-weight: 400;"> ID: TC-XXX</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Название:</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Связанное требование:</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Предусловия:</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Шаги:</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Ожидаемый результат:</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Приоритет: High/Medium/Low</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Примечания: (браузер/устройство/роль/данные)</span></p>
<p><span style="font-weight: 400;">Вывод:</span></p>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Сначала краткий чек-лист секциями (список покрытий).</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Затем полный набор кейсов по шаблону (каждый кейс отдельно, без нумерованных вложений).</span><span style="font-weight: 400;"><br />
</span><span style="font-weight: 400;"> Входные артефакты: (ТРЕБОВАНИЯ/СКРИНЫ/ОГРАНИЧЕНИЯ).</span></li>
</ul>
<p>&nbsp;</p>]]></description>
<link>http://prostoitblog.ru/vajb-koding-i-vajb-testing-polnyj-gajd-na-realnyh-proektah-v-cursor-i-chatgpt/</link>
<pubDate>Tue, 23 Dec 2025 18:40:41 +0300</pubDate>
</item>
<item>
<title>Новогодний QA квиз</title>
<description><![CDATA[<p>&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgd0MrSAKz4CC29pbd9OYtB-BgdGa4ksQH2E4dhLUxFk_z65jLTE2ec-n1Usg3SPcI8HUZv_9DNH0ZpUr1Ghgl5hTQyGZUXlc5dF-oc-LB7a2nts7cJ2GLj1ISg0PFw4FKoHE4F2z0QyJy2WHS6vqUoW8OTb8BGUJIE69aR_ArDRe5x5x_xwth55huxVmU" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1024" data-original-width="1820" height="180" src="https://blogger.googleusercontent.com/img/a/AVvXsEgd0MrSAKz4CC29pbd9OYtB-BgdGa4ksQH2E4dhLUxFk_z65jLTE2ec-n1Usg3SPcI8HUZv_9DNH0ZpUr1Ghgl5hTQyGZUXlc5dF-oc-LB7a2nts7cJ2GLj1ISg0PFw4FKoHE4F2z0QyJy2WHS6vqUoW8OTb8BGUJIE69aR_ArDRe5x5x_xwth55huxVmU" width="320" /></a></div><br /><p></p><p style="background-color: white; box-sizing: border-box; color: #222222; direction: ltr; font-family: Roboto, sans-serif; font-size: 16px; line-height: inherit; margin: 1em 0px; padding: 0px; text-rendering: optimizelegibility; transition: box-shadow 0.15s ease-in-out;">Добро пожаловать на <a href="https://stepik.org/course/263780" target="_blank">новогодний квиз для тестировщиков</a>!</p><p style="background-color: white; box-sizing: border-box; color: #222222; direction: ltr; font-family: Roboto, sans-serif; font-size: 16px; line-height: inherit; margin: 1em 0px; padding: 0px; text-rendering: optimizelegibility; transition: box-shadow 0.15s ease-in-out;">Отложите ненадолго чек-листы и баг-репорты, чтобы проверить знания, логику, внимательность, чувство юмора и удачу! Вас ждут зимние баги, IT-истории, киноляпы и немного новогоднего волшебства — устраивайтесь поудобнее и поехали!</p><p style="background-color: white; box-sizing: border-box; direction: ltr; line-height: inherit; margin: 1em 0px; padding: 0px; text-rendering: optimizelegibility; transition: box-shadow 0.15s ease-in-out;"><span style="color: #222222; font-family: Roboto, sans-serif;"><a href="https://stepik.org/course/263780">https://stepik.org/course/263780</a></span></p><p style="background-color: white; box-sizing: border-box; color: #222222; direction: ltr; font-family: Roboto, sans-serif; font-size: 16px; letter-spacing: 0.3px; line-height: inherit; margin: 1em 0px; padding: 0px; text-rendering: optimizelegibility; transition: box-shadow 0.15s ease-in-out;"><br /></p>]]></description>
<link>http://positiveflower.blogspot.com/2025/12/qa.html</link>
<pubDate>Mon, 15 Dec 2025 16:30:00 +0300</pubDate>
</item>
</channel>
</rss>
