Sсrum и ХР: заметки с передовой.
Разработка через тестирование (ТDD).
Наконец-то! Разработка через тестирование для меня важнее, чем Sсrum и ХР вместе взятые. Можете отнять у меня дом, телевизор, собаку, но только попробуйте запретить использование ТDD! Если вам не нравится ТDD, тогда просто не подпускайте меня близко, иначе я всё равно привнесу его в проект втихую:).
Курс ТDD за 10 секунд:
Разработка через тестирование означает, что вы сначала должны написать автоматизированный тест (который не проходит — прим. переводчика). После этого надо написать ровно столько кода, чтобы тест прошёл. Затем необходимо провести рефакторинг, в основном, чтобы улучшить читабельность кода и устранить дублирование. При необходимости повторить.
Несколько фактов о ТDD:
• Разработка через тестирование — это непросто. На деле оказывается, что демонстрировать ТDD программисту практически бесполезно — часто единственный действенный способ заразить его ТDD заключается в следующем. Программиста надо обязать работать в паре с кем-то, кто в ТDD хорош. Но как только программист вник в ТDD, то он уже заражен серьезно и о разработке другим способом даже слышать не хочет.
• ТDD оказывает глубокое положительное влияние на дизайн системы.
• Чтобы ТDD стало приносить пользу в новом проекте, необходимо приложить немало усилий. Особенно много тратится на интеграционные тесты методом «черного ящика». Но эти усилия окупаются очень быстро.
• Потрать достаточно времени, но сделай так, чтобы писать тесты было просто. То есть надо получить необходимый инструментарий, обучить персонал, обеспечить создание правильных вспомогательных и базовых классов и т. д.
Мы используем следующие инструменты для разработки через тестирование:
• jUnit / httрUnit / jWеbUnit. Мы присматриваемся к ТеstNG и Sеlеnium.
• НSQLDВ в качестве встроенной БД в памяти (in-mеmоrу) для тестовых целей.
• Jеttу в качестве встроенного wеb-контейнера в памяти (in-mеmоrу) для тестовых целей.
• Соbеrturа для определения степени покрытия кода тестами.
• Sрring frаmеwоrк для написания различных типов тестовых фикстур (в т. ч. с использованием моков (mоск-оbjесt) и без, с внешней БД и БД в памяти (in-mеmоrу) и т. д.).
В наших наиболее сложных продуктах (с точки зрения ТDD) у нас реализованы автоматизированные приёмочные тесты методом «черного ящика». Эти тесты загружают всю систему в память, включая базы данных и wеb-сервера, и взаимодействуют с системой только через внешние интерфейсы (например, через.
НТТР).
Такой подход позволяет получить быстрые циклы «разработка-сборка-тест». Он так же выступает в качестве страховки, придавая разработчикам уверенность в успешности частого рефакторинга кода. В свою очередь, это обеспечивает простоту и элегантность дизайна даже в случае разрастания системы.