139
Test-Driven Development Refactoring Стефан Кънев http://skanev.com / @skanev WebTech 25 Април 2010 Велико Търново & Sunday, April 25, 2010

Test-Driven Development + Refactoring

Embed Size (px)

DESCRIPTION

Презентацията от WebTech 2010

Citation preview

Page 1: Test-Driven Development + Refactoring

Test-Driven Development

Refactoring

Стефан Къневhttp://skanev.com/@skanev

WebTech25 Април 2010Велико Търново

&

Sunday, April 25, 2010

Page 2: Test-Driven Development + Refactoring

за  мен

Sunday, April 25, 2010

Page 3: Test-Driven Development + Refactoring

програмистSunday, April 25, 2010

Page 4: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 5: Test-Driven Development + Refactoring

♥Sunday, April 25, 2010

Page 6: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 7: Test-Driven Development + Refactoring

първи  unit  testпърви  работен  ден

Sunday, April 25, 2010

Page 8: Test-Driven Development + Refactoring

презентационни  умения

Sunday, April 25, 2010

Page 9: Test-Driven Development + Refactoring

3Sunday, April 25, 2010

Page 10: Test-Driven Development + Refactoring

говоря  бързо

Sunday, April 25, 2010

Page 11: Test-Driven Development + Refactoring

210Sunday, April 25, 2010

Page 12: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 13: Test-Driven Development + Refactoring

Аз ползвамVisual Source Safe

Sunday, April 25, 2010

Page 14: Test-Driven Development + Refactoring

Аз ползвамVisual Source Safe

Sunday, April 25, 2010

Page 15: Test-Driven Development + Refactoring

test-­‐driven  developmentrefactoring

Sunday, April 25, 2010

Page 16: Test-Driven Development + Refactoring

extreme  programming

Sunday, April 25, 2010

Page 17: Test-Driven Development + Refactoring

test-­‐driven  developmentrefactoring

Sunday, April 25, 2010

Page 18: Test-Driven Development + Refactoring

УебТех,  миналата  година

Sunday, April 25, 2010

Page 19: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 20: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 21: Test-Driven Development + Refactoring

Моя браузър е Гугъл, бабиното.

Sunday, April 25, 2010

Page 22: Test-Driven Development + Refactoring

Правя Test-Driven Development.

Sunday, April 25, 2010

Page 23: Test-Driven Development + Refactoring

Правя Test-Driven Development.

Пиша тестове

Sunday, April 25, 2010

Page 24: Test-Driven Development + Refactoring

конкретни  практики

Sunday, April 25, 2010

Page 25: Test-Driven Development + Refactoring

План

Sunday, April 25, 2010

Page 26: Test-Driven Development + Refactoring

План

1. Какво  е  test-­‐driven?

Sunday, April 25, 2010

Page 27: Test-Driven Development + Refactoring

План

1. Какво  е  test-­‐driven?

2. Малка  демонстрация  (видео!)

Sunday, April 25, 2010

Page 28: Test-Driven Development + Refactoring

План

1. Какво  е  test-­‐driven?

2. Малка  демонстрация  (видео!)

3. TDD  в  реалния  свят

Sunday, April 25, 2010

Page 29: Test-Driven Development + Refactoring

План

1. Какво  е  test-­‐driven?

2. Малка  демонстрация  (видео!)

3. TDD  в  реалния  свят

4. Въпроси  &  дискусия

Sunday, April 25, 2010

Page 30: Test-Driven Development + Refactoring

@skanev  Мога  да  прилагам  test-­‐drivendevelopment  извън  програмирането?Например  за  да  готвя  обяд?  #p2pvt

Sunday, April 25, 2010

Page 31: Test-Driven Development + Refactoring

План

1. Какво  е  test-­‐driven?

2. Малка  демонстрация  (видео!)

3. TDD  в  реалния  свят

4. Въпроси  &  дискусия

Sunday, April 25, 2010

Page 32: Test-Driven Development + Refactoring

refactor  |rēˈfaktər|verb

improving  the  design  of  codewithout  changing  its  behavior

Sunday, April 25, 2010

Page 33: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 34: Test-Driven Development + Refactoring

