Test Güdümlü Yazılım

21
Özcan Acar © 2009 Kurumsal Java.com .com

description

Test Güdümlü Yazılım

Transcript of Test Güdümlü Yazılım

Page 1: Test Güdümlü Yazılım

Özcan Acar © 2009 Kurumsal Java.com

.com

Page 2: Test Güdümlü Yazılım

Test Güdümlü YazılımTest Driven Development (TDD)

Özcan [email protected]

http://www.ozcanacar.comhttp://www.kurumsaljava.com

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Page 3: Test Güdümlü Yazılım

Özcan Acar Hakkındapublic class OezcanAcar

{

public static void main(String[] args)

{

Acar oezcan = new Acar();

oezcan.setBirthday( "18.07.1974" );

oezcan.setBirthplace( "Izmir" );

oezcan.setJob( "Bilgisayar Mühendisi" );

oezcan.setPassion( "Java EE" );

}

}© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Page 4: Test Güdümlü Yazılım

Özcan Acar Hakkında

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Page 5: Test Güdümlü Yazılım

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Tasarım şablonu nedir?

Interface / Abstract sınıf nedir?

Oluşturucu Tasarım Şablonları

Factory, Abstract Factory, Builder, Prototype, Singleton

Yapısal Tasarım Şablonları

Adapter, Bridge, Facade, Decorator, Composite, Flyweight, Proxy

Davranışsal Tasarım Şablonları

Command, Memento, Strategy, Iterator, State, Observer, Visitor

Java Tasarım Şablonları ve Yazılım Mimarileri

Page 6: Test Güdümlü Yazılım

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Çevik süreç nedir?

Çevik manifesto

Extreme Programming nedir?

XP değerleri ve prensipleri

Çevik proje planlaması

Çevik süreçlerde iletişim

Çevik tasarım

Sürekli entegrasyon

Test güdümlü yazılım

Yazılım metrikleri

Extreme Programming

Page 7: Test Güdümlü Yazılım

Sunumun Đçeriği

TDD nedir?

TDD nasıl uygulanır?

TDD avantajları

Pratik TDD uygulaması

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Page 8: Test Güdümlü Yazılım

Test Güdümlü YazılımTest Driven Development (TDD)

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

TasarımTasarım

TestTest

ĐmplementasyonĐmplementasyon

TestTest

Page 9: Test Güdümlü Yazılım

Test Güdümlü YazılımTest Driven Development (TDD)

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

[ Test çalışır durumda ]

[ Hata oluştu ][ Test çalışır durumda, yazılıma devam edilir ]

[ Hata oluştu ]

Test ekle

Testi çalıştır

Gerekli değişiklikleri yap

Testi çalıştır

[ Test çalışır durumda, yazılım son bulur]

1.Hemen bir test oluştur

2.Testleri çalıştır ve en son eklenen testin çalışmadığını gör

3.Testin çalışması için ufak bir değişiklik yap

4.Testleri çalıştır ve hepsinin hatasız çalışır durumdaolduğunu gör

5. Aynı ve benzer kodları yok et.

Page 10: Test Güdümlü Yazılım

Test Güdümlü YazılımTest Driven Development (TDD)

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Design oluştur Kodla Test et

Şelale Tarzı (Waterfall)

Test ekle Kodla Yeniden yapılandır(refactoring, design)

Çevik Yazılım Tarzı (Agile Development)

Page 11: Test Güdümlü Yazılım

Test Güdümlü YazılımTest Driven Development (TDD)

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

JUnit testleri programcıyı, sınıfların nasıl kullanıldıklarını düşünmeye zorlar. Kullanıcı gözüyle sınıflara bakıldığı taktirde, daha basit ve kullanışlı yapılandırılmaları kolaylaşır.

Programcı JUnit testlerini hazırlarken, sistemin nasıl çalışması gerektiğini hayal etmek zorundadır. TDD ile sadece gerekli sınıflar ve metotlar oluşturulur. TDD, programcının “belki ilerde kullanılır, bu metodu eklemekte fayda var” tarzı düşünmesini engeller. Böylece TDD proje maliyetini düşürür, çünkü sadece gerekli sınıf ve metotlar için zaman harcanır.

TDD ile test kapsama alanı (test coverage) geniş olur. Hemen hemen her satır kod test metotları tarafından çalıştırılır.

JUnit testlerinden yola çıkarak oluşturulan sınıflar daha sağlam bir yapıda olurlar. Programcı JUnit testlerini oluştururken, oluşturduğu sınıfların kullanılış tarzı, olabilecek hatalar ve performansı hakkında düşünür ve buna göre sınıfı yapılandırır.

Page 12: Test Güdümlü Yazılım

