Yazılım Mühendisliği Sunum Hafta-2 PDF
Document Details
Uploaded by Deleted User
Tags
Summary
Bu belge, yazılım mühendisliği, yazılım geliştirme süreçleri, süreç modelleri ve yazılım yaşam döngüsü konularını ele alıyor.
Full Transcript
YAZILIM MÜHENDİSLİĞİ 2 YAZILIM SÜREÇ VE ÜRÜN TİPLERİ Yazılım geliştirmeyi sistematik hale getirmeyi hedefleyen çeşitli süreç modelleri ve yeni teknolojiler bulunmaya çalışılmaktadır. Model, yazılım geliştirme faaliyetinin nasıl yapılacağına, genel geliştirme düzen...
YAZILIM MÜHENDİSLİĞİ 2 YAZILIM SÜREÇ VE ÜRÜN TİPLERİ Yazılım geliştirmeyi sistematik hale getirmeyi hedefleyen çeşitli süreç modelleri ve yeni teknolojiler bulunmaya çalışılmaktadır. 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. YAZILIM GELİŞTİRME YAŞAM DÖNGÜSÜ (SOFTWARE DEVELOPMENT LİFE CYCLE) Herhangi bir yazılımın, üretim aşaması ve kullanım aşaması birlikte olmak üzere geçirdiği tüm aşamalar olarak tanımlanır. Yazılım işlevleri ve ihtiyaçlar sürekli değiştiği ve geliştiği için bir döngü biçiminde düşünülür. Yazılım yaşam döngüleri tek yönlü, doğrusal olarak düşünülmemelidir. YAZILIM YAŞAM DÖNGÜSÜ TEMEL ADIMLARI Planlama Çözümleme Tasarım Gerçekleştirim Bakım YAZILIM YAŞAM DÖNGÜSÜ TEMEL ADIMLAR Yazılım Yaşam Döngüsü, bir yazılımın üretimden kullanım sürecine kadar geçirdiği tüm aşamaların bir bütünü olarak tanımlanır. Bu aşamalar sürekli bir döngü şeklinde işler çünkü yazılımın işlevleri ve kullanıcı gereksinimleri sürekli değişir ve gelişir. Bu nedenle, döngü içerisinde herhangi bir aşamada geriye dönüp tekrar ilerlemek mümkündür. YAZILIM YAŞAM DÖNGÜSÜNÜN ANA AŞAMALARI Planlama: Gereksinimlerin belirlenmesi, kaynakların ve sürenin planlanması. Çözümleme: Kullanıcı ihtiyaçlarının analiz edilmesi ve sistem gereksinimlerinin belirlenmesi. Tasarım: Yazılımın mimarisi ve detaylarının belirlenmesi. Gerçekleştirim: Yazılımın kodlanması, entegrasyonu ve test edilmesi. Bakım: Yazılımın güncellenmesi, hataların giderilmesi ve performans iyileştirmeleri. Not: Yazılım yaşam döngüsü, tek yönlü ve doğrusal bir süreç değildir; yazılım geliştirmenin doğası gereği, her aşama bir önceki aşamaya geri dönüp gözden geçirilebilir veya düzeltilebilir. BELİRTİM YÖNTEMLERİ Yazılım geliştirme sürecinde, belirli işlevlerin tanımlanması ve gerçekleştirilmesi için kullanılan teknikler ve araçlar belirtim yöntemleri olarak adlandırılır. Belirtim yöntemleri, yazılım süreçlerini daha anlaşılır ve izlenebilir hale getirmeyi amaçlar. BELİRTİM YÖNTEMLERİ KATEGORİLERİ Fonksiyonel Belirtim Yöntemleri: Sistem gereksinimlerini ve yazılımın işlevsel özelliklerini tanımlar. Yapısal Belirtim Yöntemleri: Yazılımın iç yapısını, bileşenler arası ilişkileri ve veri akışlarını düzenler. Davranışsal Belirtim Yöntemleri: Sistem ve yazılımın zaman içindeki davranışını ve nasıl çalıştığını modeller. YAZILIM SÜREÇ MODELİ ÇEŞİTLERİ Yazılım yaşam döngüsünde, Süreç Modelleri geliştirme sürecinde hangi adımların hangi sıra ve düzenle uygulanacağını tanımlar. Süreç modelleri, yazılım geliştirme aşamalarını sistematik bir yapıya oturtarak projenin daha yönetilebilir olmasını sağlar. Bu modeller yazılım üretiminde rehber olarak kullanılabilir. Geleneksel Modeller - Çağlayan (Waterfall) Modeli - Evrimsel Geliştirme Modeli - Döngüsel Modeller Çevik (Agile) Modeller - Uçdeğer Programlama (Extreme Programming - XP) - Scrum - Özellik Güdümlü Geliştirme (Feature-Driven Development - FDD) - Çevik Tümleşik Süreç (Agile Unified Process - AUP) Düzenleyici Süreç Modelleri - Gelişigüzel Model - Barok Modeli - Çağlayan/Şelale Modeli (Waterfall Model) - V Modeli (V-shaped Model) - Prototipleme - Helezonik Model (Spiral Model) - Evrimsel Geliştirme Modeli (Evolutionary Development) - Artırımsal Geliştirme Modeli (Incremental Development) - Araştırma Tabanlı Model (Resource-Based Model) - Formal Sistem Geliştirme (Formal System Development) - Bileşen Tabanlı Geliştirme (Component-Based Development) KRONOLOJİK SÜREÇ MODELLERİ Yazılım üretim süreçleri tarihsel olarak beş ana modelde incelenebilir: Gelişigüzel Model: Plansız ve metodsuz geliştirme yöntemidir, günümüzde kullanılmaz. Barok Modeli: Gelişigüzel modelden sonra gelen ve benzer şekilde artık kullanılmayan bir modeldir. Çağlayan Modeli: Geleneksel olarak kabul edilen, sıralı adımlarla ilerleyen bir modeldir. Her aşama tamamlanmadan bir sonraki aşamaya geçilmez. KRONOLOJİK SÜREÇ MODELLERİ V Modeli: Çağlayan Modeli'ni geliştirerek, her geliştirme aşamasına paralel bir test aşaması ekleyen bir geçiş modelidir. Helezonik Model: Süreçlerin iteratif olarak tekrarlandığı, yazılımın sürekli geliştirilip iyileştirildiği bir modeldir. Modern yazılım projelerinde yaygın olarak kullanılır. Not: V Modeli, özellikle yazılımın test aşamasını vurgulayan bir modeldir ve geliştirme sürecinin her aşamasında test yapılmasını önerir. Bu sayede hata oranı minimuma indirilir. GELİŞİGÜZEL MODEL Gelişigüzel Model, herhangi bir yazılım geliştirme metodolojisi veya planlama sürecinin uygulanmadığı bir üretim modelidir. Yazılım geliştirme süreci tamamen geliştiricinin bilgi ve yetkinliklerine bağımlıdır. Ancak bu bağımlılık, zaman geçtikçe projeyi anlamayı zorlaştırır ve değiştirilmesi neredeyse imkânsız hale gelir. TEMEL ÖZELLİKLER: Plansız ve Yapısız: Bu model, belirli bir metodoloji veya yapı olmaksızın ilerler. Geliştirici, anlık kararlarla yazılımı oluşturur. Takip Zorluğu: Bu modelle üretilen yazılımlar genellikle belgelenmez ve izlenebilirlik çok düşüktür. Projenin daha sonra tekrar ele alınması veya geliştirilmesi oldukça zor, hatta imkansız olabilir. Kullanım Zamanı: Gelişigüzel Model, daha çok 1960’larda tek kişilik üretim projelerinde kullanılmıştır ve günümüzde geçerli bir yöntem olarak kabul edilmemektedir. Sonuç: Gelişigüzel Model, küçük ve basit projeler için dahi uzun vadede sürdürülebilir değildir. Bu modelle üretilen yazılımların güncellenmesi ve bakımı neredeyse imkânsız hale gelir. KODLA VE DÜZELT MODELİ Kodla ve Düzelt Modeli (Code and Fix Model), yazılım geliştirme süreçlerinde kullanılan en basit modellerden biridir. Bu modelde, yazılım önce hızla geliştirilir ve sistem istenilen duruma ulaşana kadar geliştirmeler ve düzeltmeler yapılmaya devam eder. Ancak bu süreç boyunca dokümantasyon yapılmaz. ÖZELLİKLERİ Yazılım geliştirme süreci, ürün hemen oluşturularak başlar ve sürekli olarak geliştirilir. Bakım süreci oldukça zordur, çünkü yapılan geliştirmeler ve değişiklikler belgelendirilmez. Bu durum, yazılımın ilerleyen aşamalarda sürdürülmesini güçleştirir. Bu modelin yazılımlar üzerinde emeklilik safhası vardır, yani yazılım belirli bir süre sonunda yenilenemeyecek ya da güncellenemeyecek duruma gelir. KULLANIM ALANLARI Küçük çaplı projeler veya kısa ömürlü prototip projelerde kullanıma uygundur. Uzun vadeli ya da karmaşık projeler için uygun değildir, çünkü belgeleme eksikliği ve düzenli bakımın yapılamaması ilerleyen aşamalarda sorunlara yol açar. BAROK MODEL ✓ Analiz Barok Model, yazılım geliştirme ✓ Tasarım süreçlerini doğrusal bir yapıda ✓ Kodlama ele alır. Geliştirme aşamaları, adım adım ve sıralı bir biçimde ✓ Modül Testleri ilerler. Bu modelde planlama, ✓ Altsistem Testleri çözümleme, tasarım ve ✓ Sistem Testi gerçekleştirim gibi işlevler ✓ Belgeleme açıkça tanımlanmıştır. ✓ Kurulum TEMEL ÖZELLİKLER: Doğrusal Süreç: Barok Modeli, yazılım geliştirme aşamalarını belirli bir sırada ve geri dönüşsüz bir şekilde uygular. Aşamalar arası geri dönüşlerin nasıl yapılacağı tanımlı değildir. Belgeleme Önceliği: Bu modelin öne çıkan özelliklerinden biri belgeleme işleminin ayrı bir süreç olarak ele alınmasıdır. Belgeleme, yazılım geliştirilip test edildikten sonra gerçekleştirilir. Kullanım Zamanı: 1970’lerin ortalarında kullanılmaya başlanmıştır, ancak günümüzde yaygın olarak tercih edilmez. ZAYIF YÖNLER: Geri Dönüş Eksikliği: Süreç aşamaları arasında geri dönüşlerin net tanımlanmamış olması, projelerde esneklik kaybına yol açar. Günümüzdeki Yeri: Belgeleme işlemi modern yazılım geliştirme süreçlerinde her aşamanın doğal bir parçası olarak kabul edilir, bu da Barok Modeli'ni günümüzde yetersiz kılmaktadır. Sonuç: Barok Model, günümüzde geçerliliğini yitirmiş bir modeldir. Doğrusal ve katı süreç yapısı, geri dönüşlerin gerekli olduğu projelerde ciddi sorunlara yol açabilir. ÇAĞLAYAN MODELİ Çağlayan Modeli, 1970’li yılların ortalarında yapısal sistem geliştirme metodolojileri ile ortaya çıkmış ve yazılım geliştirme süreçlerini sıralı bir şekilde ele almıştır. Yaşam döngüsü adımları (planlama, çözümleme, tasarım, gerçekleştirim, bakım) tek bir sıra halinde takip edilir. KLASİK MODEL (ŞELALE MODELİ) Analiz Tasarım Geliştirme -birim Test Geliştirme - entegrasyon testi İşletme -Bakım TEMEL ÖZELLİKLER Adım Adım İlerleme: Her bir aşama, bir sonraki aşamaya geçmeden önce tamamlanmalıdır. Bu, süreçlerin baştan sona tek yönlü izlenmesi anlamına gelir. Belgeleme: Çağlayan Modeli, belgeleme işlevini yazılım üretiminin doğal bir parçası olarak kabul eder. Bu nedenle belgeleme her aşamada yapılır. Günümüzdeki Yeri: Küçük çaplı projeler veya iyi tanımlanmış yazılımlar için uygun olsa da, günümüzde "geleneksel model" olarak bilinir ve kullanımı azalmaktadır. AVANTAJLAR Net Süreç Tanımları: Çağlayan Modeli, süreçleri net bir şekilde tanımlar, bu da daha az belirsizliğe sahip projelerde avantaj sağlar. Kısa Süreli Projeler: Özellikle küçük ve az karmaşık projelerde uygulanması mümkündür. ÇAĞLAYAN MODELİ TEMEL SORUNLARI Yineleme Eksikliği: Çoğu gerçek dünya projesi tekrar eden döngüler gerektirir. Ancak, Çağlayan Modeli’nde bu yinelemeler için yer yoktur. Kullanıcıya Ulaşma Süresi: Yazılımın son kullanıcıya ulaşması uzun zaman alabilir. Gereksinim Eksiklikleri: Gereksinimlerin doğru tanımlanmaması durumunda, hataların fark edilmesi gerçekleştirim aşamasından sonrasına denk gelir ve bu durum düzeltme maliyetlerini artırır. ÇAĞLAYAN MODELİ TEMEL SORUNLARI Teknik Personel İlgisi: Yazılım ekipleri kodlama dışındaki faaliyetleri (planlama, çözümleme, tasarım) angarya olarak görebilir. Bu da ekiplerin motivasyonunu olumsuz etkiler. Üst Yönetim Beklentileri: Projenin tamamlanma süresi uzun olduğunda, yönetim tarafından proje sürekli bir gider merkezi olarak algılanabilir ve olumsuz bir hava oluşabilir. Sonuç: Çağlayan Modeli, iyi tanımlanmış ve kısa süreli projeler için uygundur, ancak daha karmaşık, belirsizlik içeren veya yineleme gerektiren projeler için uygun değildir. Yavaş teslimat süreleri ve geri bildirim eksikliği gibi sorunları mevcuttur. V MODELİ V Modeli, yazılım geliştirme sürecini iki ana kola ayırarak ele alan bir modeldir: üretim ve sınama işlevleri. Bu modelde, üretim aşamaları sol kolda, sınama aşamaları ise sağ kolda yer alır. Üretim sürecindeki her aşama için karşılık gelen bir sınama süreci bulunur. V şekli, bu iki süreç arasındaki ilişkiyi temsil eder. Kullanıcı Modeli Mimari Model Gerçekleştirim Modeli ZAMAN TEMEL ÖZELLİKLER Üretim ve Sınama Eşleşmesi: Her üretim aşamasının, karşılıklı olarak bir sınama aşamasıyla eşleştirildiği yapı. Hata Tespiti ve Geri Dönüş: Sağ kolda yapılan sınama sırasında tespit edilen hatalar, sol kolda ilgili aşamaya geri dönülerek düzeltilir. Geri Bildirim Mekanizması: Hataların bulunduğu sınama aşamasında, yatay olarak karşılık gelen üretim aşamasına dönülerek düzeltme yapılır. V MODELİ'NİN SOL KOLU (ÜRETİM) Gereksinim Analizi: Kullanıcı gereksinimlerinin belirlenmesi. Sistem Tasarımı: Yazılımın genel yapısının ve bileşenlerinin tasarımı. Alt Sistem Tasarımı: Sistemin alt bileşenlerinin detaylandırılması. Modül Geliştirme: Bireysel modüllerin kodlanması ve geliştirilmesi. V MODELİ'NİN SAĞ KOLU (SINAMA) Modül Testi: Bireysel modüllerin doğru çalıştığının kontrol edilmesi. Alt Sistem Testi: Modüllerin bir araya getirilip sistemin alt kısımlarının test edilmesi. Sistem Testi: Tam sistemin çalışırlığı ve performansının test edilmesi. Kabul Testi: Kullanıcı gereksinimlerinin karşılanıp karşılanmadığının sınanması. V MODELİ'NİN TEMEL ÇIKTILARI Kullanıcı Modeli: Kullanıcı gereksinimlerini tanımlayan model. Mimari Model: Sistem mimarisinin genel yapısını belirleyen model. Gerçekleştirim Modeli: Sistem geliştirilirken takip edilen teknik süreçler. Sonuç: V Modeli, özellikle belirsizliklerin az olduğu ve iş tanımlarının net olduğu BT projelerinde etkili bir süreç modelidir. Ayrıca, kullanıcı katılımını artırır ve sınama süreçlerinde hataların doğru şekilde düzeltilmesini sağlar. HELEZONİK MODEL Helezonik Model, Çağlayan Modeli ve prototipleme yaklaşımını birleştiren, iteratif ve risk odaklı bir yazılım geliştirme modelidir. Bu modelde, yazılım küçük parçalara bölünerek geliştirilir ve her bir parça, yinelemeli bir süreçle test edilir. En önemli özelliği, her döngüde risk analizi yapılmasıdır. TEMEL ÖZELLİKLER İteratif Süreç: Yazılımın küçük parçalara bölünerek, her birinin planlama, geliştirme, test ve değerlendirme aşamalarından geçtiği bir süreçtir. Risk Analizi: Her yineleme öncesinde riskler analiz edilir ve bu risklerin minimize edilmesi hedeflenir. Onay Ekseni: Her bir döngü sonunda, projenin devam edip etmeyeceği ya da değişikliklerin gerekli olup olmadığına karar verilir (Tamam-Devam Kararı). HELEZONİK MODELİN ADIMLARI Planlama: Her yineleme için gerekli planlamalar yapılır. Risk Çözümleme: Riskler belirlenir ve çözümler geliştirilir. Üretim: Yazılım geliştirme işlemleri gerçekleştirilir. Kullanıcı Değerlendirmesi: Geliştirilen parçalar kullanıcı tarafından test edilir ve geri bildirim alınır. HELEZONİK MODEL'İN ÜSTÜN YÖNLERİ Büyük Projelere Uygunluk: Helezonik Model, özellikle büyük ve uzun süreli projelerde başarılı sonuçlar verir. Risk Yönetimi: Her adımda risk çözümlemeye odaklanması, projeyi daha güvenli hale getirir. Kullanıcı Katılımı: Kullanıcı geri bildirimleri, her yinelemede sürecin iyileştirilmesini sağlar. HELEZONİK MODEL'İN UYARIMLARI: VP Süreç Modeli: İteratif geliştirme süreçlerine odaklanan bir model. Evrimsel Geliştirme Süreç Modeli: Yazılımın sürekli geliştirilmesi üzerine kurulu bir model. Artımsal Geliştirme Süreç Modeli: Yazılımın küçük, bağımsız parçalar halinde geliştirilmesini hedefler. Araştırma Tabanlı Süreç Modeli: Bilimsel araştırma projelerinde kullanılabilecek bir geliştirme modeli. HELEZONİK MODEL Sonuç: Helezonik Model, risk çözümleme ve iteratif geliştirme yaklaşımıyla büyük projelerde etkili sonuçlar vermektedir. Bu modelin farklı uygulamaları, yazılım geliştirme sürecine esneklik katmakta ve projenin her aşamasında iyileştirme yapmayı sağlamaktadır. VP SÜREÇ MODELİ VP Süreç Modeli, V Modeli'nin sol tarafına (üretim aşamaları) prototip işlevlerinin eklenmesiyle oluşturulan bir modeldir. Bu model, yazılım geliştirme sürecinde kullanıcı modeli, mimari model ve gerçekleştirim modeli gibi alt modeller için belirsizlikleri azaltmak amacıyla prototiplerin geliştirilmesini içerir. Prototipler, yazılımın erken aşamalarında ortaya çıkabilecek potansiyel sorunları ve riskleri keşfetmek amacıyla kullanılır. TEMEL ÖZELLİKLER Prototipleme Amacı: Prototipler, alt modellerdeki belirsizlikleri ortadan kaldırmak ve riskleri minimize etmek için kullanılır. Prototip, tamamlanmış bir yazılım değil, belirli bir probleme yönelik bir çözüm geliştirmek amacıyla yapılır. Geçici Çözümler: Prototip çalışmaları, genellikle geçici çözümler sunar ve yazılımın nihai ürününe entegre edilmesi amaçlanmaz. Prototipin amacı, çözümlemeler yapıldıktan sonra geçerliliğini yitirebilir. Araştırma Odaklı Yaklaşım: Prototipleme çalışmaları, araştırma türünde olabilir ve belirli bir sorunun çözümüne yönelik olarak geçici çözümler üretir. ÖRNEKLER Bir bilgi teknolojisi (BT) projesi sırasında, kullanıcıların manuel olarak sakladığı büyük miktarda veriyi analiz etmeniz gerektiğini düşünelim. Örneğin, yüzlerce defterde yaklaşık beş milyon kayıt tutuluyor olabilir. Bu kayıtlar arasında hangi sayfaların dolu, hangilerinin boş olduğunu ve verilerin ne sıklıkta güncellendiğini bilmek, veri tasarımınız için kritik öneme sahiptir. Ancak bu kadar çok veriyi analiz etmek, zaman açısından oldukça maliyetli olabilir. Bu durumda, istatistiksel yöntemlerle bir örneklem seçebilir ve bu örneklem üzerinde analiz yaparak genel bir fikir edinebilirsiniz. Prototipleme İşlevi: Bu çalışma, bir prototip çalışması olarak kabul edilir. Amaç, tüm veriyi analiz etmeden önce belirli bir örneklem üzerinden sorunu çözmektir. Prototip burada, belirsizlikleri gidermek için geçici olarak kullanılan bir araçtır. Ana yazılımı geliştirmeye başladığınızda, bu prototip çalışmasına artık ihtiyaç duyulmayacaktır ve süreç tamamlandığında bu çalışma sona erer. Büyük veri tabanları ile çalıştığınızı ve 100 milyon kayıt içeren bir veri tabanında erişim performansını test etmek istediğinizi düşünelim. Ancak, bu kadar büyük bir veri tabanına erişme veya bu veriyi sisteminize aktarma imkanınız olmayabilir. Bu durumda, sisteminizde bir prototip veri tabanı oluşturarak rastgele veya sıralı erişimler yapabilir ve performansını ölçebilirsiniz. Prototipleme İşlevi: Bu örnekte, büyük bir veri tabanının küçük bir prototipini oluşturup, performans testleri gerçekleştirebilirsiniz. Bu testler, gerçek veri tabanına geçmeden önce performans hakkında fikir verir. Test işlemi tamamlandığında, bu prototip ve test için yazılan programlar artık gereksiz hale gelir ve projede kullanılmaz. VP SÜREÇ MODELİ'NİN AVANTAJLARI Belirsizlik Giderme: Prototipler, kullanıcı veya sistem gereksinimlerinde ortaya çıkabilecek belirsizlikleri azaltır. Risk Azaltma: Erken aşamalarda yapılan prototipleme, yazılımın ilerleyen aşamalarında ortaya çıkabilecek risklerin önüne geçer. Geçici Çözümler: Prototip çalışmaları, bir yazılımın tamamına uygulanmadan önce belirli bir problemi geçici bir çözümle ele alır. Sonuç: VP Süreç Modeli, yazılım geliştirme sürecinde belirsizliklerin ve risklerin minimuma indirilmesini sağlayan etkili bir yöntemdir. Prototip çalışmaları, yazılımın üretim aşamalarına entegre edilmeden önce, çeşitli çözümleri test etmek ve doğrulamak için kullanılır. PROTOTİP GELİŞTİRME İŞ ADIMLARI Prototip geliştirme, yazılım geliştirme sürecindeki belirsizlikleri gidermek için kullanılan geçici bir çözüm üretme sürecidir. Prototipleme adımları şu şekilde sıralanır: İŞ ADIMLARI n100 Belirsizliği Tanımla: Yazılım geliştirme sürecinde karşılaşılan belirsizliği veya sorunu açıkça tanımlayın. Bu adım, hangi konularda belirsizlik olduğunun anlaşılması için kritik öneme sahiptir. n200 Çözümleri Tanımla: Belirsizlikle başa çıkmak için uygulanabilecek olası çözümleri belirleyin. Hangi araçların ve yöntemlerin kullanılacağını planlayın. n300 Prototip Çalışması Yap: Çözümleri test etmek amacıyla geçici bir prototip geliştirin. Bu prototip, küçük bir ölçekte çalışarak belirsizliğin giderilmesine yönelik olacak şekilde tasarlanmalıdır. n400 Belirsizliğin Sonucunu Elde Et: Prototip çalışmasının sonucunu analiz ederek belirsizliklerin ne kadar giderildiğini ve elde edilen sonuçların ne kadar tatmin edici olduğunu değerlendirin. Not: Prototiplemenin zayıf yönlerinden biri, kaynak maliyetlerinin öngörülmesindeki zorluktur. Prototip geliştirme sürecinin ne kadar iş gücü ve zaman gerektireceğini tahmin etmek zor olabilir, bu da yönetimi karmaşık hale getirir. EVRİMSEL GELİŞTİRME SÜREÇ MODELİ Evrimsel Geliştirme Süreç Modeli, yazılım geliştirme sürecini aşamalara bölen ve her aşamada tam işlevselliğe sahip ürünlerin geliştirildiği bir modeldir. Bu model, coğrafi olarak geniş alana yayılmış çok birimli organizasyonlar için uygundur. Her aşama, bağımsız bir sistem evrimi olarak düşünülür ve ilerleyen aşamalar, önceki evrimler üzerine inşa edilir. MODELİN İŞLEYİŞİ Pilot Yaklaşımı: Geliştirme sürecine birimlerden biri üzerinde tam işlevselliği olan bir sistem geliştirilerek başlanır. Sistem eksiklikleri giderildikten sonra diğer birimlere yayılır. Her birim için sistemin işlevselliği o birime özel olarak uyarlanır. Örnek: Bu model, çok birimli banka uygulamaları gibi geniş ölçekli organizasyonlar için idealdir. İlk evrimde geliştirilen sistemin başarısı, sonraki evrimlerin temelini oluşturur. EVRİMSEL GELİŞTİRME SÜRECİNİN İŞ ADIMLARI 0000 Tüm Geliştirmeyi Planla: Genel proje geliştirme sürecini ve her evrimi kapsayan bir plan oluşturun. 1000 Birinci Evrimi Üret: İlk birim veya birim grubu için tam işlevsel sistemi üretin ve uygulamaya alın. 2000 İkinci Evrimi Üret: İkinci birim veya grup için sistemin gerekli işlevsellikleri eklenerek geliştirin. n000 n’inci Evrimi Üret: Aynı süreç her bir birim için tekrarlanır, her evrim birbirinin üzerine inşa edilir. HER EVRİM İÇİN k100 Evrimi Planla: Her bir evrim aşaması için planlama yapılır. k200 Evrimi Üret: Belirli bir evrim için sistem geliştirilir. k300 Evrimi Kur ve Çalıştır: Geliştirilen sistem uygulanır ve çalıştırılır. Not: Modelin temel sorunu, değişikliklerin yönetimi ve konfigürasyon denetimidir. Evrimler arasında sistemin güncel tutulması ve yapılan değişikliklerin etkin bir şekilde izlenmesi zor olabilir. ARTIMSAL GELİŞTİRME SÜREÇ MODELİ Artımsal Geliştirme Süreç Modeli, yazılımın küçük parçalar halinde, belirli işlevlerin geliştirilerek aşama aşama ilerlediği bir modeldir. Her bir artımda yazılıma yeni işlevler eklenir ve bu süreç, son ürüne ulaşılana kadar devam eder. İlk aşamada temel (çekirdek) bir ürün geliştirilir ve uygulamaya alınır. Sonraki artımlarda bu çekirdeğe yeni işlevler eklenir ve ürünün işlevselliği adım adım artırılır. Bu modelde, ürünün her sürümü tam işlevselliğe sahip olmayabilir; nihai işlevsellik, üretim sürecinin sonunda elde edilir. ARTIMSAL GELİŞTİRME SÜRECİNİN TEMEL ÖZELLİKLERİ Çekirdek Geliştirme: İlk olarak ürünün temel işlevselliğini içeren bir çekirdek geliştirilir. Artım Ekleme: Çekirdeğin üzerine eklenen her yeni artım, önceki artımları da içerir ve ürünü daha işlevsel hale getirir. Eksik İşlevsellik: Her artımda yazılım tam işlevselliğe sahip olmayabilir. Üretimin sonuna kadar bazı eksik işlevler bulunabilir. EVRİMSEL MODEL İLE FARKI Evrimsel Model: Her evrimde tam işlevsel bir ürün üretilir. Artımsal Model: Her artımda ürünün yalnızca bir kısmı geliştirilir ve üretim sürecinin sonunda tam işlevsellik elde edilir. ÖRNEK Bir öğrenciye bir dönem boyunca bir yazılım geliştirme ödevi verildiğini düşünelim. Öğrenci bu yazılımı her iki haftada bir öğretmene sunacaktır. İlk haftalarda sunulan yazılımda bazı özellikler eksik olabilir, örneğin bir menüde bazı seçenekler seçildiğinde "Bu kısım henüz yazılmadı" gibi mesajlar alınabilir. Ancak her iki haftada bir yapılan sunumlarda bu eksiklikler giderek azalır ve dönem sonunda yazılım tam işlevselliğe sahip hale gelir. Bu süreç, artımsal geliştirme tarzının bir örneğidir. Yazılımın her iki haftada bir yapılan sunumları, yazılımın tam hali olmasa bile, kademeli olarak işlevselliği artırır. ARTIMSAL GELİŞTİRME SÜRECİNİN İŞ ADIMLARI 1000 Tüm Geliştirmeyi Planla: Yazılımın tüm geliştirme süreci için genel bir plan oluşturulur. Bu plan, çekirdeğin geliştirilmesi ve artımların eklenmesi süreçlerini kapsar. 2000 Taslak Kullanım Kılavuzları Üret: İlk artımda kullanılacak olan kullanım kılavuzları taslak halinde hazırlanır. 3000 Tasarım Yap: Çekirdek yazılım ve artımlar için tasarım aşaması gerçekleştirilir. 4000 Çekirdeği Üret: Ürünün temel işlevselliğini sağlayacak çekirdek kısım geliştirilir. 4100 Çekirdek İçin Gerçekleştirim Modeli Üret: Çekirdeğin nasıl çalışacağını gösteren gerçekleştirim modeli oluşturulur. 4200 Çekirdek Yazılımı Üret: Çekirdek yazılımı kodlanır ve test edilir. 5000 Birinci Artımı Üret: Çekirdek üzerine eklenen ilk artım geliştirilir. 5100 Birinci Artım İçin Gerçekleştirim Modeli Üret: Birinci artım için gerçekleştirim modeli oluşturulur. 5200 Birinci Artım Yazılımını Üret: Birinci artım kodlanır ve test edilir. 5n00 Modeli Çekirdekle Birlikte Gözden Geçir: İlk artım, çekirdek ile birlikte gözden geçirilir ve yeni işlevlerin entegrasyonu sağlanır. 6000 İkinci Artımı Üret: Çekirdeğe ve birinci artıma eklenen ikinci artım geliştirilir. 6100 İkinci Artım İçin Gerçekleştirim Modeli Üret: İkinci artım için gerçekleştirim modeli oluşturulur. 6200 İkinci Artım Yazılımını Üret: İkinci artım kodlanır ve test edilir. 6n00 Modeli Çekirdek ve Birinci Artımla Birlikte Gözden Geçir: İkinci artım, önceki sürümlerle birlikte entegre edilip gözden geçirilir. Not: Her artımdan sonra çekirdek sürekli olarak gözden geçirilir ve yeni artımın entegrasyonu sağlanır. Bu nedenle, değişiklik yönetimi ve konfigürasyon yönetimi bu süreçte oldukça önemlidir. ARTIMSAL GELİŞTİRMENİN AVANTAJLARI Kademeli İlerleme: Proje yavaş yavaş ve kontrol altında ilerler, her artımda yazılım daha işlevsel hale gelir. Esneklik: Yeni işlevlerin eklenmesi ve geliştirme sürecinde geri bildirim alınması mümkündür. Sürekli Gözden Geçirme: Her artımdan sonra sistem gözden geçirilir ve bir sonraki artımda yapılacak düzeltmeler ve iyileştirmeler belirlenir. ARTIMSAL GELİŞTİRMENİN DEZAVANTAJLARI Eksik İşlevsellik: Ürünün her aşamasında tam işlevselliğe sahip olmaması, kullanıcıların erken aşamalarda ürünü tam olarak değerlendirememesine neden olabilir. Değişiklik ve Konfigürasyon Yönetimi: Her artımda sistemin gözden geçirilmesi ve değişikliklerin etkin yönetilmesi zorluk yaratabilir. ARAŞTIRMA TABANLI SÜREÇ MODELİ Araştırma Tabanlı Süreç Modeli, belirsizliklerin yüksek olduğu ortamlarda kullanılan bir yazılım geliştirme modelidir. Bu model, "yap-at prototipi" olarak da bilinir, çünkü geliştirilen yazılımlar genellikle sınırlı bir süre kullanıldıktan sonra atılır. Her adımın sonuçları, bir sonraki adımın ne olacağını büyük ölçüde belirler. Bu nedenle, bu modelde zaman ve işgücü planlaması zordur ve süreç tamamen esnek bir yapıda ilerler. TEMEL ÖZELLİKLER Belirsizlik: Araştırma ortamlarında genellikle bir sonraki adımın ne olacağı, mevcut adımın sonuçlarına bağlıdır. Bu nedenle araştırma tabanlı süreç modelinde belirsizlikler oldukça yüksektir. Yap-at Prototipi: Geliştirilen yazılımlar genellikle geçici çözümler sunar ve birkaç kullanımın ardından gereksiz hale gelerek atılır. Helezonik Model İle Benzerlik: Bu model, helezonik modelin küçük döngüleri gibi işleyen bir yapıya sahiptir. Her adımda küçük dönüşler yapılır, ancak bu dönüşler araştırma odaklıdır ve gelecekteki adımları belirler. Zorluklar: Araştırma tabanlı süreç modeli, zaman ve işgücü planlamasında öngörülemezlikler yaratır. Bu modelde yönetim ve kontrol oldukça zordur. MODELİN İŞLEYİŞİ Araştırma Odaklı Yaklaşım: Yapılacak işlerin sonuçları belirsiz olduğundan, bir adımda yapılan çalışmalar, bir sonraki adımın nasıl ilerleyeceğini belirler. Bu nedenle, süreç her zaman planlı bir şekilde ilerlemez ve bir sonraki adım, önceki adımın sonuçlarına göre şekillenir. Sonuç Odaklı Prototipler: Geliştirilen yazılım parçaları, küçük ya da büyük fark etmeksizin, gelecekteki adımlar için yönlendirici sonuçlar üretmek üzere tasarlanır. Ancak, bu prototipler genellikle sınırlı kullanıma sahiptir ve işlevleri tamamlandığında artık kullanılmaz hale gelir. Esneklik ve Planlama Zorluğu: Bu modelde zaman ve işgücü planlaması oldukça zordur, çünkü bir adımın sonucunda ne elde edileceği tam olarak öngörülemez. Bu nedenle, süreçte katı yönetim yaklaşımları uygulanamaz ve sabit-fiyatlı projeler için uygun değildir. MODELİN AVANTAJLARI Esneklik: Araştırma tabanlı projelerde esneklik ve belirsizlik yönetimi bu modelin en büyük avantajıdır. Bu sayede, her adımda yeni keşifler yapılabilir ve sonuçlar doğrultusunda yön belirlenebilir. Belirsizlikleri Azaltma: Her adım, gelecekteki adımları belirlediği için belirsizliklerin yavaş yavaş ortadan kalkmasına yardımcı olabilir. Bu model, özellikle bilinmeyen bir alanı keşfetmek için uygundur. MODELİN DEZAVANTAJLARI Zaman ve İşgücü Kestirimi: Planlama ve zamanlama konularında tahmin yapmak oldukça zordur, bu da projeyi yönetmeyi zorlaştırır. Sabit-Fiyat Projelere Uygun Değil: Zaman ve maliyet tahminlerinin kesin yapılması mümkün olmadığından, sabit-fiyatlı projeler için uygun değildir. ÖRNEK Bir üniversite araştırma projesi kapsamında, bilim insanları bilinmeyen bir alan üzerinde çalışıyor olabilirler. Örneğin, yapay zeka algoritmalarının tamamen yeni bir problem üzerinde denenmesi gerektiğini düşünelim. Bu durumda, ilk adımda oluşturulan prototip yazılım, sadece hipotezleri test etmeye yönelik olabilir ve birkaç testten sonra işe yaramaz hale gelir. Bu prototipten elde edilen sonuçlar, bir sonraki araştırma adımını belirler ve süreç bu şekilde ilerler. Nihai bir ürün ortaya çıkmasa bile, araştırmacılar bu prototipten önemli sonuçlar çıkarabilir ve gelecekteki çalışmalara yön verebilir. ARAŞTIRMA TABANLI SÜREÇ MODELİ'NİN UYGUN OLDUĞU ALANLAR Bilimsel Araştırmalar: Belirli sonuçların öngörülemediği ve keşif amaçlı çalışmaların yapıldığı projelerde. Deneysel Projeler: Yeni teknolojilerin test edilmesi ve keşfedilmesinde. Yüksek Belirsizlik İçeren Projeler: Proje sonuçlarının net olmadığı, her adımın bir sonraki adımı belirlediği projelerde. ÇEVİK (AGİLE) SÜREÇLER Çevik (Agile) yazılım geliştirme süreçleri, kendi kendini organize eden takımlar tarafından geliştirilir. Bu takımların işbirliğiyle, yinelemeli ve artımlı bir yaklaşım benimseyerek yüksek kalitede çözümler üretilir. Çevik yöntemler, özellikle geleneksel yöntemlerin yetersiz kaldığı projelerde esneklik sağlayan alternatif çözümler olarak ortaya çıkmıştır. Bu süreçler, belirli bir plana bağlı kalmaktan çok değişimi fark etmeye, süreç işlevlerinden daha çok paydaşların etkileşimlerine ve kapsamlı dokümantasyondan ziyade üretilen koda odaklanır. Çevik süreçlerin temel amacı, müşteri ile sürekli işbirliği içinde çalışmak ve projenin her aşamasında müşteri taleplerine uyum sağlamaktır. Değişen gereksinimler, teknik riskler ve yazılım ürününü etkileyebilecek her türlü değişikliğe karşı esneklik sunar. Yalnızca projeye uyum sağlamak değil, aynı zamanda yazılımı artımsal olarak geliştirmek de çevik süreçlerin esaslarından biridir. Erken ve sık teslimatlar, proje risklerini azaltır ve müşteri memnuniyetini artırır. ÇEVİK SÜREÇLERİN FELSEFESİ Çevik süreçlerin temel felsefesi, çalışan yazılımı müşteri odaklı bir şekilde geliştirmektir. Bu süreçler, müşteri ile sürekli etkileşim içinde olarak her yinelemede geliştirilen yazılımın müşteri ihtiyaçlarını karşıladığından emin olmayı hedefler. Değişen koşullara hızla adapte olabilme yeteneği, çevik süreçlerin en büyük avantajlarından biridir. Proje planlaması kısa vadeli yapılır ve her yeni yineleme ile değişen gereksinimlere yanıt verilmesi sağlanır. ÇEVİK YÖNETİM SÜRECİNDE TAKIM ÖZELLİKLERİ Çevik yönetim sürecinde yer alacak ekibin belirli özelliklere sahip olması gerekmektedir. Ekip, kendi kendini organize edebilme yeteneğine sahip olmalı ve proje hedeflerine tam olarak odaklanmalıdır: Sağlıklı İletişim: Ekip üyeleri arasında yüz yüze iletişim en etkili bilgi aktarım yöntemidir. Bu iletişim, takımın verimli çalışmasını sağlar. Ortak Amaç: Ekip üyelerinin ortak amacı, çalışan bir yazılımı zamanında müşteriye teslim etmektir. İşbirliği: Ekip üyeleri birbirleriyle ve müşteriyle işbirliği içinde çalışmalıdır. Paydaşların sürekli işbirliği, proje sürecini daha şeffaf hale getirir. Saygı ve Güven: Ekip üyeleri arasında karşılıklı saygı ve güven ortamı sağlanmalıdır. Karar Alma Yetkisi: Ekip hem teknik hem de proje hakkında karar verebilme yeteneğine sahip olmalıdır. Bu, çevik süreçlerin esnekliğini artırır. Deneyim ve Yetenek Gelişimi: Boşa harcanan çaba yoktur. Gereksiz hale gelen bir çözüm bile süreç boyunca edinilen deneyim ve yeteneklerle ekibe katkı sağlar. KENDİ KENDİNİ DÜZENLEYEN EKİPLERİN ÖZELLİKLERİ Çevik süreçlerde takımların kendi kendini düzenleyebilmesi çok önemlidir. Bu, ekibin görevleri ve iş süreçlerini kendi yapısına göre düzenleyebilmesini sağlar: İşe Göre Uyarlama: Ekip, yapılacak işe ve gereksinimlere göre kendisini uyarlamalıdır. Süreç Uygulaması: Ekibin kullanacağı süreçler, proje işlevlerine göre uyarlanmalıdır. Çalışma Zaman Planlaması: Ekip, yazılım işlevlerini zamanında teslim edebilmek için çalışma zamanını kendisi belirlemelidir. Bu, ekibin proje sorumluluğunu üstlenmesini sağlar. ÇEVİK SÜREÇLERİN TEMEL İLKELERİ Çevik yöntemler, yazılım geliştirme süreçlerine yönelik on iki temel ilke üzerine kurulmuştur. Bu ilkeler, projenin her aşamasında ekiplerin izlemesi gereken rehber niteliğindedir: Erken ve Sürekli Teslimat: Yazılımın erken ve belirlenen fazlarda teslim edilmesi, müşterilerin memnuniyetini sağlar. Değişen Gereksinimlere Uyarlılık: Proje sürecinin son aşamalarında bile değişen gereksinimler kabul edilir. Değişim, müşterinin rekabet avantajı için bir fırsat olarak görülür. Çalışan Yazılımın Düzenli Teslimi: Müşteriye belirlenen aralıklarla çalışan yazılım teslim edilmelidir. Sürekli İşbirliği: İş süreçlerinin sahipleri ile yazılımcılar, proje boyunca birlikte çalışmalıdır. Motive Takımlar: Projelerin başarısında motive olmuş bireyler kritik rol oynar. Onlara ihtiyaç duydukları ortam ve destek sağlanmalıdır. Yüz Yüze İletişim: Bir yazılım takımında bilgi paylaşımının en etkin yöntemi yüz yüze iletişimdir. Çalışan Yazılım Başarının Ölçütüdür: Projenin başarısı, çalışan yazılımın müşteriye sağladığı fayda ile ölçülmelidir. Sürdürülebilir Geliştirme: Çevik süreçler, sürekli olarak sürdürülebilir işlevler geliştirmeyi teşvik eder. Teknik Mükemmellik ve İyi Tasarım: Teknik altyapı desteği, sürekli mükemmeliyet ve iyi tasarım çevik süreçleri güçlendirir. Sadelik: Gereksiz işlerin ortadan kaldırılması, çevik süreçlerin temel prensiplerindendir. Kendi Kendini Organize Eden Takımlar: En iyi mimariler ve çözümler, kendi kendini organize eden takımlardan çıkar. Düzenli Gözden Geçirme ve İyileştirme: Takım, sürekli nasıl daha etkili ve verimli olabileceğini düşünmeli ve süreçlerini buna göre düzenlemelidir. ÇEVİK YÖNTEMLERİN FAYDALARI Çevik yöntemlerin en önemli avantajları arasında esneklik, kısa sürede geri bildirim sağlama ve işbirliğine dayalı süreç yönetimi yer alır: Değişikliklere Karşı Esneklik: Çevik yöntemler, değişen gereksinimlerin ve koşulların yönetimini kolaylaştırır. Yüksek Motivasyon: Yüz yüze iletişime dayalı süreçler, ekiplerin moral ve motivasyonunu artırır. Erken Hata Tespiti: Kısa süreli yinelemeler, projedeki muhtemel hataların erken tespit edilmesini sağlar. Müşteri Memnuniyeti: Proje sürecinde müşteri ile sürekli etkileşim sağlanarak müşteri memnuniyeti artırılır. Kolay Geri Dönüş ve Düzeltme: Geri bildirimler doğrultusunda süreçte geri dönüşler ve düzeltmeler kolaylıkla yapılabilir. ÇEVİK SÜREÇLERİN KISITLARI Çevik yöntemlerin uygulanması, bazı kısıtlamalarla karşı karşıya kalabilir. Bu kısıtlar, çevik süreçlerin doğasına uygun olmayan projelerde zorluk yaratabilir: Uygun Olmayan Ekip: Eğitim almamış, işbirliği yapmayan ya da kişisel sorunları olan ekipler çevik süreçlerle verimli çalışamaz. Büyük Projeler: Kalabalık ekipler ya da büyük ölçekli projeler için çevik süreçler uygun olmayabilir. Zayıf İletişim: Proje elemanları arasında iletişim zayıfsa çevik yöntemler verimli olamaz. Belirsiz Gereksinimler: Gereksinimlerin net olmadığı projelerde çevik süreçler karmaşık hale gelebilir. Yetersiz Dokümantasyon: Çevik süreçlerin "gerektiği kadar" dokümantasyon anlayışı, bakım süreçlerinde sorun yaratabilir. ÇEVİK SÜREÇ ÖRNEKLERİ: AŞIRI PROGRAMLAMA (XP: EXTREME PROGRAMMİNG), SCRUM Başlıca çevik metodolojiler arasında Scrum, Aşırı Programlama (XP) ve Kanban yer alır. Çevik yaklaşımlar genellikle organizasyonların ihtiyaçlarına göre uyarlanır ve bu metodolojiler birbirleriyle entegre edilerek kullanılabilir. Özellikle Scrum ile birlikte Kanban ve XP metodolojileri karma süreçler oluşturmak için yaygın olarak tercih edilir. AŞIRI PROGRAMLAMA (XP: EXTREME PROGRAMMİNG) Aşırı Programlama (XP), yazılım geliştirme sürecinde sık sık geri bildirim alarak esnek bir yapıda ilerlemeyi hedefler. XP, yinelemeli ve artımlı bir geliştirme yaklaşımıdır ve proje boyunca müşteri taleplerini ön planda tutar. Bu metodolojide süreç dört ana adımdan oluşur: Planlama, Tasarım, Kodlama ve Sınama. PLANLAMA Kullanıcı Öyküleri: Müşteri, projenin ihtiyaçlarını temsil eden kullanıcı öyküleri oluşturur ve bu öyküleri öncelik sırasına göre derecelendirir. Eğer öyküler çok karmaşıksa, ekip müşteriden bu öyküleri daha küçük alt öykülere bölmesini ister. Öykülerin Gerçeklenmesi: Ekip, öykülerin projeye hangi sırayla ekleneceğine karar verir. Ya yüksek riskli öyküler önce gerçekleştirilir ya da yüksek öncelikli öyküler önce tamamlanır. Tüm öyküler, birkaç hafta içinde tamamlanacak şekilde planlanır. Proje Hızının Ölçülmesi: İlk artım, ekibin proje hızını değerlendirmek için kullanılır. Bu hız baz alınarak sonraki artımların teslim tarihleri belirlenir. Eğer aşırı sözler verildiyse, artımsal ürünlerin içeriği yeniden kararlaştırılır. Esnek Planlama: Müşteri süreç boyunca yeni öyküler ekleyebilir, mevcut öykülerin önceliğini değiştirebilir veya bazı öykülerden vazgeçebilir. Ekip, kalan artımları ve iş planını buna göre günceller. TASARIM Basit Tasarım (KISS - Keep It Simple, Stupid!): Basit bir tasarım, karmaşık gösterimlere tercih edilir. Tasarımın gereksiz yere karmaşık hale getirilmesinden kaçınılır. CRC Kartları (Class-Responsibility-Collaboration): Yazılımın sınıf düzeyinde incelenmesi için CRC kartları kullanılır. Spike Solution: Karmaşık bir tasarım kaçınılmazsa, işlevsel bir ön gerçekleme yapılır. Refactoring: Kodun düzenli olarak iyileştirilmesi (refactoring) teşvik edilir. Tasarım Çıktıları: CRC kartları ve ön gerçeklemeler tasarımın temel çıktılarını oluşturur; başka bir ürün üretilmez. KODLAMA Sınama Hazırlıkları: Programcı, sınıfların veya fonksiyonların temel işlevselliklerini test etmek için kod yazar. Yazılım, yalnızca bu sınavları geçmeye yetecek şekilde kodlanır (KISS prensibi). Çift Kişi ile Kodlama (Pair Programming): İki programcı birlikte çalışır. Biri sorunu çözmeye odaklanırken, diğeri çözümün genel tasarıma ve kalite standartlarına uygunluğunu denetler. SINAMA Birim Sınamaları: Otomatik bir şekilde birim sınamaları gerçekleştirilir. Sınıfların ya da fonksiyonların doğru çalıştığı bu testler aracılığıyla doğrulanır. Müşteri Testi: Müşteri, geliştirilen artımsal ürünü dener ve geri bildirimde bulunur. SCRUM Scrum, 1990’ların başından beri karmaşık ürün geliştirme süreçlerini yönetmek için kullanılan bir süreç çerçevesidir. Bu çerçeve, Scrum takımları ile birlikte roller, etkinlikler, eserler ve kurallar bütününü kapsar. Scrum’ın temelinde deneysel süreç kontrol teorisi yer alır ve bu yaklaşım, öngörülebilirliği artırmak ve riskleri en iyi şekilde kontrol etmek için iterasyonlu ve artımlı bir yöntem kullanır. SCRUM TAKIMI Scrum Takımı üç temel rolden oluşur: Ürün Sahibi: Ürün Sahibi, geliştirme takımının işini ve ürünün değerini en üst düzeye çıkarmakla sorumludur. Geliştirme Takımı: Geliştirme Takımı, her Sprint sonunda “Bitti” tanımına uygun, yayınlanabilir ürün parçalarını teslim etmekle sorumludur. Scrum Master: Scrum Master, Scrum’ın doğru anlaşıldığından ve uygulandığından emin olmakla sorumludur. SCRUM ETKİNLİKLERİ Sprint: Bir ay ya da daha kısa süreli, içerisinde "Bitti" durumunda olan, kullanılabilir ve potansiyel olarak yayınlanabilir bir Ürün Parçasının oluşturulduğu periyottur. Sprint, Scrum’ın kalbidir. Sprint Planlama: Sprint süresince yapılacak işlerin planlandığı toplantıdır. Bu toplantıda Ürün İş Listesi kalemleri ele alınır ve Sprint için hedefler belirlenir. Sprint Değerlendirme: Sprint sonunda, üretilen ürün parçası gözden geçirilir ve gerekiyorsa Ürün İş Listesi güncellenir. Sprint Retrospektifi: Sprint Retrospektifi, Scrum takımının kendini değerlendirdiği ve bir sonraki Sprintte yapacağı iyileştirmeler için plan oluşturduğu bir fırsattır. SCRUM ESERLERİ Ürün İş Listesi: Üründe yapılması gereken işlerin sıralandığı bir listedir. Bu liste, ürüne dair tüm gereksinimlerin yer aldığı gereksinim kaynağıdır. Sprint İş Listesi: Sprint için seçilen Ürün İş Listesi kalemlerini ve Sprint hedeflerine ulaşmak için yapılacak işlerin planını içerir. Ürün Parçası: Sprint boyunca tamamlanan Ürün İş Listesi kalemlerinden ve önceki Sprintlerin ürün parçalarından oluşan bir bütünsel değeri temsil eder. XP VE SCRUM'UN BİRLİKTE KULLANIMI Scrum ve XP, farklı avantajlar sunan çevik metodolojilerdir ve organizasyonlar bu iki yaklaşımı bir arada kullanarak karma metodolojiler oluşturabilir. Scrum’ın kısa sprint yapısı, XP’nin sürekli geri bildirim odaklı süreçleri ile birleştirildiğinde, projeler hem esneklik kazanır hem de yüksek kaliteli yazılım ürünleri geliştirilir. BİLEŞEN TABANLI (COMPONENT- BASED) UYGULAMA GELİŞTİRME Bileşen Tabanlı Uygulama Geliştirme, bir uygulamanın hazır yazılım bileşenlerinden oluşturulmasını öngören bir yazılım geliştirme yaklaşımıdır. Bu yöntem, yeniden kullanılabilir bileşenlerin sistematik bir şekilde bir araya getirilmesiyle uygulama geliştirme sürecini hızlandırır. AŞAMALARI Konu Alanı Mühendisliği (Domain Engineering): Uygulamanın geliştirilmesi gereken konu alanına yönelik bileşenler analiz edilir ve belirlenir. Aday Bileşenlerin Sınıflandırılması ve Seçilmesi (Qualification): Uygulamaya uygun olabilecek mevcut bileşenler sınıflandırılır ve seçilir. Seçilen Bileşenlerin Uyarlanması (Adaptation): Seçilen bileşenler, yazılımın gereksinimlerine göre uyarlanır ve entegre edilir. Bileşenlerin Bir Araya Getirilmesi (Composition): Uyarlanan bileşenler birleştirilerek yazılımın bütünlüğü sağlanır ve sistem oluşturulur. ARTILARI Yeniden Kullanım: Bileşen tabanlı yaklaşım, hazır bileşenlerin yeniden kullanımını teşvik ederek geliştirme sürecini hızlandırır ve maliyetleri azaltır. Hızlı Uygulama Geliştirme: Bu yöntem, özellikle hızlı uygulama geliştirme süreçlerinde etkin bir şekilde kullanılabilir. EKSİLERİ Uygun Bileşen Bulma Zorluğu: Her projeye uygun bileşen bulmak her zaman mümkün olmayabilir ve bu durum süreci yavaşlatabilir. Bileşenlerin Uyarlanması: Mevcut bileşenlerin yazılım gereksinimlerine göre uyarlanması, göründüğü kadar kolay olmayabilir ve ek iş yükü yaratabilir. Bileşen tabanlı uygulama geliştirme, özellikle hızlı geliştirme süreçlerinde etkili bir çözüm sunar. Ancak, bileşenlerin uygunluğunun ve uyarlanmasının zorlukları da göz önünde bulundurulmalıdır. YAZILIM MODELLERİNİN KARŞILAŞTIRILMASI Yönetim ve Roller Şelale Modeli: Merkezi ve hiyerarşik bir yönetim yapısına dayanır. Komuta-kontrol tarzı yönetim uygulanır. Çevik Yöntemler: Takımı motive eden, engelleri kaldıran ve süreçleri kolaylaştıran bir liderlik anlayışına sahiptir. Yönetim, liderler, müşteriler ve takım elemanları arasında paylaşılır ve kendi kendini organize eden bir yapı öne çıkar. GÖRÜNÜRLÜK Şelale Modeli: Proje görünürlüğü, süreçler arasında yapılan kontroller ve dokümantasyonla sağlanır. Çevik Yöntemler: Yinelemeler sonunda ortaya çıkan çalışan ürünler ve ürün iş listeleri üzerinden görünürlük sağlanır. Özellikle kullanıcı ara yüzlü ürünlerde çevik yöntemler avantajlıdır. Dokümantasyon gerektiren karmaşık projelerde şelale modeli daha etkili olabilir. KARMAŞIKLIK Şelale Modeli: Karmaşık projeler için detaylı analiz ve planlama gerektirdiğinden daha uygundur. Özellikle gerçek zamanlı savunma sistemleri gibi projelerde tercih edilir. Çevik Yöntemler: Daha az karmaşık projelerde, hızlı geri bildirim almak ve erken müşteri memnuniyeti sağlamak için uygundur. Yinelemeler sonunda yapılan geri bildirim ve değişim imkânı, çevik yöntemlerin avantajıdır. PROJE BÜYÜKLÜĞÜ Şelale Modeli: Büyük projeler için daha uygundur. Kapsamlı planlama, dokümantasyon ve büyük takımlarda daha iyi koordinasyon sağlar. Çevik Yöntemler: Küçük projeler için daha uygundur. Katılımcılar arasındaki doğrudan iletişim sayesinde etkin bir şekilde yürütülebilir. Ancak büyük projeler için genişletilmiş çevik metodolojiler geliştirilmiştir (DAD, LeSS, SAFe). ALTYÜKLENİCİ KULLANIMI Şelale Modeli: Detaylı tanımlanmış isterler ve zaman kısıtlamaları nedeniyle alt yüklenici kullanımına uygundur. Maliyet ve zaman tahminlerinin kesin yapılabilmesi için gereksinimler net olmalıdır. Çevik Yöntemler: İletişim eksikliği ve değişen gereksinimlerin kabul edilmemesi nedeniyle alt yüklenici kullanımına uygun değildir. METODOLOJİLER Metodoloji, bir BT projesi ya da yazılımın yaşam döngüsü boyunca kullanılacak, birbirleriyle uyumlu yöntemler bütününü ifade eder. Her metodoloji iki temel bileşenden oluşur: Bir süreç modeli – Yazılım geliştirme sürecinin aşamalarını belirler. Belirli sayıda belirtim yöntemi – Yazılımın işlevlerini, yapısını ve davranışını tanımlamak için kullanılan tekniklerdir. Günümüzde uygulamada yüzden fazla metodoloji bulunmaktadır. Kuruluşlar, genellikle mevcut süreç modellerini (örneğin, Çağlayan ya da Helezonik Model) temel alarak kendi ihtiyaçlarına uygun metodolojiler geliştirmektedir. Bu özel metodolojiler, kuruluşların yazılım üretim süreçlerini optimize etmelerine yardımcı olurken, yazılım mühendisliği kaynaklarında sıkça adı geçen bağımsız uzmanlar tarafından geliştirilmiş metodolojiler de yaygın olarak kullanılmaktadır. METODOLOJİLERİN EVRİMİ VE STANDARTLAR Bağımsız kuruluşlar (IEEE, ISO, SEI, ESI vb.) tarafından geliştirilen standartlar ve rehberler, yazılım geliştirme sürecine yön vermekte ve kullanılan süreç modelleri ile belirtim yöntemleri zaman içinde güncellenmektedir. Bu kuruluşlar, sürekli gelişen teknolojilere uygun olarak standartları güncel tutar. Metodoloji geliştirmek, büyük bir iş gücü ve uzmanlık gerektirir. Örneğin, tam kapsamlı bir metodolojinin geliştirilmesi, en az 50 kişi-aylık bir iş gücü gerektirir. Kuruluşlar, bu nedenle çoğu zaman mevcut metodolojileri uyarlayarak kendilerine özgü süreçler oluşturmayı tercih eder. METODOLOJİ ÖRNEĞİ Agile (Çevik) Metodoloji bu bağlamda farklı bir örnek olarak ele alınabilir. Agile, iteratif ve artımsal geliştirme süreçlerine odaklanarak, yazılım projelerinin daha esnek bir şekilde yönetilmesini sağlar. Çevik metodolojinin temel amacı, değişen gereksinimlere hızlı yanıt vermek ve kullanıcı geri bildirimlerini sürekli göz önünde bulundurmaktır. Agile, belirli bir süreç modeline katı bir şekilde bağlı kalmadan, ekiplerin ihtiyaçlarına göre özelleştirilebilir. AGİLE METODOLOJİSİ'NİN BİLEŞENLERİ İteratif Süreç Modeli: Yazılım geliştirme süreçleri, küçük döngüler halinde ilerler. Her döngüde ürün üzerinde geliştirmeler yapılır ve bu geliştirmeler, bir sonraki yinelemede devam ettirilir. Sürekli Geri Bildirim: Kullanıcıdan alınan geri bildirimler, her yinelemede projeyi şekillendirir. Esneklik ve Uyum Sağlama: Değişen proje koşullarına göre hızla adapte olmayı hedefler. Bu metodoloji, yazılım mühendisliği kaynaklarında da geniş bir kabul görmektedir ve farklı kuruluşlar tarafından başarıyla uygulanmaktadır. Birçok modern BT projesinde Agile prensipleri temel alınarak geliştirilmiş metodolojiler yaygın olarak kullanılmaktadır. YOURDON YAPISAL SİSTEM TASARIMI METODOLOJİSİ Daha klasik bir örnek olarak Yourdon Yapısal Sistem Tasarımı Metodolojisi, yapısal sistem geliştirme süreçlerinde sıkça kullanılan bir yaklaşımdır. Bu metodoloji, nesne tabanlı yöntemleri içermemekle birlikte, Çağlayan Modeli'ni temel alır ve yazılım projelerinin aşamalarını sistematik bir şekilde ele alır. Yourdon metodolojisi, sistem tasarımının her aşamasında yapılandırılmış analiz ve tasarım yöntemlerini kullanır. CASE Araçları ile Uyum: Bu metodoloji, birçok CASE (Bilgisayar Destekli Yazılım Mühendisliği) aracını doğrudan destekleyerek, yazılım projelerinin daha verimli bir şekilde yönetilmesini sağlar. Özellikle büyük projelerde, sistemin modüler olarak ele alınmasını teşvik eder. Metodolojiler, yazılım projelerinin başarısında kritik bir rol oynar. Her metodoloji, belirli bir süreç modeli ve belirtim yöntemlerini içerir. Agile gibi esnek yapılar, modern projelerde hızla adapte olma yeteneği sağlarken, Yourdon gibi daha yapılandırılmış yaklaşımlar, süreçlerin düzenli ilerlemesine olanak tanır. Bir metodolojinin geliştirilmesi ve uygulanması, ciddi bir iş gücü ve uzmanlık gerektiren bir süreçtir, ancak bu süreç, yazılım projelerinin daha öngörülebilir ve başarılı olmasına katkıda bulunur. BT PROJELERİNDE METODOLOJİ SEÇİMİ Herhangi bir BT projesine başlamadan önce, mutlaka bir metodoloji belirlenmelidir. Bu metodoloji çalışması, kalite yönetimi ve proje ekipleri ile birlikte yapılmalıdır. Ekiplerin ve kalite yönetiminin dışında geliştirilen bir metodolojinin projede benimsenmesi ve uygulanması zordur. Bu nedenle, ya mevcut metodolojilerden biri benimsenmeli ya da projeye uygun yeni bir metodoloji geliştirilmelidir. Aksi halde, projenin başarısızlığa uğrama olasılığı çok yüksektir. METODOLOJİ GELİŞTİRME VE UYGULAMA ZORLUKLARI Metodolojilerin oluşturulması, teoride kolay gibi görünse de, uygulamada çeşitli zorluklar barındırır. Üretim ekipleri, metodolojileri genellikle fazla bürokratik bulabilirler. Bu durumda, proje yönetimi ve kalite yönetimi kritik roller üstlenmelidir. Zaman zaman zorlamalarla metodolojinin eksiksiz uygulanmasının sağlanması gerekmektedir. Metodolojiye bağlılık, projenin düzenli ve kontrollü bir şekilde ilerlemesini sağlar. İŞ SAHİBİ KURULUŞLAR İÇİN METODOLOJİNİN ÖNEMİ Metodoloji kullanımı, yazılım geliştirme sürecinde sadece ekipler için değil, iş sahibi kuruluşlar açısından da kritik önem taşır. Bilinçli bir iş sahibi, metodolojinin doğru uygulanmasını adım adım denetlemelidir. Aksi takdirde, projenin izlenebilirliği mümkün olmaz ve proje başarısızlığa sürüklenebilir.