YAZILIM GELİŞTİRME VE SÜREÇ MODELLERİ

Berfin Kaçar
8 min readMar 10, 2019

--

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

Yazılımla ilgili herhangi bir projeyi geliştirme sadece kodlamadan oluşmamaktadır. Öncelikle bir yazılım geliştirme yaşam döngüsü bulunmaktadır. Yazılımın hem üretim hem de kullanım süresi boyunca geçirdiği tüm aşamalar yazılım geliştirme yaşam döngüsü olarak tanımlanır.

Başarılı bit yazılım geliştirme süreci için her aşamanın ayrıntılı bir şekilde planlanması, süreçlerin sağlıklı bir şekilde yönetilmesi sağlanmalıdır. Yazılım projelerin temel adımları aşağıdaki gibidir:

ü Planlama

ü Analiz

ü Tasarım

ü Gerçekleştirme

ü Teslim ve Bakım

1.Planlama

Yazılım yaşam döngüsünün ilk aşamasıdır. Projeye başlanmadan önce kullanıcı istekleri dikkate alınarak proje ihtiyaçları belirlenir. Proje süreci boyunca izlenecek yol ve yöntemler ile, donanım maliyeti, personel iş bölümü, proje yöneticisinin ön görü ve seçimleri, proje adımlarının sürece dağıtılması gibi unsurlar değerlendirilir.

2.Analiz

Sistem ihtiyaç ve işlevlerinin ayrıntılı bir şekilde çıkarıldığı ve belirli kurallar çerçevesinde kağıda döküldüğü aşamasıdır. Geliştirilecek olan yazılım ürününden tam olarak ne istendiği net bir şekilde belirlenir.

3.Tasarım

Belirlenen istekler çerçevesinde yazılım sisteminin temel yapısının oluşturulduğu aşamadır. Tasarım safhası boyunca 2 tür tasarımdan bahsedilebilir:

a)Mantıksal Tasarım

Önerilen sistemin yapısı anlatılır.

b)Fiziksel Tasarım

Yazılımı içeren bileşenler ve bunların ayrıntıları anlatılır.

4.Gerçekleştirme

Kodlama, test etme ve kurulumun yapıldığı aşamadır:

a)Kodlama

Oluşturulan yazılım ürünün programlama aşamasıdır. Basit ,okunabilir ve bakımı kolay olan kodlama tekniğiyle programlama yapılmalıdır.

b)Test Etme

Önceden belirlenen ihtiyaçları karşılayıp karşılamadığı ,doğru çıktı üretip üretmediği testleri yapılarak sistemdeki açıklıklar kapatılmalıdır.

5.Teslim ve Bakım

Tüm test aşamaları tamamlandıktan sonra ürün müşteriye teslim edilir. Yazılım ürünü kullanılmaya başlandıktan sonra bakım aşaması da başlar. Ürün kullanıldıktan sonra yazılımın desteklenip desteklenmemesine göre hata giderilir ya da yeni eklentiler yapılır.

YAZILIM YAŞAM DÖNGÜSÜNÜN TEMEL ADIMLARI

Yazılım yaşam döngüsün temel adımları çekirdek süreçler olarak adlandırılır. Bu süreçlerin gerçekleştirilmesi amacıyla Yazılım Belirtim Yöntemleri ve Yazılım Süreç Modelleri kullanılır.

Yazılım Belirtim Yöntemleri

Bir çekirdek sürece ilişkin fonksiyonları yerine getirmek amacıyla kullanılan yöntemlerdir.

1.Süreç Akışı İçin Kullanılan Belirtim Yöntemleri

Süreçler arası ilişkilerin ve iletişimin gösterildiği yöntemlerdir.

(Veri Akış Şeması,Yapısal Şemalar,Nesne-Sınıf Şemaları)

2.Süreç Tanımlama Yöntemleri

Süreçlerin iç işleyişini göstermek için kullanılan yöntemlerdir

(Düz Metin,Algoritma,Karar Tabloları,Karar Ağaçları,Anlatım Dili)

3.Veri Tanımlama Yöntemleri

Süreçler tarafından kullanılan verilerin tanımlanması için kullanılan yöntemlerdir.

