SlideShare una empresa de Scribd logo
1 de 21
Automated Testing
TDD NEDIR?
BIR SORUNU ÇÖZÜMLEDIĞIMIZE NASIL KARAR VERIRIZ?
TDD(Test Driven Development) Nedir?
◦ 1999 yılında, Kent Back tarafından ortaya atılan yazılım metodolojilerinin geliştirilmesi ve müşteri
ihtiyaçlar karşısında sürdürülebilir yapıda mimariler oraya koyulması amacı ile tasarlanmış bir yazılım
geliştirme sürecidir.
◦ Kent Beck Test-Driven Development By Example2 isimli kitabında test güdümlü yazılımı şu şekilde
tanımlıyor;
Test-driven development is a set of techniques that any software engineer can follow, which encourage
simple design and test suites that inspire confidence.
Test güdümlü yazılım, yazılım mühendislerinin kullanabileceği iyi design ve testleri destekleyen ve dolaylı
olarak güven artıran metotlardır.
Zorluklar
◦ Klasik yazılım geliştirme yaklaşımı ile tamamen zıt bir bakış açısı(TDD geleneksel yazılım tarzını tamamen
tersine çevirir)
◦ Fazlaca pratik ihtiyacı
◦ Geliştirme sürecinde klasik yönteme göre daha fazla zaman maliyeti (arayüz testleri?)
Avantajlar
◦ Code First yaklaşımı ile koddan beklenti net olarak belirlenir. Kod yazmadan önce bir plana sahip oluruz.
◦ Detaylı bir döküman sağlar.
◦ Daha az debugger. Assertionlar sayesinde muhtemel hataları öngörme
◦ Yazılan kodlar düzenli olarak hızlıca test edilebilir
◦ Gereksiz(Fazlalık) kod bloklarını daha kolay farkedilmesini sağlar(Refactoring)
◦ Daha modüler, esnek ve genişletilebilir mimari sağlar
Unit Test
◦ Yazılımın test edilebilir en küçük parçası
Unit Test
◦ Unit test ile kendi içinde bütün olan bir kod ünitesi test edilir.(Method bazında)
◦ Unit test ile test edilen sınıfın işlevlerini doğru olarak yerine getirip getirmediği test edilir.
Test Doubles
◦ Taklit nesne anlamına gelir.
◦ Nesnenin sahte bir örneğini oluşturur
◦ Nesne davranışlarını kontrol edebilir.
◦ Mock<IRepository> mock = new Mock<IRepository>();
◦ Mock<IEmailService > mock = new Mock<IEmailService>();
Test Doubles
◦ Mock
◦ Bağlı(Couple) bulunduğu kaynağın çalışıp çalışmadığı ile ilgilenir.
◦ Stub
◦ Bağlı bulunduğu kaynak bir dönüş değerine sahip ise
◦ Sahte implamantasyon
◦ Spy
◦ Dummy
◦ Fake
Integration Test
◦ Test birim değil alt bileşenlerle birlikte tasarlanır
◦ Testleri uçtan uca diğer bileşenlerin davranışları ile test eder
◦ Birim testlere göre doğrulama daha yüksektir
◦ Birim testlere göre çalışması daha uzun
◦ Sürekli çalıştırılması geliştirme sürecinde zaman kaybına neden olabilir
Integration Test
◦ Eğer kod bloğu;
◦ Database(Repository)
◦ Network
◦ System.IO
Proje bazında kazanımlar
◦ İstikrar(Stability)
◦ Yazılan testler zamanla projeye ait bir dökümantasyon ve spesifikasyon.
◦ Yazılan kodun tekrarlı test edilebilir olması kodun güvenilir olmasını sağlıyor.
◦ Yapısal olarak bağımlılıkları ayırmaya zorladığı için kod kalitesinin artmasını ve geliştirilebilir yapının
sürdürülebilir olmasını sağlıyor.
Test kodlama kazanımları
◦ Tamamen otomatize olması gerekliliği beraberinde Continuous Deployment altyapısı sağlıyor.
TDD Prensipleri
TDD Prensipleri
Red — Test edilecek metodla ilgili neye ihtiyacın olduğunu ve methodu nasıl kullanacağını
belirle(spesifications). Bu beklentilerini deneyleyen koşulları yaz.
Green — Yazdığın testi geçebilecek en basit kodu yaz, fazlası değil.
Refactor — Testi geçen kodunu yeniden gözden geçir ve gereksiz kod bloklarından arındırmaya
çalış. Tekrar test et ve çalıştığını gör.
TDD Prensipleri
◦ Kent Beck Test-Driven Development By Example isimli kitabında TDD için atılması gereken adımların şu
şekilde olması gerektiğini yazıyor;
◦ Quickly add a test (hemen bir test oluştur)
◦ Run all tests and see the new one fail (testleri çalıştır ve en son eklenen testin çalışmadığını gör)
◦ Make a little change (testin çalışması için ufak bir değişiklik yap; refactoring)
◦ Run all tests an see them all succeed (testleri çalıştır ve hepsinin hatasız çalışır durumda olduğunu gör)
◦ Refactor to remove duplication (tekrarları yok et)
İsimlendirme Standartları
◦ ClassNameTest.cs
◦ MethodName_SystemUnderTestScenerio_ExpectedBehaviour()
◦ for_ClassName
◦ MethodName.cs
Frameworks
◦ Nunit(JUnit)
◦ xUnit.net
◦ MbUnit
◦ MSTest
Fixtures
◦ Arrange
◦ Test methodu için ihtiyacımız olan tanımlamalar burada gerçeklenir. Bu tanımlamalar bağımlılıkların initialize edilmesi, mock
tanımları ve requirement tanımlamaları. Kısacası test için ihtiyacımı olan tanımlamaların tümü burada yer alır.
◦ Act
◦ Test edilecek ünite burada invoke edilir.
◦ Assert
◦ Testimizin kabul kriterleri burada tanımlanır.
Automation Tools
◦ Manual
◦ Visual Studio
◦ Resharper
◦ Testdriven .Net
◦ Auto
◦ TeamCity(Continuous Deplyment)
◦ Ncrunch
Yardımcı Kütüphaneler
◦ NUnit
◦ Moq
◦ FluentAssertion
Github
https :/ /g ith u b .com/n ezir y / TDD -Kaynak

