Yazılım Geliştirme Metodolojimiz

xp logo Agile Process

 

 

Şirketimizde müşteri memnuniyeti ve takım çalışmasını ön planda tutan Çevik (Agile) yazılım geliştirme süreçlerinden XP (Extrem Programming – Uç Programlama) kullanılmaktadır. Yazılım geliştirme sürecinin en temel, en önemli ve final çıktısı ya da ürünü çalıştırılabilir kod olduğundan, XP metodolojisi sürecin en başından itibaren çalıştırılabilir kodu sürecin merkezinde tutmaktadır. Uç Programlama, her bir adımda genişletilebilirlik ve sürdürülebilirlik özellikleri bakımından yüksek kalitede kod üretimine önem vermektedir. Her bir adımın temel hedefi geliştirmek ve refactor etmektir. Geliştirmek, yeni işlevler ve özellikler eklemek demektir. Refactor etmek ise çalışan kodun işleyişine zarar vermeden kodun kalitesinin arttırılması amacıyla yeniden yapılandırılması demektir. Refactor etmek, Uç Programlamanın ısrarla üzerinde durduğu bir işlemdir.

XP dört değer üzerine kuruludur. Bunlar;

XP değerleri

Bu değerler yaşandığı taktirde XP öğrenimi ve kullanımı kolaylaşır. XP basit yöntemler aracılığıyla sonuca ulaşmak ister, çünkü sadece bu şekilde hızlı ve düşük maliyetli projeler gerçekleştirilebilir. Basit çözümler kolay anlatılır ve adapte edilir. Bu zaman kazanılması anlamına gelir.

XP projelerinde kalite kontrolü geridönüş üzerinden sağlanır. Programcılar yazdıkları testlerden geridönüş alarak kaliteyi sağlarlar. Kısa zamanda yeni sürüm oluşturarak müşteri ve kullanıcılardan geri dönüş aracılığıyla programın gereksinimleri sağlayıp, sağlamadığı kontrol edilir.

Tüm proje ekipleri sürekli olarak aralarında iletişim kurmaları gerekmektedir. Sadece bu şekilde sağlıklı bilgi transferi gerçekleştirilebilir. Böylece yanlış anlaşılmalar ve bilinmeyenler ortadan kaldırılır.

Basit çözümler, geri dönüş ve iletişim için cesaret gereklidir. Bu saydığımız değerler bireyler arasındaki interaksiyonu ve iletişimi artıracağı için, bireylerin kendi iç dünyalarını terk edip, takımın bir parçası olmalarını kolaylaştırır. Bu kişisel gelişmeyi sağlar ve temelinde kişisel cesaret yatar.

XP yaklaşımı, yinelemeli yazılım geliştirme yaklaşımlarındandır ve öncelikle çalışır bir yazılım nüvesi oluşturup, sık sık versiyon atlatarak, yazılımı geliştirme esasına dayanır. Her bir versiyon atlatmada dikkate alınan kalite unsurları aşağıda sıralanmıştır;

  • Kullanışlı,
  • Tam zamanında,
  • Güvenilir,
  • Güncellenebilir,
  • Yeniden kullanılabilir,
  • Kullanıcı dostu,
  • Etkin.

XP Metodolojisi aşağıdaki prensiplere dayanır;

xp prensipleri

1. Sürecin Planlanması (Planning) : Iterasyon süresi (bir, iki veya üç hafta) ve sürüm (bir, iki ay) planı belirlenir. Her sürüm birden fazla iterasyon içerir. Müşteri gereksinimleri tespit edilerek hangi sürümde hangi gereksinimlerin karşılanacağı belirlenir ve yazılım geliştirme sürecinin iterasyonları tespit edilir. Bir sonraki iterasyonda yapılması gereken işler planlanır ve sürüm içeriği tespit edilir. Müşteri ve kullanıcılar, daha önce kullanıcı hikayesine (user story) dönüştürdükleri isteklerine öncelik sırası verirler. Programcılar her kullanıcı hikayesi için gerekli zamanı tahmin ederler. Kullanıcı hikayelerinin öncelik sıraları bu zaman tahminine bağımlı olarak değişebilirler. Bu şekilde sürüm ve iterasyon planı oluşturulmuş olur.

2. Sık ve Küçük Versiyonlar (Sort Releases): Sabit bir periyot (bir, iki veya üç hafta) belirlenerek buna göre versiyon atlatımı yapılır. Bu şekilde projenin temposu belirlenir.