не  добавяте  функционалност

Sunday, April 25, 2010

Page 35: Test-Driven Development + Refactoring

не  добавяте  функционалностподобрявете  код

Sunday, April 25, 2010

Page 36: Test-Driven Development + Refactoring

не  добавяте  функционалностподобрявете  кодмалки  стъпки

Sunday, April 25, 2010

Page 37: Test-Driven Development + Refactoring

защо  пишем  тестове?

Sunday, April 25, 2010

Page 38: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 39: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 40: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 41: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 42: Test-Driven Development + Refactoring

накратко,  за  да  спестимусилия  в  дългосрочен

план

Sunday, April 25, 2010

Page 43: Test-Driven Development + Refactoring

test-drivendevelopment

automatedtesting

Sunday, April 25, 2010

Page 44: Test-Driven Development + Refactoring

Инструмент

Автоматизирани тестове

Sunday, April 25, 2010

Page 45: Test-Driven Development + Refactoring

Подход

Test-DrivenDevelopment

Test-Driven Development

Sunday, April 25, 2010

Page 46: Test-Driven Development + Refactoring

“Test-­‐Driven  Development  is  not  about  testing”

—  Dan  North

Sunday, April 25, 2010

Page 47: Test-Driven Development + Refactoring

дизайн

Sunday, April 25, 2010

Page 48: Test-Driven Development + Refactoring

TDD=

Test-­‐Driven  Design

Sunday, April 25, 2010

Page 49: Test-Driven Development + Refactoring

на  практика

Sunday, April 25, 2010

Page 50: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 51: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Sunday, April 25, 2010

Page 52: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Sunday, April 25, 2010

Page 53: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Sunday, April 25, 2010

Page 54: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Sunday, April 25, 2010

Page 55: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

Sunday, April 25, 2010

Page 56: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

Sunday, April 25, 2010

Page 57: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

Sunday, April 25, 2010

Page 58: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

Sunday, April 25, 2010

Page 59: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Тествате кода, който бихте искали да имате

Sunday, April 25, 2010

Page 60: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Тествате кода, който бихте искали да имате

• Няма да се компилира (липсващи методи/класове)

Sunday, April 25, 2010

Page 61: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Тествате кода, който бихте искали да имате

• Няма да се компилира (липсващи методи/класове)

• Пускате го и гледате как се проваля

Sunday, April 25, 2010

Page 62: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Тествате кода, който бихте искали да имате

• Няма да се компилира (липсващи методи/класове)

• Пускате го и гледате как се проваля

• Имате червен тест проверяващ функционалността

Sunday, April 25, 2010

Page 63: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

Sunday, April 25, 2010

Page 64: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Добавяте достатъчно код за да мине теста

Sunday, April 25, 2010

Page 65: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Добавяте достатъчно код за да мине теста

• Нито ред повече

Sunday, April 25, 2010

Page 66: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Добавяте достатъчно код за да мине теста

• Нито ред повече

• Най-простото решение, което ви хрумва

Sunday, April 25, 2010

Page 67: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Добавяте достатъчно код за да мине теста

• Нито ред повече

• Най-простото решение, което ви хрумва

• Имате работещ код и зелен тест, който го потвърждава

Sunday, April 25, 2010

Page 68: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

Sunday, April 25, 2010

Page 69: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Не добавяте функционалност

Sunday, April 25, 2010

Page 70: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Не добавяте функционалност

• Подобрявате кода/дизайна

Sunday, April 25, 2010

Page 71: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Не добавяте функционалност

• Подобрявате кода/дизайна

• Премахвате повторенията

Sunday, April 25, 2010

Page 72: Test-Driven Development + Refactoring

Добавяте тест1 ...за  несъществуващ  код

Пишете код2 ...колкото  тестът  да  мине

Правите подобрения3 ...докато  премахнете  повторенията

• Не добавяте функционалност

• Подобрявате кода/дизайна

• Премахвате повторенията

• На всяка стъпка пускате теста

Sunday, April 25, 2010

Page 73: Test-Driven Development + Refactoring

1 2 3TDD =

Sunday, April 25, 2010

Page 74: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 75: Test-Driven Development + Refactoring