(Nesne İlişkisi Modeli,Veri Taban Tabloları,Veri Sözlüğü)

YAZILIM SÜREÇ MODELLERİ

Yazılım yaşam döngüsünde belirtilen süreçlerin geliştirme aşamasında hangi düzen ya da sırada,nasıl uygulanacağını tanımlayan modellerdir.Süreçlere ilişkin ayrıntılara ya da süreçler arası ilişkilerle ilgilenmezler.

Yazılım süreç modelleri 9 tanedir :

ü Kodla ve Düzelt Model Yaşam Döngü Modelleri

ü Çağlayan Yaşam Döngü Modeli

ü V Süreç Modeli

ü Evrimsel Geliştirme Süreç Modeli

ü Prototipleme Yaşam Döngü Model

ü Spiral Model

ü Formal Sistem Geliştirme Modeli

ü Yeniden Kullanıma Yönelik Geliştirme Modeli

ü Artırımsal Geliştirme Süreç Modeli

ü

1.Kodla Ve Düzelt Yaşam Döngü Modeli

Genellikle resmi olmayan bir ürün fikriyle başlar ve program ürün hazır olana kadar ya da gerekli zaman bitene kadar kodlama yapılarak devam edilir.

Avantajları

ü Herhangi bir planlamaya ihtiyaç duyulmaz

ü Çok küçük projelerde ya da kısa ömürlü prototiplerde uygulanabilir.

ü Program aşamaları çabuk geçilir.

ü Uzman görüşüne ihtiyaç düşüktür, herkes bu modeli kullanabilir.

Dezavantajları

ü Kontrollü değildir.

ü Kaynak planlaması yoktur.

ü Bitiş süresi belli değildir.

ü Hataların bulunması ve doğrulanması zordur.

ü Kodları düzeltmek maliyetli olabilir.

ü Kodlar kullanıcının ihtiyacını karşılamayabilir.

ü Kodlar sonradan değiştirmek için planlanmadığından esnek değildir ve değiştirilmesi zordur.

2.Çağlayan Modeli

Şelale yönteminde yazılım geliştirme süreci analiz, tasarım, kodlama, test, sürüm ve bakım gibi safhalardan oluşur.

Avantajları

ü Kullanılması ve anlaşılması basittir.

ü Yönetimi kolaydır.

ü Projenin safhaları ayrı ayrı olduğundan iş bölümü ve iş planı projenin en başında net bir şekilde bellidir. Bu durum projenin yönetimini de oldukça kolay hale getirir.

ü Çok küçük ve gereksinimleri çok iyi anlaşılmış projelerde iyi çalışır.

Dezavantajları

ü Karmaşık ve nesne yönelimli projeler için uygun değildir.

ü Devam eden ve uzun projeler için zayıftır.

ü Projede oluşabilecek her türlü değişime elverişsiz, katı bir modeldir. Yapılan her değişiklik maliyeti büyük oranda artırır.

ü Müşteri memnuniyetini sağlamak çok zordur ; çünkü gelişim ve değişime açık bir model değildir

ü Model safhalardan oluştuğu için ürün son safhada tamamlanır, gereksinimlerinin iyi tanımlanmadığı ,müşterinin ne istediğinin anlaşılmadığı bir projede bu durum proje bittikten sonra projenin iptal edilmesine ve başka gerginliklere sebep olmaktadır.

3.V Modeli

Şelale modelinin gelişmiş hali olarak düşünülebilecek bir yazılım geliştirme süreci sunar .Doğrusal bir yönde ilerlemek yerine , süreç adımları kodlama evresinden sonra yukarıya doğru eğim alarak tipik V şeklini oluşturur.

Avantajları

ü Doğrulama ve onaylama planları erken aşamalarda vurgulanır.

ü Doğrulama ve onaylama sadece son üründe değil tüm teslim edilebilir ürünlerde uygulanır.

ü Proje yönetimi tarafından takibi kolaydır.

ü Kullanımı kolaydır.

Dezavantajları

ü Aynı zamanda gerçekleştirilecek olaylara kolay imkan tanımaz.

ü Fazlar arasında tekrarlamaları kullanılmaz.

