TDD - Test Driven Development

TDD - Test Driven Development

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

033485f7e18823d4ccabb24e5cb4935f?s=128

Uğur Özyılmazel

April 29, 2015
Tweet

Transcript

  1. TDD Test Driven Development

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

  3. ?? ?

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

    TDD
  5. Verification & Validation / QA KODU YAZ TEST'i YAZ TEST'i

    ÇALIŞTIR REFACTOR
  6. TDD

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

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

  10. None
  11. EN SONDA YAZDIĞIN KOD'LARI DÜZENLE!

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

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

    etmek var!
  14. TEST YAZ / ÇALIŞTIR FAIL EDENLERİ GÖR KOD'U DÜZELT TEKRAR

    ÇALIŞTIR REFACTOR
  15. 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
  16. 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
  17. TEST YAZACAK ZAMANIM YOK

  18. !

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

  20. 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
  21. 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
  22. Unit Tests Uygulama içindeki en küçük parçaları fonksiyonları test ettiğimiz

    test. Hatta buna Functionality Testing de denir.
  23. Integration Tests Kod içindeki farklı parçacıkların birbirleriyle olan entegrasyonlarını /

    ilişkilerini test eden test.
  24. Acceptance Tests Baştan sona tüm fonksiyonalitenin, entegrasyonun test edildiği test.

    Bu test'e END to END Testing de denir.
  25. Sağlıklı Test Akışı 1. Unit Tests 2. Integration Tests 3.

    Acceptance Tests
  26. TEST ARAÇLARI

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

  28. Fixture ve Factory Testleri yapabilmek için gerekebilecek fake datalar /

    dublörler
  29. 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
  30. factory_girl rspec-mocks mocha rr faker fabrication

  31. TEST FIRST! Teşekkürler