Недавно у меня была возможность встретиться с Крисом Хартьесом или, как некоторые из вас могут его знать, » » сварливым программистом. «Поскольку он недавно выпустил новую книгу о тестовой разработке на PHP, я хотел немного подумать!
Q Вы широко известны как «сварливый программист». Как появился этот заголовок?
Я не такой сварливый в реальной жизни. Ладно, может немного.
Хотя я довольно раздражительный, сидя перед компьютерным кодированием, «The Grumpy Programmer» — скорее бренд; маркетинговый инструмент больше всего на свете. Получив опыт работы программистом, я хотел поделиться своими идеями, чтобы помочь другим людям и себе одновременно. Я чувствовал, что один из способов сделать это состоял в том, чтобы создать свой личный бренд, отсюда и рождение Grumpy Programmer.
Конечно, вам нужно иметь некоторые навыки, чтобы поддержать себя, когда вы начинаете играть в то, что по сути является мультипликационной версией себя онлайн. Я бы не стал так громко кричать обо всех этих тестах, если бы не знал, как это сделать.
Я не такой сварливый в реальной жизни. Ладно, может немного.
В Недавно вы опубликовали « Руководство программиста Grumpy по созданию тестируемых приложений». Что заставило вас написать этот конкретный заголовок?
Когда я углубился в мир тестирования на PHP, я обнаружил, что не хватает информации о том, как на самом деле написать код, который вы можете протестировать. Есть много вещей о том, как писать тесты, но эти вещи не имеют значения, если ваше приложение беспорядок.
Написание кода, который отделен и позволяет вводить в него зависимости, не особенно сложен, он просто требует времени и дисциплины. Таких вещей сейчас не хватает в мире программирования.
В: Как вы думаете, почему TDD в целом не стал таким распространенным в сообществе PHP, как в других языках, таких как Ruby и Python? Как вы думаете, это начинает меняться?
«У меня нет времени на тестирование» — это рефрен, на котором говорит подавляющее большинство программистов в мире PHP.
Программисты Python заботятся о том, как выглядит их код, а Zen of Python записывается прямо в интерпретатор.
Rubyists были знакомы с концепцией разработки через тестирование с момента первого выпуска Ruby on Rails.
PHP по-прежнему позволяет разбить обработку запросов, доступ к базе данных и вывод HTML в один файл, который можно развернуть в большем количестве сред, чем на всех других языках вместе взятых.
Я думаю, совершенно очевидно, почему TDD по-прежнему сложно продать в PHP.
«У меня нет времени на тестирование» — это рефрен, на котором говорит подавляющее большинство программистов в мире PHP. Я предполагаю, что у них есть время работать допоздна, отлаживая свои приложения, вместо того, чтобы уловить эти проблемы раньше Тем не менее, становится лучше. В каждой крупной PHP-среде есть комплексные наборы тестов, и каждый день от кого-то в Twitter я слышу, что они начали писать тесты для своего PHP-кода. Это заставляет меня чувствовать себя хорошо.
В: Как вы думаете, что является самым большим преимуществом при тестировании ваших приложений?
Я тестирую свои приложения, чтобы знать, что они работают правильно, вместо того, чтобы догадываться (или надеяться), что они работают правильно.
Q Вы используете исключительно PHPUnit, или вы предпочитаете некоторые меньшие альтернативы, такие как Behat?
Я использую PHPUnit для написания юнит-тестов и Behat (вместе с Mink и различными драйверами веб-браузера) для пользовательских приемочных тестов.
Существуют и другие инструменты для модульного / интеграционного / функционального тестирования, но PHPUnit — мой предпочтительный инструмент, потому что многие другие инструменты действительно хорошо интегрируются с ним.
Q Тестирование приложений немного странно, в целом идея проста. По иронии судьбы, чтобы начать с этим, требуется довольно крутой кривой обучения. Была ли какая-то конкретная статья или видео, которые внезапно заставили вас «получить» это много лет назад?
Я пробираюсь по краям тестирования кода с 2003 года. Когда я увидел SimpleTest и познакомился с TDD, что-то в моей голове щелкнуло, и я понял ценность этих методов.
Быть евангелистом-испытателем — одинокая, разочаровывающая работа. Люди не осознают ценность тестов, пока не получат их, и не увидят, как легко было добавить некоторые новые функции, и обнаружат, что они сломали что-то еще, прежде чем их клиенты узнали об этом.
В Вы бы порекомендовали новичкам в мире разработки погрузиться в тестирование или подождать некоторое время, прежде чем научиться это делать? Я думаю, что есть смысл в обоих аргументах. Возможно, если вы с самого начала пробуете «лекарство в собачий корм», у них не будет никакой идеи никогда не тестировать свои приложения!
Я думаю, что вы можете научить кого-то программированию с использованием TDD, но PHP может быть не лучшим инструментом для этого. Отсутствие хорошего встроенного цикла чтения-оценки-печати (REPL) означает, что для создания среды, в которой люди могут писать и запускать тесты, требуется гораздо больше работы по настройке.
Python и Ruby, еще не родившиеся в сети, значительно упрощают импорт модулей, которые выполняют тестирование и эксперименты в командной строке.
В: Что вы думаете о вихре в отношении PHP в последнее время, ссылаясь на различные вирусные посты на эту тему? Это оправдано?
Каждый язык по-своему отстой. Не нравится PHP? Не используйте это. Не работайте в местах, которые его используют. Используйте языки и инструменты, которые резонируют с вами.
Люди, которыми я восхищаюсь в мире программирования, используют несколько языков и множество инструментов, поскольку они вкладываются в решение проблем, а не носят свои языковые предпочтения, как дешевая татуировка.
Q Где мы можем идти в ногу с тем, что нового от вас?
Конечно, я призываю людей купить копию моей книги, которая доступна на http://grumpy-testing.com . В настоящее время я обдумываю совершенно новое второе издание книги или книгу о том, как использовать PHPUnit и Behat для тестирования ваших PHP-приложений. Может быть, я объединю два!
Если вы хотите, чтобы вас развлекали, я предлагаю вам подписаться на меня в Twitter. Также я веду блог здесь.
Еще раз спасибо Крису за то, что он поболтал с нами. Итак, теперь дело за вами, Джон К. Читатель. Что вы думаете о тестировании? Требование для разработки веб-приложений, или чрезмерная трата времени?