Обо всём и ни о чём
36,8
рейтинг
21 июня 2013 в 16:07

Разработка → Притча о покрытии кода тестами перевод


Ранним утром программист спросил великого мастера:
— Я готов писать модульные тесты. К какому покрытию кода я должен стремиться?
Великий мастер ответил:
— Не переживай о покрытии, просто пиши хорошие тесты.
Программист улыбнулся, поклонился и ушел.

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

В конце дня пришел третий программист, и задал тот же вопрос о покрытии кода:
— Восемьдесят процентов и ни строчкой меньше! — строго ответил мастер ударяя кулаком по столу.
Третий программист улыбнулся, поклонился и ушел.

После этого ответа, к великому мастеру подошел молодой ученик:
— Великий мастер, сегодня я подслушал, как вы дали три разных ответа на один и тот же вопрос о покрытии кода. Почему?
Великий мастер встал со стула:
— Пойдем со мной возьмем свежезаваренного чая и поговорим об этом.

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

Великий мастер рассмеялся так сильно и громко, что его пузо, доказательство того что он пил не только зеленый чай, запрыгало вверх и вниз:
— Третий программист жаждет только простых решений, даже когда их нет. А после, все равно не следует им.

Молодой ученик и седой великий мастер допивали чай в задумчивом молчании…
Перевод: Alberto Savoia
Денис Потапов @PatapSmile
карма
262,0
рейтинг 36,8
Обо всём и ни о чём
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

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

  • +10
    Как раз сижу, тесты пишу и задумчиво попиваю зеленый чай
    • +4
      Мастер, а что Вы мне ответите на тот же вопрос? :)
      • +35
        Риса всегда надо варить на 1-2 порции больше на случай незваных гостей.
        • +3
          Мастер, незваный гость хуже или лучше татарина?
          • +6
            И как поступить, когда пришел татарин, которого никто не звал?
            • +5
              И объясните мне татарину, что с нами не так?
              • +1
                Такое ощущение, будто вы не слышали поговорки, что «незваный гость хуже татарина» и/или не понимаете, о чем речь. Если это правильное ощущение, то объяснить ничего не получится, увы.
              • 0
                Да все с вами так, не парьтесь. Это просто традиция, уходящая корнями видимо вот сюда.
              • НЛО прилетело и опубликовало эту надпись здесь
              • +1
                Есть анекдот такой, услышал в детстве в Казани:

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

                P.S. сам я татарин
                • 0
                  Черт, не увидел комент выше
          • +1
            Зависит от татаринов, с которыми хозяин имел дело.
          • 0
            И что делать если незваный гость — татарин?
      • +70
        Однажды к Великому мастеру пришел Простой программист и попросил его, — «о Великий мастер, научите меня писать совершенный код!» У Великого мастера в тот день было плохое настроение и он ответил, — «хорошо, я научу тебя писать совершенный код, но ты должен сначала набраться опыта, ты должен взять 1000 заданий на бирже фриансеров и выполнить их.»

        Прошел год. Простой программист снова пришел в Великому мастеру и попросил его, — «о Великий мастер, я работал день и ночь, ночь и день, на протяжении всего года и выполнил 1000 заданий с биржи фрилансеров, научите меня, пожалуйста, писать совершенный код!» В тот день Великий мастер съел несвежего риса и поэтому все его мысли были на уровне пупка Великого мастера, он ответил, — «ты уже набрался опыта, но теперь ты должен научиться терпению, ты должен в течении года поддерживать 10 проектов, написанных студентами, и продажи должны вырасти втрое!»

        Прошел еще один год. Простой программист снова пришел к Великому мастеру и попросил его, — «о Великий мастер, я поддерживал 10 проектов, которые были написаны студентами в течении года, за это время от них не отказался ни один заказчик, а продажи выросли в четыре раза, научите меня писать совершенный код!» Великий мастер был погружен в мысли, он вспомнил, как утром его обсчитали на рынке и подсунули гнилых фейхуа, поэтому он ответил, — «чтобы научится писать совершенный код ты должен преодолеть последние испытание, совершенный код требует совершенного спокойствия, поэтому ты должен заработать $1.000.000.000 чтобы ни о чем больше не беспокоиться.»

        Прошло три года. Простой программист снова пришел к Великому мастеру и попросил его, — «о Великий мастер, я основал стартап, я вышел на IPO, я пролоббировал законы закрывшие все другие стартапы, я подмял под свой проект весь сегмент рынка, и я заработал $10.000.000.000. Научите меня писать совершенный код!»

        «Ни х*я себе!» — ответил Великий мастер.
  • +41
    читал, думал — зачем тут именно «женщина-программист»?
    а потом догадался — перевод же!
    без этой политкорректности уже шагу ступить не могут
    • +63
      Третий был негром, а сам Мастер — педе… хм…
      • +25
        Будьте политкорректны,- не негром, а афроамериканцем, а Мастер — гомоамериканцем!
        • +47
          Ну а женщина — вагиноамериканка?
          • 0
            Вообще удивляюсь почему они еще вовсе не обезличили… необходимо полностью искоренить понятия он и она и оставить только ОНО… чтобы никому обидно не было.
            • 0
              Ну так до этого недалеко — в Лейпцигском университете хотят к мужчинам в женской форме обращаться.
              Пруфлик не могу вставить, наверное из-за политкорректности.
              • +9
                Эта политкорректность называется «обладателям отрицательной кармы запрещено на Хабрахабре употребление языка HTML в комментариях, поэтому теги HTML автоматически выкусываются».
                • +2
                  Мицгол, собственно из-за нее, родимой, не получилось вставить курсивом, а про тег irony как-то забылось… :)
                  • +3
                    Carma-challenged habrauser.
              • +3
                Как по мне это уже какая-то дискриминация мужчин. Без феминизма здесь явно не обошлось.
                Вот почему к мужчине и женщине нужно обращаться она? Если судить по справедливости, то нужно к мужчинам обращаться она, а к женщинам он… Хотя этим вариантом я тоже не был бы доволен
            • +1
              Таких попыток предпринимается немало. Разные авторы придумали больше десятка гендерно-нейтральных местоимений для этого. en.wikipedia.org/wiki/Gender-specific_and_gender-neutral_pronouns
            • +2
              Вообще такое уже есть, в анкетах для детей например не пишут мама и папа, пишут родитель один и родитель два.
            • +1
              Ща меня обфинят в распространении фашистской/гомофобнойэкстремиссткой литературы и отсутствии вкуса, но вот в этом сборничке lib.rus.ec/b/373948 было несколько вариантов на тему ОНО. И лично мне этот сборник понравился, кто бы что про него ни думал.
            • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                Я так думаю, что это гормоны.
                • 0
                  Ага. Мормоны.
              • 0
                Ни что иное, как политкорректность.
        • +5
          И кто вам сказал, что полит-корректно афроамериканец говорить а не негр, сами американцы? Или уже белое воспринимаете как черное, потому что каждый день это слышите?
          Люди, пожалуйста, не вносите в русский язык американизмы и их культурные особенности, у нас достаточно богатый язык, чтобы этого не делать.
          Правильно говорить негр (от испанского negro означающего «черную расу»), а не придуманное выражение вечно ущемлёнными потомками потомков рабов, которые уже не знаю как получить очередной велфер и ничего не делать.
          Негр != нигер. Есть ещё белая, европиойдная, и жёлтая, монголоидная расы. А есть ещё негретянки — негры женского пола, негретята — дети негра и негретянки.
          Афроамерикашат нет.
          • 0
            Есть еще основная австралоидная раса.
          • 0
            Тут есть небольшая проблема с использованием слова «негр» как названия расы. Америкаские темнокожие зачастую не являются негроидами в чистом виде в силу того, что они сильно перемешались с другими расами (в основновном, с представителями монолоидной и европеоидной рас). Поэтому, несмотря на то, что я сам использую в речи слово «негр», следует признать, что это не всегда корректно (я имею в виду не политкорректность, а уместность использования термина).
            Сами представители небелого населения америки удобно называют друг друга «nigga» вне зависимости от конкретной расы, однако, использования этого слова белыми считается табуированным.
            • +2
              Прикол в том, что запрет одним и разрешение другим по расовому признаку — это расизм. Так что, табу бледнолицым называть негра 'nigga' — проявление расизма.
          • 0
            Если интересует мнение «американца» то:
            Negro действительно != Nigga, тем не менее не желательно употреблять в речи и то и другое.
            Black guy, White guy, Spanish guy… и т.д. — приемлемо в разговорной речи, собственно так и говорят.
            Afro-American — практически нельзя услышать в разговорной речи, разве что только в выступлениях политиков и в официальных документах.
          • 0
            Поддерживаю!
            Это у них там они афро-американцы.
            А у нас — негры. Нас так в школе учили. И когда мы так говорим — мы никого обидеть не хотим.
            • 0
              В связи с практическим отсутствием в окружении черно-красно-бронзово-серо-зеленокожих, обычно называем мы людей либо по имени/фамилии, либо по национальному признаку (бурят, казах, чеченец, узбек, таджик, турок), за исключением некоторых обобщений (лицо кавказской национальности, лицо восточной национальности, и более оскорбительные вроде узкоглазый или черно....) Что характерно, обидный смысл создается не собственно подмеченными признаками внешности (вряд ли кого-то оскорбляет слово бледнокожий или вообще, голубоглазый). Оскорбительный смысл дополнительно специально вкладывается в определенное обозначение, как отношение не просто к группе определенной национальности или расы, а как к группе социально ущербных или ущемленных людей.

              И вот тогда, когда мы упоминаем термин, употребляемый обычно с уничижительным оттенком, мы по сути, хотим, или не хотим, используем оскорбление. Ведь, по сути, вся табуированная лексика (ненормативная, мат) так же не является оскорблением автоматически, просто чаще всего используется для брани и ругательств.

              Потому она и табуируется.

              Напоследок, анекдот. Полковники бывают трех типов. Господин полковник, товарищ полковник и эй, полковник!
    • +1
      … даже с такой постановкой вопроса не могу понять, как он их квалификацию так быстро оценил.
      • +39
        он тимлидом у них
    • +8
      Следом следует следующая мысль: именно ей предложили заглянуть в котёл (читай, «в кастрюлю»), чем оскорбил [бла бла бла бла ]…
    • +1
      С чего вы взяли, что дело именно в политкорректности? Можете уточнить это у автора, ваша интуиция здесь может ошибиться.

      Поясню. Причин делать одного программиста женщиной нет, причин делать всех программистов мужчинами нет, как и причин делать одного из программистов, например, негром. Притча не об этом ведь. Так почему вас вообще может удивить *любой* из вариантов, выбранный автором?

      EDT: Да, в переводе немного натянуто выглядит и, кстати, грамматически неправильно. Но к автору не понимаю откуда могут быть вопросы.
      • +1
        Похоже, что вы не находите в наблюдении о политкорректности никакой иронии.
    • +10
      Я не был бы готов уверенно назвать это произведение стремящимся к политкорректности.

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

      Использование этой метафоры само по себе неполиткорретно. Стало быть, употребляющее его произведение к политкорректности не стремилося (а не то не содержало бы такую метафору). Следовательно, появление женщины в этом произведении вызвано не политкорректностью, а каким-то другим устремлением автора. Ну, например, его личным желанием видеть женщин среди программистов хотя бы в количестве 20% (желание же это может быть вызвано не только соображениями политкорректности, но и какими-нибудь собственными соображениями автора — быть может, даже некоторою тяжёлою и тайною драмою в прошлом этого человека).
      • 0
        политкорректность ли тому виной или какой другой ФГМ — акцент на половой принадлежности "млекопитающего рода Homo Sapiens, занимающегося программированием, и пришедшего к Мастеру вторым" выглядит абсолютно притянутым за уши и не относящимся к сути притчи.
        впрочем, притча — она на то и притча, что каждый в ней видит своё.
        • 0
          вида Homo Sapiens, пардон
      • +2
        то объяснение, которое женщина-программист получила от Мастера, содержало в себе метафору, связанную с приготовлением пищи

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

        То есть шут с ним, что женщине положено варить рис — мужики при этом кто неумел, кто самоуверен, и толком ничего сделать не могут.
        • +3
          Мастер зато мужчина.
    • –4
      Сдается мне, батенька, что вы — мудак.
      В чем проблема с женщинами-программистами? В том, что они выше вас по классу обычно?
      К чему ваш идиотский комментарий?
      У вас проблемы из-за собственной неполноценности?
  • 0
    Можно было и другие моменты обыграть.

    На некотором этапе — например, когда тестов немного, непокрытого кода много — покрытие может быть и мотивирующим фактором: пишешь тесты, покрытие бодро увеличивается. Выделяешь покрытие по одному отдельному модулю, пишешь тесты пока не будет близко к 80-100%, переходишь к следующему.
    • +4
      Когда есть много кода, написанного без тестов, то его тестабельность частенько находится ниже плинтуса. Так, жизненные наблюдения.
  • +1
    Хорошая притча. Если по ссылочке перейти, там еще есть: www.artima.com/weblogs/viewpost.jsp?thread=203994.
  • +4
    Пиши тесты до кода и весь твой код покрыт будет.
  • +5
    Благородный муж стремится к умеренности в делах и речах, и код его не бывает покрыт тестами на 100%.

    Человек неблагородный не ведает умеренности в делах и речах, и код его бывает покрыт куда более 100%: одна часть кода бывает покрыта тестами, другая часть кода бывает покрыта матюгами, для третьей же части и то, и другое случается.
    • –1
      > Благородный муж стремится к умеренности в делах и речах, и код его не бывает покрыт тестами на 100%.

      А потом приходит время рефакторинга, и сей благородный муж начинает покрывать код матюгами.
  • 0
    В переводе бага:

    > Второй программист улыбнулась,

    Нужно «Вторая программистка улыбнулась»
    • +3
      Неа. Тогда женщин — две.
      • +1
        Хм, ну да, тоже кривовато. Я, конечно, не знаю этику переводчиков, но, возможно, стоило сделать принудительную смену пола второму персонажу, чтобы глаз не кололо.
        • +2
          Загуглил. Как ни странно, хоть так и криво — но правильно. Именно «программист сказала»
          www.gramma.ru/RUS/?id=2.5
          • +1
            Это называется «общий род». В русском языке не особо акцентируют внимание, а вот в украинском аналог «спільний» более распространён.
          • +1
            Прочитал вашу ссылку, не увидел там информации, которая говорит. что правильно «программист сказала». Я увидел следущее:

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

            Я не знаю, легко или нет образуется слово «программистка», но оно определённо образуется у меня в разуме, вот я его даже пишу на хабр и не вижу ничего такого ужасного в этом слове.

            >> Для официального наименования рода занятий, профессий женщин (например, в анкете) предпочтительнее существительные мужского рода (аспирант, лаборант).

            Прозвучавшая выше притча вряд ли является официальным документом.
            • +1
              Наверное, и так неплохо, но с «вторая» оно все-таки не согласуется.
  • +3
    Мне только что пришло в голову, что хорошо бы ещё иметь метрику типа «покрытие тестов кодом». А то бывают ситуации, когда есть несколько тестов, по сути не тестирующих ничего и всегда проходящих.
  • 0
    Закон Парето вижу в реальной жизни. 20/80. Из всего что я видел в жизни 80% всех тестов — написаны быдлокодерами для своего быдлокода, профанация, строки кода ради зарплаты и трудочасов в метрике —
    ничего, ни о чем, низачем, можно нах%й выкинуть и ничего не изменится, только компилиться чуток быстрее станет, и TFS сбавит обороты на конфликтах.

    Оставшиеся 20% интереснее, но из этих 20% Решарпер своим даже скромным статическим анализом половину возможных проблем сам бы закрыл в реалтайме кодинга предупрежденими и советами в IDE. (Я про VS и мелгомягкую платформу .Net, и если у вас достаточно оперативки, чтобы включить анализ всего солюшена вцелом в решарпере)

    Переход с ADO на LINQ to SQL — для одних радость, что стало больше кода в проектах и его тоже можно покрыть тестами как самку, заработав очков в метрике и стать альфа-самцом программирования.
    Для других радость, что кода в совокупности на самом деле стало меньше и его не надо покрывать тестами, потому-что «решарпер всё видит» и рефакторинг вдруг стал совсем идеальный.

    И кто прав?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.