Waterfall Model&Iterative Development(1)
Herkese merhabalar,
Google Digital Garage platformunda aldığım “Agile Project Management&Scrum” konulu eğitimde tuttuğum notları sizlerle de paylaşmak istedim. Tüm kurs içeriğini ayrı bölümler halinde yazacağım. Şimdiden keyifli okumalar..:)
Gün geçtikçe gelişen teknoloji çağında yapılacak bir projede hangi adımların izlenmesi gerektiğini, önceden izlenilen modelleri günümüzle karşılaştırıp eksikliklerini ve fazlalıklarını birlikte değerlendirelim.
The Waterfall Model
“Bir dizi aşamadan geçerek sırayla ilerleyen bir yazılım geliştirme yaklaşımıdır.”
1970'lerde çok yaygın olarak kullanılmıştır.
Şelale modeli, bir sonraki aşamaya geçmeden önce her adımı tamamlamaya çalışır ancak sorunları keşfederseniz bir önceki aşamaya dönmenizi sağlayan yerleşik geri bildirim döngülerine sahiptir.İlerleme yukarıdan aşağıya doğrudur.
Şimdi bu modelin aşamlarını tek tek inceleyelim.
1-) Requirements :
Yapılması istenen sistem için tüm gereksinimlerin toplandığı zamandır. Paydaşlar ve son kullanıcılarla konuşmaları ve değerlendirmeleri içerir.Ortaya bir analiz çıkartılır.
2-) Design :
Yazılım mimarları ihtiyaç aşamasında toplanan bilgileri alır ve gerekli ihtiyaçları destekleyen bir yapı tasarlar. Bu aşamada bazı kullanıcı arayüz tasarımları da gerçekleştirilebilir.
3-) Implementation :
Yazılım geliştiriciler, tüm gereksinimleri ve hazırlanan tasarım belgelerini alır ardından çözümü kodlar.
4-) Verification/Testing :
Hem iç test ekibi hem de müşteri geliştirmesi biten sistemi test eder. Müşteri sistemin beklendiği gibi çalıştığını doğrulamalıdır.
5-) Maintenance :
Bu son adımdır. Müşteri, kurulumdan sonra nitelikleri değiştirmek ve performansı arttırmak için sistemde veya tek bir bileşende iyileştirmeler isteyebilir. Bu istekler müşteri tarafından ya da sistemin canlıya alındığında ortaya çıkan bulgular sonucunda gelebilir.Müşteriye hazırlanan sistem için düzenli bakım ve destek sağlanır.
Waterfall Modelinin Artıları ve Eksileri
- Birçok tasarım hatası projenin erken aşamalarında yakalanır. Bu durumda geri dönüp değişiklik yapmanın maliyeti daha azdır.
- İlerlemeyi ölçmek kolaydır.
- Büyük projeler için doğru bir maliyet çıkarmak mümkün olabilir.
- Değişim zordur. Örneğin yapılacak iş için iki ay gereksinimleri topladınız. Tasarım içinse bir ay harcadınız. Uygulama aşamasında da iki hafta vakit harcadığınızı düşünün. Karşınıza uygulamanın bitmiş hali geldiğinde ve eksikleri fark ettiğinizde bunları düzeltmeniz, yenilemeniz için başa dönmeniz gerekir. Dolayısıyla idari ek gelir ortaya çıkar.
- Projeler genellikle geç çalışır ve teslim tarihi ile uyuşmaz. 10 aylık bir projeyi zamanında teslim etmek için planlanan bütün aşamaların sorunsuz geçmesi gerekir ama bu durum genellikle gerçekçi değildir.
- En büyük dezavantaj eksik gereksinimlerin uygulama bittikten sonra fark edilmesidir. Gereksinimleri hazırlarken ve kodunu yazmadan önce her şey tamammış gibi gelebilir ama bazı detaylar karşımızda somut çıktılar olduğunda fark edilir. Bu modelde bir ön gösterim(demo) aşaması olmadığı için herhangi bir eksik ya da düşünülemeyen nokta çıktığında geri dönüşü bir hayli zor olur.
1970 ve 80'lerde yöneticiler, şelale modelini mantıksal akışı nedeniyle sevmelerine rağmen, 90'larda “Yinelemeli Geliştirme(Iterative Development)” adı verilen yeni bir yazılım geliştirme biçimi ön plana çıktı.
Yinelemeli Geliştirme(Iterative Development)
Burada bir ekip projenin belirli bir alt kümesini uygularken, gereksinimler başka bir alt kümede devam edebilir. Bu şekilde sürdürülebilir.
Tek bir teslimattan ziyade birkaç döngüsü vardır. Yani burada asıl amaçlanan müşteri isteğini ilettikten sonra artık elimizin boş gitmemesi gerektiğidir. Müşterinin istekleri doğrultusunda onun karşısına sürekli işine yarayacak ve kullanılabilecek bir iş çıkartabilmeliyiz.
Her yerde sıkça rastladığımız bu görselden yola çıkarak;
Geliştirmenin her adımında elimizde kullanılabilecek bir ürün olmalı ve biz bunun üstüne daha iyisini yapmalıyız. Bunun bize sağlayacağı en büyük avantajdan bahsedecek olursak, daha öncesinde de belirttiğimiz gibi, müşteri elinde kullanabileceği somut işler gördüğünde neyin eksik olduğunu ya da nelerin eklenebileceğinin farkına varır. Böylelikle sistem geliştirme aşamasındayken bu değişikliklik ve istekler adapte edilebilir. Bu durumda diğer ihtimale karşı daha az idari ek gelir çıkar ve daha hızlı olur.
**Yinelemeli yaklaşımın güzelliği, her yinelemeden öğrenmeniz gereken ve bu öğrendiğimizi bir sonrakine taşımanızdır. Bu durum; yanlış anlaşılmalara, bağlam değişikliğine veya yeni bilgilere verimli bir şekilde uyum sağlayabileceğimiz anlamına gelir.
İlk kısım için yazımı burada sonlandırıyorum. Umarım faydalı olmuştur. Daha sonrasında Agile’ın doğuşundan, hikayesinden ve metodolojilerinden bahsedeceğim.
Vakit ayırdığınız için teşekkürler:)