İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Onder Teker
on_der_tek_er@yahoo.com

Yinelemeli Geliştirme (Iterative Development)

Büyük bir projeyi bitirmek için onu aşamalara bölmek ve bunları sırayla gerçekleştirmek en doğal yöntem olarak görülür. Ancak bu yaklaşımın yanlış olduğu görüşü giderek yaygınlaşmaktadır. Çünkü bu yöntemle çalışınca ürün, bütün aşamalar bittikten sonra ortaya çıkar. Ya ortaya çıkan şey istenen ve ihtiyaç duyulan şey değilse? İlk yapılan analiz veya tasarım yanlışsa? Veya her şey baştan doğru planlanmışken sonradan ortaya çıkan veya farkedilen gerçekler ilk düşünülenleri geçersiz veya gereksiz kılmışsa?

Bir projeyi analiz, tasarım, kodlama ve test gibi aşamalara bölmeye Şelale ( Watefall ) yöntemi deniyor. Proje yukarıdan aşağıya akan bir su kaynağı gibi ilerliyor. Su, en tepedeki bölgeden geçmeden asla son bölgeye gelmiyor. Buna alternatif bir yöntem olarak Yinelemeli Geliştirme ( Iterative Development) düşünülmüş. Proje aşamalara bölünmez. Çalışabilecek, çok kısıtlı sayıda özelliği bulunan bir sürümü en kısa zamanda üretilir. Daha sonra ortaya çıkan hatalar, bazı eksiklikler ve bozukluklar giderlir. Daha da sonra bir önceki adımdan dolayı ortaya çıkan hatalar giderilir ve sırası gelen başka özellikler eklenir. Her yinelemede projeye katkısı bulunan bütün kişiler işlerini tümleşitiriler. Böylelikle "Tümleştirme Cehennemi" ( Integration Hell ) denilen durumla karşılaşılmaz. Tümleştirme cehennemi, bir projeyi oluştura parçalar bitirildikten sonra bir arada çalışamaması durumudur. Her bir parça kendi işlevini gerçekleştirir (ya da öyle görünür). Ancak biraraya geldiklerinde istendiği gibi çalışmadıkları, hatta hiç bir arada kullanılamadıkları anlaşılır. Yinelemeli geliştirme bunu engeller. Proje sık sık tümleştirildiği için, her bir bileşeni yapanlar aynı zamanda tümleştirmede çıkabilecek sorunları kısa sürede farkederler. Tümleştirme sorunları projenin sonunda değil ilk aşamasından itibaren ortaya çıkar.

Yinelemeli geliştirmenin bir yararı da müşteriden Geri Besleme alınmasıdır. Bütün iş bittikkten sora işin yapılmasını isteyen kişilerin ortaya çıkan şeyden hoşnut olmadıkları sık görülmektedir. "Ben bunu istemedim ki?" diyebilir müşteri. Oysa ilk aşamada ortaya çıkan işi inceleyen müşteri istemediği veya beğenmediği özellikleri baştan söyleyebilir. Geiliştirmeyi yapanlarda müşterinin istediği yönde ilerleler. Müşterinin bir sözle devre dışında bırakacağı bir özellik için günlerce çalışmazlar. Bazı durumlarda bir projeye başlandığında müşteri (veya kullanıcılar) ne istediklerin net olarak bilmezler. Zaman geçtikçe her şey ortaya çıkar. Böyle durumlarda en başta bir tasarım yapıp sonuna kadar ona göre ilerlemek mümkün de olmaz.

Yinelemeli geliştirmenin bir başka yararı da projeyi geliştirenlerin proje hakkında bilgilerini arttırmasıdır. Uzun bir süre sonunda ortaya çıkacak bir projenin bir bileşenini yapmak, geliştiricinin olayın bütünü görmesini engeller. Bütünü göremeyen kişi de sadece kendisinden isteneni gerçekleştirir ve yaptığı işin diğer kişilerle uyumlu çalışıp çalışmayacağını dikkate almaz. Dikkate alsa da bunu deneme şansı olmaz. Çünkü geliştirilen bir bileşenin istendiği gibi olup olmadığı diğerleriyle entegre olmadan bilinemez. Oysa sık sık entegre olan projelerde ortaya çıkan şey herkes tarafından görüldüğü için herkes ne yaptığını ve ne yapması gerektiğini bilir.

