К основному контенту

Почему разработчики не тестируют свой код?

На недавно прошедшем IT Global Meetup один из активистов питерского сообщества тестировщиков спросил (а может трольнул) меня: "А почему разработчики не тестируют свой код?".

Что-то я там ему ответил, но вопрос продолжал свербить и в итоге вылился в этот пост.

Это то, как я вижу себе эту проблему, которая для многих вовсе и не проблема. 

"Мнение редакции" может не совпадать с мнением "ведущих" экспертов в области разработки ПО.

Здесь не рассматриваются случаи, когда написание тестов действительно лишнее (например, прототипы или написанный код больше никогда не будет трогаться, а может и  использоваться не будет:) ). 

Причин на самом деле немного и все они тесно связаны:

1. Разработчик не знает, что он должен тестировать свой код или как это делать
Это может показаться странным, но такое действительно бывает. Особенно это касается начинающих.
Я абсолютно уверен, что этому не учат в институтах и прочих университетах (там у нас и с программированием то беда).
Этому, как правило, не учат на первом месте работы (по причинам приведенным ниже).
Если человек, обучаясь, писал сам, то сам потом и проверял - больше некому было. А на работе есть специально обученные товарищи - тестировщики. Значит, это не моя работа.

2. Разработчик знает про тестирование, но ему не дают их писать - "много времени занимает"
Кому-то может показаться это странным - но это тоже бывает. Такие товарищи подходят ко мне на конференциях, пишут вопросы в комментариях - "Я хочу делать все правильно, но мне не дают. Когда я пытаюсь что-то предлагать,  отвечают - Зачем тебе это надо? Нам некогда писать тесты." и тд. Я даже знаю, тссс, тестировщиков, которые такое говорят разработчику. Наверно за свой хлеб переживают? Часто, в этом случае, разработчики пишут тесты втихаря, но, по опыту, пользы от них (тестов) в этом случае немного.
Регулярно слышу мнение: "время разработчика стоит дороже времени тестировщика". БРЕД! (извинения за upper case) Понятно, что если говорить о квалификации большого количества тестировщиков, то стоимость их действительно ниже (на первый взгляд). Но если мы говорим о продукте, который надо поддерживать от 3 лет и выше, то итоговая стоимость неквалифицированной и продолжительной проверки каждого релиза + стоимости затраченного времени (а время деньги) будет многократно превышать стоимость правильно разработанных тестов (даже с учетом их поддержки). Кстати, тут неважно, как обзывается тот, кто эти тесты писал.

3. Разработчик знает про тестирование, но лично считает это потерей времени
"Я могу писать тесты, но тогда фича займет в 2 раза больше времени. Поэтому не буду писать" - говорит тот, кто никогда не писал и не пишет тесты. Знаете почему он неправ? Потому что на самом деле, очень часто, "с тестами" получается в 4 и больше раз времени! Особенно в начале. Но вопрос - какого времени? Что для этого разработчика (и его менеджера) понятие "Сделано"? Когда фича считается готовой к релизу? А вот тут как раз и надо посчитать это самое время и не забыть про тех.поддержку.

Вы спросите - а как же его менеджер? А никак. 
Иногда он считает разработчиков "голубой кровью" - пусть тестировщики смотрят. Тут солидарность с пунктом 2. 
Иногда он боится надавить и заставить писать с тестами - мой мегакодер (ключевое слово "кодер") обидится и уйдет. 
Иногда у него нет возможности (нет знаний) объяснить людям, зачем эти самые тесты нужны, что их "быстро без тестов" никому не нужно.

Итого: кто виноват? Правильно - менеджер!
Все описанное выше целиком и полностью лежит на совести руководителей (техлидов, менеджеров проекта и тп).

Почему? Потому что:
  • не учит, потому что,
  • не знает, как писать тесты или -
  • не ищет правильных и умных людей
  • не доверяет тем, кто сам предлагает
Не будет этого - не будут ваши разработчики писать тесты.

Что делать? Решать вопросы выше.

И да, на всякий случай, рекомендации:


Читать дальше: а если разработчики все же пишут тесты, нужны ли тестировщики?

