Кент Бек

Экстремальное программирование. Разработка через тестирование


Скачать книгу

тему книги, которую вы сейчас читаете. Вначале мы рассмотрим объект, созданный Уордом в момент вдохновения, – мультивалютные деньги (multi-currency money).

      Часть I

      На примере денег

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

      • Быстро создать новый тест.

      • Запустить все тесты и убедиться, что новый тест терпит неудачу.

      • Внести небольшие изменения.

      • Снова запустить все тесты и убедиться, что на этот раз все тесты выполнились успешно.

      • Провести рефакторинг для устранения дублирования.

      Кроме того, придется найти ответы на следующие вопросы:

      • Как добиться того, чтобы каждый тест охватывал небольшое приращение функциональности?

      • Как и за счет каких небольших и, наверное, неуклюжих изменений обеспечить успешное прохождение новых тестов?

      • Как часто следует запускать тесты?

      • Из какого количества микроскопических шагов должен состоять рефакторинг?

      1. Мультивалютные деньги

      Вначале мы рассмотрим объект, созданный Уордом для системы WyCash, – мультивалютные деньги (см. «Введение»). Допустим, у нас есть отчет вроде этого.

      Добавив различные валюты, получим мультивалютный отчет.

      Также необходимо указать курсы обмена.

      $5 + 1 °CHF = $10, если курс обмена 2:1

      $5 * 2 = $10

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

      • выполнять сложение величин в двух различных валютах и конвертировать результат с учетом указанного курса обмена;

      • выполнять умножение величин в валюте (стоимость одной акции) на количество акций, результатом этой операции должна быть величина в валюте.

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

      Как видно из нашего списка задач, сначала мы займемся умножением. Итак, какой объект понадобится нам в первую очередь? Вопрос с подвохом. Мы начнем не с объектов, а с тестов. (Мне приходится постоянно напоминать себе об этом, поэтому я просто притворюсь, что вы так же забывчивы, как и я.)

      Попробуем снова. Итак, какой тест нужен нам в первую очередь? Если исходить из списка задач, первый тест представляется довольно сложным. Попробуем начать с малого – умножение, – сложно ли его реализовать? Займемся