ü Risk çözümleme ile ilgili aktiviteleri içermez.

ü Yazılım da diğer sitemler gibi zamanla evrimleşir.

ü Geliştirme devam ettikçe iş ve ürün gereksinimleri de değişkenlik gösterebilir.

ü Son ürüne ulaşma düz bir çizgi ile ifade edilmez.

4.Evrimsel Geliştirme Süreç Modeli

İlk tam ölçekli modeldir. Coğrafik olarak geniş alana yayılmış, çok birimli organizasyonlarda kullanılmak üzere geliştirilecek projeler için önerilir. Modelin başarısı ilk evrimin başarısına bağımlıdır.

Avantajları

ü Kullanıcıların kendi gereksinimlerini daha iyi anlamlarını sağlar.

ü Sürekli değerlendirme erken aşamalardaki geliştirme risklerini azaltır.

ü Hatalar azalır.

Dezavantajları

ü Sürecin görünürlüğü azdır. (Düzenli teslim edilebilir ürün yoktur.)

ü Sistemler sıklıkla iyi yapılandırılmaz. (Sürekli değişiklik yazılımın yapısına zarar verir.

ü Bakımı zordur.

ü Yazılımın gereksinimini yenilemek gerekebilir.

5.Prototipleme

Bir yazılım sisteminin ilk sürümüdür. Bir problem ve olası çözümleri hakkında daha fazla bilgi edinmek,

Tasarım seçeneklerini denemek ve temel kavramları göstermek için prototip modeller kullanılmaktadır. Burada amaç; kullanıcının gereksinimlerini ortaya çıkarmaktır. Ana fonksiyonları gösterecek olan bir ürün geliştirilir, burada detaylar yoktur, sadece anahtar fonksiyonlar vardır.

Avantajları

ü Kullanıcı sistem gereksinimlerini görebilir.

ü Karmaşa ve yanlış anlaşılmaları engeller.

ü Yeni ve beklenmeyen gereksinimler netleştirilebilir.

ü Risk kontrolü sağlanır.

Dezavantajları

ü Prototip hedefleri net değilse kod hackleme ya da jenga başlar.

ü Düzeltme aşaması atlanır ise düşük performansa yol açar.

ü Müşteri prototipten de son ürün gibi görünüm ve etki bekler.

6.Spiral Model

Sarmal modeli aynı safhalara geri dönülmesinin bir zorunluluk olduğunu vurgular, şelale modelinde yok sayılan riskleri göz önünde bulundurur .Proje çevrimlere ayrılır ve her bir çevrimin riskleri ayrı ayrı ele alınır .Çağdaş modellere son derece yakındır.

Avantajları

ü -Kullanıcılar sistemi erken görebilirler.

ü -Geliştirmeyi küçük parçalara böler. En riskli kısımlar önce gerçekleştirilir.

ü -Pek çok yazılım modelini içinde bulundurur.

ü -Riske duyarlı yaklaşımı potansiyel zorlukları engeller.

ü -Hataları erken gidermeye odaklanır.

ü -Yazılım-donanım sistemi geliştirmek için bir çerçeve sağlar.

Dezavantajları

ü Küçük ve düşük riskli projeler için pahalı bir yöntemdir.

ü Karmaşıktır.

ü Ara adımların fazlalığı nedeniyle çok fazla dokümantasyon gerektirir.

7.Formal Sistem Geliştirme Modeli

Yazılım tasarım ve gerçekleştirmesiyle ilgili matematiksel bir tekniktir .Bu modelin temelinde karmaşık sistemleri geliştirme ve program geliştirmeye destek yatar .Kullanıcı sistemi kullanmaya başladığında karşısına çıkan belirtim hatalarını minimize eder.

Avantajları

ü Yazılımdaki belirsizlikleri, eksiklikleri ve uyumsuzlukları saptar.

ü Hatasız yazılım geliştirme imkanları sunar.

ü Karmaşık değildir.

Dezavantajları

ü Çok zaman alan ve pahalı bir yöntemdir.

ü Kullanımı esnasında teknik olmayan personelle iletişim mekanizması zor işler.

ü Sadece birkaç geliştirici bu modelin uygulamasıyla ilgili temel bilgilere sahip olması için yaygın eğitim gerektirir.

8.Yeniden Kullanıma Yönelik Geliştirme

Organizasyon tarafından daha önce hazırlanmış veya dışarıdan temin edilmiş yazılımların kullanılması ile geliştirme yapılması son yıllarda popülaritesi artan bir yaklaşımdır .Organizasyonların olgunlukları artıkça , bu tür uygulamalar yapabilmek için alt yapı kurulmuş olmaktadır.

Avantajları

ü Kaynak kontrolü mümkündür.

ü Maliyet denetimi yapmak mümkündür.

ü Kısa sürede yazılım geliştirilebilir.

ü Basit ve anlaşılırdır.

ü Önceden oluşturulmuş sınıflar tekrardan kullanılabilir.

Dezavantajları

ü Gereksinimleri anlamak güçtür.

ü Pahalıdır.

ü Uzmanlık gerektirir.

ü Başarı garantisi yoktur.

9.Artırımsal Geliştirme Süreç Modeli

Artırımsal geliştirme süreç modeli, çağlayan yaşam döngü modeli ile evrimsel geliştirme süreç modelini temel almaktadır. Bir yazılım ürünü geliştirilirken sürekli olarak değişen müşteri gereksinimlerini karşılayan ve ortaya çıkan kaçınılmaz hataların zamanında düzeltilmesini sağlayan bir süreç modelidir.

Avantajları

ü Sistem için gerekli olan gereksinimler müşterilerle belirlenir.

ü Gereksinimlerin önemine göre teslim edilecek artırımlar belirlenir.

ü Öncelikle en önemli gereksinimleri karşılayan çekirdek bir sistem geliştirilir.

ü Tüm projenin başarısız olma riskini azaltır.

ü En önemli sistem özellikleri daha fazla sınanma (test edilme ) imkanı bulmuş olur.

Dezavantajları

ü Yapılan işlerden edinilecek sonuçlar belli değildir.

ü Geliştirilen yazılımlar genellikle sınırlı sayıda kullanılır ve kullanımı bittikten sonra işe yaramaz hale gelir ve atılır.

ü Model -zaman fiyat kestirimi belli olmadığı için sabit fiyat sözleşmelerinde uygun değildir.

ÇEVİK YAZILIM GELİŞTİRME METODOLOJİLERİ

Çevik Yazılım Geliştirme

Yazılım geliştirme süreci sıkıntılı ve uzun süren bir dönemdir. Yazılım geliştirme projeleri yönetimsel eksikliklerden dolayı ancak kısmi bir başarı memnuniyet ile tamamlanabilmektedir. Yazılım sektöründe , yazılım sürümlerinin zamanında ortaya çıkarılmaması , değişiklik isteklerine çabuk cevap verilmemesi ,yazılım hatalarının geç fark edilmesi ve zaman içinde gelen isteklere göre sistemin kendi yapısını geliştirememesi gibi çeşitli sorunlar ortaya çıkmıştır.

Bu sorunların aşılmasına yönelik yapılan çalışmalar sonucu ,1990 ‘lı yılların sonlarına doğru çevik “çevik “olarak adlandırılan metotlar ortaya çıkmıştır .Çevik yazılım geliştirme metotları ; piyasaya çabuk ürün çıkarabilme , değişen isteklere hızlı yanıt verme ve en kısa sürede bir yazılım ürünün müşteri hizmetine sunmayı amaçlamaktadır .Çevik yazılım geliştirme metotları, verimliliği yüksek ,esnek, hata oranı düşük, hızlı ve ucuz çözümler sunmaktadır .Çevik yazılım geliştirme metotları ,kendi içerisinde özü aynı fakat pratikleri farklılaşan çeşitli metodolojilere ayrılmaktadır.

Çevik Yazılım Geliştirme Manifestosu

Kent Beck ve değişik çevik metotların temsilcileri olan 16 arkadaş bir araya gelerek ortak yanlarını ortaya koyan bir çevik manifestosu yayınladılar. Bu manifestoda ;

ü Süreçler ve Araçlar yerine Bireyler ve Etkileşimler,

ü Kapsamlı Belgeler yerine Çalışan Yazılım,

ü Sözleşme Görüşmeler yerine Müşteri İlişkileri,

ü Plan İzleme yerine Değişikliğe Açıklığın,

daha önemli ve öncelikli olduğu belirtilmektedir.

Çevik Yazılım Geliştirme Prensipleri

Çevik yazılım geliştirme manifestosunun altında yatan temel prensipler şunlardır;

ü Müşteriye hızlı ve sürekli olarak kullanılabilir yazılım teslimatı yapmaktır.

ü Kodlamanın ilerleyen safhalarında bile gereksinim değişiklikleri kabul edilir, esnektir.

ü Mümkün olduğunca kısa zaman aralıklarında çalışan, kaliteli yazılım teslimatı yapılır.

ü Analistler, uzmanlar, yazılımcılar, tesisatçılar vs. tüm ekip elamanları birebir işetişim halinde birlikte çalışırlar.

ü İyi projeler motivasyonu yüksek kişiler etrafında kurulabilir.

ü Ekip içerisinde kaliteli bilgi akışı için yüz yüze iletişim önemlidir.

ü İlerlemenin birincil ölçüsü çalışan bir yazılımdır.

ü Çevik süreçler, sürdürülebilir geliştirmeyi destekler.

ü Sağlam teknik alt yapı ve tasarım, çevikliği artırır.

ü Basitlik önemlidir.

ü En iyi mimariler ve tasarımlar kendini organize edebilen ekipler tarafından yaratılır.

ü Düzenli aralıklarla ekip kendi yöntemlerini gözden geçirir ve verimliliğini artırmak için gerekli iyileştirmeleri yapar.

Yazılım Projelerinde Yaygın Uygulanan Çevik Metodolojiler

ü Extreme Programming (XP)

ü Rational Unified Process

ü Feature-Driven Development (FDD)

ü Test-Driven Development (TDD)

ü LEAN Development

ü Dynamic System Development Methodology (DSDM)

ü Microsoft Solution Framework (MSF)

ü SCRUM

SCRUM

Çevik yazılım yöntemi kendi içerisinde özü aynı, fakat süreçlerinde farklılaşan alt kollara ayrılmaktadır Bu popüler kollardan bir tanesi de SCRUM’ dır. SCRUM, kelime olarak Rugby oyununda oluşturulan küçük ekiplere verilen isimdir. Bu yöntem 1990’ lı yılların ortalarında Jeff Sutjerland ve Ken Schawaber tarafından oluşturulmuş ve günümüze sürekli bir gelişme halinde gelmiştir.

SCRUM, gereksinimleri açıkça belli olmayan, değişime açık, karmaşık yazılım projelerin yönetimi için uygulanması en ideal yöntemdir. İhtiyaca yönelik, esnek, bir geliştirme sürecidir. Düzenli geri bildirim ve kısa dönemli planlamalarla hedefe ulaşmayı sağlıyor. En önemli özelliği ise müşteri ve geliştirici doğrudan temas halinde olmadıkları için yazılım geliştirici baskı altında olmaz, yapması gereken işe yoğunlaşır. Başarısı kanıtlanmış bir yazılım geliştirme yöntemi olan Microsoft, Google, Facebook gibi şirketler tarafından kullanılmaktadır.

SCRUM’ da 3 temel kavram vardır:

1. Roller

2. Toplantılar

3. Bileşenler/ Araçlar

KAYNAKÇA

https://medium.com/@denizkilinc/yaz%C4%B1l%C4%B1m-ya%C5%9Fam-d%C3%B6ng%C3%BCs%C3%BC-temel-a%C5%9Famalar%C4%B1-software-development-life-cycle-core-processes-197a4b503696

https://www.codex.com.tr/yazilim-gelistirme-modelleri

https://fikirjeneratoru.com/yazilim-proje-yonetimi-yontemleri/

http://www.acm-software.com/scrum/

Yazılım Mühendisliğinde Modern Yaklaşımlar,Dr. Fatih Yücalar,Dr. Emin Borandağ,2018

Berfin KAÇAR 180601007

--

--