Blog

Bir gün herkes “agile” olacak!

Son yıllarda yazılım tasarım ile uğraşan çoğu kişi “agile” geliştirme yöntembilimini bizzat uygulamasa ve uygulayan bir ekibe tanıklık etmese bile mutlaka duyup incelemiştir. Peki, gerçekte tam olarak nedir “agile” yöntem?

  • Az kaynak ile kısa zamanda geleneksel yollara göre daha çok çıktı üretmemizi mi sağlar?
  • Her projede “agile” uygulayabilir miyiz?
  • Ölçütleri nedir?
  • Artı yarar sağladığı durumlar nelerdir?

İngilizce bir sözcük olan “agile”’ın Türkçe karşılığı; atik, çevik, hızlı sıfatlarıyla ifade ediliyor. Örneğin leopar gibi atik…

Aslında, anlatılmak istenen, devinim yeteneği yüksek, hızlı, esnek ve kolay hareket eden… Sözcüğün tam kökeni ise, Latince “agilis” kelimesinde geliyor. Ve hemen hemen her dile girmiştir.

“Agilis” enerjik, hızlı, etkin anlamına gelir.

“Agile” terim olarak kullanıldığında; değişim yetisi yüksek, süreçleri yalınlaştırıp, içlerinde boğulmadan yarar sağlamayı amaçlayan, basitleştirmeyi hedefleyen ve hızlı uyum sağlayan bir yöntemi anlatır.

“Agile yazılım tasarım” ise, müşterilerin istekleri doğrultusunda biçimlenen, genel olarak yinelenen (iterative), artımlı (incremental) ve zamana bağlı teslim edilen çalışan yazılımların kavramsal çatısı olarak tanımlanabilir. Yani, “agile yazılım tasarım” ana hatlarıyla, yinelenen ve artımlı birçok yazılım geliştirme yönteminin birleşimi olarak görülebilir. Yinelenenden kasıt, takımların sabit ve kısa süreli zaman aralıklarında, belirlenen noktalarda teslimat yaparak tüm bir proje yaşam döngüsünü tamamlamalarıdır. Her bir yineleme evresinde ekipler, çalışan ve müşteride kullanılabilecek bir altküme ya da bir özellik tamamlamaktadır.

 

Diğer önemli bir kavram, “agile”in özellik tabanlı ve pazar ya da kullanıcı değeri tarafından yönlendirilmeye esnek olmasıdır. “Adaptif planlama” ise “agile’a özdür. Burada asıl amaç, değişimlere hızla ve kolayca uyum sağlamaktır. “Agile”n değeri ve pratiği, değişen pazar gereksinimlerine esnek ve çabuk tepki verme ile ortaya çıkar.

Şubat 2001’de 17 yazılım geliştirmeci tarafından yayınlanan “Agile manifesto”da belirlenen yaklaşım şöyle özetlenebilir:

  • Süreçler ve araçlar yerine bireyler ve etkileşim
  • Kapsamlı/ayrıntılı belgeleme yerine çalışan yazılım
  • Kontrat görüşmeleri/bağlılığı yerine alıcı/müşterilerin yakın işbirliği/girdisi
  • Sabit bir plan izlemeye çalışmak yerine değişime hızlı tepki verebilmek

Manifestoda “agile yazılım tasarımının” 12 ilkesi şöyle belirtilmiştir:

1. Kullanışlı ve çalışan yazılımın hızlı teslimi ile müşteri memnuniyetinin sağlanması
2. Değişen pazar gereksinimlerini geliştirmenin, ileri safhalarında bile karşılayıp uyum sağlamak
3. Çalışan yazılımın haftalar bazında teslim edilebilmesi
4. İlerlemenin ana ölçüsünün çalışan yazılım olması
5. Belirli bir ilerleme ivmesini koruyabilen sürdürülebilir geliştirme
6. Müşteriler ile yakın ve günlük işbirliği
7. Günlük yüz yüze görüşmeler
8. Projelerin motive, istekli ve hevesli bireyler çevresinde yapılandırılması
9. Teknik mükemmeliyete ve iyi tasarıma sürekli özen ve dikkat gösterilmesi
10. Yalınlık
11. Kendi kendine organize olabilen takımlar oluşturulması
12. Değişen durum ve koşullara düzenli olarak uyum sağlama

