Yazılım Yaşam Döngüsü

Geliştirilen yazılımın, üretim aşaması ve kullanım süreci boyunca  geçirdiği tüm aşamalar "Yazılım Geliştirme Yaşam Döngüsü" olarak tanımlanır. Yazılımın üretildiği aşamadan itibaren işlevsellik ile ile gereksinimleri sürekli değişecek ve bu değişiklikler de yazılımın genişlemesine neden olacaktır. Dolayısı ile, bu aşamalar bir döngü olarak ele alınmak zorundadır. Bu döngü doğrusal ve tek bir yöne ilerleyen bir döngü değilldir çünkü herhengi bir aşamada geriye dönmek, geliştirmeyi yapmak ve tekrar ilerlemek mümkündür.

Yazılım yaşam döngüsünün bazı temel adımları vardır. Bunları Planlama, Analiz, Tasarım, Üretim ve Bakım olarak sıralamak mimkündür. Planlama, proje planının oluşturulduğu, fizibilite çalışmasının yapıldığı, insan kaynakları ve donanım gibi ihtiyaçların belirlendiği aşamadır. Analiz aşamasında, var olan sistemler incelenerek sistem ve yazılım gereksinimleri ve varsa işleyişdeki temel sorunlar detaylı olarak belirlenir. Tasarım, analiz aşamasında belirlenen gereksinimleri karşılayacak olan yazılımın temel yapısının oluşturulduğu aşamadır. Bu aşamada, yazılımın içerdiği tüm bileşenler ayrıntıları ile tanımlanır ve tasarlanır. Üretim aşaması tasarımı yapılmış olan yazılım bileşenlerinin geliştirilmesi, test edilmesi, kurulumlarının yapılması gibi işlemleri içeren aşamadır. Bakım ise, yazılım birimleri teslim edildkten sonra hata giderme, yeni eklentiler yapma, iyileştirmelerde bulunma faaliyetleridir.

Yazılım Geliştirme Modelleri

Yazılım ihtiyaçlarının giderek büyümesi, yazılım geliştirme faaliyetlerinde kullanılmak üzere metodolojilerin gelişimini de ortaya çıkartmıştır. Yazılım teknolojilerinin gelişmesi ile, varolan model ve metodolojiler de gelişmekte ve yeni modeller ortaya çıkmaktadır. Uygun yazılım geliştirme modelleri kullanılması, yazılımın daha emniyetli, doğru, anlaşılabilir,  test edilebilir ve bakım yapılabilir olarak geliştirilmesinde çok önemli rol oynar. Daha emniyetli yazılımların daha kısa sürede, daha az bütçeyle ve en önemlisi daha az hatayla geliştirilmesi için sürekli yeni teknolojiler ve modeller bulunmaya çalışılmaktadır.

Yazılım yaşam döngüsü kısmında kısaca özetlenen yazılım geliştirme temel adımlarının nasıl gerçekleştirileceğine yönelik çeşitli modeller kullanılabilmektedir. Model, yazılım geliştirme faaliyetinin nasıl yapılacağına, genel geliştirme düzeninin nasıl olacağına dair bir rehber niteliği taşır. Belli başlı yazılım geliştirme modelleri aşağıdaki gibi sıralanabilir :

a) Gelişigüzel Geliştirme

Bu yöntemi bir model olarak adlandırmak doğru değildir. Gelişigüzel geliştirmede belirlenmiş bir model ya da yöntem bulunmaz. Genellikle kişiye bağlı yazılım geliştirme şeklinde yapılır ve bu yüzden yazılımın izlenebilirliği, bakım yapılabilirliği oldukça zordur. 1960'lı yıllarda uygulanan bu yöntem, genellikle basit programlama içeren ve çoğunlukla tek bir kişinin üretim yaptığı yöntemdir.

b) Barok Modeli

1970'li yıllarda ortaya çıkan Barok modelinde, yukarıda söz edilen yaşam döngüsü temel adımları doğrusal bir şekilde ele alınır ve geliştirilir. Aşamalar arasında gereken geri dönüşlerin nasıl yapılacağı tanımlı değildir. Bu modelde, dokümantasyon günümüz modellerinden farklı olarak ayrı bir süreç olarak ele alınır ve yazılımın geliştirme ve test faaliyetleri tamamlandıktan sonra yapılmasını öngörür. Günümüz yazılım geliştirme projelerinde uygulanan bir model olmaktan çıkmıştır.


c) Şelale (Waterfall) Modeli

Şelale modeli yakın zamanlara kadar en popüler yazılım geliştirme modeli olarak görülmüştür. Geleneksel yazılım geliştirme modeli olarak da bilinir. Şelale modelinde yazılım, aşamalar en az birer kez tekrarlanarak geliştirilir. Çok iyi tanımlanmış ve üretimi az zaman gerektiren projeler için uygun bir model olmakla birlikte günümüzde kullanımı gittikçe azalmaktadır.

 

