Представляем разработку через тестирование в PHP
Мое рабочее место состоит из множества ковбойских кодеров. Многие из них младшие. Что по совпадению вносит большой вклад в качество кода.
Я ищу предложения о том, как лучше всего научить мою команду использовать TDD (мы можем начать с юнит-тестов, перейти к регрессионным тестам, а затем к более автоматизированному тестированию).
В конечном счете, я хочу, чтобы мы быстрее учились на своих ошибках, создавали лучший код и воспитывали лучших разработчиков.
Я надеюсь, что есть несколько практических советов о том, как представить TDD команде. В частности, какие инструменты лучше всего выбрать в стеке LAMP (php).
Извините, если этот вопрос слишком открытый.
5 ответов
Пройдя этот процесс четыре раза, я обнаружил, что любое внедрение TDD завершится неудачей без некоторого уровня принуждения. Программисты не хотят менять стиль и не будут писать свой первый модульный тест и вдруг увидят свет.
Вы можете применять на уровне управления, но это занимает много времени для всех участников. Некоторый уровень этого необходим в начале, так или иначе, но в конечном счете вам потребуется автоматическое принудительное применение. Ответом на это является введение непрерывной интеграции.
Я обнаружил, что CI-сервер является основным краеугольным камнем в любой среде TDD. Если разработчики не знают, что что-то плохое случится, если они не напишут тесты, у вас всегда будут ковбои, которые чувствуют, что это под ними.
Сделать написание тестов легко и результаты видны.
- Используйте TestFramework с хорошей документацией. как SimpleTest
- Если проверка зависит от содержимого базы данных, создайте справочную базу данных, которая будет удалена и создана в начале сценария.
- Создайте сценарий, который запускает весь тест и отображает результаты на отдельном мониторе или что-то такое, что сделает тест видимым / легко доступным. (Запуск командной строки не вариант)
Лично я не пишу тест для каждого куска кода в приложении.
Фокус на доменных объектах в приложении. В моем случае это "расчет цены" и "изменения запасов"
Напомните им, что они, вероятно, уже пишут тесты, но что они удаляют свою работу сразу после создания. Пример: во время разработки функции у вас будет страница / testscript с результатом echo или var_dump(). После ручной проверки результата вы измените параметры функции и снова проверите.
С некоторыми дополнительными усилиями эти тесты могут быть автоматизированы в UnitTest. А какой программист не любит автоматизировать вещи?
SimpleTest - отличная документация и пояснения по тестированию на php
Что касается вопроса команды, а также универсальных идей о разработке и тестировании программного обеспечения, я бы предложил сайт и книги Джоэла Спольски: http://joelonsoftware.com/ Я получил от него много идей.
Другой способ запустить TDD - попытаться использовать PHP-фреймворк. Без фреймворка сложно эффективно реализовать модульное тестирование.