BMH-405 YAZILIM MÜHENDİSLİĞİ Agile (Çevik) Model Dr. Musa ATAŞ Siirt Üniversitesi Bilgisayar Mühendisliği musa.ataş@siirt.edu.tr Ref list: Dr. Yunus Emre SELÇUK ve http://www.yazgelistir.com/makale/proje-yonetimsurecleri
Agile (Çevik) Model
Agile Development (Çevik Geliştirme) Agile Development, yazılım geliştirme süreçleri, 1970 itibariyle kullanılmaya başlanmıştır. 1990 yıllarında kullanımı hız kazanmış ve geçtiğimiz 10 yıl içerisinde Türkiye içinde olmak üzere dünya üzerinde başarılarını kanıtlayarak kullanım oranını arttırmış yazılım geliştirme modelidir. Agile Development, yazılım geliştirme modeli, tekrarlanan yazılım geliştirme modelleri baz alınarak geliştirilmiştir. Sık aralıklarla modül modül yazılım teslimatını ve müşteri memnuniyetini hedef alır.
Agile Development (Çevik Geliştirme) TarihçeUygulanabilir yazılım geliştirme süreci ilk olarak 1974 te Edmonds tarafından ortaya atılmıştır. Bu teoriden sonra bir çok yöntem çevik yazılım geliştirme modeli, zor uygulanan aşırı kuralcı olan waterfall modeline tepki olarak ortaya çıkmıştır. Waterfall zor uygulanan ve kuralcı model olması nedeniyle usta yazılım geliştiriciler tarafından yavaş ve tutarsız olarak nitelendirilmiştir. Bu nitelendirmeden sonra bir çok çevik süreç ortaya çıkmaya başlamıştır. 2001 yılında yazılımın önde gelen isimleri Snowbird Utah ta buluşarak ortada dolaşan metodları ortak bir platforma toplamış ve ismine Agile Development adını vermişlerdir. Aynı kişiler Agile Alliance adını verdikleri bir organizasyon kurarak sistemin gelişmesine destek vermişlerdir. Çevik süreçler arasından öne çıkanlar, Extreme Programming, Clear ve Scrum olarak gösterilebilir. Bu toplantı sonrası bir manifesto yayınlanmıştır. Ayrıca maniftoya bağlı olarak Agile Principles (Çevik Prensipler) adında 12 maddelik bir liste ek olarak sunulmuştur.
Agile Development (Çevik Geliştirme) Manifesto Kişiler ve iletişim süreç ve araçlardan önce gelir. Çalışır durumda olan yazılım detaylı dokümantasyondan önemlidir. Müşteri ile beraber çalışmak sözleşmelerden ve anlaşmalardan önemlidir. Değişikliklere ayak uydurmak bir planı takip etmekten önemlidir. Yukarıda belirtilen manifesto http://www.agilemanifesto.org adresinde orjinal haliyle görülebilir. Altı çizili olanlar diğerlerine göre daha öncelikli olsa da diğerleri de bizim için önem taşımaktadır. Altı çizili olanlar diğerlerini her zaman bastırmalıdır.
Agile Prensipleri En önemli öncelik erken ve sürekli olarak kullanılabilir programlar oluşturmak ve müşteriyi tatmin etmektir. Bu prensip tamamen müşteri memnuniyetine odaklandırmak amacıyla yazılmış gibi düşünülebilir. Fakat ne kadar erken geri dönüş olursa sorunların çözümü ve kalite o kadar artar. Kalitenin artması ve sorunların erken çözümü müşteri memnuniyeti sağlar. Yazılım sektöründe işler büyük çoğunlukla somut olduğundan müşteri elle tutulur, gözle görülür bir ürün beklemektedir. Müşteriye ilk görmek istediği modülü kısa bir süre içerisinde verirseniz memnuniyet artar, geri dönüş ile yazılımda ki eksiklikler giderilir. Bu durumda müşteri isteklerini tam anlamıyla alacağı bir yazılımın sahibi olur.
Agile Prensipleri Yazılımın ne aşamada olduğuna bakılmadan talep edilen değişiklikler olumlu karşılanmalıdır. Çevik süreçler, değişiklikleri müşterinin rekabetteki avantajlarını korumakta kullanırlar. Klasik yazılım geliştirme süreçlerinde yazılımın analizi henüz kodlama başlamadan oluşturulur. Bu analiz ışığında yazılımcılar kodlamaya başlar ve yazılımı bu analiz dışına çıkmadan gerçekleştirirler. Durum böyle olunca müşteri herhangi bir istek yaptığında analiz dışına çıkılamayacağı için istek geri çevrilir. Oysa ki müşterinin bu isteği müşteriye piyasada rekabet üstünlüğü sağlayabilir. Bu durumda istek sözleşme olsa dahi projeye girmelidir. Bu prensipte bu sağlanmış oluyor. Müşteri istediği an proje içerisine istediği özelliği ekleyebilir. Eklenen özellik tüm yazılımın alt yapısını değiştirse bile bu değişiklikler yapılarak yazılım müşteri için en ideal konuma getirilir.
Agile Prensipleri Kısa sürelerde çalışır yazılımlar ortaya koyulmadır (Bu süreler genelde birkaç haftadan, birkaç aya kadar olan sürelerdir). Seçim, zaman diliminin kısa tutulması yönünde olmalıdır.klasik süreçlerde müşteri yazılımı ancak tamamıyla bittiğinde görebilir. Agile development ile müşteri sık sık yazılım görme imkanına sahiptir. Yazılım çalışabilecek en küçük parçalara bölünerek müşteriye 1-4 hafta içerisinde sunulur. Müşteri ve programcılar proje süresince birlikte çalışırlar.müşterinin isteklerini programcının dinlemesi kadar güzel bir şey yoktur. Arada birileri olmadan müşteri ne istediğini işi yapacak olan kişiye birinci ağızdan anlatır. İşin kalitesi bu şekilde daha fazla yükselecektir.
Agile Prensipleri Projelerin, motivasyonu yüksek bireyler tarafından yapılması sağlanmalıdır. İhtiyaç duydukları ortamı ve desteği vermeli ve bitirebileceklerine inanılmalıdır. Proje geliştirmenin ve başarıya ulaştırmanın birinci kurallarından bir tanesi yüksek motivasyon sahibi proje ekibidir. Proje ekibinin dinlenmiş ve sorunlarının çözüşmüş olması gerekmektedir. Motivasyonu yükselten en önemli faktör ise ekip elemanlarına inanmaktır. Ekip elemanlarına bireysel sorumluluk verip özgüvenlerini yenilemek/sağlamlaştırmak iyi bir yol olacaktır.
Agile Prensipleri Bilgi alışverişinde en doğru ve efektif yöntem takım içinde yüz yüze konuşmaktır. Çevik süreçler bilgi alışverişini yüz yüze yapmayı sağlamıştır. Yazılımcılar-Müşteri-Yönetici üçlemesinde herkes yüz yüze görüşür ve bilgiyi deforme etmeden aktarabilirler. Ayrıca konuşurken yüzümüzde oluşan ifadeler önem arz ettiğinden yanlış anlaşılmalar ortadan kalkar ve aradaki bağlar sıkılaşır.
Agile Prensipleri Çalışır durumda olan yazılım ilerlemenin ana göstergesidir. İstediğiniz kadar müşteriye biz çalışıyoruz deyin. Bunun bir anlam ifade etmediğini siz de müşteri de çok iyi biliyor. Proje sahibi her zaman ne alacağını bilmek ister. Bunu sık sık görmek takip etmek ister. En doğal hakkı budur. Müşteriye sık sık çalışır halde bir yazılım göstermek müşterinin içini rahatlattığı gibi ilerleyen zamanlar için yol haritasında çizmiş olarak karşımıza çıkacaktır.
Agile Prensipleri Çevik süreçler etkili yazılım yöntemlerini destekler. Müşteri, programcılar ve kullanıcılar sabit bir tempoda birlikte çalışabilmelidirler. Özellikle yazılımcılar için iyi olan bir maddedir. Fazla mesai kavramı bu madde ile yok edilmiş oluyor. Eğer müşteri 5 saat çalışıyorsa yazılımcı da 5 saat çalışıyor/çalışmalı demektir. Müşteri iletişimi kopardığı anda projenin çevik süreç ile yönetilmesi mümkün olmayacaktır. Çünkü müşteri odaklıdır. Fazla mesainin yok olması ile birlikte motivasyon ve performans yükselir.
Agile Prensipleri Devamlı teknik mükemmelliğe özen gösterilmesi ve iyi tasarım çevikliği kuvvetlendirir. Çevik yazılım süreçleri ile yönetilen projelerde kalite beklentisi en yüksek noktada olacaktır. Yazılımlar mevcut veya temin edilecek en iyi araç ve yazılımcılar ile birlikte geliştirilir. Yazılım kalitesinin artması için ne gerekiyorsa yapılır. Yazılım tasarımı sürekli revize edilerek en iyi sonuca ulaşması sağlanır. Çevik sürekler için dinamik sistemler demek bu prensiple mümkün oluyor.
Agile Prensipleri Sadelik-Basitlik esastır. Yapılan yazılımların mümkün olduğunca basit olması gerekmektedir. Kalite beklentisinin yüksek olması sebebiyle karmaşanın da önüne geçilmek istenmektedir. Mümkün olduğunca basit arayüzlerle (tasarımsal veya kullanım kolaylığı) yazılımın kullanılabilirliği sağlanmalıdır. Ayrıca yazılan kodların temizliği ve aynı standartlarda olmasıda bu sadeliğe girmektedir. Bu yüzden proje başlanmadan önce kod yazım standartları belirlemek en doğru seçenek olacaktır.
Agile Prensipleri En iyi mimariler, gereksinimler ve tasarımlar kendi kendine organize olabilen takımlardan çıkar. Çevik yazılım geliştiren takımlar kendi başlarına organize olma hakkına ve yetisine sahip takımlardır. Takımlar şirket büroksisini umursamadan kendi iş planlarını tasarlar ve uygularlar. İş paylaşımlarını kendi aralarında eşit bir şekilde yaparlar. Bireysel aralarında sıkça konuşur ve bilgi alışverişinde bulunurlar.
Agile Prensipleri Belirli zaman dilimlerinde takım daha nasıl efektif olabileceği konusunda kendini sorgular ve edindiği bilgiler ile çalışma tarzına adapte eder. Daha önce belirttiğimiz gibi çevik takımlarda bilgi alışverişi ve kendi başına organize olabilme çok önemlidir. Takım üyeleri sıkça bir araya gelerek daha önce karşılaştıkları sorunları ortaya koyarlar ve tartışırlar. Fikir alışverişinde bulunup çalışma tarzlarını yargılayıp doğru olanı bulurlar.
Agile Prensipleri Agile Development, bir arada çalışan ekipler için uygun olan bir yapıdır. Tek başına çalışan bir yazılımcı için etkili olacaktır ancak freelance çalışan bir ekipte etkili olacağını söylemek pek mümkün değildir. Bu gibi durumlarda şelale veya diğer modelleri benimsemek daha yerinde olacaktır. Agile Development mimarları da bu konuda aynı şeyi söylemekten çekinmiyorlar.