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)
- 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 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 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.
- 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...
Benjamin ile çalışmak kesinlikle harikaydı. Karıma ve bana kredi sürecinde rehberlik ederken son derece açık, titiz ve sabırlıydı. Ayrıca çok zamanında davrandı ve krediyi kapatmadan önce her şeyin hazır olduğundan emin olmak için çok çalıştı.
YanıtlaSilBenjamin, yeni evimizi satın almak için para toplamamıza yardımcı olan bir grup yatırımcı ile çalışan bir kredi görevlisidir.Uygun düşük bir oranla kredi almak istiyorsanız onunla iletişime geçebilirsiniz. 247officedept@gmail.com Veya Whatsapp Sohbet: + 1-989-394-3740