PRIMETEKNOLOJI
 AGILE & OPEN JAVA
AGILE Solutions
 
AGILE

Ekibimiz Agile proje planlaması, yönetimi ve teknik pratiklerin uygulanması konusunda Türkiye‘ deki en deneyimli ekiptir. Danışmanlarımız The Guardian, HSBC, Standard&Poors, Freemarkets, Barclays Bank ve McGraw Hill gibi şirketler için yapılan büyük çaplı projelerin tüm aşamalarında çalışmış ve Agile süreçlerle başarılara imza atmıştır. Proje çalışmalarına ek olarak birçok şirkete kısa süreli danışmanlık hizmetleri vermişlerdir. Dünyada Agile konusunda lider danışmanlık firması Thoughtworks bünyesinde Senior Consultant olarak çalışmış Cenk Çivici Agile ile ilgili hizmetlerimizden sorumludur. Prime Teknoloji Agile konusunda ana başlıkları aşağıda belirtilen konularda hizmetler vermektedir.

  • Proje yönetimi, Analiz , Tasarım, Kodlama, Test, Kurulum konularında Agile pratiklerin uygulanması konusunda eğitim ve kılavuzluk hizmetleri.
  • Ekibinize entegre gerçek veya pilot projelerde koçluk hizmetleri.
  • Agile süreçlerin uygulanmasında eksiklerin tespiti, yol haritasının çıkarılması.
  • Agile geliştirme ortamlarının kurulumu ve araçlar konusunda eğitim ve danışmanlık.

Hedef nedir?

Bir yazılım geliştirme projesinin ana hedefi kaliteli, ihtiyaçları karşılayan yazılımı bütçe, zaman gibi kısıtlar dahilinde en hızlı biçimde müşteriye teslim etmektir. Kalite hem iç kaliteyi yani yazılımın hatalardan arındırılmış olmasını, hem de dış kaliteyi yani yazılımın müşteri ihtiyaçlarını karşılamasını ifade eder. Yazılım kullanıcılar içi değer ifade etmeli, onların daha verimli çalışmasını sağlayarak rekabetçi avantaj sağlamalıdır. Yazılım geliştirme süreçleri bu hedefe ulaşabilmek için kullanılan yöntemlerdir. Bir dağın zirvesine ulaşmak hedef ise, tırmanışın nasıl yapılacağı süreçtir. Gereksinim analizi, tasarım , geliştirme, test ve kurulum gibi alanlarla ile ilgili yöntemler bu hedefe ulaşmayı kolaylaştırdığı ölçüde değerlidir.

Hedef bu kadar kolay ifade edilebilmesine rağmen günümüzde yazılım projelerine baktığımızda halen birçok projenin hedefe ulaşamadığını görüyoruz. Standish grubunun dört yılda bir yaptığı ve yüzlerce projeyi kapsayan araştırmaları bunu kanıtlıyor. Son olarak 2004 de yapılan ve 50 bin projeyi kapsayan araştırmaya göre projelerin başarı oranı yüzde 29’ u maalesef geçmiyor.

Ana problemler neler?

  • Projeler bütçelerini aşmalarına rağmen değer ifade eden kaliteli yazılım teslim edemiyor.
  • Projenin ilk aşamalarında yapılan analiz ve tasarım çalışmalarında çok zaman kaybediliyor. Bu çalışmalar detaylarda boğuluyor.
  • Ekip ancak projenin sonraki aşamalarında ritm tutturarak verimli çalışmaya başlayabiliyor.
  • Müşterinin ihtiyaçlarındaki değişiklikleri yazılıma yansıtmak riskleri arttırıyor. Değişikler karşısında mevcut özellikler bozuluyor, hatalar çıkıyor.
  • Problemler ancak sürecin ilerki aşamalarında tespit edilebiliyor ve düzeltilmeleri yüksek maliyetli oluyor.
  • Projenin başlangıcında yapılan proje planı bir süre sonra ya geçerliliğini yitiriyor ya da plana uymak için ekip fazla mesai yapmak zorunda kalıyor.
  • Fazla mesailerle hata riski artıyor ve ekibin motivasyonu azalıyor.
  • Geliştirilen yazılım müşteri tarafından yetersiz bulunup ekibe yeni ve projenin en başında kapsamda belirtilmeyen istekler gelebiliyor.
  • Değişiklikler sonunda yazılımda farkedilmesi zor hatalar ortaya çıkıyor.
  • Projenin başında yapılan tasarım yapılan değişiklikleri kaldıramıyor ve proje sonunda kötü tasarıma sahip, hata bataklığı kodlar ortaya çıkıyor.
  • Değişikliklerin maliyeti proje ilerledikçe artıyor. Değişiklikleri önlemeye çalıştıkça müşteri ile çatışmalar ortaya çıkıyor.
  • Ekip içi bilgi paylaşımı yapılamıyor, projeden ayrılan elemanlar risk haline geliyor. Ekipteki roller etkin bir işbirliği yapmıyor, çekişmeler oluşuyor.