Şelale modeli, Barok modelinden farklı olarak proje içerisindeki dokümantasyonu ayrı bir süreç olarak değil üretimin doğal bir parçası olarak ele alır. Ayrıca, bu modelde aşamalar arasındaki geri dönüşlerin nasıl olacağı da tanımlıdır. Ancak, şelale modelinin kullanımında dikkat edilmesi gereken önemli hususlar vardır. Bunlardan en önemlisi, - her ne kadar model içerisinde aşamalar arasında geri dönüşler yapılabilse de - analiz aşamasında mümkün olan tüm detayın tasarıma yansıtılabilmesi için müşteri ve sistem gereksinimlerinin en ince ayrıntısına kadar belirlenmesi gerekir. Tasarım aşaması da, yazılımın tüm gereksinimlerini karşılayacak şekilde detaylı bir çalışma gerektirmektedir. Dolayısı ile, şelale modelini kullanan proje ekipleri en fazla zamanı bu iki aşamada harcamak zorundadırlar. Tüm bu efor ve detaylı çalışmalara rağmen özellikle uzun zamana yayılan projelerde gereksinimlerin değişecek olması kaçınılmazdır. Kodlama veya test aşamalarında olabilecek bu değişikliklerin sisteme/yazılıma yansıtılması maliyeti ise çok yüksektir.

Bu modelde, yazılımın son kullanıcıya ulaşması genel olarak uzun bir zaman alır. Bu durum, hem müşteri de hem de projenin geliştirildiği kurumun üst yönetiminde belirgin bir memnuniyetsizlik yaratabilir. Kullanıcı, yazılımın geliştirilme aşamasında sürecin içerisinde genellikle yer almaz ve bu durum yazılım tamamlandıktan sonra geri dönüşleri arttırabilir. Bu geri dönüşler, yazılım geliştirme maliyetini büyük oranda yükselten bir durumdur. Tasarım aşamasında fark edilen hata ve eksiklikler küçük bir maliyet ile giderilebilir. Ancak, bu hata ve/veya eksiklikler entegrasyon veya bakım aşamalarında farkedilirse bunları gidermenin maliyeti 50-200 kat artacaktır.

d) Helezonik (Spiral) Model

Spiral yazılım geliştirme modeli temel olarak dört ana bölüm içerir. Bunlar, planlama, risk yönetimi, üretim ve kullanıcı değerlendirmeleri olarak tanımlanabilir. Planlama, üretilecek ara ürün için işin planlanması, amaç ve kısıt ve alternatiflerin belirlenmesi, bir önceki adımda üretilmiş olan ürün ile tümleştirme yapılması faaliyetlerini içerir. Risk yönetiminde, alternatifler değerlendirilir ve risk analizi yapılır. Üretim, planlanmış ara ürünün geliştirildiği aşamadır. Bu aşamadan sonra, kullanıcı değerlendirmesi kısmında, ara ürün hakkında kullanıcıların test ve değerlendirmeleri yapılır.

  

Helezonik model, risk analizi ve prototip üretme üzerine kurulmuştur. Her döngü öncesi, içinde bulunulan fazın risk analizi yapılır ve o faz için planlanmış olan prototip geliştirilir. Her döngünün sonunda, yeniden planlama yapılarak hedefler, alternatifler ve kısıtlamalar belirlenir. Bu model, önceden geliştirilmiş yazılım bileşenlerinin yeniden kullanıldığı projeler için çok uygundur.

Helezonik modelin en önemli getirisi, her döngünün başında risk analizi yapılması nedeniyle zaman ve maliyet bileşenlerinin kolay tahmin edilebilmesidir. Projelerin kaliteye yönelik hedeflerinin önceden belirlenmesi durumunda da bu kalite hedefleri her döngüde alternatif ve kısıtlar belirlendiği için diğer modellere göre daha kolaydır. Ancak, helezonik yazılım geliştirme modeli küçük projelerde kullanılmasının uygun olmaması, modeli uygulayanların bu konuda tecrübeli olması gerekliliği, risk analizi olgusuna dayandığından alt yüklenici kullanımında zorluklar taşıması gibi dezavantajlarda taşımaktadır.

e) Arttırımsal (Incremental) Geliştirme Modeli