Günümüzde, kullanılmakta olan pek çok özelleşmiş “agile” geliştirme metotları vardır. Hepsinin ortak noktası takım çalışması, işbirliği, değişime uygunluk ve süreç yalınlaştırmadır.

  • Scrum (Organizasyonumuzda en çok yeğlediğimiz ve deneyim edindiğimiz metot)
  • Agile Modeling
  • Extreme Programming (XP)
  • Agile Unified Process (AUP)
  • Feature Driven Development (FDD)
  • Kanban (development)
  • Dynamic Systems Development Method (DSDM)
  • Essential Unified Process (EssUP)
  • Exia Process (ExP)
  • Open Unified Process (OpenUP)
  • Crystal Clear
  • Velocity tracking
  • GSD

“Agile” yöntemler, genel olarak işleri/görevleri minimum planlama ile daha küçük birimlere böler ve ilk etapta projenin tamamının uzun vadeli planlamasına girişmez. “Sprint” ya da “iterasyon” adı verilen ve genelde 3-4 hafta olarak önerilen sürelerde, takım adeta bir yazılım geliştirme döngüsünü gerçekler. Yani planlama, gereksinim analizi, tasarım, kodlama, test ve demo yapar. Kısa süreli döngülerde çalışmak, toplam riski azaltıp, tüm sürümün sonunda yanlış anlaşılan bir gereksinimle karşılaşma olasılığını azaltarak değişen gereksinimlere uyumluluğu ve hızlı tepkiyi getirir. Bu süreç boyunca hafif ağırlıkta belgeleme de yapılır.

“Agile”da önerilen başka bir yöntem ise, açık ofis ortamında çalışılmasıdır. “Agile” takımlarında mutlaka bir pazar/müşteri temsilcisi bulunmalıdır. “Agile” projelerde, genelde günlük 15 dk’lık, ayakta bile olsa, kısa toplantılar ile günün planı, planı bloke eden etkenler ve önceki günden kaydedilen ilerlemeler paylaşılır. Değişik kararlar ile “agile” projelerin takibi kolaylaştırılabilir.

Bu duruma, organizasyonumuzda yaygın kullanılan “VersionOne”, “Rally” yöntemleri, örnek olarak verilebilir. Diğer uygulamalar; kodda değişiklik olunca tetiklenen yük oluşumları, saatlik/gecelik lab/sistem yük yükseltmeleri, otomatik test koşumu, rapor oluşumu, eşli programlama gibi kaliteyi geliştiren araç ve tekniklerdir.
Değişik araştırmalardan derlenen “Agile” uygunluk ölçütleri, aşağıdaki gibi özetlenebilir. Daha da önemlisi deneyimler aynı doğrultuda çıktılar sağlar.

  • İşin kritiklik ölçüsü
  • Ekibin deneyimli olması
  • Küçük ekipler : 3 < ekipteki kişi sayısı < 8
  • Gereksinimlerin değişim eğilimi
  • Kaostan beslenip zenginleşen kültür (Düzenli, sabit planlı olmamaktan dolayı iş verimliliğinin ve çıktının artması)

Bunların yanı sıra deneyimlerden çıkan sonuç; takımdaki geliştirmecilerin çoklu-işlevsel olmaları, farklı alanlarda çalışıp çıktı verebilmeleri önemli bir ölçüt olarak literatüre girmelidir. Bu bağlamda “agile”in ekipteki yazılımcıları farklı alanlarda geliştirmek açısından da değeri önemsenmeli ve öne çıkartılmalıdır. Bir diğer önemli nokta, ekibin aynı yerde olmasıdır.

Zaman farkı ya da coğrafi konum olarak ekip üyelerinin farklı yerlerde olması, etkileşimi azaltabilir. Bu durumun sonucu, “agile”da yarar yitimi olarak deneyimlenmiştir.

Sözün özü, günümüzün ışık hızında değişen, gelişen pazar ve müşteri gereksinimlerinde, “agile” yazılım geliştirme yöntembilimine daha çok projede başvurmamız kaçınılmazdır. Bu nedenle, “agile’”dan gerçek yararı çıkarmak organizasyonlar açısından belirleyici etken olmalıdır. Tıpkı Netaş’taki gibi!

Tarih: 27.03.2012 22:17 Yazar: Aytül Arısoy

Yazar'a Soru Sorun!

eBülten Üyeliği

Tüm yeniliklerimizden haberdar olmak için eBültenimize kayıt olun!