Тестировать, тестировать, и ещё раз тестировать!

24.10.2010

Давно уже знаю про TDD, но всё откладывал применение методики на практике. И вот вчера начал читать книжку Нила Форда «Продуктивный программист» (ссылка), прочитал уже половину — книжка небольшая. Я про неё отдельно напишу ещё, когда дочитаю, а пока про TDD, этому подходу посвящена целая глава.

Преимущества TDD

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

Кроме того, с тестами более естественным и закономерным становится процесс упрощения, что очень важно, учитывая главный императив программирования. Если бы я изначально применял TDD, некоторые мои старые функции были бы сразу похожи на те, что получились после рефакторинга Жени Сергеева. У него получилось лучше. Проще.

И не надо забывать о том, что качество обходится дешевле. Благодаря тестам делаем меньше ошибок, а если делаем — выявляем их на ранних этапах. 100% покрытие тестами на выходе даст очень качественный код, при этом с минимальными затратами ресурсов.

Цена качества

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

  1. Писать сразу валидный HTML гораздо выгодней, чем писать абы как, а потом отлавливать баги в разных браузерах. Хорошо, что я это понял очень давно, года три назад. Общий перфекционизм сыграл свою роль.
  2. Совсем оффлайн. У мамы во всей пятиэтажке летом меняли отопление. При этом сантехников управляющая компания понабрала, похоже, вообще с улицы — очень грязно и непрофессионально работали. В итоге им пришлось почти в каждой квартире потом по второму кругу подваривать протекающие стыки труб. Сами себе сделали больше работы, и принесли множество неудобств жильцам.

Вот такие дела. А как вы тестируете свои программы и скрипты? Делаете ли тесты ещё до написания кода? Какими инструментами и методиками пользуетесь?

Комментарии

  1. # samlowry

    Пример с валидным кодом демонстрирует ущербность идеи. В жизни нет идеальных методов.

    В 1000 раз скажу: vimeo.com/10922497 — человек из реального стотонного проекта. И это не какой-то редкий пример, в Викимaпии то же самое.

    Эволюция — естественна, она работает. Генная инженерия — сосёт.

  2. # Тормоз

    Ущербность какой именно идеи демонстрирует пример с валидным кодом? Работает как генная инженерия, так и костыльная эволюция, только последняя работает куда менее эффективно.

  3. # F17

    Извините, спрошу про отопление в пятиэтажке.

    Меняли старые металлические трубы на новые металлические???

    В нашей деревне уже лет десять ставят пластик который паяется. Металл+сварка=это очень дорого. А сварку используют только чтобы резать там, где болгарка не подлезет.

  4. # Тормоз

    Друже, чего это ты мне выкать стал? :) Это я, Тормоз.

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

  5. # F17

    Доброе утро!

    Сорри, ещё не проснулся, а профессиональная привычка сработала – «если не помнишь, то на Вы»

    :)

  6. # Тормоз

    У меня уже день, так что добрый день! Я за утро уже целую книгу охомячил 8-р

  7. # Evgeny Sergeev

    # samlowry: Эволюция в своей сути – это апробация мутациями. Процесс долгий и болезненный. В программировании всегда применялись и применяются методы селекции – из двух вариантов выбирают лучший и работают с ним.

  8. # samlowry

    Тормоз: ущербность рендеринга твоего валидного кода разными браузерами.

    Evgeny Sergeev: неа. Речь идёт о типичных стартапах (уж извини — как там у программистов из микрософта и прочих компаний с бюджетом, мне глубого пофиг, это для меня параллельный мир).

    Вот те пример от пацана сверху (не бога, а того, чью писанину мы тут обсуждаем): он сначала сделал продукт, теперь то одно исправит, то добавит. И так будет всегда. Он не сядет на год разрабатывать всё идеально. Так можно чужие продукты разрабатывать, не свои.

    Ток не надо про набиваемый скилл — сколько вы не будете его набивать, всё время будут появляться всякие более крутые методики «разработки через жонглирование» и «редактирования в ванне с электродами».

  9. # Тормоз

    Сэм, на этот раз ты такой бред написал, что мне даже оспаривать его лениво.

  10. # Миша: 

    валидный код писать выгодно не потому что он всеми браузерами рендерится правильно…

  11. # Тормоз

    Ох, какое многозначительное многоточие :) Почему бы не продолжить эту мысль, загадочный Миша?

  12. # Evgeny Sergeev

    samlowry, еще раз говорю и типичные стартапы и крутые проекты мелкософта делаются через селекцию – т.е. через последовательное улучшение того что есть, путем выбора наиболее оптимального результата, опять же из того, что есть.
    Тем более не понятно почему ты «качество» приравниваешь к «идеальному». Идеальных продуктов нет, а качественных очень даже много.
    И последнее, неправильный рендеринг валидного кода различными браузерами показывает ущербность браузеров, а не идеи в целом.

  13. # Тормоз

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

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

  14. # samlowry

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

    Дядько, у тебя цель-то какая? Профит или наслаждаться растянутым процессом разработки? Если второе — то я написал бред. У меня-то первое, для меня большая часть этих онанирований на Vim-ы, подходы к программированию — херня, я этим интересуюсь только в качестве корма моей прокрастинации, делу моему это не только не поможет — а только помешает. Даже написание этого коммента — дровишки в топку неделания.

    А ты вообще поясни — какие цели в ближайшей перспективе? Программировать самому продукты?

  15. # Миша: 

    полный php головного мозга
    все эти подходы позволяют делать больше за меньшее время, а главное делать лучше
    и не обязательно для этого юзать вим, не осили так и ладно, зачем комплексы :)?

  16. # Тормоз

    Да, Samlowry, в ближайшей перспективе я буду программировать, мне это нравится. Если твоему делу стремление к качеству и оптимизации мешает, так может свою ситуацию не стоит на всех проецировать?

  17. # Evgeny Sergeev

    samlowry, скажите, а одежду, обувь и т. д. вы тоже сами для себя шьете? Или покупаете готовую?

  18. # Тормоз

    Сэм, я думаю, тебя раздирают внутренние противоречия — ты определиться никак не можешь с приоритетами.

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

    А т. к. и в твоей жизни и вокруг полно примеров этого самого профита без всяких перфекционистских штучек, вот это у тебя диссонанс и вызывает.

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

    И тогда перестанешь троллить холиварно, перестанешь делить всё подростково на чёрное и белое.

  19. # samlowry

    Я не делю ничего, а размышляю. И я уже переосмыслил на 50000 раз тему этого разговора, что уже и не пойму, об чём меня (нас? а то чё-то во множественном числе) Evgeny Sergeev спрашивает.

    Большинство людей почему-то тупо воспринимает слова других людей, как законченное мнение (советское уважение к печатному слову???). Что нарушает саму суть мира: каждое мгновение состояние любого объекта уже не такое, каким оно было в предыдущее мгновение.

Комментирование этой статьи закрыто.

Интересное Покупки ТехникаРазное Отдых Статьи Строительство Услуги Общество Хобби Культура Советы Уют