Разработка через тестирование (TDD)

Разработка через тестирование (TDD)

Наконец-то! Разработка через тестирование для меня важнее, чем Scrum и XP вместе взятые. Можете отнять у меня дом, телевизор, собаку, но только попробуйте запретить использование TDD! Если вам не нравится TDD, тогда просто не подпускайте меня близко, иначе я всё равно привнесу его в проект втихую :)

Курс TDD за 10 секунд:

Разработка через тестирование означает, что вы сначала должны написать автоматизированный тест (который не проходит - прим. переводчика). После этого надо написать ровно столько кода, чтобы тест прошёл. Затем необходимо провести рефакторинг, в основном, чтобы улучшить читабельность кода и устранить дублирование. При необходимости повторить.

Несколько фактов о TDD:

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

• TDD оказывает глубокое положительное влияние на дизайн системы.

• Чтобы TDD стало приносить пользу в новом проекте, необходимо приложить немало усилий. Особенно много тратится на интеграционные тесты методом «черного ящика». Но эти усилия окупаются очень быстро.

• Потрать достаточно времени, но сделай так, чтобы писать тесты было просто. То есть надо получить необходимый инструментарий, обучить персонал, обеспечить создание правильных вспомогательных и базовых классов и т.д.

Мы используем следующие инструменты для разработки через тестирование:

• jUnit / httpUnit / jWebUnit. Мы присматриваемся к TestNG и Selenium.

• HSQLDB в качестве встроенной БД в памяти (in-memory) для тестовых целей.

• Jetty в качестве встроенного web-контейнера в памяти (in-memory) для тестовых целей.

• Cobertura для определения степени покрытия кода тестами.

• Spring framework для написания различных типов тестовых фикстур (в т.ч. с использованием моков (mock-object) и без, с внешней БД и БД в памяти (in-memory) и т.д.)

В наших наиболее сложных продуктах (с точки зрения TDD) у нас реализованы автоматизированные приёмочные тесты методом «черного ящика». Эти тесты загружают всю систему в память, включая базы данных и web-сервера, и взаимодействуют с системой только через внешние интерфейсы (например, через

HTTP).

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Разработка пещеры

Из книги автора

Разработка пещеры Если вы без проблем сражаетесь с мобами или играете в режиме Мирный (Peaceful), используйте в качестве шахт пещеры и овраги. Разрабатывая пещеры (это называется спелеологией), вы меньше копаете, так что дело идет гораздо быстрее! Спускайтесь по ветвям


Разработка макета

Из книги автора

Разработка макета При разработке макета необходимо ответить на вопрос: «Как вы доведете до совершенства то, что наметили во время предыдущего этапа?»Именно здесь ваш каркас начинает обрастать контентом. Создавая макет, вы ищете слова, которые привлекут внимание


Нагрузочное тестирование, продолжительное тестирование и тестирование стабильности

Из книги автора

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


Разработка формы

Из книги автора

Разработка формы Создадим новый проект Delphi и разработаем интерфейс программы. Измените значение свойства Caption главной формы на Статистика. Разместите на форме компонент Label категории Standard, и присвойте его свойствам значения согласно табл. 3.1.Таблица 3.1. Свойства


Разработка формы

Из книги автора

Разработка формы Создайте новый проект Delphi. Разместите на форме компонент Image категории Additional, который будет служить для отображения рисунка. Для того чтобы при любых размерах окна рисунок всегда заполнял всю форму, следует изменить значение свойства Align на alClient.Для


Разработка формы

Из книги автора

Разработка формы Создадим новый проект Delphi. Интерфейс программы сделаем похожим на интерфейс стандартного блокнота. Разместите на форме компонент Memo (многострочное текстовое поле) категории Standard. Для того чтобы при любых размерах окна этот компонент заполнял всю форму,


Разработка формы

Из книги автора

Разработка формы Создадим новый проект Delphi. Мелькающее окно у нас будет необычным: оно будет без заголовка и не прямоугольным, а эллиптической формы. Измените свойства формы согласно табл. 8.1.Таблица 8.1. Свойства формы игры "Успей щелкнуть" Свойство Значение


Разработка формы

Из книги автора

Разработка формы Создайте новый проект Delphi и измените свойства формы согласно табл. 10.1.Таблица 10.1. Свойства формы программы входа в систему Свойство Значение Пояснение Caption Очистить заголовок Align alCustom Запрет на перемещение окна ВorderStyle bsNone Убираем границу и


Разработка формы

Из книги автора

Разработка формы Создайте новый проект Delphi и присвойте свойству Caption формы значение Memory Info.Для вывода различной информации о памяти мы будем использовать компонент Label категории Standard. Разместите на форме один над другим семь таких компонентов, присвоив свойству Left


Разработка формы

Из книги автора

Разработка формы Создайте новый проект Delphi. Присвойте свойству Caption формы значение Настройка ОС Windows. Разместите на форме компонент GroupBox категории Standard и присвойте его свойству Caption значение Опции. На компоненте GroupBox разместите один над другим три компонента CheckBox


Разработка формы

Из книги автора

Разработка формы Создайте новый проект Delphi. Присвойте свойству Caption формы значение Tester, а свойству BorderStyle — bsNone. У верхнего края формы разместите компонент Label категории Standard, присвоив его свойству Caption значение Первый вопрос:.Ниже разместите компонент Memo категории Standard, с


7.4.1. Передача данных через параметры и через глобальные объекты

Из книги автора

7.4.1. Передача данных через параметры и через глобальные объекты Различные функции программы могут общаться между собой с помощью двух механизмов. (Под словом “общаться” мы подразумеваем обмен данными.) В одном случае используются глобальные объекты, в другом –


I Групповая разработка

Из книги автора

I Групповая разработка 1 Решения, решения Путей- есть два и больше. Путей всегда есть два и больше. Всю мою профессиональную жизнь этот простой принцип служил практическим ориентиром, который побуждал меня искать различные альтернативы при разработке программного


8.2. Подключаться через телефон или через модем?

Из книги автора

8.2. Подключаться через телефон или через модем? Вы можете использовать для подключения к телефону как мобильный телефон, так и EDGE/3G-модем. Какой вариант выбрать? Тут нужно решить, что для вас важнее — экономия или удобство. Ведь сотовый телефон есть у каждого и можно


Разработка через тестирование (TDD)

Из книги автора

Разработка через тестирование (TDD) Наконец-то! Разработка через тестирование для меня важнее, чем Scrum и XP вместе взятые. Можете отнять у меня дом, телевизор, собаку, но только попробуйте запретить использование TDD! Если вам не нравится TDD, тогда просто не подпускайте меня