<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kurumsal Java Yazılımı &#187; Extreme Programming</title>
	<atom:link href="http://www.kurumsaljava.com/category/xp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kurumsaljava.com</link>
	<description>Java Enterprise Architecture by Ozcan Acar</description>
	<lastBuildDate>Fri, 30 Dec 2011 09:28:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Test Güdümlü Yazılımın Tasarım Üzerindeki Etkileri</title>
		<link>http://www.kurumsaljava.com/2009/11/17/test-gudumlu-yazilimin-tasarim-uzerindeki-etkileri/</link>
		<comments>http://www.kurumsaljava.com/2009/11/17/test-gudumlu-yazilimin-tasarim-uzerindeki-etkileri/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 08:37:35 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Haberler]]></category>
		<category><![CDATA[Yazılım Testleri]]></category>
		<category><![CDATA[Tasarım]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=925</guid>
		<description><![CDATA[<p>Yazılımcı olarak çalıştığım projelerde geleneksel  ve çevik yazılım süreçleri  hakkında tecrübe edinme firsatı buldum. En son kitabım bir çevik süreç olan Extreme Programming  hakkındadır. Edindiğim tecrübeler doğrultusunda çevik süreçlerin, klasik yazılım süreçlerine nazaran bakımı ve geliştirilmesi daha kolay yazılım sistemlerinin oluşturulmasında daha avantajlı olduğunu söyleyebilirim. </p>
<p><span id="more-925"></span></p>
<p>Bu yazımda sizelere test güdümlü yazılım sürecinin, yazılım tasarımı üzerindeki etkilerini bir örnek üzerinde aktarmak istiyorum. TDD  ile birlikte oluşan tasarım, kendiliğinden oluşan birşey değildir. Testler şekil aldıkça, oluşturmak istediğimiz tasarımın modeli de gözümüzde canlanmaya başlar. Oluşturduğumuz testler, programın gelecekteki  kullanıcılarını (client) simule ettiği için, programın nasıl kullanılacağını testler bünyesinde gözlemlemek kolaylaşmaktadır. Bu süreç, sınıfların ve metotların kullanıcı gözüyle (client) tasarlanmasını sağlar. Bu sayede basit ve kullanışlı API (Application Programming Interface)’ler oluşur. Test güdümlü yazılım tasarımı devamlı zorlar ve yetersiz kaldığı yerlerde refactoring yöntemleriyle yenilenmesini sağlar. Bu süreç sayesinde kendisini devamlı yenileyen ve yeni gereksinimlere cevap veren bir tasarım oluşur.</p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
<p><i><br />
EOF (End of Fun)<br />
Özcan Acar<br />
</i></p>
]]></description>
			<content:encoded><![CDATA[<p>Yazılımcı olarak çalıştığım projelerde geleneksel  ve çevik yazılım süreçleri  hakkında tecrübe edinme firsatı buldum. En son kitabım bir çevik süreç olan Extreme Programming  hakkındadır. Edindiğim tecrübeler doğrultusunda çevik süreçlerin, klasik yazılım süreçlerine nazaran bakımı ve geliştirilmesi daha kolay yazılım sistemlerinin oluşturulmasında daha avantajlı olduğunu söyleyebilirim. </p>
<p><span id="more-925"></span></p>
<p>Bu yazımda sizelere test güdümlü yazılım sürecinin, yazılım tasarımı üzerindeki etkilerini bir örnek üzerinde aktarmak istiyorum. TDD  ile birlikte oluşan tasarım, kendiliğinden oluşan birşey değildir. Testler şekil aldıkça, oluşturmak istediğimiz tasarımın modeli de gözümüzde canlanmaya başlar. Oluşturduğumuz testler, programın gelecekteki  kullanıcılarını (client) simule ettiği için, programın nasıl kullanılacağını testler bünyesinde gözlemlemek kolaylaşmaktadır. Bu süreç, sınıfların ve metotların kullanıcı gözüyle (client) tasarlanmasını sağlar. Bu sayede basit ve kullanışlı API (Application Programming Interface)’ler oluşur. Test güdümlü yazılım tasarımı devamlı zorlar ve yetersiz kaldığı yerlerde refactoring yöntemleriyle yenilenmesini sağlar. Bu süreç sayesinde kendisini devamlı yenileyen ve yeni gereksinimlere cevap veren bir tasarım oluşur.</p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
Note: There is a file embedded within this post, please visit this post to download the file.
<p><i><br />
EOF (End of Fun)<br />
Özcan Acar<br />
</i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F11%2F17%2Ftest-gudumlu-yazilimin-tasarim-uzerindeki-etkileri%2F&amp;linkname=Test%20G%C3%BCd%C3%BCml%C3%BC%20Yaz%C4%B1l%C4%B1m%C4%B1n%20Tasar%C4%B1m%20%C3%9Czerindeki%20Etkileri"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/11/17/test-gudumlu-yazilimin-tasarim-uzerindeki-etkileri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion İle Versiyon Kontrolü</title>
		<link>http://www.kurumsaljava.com/2009/04/07/subversion-ile-versiyon-kontrolu/</link>
		<comments>http://www.kurumsaljava.com/2009/04/07/subversion-ile-versiyon-kontrolu/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 07:50:31 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=712</guid>
		<description><![CDATA[<p>İnsanoğlu okuma, yazmayı icat etmeden önce mağara duvarlarına resimler yaparak düşüncelerini şekillendirmeye başladı. Araştırmalara göre ilk yazının Sümer’liler tarafından İsa’dan önce 3500 civarında icat edildiği söylenmektedir. <span id="more-712"></span>O devrin insanları yazı benzeri işaretler kullanarak ilk dokümanları oluşturmuş ve bu dokümanları iletişim aracı olarak kullanmışlardır. Günümüzde latin alfabesinde yer alan kelimeleri kullanarak bilgisayarda dijital dokümanlar oluşturuyoruz, arkadaşlarımıza email gönderiyoruz yada elimize kağıt ve kalem alarak mektup yazıyoruz. Bu işlemlerin sonucunda dijital olan yada olmayan bir doküman oluşuyor. </p>
<p>Her doküman oluşturulduğu ilk saniyeden itibaren bir versiyon ihtiva eder. Bir versiyon,  dokümanın geleceğe doğru olan yolculuğunda durak yaptığı istasyonlardan birisidir. Zaman içinde doküman değişikliğe uğrar. Her değişikliğin ardından dokümanın yeni bir versiyonu oluşur. Dokümanın herhangi iki versiyonu arasındaki fark, bu iki versiyonun oluşumu için geçen zaman diliminde, doküman üzerinde yapılan tüm değişiklikleri ihtiva eder.</p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
<h1>Konuyla İlgili Kitaplar</h1>
<p><a href="http://www.amazon.co.uk/Wicket-Action-Martijn-Dashorst/dp/1932394982%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1932394982" target="_blank"></a><a href="http://www.amazon.co.uk/Version-Control-Subversion-C-Pilato/dp/0596510330%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596510330"><img src="http://ecx.images-amazon.com/images/I/51iwjNGkQdL._SL160_.jpg" alt="" /></a>  <a href="http://www.amazon.co.uk/Pragmatic-Version-Control-Subversion-Programmers/dp/0977616657%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0977616657"><img src="http://ecx.images-amazon.com/images/I/51UfGnv2nYL._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/Expert-Spring-MVC-Web-Flow/dp/159059584X%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D159059584X"></a>   <a href="http://www.amazon.co.uk/Spring-Practice-Willie-Wheeler/dp/1935182056%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1935182056"></a><a href="http://www.amazon.co.uk/Pro-Wicket-Experts-Voice-Java/dp/1590597222%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1590597222" target="_blank"></a></p>
<p><i><br />
EOF (End of Fun)<br />
Özcan Acar<br />
</i></p>
]]></description>
			<content:encoded><![CDATA[<p>İnsanoğlu okuma, yazmayı icat etmeden önce mağara duvarlarına resimler yaparak düşüncelerini şekillendirmeye başladı. Araştırmalara göre ilk yazının Sümer’liler tarafından İsa’dan önce 3500 civarında icat edildiği söylenmektedir. <span id="more-712"></span>O devrin insanları yazı benzeri işaretler kullanarak ilk dokümanları oluşturmuş ve bu dokümanları iletişim aracı olarak kullanmışlardır. Günümüzde latin alfabesinde yer alan kelimeleri kullanarak bilgisayarda dijital dokümanlar oluşturuyoruz, arkadaşlarımıza email gönderiyoruz yada elimize kağıt ve kalem alarak mektup yazıyoruz. Bu işlemlerin sonucunda dijital olan yada olmayan bir doküman oluşuyor. </p>
<p>Her doküman oluşturulduğu ilk saniyeden itibaren bir versiyon ihtiva eder. Bir versiyon,  dokümanın geleceğe doğru olan yolculuğunda durak yaptığı istasyonlardan birisidir. Zaman içinde doküman değişikliğe uğrar. Her değişikliğin ardından dokümanın yeni bir versiyonu oluşur. Dokümanın herhangi iki versiyonu arasındaki fark, bu iki versiyonun oluşumu için geçen zaman diliminde, doküman üzerinde yapılan tüm değişiklikleri ihtiva eder.</p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
Note: There is a file embedded within this post, please visit this post to download the file.
<h1>Konuyla İlgili Kitaplar</h1>
<p><a href="http://www.amazon.co.uk/Wicket-Action-Martijn-Dashorst/dp/1932394982%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1932394982" target="_blank"></a><a href="http://www.amazon.co.uk/Version-Control-Subversion-C-Pilato/dp/0596510330%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596510330"><img src="http://ecx.images-amazon.com/images/I/51iwjNGkQdL._SL160_.jpg" alt="" /></a>  <a href="http://www.amazon.co.uk/Pragmatic-Version-Control-Subversion-Programmers/dp/0977616657%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0977616657"><img src="http://ecx.images-amazon.com/images/I/51UfGnv2nYL._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/Expert-Spring-MVC-Web-Flow/dp/159059584X%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D159059584X"></a>   <a href="http://www.amazon.co.uk/Spring-Practice-Willie-Wheeler/dp/1935182056%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1935182056"></a><a href="http://www.amazon.co.uk/Pro-Wicket-Experts-Voice-Java/dp/1590597222%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1590597222" target="_blank"></a></p>
<p><i><br />
EOF (End of Fun)<br />
Özcan Acar<br />
</i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F04%2F07%2Fsubversion-ile-versiyon-kontrolu%2F&amp;linkname=Subversion%20%C4%B0le%20Versiyon%20Kontrol%C3%BC"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/04/07/subversion-ile-versiyon-kontrolu/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Extreme Programming Hakkında Bazı Soru ve Cevapları</title>
		<link>http://www.kurumsaljava.com/2009/03/03/extreme-programming-hakkinda-bazi-soru-ve-cevaplari/</link>
		<comments>http://www.kurumsaljava.com/2009/03/03/extreme-programming-hakkinda-bazi-soru-ve-cevaplari/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 10:14:28 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=622</guid>
		<description><![CDATA[<p><strong>Kullanıcı hikayesi (user story) nedir?</strong></p>
<p>XP projelerinde müşteri gereksinimlerinin yer aldığı kullanıcı hikayeleri oluşturulur. Bir kullanıcı hikayesi sistemin tipik bir özelliğini bir ya da iki cümle ile anlatan araçtır. Örneğin üye girişi olan bir sistemde, şöyle bir kullanıcı hikayesi düşünülebilir:</p>
<p><span id="more-622"></span></p>
<p><em>Kullanıcı isim ve şifreni kullanarak sisteme giriş yapar.</em></p>
<p>Kullanıcı hikayeleri hikaye kartlarına (story card) yazılır. Bu kartlar sürüm ve implementasyon planları yapılırken kullanılır. Her kullanıcı hikayesinin implementasyon zamanı programcılar tarafından tahmin edilir. Müşteri kullanıcı hikayelerine öncelik sırası vererek implementasyon sırasını tayin eder. Programcılar tarafından yapılan tahmin ve müşteri tarafından belirlenen öncelik sırası kullanıcı hikayesinin üzerinde yer aldığı hikaye kartlarına not edilir. Ayrıca müşteri tarafından oluşturulan akseptans (onay/kabul) testleri hikaye kartlarının arka bölümüne not edilir.</p>
<p><strong>Bir kullanıcı hikayesinin büyüklüğü ne kadar olmalı?</strong></p>
<p>Bu sorudaki büyüklük sıfatı ile kullanıcı hikayesinin kaç günde implemente edilebilir olduğu kastedilmektedir. Programcılar tarafından kullanıcı hikayelerin implementasyon süreleri gün bazında tahmin edilir. Bir kullanıcı hikayesinin en fazla dört yada beş günde implemente edilebilir yapıda olması gerekmektedir. Daha fazla zaman gerektiren kullanıcı hikayelerinin müşteri tarafından bölünerek, küçültülmeleri gerekmektedir.</p>
<p><strong>Kullanıcı hikayelerini kim oluşturur?</strong></p>
<p>Kullanıcı hikayelerini müşteri oluşturur, çünkü gereksinimleri en iyi bilen müşteridir.</p>
<p><strong>XP projelerinde müşterin programcılarla beraber çalışması talep edilir. Müşteri kendi işini bırakıp, nasıl proje için çalışabilir? Başka işi yok mu?</strong></p>
<p>Bu genelde müşterinin kendi işini gücünü bırakıp, projede başka işlerle uğraşması gerektiği şeklinde değerlendirilir, ama durum öyle değildir. Müşterinin programcılara yakın bir yerde olması, programcıların oluşan sorulara kısa sürede müşteri yardımıyla cevap bulmalarını kolaylaştırır. Asıl maksatta budur zaten. Müşteri gün boyunca programcıların sorularına cevap verir. Bunun yanı sıra kendi günlük işlerini takip eder. Çoğu zaman günlük işleri yapabilmek için bir bilgisayar yeterli olacaktır. Müşteri kendi işlerini yaparken ara sıra programcılara zaman ayırarak, soruları cevaplar.</p>
<p><strong>Birden fazla müşteri varsa, hangisinin sözü geçerlidir?</strong></p>
<p>Proje ekibinin karşısında sadece bir müşteri olmalıdır. Eğer birden fazla müşteri varsa, bu şahıslar bir araya gelerek, tek bir şahıs gibi programcı ekibi ile iletişim kurmalıdırlar.</p>
<p><strong>Sürüm planını kim oluşturur?</strong></p>
<p>Sürüm planı müşteri ve programcılar tarafından ortaklaşa oluşturulur. Ne ve hangi sıraya göre yapılması gerektiği müşteri tarafından belirlenir. Bu yüzden sürüm planının oluşumunda müşterinin ağırlığı daha fazladır. Planlama için zaman tahminleri programcılar tarafından yapılır. Bu şekilde programcılar proje planlama sürecine aktif olarak katılarak sorumluluk alırlar.</p>
<p><strong>Sürüm planını ne oranda sabittir?</strong></p>
<p>Proje başında oluşturulan sürüm planı projenin çeşitli safhalarında değişikliğe uğrayabilir. Bu doğaldır. Müşteri yazılım sisteminin ilk sürümleriyle gereksinimlerinin ne olduğunu daha iyi anlayabilir ve mevcut kullanıcı hikayeleri üzerinde değişilik yapılmasını talep edebilir ya da yeni kullanıcı hikayeleri oluşturabilir. Bu durumda sürüm planının değiştirilmesi gerekmektedir.</p>
<p><strong>Sürüm ve iterasyon arasındaki fark nedir?</strong></p>
<p>Sürüm yazılım sisteminin belirli bir versiyondaki halidir. Her yeni sürüm yeni özelliklerin implemente edildiği ve müşteri tarafından produktif kullanılan program versiyonudur. XP projelerinde her yeni sürüm bir ile dört ay süren bir çalışma sonunda oluşturulur. Müşteri tarafından seçilen kullanıcı hikayeleri belirli bir zamansal uzunluğa sahip olan iterasyonlarda implemente edilir. İterasyonlar bir ile dört haftalık zaman birimini kapsarlar.</p>
<p style="text-align: center;"><img class="alignnone" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_163" alt="" width="524" height="169" /></p>
<p style="text-align: left;">Bir önceki resimde yer alan sürüm beş iterasyondan oluşmaktadır. Her iterasyon iki hafta sürmektedir. Sürüm onuncu haftanın sonunda oluşturulmaktadır.</p>
<p style="text-align: left;"><strong>Hangi kullanıcı hikayesiyle işe başlanır?</strong></p>
<p style="text-align: left;">Bu sorunun cevabını sürüm ve iterasyon planı verir. Sürüm ve iterasyon planlarında müşteri tarafından belirlenen kullanıcı  hikayeleri yer alır. Müşteri, kullanıcı hikayeleri için sahip oldukları değere göre öncelik sırası belirler. Sürüm ve iterasyon planlarında kullanıcı  hikayeleri bu öncelik sırasına göre yer alırlar. Programcılar her iterasyonda, o iterasyon için seçilmiş olan kullanıcı hikayelerini öncelik sırası yüksekten düşüğe doğru implemente ederler. Buradaki ana amaç, müşteri için en değerli özelliklerin yer aldığı bir sürümü oluşturarak, müşteri tarafından kullanılabilir hale getirmektir. Bu yüzden her zaman müşteri açısından en değerli olan sistem özellikleri öncelikli olarak implemente edilir.</p>
<p style="text-align: left;"><strong>Kullanıcı hikayesi implementasyonu ne zaman tamamlanmıştır?</strong></p>
<p style="text-align: left;">Programcılar bir kullanıcı hikayesini test güdümlü implemente ederler. Testler tamamlandıktan sonra akseptans testleri yapılmak üzere kullanıcı hikayesinin yer aldığı hikaye kartı (story card) testçiye (tester) devredilir. Testçi müşteri tarafından tanımlanmış olan akseptans (onay/kabul) testlerini implemente eder. Akseptans testlerini geçen bir implementasyon bitmiş olarak kabul edilir.</p>
<p style="text-align: left;"><strong>Mevcut projeler üzerinde XP uygulanabilir mi?</strong></p>
<p style="text-align: left;">Bu büyük ölçüde projedeki JUnit testleri oluşturma alışkanlığına bağlı. XP test güdümlü implementasyonu şart koşmaktadır. Eğer programcılar tarafından programlara paralel olarak testler geliştiriliyorsa, test güdümlü implementasyona geçmeleri zor olmayacaktır. Bunun yanı sıra projedeki mevcut iletişim kültürü önemlidir. XP çok yönlü iletişimi gerekli kılmaktadır. Örneğin pair programming gibi tamamen iletişim ve takım işine bağımlı olan bir metot programcılar tarafından ne oranda uygulanabilir, bunun araştırılması gerekmektedir.</p>
<p style="text-align: left;">Sürekli entegrasyon, test güdümlü yazılım, müşterinin projeye dahil edilmesi, kısa sürelerde yeni sürüm oluşturulması gibi konular XP’yi yeni başlamayan projeler için zor adapte edilebilir kılmaktadırlar. XP’nin yeni projelerde adaptasyonu çok daha kolaydır.</p>
<p style="text-align: left;"><strong>Bir iterasyon süresi ne kadar olmalı?</strong></p>
<p style="text-align: left;">Bu yazılım sisteminin sahip olması gereken özelliklerle doğru orantılıdır. Eğer iki ay içinde ilk sürüm oluşturulması planlanıyorsa, iterasyon süresi bir ile iki hafta olacak şekilde seçilebilir. Bunun yanı sıra müşteri tarafından oluşturulan kullanıcı hikayelerinin implementasyonu için programcılar tarafından verilen tahminlerin dikkate alınması gerekmektedir. Örneğin programcılar tarafından ortalama her kullanıcı hikayesi için bir ile iki gün tahmin edilmişse,  bir haftalık iterasyonda en az üç en çok beş kullanıcı hikayesi implemente edilebilir. Eğer kullanıcı hikayeleri ortalama dört veya üzeri günde implemente edilebilir durumda ise, o zaman interasyonun en az iki hafta olarak seçilmesi gerekmektedir. İterasyon süresi sabittir ve uzatılamaz, bu yüzden seçilen kullanıcı hikayelerinin seçilen sürede implemente edilebilir yapıda olmaları gerekmektedir.</p>
<p style="text-align: left;"><strong>Akseptans (okay/kabul) testlerini kim oluşturur?</strong></p>
<p style="text-align: left;">Akseptans testleri kullanıcı hikayesini oluşturan müşteri tarafından tanımlanır. Akseptans testlerinin implementasyonunu programcılar yada testçiler üstlenir.</p>
<p style="text-align: left;"><strong>Kaç tane JUnit testi hazırlanmalı?<br />
</strong><br />
Produktif olarak kullanılan her sınıf için bir JUnit testi sınıfı oluşturulması gerekmektedir. Bu sınıf bünyesinde birden fazla test metodu yer alır. Produktif sınıfta bulunan her metodun test edilmesi gerekmektedir. Çoğu zaman oluşturulan test sınıfının büyüklüğü test edilen sınıfın 2-3 katı büyüklüğe sahiptir. Bu test adedi hakkında bir fikir sahibi olmanızı kolaylaştırır.</p>
<p style="text-align: left;"><strong>Kod paylaşımı nasıl yapılır?</strong></p>
<p style="text-align: left;">Kod paylaşımını kolaylaştırmak için bir versiyon kontrol sisteminin kullanılması şarttır. Subversion son zamanlarda kullanılan en popüler açık kaynaklı versiyon kontrol sistemi haline gelmiştir.</p>
<p style="text-align: left;"><a href="http://www.kurumsaljavaakademisi.com/egitim/seminer-programi/subversion-versiyon-kontrol-sistemi-kullanimi/" target="_blank">Kurumsal Java Akademisi Subversion eğitimi</a> »</p>
<p style="text-align: left;"><strong>Pair programming yaparken tecrübeli bir programcı ile tecrübesiz bir programcının beraber çalışması zaman ve kaynak kaybı değil midir?</strong></p>
<p style="text-align: left;">Hayır! Pair programming tekniği ile programcıların teknik anlamda ayni seviyeye gelmeleri sağlanır. Tecrübeli programcılar can, tecrübesiz programcılar patlıcan değildir :) Tecrübesiz programcılar için seminer düzenlemek yerine, onlara pair programming seanslarında teknoloji ve proje hakkında bilgi transfer etmek daha mantıklıdır.</p>
<p style="text-align: left;"><strong>Pair programming iki programcının bir kişilik iş çıkarması anlamına gelmez mi?</strong></p>
<p style="text-align: left;">Pair programming maliyetli bir yöntemdir. Lakin iki programcının beraber aynı implementasyon üzerinde çalışmasından sinerjiler doğar. Pair programming iş kalitesini yükseltir. Ayrıca pair programming ile kodun ve tasarımın iki değil dört göz ile kontrol edilmesini sağlanır.</p>
<p style="text-align: left;"><strong>XP projelerinde mimariyi ve tasarım nasıl oluşur?</strong></p>
<p style="text-align: left;">Mimari (altyapı) proje öncesinde yapılan keşif safhasında (Exploration Phase) oluşur. Programcılar müşteri tarafından oluşturulan kullanıcı hikayelerini okudukça, neye ihtiyaç duyduklarını anlarlar ve ona göre altyapıyı geliştirirler.</p>
<p style="text-align: left;">Proje öncesi detaylı tasarım oluşturulmaz. Tasarım test güdümlü implementasyon esnasında programcılar tarafından oluşturulur. Eğer programcılar implementasyon esnasında sorunlarla karşılaşırlarsa, refactoring yöntemleri kullanarak tasarım üzerinde değişiklik yaparlar. Unit testleri refactoring işleminin yapılmasını kolaylaştırır. Yapılması gereken değişiklikler sonraya bırakılmaz, çünkü bu ilerde maliyetin yükselmesine sebep olabilir.</p>
<p style="text-align: left;"><strong>XP projelerinde mimariyi ve tasarımı kim oluşturur?</strong></p>
<p style="text-align: left;">Programcılar.</p>
<p style="text-align: left;"><strong>Bilgi bankası olan bir sistemde test güdümlü yazılım nasıl uygulanır?</strong></p>
<p style="text-align: left;">Bunun çeşitli yöntemleri vardır. Öncelikle bilgi bankası işlemlerinin DAO (Dao Access Object) tasarım şablonu kullanılarak bir interface sınıf arkasında saklanması en mantıklı çözümdür. Mock sınıflar kullanılarak DAO katmanı simule edilebilir. Bu sistemin diğer bölümlerinin test güdümlü implementasyonunu kolaylaştırır. DAO kullanıldığı taktirde, gerçek bilgi bankasına olan bağımlılık azaltılır. DAO interface sınıfını değişik türde implemente ederek, bilgi bankası yerine başka bir yapıda kullanılabilir.</p>
<p style="text-align: left;">Hibernate ve IBatis gibi bir framework kullanılması durumunda, test güdümlü yazılımı mümkün kılabilmek için bu frameworklerin sunduğu interface sınıflar (SessionFactory, Session vs.) mock nesneler ile simüle edilebilir.</p>
<p style="text-align: left;"><strong>Planlama pokeri nedir?</strong></p>
<p style="text-align: left;"><strong></strong>Programcı bir kullanıcı hikayesini implementasyon öncesi tüm detaylarıyla bilmek zorunda değildir. Bir kullanıcı hikayesini en son detayına kadar kavramaya çalışmak zaman kaybı olabilir, çünkü kullanıcı hikayesinde yeralan müşteri gereksinimi değişikliğe uğrayabilir. Bu genelde müşterinin programın ilk sürümlerini görmesiyle gerçekleşir. Çalışır bir program aracılığıyla müşteri gereksinimlerini daha iyi kavrayacak ve gerekli değişiklikleri talep edecektir. Bu sebepten dolayı implementasyona başlamadan önce kullanıcı hikayesinin ihtiva ettiği tüm detayları tespit etmek faydalı olmayacaktır, çünkü kullanıcı  hikayesi değişikliğe ugrayabilir. Programcı ekibin kullanıcı hikayesi hakkında implementasyon için gerekli zamani tahmin edebilecek kadar bilgiye sahip olması yeterli olacaktır.</p>
<p style="text-align: left;">Programcılar müşteri tarafından seçilen kullanıcı hikayesinin implementasyon süresini tahmin ederler. Bu tahminler <strong>planlama pokerinde</strong> yapılır.</p>
<p style="text-align: center;"><img class="alignnone" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_166" alt="" width="506" height="223" /></p>
<p style="text-align: left;">Planlama pokeri yapılmayan tahminler bazen sağlıklı sonuçlar vermeyebilir. Bir programcı tarafından yapılan tahmin diger programcıları etkiliyebilir. Yada bazı programcılar herhangi bir sebepten dolayı tahmin etme sürecine aktif olarak dahil olmayabilirler. Bu gibi sebeplerden dolayı oluşan tahmin süreleri yanıltıcı olabilir. Daha geçerli tahminler elde edebilmek için planlama pokeri oynanır.</p>
<p style="text-align: left;">Planlama pokeri için kullanılan kartlar bir önceki resimde yer almaktadır. Her programcı bu kartların bir setine sahiptir. Planlama pokeri şu şekilde oynanır: Bir moderator ilk kullanıcı hikayesini okur. Müşteri bu kullanıcı hikayesi için implementasyon süresinin ne olduğunu sorar. Programcılar kısa bir zaman düşündükten sonra hep beraber planlama poker kartlarından birisini seçerek gösterirler. Çoğu zaman kullanılan kartlardakı değerler farklı olacaktır. En çok süreyi ve en az süreyi tahmin eden programcılardan bu sonuca nasıl vardıklarının açıklanması istenir. Verilen bilgiler dogrultusunda ortak bir değer bulunur.</p>
<p style="text-align: center;"><img class="alignnone" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_167" alt="" width="325" height="325" /></p>
<p style="TEXT-ALIGN: left">Tahminler için hikaye puanları (story points) kullanılır. 1 hikaye puanı örneğin 1 iş günü (8 saat) olabilir. Programcılar her kullanıcı hikayesini kendi başına tahmin etmek yerine, kullanıcı hikayelerini birbirleriyle kıyaslıyarak tahminde bulunurlar. Örneğin kullanıcı hikayesi A için 2 hikaye puanı tahmin edilmişse, kullanıcı hikayesi B bu değer göz önünde bulundurularak tahmin verilir. Eğer kullanıcı hikayesi B A dan üç katı daha büyükse, o zaman B için tahmin 2&#215;3 = 6 hikaye puanı olarak verilir.</p>
<p style="TEXT-ALIGN: left"><strong>Load Factor nedir?</strong></p>
<p style="TEXT-ALIGN: left">Bir kullanıcı hikayesinin ideal şartlarda implementasyonu için gerekli zaman dilimi ile normal şartlarda implementasyonu için gerekli zaman dilimi farklı olacaktır. Örneğin programcılar gün boyunca yazılım haricinde toplantı, bilgi alışverişi gibi işler için zaman ayırmak zorundadir. Bir programcının sekiz saatlik bir iş gününde sekiz saat program yazabilmesi ideal zaman dilimi olarak tanımlanır. Toplantı ve diğer işler için kullanılan zaman ideal zaman diliminde çikartıldığı zaman normal zaman dilimi elde edilir. Kullanıcı hikayelerinin tahminlerinde ideal ve normal zaman dilimlerinin göz önünde bulundurulması gerekmektedir, aksi taktirde kullanıcı hikayesi için yapılan tahmin gercekleri yansıtmıyacaktır. Gerçekci bir tahmin yapabilmek için load factor olarak bilinen değer kullanılır. Bu değer bir kullanıcı hikayesinin implementasyonu için kullanılan zamanın ideal zamana bölünmesiyle elde edilir. Örneğin bir kullanıcı hikayesi için 1 iş günü (8 saat) tahmin edilmiş ve programcı kullanıcı hikayesini 2 iş gününde tamamlamış olsun. Bu durumda load factor 16 / 8 = 2  olacaktır. Load factor için 2 ila 5 arasında bir değer normaldir. Tahmin yapılırken tahmin edilen implementasyon zamanı load factor ile çarpılır. Örneğin programcı bir kullanıcı hikayesini 2 iş gününde implemente edebileceğini düşünüyorsa, kullanıcı hikayesi için tahmin süresi 2 değil, 2 iş günü x 2 load factor = 4 olmalıdır. Bu şekilde daha gerçekci tahmin elde edilir.</p>
<p style="TEXT-ALIGN: left">Programcılar load factor değerini göz önünde bulundurarak, tahminde bulunurlar.</p>
<p style="TEXT-ALIGN: left"><strong>Spike solution nedir?</strong></p>
<p style="TEXT-ALIGN: left"><strong></strong>Eğer programcılar bir kullanıcı hikayesi için tahminde bulunamazlarsa küçük çaplı bir demo implementasyonu yaparak implementasyon süresini tahmin etmeye çalışırlar. XP dilinde bu işe <strong>spike solution</strong> ismi verilir. İdeal şartlarda bu işlemin sürüm planlama oyunundan önce yapılmış olması gerekir. Buradan sürüm planlama oyunu için kullanıcı hikayelerinin oyun öncesi hazırlanmış olması gerektiği sonucunu çikartabiliriz.</p>
<p style="TEXT-ALIGN: left">Programcılar yaptıkları denemeler sonunda kullanıcı hikayesi için tahmin verebilecek duruma gelirler.<br />
 </p>
<p style="text-align: left;">Özcan Acar</p>
]]></description>
			<content:encoded><![CDATA[<p><strong>Kullanıcı hikayesi (user story) nedir?</strong></p>
<p>XP projelerinde müşteri gereksinimlerinin yer aldığı kullanıcı hikayeleri oluşturulur. Bir kullanıcı hikayesi sistemin tipik bir özelliğini bir ya da iki cümle ile anlatan araçtır. Örneğin üye girişi olan bir sistemde, şöyle bir kullanıcı hikayesi düşünülebilir:</p>
<p><span id="more-622"></span></p>
<p><em>Kullanıcı isim ve şifreni kullanarak sisteme giriş yapar.</em></p>
<p>Kullanıcı hikayeleri hikaye kartlarına (story card) yazılır. Bu kartlar sürüm ve implementasyon planları yapılırken kullanılır. Her kullanıcı hikayesinin implementasyon zamanı programcılar tarafından tahmin edilir. Müşteri kullanıcı hikayelerine öncelik sırası vererek implementasyon sırasını tayin eder. Programcılar tarafından yapılan tahmin ve müşteri tarafından belirlenen öncelik sırası kullanıcı hikayesinin üzerinde yer aldığı hikaye kartlarına not edilir. Ayrıca müşteri tarafından oluşturulan akseptans (onay/kabul) testleri hikaye kartlarının arka bölümüne not edilir.</p>
<p><strong>Bir kullanıcı hikayesinin büyüklüğü ne kadar olmalı?</strong></p>
<p>Bu sorudaki büyüklük sıfatı ile kullanıcı hikayesinin kaç günde implemente edilebilir olduğu kastedilmektedir. Programcılar tarafından kullanıcı hikayelerin implementasyon süreleri gün bazında tahmin edilir. Bir kullanıcı hikayesinin en fazla dört yada beş günde implemente edilebilir yapıda olması gerekmektedir. Daha fazla zaman gerektiren kullanıcı hikayelerinin müşteri tarafından bölünerek, küçültülmeleri gerekmektedir.</p>
<p><strong>Kullanıcı hikayelerini kim oluşturur?</strong></p>
<p>Kullanıcı hikayelerini müşteri oluşturur, çünkü gereksinimleri en iyi bilen müşteridir.</p>
<p><strong>XP projelerinde müşterin programcılarla beraber çalışması talep edilir. Müşteri kendi işini bırakıp, nasıl proje için çalışabilir? Başka işi yok mu?</strong></p>
<p>Bu genelde müşterinin kendi işini gücünü bırakıp, projede başka işlerle uğraşması gerektiği şeklinde değerlendirilir, ama durum öyle değildir. Müşterinin programcılara yakın bir yerde olması, programcıların oluşan sorulara kısa sürede müşteri yardımıyla cevap bulmalarını kolaylaştırır. Asıl maksatta budur zaten. Müşteri gün boyunca programcıların sorularına cevap verir. Bunun yanı sıra kendi günlük işlerini takip eder. Çoğu zaman günlük işleri yapabilmek için bir bilgisayar yeterli olacaktır. Müşteri kendi işlerini yaparken ara sıra programcılara zaman ayırarak, soruları cevaplar.</p>
<p><strong>Birden fazla müşteri varsa, hangisinin sözü geçerlidir?</strong></p>
<p>Proje ekibinin karşısında sadece bir müşteri olmalıdır. Eğer birden fazla müşteri varsa, bu şahıslar bir araya gelerek, tek bir şahıs gibi programcı ekibi ile iletişim kurmalıdırlar.</p>
<p><strong>Sürüm planını kim oluşturur?</strong></p>
<p>Sürüm planı müşteri ve programcılar tarafından ortaklaşa oluşturulur. Ne ve hangi sıraya göre yapılması gerektiği müşteri tarafından belirlenir. Bu yüzden sürüm planının oluşumunda müşterinin ağırlığı daha fazladır. Planlama için zaman tahminleri programcılar tarafından yapılır. Bu şekilde programcılar proje planlama sürecine aktif olarak katılarak sorumluluk alırlar.</p>
<p><strong>Sürüm planını ne oranda sabittir?</strong></p>
<p>Proje başında oluşturulan sürüm planı projenin çeşitli safhalarında değişikliğe uğrayabilir. Bu doğaldır. Müşteri yazılım sisteminin ilk sürümleriyle gereksinimlerinin ne olduğunu daha iyi anlayabilir ve mevcut kullanıcı hikayeleri üzerinde değişilik yapılmasını talep edebilir ya da yeni kullanıcı hikayeleri oluşturabilir. Bu durumda sürüm planının değiştirilmesi gerekmektedir.</p>
<p><strong>Sürüm ve iterasyon arasındaki fark nedir?</strong></p>
<p>Sürüm yazılım sisteminin belirli bir versiyondaki halidir. Her yeni sürüm yeni özelliklerin implemente edildiği ve müşteri tarafından produktif kullanılan program versiyonudur. XP projelerinde her yeni sürüm bir ile dört ay süren bir çalışma sonunda oluşturulur. Müşteri tarafından seçilen kullanıcı hikayeleri belirli bir zamansal uzunluğa sahip olan iterasyonlarda implemente edilir. İterasyonlar bir ile dört haftalık zaman birimini kapsarlar.</p>
<p style="text-align: center;"><img class="alignnone" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_163" alt="" width="524" height="169" /></p>
<p style="text-align: left;">Bir önceki resimde yer alan sürüm beş iterasyondan oluşmaktadır. Her iterasyon iki hafta sürmektedir. Sürüm onuncu haftanın sonunda oluşturulmaktadır.</p>
<p style="text-align: left;"><strong>Hangi kullanıcı hikayesiyle işe başlanır?</strong></p>
<p style="text-align: left;">Bu sorunun cevabını sürüm ve iterasyon planı verir. Sürüm ve iterasyon planlarında müşteri tarafından belirlenen kullanıcı  hikayeleri yer alır. Müşteri, kullanıcı hikayeleri için sahip oldukları değere göre öncelik sırası belirler. Sürüm ve iterasyon planlarında kullanıcı  hikayeleri bu öncelik sırasına göre yer alırlar. Programcılar her iterasyonda, o iterasyon için seçilmiş olan kullanıcı hikayelerini öncelik sırası yüksekten düşüğe doğru implemente ederler. Buradaki ana amaç, müşteri için en değerli özelliklerin yer aldığı bir sürümü oluşturarak, müşteri tarafından kullanılabilir hale getirmektir. Bu yüzden her zaman müşteri açısından en değerli olan sistem özellikleri öncelikli olarak implemente edilir.</p>
<p style="text-align: left;"><strong>Kullanıcı hikayesi implementasyonu ne zaman tamamlanmıştır?</strong></p>
<p style="text-align: left;">Programcılar bir kullanıcı hikayesini test güdümlü implemente ederler. Testler tamamlandıktan sonra akseptans testleri yapılmak üzere kullanıcı hikayesinin yer aldığı hikaye kartı (story card) testçiye (tester) devredilir. Testçi müşteri tarafından tanımlanmış olan akseptans (onay/kabul) testlerini implemente eder. Akseptans testlerini geçen bir implementasyon bitmiş olarak kabul edilir.</p>
<p style="text-align: left;"><strong>Mevcut projeler üzerinde XP uygulanabilir mi?</strong></p>
<p style="text-align: left;">Bu büyük ölçüde projedeki JUnit testleri oluşturma alışkanlığına bağlı. XP test güdümlü implementasyonu şart koşmaktadır. Eğer programcılar tarafından programlara paralel olarak testler geliştiriliyorsa, test güdümlü implementasyona geçmeleri zor olmayacaktır. Bunun yanı sıra projedeki mevcut iletişim kültürü önemlidir. XP çok yönlü iletişimi gerekli kılmaktadır. Örneğin pair programming gibi tamamen iletişim ve takım işine bağımlı olan bir metot programcılar tarafından ne oranda uygulanabilir, bunun araştırılması gerekmektedir.</p>
<p style="text-align: left;">Sürekli entegrasyon, test güdümlü yazılım, müşterinin projeye dahil edilmesi, kısa sürelerde yeni sürüm oluşturulması gibi konular XP’yi yeni başlamayan projeler için zor adapte edilebilir kılmaktadırlar. XP’nin yeni projelerde adaptasyonu çok daha kolaydır.</p>
<p style="text-align: left;"><strong>Bir iterasyon süresi ne kadar olmalı?</strong></p>
<p style="text-align: left;">Bu yazılım sisteminin sahip olması gereken özelliklerle doğru orantılıdır. Eğer iki ay içinde ilk sürüm oluşturulması planlanıyorsa, iterasyon süresi bir ile iki hafta olacak şekilde seçilebilir. Bunun yanı sıra müşteri tarafından oluşturulan kullanıcı hikayelerinin implementasyonu için programcılar tarafından verilen tahminlerin dikkate alınması gerekmektedir. Örneğin programcılar tarafından ortalama her kullanıcı hikayesi için bir ile iki gün tahmin edilmişse,  bir haftalık iterasyonda en az üç en çok beş kullanıcı hikayesi implemente edilebilir. Eğer kullanıcı hikayeleri ortalama dört veya üzeri günde implemente edilebilir durumda ise, o zaman interasyonun en az iki hafta olarak seçilmesi gerekmektedir. İterasyon süresi sabittir ve uzatılamaz, bu yüzden seçilen kullanıcı hikayelerinin seçilen sürede implemente edilebilir yapıda olmaları gerekmektedir.</p>
<p style="text-align: left;"><strong>Akseptans (okay/kabul) testlerini kim oluşturur?</strong></p>
<p style="text-align: left;">Akseptans testleri kullanıcı hikayesini oluşturan müşteri tarafından tanımlanır. Akseptans testlerinin implementasyonunu programcılar yada testçiler üstlenir.</p>
<p style="text-align: left;"><strong>Kaç tane JUnit testi hazırlanmalı?<br />
</strong><br />
Produktif olarak kullanılan her sınıf için bir JUnit testi sınıfı oluşturulması gerekmektedir. Bu sınıf bünyesinde birden fazla test metodu yer alır. Produktif sınıfta bulunan her metodun test edilmesi gerekmektedir. Çoğu zaman oluşturulan test sınıfının büyüklüğü test edilen sınıfın 2-3 katı büyüklüğe sahiptir. Bu test adedi hakkında bir fikir sahibi olmanızı kolaylaştırır.</p>
<p style="text-align: left;"><strong>Kod paylaşımı nasıl yapılır?</strong></p>
<p style="text-align: left;">Kod paylaşımını kolaylaştırmak için bir versiyon kontrol sisteminin kullanılması şarttır. Subversion son zamanlarda kullanılan en popüler açık kaynaklı versiyon kontrol sistemi haline gelmiştir.</p>
<p style="text-align: left;"><a href="http://www.kurumsaljavaakademisi.com/egitim/seminer-programi/subversion-versiyon-kontrol-sistemi-kullanimi/" target="_blank">Kurumsal Java Akademisi Subversion eğitimi</a> »</p>
<p style="text-align: left;"><strong>Pair programming yaparken tecrübeli bir programcı ile tecrübesiz bir programcının beraber çalışması zaman ve kaynak kaybı değil midir?</strong></p>
<p style="text-align: left;">Hayır! Pair programming tekniği ile programcıların teknik anlamda ayni seviyeye gelmeleri sağlanır. Tecrübeli programcılar can, tecrübesiz programcılar patlıcan değildir :) Tecrübesiz programcılar için seminer düzenlemek yerine, onlara pair programming seanslarında teknoloji ve proje hakkında bilgi transfer etmek daha mantıklıdır.</p>
<p style="text-align: left;"><strong>Pair programming iki programcının bir kişilik iş çıkarması anlamına gelmez mi?</strong></p>
<p style="text-align: left;">Pair programming maliyetli bir yöntemdir. Lakin iki programcının beraber aynı implementasyon üzerinde çalışmasından sinerjiler doğar. Pair programming iş kalitesini yükseltir. Ayrıca pair programming ile kodun ve tasarımın iki değil dört göz ile kontrol edilmesini sağlanır.</p>
<p style="text-align: left;"><strong>XP projelerinde mimariyi ve tasarım nasıl oluşur?</strong></p>
<p style="text-align: left;">Mimari (altyapı) proje öncesinde yapılan keşif safhasında (Exploration Phase) oluşur. Programcılar müşteri tarafından oluşturulan kullanıcı hikayelerini okudukça, neye ihtiyaç duyduklarını anlarlar ve ona göre altyapıyı geliştirirler.</p>
<p style="text-align: left;">Proje öncesi detaylı tasarım oluşturulmaz. Tasarım test güdümlü implementasyon esnasında programcılar tarafından oluşturulur. Eğer programcılar implementasyon esnasında sorunlarla karşılaşırlarsa, refactoring yöntemleri kullanarak tasarım üzerinde değişiklik yaparlar. Unit testleri refactoring işleminin yapılmasını kolaylaştırır. Yapılması gereken değişiklikler sonraya bırakılmaz, çünkü bu ilerde maliyetin yükselmesine sebep olabilir.</p>
<p style="text-align: left;"><strong>XP projelerinde mimariyi ve tasarımı kim oluşturur?</strong></p>
<p style="text-align: left;">Programcılar.</p>
<p style="text-align: left;"><strong>Bilgi bankası olan bir sistemde test güdümlü yazılım nasıl uygulanır?</strong></p>
<p style="text-align: left;">Bunun çeşitli yöntemleri vardır. Öncelikle bilgi bankası işlemlerinin DAO (Dao Access Object) tasarım şablonu kullanılarak bir interface sınıf arkasında saklanması en mantıklı çözümdür. Mock sınıflar kullanılarak DAO katmanı simule edilebilir. Bu sistemin diğer bölümlerinin test güdümlü implementasyonunu kolaylaştırır. DAO kullanıldığı taktirde, gerçek bilgi bankasına olan bağımlılık azaltılır. DAO interface sınıfını değişik türde implemente ederek, bilgi bankası yerine başka bir yapıda kullanılabilir.</p>
<p style="text-align: left;">Hibernate ve IBatis gibi bir framework kullanılması durumunda, test güdümlü yazılımı mümkün kılabilmek için bu frameworklerin sunduğu interface sınıflar (SessionFactory, Session vs.) mock nesneler ile simüle edilebilir.</p>
<p style="text-align: left;"><strong>Planlama pokeri nedir?</strong></p>
<p style="text-align: left;"><strong></strong>Programcı bir kullanıcı hikayesini implementasyon öncesi tüm detaylarıyla bilmek zorunda değildir. Bir kullanıcı hikayesini en son detayına kadar kavramaya çalışmak zaman kaybı olabilir, çünkü kullanıcı hikayesinde yeralan müşteri gereksinimi değişikliğe uğrayabilir. Bu genelde müşterinin programın ilk sürümlerini görmesiyle gerçekleşir. Çalışır bir program aracılığıyla müşteri gereksinimlerini daha iyi kavrayacak ve gerekli değişiklikleri talep edecektir. Bu sebepten dolayı implementasyona başlamadan önce kullanıcı hikayesinin ihtiva ettiği tüm detayları tespit etmek faydalı olmayacaktır, çünkü kullanıcı  hikayesi değişikliğe ugrayabilir. Programcı ekibin kullanıcı hikayesi hakkında implementasyon için gerekli zamani tahmin edebilecek kadar bilgiye sahip olması yeterli olacaktır.</p>
<p style="text-align: left;">Programcılar müşteri tarafından seçilen kullanıcı hikayesinin implementasyon süresini tahmin ederler. Bu tahminler <strong>planlama pokerinde</strong> yapılır.</p>
<p style="text-align: center;"><img class="alignnone" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_166" alt="" width="506" height="223" /></p>
<p style="text-align: left;">Planlama pokeri yapılmayan tahminler bazen sağlıklı sonuçlar vermeyebilir. Bir programcı tarafından yapılan tahmin diger programcıları etkiliyebilir. Yada bazı programcılar herhangi bir sebepten dolayı tahmin etme sürecine aktif olarak dahil olmayabilirler. Bu gibi sebeplerden dolayı oluşan tahmin süreleri yanıltıcı olabilir. Daha geçerli tahminler elde edebilmek için planlama pokeri oynanır.</p>
<p style="text-align: left;">Planlama pokeri için kullanılan kartlar bir önceki resimde yer almaktadır. Her programcı bu kartların bir setine sahiptir. Planlama pokeri şu şekilde oynanır: Bir moderator ilk kullanıcı hikayesini okur. Müşteri bu kullanıcı hikayesi için implementasyon süresinin ne olduğunu sorar. Programcılar kısa bir zaman düşündükten sonra hep beraber planlama poker kartlarından birisini seçerek gösterirler. Çoğu zaman kullanılan kartlardakı değerler farklı olacaktır. En çok süreyi ve en az süreyi tahmin eden programcılardan bu sonuca nasıl vardıklarının açıklanması istenir. Verilen bilgiler dogrultusunda ortak bir değer bulunur.</p>
<p style="text-align: center;"><img class="alignnone" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_167" alt="" width="325" height="325" /></p>
<p style="TEXT-ALIGN: left">Tahminler için hikaye puanları (story points) kullanılır. 1 hikaye puanı örneğin 1 iş günü (8 saat) olabilir. Programcılar her kullanıcı hikayesini kendi başına tahmin etmek yerine, kullanıcı hikayelerini birbirleriyle kıyaslıyarak tahminde bulunurlar. Örneğin kullanıcı hikayesi A için 2 hikaye puanı tahmin edilmişse, kullanıcı hikayesi B bu değer göz önünde bulundurularak tahmin verilir. Eğer kullanıcı hikayesi B A dan üç katı daha büyükse, o zaman B için tahmin 2&#215;3 = 6 hikaye puanı olarak verilir.</p>
<p style="TEXT-ALIGN: left"><strong>Load Factor nedir?</strong></p>
<p style="TEXT-ALIGN: left">Bir kullanıcı hikayesinin ideal şartlarda implementasyonu için gerekli zaman dilimi ile normal şartlarda implementasyonu için gerekli zaman dilimi farklı olacaktır. Örneğin programcılar gün boyunca yazılım haricinde toplantı, bilgi alışverişi gibi işler için zaman ayırmak zorundadir. Bir programcının sekiz saatlik bir iş gününde sekiz saat program yazabilmesi ideal zaman dilimi olarak tanımlanır. Toplantı ve diğer işler için kullanılan zaman ideal zaman diliminde çikartıldığı zaman normal zaman dilimi elde edilir. Kullanıcı hikayelerinin tahminlerinde ideal ve normal zaman dilimlerinin göz önünde bulundurulması gerekmektedir, aksi taktirde kullanıcı hikayesi için yapılan tahmin gercekleri yansıtmıyacaktır. Gerçekci bir tahmin yapabilmek için load factor olarak bilinen değer kullanılır. Bu değer bir kullanıcı hikayesinin implementasyonu için kullanılan zamanın ideal zamana bölünmesiyle elde edilir. Örneğin bir kullanıcı hikayesi için 1 iş günü (8 saat) tahmin edilmiş ve programcı kullanıcı hikayesini 2 iş gününde tamamlamış olsun. Bu durumda load factor 16 / 8 = 2  olacaktır. Load factor için 2 ila 5 arasında bir değer normaldir. Tahmin yapılırken tahmin edilen implementasyon zamanı load factor ile çarpılır. Örneğin programcı bir kullanıcı hikayesini 2 iş gününde implemente edebileceğini düşünüyorsa, kullanıcı hikayesi için tahmin süresi 2 değil, 2 iş günü x 2 load factor = 4 olmalıdır. Bu şekilde daha gerçekci tahmin elde edilir.</p>
<p style="TEXT-ALIGN: left">Programcılar load factor değerini göz önünde bulundurarak, tahminde bulunurlar.</p>
<p style="TEXT-ALIGN: left"><strong>Spike solution nedir?</strong></p>
<p style="TEXT-ALIGN: left"><strong></strong>Eğer programcılar bir kullanıcı hikayesi için tahminde bulunamazlarsa küçük çaplı bir demo implementasyonu yaparak implementasyon süresini tahmin etmeye çalışırlar. XP dilinde bu işe <strong>spike solution</strong> ismi verilir. İdeal şartlarda bu işlemin sürüm planlama oyunundan önce yapılmış olması gerekir. Buradan sürüm planlama oyunu için kullanıcı hikayelerinin oyun öncesi hazırlanmış olması gerektiği sonucunu çikartabiliriz.</p>
<p style="TEXT-ALIGN: left">Programcılar yaptıkları denemeler sonunda kullanıcı hikayesi için tahmin verebilecek duruma gelirler.<br />
 </p>
<p style="text-align: left;">Özcan Acar</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F03%2F03%2Fextreme-programming-hakkinda-bazi-soru-ve-cevaplari%2F&amp;linkname=Extreme%20Programming%20Hakk%C4%B1nda%20Baz%C4%B1%20Soru%20ve%20Cevaplar%C4%B1"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/03/03/extreme-programming-hakkinda-bazi-soru-ve-cevaplari/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Neden sürekli entegre edilmeli?</title>
		<link>http://www.kurumsaljava.com/2009/03/03/neden-surekli-entegre-edilmeli/</link>
		<comments>http://www.kurumsaljava.com/2009/03/03/neden-surekli-entegre-edilmeli/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 10:05:52 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Sürekli Entegrasyon]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=618</guid>
		<description><![CDATA[<p>Oluşturduğunuz yazılım sistemini sürekli entegre etmiyorsaniz, zamanı gelince toptan entegre etmek zorundasınız.  Bunun, neden yazılım hayatınızda karşılaşabileceğiniz en büyük sorun olabileceğini bir örnek vererek açıklamak istiyorum.</p>
<p><span id="more-618"></span></p>
<p><strong>Şimdi şunu hayal edin:</strong> Yeni bir otomobilin tasarlanması projesinde yer aldınız. Otomobil tasarlandı ve otomobili oluşturan parçalar 5 değişik ülkede, 20 değişik firma tarafından üretildi. Bu ülkelerde kullanılan uzunluk ve ağırlık birimleri (metre, kg vs.) değişik olabilir. Görev dağılımı esnasında yanlış anlamalardan dolayı üretilen parçalar birbirine uyumlu olmayabilir. Eğer tüm parçalar üretildikten sonra bir çırpıda tüm otomobili oluşturmak isterseniz, üretim sürecinde meydana gelen hataları daha önceden tespit edemediğiniz için, yamuk yumuk bir otomobil ortaya çıkacaktır. Ama üretim esnasında koordineli bir şekilde otomobili parça parça bir araya getirip, parçalar uyuşuyor mu diye kontrol etmiş olsaydınız, meydana gelen uyuşmazlıkları çok erken tespit ederek, gerekli değişiklikleri yapabilirdiniz. Bu yazılım sektörü için de geçerli.  Oluşturulan sistem komponentleri ne kadar erken entegre edilirse, oluşan uyuşmazlıklar o kadar erken tespit edilir ve gerekli değişiklikler yapılabilir.</p>
<p>Sürekli entegrasyon çevik süreçlerde çok önemli bir yazılım metodudur. Sistem üzerinde yapılan her değişiklik sürekli entegrasyonu otomatik olarak gerçekleştiren sunucu tarafından kontrol edilir.  Yazılımda kırılmalar oluşması (compile hataları, eksik sınıflar vs.) durumunda, tüm ekip sürekli entegrasyon sunucusu tarafından uyarılır. Bu geribildirim sayesinde entegrasyonun ne safhada olduğu anlaşılır.</p>
<p>Sürekli entegrasyon hakkında diğer bir makalemi</p>
<p><a href="http://www.kurumsaljava.com/2008/11/26/surekli-entegrasyon-continuous-integration/">http://www.kurumsaljava.com/2008/11/26/surekli-entegrasyon-continuous-integration/</a></p>
<p>adresinden edinebilirsiniz.</p>
<p>Özcan Acar</p>
]]></description>
			<content:encoded><![CDATA[<p>Oluşturduğunuz yazılım sistemini sürekli entegre etmiyorsaniz, zamanı gelince toptan entegre etmek zorundasınız.  Bunun, neden yazılım hayatınızda karşılaşabileceğiniz en büyük sorun olabileceğini bir örnek vererek açıklamak istiyorum.</p>
<p><span id="more-618"></span></p>
<p><strong>Şimdi şunu hayal edin:</strong> Yeni bir otomobilin tasarlanması projesinde yer aldınız. Otomobil tasarlandı ve otomobili oluşturan parçalar 5 değişik ülkede, 20 değişik firma tarafından üretildi. Bu ülkelerde kullanılan uzunluk ve ağırlık birimleri (metre, kg vs.) değişik olabilir. Görev dağılımı esnasında yanlış anlamalardan dolayı üretilen parçalar birbirine uyumlu olmayabilir. Eğer tüm parçalar üretildikten sonra bir çırpıda tüm otomobili oluşturmak isterseniz, üretim sürecinde meydana gelen hataları daha önceden tespit edemediğiniz için, yamuk yumuk bir otomobil ortaya çıkacaktır. Ama üretim esnasında koordineli bir şekilde otomobili parça parça bir araya getirip, parçalar uyuşuyor mu diye kontrol etmiş olsaydınız, meydana gelen uyuşmazlıkları çok erken tespit ederek, gerekli değişiklikleri yapabilirdiniz. Bu yazılım sektörü için de geçerli.  Oluşturulan sistem komponentleri ne kadar erken entegre edilirse, oluşan uyuşmazlıklar o kadar erken tespit edilir ve gerekli değişiklikler yapılabilir.</p>
<p>Sürekli entegrasyon çevik süreçlerde çok önemli bir yazılım metodudur. Sistem üzerinde yapılan her değişiklik sürekli entegrasyonu otomatik olarak gerçekleştiren sunucu tarafından kontrol edilir.  Yazılımda kırılmalar oluşması (compile hataları, eksik sınıflar vs.) durumunda, tüm ekip sürekli entegrasyon sunucusu tarafından uyarılır. Bu geribildirim sayesinde entegrasyonun ne safhada olduğu anlaşılır.</p>
<p>Sürekli entegrasyon hakkında diğer bir makalemi</p>
<p><a href="http://www.kurumsaljava.com/2008/11/26/surekli-entegrasyon-continuous-integration/">http://www.kurumsaljava.com/2008/11/26/surekli-entegrasyon-continuous-integration/</a></p>
<p>adresinden edinebilirsiniz.</p>
<p>Özcan Acar</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F03%2F03%2Fneden-surekli-entegre-edilmeli%2F&amp;linkname=Neden%20s%C3%BCrekli%20entegre%20edilmeli%3F"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/03/03/neden-surekli-entegre-edilmeli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Çevik Sürece Geciş Nasıl Olmalı?</title>
		<link>http://www.kurumsaljava.com/2009/02/13/cevik-surece-gecis-nasil-olmali/</link>
		<comments>http://www.kurumsaljava.com/2009/02/13/cevik-surece-gecis-nasil-olmali/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 14:13:53 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=558</guid>
		<description><![CDATA[<p>Extreme Programming ve Scrum gibi çevik süreçlerin popüler olmasının sebebi, müşteri gereksinimlerini tatmin edebilen yazılım sistemlerinin oluşturulma sürecini kolaylastırmalarında yatmaktadır. Bu böyle olunca, yazılım firmaları, yıllarca şelala (Waterfall) metodundan çektikleri sıkıntılardan kurtulmak amacıyla çevik süreçlerin adaptasyonuna yönelmektedirler. Doğal olarak burada firmaların çevik sürecin adaptasyonu esnasında kafalarında oluşan bazı sorular var. Bunlardan en önemli iki soru şöyle: <span id="more-558"></span></p>
<ol>
<li>Çevik sürece hemen ve tüm neticelerine katlanarak mı geçilmeli?</li>
<li>Çevik süreç adım adım mı yerleştirilmeli?</li>
</ol>
<p>Bu soruların cevaplandırılabilmesi, firma ve sahip olduğu çalışanlarının çalışma kültürü ile doğrudan orantılıdır. Genelde çevik sürecin uygulanmasının önündeki en büyük engellerden birisi, çalışanların sahip oldukları alışkanları ve çalışma yöntemleridir. Çalışanlar yeniliklere ve değişikliklere içgüdüsel olarak karşı koyarlar. Bu yüzden çevik sürece geciş gibi çok yan etkileri olabilecek bir girişimin başarısı, çalışanların değişimle yaşayabilme özellikleriyle doğrudan orantılıdır.</p>
<p>Çevik süreci adapte etmiş bir çok takım, yazılım esnasında içinden çıkılamaz problemlerle karşılaşmakta ve doğal olarak suçu çevik süreçte bulmaktadırlar. <strong>Acaba suç gerçekten çevik süreçte mi?</strong></p>
<p>Eğer bir takım &#8220;<strong>çevik süreci adapte ettik, lakin karşılaştığımız sorunlar günden güne artıyor, işin içinden çıkamıyoruz</strong>&#8221; şeklinde kendini savunuyorsa, o zaman o takımın, çevik süreci nasıl adapte ettiğinin incelenmesinde fayda vardır.  İzlenimlerime göre, böyle takımlar tarafından çevik süreç ya yanlış  ya da eksik olarak adapte edilmektedir. Örneğin birçok takım sadece Scrum kullanarak çevik olabileceklerini düşünüyorlar.  Scrum hiçbir yazılım mühendisliği metodu ihtiva etmez! Eğer çevik olmak istiyorsanız, yazılım metotlarınızın çevik olması gerekmektedir. Bunu da en iyi sağlayayan <a href="http://www.kurumsaljava.com/2008/11/21/extreme-programming-nedir/" target="_blank">Extreme Programming</a>&#8216;dir. Extreme Programming <strong>eşli programlama</strong> (pair programming &#8211; PP), <a href="http://www.kurumsaljava.com/2008/11/26/surekli-entegrasyon-continuous-integration/" target="_blank"><strong>sürekli entegrasyon</strong></a> (continuous integration &#8211; CI), <a href="http://www.kurumsaljava.com/2008/11/26/test-gudumlu-yazilim-test-driven-development-tdd/" target="_blank"><strong>test güdümlü yazılım</strong></a> (test driven development - TDD), <strong>müşteri ile beraber çalışma</strong> (on site customer) gibi birçok metoda sahiptir. Bu metotlar uygulandığı taktirde çevik çalışma ortamı oluşturulabilir ve oluşan sorunlar ortadan kaldırılabilir. Bu Scrum&#8217;ın gereksiz olduğu anlamına gelmez. Scrum proje planlama ve yönetme alanında kendine has yöntemleri ile çevik sürece katkıda bulunur. Scrum Extreme Programming ile birleştiği anda çevik süreç, gerçek ve oluşan sorunları aşabilen bir çevik süreç haline gelir, çünkü sorunları aşabilmek için ekibin elinde bir çok yeni teknik metot (PP, CI, TDD) bulunmaktadır. İşte çevik olmak isteyipte, olamayan takımların ana sorunu, PP, CI ve TDD gibi metotları tanımamaları ve bu yüzden dolayı uygulayamamaların da yatmaktadır. Atalarımızın da dediği gibi &#8220;<strong>alet çalışır, el övünür&#8221;</strong>. Eğer çekiciniz yoksa, çiviyi çakamassınız. Eğer sürekli entegrasyon yapmıyorsanız, o zaman müşteriye kısa aralıklarla, çalışan entegre bir prototip sunamazsınız. Test güdümlü çalışmıyorsanız, kodu yeniden yapılandırmanız (refactoring) hemen hemen imkansız hale gelir. Eğer kodu yeniden yapılandırmanız mümkün değilse, müşterinin yeni gereksinimlerini ya da istediği değişiklikleri implemente etmeniz imkansız hale gelir. Eğer eşli programlamıyorsanız, programcılar aynı seviyede koda hakım olamaz ve kod sahiplenmeleri başlar!</p>
<p>Şelale modelinden XP gibi bir çevik sürece geciç, hiç unit test yazmamış bir programcının, birden bire TDD tarzı programlama ile yüzyüze gelmesi gibi birşeydir.  Daha öncede belirttiğim gibi takımın bu gibi radikal değişikliklerle yaşayabilmesi ve kabullenmesi çok önemlidir.  Şimdi çevik sürece geçişin nasıl olması gerektiğini, yazının başında yer alan iki soruya doğrudan cevap vererek inceleyelim.</p>
<h4>Çevik süreç adım adım mı yerleştirilmeli?</h4>
<p>Çoğu takım çevik sürece adım adım geçmeyi tercih etmektedir.  Genelde takımın içinde bulunduğu ortam bu tür bir kararın verilmesini zorunlu kılmaktadır. Çevik sürece adım adım geçiş çogu zaman çok uzun sürebileceği için başarılı olmayacaktır. Buradaki başarısızlığın en önemli faktörü yine takım elemanlarının kendileridir. Takım elemanları sahip oldukları çalışma alışkanlıklarını bırakmakta çok zorlanacak ve dolaylı olarak istemeyerekte olsa yeni yerleştirilmeye çalışılan çevik süreci sabote edeceklerdir. Burada yeni çevik metotlar adapte edilerek, yazılımcı bir nevi soğuk suyun içine atılmalı ve yeni metotlarla yüzmeyi yani çalışmayı ögrenmesi sağlanmalıdır. Ancak bu şekilde sahış, değişikligi şok terapisi ile kabullenme eğiliminde olacaktır. Bu eski kuramların ve çalışma metotlarının tekneden atılmasını kolaylaştırır.</p>
<h4>Çevik sürece hemen ve tüm neticelerine katlanarak mı geçilmeli?</h4>
<p>Bu sorunun cevabı nettir: evet! Tamamen çevik bir yazılım modeline geçmek istiyorsanız, o zaman şimdiye kadar yaptıklarınızı unutmanız gerekiyor. Bu, şimdiye kadar çevik çalışmadığınız anlamına gelmez. Ama doğal olarak her çalışma ekibinin kendine has yöntemleri var ve bunları değiştirmeleri çok zor. Bu yüzden bir celsede çevik sürece geçip, uygulamaya başlanması gerekiyor, aksi taktirde çevik süreç işlemeyecektir.</p>
<p>XP nin temel prensiplerinden birisi de <strong>cesaret</strong>. Ekibin ve firmanın yeni bir başlangıç için tüm gücünü kullanıp, tam anlamıyla çevik sürece geçmesi lazım, yarı gönülle bu iş ne yazık ki yürümez!</p>
<p>Kısaca özetleyecek olursak:</p>
<ol>
<li>Çevik sürece geciş hemen olmalı. TDD, CI, PP gibi teknikler hemen öğrenilmeli, zamana bırakılmamalı.</li>
<li>Sadece Scrum ile çevik olunması imkansız.  Scrum&#8217;ın yanında XP ya da FDD gibi teknik metotlar içeren bir çevik sürecin kullanılması gerekli. Gerekli teknik araçlar olmadan bir ev inşa etmeniz imkansız!</li>
</ol>
]]></description>
			<content:encoded><![CDATA[<p>Extreme Programming ve Scrum gibi çevik süreçlerin popüler olmasının sebebi, müşteri gereksinimlerini tatmin edebilen yazılım sistemlerinin oluşturulma sürecini kolaylastırmalarında yatmaktadır. Bu böyle olunca, yazılım firmaları, yıllarca şelala (Waterfall) metodundan çektikleri sıkıntılardan kurtulmak amacıyla çevik süreçlerin adaptasyonuna yönelmektedirler. Doğal olarak burada firmaların çevik sürecin adaptasyonu esnasında kafalarında oluşan bazı sorular var. Bunlardan en önemli iki soru şöyle: <span id="more-558"></span></p>
<ol>
<li>Çevik sürece hemen ve tüm neticelerine katlanarak mı geçilmeli?</li>
<li>Çevik süreç adım adım mı yerleştirilmeli?</li>
</ol>
<p>Bu soruların cevaplandırılabilmesi, firma ve sahip olduğu çalışanlarının çalışma kültürü ile doğrudan orantılıdır. Genelde çevik sürecin uygulanmasının önündeki en büyük engellerden birisi, çalışanların sahip oldukları alışkanları ve çalışma yöntemleridir. Çalışanlar yeniliklere ve değişikliklere içgüdüsel olarak karşı koyarlar. Bu yüzden çevik sürece geciş gibi çok yan etkileri olabilecek bir girişimin başarısı, çalışanların değişimle yaşayabilme özellikleriyle doğrudan orantılıdır.</p>
<p>Çevik süreci adapte etmiş bir çok takım, yazılım esnasında içinden çıkılamaz problemlerle karşılaşmakta ve doğal olarak suçu çevik süreçte bulmaktadırlar. <strong>Acaba suç gerçekten çevik süreçte mi?</strong></p>
<p>Eğer bir takım &#8220;<strong>çevik süreci adapte ettik, lakin karşılaştığımız sorunlar günden güne artıyor, işin içinden çıkamıyoruz</strong>&#8221; şeklinde kendini savunuyorsa, o zaman o takımın, çevik süreci nasıl adapte ettiğinin incelenmesinde fayda vardır.  İzlenimlerime göre, böyle takımlar tarafından çevik süreç ya yanlış  ya da eksik olarak adapte edilmektedir. Örneğin birçok takım sadece Scrum kullanarak çevik olabileceklerini düşünüyorlar.  Scrum hiçbir yazılım mühendisliği metodu ihtiva etmez! Eğer çevik olmak istiyorsanız, yazılım metotlarınızın çevik olması gerekmektedir. Bunu da en iyi sağlayayan <a href="http://www.kurumsaljava.com/2008/11/21/extreme-programming-nedir/" target="_blank">Extreme Programming</a>&#8216;dir. Extreme Programming <strong>eşli programlama</strong> (pair programming &#8211; PP), <a href="http://www.kurumsaljava.com/2008/11/26/surekli-entegrasyon-continuous-integration/" target="_blank"><strong>sürekli entegrasyon</strong></a> (continuous integration &#8211; CI), <a href="http://www.kurumsaljava.com/2008/11/26/test-gudumlu-yazilim-test-driven-development-tdd/" target="_blank"><strong>test güdümlü yazılım</strong></a> (test driven development - TDD), <strong>müşteri ile beraber çalışma</strong> (on site customer) gibi birçok metoda sahiptir. Bu metotlar uygulandığı taktirde çevik çalışma ortamı oluşturulabilir ve oluşan sorunlar ortadan kaldırılabilir. Bu Scrum&#8217;ın gereksiz olduğu anlamına gelmez. Scrum proje planlama ve yönetme alanında kendine has yöntemleri ile çevik sürece katkıda bulunur. Scrum Extreme Programming ile birleştiği anda çevik süreç, gerçek ve oluşan sorunları aşabilen bir çevik süreç haline gelir, çünkü sorunları aşabilmek için ekibin elinde bir çok yeni teknik metot (PP, CI, TDD) bulunmaktadır. İşte çevik olmak isteyipte, olamayan takımların ana sorunu, PP, CI ve TDD gibi metotları tanımamaları ve bu yüzden dolayı uygulayamamaların da yatmaktadır. Atalarımızın da dediği gibi &#8220;<strong>alet çalışır, el övünür&#8221;</strong>. Eğer çekiciniz yoksa, çiviyi çakamassınız. Eğer sürekli entegrasyon yapmıyorsanız, o zaman müşteriye kısa aralıklarla, çalışan entegre bir prototip sunamazsınız. Test güdümlü çalışmıyorsanız, kodu yeniden yapılandırmanız (refactoring) hemen hemen imkansız hale gelir. Eğer kodu yeniden yapılandırmanız mümkün değilse, müşterinin yeni gereksinimlerini ya da istediği değişiklikleri implemente etmeniz imkansız hale gelir. Eğer eşli programlamıyorsanız, programcılar aynı seviyede koda hakım olamaz ve kod sahiplenmeleri başlar!</p>
<p>Şelale modelinden XP gibi bir çevik sürece geciç, hiç unit test yazmamış bir programcının, birden bire TDD tarzı programlama ile yüzyüze gelmesi gibi birşeydir.  Daha öncede belirttiğim gibi takımın bu gibi radikal değişikliklerle yaşayabilmesi ve kabullenmesi çok önemlidir.  Şimdi çevik sürece geçişin nasıl olması gerektiğini, yazının başında yer alan iki soruya doğrudan cevap vererek inceleyelim.</p>
<h4>Çevik süreç adım adım mı yerleştirilmeli?</h4>
<p>Çoğu takım çevik sürece adım adım geçmeyi tercih etmektedir.  Genelde takımın içinde bulunduğu ortam bu tür bir kararın verilmesini zorunlu kılmaktadır. Çevik sürece adım adım geçiş çogu zaman çok uzun sürebileceği için başarılı olmayacaktır. Buradaki başarısızlığın en önemli faktörü yine takım elemanlarının kendileridir. Takım elemanları sahip oldukları çalışma alışkanlıklarını bırakmakta çok zorlanacak ve dolaylı olarak istemeyerekte olsa yeni yerleştirilmeye çalışılan çevik süreci sabote edeceklerdir. Burada yeni çevik metotlar adapte edilerek, yazılımcı bir nevi soğuk suyun içine atılmalı ve yeni metotlarla yüzmeyi yani çalışmayı ögrenmesi sağlanmalıdır. Ancak bu şekilde sahış, değişikligi şok terapisi ile kabullenme eğiliminde olacaktır. Bu eski kuramların ve çalışma metotlarının tekneden atılmasını kolaylaştırır.</p>
<h4>Çevik sürece hemen ve tüm neticelerine katlanarak mı geçilmeli?</h4>
<p>Bu sorunun cevabı nettir: evet! Tamamen çevik bir yazılım modeline geçmek istiyorsanız, o zaman şimdiye kadar yaptıklarınızı unutmanız gerekiyor. Bu, şimdiye kadar çevik çalışmadığınız anlamına gelmez. Ama doğal olarak her çalışma ekibinin kendine has yöntemleri var ve bunları değiştirmeleri çok zor. Bu yüzden bir celsede çevik sürece geçip, uygulamaya başlanması gerekiyor, aksi taktirde çevik süreç işlemeyecektir.</p>
<p>XP nin temel prensiplerinden birisi de <strong>cesaret</strong>. Ekibin ve firmanın yeni bir başlangıç için tüm gücünü kullanıp, tam anlamıyla çevik sürece geçmesi lazım, yarı gönülle bu iş ne yazık ki yürümez!</p>
<p>Kısaca özetleyecek olursak:</p>
<ol>
<li>Çevik sürece geciş hemen olmalı. TDD, CI, PP gibi teknikler hemen öğrenilmeli, zamana bırakılmamalı.</li>
<li>Sadece Scrum ile çevik olunması imkansız.  Scrum&#8217;ın yanında XP ya da FDD gibi teknik metotlar içeren bir çevik sürecin kullanılması gerekli. Gerekli teknik araçlar olmadan bir ev inşa etmeniz imkansız!</li>
</ol>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F02%2F13%2Fcevik-surece-gecis-nasil-olmali%2F&amp;linkname=%C3%87evik%20S%C3%BCrece%20Geci%C5%9F%20Nas%C4%B1l%20Olmal%C4%B1%3F"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/02/13/cevik-surece-gecis-nasil-olmali/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Türkiye&#8217;nin İlk Extreme Programming Konulu Kitabı</title>
		<link>http://www.kurumsaljava.com/2009/02/08/turkiyenin-ilk-extreme-programming-konulu-kitabi/</link>
		<comments>http://www.kurumsaljava.com/2009/02/08/turkiyenin-ilk-extreme-programming-konulu-kitabi/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 12:36:17 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Haberler]]></category>
		<category><![CDATA[Kaynak Kitaplar]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=514</guid>
		<description><![CDATA[<p>Extreme Programming ismini taşıyan yeni kitabım önümüzdeki haftadan itibaren satışa sunulacak.</p>
<p>Kitabın ana konusu çevik süreç olan Extreme Programming’in uygulanış tarzını tanıtmaktır. Kitabın ilk bölümlerinde Extreme Programming hakkında teorik bilgiler yer almaktadır. Extreme Programming yöntemlerini uygulayabilmek için bu temel teorik bilgilerin alınmasında fayda vardır. Kitap <strong>18 bölüm</strong> ve <strong>504 sayfadan</strong> oluşmaktadır. Bu bölümlerin içerikleri özetle şöyledir:</p>
<p><span id="more-514"></span></p>
<p><strong>Bölüm 1:</strong><br />
Birinci bölümde şelale (waterfall) tarzı yazılım yöntemleri ve projelerde oluşan sorunlar yer almaktadır. Bu sorunları gidermek için çevik süreçlerin kullanımı tavsiye edilmektedir. Extreme Programming (XP) bir çevik süreç olarak projelerde oluşan sorunlara cevap verebilecek yazılım metotlarına sahiptir. Bu bölümde Extreme Programming’in sahip olduğu değerler, prensipler ve teknikler tanıtılmaktadır.</p>
<p><strong>Bölüm 2:<br />
</strong>XP projelerinde sürüm ve iterasyon planları oluşturularak, projenin gidişatı belirlenir. Planlama oyunu olarak isimlendirilen süreçte müşteri tarafından, programcıların implemente (yazılım) edeceği özellikler seçilir. Programcılar gerekli tahminleri yaparak, müşterinin implementasyon için gerekli süre hakkında fikir sahibi olmasını sağlarlar. Bu bölümde sürüm ve iterasyon planlarının nasıl oluşturulduğu incelenmektedir.</p>
<p><strong>Bölüm 3:</strong><br />
XP iletişime dayalı bir süreçtir. Ekip çalışanları arasında iletişimi güçlendirmek için günlük Stand-up (ayakta) toplantılar düzenlenir. Bunun yanısıra belirli aralıklarla retrospective (geriye bakış) toplantılarda projeye geri bakış sağlanarak, oluşan hatalar üzerinde tartışılır ve çözüm aranır.</p>
<p>XP projelerinde programcılar pair programming metoduyla eşli çalışırlar. Bu programcıların kısa sürede teknik alanda aynı seviyeye gelmelerini kolaylaştırır. XP projelerinde çalışma ortamının iletişimin önemi göz önünde bulundurularak oluşturulması gerekmektedir. Üçüncü bölümde Stand-up ve retrospective toplantılar yanı sıra, pair programming ve çalışma ortamının oluşturulması konuları tematize edilir. Bunun yanı sıra proje hakkında bilgilerin paylaşıldığı Wiki sistemleri hakkında bilgi verilir. Trac ve Bugzilla gibi araçlar kullanılarak bilgi ve hata yönetimi sağlanır.</p>
<p><strong>Bölüm 4:</strong><br />
Bu bölümde XP projelerinde çalışma ortamlarının nasıl yapılandırıldığı ve ne tür araçlardan faydalanıldığı incelenmektedir.</p>
<p><strong>Bölüm 5:</strong><br />
Teorik bilgilerin ardından, XP’nin nasıl uygulandığını göstermek amacıyla beşinci bölümde örnek bir XP projesi yer almaktadır. Bu bölümde müşteri gereksinimlerinin nasıl tespit edildiği ve sürüm ve iterasyon planlarının nasıl oluşturulduğu bir örnek üzerinde gösterilmektedir.</p>
<p><strong>Bölüm 6:</strong><br />
Proje öncesinde sıfırıncı iterasyonda programcılar ihtiyaç duydukları teknik ortamı oluşturmaya başlarlar. Altıncı bölümde Eclipse, Ant, Tomcat, Subclipse, JUnit, HSQL, DBUnit gibi araçların kullanımı ve kurulumu incelenmektedir.</p>
<p><strong>Bölüm 7:</strong><br />
Yazılım sürecinde uygulanması gereken tasarım prensipleri bu bölümün ana konusudur. Esnek bağ, açık kapalı prensibi, tek sorumluluk prensibi, Liskov yerine geçme prensibi, bağımlılıkların tersine çevrilmesi prensibi, arayüz ayırma prensibi ve paket tasarım prensipleri detaylı ve örnekli olarak bu bölümde incelenmektedir.</p>
<p><strong>Bölüm 8:</strong><br />
Unit testleri oluşturularak sistem komponentleri yazılım esnasında test edilir. Akseptans testleri, entegrasyon testleri, regresyon testleri, performans testleri gibi değişik türde testler oluşturmak mümkündür.</p>
<p>Java projelerinde JUnit test frameworkü kullanılarak testler oluşturulur. Sekizinci bölümde JUnit kullanılarak unit testlerin nasıl oluşturulduğu uygulamalı olarak gösterilmektedir.</p>
<p><strong>Bölüm 9:</strong><br />
XP projelerinde yazılım test güdümlü (Test Driven Development – TDD) yapılır. Dokuzucu bölümde TDD sürecinin nasıl çalıştığı ve programcıların TDD yöntemleriyle implementasyonu nasıl ilerlettikleri yer almaktadır.</p>
<p><strong>Bölüm 10:</strong><br />
Onuncu bölümde pratik uygulamalı olarak shop sisteminin login modülü implemente edilmektedir. İmplementasyon için akseptans testlerinden yola çıkılarak, bilgibankasına kadar uzanan yapının adım adım TDD kullanılarak nasıl implemente edildiği gösterilmektedir. Bu bölümde sistem komponentlerini simule etmek için mock sınıfların kullanımı yer almaktadır.</p>
<p><strong>Bölüm 11:</strong><br />
İmplementasyonun çalışır durumda olduğunu kanıtlamak için akseptans testleri oluşturulur. Bu testler kullanıcı hikayeleri gibi müşteri tarafından tanımlanır ve programcılar tarafından implemente edilir. On birinci bölümüde akseptans testlerinin hangi teknik ve araçlar kullanılarak implemente edildiği konusu incelenmektedir.</p>
<p><strong>Bölüm 12:</strong><br />
On ikinci bölümün konusu Spring’dir. Spring frameworkü ile tasarımı ve teknik altyapısı güçlü, bakımı kolay ve kolay genişletilebilir programlar oluşturmak mümkündür. Spring sunduğu alt yapı hizmetleriyle programcıların hayatını kolaylaştırır ve programın test edilebilirligini yükseltir.</p>
<p><strong>Bölüm 13:</strong><br />
Web aplikasyonlarının implementasyonu için Spring MVC frameworkü kullanılabilir. Bu bölümde Spring MVC’nin nasıl konfigüre edildiği incelenmektedir.</p>
<p><strong>Bölüm 14:</strong><br />
Sürekli entegrasyon (continous integration) XP projelerinde uygulanan bir tekniktir. Programcılar tarafından kod üzerinde değişiklik yapılmasıyla beraber, mevcut kod derlenerek, sistem testleri çalıştırılır. Bu işlem sonunda kod üzerinde kırılmalar oluşmuşsa, programcıların konu hakkında email aracılığıyla dikkati çekilir ve hatanın bir an önce giderilmesi talep edilir. Sürekli entegrasyon ile her zaman çalışır bir sistemin olması sağlanır. On dürdüncü bölümde sürekli entegrasyon konusu incelenmektedir.</p>
<p><strong>Bölüm 15:</strong><br />
İmplemenatasyonun hangi yöne gittiğini tespit edebilmek için yazılım metrikleri kullanılır. Bunlar sistemin belirli özelliklerinin ölçülmesi sonucu ortaya çıkan değerlerdir. On beşinci bölümüde sistem metriklerinin nasıl ve hangi araçlar kullanılarak ölçüldüğü gösterilmektedir.</p>
<p><strong>Bölüm 16:</strong><br />
Kod paylaşımını kolaylaştırmak için versiyon kontrol sistemleri kullanılır. On altıncı bölümde açık kaynaklı olan Subversion versiyon kontrol sisteminin kullanımı açıklanmaktadır.</p>
<p><strong>Bölüm 17:<br />
</strong>Projenin gidişatını kontrol edebilmek için proje takip planları oluşturulur. Bu planlarda Burndown grafikleri kullanılarak görsellik sağlanır. Enformasyon radyatörü olarak tanımlanan metot ve yöntemler kullanılarak proje ekibinin ve diğer şahışların projenin gidişatı hakkında bilgi sahibi olması sağlanır. On yedinci bölümde sürüm ve iterasyon takibi konuları tematize edilmektedir.</p>
<p><strong>Bölüm 18:<br />
</strong>Son bölümde XP hakkında soru ve cevapları yer almaktadır.</p>
<p style="text-align: center;"> </p>
<p style="text-align: center;"> </p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_126" alt="" width="425" height="536" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_127" alt="" width="425" height="536" /></p>
<p>Kitapta yer alan kodları <a href="http://www.kurumsaljava.com/workspace/xp/extreme_programming_kodlari.zip">http://www.kurumsaljava.com/workspace/xp/extreme_programming_kodlari.zip</a> adresinden temin edebilirsiniz.<br />
 </p>
<p>Yazar: Özcan Acar<br />
Yayınevi: <a href="http://www.pusula.com/2/index.php?option=com_pusula&amp;func=detail&amp;Itemid=1&amp;id=148" target="_blank">Pusula</a><br />
Sayfa adedi: 504.<br />
Online satış: <a href="http://www.Kitapyum.com" target="_blank">http://www.Kitapyum.com</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Extreme Programming ismini taşıyan yeni kitabım önümüzdeki haftadan itibaren satışa sunulacak.</p>
<p>Kitabın ana konusu çevik süreç olan Extreme Programming’in uygulanış tarzını tanıtmaktır. Kitabın ilk bölümlerinde Extreme Programming hakkında teorik bilgiler yer almaktadır. Extreme Programming yöntemlerini uygulayabilmek için bu temel teorik bilgilerin alınmasında fayda vardır. Kitap <strong>18 bölüm</strong> ve <strong>504 sayfadan</strong> oluşmaktadır. Bu bölümlerin içerikleri özetle şöyledir:</p>
<p><span id="more-514"></span></p>
<p><strong>Bölüm 1:</strong><br />
Birinci bölümde şelale (waterfall) tarzı yazılım yöntemleri ve projelerde oluşan sorunlar yer almaktadır. Bu sorunları gidermek için çevik süreçlerin kullanımı tavsiye edilmektedir. Extreme Programming (XP) bir çevik süreç olarak projelerde oluşan sorunlara cevap verebilecek yazılım metotlarına sahiptir. Bu bölümde Extreme Programming’in sahip olduğu değerler, prensipler ve teknikler tanıtılmaktadır.</p>
<p><strong>Bölüm 2:<br />
</strong>XP projelerinde sürüm ve iterasyon planları oluşturularak, projenin gidişatı belirlenir. Planlama oyunu olarak isimlendirilen süreçte müşteri tarafından, programcıların implemente (yazılım) edeceği özellikler seçilir. Programcılar gerekli tahminleri yaparak, müşterinin implementasyon için gerekli süre hakkında fikir sahibi olmasını sağlarlar. Bu bölümde sürüm ve iterasyon planlarının nasıl oluşturulduğu incelenmektedir.</p>
<p><strong>Bölüm 3:</strong><br />
XP iletişime dayalı bir süreçtir. Ekip çalışanları arasında iletişimi güçlendirmek için günlük Stand-up (ayakta) toplantılar düzenlenir. Bunun yanısıra belirli aralıklarla retrospective (geriye bakış) toplantılarda projeye geri bakış sağlanarak, oluşan hatalar üzerinde tartışılır ve çözüm aranır.</p>
<p>XP projelerinde programcılar pair programming metoduyla eşli çalışırlar. Bu programcıların kısa sürede teknik alanda aynı seviyeye gelmelerini kolaylaştırır. XP projelerinde çalışma ortamının iletişimin önemi göz önünde bulundurularak oluşturulması gerekmektedir. Üçüncü bölümde Stand-up ve retrospective toplantılar yanı sıra, pair programming ve çalışma ortamının oluşturulması konuları tematize edilir. Bunun yanı sıra proje hakkında bilgilerin paylaşıldığı Wiki sistemleri hakkında bilgi verilir. Trac ve Bugzilla gibi araçlar kullanılarak bilgi ve hata yönetimi sağlanır.</p>
<p><strong>Bölüm 4:</strong><br />
Bu bölümde XP projelerinde çalışma ortamlarının nasıl yapılandırıldığı ve ne tür araçlardan faydalanıldığı incelenmektedir.</p>
<p><strong>Bölüm 5:</strong><br />
Teorik bilgilerin ardından, XP’nin nasıl uygulandığını göstermek amacıyla beşinci bölümde örnek bir XP projesi yer almaktadır. Bu bölümde müşteri gereksinimlerinin nasıl tespit edildiği ve sürüm ve iterasyon planlarının nasıl oluşturulduğu bir örnek üzerinde gösterilmektedir.</p>
<p><strong>Bölüm 6:</strong><br />
Proje öncesinde sıfırıncı iterasyonda programcılar ihtiyaç duydukları teknik ortamı oluşturmaya başlarlar. Altıncı bölümde Eclipse, Ant, Tomcat, Subclipse, JUnit, HSQL, DBUnit gibi araçların kullanımı ve kurulumu incelenmektedir.</p>
<p><strong>Bölüm 7:</strong><br />
Yazılım sürecinde uygulanması gereken tasarım prensipleri bu bölümün ana konusudur. Esnek bağ, açık kapalı prensibi, tek sorumluluk prensibi, Liskov yerine geçme prensibi, bağımlılıkların tersine çevrilmesi prensibi, arayüz ayırma prensibi ve paket tasarım prensipleri detaylı ve örnekli olarak bu bölümde incelenmektedir.</p>
<p><strong>Bölüm 8:</strong><br />
Unit testleri oluşturularak sistem komponentleri yazılım esnasında test edilir. Akseptans testleri, entegrasyon testleri, regresyon testleri, performans testleri gibi değişik türde testler oluşturmak mümkündür.</p>
<p>Java projelerinde JUnit test frameworkü kullanılarak testler oluşturulur. Sekizinci bölümde JUnit kullanılarak unit testlerin nasıl oluşturulduğu uygulamalı olarak gösterilmektedir.</p>
<p><strong>Bölüm 9:</strong><br />
XP projelerinde yazılım test güdümlü (Test Driven Development – TDD) yapılır. Dokuzucu bölümde TDD sürecinin nasıl çalıştığı ve programcıların TDD yöntemleriyle implementasyonu nasıl ilerlettikleri yer almaktadır.</p>
<p><strong>Bölüm 10:</strong><br />
Onuncu bölümde pratik uygulamalı olarak shop sisteminin login modülü implemente edilmektedir. İmplementasyon için akseptans testlerinden yola çıkılarak, bilgibankasına kadar uzanan yapının adım adım TDD kullanılarak nasıl implemente edildiği gösterilmektedir. Bu bölümde sistem komponentlerini simule etmek için mock sınıfların kullanımı yer almaktadır.</p>
<p><strong>Bölüm 11:</strong><br />
İmplementasyonun çalışır durumda olduğunu kanıtlamak için akseptans testleri oluşturulur. Bu testler kullanıcı hikayeleri gibi müşteri tarafından tanımlanır ve programcılar tarafından implemente edilir. On birinci bölümüde akseptans testlerinin hangi teknik ve araçlar kullanılarak implemente edildiği konusu incelenmektedir.</p>
<p><strong>Bölüm 12:</strong><br />
On ikinci bölümün konusu Spring’dir. Spring frameworkü ile tasarımı ve teknik altyapısı güçlü, bakımı kolay ve kolay genişletilebilir programlar oluşturmak mümkündür. Spring sunduğu alt yapı hizmetleriyle programcıların hayatını kolaylaştırır ve programın test edilebilirligini yükseltir.</p>
<p><strong>Bölüm 13:</strong><br />
Web aplikasyonlarının implementasyonu için Spring MVC frameworkü kullanılabilir. Bu bölümde Spring MVC’nin nasıl konfigüre edildiği incelenmektedir.</p>
<p><strong>Bölüm 14:</strong><br />
Sürekli entegrasyon (continous integration) XP projelerinde uygulanan bir tekniktir. Programcılar tarafından kod üzerinde değişiklik yapılmasıyla beraber, mevcut kod derlenerek, sistem testleri çalıştırılır. Bu işlem sonunda kod üzerinde kırılmalar oluşmuşsa, programcıların konu hakkında email aracılığıyla dikkati çekilir ve hatanın bir an önce giderilmesi talep edilir. Sürekli entegrasyon ile her zaman çalışır bir sistemin olması sağlanır. On dürdüncü bölümde sürekli entegrasyon konusu incelenmektedir.</p>
<p><strong>Bölüm 15:</strong><br />
İmplemenatasyonun hangi yöne gittiğini tespit edebilmek için yazılım metrikleri kullanılır. Bunlar sistemin belirli özelliklerinin ölçülmesi sonucu ortaya çıkan değerlerdir. On beşinci bölümüde sistem metriklerinin nasıl ve hangi araçlar kullanılarak ölçüldüğü gösterilmektedir.</p>
<p><strong>Bölüm 16:</strong><br />
Kod paylaşımını kolaylaştırmak için versiyon kontrol sistemleri kullanılır. On altıncı bölümde açık kaynaklı olan Subversion versiyon kontrol sisteminin kullanımı açıklanmaktadır.</p>
<p><strong>Bölüm 17:<br />
</strong>Projenin gidişatını kontrol edebilmek için proje takip planları oluşturulur. Bu planlarda Burndown grafikleri kullanılarak görsellik sağlanır. Enformasyon radyatörü olarak tanımlanan metot ve yöntemler kullanılarak proje ekibinin ve diğer şahışların projenin gidişatı hakkında bilgi sahibi olması sağlanır. On yedinci bölümde sürüm ve iterasyon takibi konuları tematize edilmektedir.</p>
<p><strong>Bölüm 18:<br />
</strong>Son bölümde XP hakkında soru ve cevapları yer almaktadır.</p>
<p style="text-align: center;"> </p>
<p style="text-align: center;"> </p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_126" alt="" width="425" height="536" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_127" alt="" width="425" height="536" /></p>
<p>Kitapta yer alan kodları <a href="http://www.kurumsaljava.com/workspace/xp/extreme_programming_kodlari.zip">http://www.kurumsaljava.com/workspace/xp/extreme_programming_kodlari.zip</a> adresinden temin edebilirsiniz.<br />
 </p>
<p>Yazar: Özcan Acar<br />
Yayınevi: <a href="http://www.pusula.com/2/index.php?option=com_pusula&amp;func=detail&amp;Itemid=1&amp;id=148" target="_blank">Pusula</a><br />
Sayfa adedi: 504.<br />
Online satış: <a href="http://www.Kitapyum.com" target="_blank">http://www.Kitapyum.com</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F02%2F08%2Fturkiyenin-ilk-extreme-programming-konulu-kitabi%2F&amp;linkname=T%C3%BCrkiye%26%238217%3Bnin%20%C4%B0lk%20Extreme%20Programming%20Konulu%20Kitab%C4%B1"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/02/08/turkiyenin-ilk-extreme-programming-konulu-kitabi/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>XP Plan Poker Kartları</title>
		<link>http://www.kurumsaljava.com/2009/01/27/xp-plan-poker-kartlari/</link>
		<comments>http://www.kurumsaljava.com/2009/01/27/xp-plan-poker-kartlari/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 14:31:35 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=501</guid>
		<description><![CDATA[<p>Mike Cohn un sahibi olduğu <a href="http://www.mountaingoatsoftware.com/" target="_blank">Mountain Goat Software</a> firmasından sipariş verdiğim planlama poker kartları bugün bana ulaştı. Bunlar bizim bildiğimiz poker kartlari değil. Kimse benim poker oynadığımı düşünmesin <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Bu kartlar planlama oyununda programcılar tarafından kullanıcı hikayelerinin implementasyon süresini tahmin etmek için kullanılıyor.<span id="more-501"></span></p>
<p>Ben de seminerlerimde kullanmak üzere bu poker kartlarını sipariş verdim.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_110" alt="" width="550" height="413" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_111" alt="" width="550" height="413" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_112" alt="" width="550" height="413" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_113" alt="" width="550" height="413" /></p>
]]></description>
			<content:encoded><![CDATA[<p>Mike Cohn un sahibi olduğu <a href="http://www.mountaingoatsoftware.com/" target="_blank">Mountain Goat Software</a> firmasından sipariş verdiğim planlama poker kartları bugün bana ulaştı. Bunlar bizim bildiğimiz poker kartlari değil. Kimse benim poker oynadığımı düşünmesin <img src='http://www.kurumsaljava.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Bu kartlar planlama oyununda programcılar tarafından kullanıcı hikayelerinin implementasyon süresini tahmin etmek için kullanılıyor.<span id="more-501"></span></p>
<p>Ben de seminerlerimde kullanmak üzere bu poker kartlarını sipariş verdim.</p>
Note: There is a file embedded within this post, please visit this post to download the file.
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_110" alt="" width="550" height="413" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_111" alt="" width="550" height="413" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_112" alt="" width="550" height="413" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_113" alt="" width="550" height="413" /></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F01%2F27%2Fxp-plan-poker-kartlari%2F&amp;linkname=XP%20Plan%20Poker%20Kartlar%C4%B1"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/01/27/xp-plan-poker-kartlari/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Extreme Programming Bünyesinde Proje Planlaması</title>
		<link>http://www.kurumsaljava.com/2009/01/27/extreme-programming-bunyesinde-proje-planlamasi/</link>
		<comments>http://www.kurumsaljava.com/2009/01/27/extreme-programming-bunyesinde-proje-planlamasi/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 14:12:44 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Planning Poker]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=496</guid>
		<description><![CDATA[<p>Bir geminin rotası sefer öncesi kaptanı tarafından planlanır. Bu planda geminin demir atacağı limanlar ve seyahatin son noktası olan hedef liman yer alır. <span id="more-496"></span>Böyle bir planın oluşturulması görevlerin dağıtımı ve hedefin tayini açısından önem taşımaktadır. Yolculuk esnasında dış etkilerden dolayı rotada değişiklikler meydana gelebilir. Kaptan ulaşmak istediği hedefi bildiği için gerekli değişiklikleri yaparak rotayı hedefe uyumlu hale getirir. Bir projenin gidişatını bir geminin rotasıyla kıyaslayabiliriz. Projeninde bir rotası olmasi gerekir, aksi taktirde hedefe ulaşmak için gerekli çalışmaların nasıl ve hangi zaman biriminde yapılması gerektiği konuşunda yanlış anlaşılmalar oluşur. Projenin rotası proje planında yer alır. Bu makalede</p>
<ul>
<li>proje planının ne olduğunu,</li>
<li>sürüm ve iterasyon planlamasının nasıl yapıldığını,</li>
<li>sürüm ve iterasyon planlarının online ve offline ortamlarda nasıl tutulduğunu</li>
</ul>
<p>yakından inceleyeceğiz.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_108" alt="" width="321" height="324" /><br />Planlama pokeri oynayan programcılar</p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
<h1>Konuyla İlgili Kitaplar</h1>
<p><a href="http://www.amazon.co.uk/Test-Driven-Development-Addison-Wesley-signature/dp/0321146530%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321146530" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51EH1TQ3A2L._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/Test-Driven-Development-Practical-Guide/dp/0131016490%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131016490" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51PAQAN4CHL._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/Agile-Java-Crafting-Test-Driven-Development/dp/0131482394%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131482394" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41IuRXkFJkL._SL160_.jpg" alt="" /></a></p>
]]></description>
			<content:encoded><![CDATA[<p>Bir geminin rotası sefer öncesi kaptanı tarafından planlanır. Bu planda geminin demir atacağı limanlar ve seyahatin son noktası olan hedef liman yer alır. <span id="more-496"></span>Böyle bir planın oluşturulması görevlerin dağıtımı ve hedefin tayini açısından önem taşımaktadır. Yolculuk esnasında dış etkilerden dolayı rotada değişiklikler meydana gelebilir. Kaptan ulaşmak istediği hedefi bildiği için gerekli değişiklikleri yaparak rotayı hedefe uyumlu hale getirir. Bir projenin gidişatını bir geminin rotasıyla kıyaslayabiliriz. Projeninde bir rotası olmasi gerekir, aksi taktirde hedefe ulaşmak için gerekli çalışmaların nasıl ve hangi zaman biriminde yapılması gerektiği konuşunda yanlış anlaşılmalar oluşur. Projenin rotası proje planında yer alır. Bu makalede</p>
<ul>
<li>proje planının ne olduğunu,</li>
<li>sürüm ve iterasyon planlamasının nasıl yapıldığını,</li>
<li>sürüm ve iterasyon planlarının online ve offline ortamlarda nasıl tutulduğunu</li>
</ul>
<p>yakından inceleyeceğiz.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.kurumsaljava.com/storage/image.jsp?ct=image/jpg&amp;d=prod&amp;k=kurumsaljava_108" alt="" width="321" height="324" /><br />Planlama pokeri oynayan programcılar</p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
Note: There is a file embedded within this post, please visit this post to download the file.
<h1>Konuyla İlgili Kitaplar</h1>
<p><a href="http://www.amazon.co.uk/Test-Driven-Development-Addison-Wesley-signature/dp/0321146530%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321146530" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51EH1TQ3A2L._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/Test-Driven-Development-Practical-Guide/dp/0131016490%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131016490" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51PAQAN4CHL._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/Agile-Java-Crafting-Test-Driven-Development/dp/0131482394%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131482394" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41IuRXkFJkL._SL160_.jpg" alt="" /></a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2009%2F01%2F27%2Fextreme-programming-bunyesinde-proje-planlamasi%2F&amp;linkname=Extreme%20Programming%20B%C3%BCnyesinde%20Proje%20Planlamas%C4%B1"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2009/01/27/extreme-programming-bunyesinde-proje-planlamasi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Çevik Süreç Nedir?</title>
		<link>http://www.kurumsaljava.com/2008/12/02/cevik-surec-agile-process-nedir/</link>
		<comments>http://www.kurumsaljava.com/2008/12/02/cevik-surec-agile-process-nedir/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 20:43:17 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Agile Process]]></category>
		<category><![CDATA[Çevik Süreç]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=297</guid>
		<description><![CDATA[<p>Yazılım sektörü yıllardan beri kan kaybediyor. Ama artık taze kan bulundu ve hastalığın tedavisi kolaylaştı. Çözüm çevik süreçler!</p>
<p>Günümüze kadar uzanan süreçte yazılım sektöründe yapılan projeler nereye varacağı belli bile olmayan büyük maceralar haline gelmiştir. Bunun başlıca sebebi kullanılan yazılım yöntemlerinin gereksinimlere cevap verecek yapıda olmamasıdır. Çevik süreçler bu sorunu çözecek nitelikte.</p>
<p><span id="more-297"></span></p>
<p>Bu bölümde</p>
<ul>
<li>yazılım yaparken hedefin ne olduğunu,</li>
<li>çevikliğin ve çevik sürecin ne olduğunu,</li>
<li>çevik manifesto ve prensiplerinin ne anlama geldiğini,</li>
<li>çevik sürecin diğer yazılım metotlarına kıyasla hangi farklılıkları beraberinde getirdiğini,</li>
<li>hangi çevik süreç türlerinin mevcut olduğunu,</li>
<li>bir çevik süreç olan Extreme Programming’in ne olduğunu,</li>
<li>Extreme Programming’in hangi değer, prensip ve teknikler üzerine kurulu olduğunu</li>
</ul>
<p>yakından inceleyeceğiz.</p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
<h1>Konuyla İlgili Kitaplar</h1>
<p><a href="http://www.amazon.co.uk/Extreme-Programming-Explained-Embrace-Change/dp/0321278658%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321278658" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51QXx561dIL._SL160_.jpg" alt="" /></a>  <a href="http://www.amazon.co.uk/Extreme-Programming-Practice-James-Newkirk/dp/0201709376%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0201709376" target="_blank"><img src="http://ecx.images-amazon.com/images/I/412BYCVSXGL._SL160_.jpg" alt="" /></a>  <a href="http://www.amazon.co.uk/Extreme-Programming-Installed-Ron-Jeffries/dp/0201708426%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0201708426" target="_blank"><img src="http://ecx.images-amazon.com/images/I/518B1NQECZL._SL160_.jpg" alt="" /></a></p>
]]></description>
			<content:encoded><![CDATA[<p>Yazılım sektörü yıllardan beri kan kaybediyor. Ama artık taze kan bulundu ve hastalığın tedavisi kolaylaştı. Çözüm çevik süreçler!</p>
<p>Günümüze kadar uzanan süreçte yazılım sektöründe yapılan projeler nereye varacağı belli bile olmayan büyük maceralar haline gelmiştir. Bunun başlıca sebebi kullanılan yazılım yöntemlerinin gereksinimlere cevap verecek yapıda olmamasıdır. Çevik süreçler bu sorunu çözecek nitelikte.</p>
<p><span id="more-297"></span></p>
<p>Bu bölümde</p>
<ul>
<li>yazılım yaparken hedefin ne olduğunu,</li>
<li>çevikliğin ve çevik sürecin ne olduğunu,</li>
<li>çevik manifesto ve prensiplerinin ne anlama geldiğini,</li>
<li>çevik sürecin diğer yazılım metotlarına kıyasla hangi farklılıkları beraberinde getirdiğini,</li>
<li>hangi çevik süreç türlerinin mevcut olduğunu,</li>
<li>bir çevik süreç olan Extreme Programming’in ne olduğunu,</li>
<li>Extreme Programming’in hangi değer, prensip ve teknikler üzerine kurulu olduğunu</li>
</ul>
<p>yakından inceleyeceğiz.</p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
Note: There is a file embedded within this post, please visit this post to download the file.
<h1>Konuyla İlgili Kitaplar</h1>
<p><a href="http://www.amazon.co.uk/Extreme-Programming-Explained-Embrace-Change/dp/0321278658%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321278658" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51QXx561dIL._SL160_.jpg" alt="" /></a>  <a href="http://www.amazon.co.uk/Extreme-Programming-Practice-James-Newkirk/dp/0201709376%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0201709376" target="_blank"><img src="http://ecx.images-amazon.com/images/I/412BYCVSXGL._SL160_.jpg" alt="" /></a>  <a href="http://www.amazon.co.uk/Extreme-Programming-Installed-Ron-Jeffries/dp/0201708426%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0201708426" target="_blank"><img src="http://ecx.images-amazon.com/images/I/518B1NQECZL._SL160_.jpg" alt="" /></a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2008%2F12%2F02%2Fcevik-surec-agile-process-nedir%2F&amp;linkname=%C3%87evik%20S%C3%BCre%C3%A7%20Nedir%3F"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2008/12/02/cevik-surec-agile-process-nedir/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sürekli Entegrasyon  (Continuous Integration)</title>
		<link>http://www.kurumsaljava.com/2008/11/26/surekli-entegrasyon-continuous-integration/</link>
		<comments>http://www.kurumsaljava.com/2008/11/26/surekli-entegrasyon-continuous-integration/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 12:51:40 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Sürekli Entegrasyon]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=192</guid>
		<description><![CDATA[<p>Sürekli entegrasyon (Continuous Integration = CI) kod üzerinde yapılan her değişikliğin ardından, tüm sistemin çalışır durumda olduğunu, yapılan değişikliğin sistemin bazı bölümlerinde kırılmalara yol açmadığını tespit etmek için kullanılan yöntemdir. Kırılmaları tespit edebilmek için testlere (JUnit) ihtiyaç duyulmaktadır. Bu testler, yapılan değişikliğin neticesi olarak yeni bir yapı (build) hazırlandıktan sonra otomatik olarak çalıştırılır. Yapılan değişiklik yeni yapının bir parçası olduğu için, testlerde oluşan hatalar, yapılan değişikliğin sistemi kırdığı anlamına gelmektedir. Bu durumdan tüm programcılar haberdar edilerek, hatanın bir an önce giderilmesi ve testlerin her zaman olumlu sonuç vermesi sağlanır. Sürekli entegrasyon ile programcılar tarafından kod üzerinde yapılan çalışmalar neticesinde her zaman çalışır bir sürümün oluşması sağlanmış olur.<span id="more-192"></span></p>
<div><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></div>
<h1>Konuyla İlgili Kitaplar</h1>
<p> <a href="http://www.amazon.co.uk/Continuous-Integration-Improving-Software-Signature/dp/0321336380%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321336380" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51jraHs3ggL._SL160_.jpg" alt="" /></a>  <a href="http://www.amazon.co.uk/Ship-Practical-Successful-Pragmatic-Programmers/dp/0974514047%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0974514047" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41QGMS450RL._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/xUnit-Test-Patterns-Refactoring-Signature/dp/0131495054%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131495054" target="_blank"><img src="http://ecx.images-amazon.com/images/I/21HzfGxE4QL._SL160_.jpg" alt="" /></a></p>
]]></description>
			<content:encoded><![CDATA[<p>Sürekli entegrasyon (Continuous Integration = CI) kod üzerinde yapılan her değişikliğin ardından, tüm sistemin çalışır durumda olduğunu, yapılan değişikliğin sistemin bazı bölümlerinde kırılmalara yol açmadığını tespit etmek için kullanılan yöntemdir. Kırılmaları tespit edebilmek için testlere (JUnit) ihtiyaç duyulmaktadır. Bu testler, yapılan değişikliğin neticesi olarak yeni bir yapı (build) hazırlandıktan sonra otomatik olarak çalıştırılır. Yapılan değişiklik yeni yapının bir parçası olduğu için, testlerde oluşan hatalar, yapılan değişikliğin sistemi kırdığı anlamına gelmektedir. Bu durumdan tüm programcılar haberdar edilerek, hatanın bir an önce giderilmesi ve testlerin her zaman olumlu sonuç vermesi sağlanır. Sürekli entegrasyon ile programcılar tarafından kod üzerinde yapılan çalışmalar neticesinde her zaman çalışır bir sürümün oluşması sağlanmış olur.<span id="more-192"></span></p>
<div><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></div>
Note: There is a file embedded within this post, please visit this post to download the file.
<h1>Konuyla İlgili Kitaplar</h1>
<p> <a href="http://www.amazon.co.uk/Continuous-Integration-Improving-Software-Signature/dp/0321336380%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321336380" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51jraHs3ggL._SL160_.jpg" alt="" /></a>  <a href="http://www.amazon.co.uk/Ship-Practical-Successful-Pragmatic-Programmers/dp/0974514047%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0974514047" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41QGMS450RL._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/xUnit-Test-Patterns-Refactoring-Signature/dp/0131495054%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131495054" target="_blank"><img src="http://ecx.images-amazon.com/images/I/21HzfGxE4QL._SL160_.jpg" alt="" /></a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2008%2F11%2F26%2Fsurekli-entegrasyon-continuous-integration%2F&amp;linkname=S%C3%BCrekli%20Entegrasyon%20%20%28Continuous%20Integration%29"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2008/11/26/surekli-entegrasyon-continuous-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