Discla

imer

Sunday, April 25, 2010

Page 76: Test-Driven Development + Refactoring

1 2 3Кодът,  който  искате  да  имате

describe "Message" do it "should support initialization" do message = Message.new('[email protected]', '[email protected]', 'Hi!') message.from.should == '[email protected]' message.to.should == '[email protected]' message.title.should == 'Hi!' endend

Sunday, April 25, 2010

Page 77: Test-Driven Development + Refactoring

1 2 3Кодът,  който  искате  да  имате

describe "Message" do it "should support initialization" do message = Message.new('[email protected]', '[email protected]', 'Hi!') message.from.should == '[email protected]' message.to.should == '[email protected]' message.title.should == 'Hi!' endend

F

1)NameError in 'Message should support initialization'uninitialized constant Message/work/message/spec/message_spec.rb:5:

Finished in 0.009336 seconds

1 example, 1 failure

Sunday, April 25, 2010

Page 78: Test-Driven Development + Refactoring

1 2 3Най-­‐простата  имплементация

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title endend

Sunday, April 25, 2010

Page 79: Test-Driven Development + Refactoring

1 2 3Най-­‐простата  имплементация

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title endend

.

Finished in 0.009999 seconds

1 example, 0 failures

Sunday, April 25, 2010

Page 80: Test-Driven Development + Refactoring

1 2 3Пас

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title endend

Всичко  изглежда  ок,  няма  нужда  от  рефакториране

Sunday, April 25, 2010

Page 81: Test-Driven Development + Refactoring

1 2 3Изразявате  новата  функционалност  в  тест

describe 'Message' do # ... it "should validate 'from'" do # bacon.should be_valid ⇔ assert bacon.valid? Message.new('[email protected]', '[email protected]', 'Hi!').should be_valid Message.new('foo.bg', '[email protected]', 'Hi!').should_not be_valid Message.new('fry@foo', '[email protected]', 'Hi!').should_not be_valid endend

Sunday, April 25, 2010

Page 82: Test-Driven Development + Refactoring

1 2 3Изразявате  новата  функционалност  в  тест

describe 'Message' do # ... it "should validate 'from'" do # bacon.should be_valid ⇔ assert bacon.valid? Message.new('[email protected]', '[email protected]', 'Hi!').should be_valid Message.new('foo.bg', '[email protected]', 'Hi!').should_not be_valid Message.new('fry@foo', '[email protected]', 'Hi!').should_not be_valid endend

.F

1)NoMethodError in 'Message should validate 'from''undefined method `valid?' for #<Message:0x100327e08>/work/message/spec/message_spec.rb:13:

Finished in 0.010847 seconds

2 examples, 1 failure

Sunday, April 25, 2010

Page 83: Test-Driven Development + Refactoring

1 2 3Прост  регулярен  израз

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? @from =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

Sunday, April 25, 2010

Page 84: Test-Driven Development + Refactoring

1 2 3Прост  регулярен  израз

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? @from =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

..

Finished in 0.011689 seconds

2 examples, 0 failures

Sunday, April 25, 2010

Page 85: Test-Driven Development + Refactoring

1 2 3Отново  пас

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? @from =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

Все  още  всичко  е  ОК

Sunday, April 25, 2010

Page 86: Test-Driven Development + Refactoring

1 2 3Отново,  почвате  с  тест  преди  кода

describe 'Message' do # ... it "should validate 'to'" do Message.new('[email protected]', '[email protected]', 'Hi!').should be_valid Message.new('[email protected]', 'bender', 'Hi!').should_not be_valid Message.new('[email protected]', 'bender@foo', 'Hi!').should_not be_valid endend

Sunday, April 25, 2010

Page 87: Test-Driven Development + Refactoring

1 2 3Отново,  почвате  с  тест  преди  кода

describe 'Message' do # ... it "should validate 'to'" do Message.new('[email protected]', '[email protected]', 'Hi!').should be_valid Message.new('[email protected]', 'bender', 'Hi!').should_not be_valid Message.new('[email protected]', 'bender@foo', 'Hi!').should_not be_valid endend

..F

1)'Message should validate 'to'' FAILEDexpected valid? to return false, got 0/work/message/spec/message_spec.rb:20:

Finished in 0.009825 seconds

3 examples, 1 failure

Sunday, April 25, 2010

Page 88: Test-Driven Development + Refactoring

1 2 3Най-­‐простата  имплементация

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? @from =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ and @to =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

Sunday, April 25, 2010

Page 89: Test-Driven Development + Refactoring

1 2 3Най-­‐простата  имплементация

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? @from =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ and @to =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

...

Finished in 0.010058 seconds

3 examples, 0 failures

Sunday, April 25, 2010

Page 90: Test-Driven Development + Refactoring

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? @from =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ and @to =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

1 2 3Повторение

Sunday, April 25, 2010

Page 91: Test-Driven Development + Refactoring

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? @from =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ and @to =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ end private def email_valid?(address) address =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

1 2 3Малки  стъпки

Sunday, April 25, 2010

Page 92: Test-Driven Development + Refactoring

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? @from =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ and @to =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ end private def email_valid?(address) address =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

1 2 3Малки  стъпки

...

Finished in 0.010158 seconds

3 examples, 0 failures

Sunday, April 25, 2010

Page 93: Test-Driven Development + Refactoring

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? email_valid?(@from) and @to =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ end private def email_valid?(address) address =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

1 2 3Ама  наистина  малки  стъпки

Sunday, April 25, 2010

Page 94: Test-Driven Development + Refactoring

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? email_valid?(@from) and @to =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ end private def email_valid?(address) address =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

1 2 3Ама  наистина  малки  стъпки

...

Finished in 0.010001 seconds

3 examples, 0 failures

Sunday, April 25, 2010

Page 95: Test-Driven Development + Refactoring

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? email_valid?(@from) and email_valid?(@to) end private def email_valid?(address) address =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

1 2 3Готово

Sunday, April 25, 2010

Page 96: Test-Driven Development + Refactoring

class Message attr_reader :from, :to, :title def initialize(from, to, title) @from = from @to = to @title = title end def valid? email_valid?(@from) and email_valid?(@to) end private def email_valid?(address) address =~ /^[a-z]+@[a-z]+(\.[a-z]+)+$/ endend

1 2 3Готово

...

Finished in 0.009903 seconds

3 examples, 0 failures

Sunday, April 25, 2010

Page 97: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 98: Test-Driven Development + Refactoring

пример  за  интерфейса

Sunday, April 25, 2010

Page 99: Test-Driven Development + Refactoring

принуждава  ви  да  измислите  дизайн

Sunday, April 25, 2010

Page 100: Test-Driven Development + Refactoring

дизайнът  е  основан  наобратна  връзка,  а  не

на  спекулация

Sunday, April 25, 2010

Page 101: Test-Driven Development + Refactoring

гарантира  ви  че  имате  тест

Sunday, April 25, 2010

Page 102: Test-Driven Development + Refactoring

тестовете  се  забравят

Sunday, April 25, 2010

Page 103: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 104: Test-Driven Development + Refactoring

false  positive

Sunday, April 25, 2010

Page 105: Test-Driven Development + Refactoring

гарантира,  чекодът  е  тестваем

Sunday, April 25, 2010

Page 106: Test-Driven Development + Refactoring

sans  debugging

Sunday, April 25, 2010

Page 107: Test-Driven Development + Refactoring

Scope  creep

Sunday, April 25, 2010

Page 108: Test-Driven Development + Refactoring

Y.A.G.N.I.Y! ain’t gonna need it

Sunday, April 25, 2010

Page 109: Test-Driven Development + Refactoring

Защо?

•обратна  връзка

•мързел

•тестваем  код

•debugging

•scope  creep

Sunday, April 25, 2010

Page 110: Test-Driven Development + Refactoring

План

1. Какво  е  test-­‐driven?

2. Малка  демонстрация  (видео!)

3. TDD  в  реалния  свят

4. Въпроси  &  дискусия

Sunday, April 25, 2010

Page 111: Test-Driven Development + Refactoring

EPIC FAIL

Sunday, April 25, 2010

Page 112: Test-Driven Development + Refactoring

План

1. Какво  е  test-­‐driven?

2. Малка  демонстрация  (видео!)

3. TDD  в  реалния  свят

4. Въпроси  &  дискусия

Sunday, April 25, 2010

Page 113: Test-Driven Development + Refactoring

Терминологията  е  оплетена

Sunday, April 25, 2010

Page 114: Test-Driven Development + Refactoring

червеножълтозеленосиньо

червеносиньожълтозеленосиньо

Sunday, April 25, 2010

Page 115: Test-Driven Development + Refactoring

РитъмSunday, April 25, 2010

Page 116: Test-Driven Development + Refactoring

ДисциплинаSunday, April 25, 2010

Page 117: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 118: Test-Driven Development + Refactoring

тестовете  трябва  да  правятприложението  по-­‐лесно  за

поддръжка

лошото  прилагане  натестове  може  да  го  направипо-­‐трудно  за  поддържане

Sunday, April 25, 2010

Page 119: Test-Driven Development + Refactoring

тестовете  трябва  да  правятприложението  по-­‐лесно  за

поддръжка

лошото  прилагане  натестове  може  да  го  направипо-­‐трудно  за  поддържане

Голям

проблем

Sunday, April 25, 2010

Page 120: Test-Driven Development + Refactoring

тестовете  са  примеркак  се  работи  с  

кодът  ви

Sunday, April 25, 2010

Page 121: Test-Driven Development + Refactoring

example-­‐driven  development

Sunday, April 25, 2010

Page 122: Test-Driven Development + Refactoring

assert  ➡  expectationtest  method  ➡  exampletest  case  ➡  example  group

Sunday, April 25, 2010

Page 123: Test-Driven Development + Refactoring

Тестовете като документацияSunday, April 25, 2010

Page 124: Test-Driven Development + Refactoring

“Test-­‐Driven  Development  is  not  about  testing”

—  Dan  North

Sunday, April 25, 2010

Page 125: Test-Driven Development + Refactoring

user  stories

Sunday, April 25, 2010

Page 126: Test-Driven Development + Refactoring

CucumberFeature: User accounts Scenario: Changing your password Given my password is "zero cool" And I just logged in When I go to the settings page And I fill in "Password" with "secret" And I fill in "Password confirmation" with "secret" And I press "Save password" Then my password should be "secret"

Sunday, April 25, 2010

Page 127: Test-Driven Development + Refactoring

CucumberFeature: User accounts ... Scenario: Confirmation fail on password change Given my password is "zero cool" And I just logged in When I go to the settings page And I fill in "Password" with "secret" But I fill in "Password confirmation" with "tetris" And I press "Save password" Then I should see "Password and confirmation didn't match" And my password should be "zero cool"

Sunday, April 25, 2010

Page 128: Test-Driven Development + Refactoring

behavior-­‐driven  development

Sunday, April 25, 2010

Page 129: Test-Driven Development + Refactoring

прилага  идеите  на  TDDвърху  feature-­‐ите*  на

приложението

*  чуждиците  не  са  куул

Sunday, April 25, 2010

Page 130: Test-Driven Development + Refactoring

1

red

red

greenrefactor

greenrefactor

2

3

45

67

RSpec

Cucumber

Sunday, April 25, 2010

Page 131: Test-Driven Development + Refactoring

continuous  testing

Sunday, April 25, 2010

Page 132: Test-Driven Development + Refactoring

ресурси

Sunday, April 25, 2010

Page 133: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 134: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 135: Test-Driven Development + Refactoring

Sunday, April 25, 2010

Page 136: Test-Driven Development + Refactoring

Software  Craftsmanship  Bulgaria

Sunday, April 25, 2010

Page 137: Test-Driven Development + Refactoring

http://groups.google.com/group/software_craftsmanship

Sunday, April 25, 2010

Page 138: Test-Driven Development + Refactoring

just  google  it

Sunday, April 25, 2010

Page 139: Test-Driven Development + Refactoring

План

1. Какво  е  test-­‐driven?

2. Малка  демонстрация  (видео!)

3. TDD  в  реалния  свят

4. Въпроси  &  дискусия

Sunday, April 25, 2010