31
TDD Test Driven Development

Test'le Yürüyen Geliştirme (TDD)

Embed Size (px)

Citation preview

Page 1: Test'le Yürüyen Geliştirme (TDD)

TDD Test Driven Development

Page 2: Test'le Yürüyen Geliştirme (TDD)

Test'le Yürüyen/İlerleyen Geliştirme

Page 3: Test'le Yürüyen Geliştirme (TDD)

???

Page 4: Test'le Yürüyen Geliştirme (TDD)

TEST TÜRLERİ

• Verification & Validation • Quality Assurance • TDD

Page 5: Test'le Yürüyen Geliştirme (TDD)

Verification & Validation / QA

KODU YAZ

TEST'i YAZ

TEST'i ÇALIŞTIR

REFACTOR

Page 6: Test'le Yürüyen Geliştirme (TDD)

TDD

Page 7: Test'le Yürüyen Geliştirme (TDD)

ÖNCE HAYAL ETTİĞİN UYGULAMAYI TANIMLA

BEKLENTİLERİNİ BELİRLE! TEST'LERİNİ ÇALIŞTIR

Page 8: Test'le Yürüyen Geliştirme (TDD)
Page 9: Test'le Yürüyen Geliştirme (TDD)

SONRA TEST'LERİ ÇALIŞTIR VE

HEPSİNİ BAŞARIYLA GEÇ!

Page 10: Test'le Yürüyen Geliştirme (TDD)
Page 11: Test'le Yürüyen Geliştirme (TDD)

EN SONDA YAZDIĞIN KOD'LARI

DÜZENLE!

Page 12: Test'le Yürüyen Geliştirme (TDD)

RED (Kırmızı)1

TEST FAIL EDECEK!

Henüz ilgili fonksiyonlar/sınıflar yazılmadı!

Page 13: Test'le Yürüyen Geliştirme (TDD)

GREEN (YEŞİL)2

TÜM TESTLER PASS ETTİ!

Şimdi sırada REFACTOR etmek var!

Page 14: Test'le Yürüyen Geliştirme (TDD)

TEST YAZ / ÇALIŞTIR

FAIL EDENLERİ GÖR

KOD'U DÜZELT TEKRAR ÇALIŞTIR

REFACTOR

Page 15: Test'le Yürüyen Geliştirme (TDD)

FAYDALARI• BUG FREE geliştirme • Hızlı geliştirme • Dökümantasyon yazma zahmetinden kurtarıyor • Sürdürülebilir kod yazma • Uçtan uca uygulamayı görmek • Deployment otomasyonunda kolaylık • Test Coverage

Page 16: Test'le Yürüyen Geliştirme (TDD)

DEZAVANTAJLARI

• Legacy code'a entegre etmek sorun olabilir • Test'lerin maintenance işi ve test süresi • "Quick Edit" mini değişimler için zor • False Positives • Edge Case'leri mutlaka tamamlamak gerek

Page 17: Test'le Yürüyen Geliştirme (TDD)

TEST YAZACAK ZAMANIM YOK

Page 18: Test'le Yürüyen Geliştirme (TDD)

!

Page 19: Test'le Yürüyen Geliştirme (TDD)

TEST YAZACAK ZAMANIM YOK

BUNU SÖYLEYEN CAHİLDİR!

Page 20: Test'le Yürüyen Geliştirme (TDD)

require 'test/unit'

class TestPalindrome < Test::Unit::TestCase def test_palindrome palindromes = ["anastas mum satsana", "kuk"] not_palindromes = ["hello", "mello"] palindromes.each{|str| assert palindrome?(str)} not_palindromes.each{|str| assert !palindrome?(str)} end end

def palindrome?(string) string.reverse == string end

Page 21: Test'le Yürüyen Geliştirme (TDD)

Loaded suite untitledStarted.

Finished in 0.001015 seconds.

1 tests, 4 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications100% passed

985.22 tests/s, 3940.89 assertions/s

Page 22: Test'le Yürüyen Geliştirme (TDD)

Unit Tests

Uygulama içindeki en küçük parçaları fonksiyonları test ettiğimiz test. Hatta

buna Functionality Testing de denir.

Page 23: Test'le Yürüyen Geliştirme (TDD)

Integration Tests

Kod içindeki farklı parçacıkların birbirleriyle olan entegrasyonlarını /

ilişkilerini test eden test.

Page 24: Test'le Yürüyen Geliştirme (TDD)

Acceptance Tests

Baştan sona tüm fonksiyonalitenin, entegrasyonun test edildiği test. Bu

test'e END to END Testing de denir.

Page 25: Test'le Yürüyen Geliştirme (TDD)

Sağlıklı Test Akışı

1. Unit Tests 2. Integration Tests 3. Acceptance Tests

Page 26: Test'le Yürüyen Geliştirme (TDD)

TEST ARAÇLARI

Page 27: Test'le Yürüyen Geliştirme (TDD)

rspec cucumber mini-test test-unit capybara selenium

Page 28: Test'le Yürüyen Geliştirme (TDD)

Fixture ve Factory

Testleri yapabilmek için gerekebilecek fake datalar / dublörler

Page 29: Test'le Yürüyen Geliştirme (TDD)

it "allows setting these responses" do fake_person = double("Person") allow(fake_person).to receive_messages(:full_name => "Uğur Özyılmazel") expect(fake_person.full_name).to eq("Uğur Özyılmazel") end

it "stubs desired year on a real Time object" do time = Time.new.now allow(time).to receive(:year).and_return(1972) expect(time.year).to eq(1975) end

Page 30: Test'le Yürüyen Geliştirme (TDD)

factory_girl rspec-mocks mocha rr faker fabrication

Page 31: Test'le Yürüyen Geliştirme (TDD)

TEST FIRST!Teşekkürler