Más contenido relacionado

La actualidad más candente (8)

Gradle ile Proje Insası
Gradle ile Proje InsasıGradle ile Proje Insası
Gradle ile Proje Insası
 
Test Güdümlü Geliştirme ve Birim Testler
Test Güdümlü Geliştirme ve Birim TestlerTest Güdümlü Geliştirme ve Birim Testler
Test Güdümlü Geliştirme ve Birim Testler
 
Git ile Sürüm Takibi
Git ile Sürüm TakibiGit ile Sürüm Takibi
Git ile Sürüm Takibi
 
Devops Kime Lazım? Neden Lazım?
Devops Kime Lazım? Neden Lazım?Devops Kime Lazım? Neden Lazım?
Devops Kime Lazım? Neden Lazım?
 
Davranis Odakli Gelistirmeye Giris, Behat ve Mink
Davranis Odakli Gelistirmeye Giris, Behat ve MinkDavranis Odakli Gelistirmeye Giris, Behat ve Mink
Davranis Odakli Gelistirmeye Giris, Behat ve Mink
 
Kurumsal Java & Web Teknolojileri
Kurumsal Java & Web Teknolojileri Kurumsal Java & Web Teknolojileri
Kurumsal Java & Web Teknolojileri
 
Komut satırı JAVA
Komut satırı JAVAKomut satırı JAVA
Komut satırı JAVA
 
Jenkins Notlarım
Jenkins NotlarımJenkins Notlarım
Jenkins Notlarım
 

Destacado

