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



Download 1,35 Mb.
Pdf ko'rish
bet89/140
Sana15.04.2022
Hajmi1,35 Mb.
#555128
1   ...   85   86   87   88   89   90   91   92   ...   140
Bog'liq
Экстремальное программирование Разработка через тестирование PDFDrive

28. Шаблоны зеленой полосы 
Когд а у вас есть сломанный тест, вы д олжны заставить его
работать. Если вы рассматриваете красную поло су как со стояние, из
которого след ует выйти как можно быстрее, вы д олжны овлад еть
приемами быстрого получения зеленой поло сы. Используйте след ующие
шаблоны, чтобы заставить ваш тест выполниться (д аже если
полученный в результате этого код не про существует и часа).
Подделка (Fake It)
Если у вас есть тест, завершающийся неуд ачей, какой д олжна быть
самая первая реализация? Сд елайте так, чтобы тестируемый метод
возвращал константу. По сле того как тест начал работать, по степенно
трансформируйте константу в выражение с использованием переменных.
Пример использования этого под ход а прод емонстрирован в ход е
разработки нашей реализации xUnit. Вначале мы использовали строковую
константу:
return «1 run, 0 failed»
Затем эта строка была преобразована в выражение:
return «%d run, 0 failed» % self.runCount
Од нако этим д ело не кончило сь. В конце мы получили выражение:
return «%d run, %d failed» % (self.runCount, self failureCount)
Шаблон «Под д елка» (Fake It) напоминает страховочную веревку,
которая соед иняет вас с верхней точкой маршрута, когд а вы
карабкаетесь по скале. Пока что вы еще не забрались на самый верх (тест
на месте и работает, но тестируемый код некорректен). Од нако в любой
точке маршрута вы д ержитесь за веревку и знаете, что когд а д о стигнете
самого верха, то буд ете в безопасно сти (тест работает в ход е
рефакторинга, а также по сле получения окончательного код а).


Шаблон «Под д елка» (Fake It) многим может показаться совершенно
бесполезным. Зачем писать код , который абсолютно точно прид ется
заменить д ругим? Дело в том, что иметь хоть какой-то работающий код
– это лучше, чем вообще не иметь работающего код а, в о собенно сти
если у вас есть тесты, которые могут д оказать работо спо собно сть код а.
Петер Хансен (Peter Hansen) рассказал мне след ующую историю:
Буквально вчера два новичка в области TDD – мой партнер и я –
решили в точности следовать букве закона. То есть мы написали тест, а
затем написали самый простой, но совершенно бесполезный код, который
обеспечивал срабатывание теста. Пока мы писали этот код, мы
обнаружили, что тест написан неправильно
.
Каким образом под д ельная реализация под сказала им, что
написанный ими тест некорректен? Я понятия не имею, од нако я
счастлив, что они вовремя обнаружили это. Быть может, если они не
во спользовались бы под д ельной реализацией, они пошли бы по
ложному пути. Возможно, исправление связанных с этим ошибок
обошло сь бы им д ороже.
При использовании шаблона «Под д елка» (Fake It) возникает как
минимум д ва положительных эффекта:
Психологический
. Если перед вами зеленая поло са, вы чувствуете
себя совершенно иначе, чем когд а перед вами красная поло са. Когд а
поло са зеленая, вы знаете, на чем стоите. Вы можете смело и уверенно
приступать к рефакторингу.
Контроль над объемом работы
. Программисты привыкли пытаться
пред вид еть появление в буд ущем самых разнообразных проблем. Если
вы начинаете с конкретного примера и затем о существляете обобщение
код а, это помогает вам избавиться от лишних опасений. Вы можете
сконцентрироваться на решении конкретной проблемы и поэтому
выполнить работу лучше. При переход е к след ующему тесту вы опять
же концентрируетесь на нем, так как знаете, что пред ыд ущий тест
гарантированно работает.
Нарушает ли шаблон «Под д елка» (Fake It) правило о том, что не
след ует писать код , который вам не потребуется? Я так не д умаю, вед ь
на этапе рефакторинга вы уд аляете д ублирование д анных межд у тестом
и тестируемым код ом. Допустим, я написал
[17]
:
assertEquals(new 
MyDate(«28.2.02»), 
new 
MyDate(«1.3.02»).
yesterday());


MyDate
public MyDate yesterday() {
return new MyDate("28.2.02");
}
Межд у тестом и код ом существует д ублирование. Попробуем
исправить ситуацию:
MyDate
public MyDate yesterday() {
return new MyDate(new MyDate("1.3.02"). days()-1);
}
Од нако д ублирование по-прежнему присутствует. Чтобы избавиться
от него, заменяем MyDate(«1.3.02») на this (в моем тесте эти значения
равны). Получается:
MyDate
public MyDate yesterday() {
return new MyDate(this.days()-1);
}
Од нако увид еть возможно сть под обных под становок с первого
взгляд а уд ается д алеко не всегд а и д алеко не всем, поэтому д ля пущей
ясно сти вы можете использовать триангуляцию, по крайней мере д о тех
пор, пока вам не над оест. Когд а вам над оест, вы чаще буд ете
пользоваться шаблоном «Под д елка» (Fake It) или «Очевид ная
реализация» (Obvious Implementation).

Download 1,35 Mb.

Do'stlaringiz bilan baham:
1   ...   85   86   87   88   89   90   91   92   ...   140




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish