Makaleler
Bütün Makaleler


Görsel Dersler

MSegitim.Net
Yazar Olmak İstiyorum
Yazarlarımız
Küçük Şeyler
Makale Gönder

Diğer Kaynaklar
Bütün Dosyalar
SQL Server El Kitabı
  
Diğer
Tavsiye Kitaplar
Sertifikalar
Microsoft Eğitimleri
 
Faydalı Linkler
Asp.NET
CodeProject
Arama Motoru
 
 
Extreme Programming
XP, yazılımın geliştirmede uyulması gereken bazı süreçleri,yöntemleri ortaya koyan bir yaklaşımdır.Bir yazılım ekibi bu ilkelerin tamamına uyacak gibi bir kaide söz konusu değildir.Kimi yazılımlar için bazı prensipler uygulanabileceği gibi bazılarında başka prensipler uygulanabilir.Önemli olan burada,bizim yazılım projelerimizde, aşağıdaki ilkelerin hangilerini uygulayabilirim sorusunun cevabını verebilmektedir.


  • XP takımı bütün bir takımdır.
        Bir yazılımın başarılı bir şekilde sonuçlandırılabilmes,gereksinimlerin doğru bir şekilde belirlenebilmesi için,projeye katkıda bulunan herkesin birlikte çalışması gerekmektedir.Öyle ki, takım içerisinde bulunan yazılımcı,müşteri, yönetici, takım lideri ve diğerleri aynı oda içerisinde bulunmalıdırlar ki,herkes herkesin probleminden,isteğinden haberdar olabilsin.Özellikle müşteri ile yazılımcılar arasındaki mesafe çok fazla olup,yüz yüze görüşmek yerine telefonla veya başka iletişim araçlarıyla talepler alınır ise ortaya anlamsız gereksinimler yani istekler çıkabilecektir.Müşteri, yazılımcının yapabileceklerinden haberdar olur ise,daha anlamlı ve tutarlı istekler sunabilecektir.Zira müşteri,yazılımdan uzak biri olabilir. Velhasıl kelam projeye bir şekilde dahil olan herkesin bir çatı altında,birlikte bulunması XP’de son derece önemlidir. Eğer müşterinin yazılımcı ile birarada olması sağlanamıyor ise,bu durumda müşteriyi temsil eden bir kişi belirlenip müşteri gibi davrandırılabilir.Tabi bu kişi,müşteri konumundaki firmadan biri olabileceği gibi yazılım firması bünyesindeki bir kişide olabilir.Bu kişi sanki müşteri gibi davranarak,müşteri ile yazılımcı arasındaki köprüyü kurabilir.

  • Kullanıcı Hikayeleri (User Stories) 
        Bir projede müşterinin talep edeceği pek çok senaryo mevcuttur.Biz biliyoruz ki bir problemi, ne kadar anlamsal bütünlüğü olan parçalara bölebilirsek,problemimizi çözmek o kadar kolay olur. Müşterinin sizden istediği yazılımın gerçekleştirmesi gereken işleri, parçalara bölerek, kullanıcı hikayeleri(user story) oluşturulabilir.Bu hikayeleri müşteri oluşturmaktadır.Yalnız burada önemli olan nokta bu hikayelerin çok detaylı olmamasıdır.Kabataslak bir hikaye müşteri tarafından hazırlanır ve yazılımcı bu hikaye üzerinde çalıştıktan sonra,gerçekleştirim için yaklaşık bir süre belirler.Ne zaman ki yazılımcı hikayeyi kod düzeyinde gerçekleştirmek ister,işte o zaman yazılımcı ile müşteri bir araya gelerek, hikayede konusu geçen herşeyin teknik detayları konuşulur.Bizler biliyoruz ki bir müşterinin, projenin başında söylediği bir şey sonunda değişebilir, ki bu değişikliğin sebeplerinden biri,müşterinin yazılım ile yapılabileceklerin bir kısmından haberdar olmamasıdır.Müşteri ortaya konan ürünü gördükçe,başlangıçta böyle olsun dediği şeyi,hayır şimdi şöyle olsun diyebilmektedir.Bir XP takımı sürekli değişime hazır olmalıdır.İşte bu yüzden kullanıcı hikayeleri(user stories) az detaya sahip bir biçimde ortaya konulur. 
        İdeal yazılım geliştirmede bu kullanıcı hikayelerinin süreleri 1,2 veya 3 hafta olarak öngörülmüştür. Eğer bir kullanıcı hikayesi bu süreleri geçer veya altında kalırsa,hikayeleri bölebilir veya bir kaçını birleştirebilirsiniz. Kullanıcı hikayelerinden yola çıkarak yazılım geliştirmenin bir güzel tarafıda,bu hikayeleri kullanarak proje süresinin yaklaşık olarak hesaplanabilinmesidir.Zira bir yazılım ekibi bir kullanıcı senaryosunu 2 haftada bitiriyor ve toplamda 200 tane kullanıcı senaryosu var ise,projenin yaklaşık olarak 400 haftada bitebileceği öngörüsü yapılabilir.Böylelikle kullanıcıya belli aralıklarla projenin çalışan tarafları gösterilip,düzenli bir takvim oluşturulabilinir.

  • Belli aralıklarla yazılım yayınlanır.
        Projemizde kullanıcı hikayelerinin olduğundan bahsettik. müşteri ,kullanıcı hikayelerine öncelik belirler.Bu öncelikler göz önüne alınarak 1 ile 3 hafta arasında değişen periyodlarda, gerçekleştirilen kullanıcı hikayeleri tamamlanır ve yayınlanır.Burada önemli olan nokta şudur;Örneğin projemizde 3 haftayı yayınlama süresi olarak belirledik(Iteration).Bu durumda önceliği olan kullanıcı hikayeleri bu sürede bitirilir ve yayına geçirilir.Yalnız bu süre içerisinde detayları konuşulmuş olan kullanıcı hikayeleri kesinlikle müşteri tarafından değiştirilemez.XP,müşteri isteklerinin değişmesini taban alan bir yaklaşımdır yalnız iteration’ı bozmamak adına bu süre başlangıcından bitimine kadar kullanıcı hikayelerinin değiştirilmesi kabul edilemez. 1-2 haftalık aralıklarla projenin ufak parçaları yayınlanırken daha uzun süreler için Release plan hesaplanır.Bu sürede 3 ay civarındadır.Her 3 ay da bir projenin çalışır kısımları müşteri ortamına kurulur ve müşterinin kullanması ve eksiklikleri görmesi sağlanır.Böylelikle müşteriden sürekli geri dönüşüm alınmış olur.Tabi Release Plan’ı belirlerken,release plan’da gerçekleştirilmesi gereken kullanıcı hikayelerinin neler olacağı müşterinin önceliklerine göre belirlenir.Müşteri için en önemli kullanıcı hikayeleri,ilk release plan’larda gerçekleştirilmiş olur.

  • Kodun kabulü için kabul testleri esas alınır.
        Belirlenmiş kullanıcı hikayeleri için,bir taraftan kod gerçekleştirilirken bir taraftan da test senaryoları hazırlanır.Bu senaryolar müşteri tarafından da hazırlanabilir,yazılım firması bünyesindeki tester’lar tarafından da.Önemli olan nokta bu testlere bağlı kalınarak kullanıcı hikayelerinin(user story) başarılı olup olmadığının belirlenmesidir.User story belirlendi,test belirlendi ve user story kod düzeyinde gerçekleşti.Eğer yazılan kod,belirlenen test senaryolarını geçiyor ise bu kullanıcı hikayesi başarılıdır denir ve bir daha başarısızmış gibi davranılamaz.

  • İki kişilik ekiplerle yazılım gerçekleştirilir. (Pair Programming)
        Pair programming kavramı bir bilgisayar başında iki kişinin bulunması demektir.Evet biraz ilginç geliyor ama doğru.Bir masa,bir bilgisayar,bir klavye,bir mouse ve iki sandalye,iki yazılımcı.Biri kod yazarken öbürü diğerini kontrol edecek,daha sonra diğeri, kalk bakim şimdi de biraz ben yazayım diyecek ve bu sefer diğeri kontrol etmeye başlayacak.Biri yazacak biri bakacak.Beraber düşünecekler, beraber çözecekler,kaynaşacaklar vs.Her ne kadar iki yazılımcının,bir iş yapması gibi gözüksede zaman içerisinde oluşabilecek hataları azalttığı, kodun kalitesini arttırdığı için tercih edilen bir yöntemdir.Tabi bu iki kişilik ekip sürekli değişmektedir. Değişken bir yapısı olduğu için,her yazılımcının,yazılımın hemen her yerinde parmağı bulunmaktadır.Her yazılımcı, takım içerisindeki arkadaşlarıyla sıkı sıkıya bir ilişki içerisindedir.Her ne kadar bazı kimseler,bazı konularda uzman olsada,bu kural değişmemektedir. Yine iş,uzmanına verilmektedir yalnız genel anlamda iş dağılımı yapılmakta, böylelikle herkesin, yazılımın her parçasından anlaması durumu sözkonusudur.Bu özellikle işten ayrılma durumlarında firmayı daha az zoru sokacak hemde,takım içerisindeki kaynaşmadan dolayı, huzursuzluktan kaynaklabilecek işten ayrılmalar muhakkak azalacaktır.

  • Test-Driven Development (TDD)
        XP’de uygulamalar şu şekilde gerçekleştirilir.Bir modül yazdığımızı düşünün,ilk olarak yazılacak olan kodları için test kodları yazılır.(Unit Test kullanabilirsiniz.).Doğal olarak henüz herhangi bir kod yazılmadığından dolayı,yazılan test kodları hata verecektir.Zaman içerisinde kodları geliştirmeye başladıkta test kodları doğru sonuçlar üretmeye başlayacaktır.Bir yandan kod yazarken bir yandan da test kodları yazmayı sürdüreceğiz.Yalnız öncelik test’lere ait olacaktır.Örneğin modülümüzde bir geliştirme yapacağız,öncelikle test kodları yapıp ardından kodlamaya geçeceğiz.Her ne kadar ilk bakışta zahmetli gibi gözüksede, kodlarımızın hata olasılığını azaltacağı gibi,sürekli parça parça denemeler yapacağımızda dolayı refactoring’i geliştirecektir.(Örneğin,uzun bir metod yazıp test etmek zor olacağı için,bu metodu parçalara ayırıp,ayrı ayrı test etmek daha kolay olacaktır.Bu durumda yazdığımız kod üzerinde sürekli refactoring yapmak zorunda kalacağız)

  • Takım içi işbirliği sağlanır.
        Bir yazılım projesinin pek çok ayağı vardır.Bir yazılımda aynı anda Windows Forms uygulamaları,web sevice uygulamaları,data access layer veya arayüzler,karmaşık algoritmalar,veri tabanı sql komutları vs. bulunabilir.XP’de Ahmet, Windows uygulamalarında harikadır o yüzden windows uygulamalarını Ahmet’e verelim,Veli, Data Access konusunda uzmandır o yüzden bu işi o yapsın gibi bir yaklaşım sözkonusu değildir.Herkes,yazılım bütün parçalarına müdahele eder ve geliştirme yapar.Her ne kadar örneğin Web Sevic e konusunda uzman biri var ve bu kişi web service uygulamaları konusunda daha fazla söz sahibi olsa da,Bu,diğer yazılımcıların web service’le ilgilenmeyeceği, veyahut web service ile uğraşan kişinin karışık algoritmalara elini sürmeyeceği anlamına gelmez.Kısaca özetlersek,bütün yazımlıcılar,yazılımın her aşamasında bulunurlar.

  • Yazılım parçaları sürekli entegre biçimde tutulur.
        Bir .NET yazılımında Visual Source Safe kullanıyor isek,ilgilendiğimiz bir formu,dosyayı,kodu check out ettikten sonra, üzerinde değişiklikler yapıp,test kodlarını yazıp derleriz.Eğer sorunsuz bir şekilde çalıştığından emin olduğumuzda check in eder,test server’a yükleriz.Tabi bu web uygulamaları için geçerlidir.Böylelikle proje sürekli genişleyen ve bütünleşik bir yapıya sahip olur.Bir musluktan damla damla su akar gibi kodlar client yazılımcılardan server’a sürekli akar böylelikle sürekli bütünleşme sağlanır.Belli ve sık aralıklarla projenin tamamı derlenir,çalıştırılır ve test edilir.Bir web uygulaması ise server’a projemizin tamamını yükleyebileceğimiz gibi,Windows Forms uygumaları ise bu durumda da Setup dosyası veya bir CD’ye proje aktarılmalıdır.

  • Yazılım, hızlı değil güvenli ve emin adımlarla gerçekleştirilir.
        Bir yazılım projesinde yazılımcıların yarınki enerjileri bugünden çalınmamalıdır.Yazılımcılar yarış atları gibi hızlı bir şekilde koşturulmamalıdır.Hızlı bir şekilde giden yazılımcının yazacağı kodlar hata üretmeye çok müsaittir.Hatanında yanında karmaşık ve anlaşılması çok zor olan kodlar ortaya çıkması muhtemeldir.Hızlı ve uzun süreli bir şekilde yazılım yapmak yerine emin adımlarla,olması gereken düzeyde yazılıma devam edilmelidir.Böyle yapılan yazılımlar üzerinde sakin kafayla,uzun uzun düşünülen,tutarlı ve sağlam olmaktadırlar.Yazılım yöneticileri yazılımcıların geceli gündüzlü çalışarak daha çabuk bir şekilde proje ortaya çıkarabileceklerini düşünseler de,yazılım ortaya erken çıksa da,uzun süreçte o yazılımın başarısız olma ihtimali çok yüksektir.Hatta zamanında bitirilmesi çok kolay olan yazılımlarda bile, hızlı gidildiğinden dolayı aceleye gelen,yanlış yazılan, silinip silinip tekrardan yazılan yazılımlar ortaya çıkmakta, bu da teslim süresini uzatmakta, kaliteyi azaltmaktadır.

  • XP takımı aynı fiziksel ortamda bulunur.
        Yazılımcılar ayrı ayrı odalarda değil,hepsi bir odada ve birbirlerini görecek ve duyacak mesafede olmalıdırlar.Böylelikle hem takım içerisindeki bütünleşme sağlanmış olur hemde bir kişinin diğer tüm takım arkadaşlarından haberdar olması sağlanır.Biri, bir problemle karşılaştığı an vakit kaybetmeden bunu takım arkadaşlarıyla paylaşabilirler.Bizler biliyoruz ki,birlikte yapılan işlerde motivasyon son derece artmaktadır.Böyle bir ortamda,kendini yazılıma vermiş ekibin,birlik olarak her türlü işin üstesinden gelebileceğine inanıyorum. Tabi böyle bir ortamda,yazılım ekibindeki herkes diğer arkadaşlarına karşı saygılı olmalı ve onları rahatsız edici tutumlardan kaçınmalıdırlar.Yazılımda müzik dinlemek bazı kişileri motive ediyor olsada, diğer takım arkadaşlarını sürekli duyabilmesi ve ilgilenebilmesi açısından müzik dinlenecekse bile beraber dinlenmesi gerektiğine inanıyorum.

  • XP takımı kendine kod standartları belirler.
        Bütün yazılım ekibinin kullandığı ortak bir kodlama standardı olmalıdır.XP’ye göre takım içerisindeki herkes,diğer arkadaşlarının kodlarına müdahele edebileceği için,diğer arkadaşların yazdığı kodları rahat bir şekilde anlayabilmeli,üzerinde bir değişiklik yaptığında,kodu ilk yazan kişi,yeni kodu anlamakta zorlanmamalıdır.Bu son derece önemlidir.Bu yüzden takım içerisinde her bir şey(değişken,sınıf,metod vs. isimlendirmeleri,dökümantasyon yazma biçimi vs) için bir kod standardı yerleştirilmelidir.

  • Tasarım olabildiğince basit tutulmalıdır.
        XP projelerinde o an üzerinde çalışılan kullanıcı hikayelerine(user stories) odaklanılır.İleride şöyle bir şeye ihtiyacımız olabilir,şurda şöyle bir kod yazalım ki ileride zorluk çekmeyelim gibi düşünceler XP’de yer bulamaz.XP takımı o an elinde bulunan işlere odaklanır,ileriyi düşünmez ve işini gören en basit kodu yazar.Belki bir işi reflection yöntemiyle yapmak ileride örneğin 100 satır kod yazmamızı engelleyecek olsa bile, bu yapılmaz onun yerine modüler olmayan en basit kod yazılır.İhtiyaç duyuldukça kod üzerinde düzenlemeler yapılır.Bu durumda Refactoring, XP projelerinin vazgeçilmez bir parçası haline gelir.Kısacası kod en basit haliyle sadece üzerinde düşündüğümüz gereksinim üzerinden yazılır ve ilerisi düşünülmez.Olurda ileride benzer kodlar yazmamız gerektiğinde bir düzenleme yapıp, kodlarımızı bir metod içerisine alabiliriz veya bir sınıf içerisine alabiliriz.İlk bakışta ilginç ve yararsız bir yöntem gibi gözüksede refactoring ile birleştiğinde anlamlı olabileceğini düşünüyorum. XP projelerinin kod tekrarına tahammülü yoktur.Eğer bir kod tekrarı mevcut ise bu durumda hemen refactoring ile kod düzenlenmeli ve bir defa yazılır hale getirilmelidir.

  • XP’de Refactoring çok önemli bir yere sahiptir.
        Özellikle büyük ve uzun süreli projelerde zaman içerisinde belkide milyonlarca satır kod yazılmaktadır. Her ne kadar tecrübeli kişiler tarafından yazılıyor olsada,kodların çoğalmasıyla birlikte kodların zaman içerisinde okunabilirliği azalmakta karmaşıklığı artmaktadır.Bu durumda da,projeye yeni bir şey eklemek,problemi çözmek, bakım yapmak zorlaşmaktadır.İşte tam bu noktada karşımıza refactoring kavramı çıkmaktadır.Bir yazılımcı her an refactoring yaparak kod üzerinde düzenlemeler yaparak kodu iyileştirir.böylelikle kodun kalitesi arttırılmaktadır. Tabi refactoring yaparken bir yandan da kodlar sürekli test edilmektedir.Refactoring, yazılan kodun işleyişinde herhangi bir değişiklik meydana getirmemelidir, sadece yapısal olarak düzenleme getirmelidir.

Önemli Gördüklerimiz
12 Agile Principles
Extreme Programming Patterns & Practices

Kullanıcı Girişi
 
 
Üye Ol
Şifremi Unuttum
      
Anket
Sitemizde Yenilik Olarak Ne Olsun?




 
Oy Ver
Anket İstatistikleri
Tüm Anketler
 

msegitim.net Temmuz 2007 tarihinde faaliyete başlamıştır.