Smoke testing a_necessary_evil!
Smoke testing a_necessary_evil!Smoke testing a_necessary_evil!
Smoke testing a_necessary_evil!
bharanisram
 
Testing types (simple)1
Testing types (simple)1Testing types (simple)1
Testing types (simple)1
Nataly Chill
 

Destacado (13)

Flowtown case study for #sllconf
Flowtown case study for #sllconf Flowtown case study for #sllconf
Flowtown case study for #sllconf
 
Smoke testing a_necessary_evil!
Smoke testing a_necessary_evil!Smoke testing a_necessary_evil!
Smoke testing a_necessary_evil!
 
What is smoke testing
What is smoke testingWhat is smoke testing
What is smoke testing
 
Testing types (simple)1
Testing types (simple)1Testing types (simple)1
Testing types (simple)1
 
Smoke testing with Go
Smoke testing with GoSmoke testing with Go
Smoke testing with Go
 
How to Run a Smoke Test
How to Run a Smoke TestHow to Run a Smoke Test
How to Run a Smoke Test
 
Smoke testing
Smoke testingSmoke testing
Smoke testing
 
TÜBİTAK TÜSSİDE Tanımı Sunumu - 2016
TÜBİTAK TÜSSİDE Tanımı Sunumu - 2016TÜBİTAK TÜSSİDE Tanımı Sunumu - 2016
TÜBİTAK TÜSSİDE Tanımı Sunumu - 2016
 
Smoke Testing: Test Your App or Website
Smoke Testing: Test Your App or WebsiteSmoke Testing: Test Your App or Website
Smoke Testing: Test Your App or Website
 
Kayıtdışı Ekonomi: Anket Çalışması Ve Bulgular
Kayıtdışı Ekonomi: Anket Çalışması Ve BulgularKayıtdışı Ekonomi: Anket Çalışması Ve Bulgular
Kayıtdışı Ekonomi: Anket Çalışması Ve Bulgular
 
States, state graphs and transition testing
States, state graphs and transition testingStates, state graphs and transition testing
States, state graphs and transition testing
 
Activity Diagram
Activity DiagramActivity Diagram
Activity Diagram
 
Smoke Testing
Smoke TestingSmoke Testing
Smoke Testing
 

Similar a Test Driven Development

Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleriVisual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
Murat Başeren
 

Similar a Test Driven Development (20)

Sunum tdd
Sunum tddSunum tdd
Sunum tdd
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
PhpSpec ve TDD
PhpSpec ve TDDPhpSpec ve TDD
PhpSpec ve TDD
 
ASP.Net MVC ile Web Uygulamaları -12(Test Drive Developmet)
ASP.Net MVC ile Web Uygulamaları -12(Test Drive Developmet)ASP.Net MVC ile Web Uygulamaları -12(Test Drive Developmet)
ASP.Net MVC ile Web Uygulamaları -12(Test Drive Developmet)
 
Visual Studio Developer Tools
Visual Studio Developer ToolsVisual Studio Developer Tools
Visual Studio Developer Tools
 
Software/Yazılım Test
Software/Yazılım TestSoftware/Yazılım Test
Software/Yazılım Test
 
Teste bakıs v01
Teste bakıs v01Teste bakıs v01
Teste bakıs v01
 
Unit test
Unit testUnit test
Unit test
 
In Turkish: Yazılım Test-Kod Mühendisliği (YTKM): Kaliteli Test-Kodu Geliştir...
In Turkish: Yazılım Test-Kod Mühendisliği (YTKM): Kaliteli Test-Kodu Geliştir...In Turkish: Yazılım Test-Kod Mühendisliği (YTKM): Kaliteli Test-Kodu Geliştir...
In Turkish: Yazılım Test-Kod Mühendisliği (YTKM): Kaliteli Test-Kodu Geliştir...
 
Çevik testler
Çevik testlerÇevik testler
Çevik testler
 
