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

Вот пример. Если мы конвертируем одну валюту в другую, мы берем комиссию 1,5 за выполнение операции. Представьте, что мы обмениваем американские доллары (USD) на британские фунты стерлингов (GBP). Пусть курс обмена будет составлять 2:1. Если мы хотим обменять $100, в результате мы должны получить 50 GBP – 1,5 % = 49,25 GBP. Мы могли бы написать следующий тест:


Bank bank = new Bank().

bank.addRate("USD", "GBP", STANDARD_RATE);

bank.commission(STANDARD_COMMISSION);

Money result = bank.convert(new Note(100, "USD"), "GBP");

assertEquals(new Note(49.25, "GBP"), result);


Однако вместо этого мы можем сделать порядок вычислений более очевидным:


Bank bank = new Bank();

bank.addRate("USD", "GBP", 2);

bank.commission(0.015);

Money result = bank.convert(new Note(100, "USD"), "GBP");

assertEquals(new Note(100 / 2 * (1–0.015), "GBP"), result);


Прочитав этот тест, я вижу взаимосвязь между входными значениями и значениями, используемыми в составе формулы.

Шаблон «Понятные данные» (Evident Data) обладает побочным эффектом: он в некоторой степени облегчает программирование. После того как мы в понятной форме записали выражение assert, мы получаем представление о том, что именно нам необходимо запрограммировать. В данном случае мы видим, что тестируемый код должен содержать операции деления и умножения. Мы даже можем воспользоваться шаблоном «Поддельная реализация» (Fake It), чтобы узнать, где должна располагаться та или иная операция.

Шаблон «Понятные данные» (Evident Data) выглядит как исключение из правила о том, что в коде не должно быть «магических» чисел. Дело в том, что в рамках одного метода легко понять назначение того или иного числа. Однако если в программе уже имеются объявленные символьные константы, я предпочитаю использовать их вместо конкретных численных значений.

26. Шаблоны красной полосы

В данной главе речь пойдет о шаблонах, которые подскажут вам, когда писать тесты, где писать тесты и когда прекратить писать тесты.

Тест одного шага (One Step Test)

Какой следующий тест лучше всего выбрать из списка задач для реализации? Выбирайте тест, который, во-первых, научит вас чему-либо, а во-вторых, который вы сможете реализовать.

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


плюс;

минус;

умножение;

деление;

сложение с такой же валютой;

равенство;

равенство нулю;

нулевой обмен;

обмен одной и той же валюты;

обмен двух валют;

курс кросс-обмена.


Не существует единственно правильного ответа. То, что для меня, ни разу не занимавшегося реализацией этих объектов, будет выглядеть как один шаг, для вас, обладающих достаточным опытом, может оказаться одной десятой шага. Если вы не можете найти в списке тест, соответствующий одному шагу, добавьте в список дополнительные тесты, реализация которых поможет вам приблизиться к реализации тестов, уже присутствующих в списке.

Когда я смотрю на список тестов, я рассуждаю: «Это очевидно, это очевидно, об этом я не имею ни малейшего представления, это очевидно, здесь – никаких идей, о чем я думал, когда писал это? А! Вспомнил! Я думаю, что мог бы это сделать». Этот последний тест я реализую следующим. С одной стороны, он не кажется мне очевидным, с другой стороны, я уверен в том, что смогу заставить его работать.

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

И нисходящий, и восходящий подходы не представляют реального описания процесса. Во-первых, вертикальная метафора – это упрощенная визуализация процесса изменения программы в течение разработки. Для описания процесса разработки, основанной на тестировании, лучше подходит метафора Развития или Эволюции: внешняя среда влияет на программу, а программа влияет на внешнюю среду. Во-вторых, если мы хотим, чтобы в нашей метафоре присутствовало направление, лучшим описанием будет «от известного к неизвестному». Подразумевается, что мы обладаем некоторыми знаниями и опытом и ожидаем, что в процессе разработки мы будем узнавать нечто новое. Объединим эти две метафоры и получим, что программа эволюционирует от известного к неизвестному.

Начальный тест (Starter Test)

С какого теста следует начать разработку? Начните с тестирования варианта операции, который не подразумевает выполнения каких-либо осмысленных действий, то есть ничего не делает.

Перейти на страницу:

Все книги серии Библиотека программиста

Программист-фанатик
Программист-фанатик

