Кодер vs тестировщик (Developer vs QA): кто останется в эпоху ИИ?

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

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

Может ли исчезнуть «программист» как вид, потому что он стал мега-продвинутым QA? Или QA придётся стать «программистом» с обыденной возможностью писать мега-тесты? А может, вопрос вообще поставлен неверно и через пару лет мы будем спорить о другом?

Колесо, станок и «оно само работает»

Прогрессу сопротивляться очень сложно, а во многих моментах опасно и неполезно. На протяжении веков всегда можно найти антагонистов тому или иному занятию. Когда придумали колесо, скорее всего была масса противников опаснейшего дела — езды на повозке с умопомрачительной скоростью, быстрее, чем пеший шаг или бег на привычных двух (четырёх?!) «ногах». К чему тогда апеллировали «люди без колёс» и как через время колесо вошло в привычный быт противника прогресса?

Потом были ткацкие станки, печатный пресс, калькуляторы, компиляторы. Каждый раз крик один и тот же: «Это отберёт работу! Это обесценит ремесло! Раньше было качество, а теперь ширпотреб!» И каждый раз через поколение-два новый инструмент становился настолько обыденным, что его переставали замечать. Никто сегодня не пишет ассемблер для каждого чиха и не считает в столбик бухгалтерский баланс. Не потому что «деды были глупее», а потому что прогресс переносит рутину в автомат, а человеку оставляет то, что автомат пока не тянет: контекст, ответственность, решение.

Сейчас на слуху технология, которую называем общей фразой — Искусственный Интеллект (ИИ). Хотя в полной мере эта фраза не передаёт того состояния и предмета, которым пользуемся на данный момент. Ни одна модель не «понимает» ваш бизнес-контекст. Ни одна модель не несёт ответственности за прод, упавший в пятницу вечером. Но генерирует код — быстро, много, уверенно. И вот тут начинается самое интересное.

Как обычно, в интернетах ломаются копья от рассказов, как кто-то достиг успешного успеха, применяя ИИ, а также пухнут накопители серверов от статей и заметок, полных сарказма от подобных достижений. Одни кричат: «Я за час написал то, что раньше делал неделю!» Другие отвечают: «Ага, и три дня дебажил галлюцинации». Истина, как водится, где-то посередине и зависит от того, кто сидит за клавиатурой и что именно он просит у модели.

Где тесты, Карл?!

В моём рабочем окружении разработчики используют ИИ в разных целях: кто-то генерирует бойлерплейт, кто-то просит объяснить чужой легаси, кто-то набрасывает прототип API за пять минут. Только почему-то использование не идёт в сторону разработки через тестирование (TDD) или хотя бы простого написания тестов. Мне на это странно смотреть, ведь ИИ при правильном использовании освобождает уйму времени, генерируя код быстрее метода «слепого набора» текста. И даже не используя агентов, которые могут писать сразу в файлы, скорость разработки увеличивается кратно! Почему не уделить освобождённое время на улучшение условий своего образования, генерацию более качественного кода и написание контроля результата — тестов?

Тут важно понять одну вещь: раньше TDD был «дорогим». Написать тест до кода — значит потратить время, которое PM уже мысленно записал в фичу. Написать тест после кода — значит потратить время, которое PM тем более не закладывал. И разработчик, зажатый между спринтом и здравым смыслом, выбирал «ну ладно, потом». «Потом» не наступало никогда.

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

Часто слышал от PM и других Владельцев продукта, что «тесты не нужны, они тратят время разработчика». Ну вот, сейчас тесты можно писать и генерировать с офигенной скоростью, не затрачивая глобально «время разработчика», при этом получать важный результат — тестируемый продукт с более простой поддержкой. Где тесты, Карл?!

Только что-то снова не видно качественного программного продукта от таких PM и Владельцев. Возможно, дело было совсем в другом, а слова про трату времени разработчиков прикрывали и прикрывают совсем иные проблемы (о, ужОс — некомпетентность? нежелание разбираться в процессе? страх, что тесты вскроют то, что удобно не замечать?). И ИИ здесь ничего не изменит, если на уровне принятия решений сидит человек, для которого «качество» — это «ну вроде работает на демке».

Разработчик не QA, QA не разработчик?

Мне доводилось работать в компаниях на проектах, где QA и разработчики в открытую ненавидели друг друга, постоянно ставя палки в колёса общей цели. Да, в корпоративных (и не только) командах масса всего людского перерастает в увеличенных масштабах, в том числе и негативного.

В таких командах цветут тезисы о том, что «разработчик — это не QA и ему не нужно писать тесты», а также «QA — не разработчик и ему не нужно писать код разработки». Для меня это дико, т. к. показывает как минимум одну странность: все говорящие такое разработчики и QA в итоге пишут код. Под свои задачи, под разные ситуации, на разных IDE и редакторах — всё равно пишут код. Разработчик пишет юнит-тест, когда «ну ладно, один напишу». QA пишет автотест на Python или Java, когда «ну ладно, руками уже не успеваю». Как запускается этот код и кем — это уже другой вопрос; важно, что они его пишут. Разделяет их код только обязанность в компании, за которую им платят. Многие из них знают области друг друга и всё равно предпочитают «вражду».

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