Комментарии

  1. Хорошая картинка :)

    "время разработчика стоит дороже времени тестировщика" - по этому поводу я очень под впечатлением докладов Макса Дорофеева про эффективность разработки(https://www.youtube.com/watch?v=XDF02KmgJFE). Основная идея такая, что сравнивать надо не зарплаты и не время простоя в среднем по больнице, а анализировать эффективность на "ограничении" (т.е. том узком месте из-за которого ждут-простаивают все остальные). Иногда это может быть программист, иногда тестировщик, иногда вообще что-то другое.

    В общем, как обычно, сложно все, даже то, что кажется простым :)

    ОтветитьУдалить
  2. Да, согласен. Сложно. Но решаемо.
    Насчет "дороже" - это не мое, это что жизнь приносит. И именно поэтому надо смотреть на итоговое время, потому что часто экономия в одном месте, выливается в потери в другом. Про это Макс и говорит. Его конечно смотрел, но пусть здесь в комментах тоже будет - может кому пригодится :)

    ОтветитьУдалить
  3. Макс, есть и еще весомая причина. - "Не интересно писать тесты". Предположим человек умеет, может и писал их много и долго. Но реального выхлопа не видел. В силу краткости проектов например. И несколько утратил веру в тесты. А вот продакшен писать интересно.

    ОтветитьУдалить
  4. Ну... Ты же понимаешь ;) - это отмаза. Если так проще - то можно считать, что он пишет прототипы, которые не идут в серию. Это не боевой код, его клава не орошалась слезами заказчиков :) Тесты ради тестов тоже нафиг не нужны. Но это ты, если ты его руководитель, принимаешь решение о том, что их писать не нужно. Что возвращает нас к моим выводам.

    ОтветитьУдалить
  5. >>"время разработчика стоит дороже времени тестировщика"
    я тут недавно этот бред слышал от одного из рукоВВодителей тестирования.

    >> "Я могу писать тесты, но тогда фича займет в 2 раза больше времени. Поэтому не буду писать" - говорит тот, кто никогда не писал и не пишет тесты. Знаете почему он неправ? Потому что на самом деле, очень часто, "с тестами" получается в 4 и больше раз времени! Особенно в начале. Но вопрос - какого времени? Что для этого разработчика (и его менеджера) понятие "Сделано"? Когда фича считается готовой к релизу? А вот тут как раз и надо посчитать это самое время и не забыть про тех.поддержку.

    Эммм.... тут мне кажется прячется еще кое-что. не нужно писать тесты если ты все равно будешь переписывать код, потому что то, что на самом деле хотел заказчик никто не удосужился выяснить. Ну и дальше опять в сторону менеджера(-ов).


    И еще пара нюансов. В цепочке "вася пишет говнокод, петя делает говнотест, находим баги,все при деле" все очень хорошо и складно, кроме сроков.Если вася начинает писать через (или с помощью) тестов хороший код, а петя не находит баги серьезные баги, то встает два вопроса : 1) зачем нам нужен такой петя ? 2) где взять такого петю который действительно будет полезен?

    ОтветитьУдалить
  6. Никита, момент про Петю действительно интересный :) В самую точку.

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Полезные ресурсы для молодых (и не только) тестировщиков

сперто(с) Уже 3 месяца провожу собеседования тестировщиков (март 2016). Поначалу они просто  веселили - после 15-летнего опыта собеседования С++-разработчиков, общение с тестировщиками (чаще были "-цы") было чем-то экзотическим и забавным. Потом становилось все грустнее и грустнее, мимими закончилось. Началась печаль.

Заметки на коленке - 3. Что еще делать, если ваши тесты уже "зеленые"?

"Lately I find I'm working on automated tests that return non-binary results. Tests that neither pass nor fail" by  @noahsussman Отличная мысль, которую я ретвитил еще в 2016. Но давайте вместе подумаем, что за этим может скрываться? ( кстати, не знаю, что при этом думал Noah ) Ваши тесты прошли и прошли "успешно". Все хорошо или все же есть, куда еще посмотреть? Дальше то, что использовал я лично и то, что еще можно прикрутить дополнительно. Естественно все шаги ниже должны быть автоматизированны. 1. Контролируйте время выполнения тестов. Если набор проверок не меняется (а такое часто бывает, к сожалению), то рост времени выполнения может говорить о проблемах в продакшен коде (чаще всего) или проблемах с окружением. 2. Контроль за количеством выполняемых тестов. "Все зеленое" не значит, что сегодня выполняли те же Х тестов, что и вчера. Смешно(нет), но случается такое, что какие-то проверки "исчезают" из запуска из-за того, что у кого-то &qu

Mock vs Stub

Когда мы начали изучать модульное тестирование, то одними из первых терминов, с которыми пришлось познакомиться, стали Mock и Stub. Ниже попробуем порассуждать в чем их сходство и различие, как и для чего они применяются. Проверять работоспособность тестируемого объекта (system under test - SUT) можно двумя способами: оценивая состояние объекта или его поведение. В первом случае проверка правильности работы метода SUT заключается в оценке состояния самого SUT, а также взаимодействующих объектов, после вызова этого метода. Во-втором, мы проверяем набор и порядок действий (вызовов методов взаимодействующих объектов, других методов SUT), которое должен совершить метод SUT. Собственно, если коротко, то в одном случае используется Stub, а в другом Mock. Это объекты, которые создаются и используются взамен реальных объектов, с которым взаимодействует SUT в процессе своей работы. Теперь подробнее. Gerard Meszaros использует термин Test Double (дублер), как обозначение для объе