Требует ли Ruby / Rails больше модульного тестирования, чем приложение PHP? - PullRequest
2 голосов
/ 29 декабря 2010

Я не нахожу толчок юнит-тестирования на рынке PHP, как я вижу / читаю на арене ruby ​​/ rails.

Можно ли так же просто НЕ выполнять юнит-тестирование в ruby ​​/ rails, как в php, или он слишком гибок и разрушаем, что его "больше" рекомендуется тестировать в ruby, чем в php?

То есть существуют большие базы кода, такие как vBulletin, и, насколько я могу судить, они не являются модульными тестами.

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

Ответы [ 5 ]

7 голосов
/ 29 декабря 2010

tl; dr PHP / vBulletin / Mambo запущен до того, как TDD стал массовым

PHP допускает те же ошибки, что и Ruby. В Java / C # компилятор иногда будет жаловаться, если вы делаете что-то странное во время компиляции, PHP / Ruby будет делать это только во время выполнения. Так что, если бы вы сравнили Ruby с Java, я мог бы ответить, что вижу немного больше необходимости писать юнит-тесты для PHP / Ruby. Тем не менее я считаю модульное тестирование важным, независимо от того, на каком языке вы говорите.

По вашим результатам: vBulletin (разработка v3 началась в декабре 2002 года), а Mambo почти так же стар, как jUnit (2000). Модульное тестирование (согласно тому, что я могу найти) выросло примерно в 2000 году. SimpleTest / PHPUnit появился в 2003/2004. Поэтому разработчики Mambo / vBulletin тогда не использовали TDD. Структура написанного кода не облегчит последующее добавление тестов.

Чтобы не обесчестить каких-либо разработчиков PHP, PHP был довольно переполнен сценаристами, псевдопрограммистами и новичками (включая меня). Все начинали с нуля, писали свою CMS. В качестве справочного приложения были найдены фрагменты, найденные в Интернете. Я предполагаю, что большая часть сообщества разработчиков PHP никогда не слышала о модульном тестировании или не понимала, для чего он нужен.

Ruby был раскручен намного позже (около 2007 года), чем PHP (около 2000 года). Он поставляется в комплекте с большой философией («Что такое хороший / читаемый / красивый код?», «Как должно выполняться кодирование?»). Написание тестов является частью этой философии.

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

2 голосов
/ 30 декабря 2010

Ruby не более гибок или разрушаем, чем другие языки, потому что программист может делать глупости в Ruby так же, как в PHP, Java или C.

Некоторые среды программирования (IDE) выполняют прекомпиляцию и проверяют синтаксические ошибки в коде, но если разработчик ошибся, или отключил предупреждения или уведомления об ошибках, они все равно будут в состоянии выстрелить. пешком Это не вина языка, они сделали глупости. Именно недостаток дисциплины, опыта или предусмотрительности со стороны разработчика, а не языка, привел к коду, который вызвал проблему.

Когда я писал в C, я включил все ошибки и установил предупреждения на их максимальную серьезность. Мой код скомпилирован без ошибок, и у меня была высокая степень уверенности, что код был хорош. В то же время я проверил все свои выделения памяти, чтобы убедиться, что я получил значение, проверил мои коды возврата из системных вызовов и т. Д., Потому что я заботился о том, чтобы мой код работал правильно и был чистым. Я получал код от людей, которые отключили предупреждения, потому что им не нравился поток сообщений, и он не работал, и просмотр кода показал, что он полон игнорируемых кодов возврата и не проверял распределение памяти. Подобно тому, что сказал Форест Гамп: «Неряшливый, как небрежный».

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

Итак, хотя некоторые, возможно, захотят указать пальцем и сказать, что определенный язык не так хорош, как другой, потому что язык часто терпит неудачу, он сводится к человеку, который держит руки на клавиатуре. Не используйте язык.

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

Около шести месяцев назад я начал регулярно работать с кодом, написанным не программистом. Он очень талантлив в том, что он делает, но ему нужен был старший разработчик, чтобы программировать с ним и показывать ему, почему все делается определенным образом. Первое, что я сделал с ним, - познакомил его с тестовой сеткой безопасности. У него был некоторый тестовый код для случайных вещей, но ничего, что проверяло бы реальное поведение программы. Однажды он увидел это в действии, он был верующим, а теперь пишет свои тесты, как он идет. Это потрясающая вещь. : -)

2 голосов
/ 29 декабря 2010

Я думаю, что вы не видите столько автоматизированного модульного и функционального тестирования в PHP, потому что сообщество не приняло его - хотя это меняется.Дело не в том, что какой-либо язык требует более или менее тщательного тестирования, больше о методологиях разработки и инструментах, с которыми знакомы разработчики, использующие этот язык, а также о стоимости реализации чего-либо (в данном случае тестов).и функциональные тесты просты.Есть целая структура, интегрированная для этого ... с лесами, если я правильно помню.Это значительно снижает стоимость и уровень знаний, необходимый для тестирования приложения таким способом.Много раз в PHP, если вы хотите сделать это, вы должны интегрировать PHPUnit, Lime, SimpleTest и т. Д. Самостоятельно.С ростом числа фреймворков, таких как Symfony, Zend, CI и Cake, барьеры в PHP тоже снижаются, если команда разработчиков использует такую ​​фреймворк.

0 голосов
/ 30 декабря 2010

Это не так много, что ruby ​​ требует это столько, сколько он поддерживает это намного лучше, и является частью общей философии и лучших практик, которые окружают ruby, тогда как php быстропереполнен многими, ну, любителями.

0 голосов
/ 29 декабря 2010

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

...