JUnit ile Test Odaklı Yazılım Geliştirme (TDD)

junit

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.

Loading

Facebooktwitterredditpinterestlinkedinmail

JavaScript Wrapper Nesneleri

JavaScript nesneleri kompozit değerlerdir: Özelliklerin koleksiyonu veya isimlendirilmiş değerler.Bi değerin özelliğine “.” notasyonu ile erişiriz.Eğer değerin özelliği bir fonksiyonsa method olarak adlandırılır.  Eğer “o” objesinin “m” methodunu çağırmak istiyorsak , o.m() yazarız. Ayrıca stringlerinde özellikleri ve metodları olduğunu görüyoruz.

stringprops

 

Stringler aslında obje değiller ancak niçin property’leri var?

 

Stringin propertysine ulaşmayı denediğinizde JavaScript bu değeri bi object olan String(s) türüne çevirir.Bu obje ise çeşitli string metodlarını miras alarak kullanmamıza olanak tanır. Nesnenin propertysi çözümlendikten sonra yeni oluşturulan nesne atılır. Bunlara geçici nesneler gözüyle bakabiliriz. Sayılar ve boolean değerlerinde aynı sebeplerden dolayı metodları bulunur. Number() veya Boolean() constructor’ından geçici nesne oluşturulur ve çözümlendiğinde atılır. Null ve undefined değerler için wrapper object yoktur. Bu değerlerin propertylerine erişmeye çalışırsak TypeError alırız.

Aşağıdaki kodu inceleyelim:

 

wrapper
Burada göründüğü gibi t değeri undefined’tır. s.len olduğu kısım koşulurken geçici String nesnesi oluşturulur ve property sine 4 atanır daha sonra obje atılır. 3 satırda ise eski setlediğimiz değere ulaşmaz.Yeni bir String nesnesi oluşur ve ona ulaşır.Yeni oluşturduğumuz String nesnesininde .len property’si setlenmemiş olacağından t değeri undefined olur.

Burada bilmemiz gereken şey string,number ve boolean değerler için tanımlı wrapper objeleri read-only’dir bunların üzerinde oynama yapamayız.Yapsak bile bir değişiklik olmaz.Çünkü nesne yeniden oluşturulup atılır.

wrapperobjects

Loading

Facebooktwitterredditpinterestlinkedinmail

JavaScript’te – Null ve Undefined nedir?

JavaScript’te null,  değerin yokluğunu ifade eden dile özgü anahtar kelimedir. Type operatörünü kullanırsak null  “object” stringini döndürür.
JavaScript’in ayrıca kendine özgü olarak değerin yokluğunu ifade eden “undefined” tipi bulunur. Örneğin 5 elemanlı dizi açıp 6. elemanına bişey yazmaya çalışırsanız javascript hata vermez. Ayrıca okumaya çalışırsanız da hata vermez değer yoksa undefined şeklinde gösterir.

nullundefined

Loading

Facebooktwitterredditpinterestlinkedinmail

JavaScriptte Tipler, Degerler ,Degiskenler (Types,Values and Variables) – 2

Text

JavaScriptte bütün stringler sabit sıralı dizi olarak 16-bit değerler halinde tutulur. JavaScript UTF-16 encoding kullanır. Eğer 16-bit lik değer yetersiz kalırsa 2 adet 16 bit kullanarak ifadeyi temsil eder.

  • var pi=”Π”;  // 16-bit codepoint 0x03c0
  • var e =”é”; // 17-bit codepoint 0x14d52 – 2 adet 16 bit.

codepoint:Karakter encoding terminolojisinde bir codepoint ve codeposition kod uzayı üzerinde tutulan herhangi bir adresi temsil eder. Örneğin ASCII’de 128 adet codepoint vardır. 0x00 – 0x7F aralığında tanımlıdır.

String üzerinde temel işlemler

  • var s = “hello, world” // text
  • s.charAt(0) // => “h”: ilk karakter
  • s.charAt(s.length-1) // => “d”: son karakter
  • s.substring(1,4) // => “ell”: the 2. , 3. ve 4. karakterler
  • s.slice(1,4) // => “ell”: aynı string
  • s.slice(-3) // => “rld”: son 3 karakter
  • s.indexOf(“l”) // => 2: ” l” nin bulunduğu ilk pozisyon.
  • s.lastIndexOf(“l”) // => 10: ” l” nin bulunduğu son pozisyon.
  • s.split(“, “) // => [“hello”, “world”] : alt stringler oluşturur.
  • replace(“h”, “H”) // => “Hello, world”: karakterlerin yerini değiştirir.
  • s.toUpperCase() // => “HELLO, WORLD”

Örüntü Eşleme(Pattern Matching)

JavaScriptte pattern matching için RegExp constructure’ı bulunur. Regular Expression şeklinde tanımlı örüntüler ile arama-yerdeğiştirme işlemleri yapılabilir. JavaScript regular expressionlar için Perl’in söz dizimini alır.Ayrıntılı olarak bu konuyu daha sonra işleyeceğiz.

Loading

Facebooktwitterredditpinterestlinkedinmail

Kod yazmak anlamaktır.