Test Güdümlü YazılımTest Driven Development (TDD)

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

JUnit testleri koda olan güveni artırır. Kod üzerinde yapılan değişiklikler yan etkilere sebep verebilir. JUnit testleri olmadan oluşabilecek yan etkilerin tespiti çok zordur. JUnit testleri ile kodun yeniden yapılandırılması (refactoring) kolaylaşır, çünkü oluşabilecek hatalar JUnit testleri ile lokalize edilebilir.

JUnit testleri sistemin nasıl çalıştığını gösteren dokumentasyon olarak düşünülebilir. Programcılar JUnit testlerini inceleyerek, sistemin nasıl çalıştığını çok kısa bir zaman içinde öğrenebilirler.

TDD tarzı programlama programcının debugger ile hata arama zamanını kısaltır yada tamamen ortadan kaldırır.

Page 13: Test Güdümlü Yazılım

Gereksinimlerden Testler Doğar

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Bir mü şterimiz DVD film alım-satım ve kiralama işiyle uğraşmaktadır. Bizi sahip olduğu filmleri yönetebileceği bir programın hazırlanması için görevlendirir. Programdan beklentileri (gereksinimler) şu şekildedir.

• Filmler alfabetik sıraya göre listelenir. Listeye yeni film eklenebilir

• Film isimleri değiştirilebilir.

• Film ismine yada oyuncu ismine göre arama yapılabilir.

Page 14: Test Güdümlü Yazılım

Görev Listesi

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Müşteri filmleri alfabetik olarak bir listenin içinde görmek istemektedir. Bunun yanı sıra listeye yeni film eklenebilmelidir. Böyle bir gereksinim için geleneksel yöntemlerkullanılacak olursa, aşağıdaki şekilde bir görev listesi çıkartılabilir. Programcı bu görevleri baz alarak yazılım yapacaktır.

• Filmlerin kondu ğu bir liste oluştur. ArrayList yada Vector olabilir. Filmlerin alfabetik sırası önemli.

• Filmlerin listelenebileceği bir arayüz oluştur.

• Yeni bir film eklemek için arayüze “Film Ekle” buton u ekle. Filmler bu buton üzerinden listeye eklenir.

Page 15: Test Güdümlü Yazılım

Test Listesi

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Şimdi aynı gereksinimleri baz alarak TDD için gerekli testleri oluşturalım ve görev listesi ve test listesi arasındaki farkı inceleyelim.

• Boş bir listenin büyüklü ğü (size) 0 olmalı.

• Listeye bir film eklendiğinde listenin büyüklüğü 1 olmalı.

• Listeye iki film eklendiğinde listenin büyüklüğü 2 olmalı.

• BBB ve AAA ismini taşıyan iki film listeye eklendiğinde AAA ismini ta şıyan film listede BBB isimli filmden önce yer almalıdır.

Page 16: Test Güdümlü Yazılım

Görev ile Test Kıyaslaması

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Görev listesi bize sadece ne yapılması gerektiği hakkında bilgi veriyor. Nasıl yapılması gerektiği bilgisini görev listesinden edinemiyoruz.

Ayrıca bu liste yazılımda ne kadar ilerlediğimizi gösterecek özellikte değildir, yani hangi görevi tamamladıktan sonra programın % kaçını tamamlamış olacağız, bu konuda fikir sahibi olamıyoruz, çünkü görev tanımlamaları detaylı bir şekilde ne yapılması gerektiğini ihtiva etmiyor ve somut değiller.

Testler ilk bakışta ne yapılması gerektiğini ifade edebilen, daha somut ve işletilebilir yapıdadır.

Bu yüzden somut testlerden yola çıkarak programı oluşturmak daha mantıklı ve doğal olanıdır

Page 17: Test Güdümlü Yazılım

Test Đmplementasyonu

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Boş bir listenin büyüklü ğü (size) 0 olmalı.

Listeye bir film eklendiğinde listenin büyüklüğü 1 olmalı.

Listeye iki film eklendiğinde listenin büyüklüğü 2 olmalı.

BBB ve AAA ismini taşıyan iki film listeye eklendiğinde AAA ismini ta şıyan film listede BBB isimli filmden önce yer almalıdır.

Page 18: Test Güdümlü Yazılım

Test Đmplementasyonu

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

TDD Demo

Page 19: Test Güdümlü Yazılım

Kaynak: KurumsalJava.com

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Page 20: Test Güdümlü Yazılım

KurumsalJavaAkademisi.com

© 2009Kurumsal Java.comÖzcan Acar © 2009 Kurumsal Java.com

Page 21: Test Güdümlü Yazılım

Özcan Acar © 2009 Kurumsal Java.com

SonĐlginiz için teşekkür ederim.