JUnit, Java da test odaklı yazılım geliştirmek için kullanılan bir frameworktur.
Öncelikle, test odaklı yazılım geliştirme (Test Driven Development) kısaca TDD dediğimiz yapıdan bahsetmek istiyorum.
Klasik bir yazılım geliştirme sürecinde önce yazılım tasarlanır, ardından kodlanır ve en son test işlemleri yapılır.Bu süreç sonucunda ise bir çok problem ile karşılaşılır, bu problemleri gidermeye yönelik yapılan çalışmalar ya yetersiz kalır ya da yazılımın maliyetini büyük bir ölçüde artırır. Yazılım sona erdikten sonra yapılan test işlemlerinin kapsamı yetersiz olacağından kodun belli kısımları test edilemez ve oluşabilecek hataların tespiti zorlaşır bu durumda hatalar sistem kullanıcıları tarafından bulunur. Bu da istenilen bir durum değildir.
İşte bunun gibi problemleri çözmek, sistem hatalarının oluşmasını engellemek ve kaliteli yazılımlar yapabilmek için test odaklı yazılım (TDD) konsepti geliştirilmiştir.İlk olarak Extreme Programming (XP) yazılım sürecinin oluşturucusu Kent Beck tarafından ortaya atılmıştır.Extreme programming ve günümüzdeki bir çok Agile(çevik)modern yazılım geliştirme süreçlerinin kodlama bakımından bel kemiğini oluşturmaktadır.
TDD klasik yazılım geliştirme süreçlerinin aksine programı kodlamadan önce modeli test edecek şekilde test sınıflarını oluşturularak yazılım işlemine başlanır.
TDD için temel adımlar 5 tanedir.
1- Herhangi bir kod yazmadan test oluştur.
2- Testleri çalıştır ve eklenen testin çalışmadığını gör.( kırmızı )
3- Testin çalışması için gerekli değişiklikleri yap.
4- Testleri çalıştır ve hepsinin hatasız çalıştığını gör( yeşil )
5- Tekrarları yok et ve başa dön; refactoring.
Burada gerekli sınıfların en basit şekilde oluşturulmaları önem taşır.Test edilen sınıf metotları ilk başta null değeri geri döndürülecek şekilde oluşturulup daha sonra kullanıma göre gereken değişiklikler yapılarak en basit şekilde oluşturulur.Sonuç olarak testler ve gerekli sınıflar oluşturularak tasarım gerçeklenir.
TDD doğru uygulandığında son satırına kadar test edilmiş bir yazılım meydana gelmiş olur ve bu yazılımdaki her bir modülün entegre edilmesi oldukça kolaydır.Refactoring bize çok büyük bir rahatlık sağlar, kodun hata vermeyeceğini garanti eder ve verdiği takdirde nerede verdiğini bize bildirir. Debug ve breakpointler olmadan yazılım daha rahat ve kısa sürede geliştirilir.
Bir yazılım sürecinde Unit testin yanı sıra Integration Tests(Entegrasyon testleri), Acceptance Tests (Kabul Testleri), Continuous Integration(Sürekli birleştirme), Database Tests(Veritabanı testleri) gibi bir çok test bulunmaktadır.Buraya kadar yazılımın en küçük birimlerini test eden,unit testlerden bahsettik.
Sonraki yazıda JUnit ile unit testlerin nasıl geliştirildiği konusuna değineceğiz.