ИИ как великий уравнитель

И вот теперь у нас есть ИИ.

Появилась уникальная возможность расти над собой и писать/генерировать код быстрее. Стирается грань между различными профессиями, и много смежного процесса, на который ранее уходило приличное количество времени, стало доступнее. Например, разработчики могут начать писать тесты, а QA — участвовать в разработке напрямую, подменяя классического разработчика. Питонист может перестать везде применять Django и использовать фреймворки на PHP или JavaScript. Мельчает и без того тонкая грань между «я бэкэндер/фронтэндер!11» и «я фулстэк!11». Хочешь попробовать разработку в mobile или gamedev — вперёд и с тестами! А тестов всё нет. (%

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

И вот тут QA-мышление перестаёт быть «функцией отдела» и становится базовым навыком любого, кто работает с ИИ. Не «я пишу автотесты в отдельном спринте», а «я проектирую проверку результата на каждом шаге генерации». Не «я ищу баги после того, как всё готово», а «я закладываю критерии приёмки до того, как промпт улетел в модель».

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

Вакансии, которые пишут нейросети (или нет)

Смотреть вакансии в компаниях (и не только) вообще стало страшно. Очень хочется верить, что современные вакансии действительно только лишь ИИ составляет и поэтому там такой треш и угар, хотя и раньше встречались перлы типа «5 лет опыта с технологией, которая вышла только вчера». Всё больше в вакансиях стало смежного процесса, прикрываемого всё тем же ИИ.

«Ищем Senior Backend Developer со знанием Kubernetes, ML-пайплайнов, опытом в QA-автоматизации, навыками UX-исследований и желанием вести подкаст компании». Знакомо? Раньше это называлось «мы не понимаем, кого ищем, но хотим одного человека вместо четырёх». Теперь это называется «в эпоху ИИ один специалист закрывает весь цикл». И ладно бы закрывал — но закрывает ли качественно?

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

Новый цикл: не код, а контроль

Процесс качественной разработки с ИИ (и без) предполагает написание ТЗ, промптов, выбор архитектурных решений — и только на последнем этапе написание/генерацию кода. Разработчик превращается в Архитектора, PM, CTO, QA, и каждый из них — разработчик. Скорее всего, чуть позже процесс приведёт к тому, что появятся другие разделения типа «ИИ-бэкендер / ИИ-фронтэндер» и обязательно «никому не нужные» мифические «ИИ-фулстэки». Только и в этом случае уровень подобных профессионалов обяжет знать массу смежных профессий, в том числе и QA, без которых невозможно в реальности контролировать результат ИИ.

Хочется верить, что мы идём к модели, где цикл выглядит примерно так:

  1. Формулировка задачи. Не «сделай мне кнопку», а описание контекста, ограничений, критериев приёмки. По сути — ТЗ, написанное человеком для себя и для модели.
  2. Проектирование проверки. До генерации кода: что значит «работает правильно»? Какие граничные условия? Что будет, если на входе null, пустой массив, отрицательное число, пользователь с двумя аккаунтами?
  3. Генерация. Собственно ИИ пишет код. Быстро. Много. Уверенно. Иногда мимо.
  4. Верификация. Запуск тестов, ревью сгенерированного, проверка на галлюцинации, на соответствие архитектуре, на безопасность. Здесь QA-мышление не просто полезно — оно критично.
  5. Итерация. Промпт уточняется, тесты дополняются, код корректируется. Не «переписать с нуля», а «подкрутить конкретное место».

И, внезапно: шаги 1, 2 и 4 — это не «написание кода». Это мышление, ответственность, контекст. То, что ИИ пока не делает сам. И то, что объединяет хорошего разработчика и хорошего QA в одного человека.

А что с джунами?

Отдельный болезненный вопрос. Если ИИ генерирует код за секунды, зачем компании джун-разработчик, который полгода пишет CRUD? Зачем джун-QA, который три месяца кликает по формам руками?

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

Джун, который с первого дня учится писать тесты к сгенерированному коду, через год будет сильнее джуна, который год переписывал бойлерплейт вручную. Но только если рядом есть тот, кто покажет, на что смотреть. И вот тут роль ментора — будь то Senior Dev или Senior QA — становится важнее, а не менее.

Вместо вывода

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

Никто не «останется» в чистом виде. Ни кодер, ни тестировщик в их классическом, окопном понимании. Останется тот, кто умеет думать о результате, а не только о своём участке конвейера. Тот, кто способен сказать: «Я сгенерировал код — и я же доказал, что он работает». Не потому что кто-то заставил. А потому что иначе — стыдно и страшно отпускать в прод.

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

🧭 А ты — встал на путь прогресса?
Или всё ещё ждёшь, что кто-то другой напишет тесты за тебя?
P.S. Если вы дочитали до конца — поделитесь в комментариях, как у вас обстоят дела с тестами и ИИ в проектах. Какие инструменты используете? Как изменился ваш рабочий процесс? 🎁

Обсуждение

💬 Есть вопросы? Пишите в Telegram-канал или на ping@ambrion.dev