Agile yöntemler bu problemleri bertaraf etmek için pratik, bürokrasiden uzak bir bakış açısı sunuyor ve hedefe ulaşmayı kolaylaştıran yollar öneriyor.

Agile nedir?

Agile bir süreç değildir. Agile manifesto ile özetlenen yazılım geliştirme konusuna özel bir yaklaşım biçimidir. Bu yaklaşımda önemli noktalar şunlardır.

  • Yazılım özellikleri kısa aralıklarla sürekli kaliteli teslimler yapılarak geliştirilir. Bu aralıkların sıklığı haftalarla sınırlıdır. 1-4 hafta arası sürer, tercih mümkün olduğu kadar kısa aralıklardan yanadır. Projenin başından o ana kadar geliştirilen özellikleri ile yazılım her an kullanıma alınmak üzere hazırdır.
  • 1-4 haftalık her aşama sonrası gerçek kullanıcılardan geri beslenim alınır ve bu geri beslenim kullanılarak bir sonrakı adımda yapılacak işler öncelikler uyarınca belirlenir.
  • Ekip sürekli kendi çalışma yöntemlerini gözden geçirir ve daha verimli çalışmak için organize olur.

Agile yöntemlerin tümü aynı yaklaşıma sahiptir. Bu yaklaşım daha detaylı biçimde Agile Manifesto olarak belgelenmiştir. Doksanlı yıllarda bu süreçler ile ilgili çalışmalar yapan ve dünyaca tanınan 17 pratisyen bir araya gelmiş ve projeleri hedefine ulaştıran prensipleri Agile manifesto olarak duyurmuşlardır.

Agile Manifesto

Aşağıdaki maddelerde soldakileri sağda yazılanlardan daha önde tutar.

Bireyler ve iletişim > Kullanılan araçlar ve süreçler
Çalışan yazılım > Kapsamlı Dokümantasyon
Müşteri ile işbirliği > İş sözleşmesi üstünde görüşmeler
Değişime hızlı adapte olabilmek > Bir planı takip etmek

‘den daha önemlidir. Bu sağda yazılanların önemsiz olduğu anlamına gelmez fakat solda yazanlar ilk önceliğe sahiptir. Sağda yazılı olanlar solda yazılı olanlar olmadan değersizdir. Manifestonun ikinci kısmında agile süreçlerin tümünün kabul ettiği prensipler yer alır.

Prensipler

  • İlk önceliğimiz kaliteli yazılımı müşteriye teslim edebilmektir. Bu projenin ilk aşamalarından itibaren sürekli teslimlerle yapılır ve müşterinin yazılımı çok önceden kullanmaya başlayarak değer sağlamasına olanak sağlanır. Günümüzde çevik süreçlerin popülaritesinin başlıca nedenlerden biri , yapılan yatırımların hızlı geri dönüşünün olmasıdır.
  • Değişiklikler projenin ilerki aşamalarında gelse dahi kabul edilir. Amaç müşterinin ihtiyaçlarını karşılayan, onlara yarar sağlayacak, gerçek değer katacak yazılım üretmektir ve ihtiyaçlarda meydana gelen değişiklikler projenin sonraki aşamalarında dahi yazılıma aksettirilmelidir. Test güdümlü geliştirme, kapsamlı otomatik testler, sürekli entegrasyon, basit tasarım, refactoring gibi pratikler sayesinde değişikliklerin getireceği maliyetler minimuma indirilir ve süreç değişikliklere çabuk adapte hale getirilir.
  • Çok kısa aralıklarla yinelemeler yapılır. Bu aralıklar tipik olarak 1-4 hafta arasıdır. Bu sayede sürekli geri beslenim sağlanır ve müşterinin istekleri doğrultusunda yazılım evrimleşerek gelişir.
  • Alan uzmanları , yazılımcılar, testçiler hergün birlikte çalışırlar. Farklı roller arasında duvarlar örülmez. Rol bazlı ekipler yerine yazılım özelliklerine göre ekipler oluşturulur.Testçi , analist, yazılım geliştirici aynı ekibin içinde çalışır ve sürekli iletişim halindedir.
  • Projeler motive bireyler çevresinde kurulur ve ekip üyelerine kendileri ile ilgili alacakları kararlar konusunda güvenilir. Ekip kendi kendine organize olacak yetkiye sahiptir.
  • Yüzyüze iletişim diğer her türlü iletişim yönteminden önde tutulur.
  • Projedeki gelişmenin tek ölçüsü o ana kadar geliştirilmiş özellikler ve çalışan yazılımdır.
  • Çevik süreçler devam ettirilebilir bir hızı sağlamaya çalışır. Planlamaların sağlıklı olması için ekibin iş teslim hızının güvenilir olması gerekir. Örneğin fazla mesailer gibi yöntemlerle ekibin hızını geçiçi olarak arttırmak tercih edilen yöntemler değildir.
  • Teknik açıdan mükemmel , sade çözümler oluşturulmasına özen gösterilir. En iyi tasarım çabuk genişleyebilen tasarımdır. Bu özellik çevikliğe katkıda bulunur.
  • Sadelik anlayışı akla gelen ilk baştan savma çözümü uygulamak yerine anlaşılması ve sonradan değiştirilmesi kolay , maliyeti en düşük ve o anki gereksinimleri karşılayan çözümü kullanmaktır.
  • En etkin çalışan ekipler kendilerini organize edebilen , bu konuda yetkin ekiplerdir. Ekip kendi çalışma yöntemlerini sorgulamakta ve gerekli değişiklikleri yapmakta özgürdür.
  • Ekip kısa sürelerle toplanır, çalışma yöntemlerini gözden geçirir ve daha etkin ve etkili çalışmak için kendini retrospective formatında yapılan toplantılarla gözden geçirir.