В этой книге вы не найдете описания конкретных технологий, алгоритмов и языков программирования — ценность ее не в этом. Она представляет собой сборник практических советов и рекомендаций, касающихся ситуаций, с которыми порой сталкивается любой разработчик: отсутствие мотивации, выбор приоритетов, психология программирования, отношения с руководством и коллегами и многие другие. Подобные знания обычно приходят лишь в результате многолетнего опыта реальной работы. По большому счету перед вами — ярко и увлекательно написанное руководство, которое поможет быстро сделать карьеру в индустрии разработки ПО любому, кто поставил себе такую цель. Конечно, опытные программисты могут найти некоторые идеи автора достаточно очевидными, но и для таких найдутся темы, которые позволят пересмотреть устоявшиеся взгляды и выйти на новый уровень мастерства. Для тех же, кто только в самом начале своего пути как разработчика, чтение данной книги, несомненно, откроет широчайшие перспективы. Издательство выражает благодарность Шувалову А. В. и Курышеву А. И. за помощь в работе над книгой.

Чед Фаулер

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги

Как справиться с компьютерной зависимостью
Как справиться с компьютерной зависимостью

Компьютер так прочно вошел в нашу жизнь, что большая половина человечества не может представить без него своего существования. Мы проводим за ним не только все рабочее, но и свободное время. Однако не каждый человек знает, что круглосуточное пребывание за монитором несет реальную угрозу как физическому (заболевания позвоночника, сердечно-сосудистой системы и т. д.), так и психическому здоровью (формирование психической зависимости от Интернета и компьютерных игр). С помощью данной книги вы сможете выявить у себя и своих близких признаки компьютерной зависимости, понять причины и механизмы ее возникновения и справиться с ней посредством новейших психологических методик и упражнений.

Виктория Сергеевна Тундалева , Елена Вячеславовна Быковская , М О Носатова , Н Р Казарян , Светлана Викторовна Краснова

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT
Цифровой журнал «Компьютерра» № 3
Цифровой журнал «Компьютерра» № 3

ОглавлениеBETT 2010: каким мир видит образование будущего? Автор: Сергей ВильяновКивино гнездо: Подбит на взлёте Автор: БЕРД КИВИПротиворакеты Поднебесной Автор: Ваннах МихаилИнтерактивное видео Автор: Максим РудольскийПочему Google уходит из Китая? Автор: Тимофей БахваловВасилий Щепетнёв: Усмиритель Хаоса или Последний декрет Ильича — 2 Автор: Василий ЩепетневКомпьютер в школе: панацея или плацебо? Автор: Сергей ВильяновNexus One — андроидный провал Автор: Фадеев МихаилWindows Mobile в шкуре Google Android Автор: Андрей КрупинОт 430 до 500 Вт: блоки питания на любой случай, часть 1 Автор: Константин ИвановМедиацентр Boxee: первый социальный Автор: Андрей КрупинГолубятня: Сидр № 1 Автор: Сергей ГолубицкийGoogle в КНР: взгляд с другой стороны Авторы: Алексей Стародымов, Марина ПелепецПочему чаевые не спасут онлайн Автор: Иван КошуриновСервисы деактивации троянов-вымогателей Автор: Андрей КрупинЛестница для предпринимателей Автор: Сергей ЕреминКивино гнездо: Сюжет из «Плейбоя» Автор: БЕРД КИВИВасилий Щепетнёв: Последний декрет Ильича Автор: Василий ЩепетневО судьбах Symbian Автор: Алексей СтародымовPackard Bell Easynote TJ65 — хорошо сбалансированный ноутбук Автор: Игорь ОсколковОнлайновые альтернативы Microsoft PowerPoint Автор: Андрей КрупинPanasonic Lumix DMC-TZ7: ультра-ZOOMО возможности предсказания будущего Автор: Ваннах МихаилЗарядись от солнца Автор: Константин ИвановDefenseWall Personal Firewall: очное знакомство Автор: Андрей КрупинЗа что могут посадить компьютерщика? Автор: Майор МышкинИ для VAS, и для нас Автор: Сергей ВильяновНовинки CES 2010. Избранное Автор: Алексей СтародымовГолубятня: Золотой ключик Автор: Сергей Голубицкий

Журнал «Компьютерра» , Коллектив Авторов , Компьютерра Журнал

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT