Алмаз Саляхов

Алмаз Саляхов

Senior QA Automation Engineer / SDET — Java, Backend, API

Уфа

Шесть лет в тестировании, четыре из них — коммерческая автоматизация на Java. Строю каркасы автотестов с нуля, разбираю сложные дефекты по API, базам данных и очередям, поддерживаю CI. Отдельно занимаюсь тем, как снимать рутину с людей и отдавать её машинам.

6+ летв обеспечении качества
4+ годаавтоматизации на Java
к.т.н.кандидат технических наук
ISTQBFoundation Level, GASQ

Чем занимаюсь

Автоматизация тестирования

Каркасы автотестов с нуля на Java: REST Assured, Retrofit, Selenium, Selenide, JUnit и TestNG, Cucumber. API, веб-интерфейс, интеграции.

Данные и серверная часть

PostgreSQL и SQL, Kafka, ElasticSearch, моки внешних сервисов на WireMock. Разбор дефектов на пути от запроса до хранилища.

Инфраструктура и CI

Docker и Docker Compose, Selenoid и Grid, GitLab CI, Jenkins, TeamCity. Нагрузочные проверки через JMeter.

Разборы и находки

1 сентября 2026

Контекст для LLM собирает агент, а не сама модель

В пайплайне есть LLM-модель, и контекст она получает от агента. Агент отвечает тем, что дёргает API-инструменты компании. Дальше LLM-модель генерирует текст-ответ.

flowchart LR
    A[Агент] --> B[API-инструменты компании]
    B --> C[Контекст]
    C --> D[LLM-модель]
    D --> E[Текст-ответ]
29 августа 2026

Стенд, где баг заранее спрятан на известном слое

Собрал учебную песочницу для отработки локализации по слоям: кнопка → JavaScript → HTTP → API → БД → ответ → UI. Одиннадцать смоделированных отказов — от JS-ошибки до отправки запроса и «тихого» игнора успешного ответа до отката транзакции и ответа 201 без реальной записи. Отдельно — случаи, где клик вообще не долетает до обработчика: прозрачный слой поверх кнопки, disabled, снятый removeEventListener. Смысл упражнения — не читать код заранее, а по фактам из DevTools и БД находить последний исправный и первый неисправный слой.

22 июля 2026

Лимит на тысячу, спрятанный в фоновой функции

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

21 июля 2026

Матрица классов данных против «потыкать руками»

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

20 июля 2026

Данные не пропали: как это доказать, а не заверить

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

9 июля 2026

Честный отрицательный результат тоже результат

Планировщик, по жалобе, не переставлял порядок соединения таблиц, и разница между двумя написаниями одного запроса доходила до 3,5 раза — 1,27 с против 0,36 с на ста миллионах строк. На упрощённом синтетическом тесте той же версии баг не воспроизвёлся: планировщик сам ставил селективный джойн первым. Так и записал — на простом кейсе не подтверждается, на сложном воспроизводится. Заключение без этой оговорки было бы красивее и бесполезнее.

8 июля 2026

Два терабайта из хранилища ради пяти колонок

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

24 июня 2026

Пайплайн юнит-тестов там, где его не было

У открытого расширения апстрим собирал только релизные бинарники — прогона модульных тестов в закрытом контуре не существовало. Построил его с нуля: сборка отладочной конфигурации, прогон тестов, разбиение на восемь параллельных чанков. Быстрый режим на merge request — около 422 тестов примерно за четверть часа, полный ночной прогон со «медленными» тестами по расписанию. Один нестабильный тест исключил не наугад, а после разбора конкретного падения. Добавил уведомления о результате в командный чат и написал к ним инструкцию для нового сотрудника — пайплайн полезен ровно настолько, насколько им пользуются другие.

20 мая 2026

Искал баг с регистром имени, нашёл падение сервера

Заказчик сообщил об ошибке при создании таблицы с заглавными буквами в имени и добавлении в неё файлов из объектного хранилища. Развернул виртуальную машину с S3-совместимым хранилищем и собрал воспроизводимый сценарий. На нём сервер стабильно падал с переполнением стека и уходил в автоматическое восстановление по журналу — дважды подряд на одном и том же вызове. Заявленная проблема с регистром оказалась внешним симптомом гораздо более серьёзного дефекта.

1 июня 2025

Бэкап в объектное хранилище с шифрованием, стенд целиком в контейнерах

Собрал воспроизводимое окружение для проверки резервного копирования распределённой СУБД: кластер из нескольких узлов с автоматическим переключением, S3-совместимое хранилище с TLS и отдельным сервисом шифрования ключей, метрики. Отработал полный цикл — создание хранилища бэкапов, полная копия, намеренное разрушение данных, восстановление на точку во времени в отдельный каталог и проверка результата поднятым рядом экземпляром СУБД. Заодно развёл для себя логические и физические бэкапы: первые переносимы, вторые дают восстановление на момент времени.