Özellikle yeni öğrenilen bir teknolojiyle geliştirme yapıldığında yinelemeli geliştirme çok daha fazla yararlıdır. Daha doğru dürüst bilinmeden tasarlanan projede teknoljinin bilinmeyen bir özelliği yüzünde tüm proje durabilir. Yinelemeli projelerde geliştirilicler bir yanda çalıştıkları teknolojiyi öğrenir ve yanlış varsayımlardan bulunmaz. Yaptıkları yanlışları da ilk sürümde öğrenir. Dahası Yeniden Üretim ( Refactoring ) yinelemeli geliştirmede daha fazla mümkün olur. Geliştiriciler "Keşke şöyle yapsaydık" demeden, bir sonraki geliştirme aşamasında kodu tekrar düzenleyebilirler. Oysa şelale yönteminde akla kara projenin ancak sonunda belli olduğu için kodu elden geçirmek, yanlış yapılmış noktaları tekrar yazmak için zaman kalmaz.

Görüldüğü gibi Yinelemeli Geliştirme bugün bir çok yazılım projesinin karşılaştığı sorunlara çözüm getirmektedir. Elbette bu yöntemin de kendine özgü sorunları vardır. Ayrıca bu yöntemin benimsenmesi sürecinde de insanlaraın alışkanlıklarını değiştirmek kolay olmaz. Özellikle "Gözlerimi kaparım, vazifemi Yaparım" anlayışında olan insanların gerçekleştiridiği projeler bu yönteme uygun değildir. Ancak öğrenmeye va çalışmaya istekli, katılımcı ve paylaşımcı, yanlışlarında sırara etmeyen insalardan oluşan ekipler için Yinelemeli Geliştirme son derece uygundur.

Takip edenler bilir, Godoro.com'un kendisi bu yöntemle geliştiriliyor. Her ay bir sürüm olarak düşünülüyor ve her sürüm sonunda görülen eksiklikler diğer bir sürümde gideriliyor. Godoro.com.'da ilk olarak sadece bir Java'nın Temelleri kitabı vardı. Her aşamada hem içerik olarak hem de özellik olarak bir çok şey eklendi. Godoro ekibi baştan bir plan yapıp onu gerçekleştirmeye çalışsalardı uzun süre bir site için beklemek zorunda kalacaktık. Belki başlanmış ancak sürdürülememiş bir çok projeden biri olacaktı. Ancak Godoro.com her adımda yavaş yavaş gelişiyor. Yavaş gelişiyor ama gelişiyor.

Gladiator filmi Fabius Maximus'un hikayesini (Hollywood tarzı çarpıtmalarla) işliyor. Tarihte Maximus, "Yavaş yavaş ama emin adımlarla" fikriyle Roma imparatorluğunun küçük bir şehir devletinden büyük bir imparatorluğa dönüşmesini sağladılar. Aynı şekilde Osmanlılar, Timur ve Cengiz imparatorluklarının aksine yavaş yavaş ama emin adımlarla ilerlediler. Büyük hakanlar olan Tİmur ve Cengiz'in imparatolukları ancak torunlarına kadar dayanırken, Osmanlı imparatorluğu 600 yıl dayanmıştır. Roma bir çok hanedan yaşadığı halde 600 yıl iktidarda kalan tek hanedan Osmanlı imparorluğudur. Bir iterastyonda Anadolu birliğini kurdulan, bir diğerinde Balkanları aldılar. Sonra, artık iterasyon yapamaz halde olan Bizans'ı ortadan kaldırdılar. Bir iterasyonda Mısırı bir diğerinde Mağribi aldılar. Güçlerine güvenip proje planından önce Viyana kapılarına dayandıkları için orada kaldılar. Artık yinelemeli gelişme Avrupanın olmuştu. Günümüzde bu tip gelişme Asya'da görülmeye başladı. Hİç bir uygarlık "pop" diye ortaya çıkmıyor.

Görüldüğü gibi İterative Development tarihte de geçerli. Ancak yazılımda da geçerli olduğu aşikar. Bütün iş, çalışabilen en küçük işi en kısa zamanda bitirmek. Gerisi zamanla düzeliyor. Ne demiş atalarımız : "Kervan yolda kurulur". Demekki onlar de Yienelemli Geliştirme'yi iyi biliyolardı. Neyse, artık biz de biliyoruz!

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır