Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Бек К. -> "Экстремальное программирование: разработка через тестирование " -> 45

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

Бек К. Экстремальное программирование: разработка через тестирование — СПб.: Питер, 2003. — 224 c.
ISBN 5-8046-0051-6
Скачать (прямая ссылка): bek-k..pdf
Предыдущая << 1 .. 39 40 41 42 43 44 < 45 > 46 47 48 49 50 51 .. 81 >> Следующая


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

Bank bank= new Bank ().

bank.addRateC'USD". "GBP", STANDARD_RATE);

bank.commissi on (STANDARD_C0MMISSI0N);

Money result= bank.convertCnew NotedOO, "USD"), "GBP");

assertEqualsCnew Note(49.25. "GBP"), result):

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

Bank bank= new Bank О:

bank.addRateC'USD". "GBP". 2):

bank.commission!0.015);

Money result= bank.convertCnew NotedOO. "USD"). "GBP"); assertEquals(new NotedOO I 2 * (1 - 0.015), "GBP"), result);

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

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

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

Паттерны красной полосы

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

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

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

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

плюс;

минус;

умножение;

деление;

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

равенство;

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

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

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

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

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

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

Когда я смотрю на список тестов, я рассуждаю: «Это очевидно, это очевидно, об этом я не имею ни малейшего представления, это очевидно, здесь — никаких

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

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

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

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

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

Приступая к реализации операции, вы прежде всего должны ответить на вопрос: «Где она должна располагаться?» Пока вы не ответите на этот вопрос, вы не будете знать, какой код необходимо написать для того, чтобы протестировать эту операцию. Как уже неоднократно рекомендовалось, не следует решать несколько проблем одновременно. Значит, вы должны выбрать такой тест, который позволил бы вам искать ответ только на один этот вопрос и позволил бы на время забыть обо всех остальных вопросах.
Предыдущая << 1 .. 39 40 41 42 43 44 < 45 > 46 47 48 49 50 51 .. 81 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100