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

Если честно, меня удивляет, что такая позиция в мире современного ИТ всё ещё существует. Так что я решил собрать аргументы и объяснить, почему самотестирование – важная часть рутины разработчика. Будет интересно послушать в комментариях аргументы тех, кто с этим не согласен. 

Во-первых, это стоит денег и времени

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

Итак, проверять свой код и находить баги самостоятельно — элементарно быстрее и дешевле. Это не рокет сайенс и не моё предположение, а факт, который известен с 1980-х, когда была сформулирована классическая кривая Боэма, собранная на данных IBM и других крупных ИТ-компаний. Стоимость исправления дефекта может вырасти в десятки и сотни раз по мере движения по шкале готовности задачи, и чем раньше найден баг, тем дешевле его исправить. 

Это утверждение не раз было доказано и позднее. Например, в исследовании Accelerate 2018 года, в нём приняли участие более 23 тысячи респондентов и тысячи компаний. Результат однозначный: команды, где разработчики сами тестируют свой код и используют автотесты, работают быстрее и допускают меньше багов.

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

Мне кажется, достаточно очевидно, что тестирование собственного кода – просто базовое правило. И результаты исследования, и кривая Боэма прямо опровергают идею, что разработчик «не должен ничего тестировать», наоборот, вовлечение разработчиков в тестирование – один из факторов максимально эффективного результата. 

Но если этих доводов мало, у меня есть еще один:

QA — это вам не тестировщики

Многие люди, кто даже давно работают в ИТ, действительно иногда считают, что тестировщики — это такие странные программисты, которые не пишут код сами, а только тестируют чужой. Но это большая ошибка. 

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

Примерный перечень задач современного QA включает и построение стратегии тестирования, и разработку и поддержание автотестов и тестовой инфраструктуры, и участие в проектировании системы, анализ рисков и поиск потенциальных проблем до этапа разработки, контроль качества на всех этапах жизненного цикла продукта, работа с метриками качества и стабильности, исследование пользовательских сценариев поведения, а также взаимодействие с разработчиками, аналитиками и продуктовой командой. К слову, подробно и интересно про роль QA рассказывает в своем блоге sound_right, например. Рекомендую к прочтению о роли тестировщика статью «QA умерло? Как изменяется роль тестировщиков в 2025»

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

Например, именно отдел QA у нас запускает все релизы. Не тимлиды, не разработчики и не я как CTO, а тестировщики. Так сложилось изначально, но мы регулярно пересматриваем все наши процессы и этот всегда получает положительную оценку внутреннего критерия полезности. В репозитории есть две основные ветки: тестовая и продовая. Чтобы изменения попали в прод, нужно перенести код из теста в прод. Отвечают за это QA, потому что именно они знают, какие задачи готовы, где нет проблем и что можно безопасно выкатывать. Если это знание находится у QA, то логично, что и сам процесс тоже в какой-то момент оказался в их зоне ответственности. У нас это работает отлично, но конечно так устроено далеко не везде. Во многих компаниях тестировщик заканчивает работу и дает свой апрув, что задачу можно отправлять в продакшен, а дальше процессом занимаются разработчики или тимлиды. 

Ещё один нестандартный пул задач у нашего QA – ведение продуктовой документации. Как связано тестирование и техническое описание продукта — вопрос хороший. Дело в том, что мы, как и многие, работаем с тест-кейсами: описываем сценарии, по которым должна вести себя система и возвращаемся к ним при доработках. Недавно с лидом QA мы обсуждали, что часто тест-кейсы пишутся в стол, и пришли к неожиданному выводу, что по сути накопленные у нас тест-кейсы в итоге описывают в целом, как работает платформа. Так у нас родилась идея собрать структурированную полную продуктовую документацию и протестировать, насколько она будет удобна и эффективна в работе вместо тест-кейсов. Пока это только гипотеза, но мы настроены оптимистично. Эпохальный труд по формированию всей документации при этом взяла на себя руководитель QA-отдела. Сейчас у нас уже есть документ с четкой структурой и описанием всего функционала платформы, и он постоянно дорабатывается силами QA. Круто для “тестировщиков”, да? Но мы-то давно знаем, что QA — это гораздо больше, чем поиск багов в чужом коде. 

Так и кого тут заменит ИИ

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

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

Максим Быстров

CTO SaaS-платформы TYMY

Комментарии (4)


  1. astenix
    02.04.2026 17:10

    Если ты написал код, ты понимаешь, как он должен работать, можешь быстро проверить базовые сценарии и выявить очевидные ошибки.

    Нет.

    Ну, не совсем.

    Тестировать код и тестировать приложение — это разное тестирование, их природно невозможно смешивать. В одном человеке преобладает или одно умение, или второе, поэтому у нас есть в принципе разные професии.

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

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

    Многие люди, кто даже давно работают в ИТ, действительно иногда считают, что тестировщики — это такие странные программисты, которые не пишут код сами, а только тестируют чужой.

    Средний программист а) живет в мифологии того, что всё то, что шаблонизировано — управляемо, и б) слабо понимает, что значит «тестировать приложение» и чем/как занимаются тестировщики. Он видит только репорты о дефектах и логично подразумевает, что это смысл их работы (простая логика же, уровня «пчела → мёд»), а могли бы заниматься тем, что интересно самим программистам — тестировать их интересный код…

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


    1. mbystrov_23 Автор
      02.04.2026 17:10

      поэтому таким оно будет всегда.

      Соглашусь с вами, но никто не мешает двигаться в сторону идеального мира, заранее зная, что мы туда никогда не придем=)

      Можно/нужно обучать QA и инженеров более общему видению проекта и ответственности "за проект" в целом


  1. rukhi7
    02.04.2026 17:10

    Так что я решил собрать аргументы и объяснить, почему самотестирование – важная часть рутины разработчика.

    разработчик говорит вам: "Я все протестировал! Багов нет.". Что дальше?


  1. Boethiah
    02.04.2026 17:10

    Отвечают за это QA, потому что именно они знают, какие задачи готовы, где нет проблем и что можно безопасно выкатывать

    Вы задачи разрабатываете на коленке? Все что готово к релизу, а что нет видно в соответствующих программах, например, Jira и подобных. Решение о том, что выкатывать, а что нет, так то принимается ДО регрессионных тестов, до релиза.

    Сомнительные у вас QA процессы

    А зарплата у тестировщика то соответствует уровню возложенных на них задач, которые не относятся к их сфере никаким образом?