1 сентября 2023

Семнадцать тысяч регрессионных сценариев на контур

Сервис подсказки и нормализации почтовых адресов проверялся не выборкой кейсов, а данными: по регрессионному пакету примерно в 17,6 тысячи сценариев на каждый из двух контуров — подсказку и валидацию, — где сценарий это один реальный адрес и проверка, что ответ не «уплыл» после обновления индекса. Ручных функциональных кейсов поверх этого — около 1,3 тысячи. Плюс профили нагрузки в трёх режимах: постоянная, плавно нарастающая и ступенчатая по конкурентности; один из прогонов — 90 запросов в секунду в течение пятнадцати минут, 232 тысячи замеров.

Опыт работы

Postgres Professional

03.2026 — 08.2026

SDET / QA Engineer — серверная часть и базы данных

  • Нашёл upstream-дефект DuckDB #23729: подготовил минимальный сценарий и подтвердил ускорение примерно в 3,5 раза после изменения порядка JOIN.
  • Матрица из 11 классов данных помогла выявить 6 дефектов преобразования типов PostgreSQL.
  • Разработал SQL-регрессионные и интеграционные тесты, добавил их в GitLab CI и разбирал падения на Linux-стендах.

PostgreSQL · SQL · Java · Python · Bash · Linux · GitLab CI · DuckDB · S3/MinIO · pg_regress

Arenadata

03.2024 — 03.2026

SDET / QA Automation Engineer — Java, API, веб

  • Сократил регресс интерфейса с 4 часов до 2,5 за счёт оптимизации ожиданий и подготовки данных.
  • Автотесты для платформы резервного копирования распределённой MPP СУБД на базе PostgreSQL Greengage DB.
  • Моки внешних сервисов на WireMock — тесты перестали зависеть от соседних систем.
  • Docker Compose для тестового стенда: MinIO, MPP-кластеры, окружения с NFS/POSIX.

Java · REST Assured · Retrofit · Selenium · Selenide · Cucumber · WireMock · Test IT · PostgreSQL · Kafka · Docker · GitLab CI · JMeter

Почтатех

12.2021 — 03.2024

Senior QA Automation Engineer / SDET — Java, API, веб

  • Построил каркас автотестов в двух вариантах: отдельным проектом и модулем внутри репозитория продукта.
  • Параллельное выполнение в CI ускорило прогоны примерно на 15%.
  • Docker-окружение для Selenium: Grid и Selenoid, автоматическое создание контейнеров с браузерами.
  • Подготовил план адаптации новых инженеров.

Java · REST Assured · Selenium · Selenide · Page Object · JUnit · TestNG · Cucumber · Jenkins · TeamCity · GitLab CI · JMeter

Витте Инновации — ГК i-Teco

01.2021 — 12.2021

QA Automation Engineer — Java, API, микросервисы

  • За шесть месяцев зарегистрировал 90 дефектов, протестировал более 200 задач и участвовал в 7 релизах.
  • Java-клиент для REST-сервисов и JDBC-клиент для PostgreSQL.

Java · REST API · JDBC · PostgreSQL · Kafka · Docker · ElasticSearch · Allure · Jenkins

ИнфоТеКС

02.2020 — 01.2021

QA Engineer — API, интеграции, Linux

  • Тестирование REST API, PostgreSQL, Linux-серверов и интеграций с PKI, CryptoPro, OCSP и TSP.

REST API · Postman · PostgreSQL · SQL · Linux/Bash · Python · JMeter · PKI

До перехода в тестирование — информационная безопасность, 2007–2017

Банк «РОССИЯ»

03.2013 — 08.2017

Главный специалист

  • Анализ кредитных и операционных рисков, расследование карточного мошенничества и нетипичных операций. Комплаенс, ПОД/ФТ, DLP.

ЛУКОЙЛ-Информ

01.2010 — 10.2012

Ведущий специалист по информационной безопасности

  • Корпоративные проекты полного цикла: требования, внедрение, тестирование, эксплуатация, третья линия поддержки.
  • PKI и ЭЦП, DLP, защита мобильных рабочих мест до 250 пользователей. Отвечал за SLA и бюджет порядка 12 млн ₽ в год.

Социнвестбанк

12.2007 — 10.2009

Ведущий специалист по информационной безопасности

  • Сопровождение банковской платёжной инфраструктуры, внедрение криптографических средств защиты, требования Банка России.

Образование и сертификаты

Высшее техническое образование в области информационной безопасности, второе высшее — финансы и кредит. Английский — B2.

Где меня читать

Связаться

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

o1mik@yandex.ru  ·  @AlmazSalyakhov