3. Metafor (Metaphor) : Proje ekibinin, etkin iletişimi için Class ve Metod adlandırılmasında ortak bir yaklaşım oluşturulur.

4. Sade Tasarım (Simple Design) : Her bir aşamada amaç, müşterinin gereksinimini karşılayan en basit tasarımı yapmaktır. İlke; tasarımı basit tut, sonra iyileştir şeklindedir. Bu programın basit bir yapıda kalmasını ve ileride değiştirilebilir ve geliştirilebilir olmasını sağlar. Basit tasarımlar daha kolay ve daha hızlı implemente edilebilir. Basit bir implementasyonu anlamak ve anlatmak daha kolaydır.

5. Ayakta Toplantı (Standup Meeting) : Proje çalışanları hergün 15 dakikayı geçmeyecek şekilde ve ayakta yapılan toplantılarla bir araya gelinir. Hedefte projenin gidişatı hakkında bilgi alışverişi yapmak vardır. Herkez toplantıda aşağıdaki soruların cevaplarını verir;

a. En son toplantıdan sonra hangi işlerin tamamlandığı,

b.Çözülmesi gereken istekler ve sorunların neler olduğu,

c.Gelecek toplantıya kadar hangi işlerin tamamlanacağı belirlenir ve yeni görevlendirmeler yapılır.

6. Önce Test (Testing) : Program yazılmadan önce belirlenen kabul kriterlerine göre program testleri yazılır ve yapılacak olan testlere müşteri de dahil edilerek gerekli olan onayın alınması sağlanır.

7. Yapılandırma (Refactoring) : Yazılım geliştirme sürecinin her aşamasında iyileştirme çalışmaları yapılacaktır. Bu şekilde problemler geliştirme sürecinin içinde belirlenerek anında çözülür, ötelenerek projenin sonunda hatalar için ayrıca geriye dönülmesi engellenmiş olur.

8. Çift Programlama (Pair Programming) : Hata riskinin azaltılması, takım içindeki iletişimin artması, yazılan modüllerin birden fazla kişi tarafından bilinmesinin sağlanması için eşli programlama yapılır ve bir bilgisayara iki kişi birden oturarak çalışılır.

9. Ortak Sorumluluk (Collective Ownership) : Herhangi bir programcı proje kodunun herhangi bir parçasında değişiklik yapabilme hakkına sahiptir, hiçbir kod parçası dokunulmaz değildir. Böylece bir programcının o gün işe gelmemesi durumunda diğer bir arkadaşı onun yerini kolaylıkla alabilir, yapılması gereken işler aksamaz.

10.Sürekli bütünleştirme (Continuos Integration) : Bitirilen görev hemen sisteme entegre edilir. Bu şekilde yapılan tüm değişiklikleri, her programcının sistem üzerinde görmesi sağlanır. Ayrıca sistem entegrasyonu için gerekli zaman azaltılır, çünkü oluşabilecek olan hatalar önceden teşhis edilerek ortadan kaldırılır.

11. Kalıcı Tempo (Sustainable Pace) : Geliştirme ekibinin motivasyon ve çalışma enerjilerinin yüksek olması için aşırı çalışma saatlerinden kaçınılarak, haftalık belirlenen mesai saatinin dışına çıkılmaz. Bazen fazla mesai saatlerine ihtiyaç duyulabilir, fakat durumun sürekli böyle olması proje gidişatında bir problem olduğunu gösterir.

12. Müşteri İle Yakın İletişim (On-site Customer) : Müşteri ile geliştirme ekibinin yakın temas halinde olması, istenildiğinde bir araya gelinmesi sağlanır, bu şekilde müşteri sürece dahil edilir.

13. Kod Standartları (Coding Standarts) : Progamcılar açısından aynı kalitede kod yazılımı yapılabilmesi için kod yazarken uyulacak olan kuralların oluşturulması gerekmektedir. Kodun nasıl biçimlendirileceği, sınıfların, metotların, ve değişkenlerin nasıl isimlendirileceği kod standartlarında yer alır.

14. Geriye Bakış (Retrospective) : Proje çalışanları geçmişte yaşanan sorunların gelecektede yaşanmaması için sürekli geriye bakarak, oluşan sorunları gözden geçirirler. Geriye bakış bir ile altı aylık zaman birimleri için tüm proje çalışanları veya seçilen bireyler tarafından yapılır. Geriye bakış toplantıları yarım gün ile üç gün arasında sürebilir.

