Тестировать, тестировать, и ещё раз тестировать!
24.10.2010 технологии
Давно уже знаю про TDD, но всё откладывал применение методики на практике. И вот вчера начал читать книжку Нила Форда «Продуктивный программист» (ссылка), прочитал уже половину — книжка небольшая. Я про неё отдельно напишу ещё, когда дочитаю, а пока про TDD, этому подходу посвящена целая глава.
Преимущества TDD
Одно из главнейших — мы сразу получаем первого потребителя нашего кода, автоматического тестера. Это уже накладывает определённую ответственность, более тщательно продумываем возможные последствия того или иного решения.
Кроме того, с тестами более естественным и закономерным становится процесс упрощения, что очень важно, учитывая главный императив программирования. Если бы я изначально применял TDD, некоторые мои старые функции были бы сразу похожи на те, что получились после рефакторинга Жени Сергеева. У него получилось лучше. Проще.
И не надо забывать о том, что качество обходится дешевле. Благодаря тестам делаем меньше ошибок, а если делаем — выявляем их на ранних этапах. 100% покрытие тестами на выходе даст очень качественный код, при этом с минимальными затратами ресурсов.
Цена качества
Кстати, вот об этом странном, на первый взгляд, «парадоксе» — качественно делать работу в большинстве случаев дешевле, чем некачественно. Удивительно, но это действительно так! И не только в программировании, но и смежных и даже совсем отдалённых сферах. Пара примеров:
- Писать сразу валидный HTML гораздо выгодней, чем писать абы как, а потом отлавливать баги в разных браузерах. Хорошо, что я это понял очень давно, года три назад. Общий перфекционизм сыграл свою роль.
- Совсем оффлайн. У мамы во всей пятиэтажке летом меняли отопление. При этом сантехников управляющая компания понабрала, похоже, вообще с улицы — очень грязно и непрофессионально работали. В итоге им пришлось почти в каждой квартире потом по второму кругу подваривать протекающие стыки труб. Сами себе сделали больше работы, и принесли множество неудобств жильцам.
Вот такие дела. А как вы тестируете свои программы и скрипты? Делаете ли тесты ещё до написания кода? Какими инструментами и методиками пользуетесь?
Комментарии
Комментирование этой статьи закрыто.
Пример с валидным кодом демонстрирует ущербность идеи. В жизни нет идеальных методов.
В 1000 раз скажу: vimeo.com/10922497 — человек из реального стотонного проекта. И это не какой-то редкий пример, в Викимaпии то же самое.
Эволюция — естественна, она работает. Генная инженерия — сосёт.
Ущербность какой именно идеи демонстрирует пример с валидным кодом? Работает как генная инженерия, так и костыльная эволюция, только последняя работает куда менее эффективно.
Извините, спрошу про отопление в пятиэтажке.
Меняли старые металлические трубы на новые металлические???
В нашей деревне уже лет десять ставят пластик который паяется. Металл+сварка=это очень дорого. А сварку используют только чтобы резать там, где болгарка не подлезет.
Друже, чего это ты мне выкать стал? :) Это я, Тормоз.
Меняли, действительно, старый металл на новый. Об этом ремонте вообще много плохого можно было бы рассказать, но не хочется снова портить себе настроение. Пошло оно всё в жопу.
Доброе утро!
Сорри, ещё не проснулся, а профессиональная привычка сработала – «если не помнишь, то на Вы»
:)
У меня уже день, так что добрый день! Я за утро уже целую книгу охомячил 8-р
# samlowry: Эволюция в своей сути – это апробация мутациями. Процесс долгий и болезненный. В программировании всегда применялись и применяются методы селекции – из двух вариантов выбирают лучший и работают с ним.
Тормоз: ущербность рендеринга твоего валидного кода разными браузерами.
Evgeny Sergeev: неа. Речь идёт о типичных стартапах (уж извини — как там у программистов из микрософта и прочих компаний с бюджетом, мне глубого пофиг, это для меня параллельный мир).
Вот те пример от пацана сверху (не бога, а того, чью писанину мы тут обсуждаем): он сначала сделал продукт, теперь то одно исправит, то добавит. И так будет всегда. Он не сядет на год разрабатывать всё идеально. Так можно чужие продукты разрабатывать, не свои.
Ток не надо про набиваемый скилл — сколько вы не будете его набивать, всё время будут появляться всякие более крутые методики «разработки через жонглирование» и «редактирования в ванне с электродами».
Сэм, на этот раз ты такой бред написал, что мне даже оспаривать его лениво.
валидный код писать выгодно не потому что он всеми браузерами рендерится правильно…
Ох, какое многозначительное многоточие :) Почему бы не продолжить эту мысль, загадочный Миша?
samlowry, еще раз говорю и типичные стартапы и крутые проекты мелкософта делаются через селекцию – т.е. через последовательное улучшение того что есть, путем выбора наиболее оптимального результата, опять же из того, что есть.
Тем более не понятно почему ты «качество» приравниваешь к «идеальному». Идеальных продуктов нет, а качественных очень даже много.
И последнее, неправильный рендеринг валидного кода различными браузерами показывает ущербность браузеров, а не идеи в целом.
Евгений, да сейчас он и неправильный ты редко бывает, я вот даже вспомнить сейчас ничего не могу. Вот последнее, что заметил — но это уже исправили. Так что именно с багами отрисовки браузеров я не сталкивался с июля прошлого года.
Вряд ли можно считать «неправильными» просто незначительные отличия в положении тех или иных элементов. Просто есть некоторые дизайнеры, которые не вкурили Web вообще и пытаются применять те же методики, что были ещё в полиграфии. Но это глупо.
Тормоз: открыл блог по вёрстке на хабре. На каждой странице — 1-2 поста про баги в рендеринге того или иного браузера. Они есть и будут есть, причём щас их навалится ещё больше с HTML5.
Дядько, у тебя цель-то какая? Профит или наслаждаться растянутым процессом разработки? Если второе — то я написал бред. У меня-то первое, для меня большая часть этих онанирований на Vim-ы, подходы к программированию — херня, я этим интересуюсь только в качестве корма моей прокрастинации, делу моему это не только не поможет — а только помешает. Даже написание этого коммента — дровишки в топку неделания.
А ты вообще поясни — какие цели в ближайшей перспективе? Программировать самому продукты?
полный php головного мозга
все эти подходы позволяют делать больше за меньшее время, а главное делать лучше
и не обязательно для этого юзать вим, не осили так и ладно, зачем комплексы :)?
Да, Samlowry, в ближайшей перспективе я буду программировать, мне это нравится. Если твоему делу стремление к качеству и оптимизации мешает, так может свою ситуацию не стоит на всех проецировать?
samlowry, скажите, а одежду, обувь и т. д. вы тоже сами для себя шьете? Или покупаете готовую?
Сэм, я думаю, тебя раздирают внутренние противоречия — ты определиться никак не можешь с приоритетами.
Как педант и всё же, человек, имеющий некоторую склонность к перфекционизму, ты стремишься к совершенству, но при этом признаёшь для себя первичность «профита».
А т. к. и в твоей жизни и вокруг полно примеров этого самого профита без всяких перфекционистских штучек, вот это у тебя диссонанс и вызывает.
Тебе стоит либо определиться, что для тебя действительно важно, и просто не отвлекаться на остальное, либо признать, что необходимо соблюдать разумный баланс.
И тогда перестанешь троллить холиварно, перестанешь делить всё подростково на чёрное и белое.
Я не делю ничего, а размышляю. И я уже переосмыслил на 50000 раз тему этого разговора, что уже и не пойму, об чём меня (нас? а то чё-то во множественном числе) Evgeny Sergeev спрашивает.
Большинство людей почему-то тупо воспринимает слова других людей, как законченное мнение (советское уважение к печатному слову???). Что нарушает саму суть мира: каждое мгновение состояние любого объекта уже не такое, каким оно было в предыдущее мгновение.