Özgür Adem Işıklı Özgür Adem Işıklı Software Developer Resume Contact

Software Developer

Döküman Tabanlı Geliştirme

Son 6 ayımı Laravel üzerine aktif olarak çalışarak geçirdim. Beni test yazma ve SOLID Prensipleri gibi birçok nimeti kullanmaya zorladığı için kendisine minnettarım. Özellikle paket tabanlı çalışmanın, kodların tekrar tekrar kullanılabilmesi açısından önemli olduğunu düşünmeye başladım bu süreç içerisinde. Ancak en büyük kazancım; tamamen spontane bir şekilde gelişen döküman yazma özelliğim oldu.

TDD ve BDD gibi kavramlara bir şekilde aşina olduğumuzu düşünüyorum. Ancak ben hiç bir zaman iyi bir test yazarı olamadım. Sonradan farkettim ki ne SOLID’i ne de ne yapmak istediğimi adam akıllı biliyorum.

Biz geliştiricilerde gördüğüm; ustalastıkça kod yazmadan önce daha çok düşünüyoruz. Gerek ofisimizdeki tahtalar, gerekse kağıtlar kalemler aracılığı ile aklımızdakilerin görsel bir iskeletini çıkartıyoruz. Ancak çoğu zaman “Hangi sınıfın hangi metodu hangi iş için çalışacak?”, “Bir hata durumunda o metot nasıl davranacak?” gibi şeyleri bu planlara dahil etmiyoruz. Onun yerine kodlama ya da test yazma aşamasında bunları düşünüyoruz. Zihminizdekileri doğrudan koda dökmek tasarım çıkmazlarına sebep verebiliyor. İşte bu noktada DDD (Document Driven Development) bizim yardımımıza koşuyor.

Ben artık genel planlarımı yaptıktan sonra, henüz tek satır kod yazmadan tasarlayacağım sınıfın dökümanını oluşturuyorum. Hangi parametreleri yollayacağım, ilgili metotdan dönecek istisnalar neler olacak vb. durumların hepsini dökümanı yazarken çok detaylı bir şekilde açıklamış oluyorum. Daha sonrasında eğer deadline için vaktim varsa dökümana göre testlerimi yazıyorum. En son aşamada ise dökümandaki gibi çalışacak kodları yazıyorum. Örneğin bir döküman yazdığımızı düşünelim ve aşağıdaki gibi Kullanıcı silme işleminin nasıl yapılacağını kodla örnekleyelim;


try
{
	// Find the user using the user id
	$user = Sentry::findUserById(1); 
	// Delete the user
	$user->delete();
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
	echo 'User was not found.';
}

Bunun gibi bir döküman hazırladıktan sonra, tam olarak neye ihtiyacımız olduğu zaten ortaya çıkmış oluyor. Ondan sonra tek yapmamız gereken ilgili testleri yazmak ve çalışan sınıflarımızı kodlamak. Planlamada sağlanan bu kolaylığın yanı sıra yazdığımız sınıfın, paketin ya da kod parçacığının nasıl çalıştığı anlatan bir döküman elimizin altında oluyor. Şahsen bu gibi bir dökümanla neleri test edebileceğimi daha iyi kavramış oluyorum. Zira test yazmayı öğrenirken en çok zorlandığım şey, ilgili kod bölümünün nesini test edeceğimi bilmemekti. Belki de ben bu konuda çok beceriksizimdir. Eğer siz de benim gibi test yazmakta zorlanan beceriksizlerdenseniz DDD işinize yarayacaktır.

What About Comments?

I do not use any comment system such as Disqus because of user's privacy. If you want to discuss something about this post, you may open an issue on the repo.

You may check what is the problem with Disqus;