Bir çevik projedeki ekip çalışanlarının sorumluluk alanlarını tanımlamak için roller tayin edilir. Her rol beraberinde bazı sorumluluklar ve tanınmış haklar getirir. Bu roller statik değildir, ekip içindeki kişilere gerekli olan roller verilir ve daha sonra istenirse rol değişikliği yapılabilir. Proje gereksinimleri doğrultusunda yeni rollerin oluşturulması mümkündür. Bu roller ;

· Müşteri (Customer) : Projenin var olma sebebidir ve ihtiyaç duyduğu gereksinimlerine cevap verebilecek bir yazılım sistemi için yatırım yapan kişidir. Proje bünyesinde ne programlanması gerektiğini müşteri tayin eder. Yapılması gerekenleri kullanıcı hikayeleri (user story) oluşturarak ifade eder. Her kullanıcı hikayesi yazılım sisteminin bir özelliğini tanımlar. Oluşturulan kullanıcı hikayeleri test edilebilir bir yapıda olması gerekir. Müşteri çalışma alanı hakkında bilgi sahibi olan kişi veya kurumdur. Programcılar karşılaştıkları sorunları çözmek için müşteriye sorular sorabilirler. Bu soruların cevaplarını en iyi verebilecek kişi müşteridir. Hangi kullanıcı hikayesinin ne zaman implemente edileceğine müşteri karar verir. İmplemente edilen kullanıcı hikayelerini kontrol etmek amacıyla müşteri onay/kabul testleri tanımlar. Bu testler programcı tarafından implemente edilir.

· Programcı (Programmer) : Sistem analizi, tasarım, test ve implementasyon programcılar tarafından yapılır. Müşteri tarafından belirlenen kullanıcı hikayelerinin implementasyon süresi programcılar tarafından tahmin edilir. Her programcı test güdümlü ve bir takım arkadaşıyla birlikte çalışması, kısa zamanda kod hakkındaki bilginin tüm programcılar tarafından paylaşılmasını kolaylaştırdığı gibi, takım arkadaşları arasındaki iletişimi de arttıracaktır. Test güdümlü çalışmak bakımı ve geliştirimesi kolay kodun oluşmasını sağlar. Programcılar oluşturdukları testler yardımıyla her gün modül entegrasyonu gerçekleştirirler. Sürekli entegrasyon programcılar tarafından oluşturulan modülleri entegre eden bir süreçtir.

· Proje Yöneticisi : Müşteri ve programcıları biraraya getirir. Onların beraber çalışabilecekleri ortamların oluşmasını sağlar. Proje menejeri tek başına proje planından sorumlu değildir. Programcılara görev atamaz, onların kendi başlarına seçim yaparak, sorumluluk almalarını kolaylaştırır. Toplantı ve diğer buluşmaları koordine eder, takımın karşılaştığı sorunları ortadan kaldırmak için gerekli olanları yapar.

 

XP projeleri değişik safhalardan oluşur. Her safha kendisine has aktiviteler ihtiva eder. Bu safhalar;

xp lifecycle

· Keşif safhası (Exploration Phase) : Bu safhada müşteri kullanıcı hikayelerini (user story) oluşturur. Programcılar teknik altyapı için gerekli olan araştırmayı yapar.

· Planlama Safhası (Planning Phase) : Müşteri programcılar yardımıyla iterasyon ve sürüm planını oluşturur. İterasyon planlaması için oluşturulan kullanıcı hikayelerinin implementasyon süreleri programcılar tarafından tahmin edilir. Müşteri kullanıcı hikayelerine öncelik sırası vererek iterasyon planını tespit eder.

· İterasyon ve Sürüm Safhası (Iterations to Release Phase) : Bir iterasyon bünyesindeki implemente edilecek olan kullanıcı hikayeleri müşteri tarafından belirlendikten sonra implementasyonun işlevini kontrol etmek için müşteri tarafından onay/kabul testleri belirlenir. Bu testler programcılar tarafından implemente edilir. Her iterasyon sonunda müşteriye çalışır bir uygulama sunulur. Bu şekilde müşterinin sistem hakkındak görüşleri alınır. Bir önceki iterasyonda oluşan hatalar bir sonraki iterasyonda gözden geçirilmek ve giderilmek üzere planlanır.

· Bakım Safhası (Maintenance Phase) : Kullanıcılar için eğitim seminerleri hazırlanır. Küçük çapta eklemeler ve güncellemeler için işlemler yapılır. Müşterinin istekleri doğrultusunda bir sonraki büyük sürüm için çalışmalara başlanır. Bu durumda tekrar keşif safkasından çalışmaya başlanır.