Günümüzde, akla gelebilecek her türlü iş
alanında yazılım kullanılmayan iş merkezlerinin başarılı olması ve devamlılığı
pek mümkün görünmemektedir. Örneğin, bankacılık sektöründe işe uygun bir
yazılım kullanmayan bir bankayı düşünmek bile olası değildir. Sadece
bankacılıkta değil telekomünikasyon, lojistik gibi hemen hemen her sektörde
yazılım artık “olmazsa olmaz” bir bileşen haline gelmiştir. Yazılım
mühendisliği de işte tam bu noktada devreye girer. Aksi halde, karmaşık, büyük,
entegrasyon içeren yazılım projelerinin başarıya ulaşması mümkün
değildir.
Bir bilgisayar mühendisi olarak sizlere yazılım mühendisliği nedir, süreçleri nelerdir, güncel yazılım geliştirme süreçleri nasıldır bunları açıklamaya çalışacağım.
Süreç, olguların ya da olayların, belli
bir taslağa uygun ve belli bir sonuca varacak biçimde düzenlenmesidir. Yazılım süreci ise bir yazılım ürününü üretmeyi sağlayan birbiriyle tutarlı aktivite grubudur.Daha açıklayıcı olacak olursam yazılım süreci bizim yazılım üretme yolumuzdur.
Yazılım geliştirme süreci için pek çok aktivite vardır. Ama tüm süreçler için ortak olanlar:
- Yazılım Belirtimi (Software Specification)
- Yazılım Tasarım ve Geçekleştirimi (Software Design and Implementation)
- Yazılım Geçerleme (Software Validation)
- Yazılım Gelişimi (Software Evolution)
-Yazılım Belirtimi sürecinin fazları:
- Yapılabilirlik çalışması (Günümüz teknolojisine uygun mu ?)
- Gereksinim ortaya çıkarma ve çözümleme (Sistem modellerini geliştirme)
- Gereksinim belirtimi (Kullanıcı isteklerini belgeleme)
- Gereksinim geçerleme (Tamlık ve tutarlılığı kontrol etme)
-Yazılım Tasarım ve Geçekleştirimi süreci yazılım tasarımı (yazılım yapısını tasarlama) ve gerçekleştirim (tasarlanan yapıyı çalıştırılabilir programa çevirme) aşamalarından oluşur. Sistem belirtimini çalıştırılabilir sisteme çevirme sürecidir.
-Yazılım Geçerleme süreci ise gerçekleme (verification)
ve geçerleme (validation), sistemin belirtimlerine uyduğunu
ve sistem müşterisinin gereksinimlerini karşıladığını göstermek içindir.
Aşamaları ise:
- Kontrol etme (Checking)
- Gözden geçirme (Review)
- Sistemi test etme (System testing)
-Yazılım Gelişimi sürecinde işle ilgili şartların değiştikçe gereksinimler de değiştiği için işi destekleyen yazılımın da gelişmesi ve değişmesi işlemi gerçekleştirilir.
Yazılım süreç modelleri kontrol, tutarlılık ve düzen sağlar. Karmaşıklığı azaltıp kaosu önler.
* Süreç: Belirli bir amaç için gerçekleştirilen bir grup aktivite
* Aktivite: Belirli bir amacı gerçekleştirmek için bir takıma ya da proje çalışanına atanan bir görev
Genel Yazılım Süreç Modelleri
> Kodla ve Düzelt (Code and Fix) :
Analiz(Çözümleme) süreci sonrası kodlama, kodlama sonrası da düzeltme aşamaları getirilerek oluşturulan modeldir.
> Çağlayan Modeli (Waterfall Model):
-
Sonraki faz bir önceki faz tamamlanmadan başlayamaz.
- Her fazın sonucu bir ya da birden fazla
onaylanan (imzalanan) belgedir.
- Gerektiğinde geliştirme aktivitelerinde iterasyonlar (tekrarlamalar) olabilir.
> Evrimsel Geliştirme (Evolutionary Development):
- Anahat gereksinimleri
ile
başlangıç sistemi
geliştirilir.
- Müşteri geribildirimi ile sistem pek çok versiyonla yavaş yavaş geliştirilir.
- Belirtim, geliştirme ve geçerleme aktiviteleri koşut zamanlı yapılır.
> Prototipleme (Prototyping):
- Gereksinim
tanımlama
fazında
hızlıca
yapılan
kısmi gerçekleştirme.
- Gereksinimler netleştikçe prototipi düzeltme.
- Müşteri memnun olana kadar düzeltmelere devam etme.
> Spiral Model:
- Süreç arka arkaya
devam eden sıralı aktiviteler şeklinde
gösterilmek
yerine spira l şekilde gösterilir.
- Spiral üzerindeki her bir
halka
bir
fazı
gösterir.
- Belirtim, tasarım gibi kesin fazlar
yoktur.
- Spiral' deki halkalar neye ihtiyaç
varsa onu gerçekleştirmek
için seçilir.
- Süreç boyunca risklerin değerlendirilmesi ve çözümü açık olarak yapılır.
> Artımlı
Geliştirme (Incremental Development):
- Sistemi tek bir parka
olarak
en
sonda
teslim etmektense, sistem, her biri sistemin ayrı bir istenen işlevini yerine
getirecek
artımlara (increments) bölünür.
- Kullanıcı gereksinimleri önceliklendirilir, ve yüksek
öncelikli gereksinimler ilk artımlar
arasında
gerçekleştirilir.
- Bir artımın
geliştirilmesine
geçilince
diğer artımlar için gereksinim gelişimi devam etse
bile
o artım için olan gereksinimler dondurulur.
> Çevik Model (Agile Method) :
Çevik modelleme (Agile), yazılım sistemlerini etkili ve
verimli bir şekilde modellemeye ve dokümantasyonunu yapmaya yönelik
pratiğe dayalı yöntemlere verilen genel addır. Yazılım geliştirme
amacıyla üretilen bu modelleme biçimi, kapsadığı değerler, prensipler ve
pratikler sayesinde geleneksel modellemelere metotlarına göre
yazılımlara daha esnek ve kullanışlı biçimde uygulanabilir.
Aslında Agile bir proje yönetim biçimidir, proje geliştirirken direkt olarak agile kullanılmaz, bunun kolları (yani frameworkleri) kullanılır.
Agile ile hedeflenen asıl şey ise süreçleri etkin kullanarak hızlandırmak ve gerektiğinde bunları dokümante etmektir.
Agile Proje Yönetimi dediğimizde bilmemiz gereken;
değişime açık olunması, takım içi iletişimin üst düzeyde olması, hızlı
ve sürekli ürün teslimi, test odaklı anlayış, basit ve gerçekçi bir
planlama olmalıdır.
Avantajları:
- Ekip ruhu kazandırır
- Planlama ve yürütme bir arada olduğu için sürdürülebilir kalite sağlar.
- Ayrıntılı plan süreçleri yerine iteratif planlar (tekrar eden süreçler) uygulanır.
- Müşteri ihtiyaçlarına uygunluk önemlidir, sık sık ürün çıktısı
verilir ve müşteriden gelen geri bildirimlerle ihtiyaca uygun, doğru
ürün çıkarılır.
Dezavantajları:
- Kurumsal bir yapıda uygulamak için ciddi anlamda zorlanırsınız
- Hedefler kısa vadeli olduğu için ekip üzerinde sonuç baskısı oluşabilir
- Kısa süreli ürün teslimi sonucunda gelen geri bildirimlerle çalışma sürelerinin artması muhtemeldir
- Dokümantasyon konusundaki bilinen birçok şeyin, tabiri caizse, “gereksiz” kılınması durumu vardır.
Çevik yazılım sürecini bizzat kendim deneyimleyerek gördüm ve şimdi sizlerle ekip arkadaşımla yaptığımız projeden ve tecrübelerimizden bahsedeceğim.
Öncelikle ilk toplantımızda (meeting) proje konumuzu, hangi dilde geliştireceğimize karar kıldık. Projemiz olan Özel Organizasyonlar (doğum günü, yılbaşı, düğün vb.) için müşterilerin rezervasyon, paket seçme, ekleme gibi aktiviteleri yerine getirebileceği bir uygulamayı Visiual Studio'da C# dilinde geliştirmeye karar verdik. Veri tabanı geliştirmesi için de MsSql'i tercih ettik.
İkinci toplantımızda yazılımımız geliştirmek için yazılım mühendisliğinin süreçlerinden olan Agile metodunu kullanmayı uygun gördük. Bunu kullanmak için de Visual Stduio Online / Team Foundation Server (TFS)'yi seçtik. İlk iş olarak hesap açıp, takım lideri olarak ben ekip arkadaşımı projeye dahil ettim.
Toplantımızın üçüncüsünde ise günlük olarak neler yapmamız gerektiğini belirledik. Planlar yapıp, haftalık hedefler koyduk. Tüm bunları da TFS'de biriktirim (backlog) olarak oluşturduk. Ve hangi işi kimin yapacağının atamasını gerçekleştirdik.
Backlog:
Board:
Görev Ataması:
Son toplantımızda artık kodlama işlemimiz bitmişti ve yavaş yavaş TFS'de kodlarımıza yer vermeye başlamıştık.
Code:
Build:
Evet arkadaşlar bu yazımda sizlere yazılım mühendisliğini, çevik yazılımı ve kendi deneyimlerimi aktardım umarım sizlere yararlı olabilmişimdir. Keyifli günler...