Artırımsal model, yazılımın küçük parçalara ayrılarak döngüsel olarak geliştirilmesi fikrine dayanır. Proje süresi, artırım (veya döngü) olarak tanımlanan küçük zaman dilimlerine bölünür. Proje bir çok döngünün gerçekleştirilmesi ile ilerler. Her döngünün sonunda, projeye ait planlanmış çıktılar elde edilir ve yazılıma yeni bir fonksiyonalite eklenir. Bu sayede yazılım artırımsal olarak geliştirilir. Projenin bir döngüsde henüz tümleştirme süreci sonlanmamışken , diğer bir döngünün döngünün tasarım süreci başlayabilir. Dolayısı ile, bu model yazılım geliştirmenin doğasına daha uygun olarak görünmektedir. Her döngüde yeni bilgi ve tecrübeler edinilir ve bunlar projenin geliştirilmesi aşamasında çok değerli katkılar yapar. Artırımsal modelin en önemli avantajlarından biri, projenin ilk safhalarında elde edilen çıktıların projenin ilerleyen aşamalarında değişikliğe uğraması halinde bile büyük bir maliyete neden olmadan bu değişikliklerin yapılabilir olmasıdır.

       

Bu modelde her döngü, tasarım, kodlama, test ve entegrasyon süreçlerini içerir. Yazılım, bir prototipten başlar ve her döngüde yeni bir fonksiyonalite ekleyerek gelişir, genişler. Artırımsal model gereksinimlerin daha başta olgun olmadığı, Uzun zaman alabilecek ve sistemin eksik işlevlikle çalışabileceği türdeki projeler bu modele uygun olabilir ve döngüler halinde geliştirilmeye uygun projelerde kullanılmalıdır. Yazılım fonksiyonlara bölünmeye uygun olmalı, her bir parça ayrı olarak ele alınmalıdır.

f) Döngüsel Model

Döngüsel yazılım geliştirme modeli artırımsal model çok benzerlik taşır. Bazı kaynaklar döngü veya artırım içeren modelleri evrimsel model olarak nitelendirirler. Döngüsel yazılım geliştirme modeli, proje yaşam döngüsündeki tüm süreçleri içeren döngülerden oluşur. Artırımsal modelden farkı döngülerin içerdiği süreçlerdir. Artırımsal modelde, her döngüde tasarım, kodlama, test ve entegrasyon süreçleri bulunurken döngüsel modelde planlamadan başlayarak tüm proje süreçleri kapsanır.

Döngüsel modelin de artırımsal modeldeki gibi en büyük avantajı projenin ilerleyen aşamalarında gerek duyulan değişikliklerin gerçekleştirilmesi maliyetinin çok düşük olmasıdır. Bu modelde, yapılacak döngülerin sayısı ve süresini belirlemek çok önemlidir; belirlenen döngü sayısı olması gerekendan fazla olduğu takdirde fazladan öngörülen döngülerde yapılan işin tekrar yapılmasına neden olunabilir. Döngü süresini belirlerken de olması gereken süre çok dikkatli belirlenmedir. Olması gerekenden kısa zaman belirleme yeni fonksiyonların geliştirilmesi için yeterli olamayacağı gibi olması gerekenden fazla zaman belirleme de modelin şelale modeli gibi işlemesine neden olabilir.

Günümüzde en etkili model döngüsel ve artırımsal modellerin birleştirilmesi ile oluşan Artırımsal Döngüsel Model olarak söylenebilir. Böyle bir modelde, her bir döngüde geliştirilen fonksiyonu   bir sonrakine aktarabilmek için son aşamadan ilk aşamaya geri bildirim yapılır. Dolayısı ile, her iki modelin avantajları birleştirilmiş olur.

g) Çevik Yazılım Geliştirme Metodları

Çevik yazılım geliştirme metodları, hantal olduğu düşünülen yazılım geliştirme modellerine bir alternatif olarak 90’lı yılların ortalarında gelişmeye başlamıştır. Bu modelde döngüler içeriri ve bu anlamda döngüsel modelle benzerlikler taşır. Ancak, çevik metodalrda döngüler çok kısa döngü sayısı da oldukça fazladır.

Bu metodlar,  proje içerisindeki her bir döngüde yazılımın bir sürümünü küçük bir proje olarak ele alır ve bunu tedarik edenin katılımı ile test eder. Her döngüde projenin öncelikleri yeniden belirlenir ve proje boyunca ortaya çıkan değişikliklere uyum sağlanır. Bu metodlar, doküman üretiminin yazılım geliştirme faaliyetlerini yavaşlattığına inandığından doküman üretme yerine yüz yüze görüşmelere ağırlık verir. Döngüler sonucunda ortaya çıkan yazılım birimleri tedarik makamı tarafından değerlendirilir ve yapılan her yorum yeni bir versiyon olarak yazılıma eklenir.

Çevik metodların en önemli avantajı, değişikliklerin yazılıma uyarlanmasındaki hızdır. Bu hız yüzünden değişikliklerin yazılıma yansıtılma maliyetleri çok düşüktür. Döngülerin kısa olması ve dokümantasyonun çok az olması bu modelin uygulandığı projelerin zaman ve efor maliyetlerinin çok düşük olmasını sağlar. Her döngüde müşteri katılımı yoğun olduğu için müşteri memnuniyeti  yüksektir. Dolayısı ile, çÇevik metodlar gereksinimleri karşılamayan yazılım geliştirme riskini azaltır.