Agile süreçler yukardaki manifestoyu kabul eden ve çalışma yöntemlerini Agile bakış açısıyla oluşturmuş süreçlerdir. Başlıça Agile süreçler aşağıdaki şekildedir.

Extreme Programming
Kısa adıyla XP geliştirme ve test pratikleri ile dikkat çeken bir süreçtir. Test Driven Development, Continuous Integration, Test Automation konusundaki uygulamalar XP nin çığır açan pratikleridir. Bu pratiklerin Agile karakterinde olmayan projelerde bile kullanılması yararlar getirecektir.

Scrum
Scrum proje yönetimi, planlama ile ilgili yöntemlere odaklıdır. Mühendislik pratikleri ile ilgili detaylar içermez. Agile kabiliyetleri tam anlamıyla kazanabilmek için XP geliştirme pratikleri gibi pratikler ile desteklenmesi şarttır.

Feature Driven Development
FDD Alan modellemesi, Yazılım özellikleri çevresinde ekiplerin oluşturulması, tanımlı kilometre taşları gibi daha detaylı bir reçete içerir.

Dynamic Systems Development Model
İngiltere kaynaklı bir süreçtir. XP, Scrum gibi süreçlerin işleyişi ile karşılaştırıldığında daha fazla detay içerir ve genelde devlet ihaleleri gibi yazılım projelerinde sıklıkla kullanılır.

Crystal Metholodogies
Xp gibi süreçlere nazaran daha esnektir ve geliştirme pratikleri konusunda kısıtlar koymaz. Fixed Price projeler ile ilgili öneriler içerir.

Agile UP
Rational Unified Process in Agile yöntemlere uygun, perhize girmiş halidir.

Bu süreçlerden hangisini kullanalım sorusunun cevabı hiçbiri olacaktır. Önemli olan Agile manifesto ve Lean prensipleri ile özetlenen bakış açısını kavramaktır. Agile Scrum kullanmaktan veya XP ile geliştirmekten ibaret değildir. Beraberinde sürekli iyileştirme odaklı kültür değişikliği getirir. Bu süreçler ancak başlangıç noktası olabilir. Proje ilerledikçe ekip süreci kendisine adapte etmeli ve süreç sürekli iyileştirilmelidir. Agile süreçlere ait bazı yöntemlerin detaylarına inmeden önce klasik yöntemlerle en büyük farklarını incelemek yerinde olacaktır. Yazılım geliştirme sürecini Analiz, Tasarım, Kodlama, Test, Entegrasyon ve Bakım olarak aşamalara ayırırsak klasik süreçler lineer şekilde ilerler. Her aşama bir önceki aşamanın iş ürünlerini girdi olarak alır ve bir sonraki aşama için farklı bir iş ürünü ortaya koyar. Bir sonraki aşamaya geçilmeden evvel bir önceki aşamanın iş ürünleri gözden geçirilir ve onay sürecinden geçer. Geleneksel yöntemlerde bu süreç aşağıdaki gibi şelale şeklinde ifade edilir.

38 sayfalik AGILE Metodolojilere dokumanini PDF formatinda indirebilirsiniz.