JUnit ve Docker yardimiyla kolay entegrasyon testleri
JUnit ve Docker yardimiyla kolay entegrasyon testleriJUnit ve Docker yardimiyla kolay entegrasyon testleri
JUnit ve Docker yardimiyla kolay entegrasyon testleri
 
005 Alternatif Yazilim Surecleri [99 Slides]
005 Alternatif Yazilim Surecleri [99 Slides]005 Alternatif Yazilim Surecleri [99 Slides]
005 Alternatif Yazilim Surecleri [99 Slides]
 
Yazılım Mimarileri - Yazılım Geliştirme Modelleri
Yazılım Mimarileri - Yazılım Geliştirme ModelleriYazılım Mimarileri - Yazılım Geliştirme Modelleri
Yazılım Mimarileri - Yazılım Geliştirme Modelleri
 
Yazılım mimarisi yazılım müh.
Yazılım mimarisi yazılım müh.Yazılım mimarisi yazılım müh.
Yazılım mimarisi yazılım müh.
 
Birim Test Stratejileri.pptx
Birim Test Stratejileri.pptxBirim Test Stratejileri.pptx
Birim Test Stratejileri.pptx
 
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleriVisual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
Visual studio 2010 ve tfs 2010 yeni takim gelistirme ozellikleri
 
GDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme TeknikleriGDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme Teknikleri
 
Test Mühendisliğine Giriş Eğitimi - Bölüm 1
Test Mühendisliğine Giriş Eğitimi - Bölüm 1Test Mühendisliğine Giriş Eğitimi - Bölüm 1
Test Mühendisliğine Giriş Eğitimi - Bölüm 1
 
Test
TestTest
Test
 

Test Driven Development

  • 1. Automated Testing TDD NEDIR? BIR SORUNU ÇÖZÜMLEDIĞIMIZE NASIL KARAR VERIRIZ?
  • 2. TDD(Test Driven Development) Nedir? ◦ 1999 yılında, Kent Back tarafından ortaya atılan yazılım metodolojilerinin geliştirilmesi ve müşteri ihtiyaçlar karşısında sürdürülebilir yapıda mimariler oraya koyulması amacı ile tasarlanmış bir yazılım geliştirme sürecidir. ◦ Kent Beck Test-Driven Development By Example2 isimli kitabında test güdümlü yazılımı şu şekilde tanımlıyor; Test-driven development is a set of techniques that any software engineer can follow, which encourage simple design and test suites that inspire confidence. Test güdümlü yazılım, yazılım mühendislerinin kullanabileceği iyi design ve testleri destekleyen ve dolaylı olarak güven artıran metotlardır.
  • 3. Zorluklar ◦ Klasik yazılım geliştirme yaklaşımı ile tamamen zıt bir bakış açısı(TDD geleneksel yazılım tarzını tamamen tersine çevirir) ◦ Fazlaca pratik ihtiyacı ◦ Geliştirme sürecinde klasik yönteme göre daha fazla zaman maliyeti (arayüz testleri?)
  • 4. Avantajlar ◦ Code First yaklaşımı ile koddan beklenti net olarak belirlenir. Kod yazmadan önce bir plana sahip oluruz. ◦ Detaylı bir döküman sağlar. ◦ Daha az debugger. Assertionlar sayesinde muhtemel hataları öngörme ◦ Yazılan kodlar düzenli olarak hızlıca test edilebilir ◦ Gereksiz(Fazlalık) kod bloklarını daha kolay farkedilmesini sağlar(Refactoring) ◦ Daha modüler, esnek ve genişletilebilir mimari sağlar
  • 5. Unit Test ◦ Yazılımın test edilebilir en küçük parçası
  • 6. Unit Test ◦ Unit test ile kendi içinde bütün olan bir kod ünitesi test edilir.(Method bazında) ◦ Unit test ile test edilen sınıfın işlevlerini doğru olarak yerine getirip getirmediği test edilir.
  • 7. Test Doubles ◦ Taklit nesne anlamına gelir. ◦ Nesnenin sahte bir örneğini oluşturur ◦ Nesne davranışlarını kontrol edebilir. ◦ Mock<IRepository> mock = new Mock<IRepository>(); ◦ Mock<IEmailService > mock = new Mock<IEmailService>();
  • 8. Test Doubles ◦ Mock ◦ Bağlı(Couple) bulunduğu kaynağın çalışıp çalışmadığı ile ilgilenir. ◦ Stub ◦ Bağlı bulunduğu kaynak bir dönüş değerine sahip ise ◦ Sahte implamantasyon ◦ Spy ◦ Dummy ◦ Fake
  • 9. Integration Test ◦ Test birim değil alt bileşenlerle birlikte tasarlanır ◦ Testleri uçtan uca diğer bileşenlerin davranışları ile test eder ◦ Birim testlere göre doğrulama daha yüksektir ◦ Birim testlere göre çalışması daha uzun ◦ Sürekli çalıştırılması geliştirme sürecinde zaman kaybına neden olabilir
  • 10. Integration Test ◦ Eğer kod bloğu; ◦ Database(Repository) ◦ Network ◦ System.IO
  • 11. Proje bazında kazanımlar ◦ İstikrar(Stability) ◦ Yazılan testler zamanla projeye ait bir dökümantasyon ve spesifikasyon. ◦ Yazılan kodun tekrarlı test edilebilir olması kodun güvenilir olmasını sağlıyor. ◦ Yapısal olarak bağımlılıkları ayırmaya zorladığı için kod kalitesinin artmasını ve geliştirilebilir yapının sürdürülebilir olmasını sağlıyor.
  • 12. Test kodlama kazanımları ◦ Tamamen otomatize olması gerekliliği beraberinde Continuous Deployment altyapısı sağlıyor.
  • 14. TDD Prensipleri Red — Test edilecek metodla ilgili neye ihtiyacın olduğunu ve methodu nasıl kullanacağını belirle(spesifications). Bu beklentilerini deneyleyen koşulları yaz. Green — Yazdığın testi geçebilecek en basit kodu yaz, fazlası değil. Refactor — Testi geçen kodunu yeniden gözden geçir ve gereksiz kod bloklarından arındırmaya çalış. Tekrar test et ve çalıştığını gör.
  • 15. TDD Prensipleri ◦ Kent Beck Test-Driven Development By Example isimli kitabında TDD için atılması gereken adımların şu şekilde olması gerektiğini yazıyor; ◦ Quickly add a test (hemen bir test oluştur) ◦ Run all tests and see the new one fail (testleri çalıştır ve en son eklenen testin çalışmadığını gör) ◦ Make a little change (testin çalışması için ufak bir değişiklik yap; refactoring) ◦ Run all tests an see them all succeed (testleri çalıştır ve hepsinin hatasız çalışır durumda olduğunu gör) ◦ Refactor to remove duplication (tekrarları yok et)
  • 16. İsimlendirme Standartları ◦ ClassNameTest.cs ◦ MethodName_SystemUnderTestScenerio_ExpectedBehaviour() ◦ for_ClassName ◦ MethodName.cs
  • 18. Fixtures ◦ Arrange ◦ Test methodu için ihtiyacımız olan tanımlamalar burada gerçeklenir. Bu tanımlamalar bağımlılıkların initialize edilmesi, mock tanımları ve requirement tanımlamaları. Kısacası test için ihtiyacımı olan tanımlamaların tümü burada yer alır. ◦ Act ◦ Test edilecek ünite burada invoke edilir. ◦ Assert ◦ Testimizin kabul kriterleri burada tanımlanır.
  • 19. Automation Tools ◦ Manual ◦ Visual Studio ◦ Resharper ◦ Testdriven .Net ◦ Auto ◦ TeamCity(Continuous Deplyment) ◦ Ncrunch
  • 20. Yardımcı Kütüphaneler ◦ NUnit ◦ Moq ◦ FluentAssertion
  • 21. Github https :/ /g ith u b .com/n ezir y / TDD -Kaynak