Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TDD - Test Driven Development

TDD - Test Driven Development

Test'le Yürüyen Geliştirme metodolojisine yakından bakış.

Uğur Özyılmazel

April 29, 2015
Tweet

More Decks by Uğur Özyılmazel

Other Decks in Programming

Transcript

  1. TDD
    Test Driven Development

    View full-size slide

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

    View full-size slide

  3. TEST TÜRLERİ
    • Verification & Validation
    • Quality Assurance
    • TDD

    View full-size slide

  4. Verification & Validation / QA
    KODU YAZ
    TEST'i YAZ
    TEST'i ÇALIŞTIR
    REFACTOR

    View full-size slide

  5. ÖNCE
    HAYAL ETTİĞİN UYGULAMAYI TANIMLA
    BEKLENTİLERİNİ BELİRLE!
    TEST'LERİNİ ÇALIŞTIR

    View full-size slide

  6. SONRA
    TEST'LERİ ÇALIŞTIR VE
    HEPSİNİ BAŞARIYLA GEÇ!

    View full-size slide

  7. EN SONDA
    YAZDIĞIN KOD'LARI
    DÜZENLE!

    View full-size slide

  8. RED (Kırmızı)
    1
    TEST FAIL EDECEK!
    Henüz ilgili fonksiyonlar/sınıflar yazılmadı!

    View full-size slide

  9. GREEN (YEŞİL)
    2
    TÜM TESTLER PASS ETTİ!
    Şimdi sırada REFACTOR etmek var!

    View full-size slide

  10. TEST YAZ / ÇALIŞTIR
    FAIL EDENLERİ GÖR
    KOD'U DÜZELT TEKRAR ÇALIŞTIR
    REFACTOR

    View full-size slide

  11. 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

    View full-size slide

  12. 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

    View full-size slide

  13. TEST YAZACAK
    ZAMANIM YOK

    View full-size slide

  14. TEST YAZACAK
    ZAMANIM YOK
    BUNU SÖYLEYEN CAHİLDİR!

    View full-size slide

  15. 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

    View full-size slide

  16. Loaded suite untitled
    Started
    .
    Finished in 0.001015 seconds.
    1 tests, 4 assertions, 0 failures, 0 errors, 0
    pendings, 0 omissions, 0 notifications
    100% passed
    985.22 tests/s, 3940.89 assertions/s

    View full-size slide

  17. Unit Tests
    Uygulama içindeki en küçük parçaları
    fonksiyonları test ettiğimiz test. Hatta
    buna Functionality Testing de denir.

    View full-size slide

  18. Integration Tests
    Kod içindeki farklı parçacıkların
    birbirleriyle olan entegrasyonlarını /
    ilişkilerini test eden test.

    View full-size slide

  19. Acceptance Tests
    Baştan sona tüm fonksiyonalitenin,
    entegrasyonun test edildiği test. Bu
    test'e END to END Testing de denir.

    View full-size slide

  20. Sağlıklı Test Akışı
    1. Unit Tests
    2. Integration Tests
    3. Acceptance Tests

    View full-size slide

  21. TEST ARAÇLARI

    View full-size slide

  22. rspec cucumber mini-test
    test-unit capybara selenium

    View full-size slide

  23. Fixture ve Factory
    Testleri yapabilmek için gerekebilecek
    fake datalar / dublörler

    View full-size slide

  24. 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

    View full-size slide

  25. factory_girl rspec-mocks
    mocha rr faker fabrication

    View full-size slide

  26. TEST FIRST!
    Teşekkürler

    View full-size slide