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-сервера, и взаимодействуют с системой только через внешние интерфейсы (например, через.

НТТР).

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