<?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; Yazılım Testleri</title>
	<atom:link href="http://www.kurumsaljava.com/category/unittesting/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>Yazılımda Değişik Test Türleri</title>
		<link>http://www.kurumsaljava.com/2009/03/03/yazilimda-degisik-test-turleri/</link>
		<comments>http://www.kurumsaljava.com/2009/03/03/yazilimda-degisik-test-turleri/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 09:42:14 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Yazılım Testleri]]></category>
		<category><![CDATA[Junit]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=614</guid>
		<description><![CDATA[<p>Yazılım sürecinde oluşturulan sistemin kalite kontrolü unit testleri ile yapılır. Java tabanlı sistemlerde unit testleri JUnit  olarak isimlendirilir. Bu isim aynı ismi taşıyan test frameworkü olan JUnit’den gelmektedir. Java’da unit testleri yazabilmek için JUnit frameworkü (<a href="http://www.junit.org" target="_blank">http://www.junit.org</a>) kullanılır.</p>
<p><span id="more-614"></span></p>
<p>Değişik türde unit testleri oluşturmak mümkündür. Bunlar:</p>
<ul>
<li>JUnit testleri (Unit Testing)</li>
<li>Entegrasyon testleri (Integration testing)</li>
<li>Arayüz (interface) testleri (Functional Interface Testing)</li>
<li>Regresyon testleri  (Regression Testing)</li>
<li>Akseptans (onay/kabul) testleri (Acceptance Testing)</li>
<li>Sistem testleri (System Testing)</li>
<li>Stres testleri (Stress Testing)</li>
<li>Performans testleri (Performance Testing)</li>
</ul>
<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_161" alt="" width="483" height="336" /></p>
<p style="text-align: left;">Programcılar sisteme eklenen her Java sınıfı için bir <strong>JUnit test</strong> sınıfı oluştururlar. Test sınıfında, test edilen sınıfın her metodu için bir test oluşturulur. Unit ismi buradan gelmektedir. Unit testleri ile  kendi içinde bütün olan bir kod ünitesi test edilir. Bunlar genellikle sınıfların metotlarıdır. Test sınıfı kullanılarak, test edilen sınıfın işlevlerini doğru olarak yerine getirip, getirmediği test edilir. Metot bazında hazırlanan testlere JUnit  testleri diyoruz. Sınıf üzerinde yapılan her değişiklik ardından o sınıf için hazırlanan unit testleri çalıştırılarak, yapılan değişikliğin yan etkileri olup, olmadığı kontrol edilir. Testlerin olumlu netice vermesi durumda, sınıfın görevini hatasız yerine getirdiği ispat edilmiş olur. Bu açıdan bakıldığında unit testleri programcılar için kodun kalitesini korumak ve daha ileri götürebilmek için vazgeçilmezdir. Sistem üzerinde yapılan her değişiklik yan etkilere sebep olabileceği için, sistemin her zaman çalışır durumda olduğunu sadece unit testleri ile kontrol edebiliriz. Onlarca ya da yüzlerce sınıfın olduğu bir programı, her değişikliğin ardından elde kontrol etmek imkansız olduğu için otomatik çalışabilen unit testlerine ihtiyacımız vardır.</p>
<p style="text-align: left;">Birçok komponentten oluşan bir sistemde, komponentler arası entegrasyonu test etmek için <strong> entegrasyon testleri</strong> oluşturulur. Entegrasyon testleri hakkında detaya girmeden önce, JUnit testleri hakkında bir açıklama daha yapma gereği duyuyorum. JUnit testleri, test edilen sınıfları kullandıkları diğer sınıflardan bağımsız olarak test ederler. Örneğin bir sınıf bilgibankasından veri edinmek için bir servis sınıfını kullanıyorsa, JUnit testinde bu servis sınıfı kullanılmaz, çünkü bu bilgibankasının çalışır durumda olmasını gerektirir. Eğer JUnit testi içinde bilgibankası kullanılıyorsa, bu JUnit testi değil, entegrasyon testidir, çünkü test edilen sınıf ile bilgibankası arasındaki ilişki dolaylı olarak test edilmektedir. Daha öncede belirttiğim gibi JUnit testleri metot bazında ve sınıfın dış dünyaya olan  bağımlılıklarından bağımsız olarak gerçekleştirilir. Amacımız bir metot içinde bulunan kod satırlarının işlevini test etmektir. Bunun için bilgibankasına bağlantı oluşturulması gerekmez. Test edilen sınıfın bağımlılıklarını ortadan kaldırabilmek için <strong>Mock nesneler</strong> kullanılır. Bir Mock nesne ile servis sınıfı işlevini yerine getiriyormuşcasına simüle edilir. JUnit testinde, test edilen sınıf servis sınıfı yerine onun yerine geçmiş olan Mock nesnesini kullanarak,  işlevini yerine getirir. Entegrasyon testlerinde Mock nesneleri kullanılmaz. Entegrasyon testlerindeki ana amaç sistemin değişik bölümlerinin (subsystem) entegre edilerek işlevlerini kontrol etmektir. Entegrasyon testlerinde test edilen sınıflar için gerekli tüm altyapı (bilgibankası, email serveri vs.)  çalışır duruma getirilir ve entegrasyon test edilir.</p>
<p style="text-align: left;">Sistem komponentleri bir veya birden fazla sınıftan oluşabilir. Komponent kullanımını kolaylaştırmak için interface sınıflar tanımlanır. Komponenti kullanmak isteyen diğer komponent ve modüller bu interface sınıfına karşı programlanır. Komponentler arası interaksiyon <strong>Arayüz (interface) testleri</strong> ile test edilir. Bu testlere <strong>fonksiyon testleri</strong> adı da verilir.</p>
<p style="text-align: left;">Regresyon bir adım geri atmak anlamına gelmektir. Regresyon yazılım esnasında, programın yapılan değişiklikler sonucu çalışır durumdan, çalışmaz bir duruma geçtiği anlamına gelir. <strong>Regresyon testleri</strong> ile sistemden yapılan değişikliklerin bozulmaları neden olup, olmadığı kontrol edilir. Sistem üzerinde yapılan her değişiklik istenmeyen yan etkiler doğurabilir. Her değişikliğin ardından regresyon testleri yapılarak, sistemin bütünlüğü test edilir. Regresyon testlerinde sistem için kullanılan altyapı tanımlanmış bir duruma getirildikten sonra testler uygulanır. Örneğin test öncesi bilgibankası silinerek, test için gerekli veriler tekrar yüklenir. Her test başlangıcında aynı veriler kullanılarak, sistemin nasıl reaksiyon gösterdiği test edilir. Regresyon testlerinin uygulanabilmek için test öncesinde tüm altyapının başlangıç noktası olarak tanımlanan bir duruma getirilmesi gerekmektedir.</p>
<p style="text-align: left;"><strong>Akseptans</strong> testleri ile sistemin bütünü kullanıcı gözüyle test edilir. Bu tür testlerde sistem kara kutu olarak düşünülür. Bu yüzden akseptans testlerinin diğer bir ismi <strong>kara kutu testleridir</strong> (black box test).  Kullanıcının sistemin içinde ne olup bittiğine dair bir bilgisi yoktur. Onun sistemden belirli beklentileri vardır. Bu amaçla sistem ile interaksiyona girer. Akseptans testlerinde sistemden beklenen geri dönüm test edilir.</p>
<p style="text-align: left;"><strong>Stres testleri</strong> tüm sistemin davranışını eksepsiyonel şartlar altında test eden testlerdir. Örneğin bir web tabanlı programın eşli zamanlı yüz kullanıcı ile gösterdiği davranış, bu  rakam iki yüze çıktığında aynı olmayabilir. Stres testleri ile sistemin belirli kaynaklar ile (hardware, ram, işletim sistemi)  stres altındaki davranışı test edilmiş olur.</p>
<p style="text-align: left;"><strong>Performans testleri</strong>  ile sistemin, tanımlanmış kaynaklar (hardware, ram, işletim sistemi) yardımıyla beklenen performansı ölçülür. Test öncesi sistemden beklenen davranış biçimi tayin edilir. Test sonrası beklentiler  test sonuçlarıyla kıyaslanır ve kullanılan kaynakların beklenen davranış için yeterli olup olmadığı incelenir. Sistemin davranış biçimi kullanılan kaynakların yetersiz olduğunu göstermesi durumunda, ya sistem üzerinde değişikliğe gidilir ve sistemin mevcut kaynaklar ile yetinmesi sağlanır ya da kaynaklar genişletilerek sistemin istenilen davranışı edinmesi sağlanır.</p>
<p style="text-align: left;">Çevik süreçlerde unit testleri büyük önem taşımaktadır. Extreme Programming bir adım daha ileri giderek, test güdümlü yazılım (Test Driven Development – TDD) konseptini geliştirmiştir. Test güdümlü yazılımda baş rolü unit testleri oynar. Sınıflar oluşturulmadan önce test sınıfları oluşturulur. Bu belki ilk bakışta çok tuhaf bir yaklaşım gibi görünebilir. Var olmayan bir sınıf için nasıl unit testleri yazılabilir diye bir soru akla gelebilir. TDD uygulandığı taktirde, oluşturulan testler sadece sistemde olması gereken fonksiyonların programlanmasını sağlar. Programcılar kafalarında oluşan modelleri program koduna çevirirler. Bu süreçte çoğu zaman sistemi kullanıcı gözlüğüyle değil, programcı gözlüğüyle görürler. Bu da belki ilk etapta gerekli olmayan davranışların sisteme eklenmesine sebep verebilir. Unit testlerinde bu durum farklıdır. Örneğin akseptans testlerinde tüm sistem bir kullanıcının perspektifinden test edilir. Bu testlerde sistemin mutlaka sahip olması gerektiği davranışlar test edilmiş olur. Eğer akseptans testleri oluşturarak yazılım sürecine başlarsak, testin öngördüğü fonksiyonları implemente ederiz. Böylece gereksiz ve belki bir zaman sonra kullanılabileceğini düşünerek oluşturduğumuz fonksiyonlar programlanmaz. TDD ile testler oluşturulan sisteme paralel olarak oluşur. Sonradan bir sistem için onlarca ya da yüzlerce unit testi oluşturmak çok zor olacağı için, unit testlerini oluşturarak yazılama başlamak çok daha mantıklıdır. TDD konseptini bir sonraki bölümde detaylı olarak yakından inceleyeceğiz.</p>
<p style="text-align: left;">Özcan Acar</p>
]]></description>
			<content:encoded><![CDATA[<p>Yazılım sürecinde oluşturulan sistemin kalite kontrolü unit testleri ile yapılır. Java tabanlı sistemlerde unit testleri JUnit  olarak isimlendirilir. Bu isim aynı ismi taşıyan test frameworkü olan JUnit’den gelmektedir. Java’da unit testleri yazabilmek için JUnit frameworkü (<a href="http://www.junit.org" target="_blank">http://www.junit.org</a>) kullanılır.</p>
<p><span id="more-614"></span></p>
<p>Değişik türde unit testleri oluşturmak mümkündür. Bunlar:</p>
<ul>
<li>JUnit testleri (Unit Testing)</li>
<li>Entegrasyon testleri (Integration testing)</li>
<li>Arayüz (interface) testleri (Functional Interface Testing)</li>
<li>Regresyon testleri  (Regression Testing)</li>
<li>Akseptans (onay/kabul) testleri (Acceptance Testing)</li>
<li>Sistem testleri (System Testing)</li>
<li>Stres testleri (Stress Testing)</li>
<li>Performans testleri (Performance Testing)</li>
</ul>
<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_161" alt="" width="483" height="336" /></p>
<p style="text-align: left;">Programcılar sisteme eklenen her Java sınıfı için bir <strong>JUnit test</strong> sınıfı oluştururlar. Test sınıfında, test edilen sınıfın her metodu için bir test oluşturulur. Unit ismi buradan gelmektedir. Unit testleri ile  kendi içinde bütün olan bir kod ünitesi test edilir. Bunlar genellikle sınıfların metotlarıdır. Test sınıfı kullanılarak, test edilen sınıfın işlevlerini doğru olarak yerine getirip, getirmediği test edilir. Metot bazında hazırlanan testlere JUnit  testleri diyoruz. Sınıf üzerinde yapılan her değişiklik ardından o sınıf için hazırlanan unit testleri çalıştırılarak, yapılan değişikliğin yan etkileri olup, olmadığı kontrol edilir. Testlerin olumlu netice vermesi durumda, sınıfın görevini hatasız yerine getirdiği ispat edilmiş olur. Bu açıdan bakıldığında unit testleri programcılar için kodun kalitesini korumak ve daha ileri götürebilmek için vazgeçilmezdir. Sistem üzerinde yapılan her değişiklik yan etkilere sebep olabileceği için, sistemin her zaman çalışır durumda olduğunu sadece unit testleri ile kontrol edebiliriz. Onlarca ya da yüzlerce sınıfın olduğu bir programı, her değişikliğin ardından elde kontrol etmek imkansız olduğu için otomatik çalışabilen unit testlerine ihtiyacımız vardır.</p>
<p style="text-align: left;">Birçok komponentten oluşan bir sistemde, komponentler arası entegrasyonu test etmek için <strong> entegrasyon testleri</strong> oluşturulur. Entegrasyon testleri hakkında detaya girmeden önce, JUnit testleri hakkında bir açıklama daha yapma gereği duyuyorum. JUnit testleri, test edilen sınıfları kullandıkları diğer sınıflardan bağımsız olarak test ederler. Örneğin bir sınıf bilgibankasından veri edinmek için bir servis sınıfını kullanıyorsa, JUnit testinde bu servis sınıfı kullanılmaz, çünkü bu bilgibankasının çalışır durumda olmasını gerektirir. Eğer JUnit testi içinde bilgibankası kullanılıyorsa, bu JUnit testi değil, entegrasyon testidir, çünkü test edilen sınıf ile bilgibankası arasındaki ilişki dolaylı olarak test edilmektedir. Daha öncede belirttiğim gibi JUnit testleri metot bazında ve sınıfın dış dünyaya olan  bağımlılıklarından bağımsız olarak gerçekleştirilir. Amacımız bir metot içinde bulunan kod satırlarının işlevini test etmektir. Bunun için bilgibankasına bağlantı oluşturulması gerekmez. Test edilen sınıfın bağımlılıklarını ortadan kaldırabilmek için <strong>Mock nesneler</strong> kullanılır. Bir Mock nesne ile servis sınıfı işlevini yerine getiriyormuşcasına simüle edilir. JUnit testinde, test edilen sınıf servis sınıfı yerine onun yerine geçmiş olan Mock nesnesini kullanarak,  işlevini yerine getirir. Entegrasyon testlerinde Mock nesneleri kullanılmaz. Entegrasyon testlerindeki ana amaç sistemin değişik bölümlerinin (subsystem) entegre edilerek işlevlerini kontrol etmektir. Entegrasyon testlerinde test edilen sınıflar için gerekli tüm altyapı (bilgibankası, email serveri vs.)  çalışır duruma getirilir ve entegrasyon test edilir.</p>
<p style="text-align: left;">Sistem komponentleri bir veya birden fazla sınıftan oluşabilir. Komponent kullanımını kolaylaştırmak için interface sınıflar tanımlanır. Komponenti kullanmak isteyen diğer komponent ve modüller bu interface sınıfına karşı programlanır. Komponentler arası interaksiyon <strong>Arayüz (interface) testleri</strong> ile test edilir. Bu testlere <strong>fonksiyon testleri</strong> adı da verilir.</p>
<p style="text-align: left;">Regresyon bir adım geri atmak anlamına gelmektir. Regresyon yazılım esnasında, programın yapılan değişiklikler sonucu çalışır durumdan, çalışmaz bir duruma geçtiği anlamına gelir. <strong>Regresyon testleri</strong> ile sistemden yapılan değişikliklerin bozulmaları neden olup, olmadığı kontrol edilir. Sistem üzerinde yapılan her değişiklik istenmeyen yan etkiler doğurabilir. Her değişikliğin ardından regresyon testleri yapılarak, sistemin bütünlüğü test edilir. Regresyon testlerinde sistem için kullanılan altyapı tanımlanmış bir duruma getirildikten sonra testler uygulanır. Örneğin test öncesi bilgibankası silinerek, test için gerekli veriler tekrar yüklenir. Her test başlangıcında aynı veriler kullanılarak, sistemin nasıl reaksiyon gösterdiği test edilir. Regresyon testlerinin uygulanabilmek için test öncesinde tüm altyapının başlangıç noktası olarak tanımlanan bir duruma getirilmesi gerekmektedir.</p>
<p style="text-align: left;"><strong>Akseptans</strong> testleri ile sistemin bütünü kullanıcı gözüyle test edilir. Bu tür testlerde sistem kara kutu olarak düşünülür. Bu yüzden akseptans testlerinin diğer bir ismi <strong>kara kutu testleridir</strong> (black box test).  Kullanıcının sistemin içinde ne olup bittiğine dair bir bilgisi yoktur. Onun sistemden belirli beklentileri vardır. Bu amaçla sistem ile interaksiyona girer. Akseptans testlerinde sistemden beklenen geri dönüm test edilir.</p>
<p style="text-align: left;"><strong>Stres testleri</strong> tüm sistemin davranışını eksepsiyonel şartlar altında test eden testlerdir. Örneğin bir web tabanlı programın eşli zamanlı yüz kullanıcı ile gösterdiği davranış, bu  rakam iki yüze çıktığında aynı olmayabilir. Stres testleri ile sistemin belirli kaynaklar ile (hardware, ram, işletim sistemi)  stres altındaki davranışı test edilmiş olur.</p>
<p style="text-align: left;"><strong>Performans testleri</strong>  ile sistemin, tanımlanmış kaynaklar (hardware, ram, işletim sistemi) yardımıyla beklenen performansı ölçülür. Test öncesi sistemden beklenen davranış biçimi tayin edilir. Test sonrası beklentiler  test sonuçlarıyla kıyaslanır ve kullanılan kaynakların beklenen davranış için yeterli olup olmadığı incelenir. Sistemin davranış biçimi kullanılan kaynakların yetersiz olduğunu göstermesi durumunda, ya sistem üzerinde değişikliğe gidilir ve sistemin mevcut kaynaklar ile yetinmesi sağlanır ya da kaynaklar genişletilerek sistemin istenilen davranışı edinmesi sağlanır.</p>
<p style="text-align: left;">Çevik süreçlerde unit testleri büyük önem taşımaktadır. Extreme Programming bir adım daha ileri giderek, test güdümlü yazılım (Test Driven Development – TDD) konseptini geliştirmiştir. Test güdümlü yazılımda baş rolü unit testleri oynar. Sınıflar oluşturulmadan önce test sınıfları oluşturulur. Bu belki ilk bakışta çok tuhaf bir yaklaşım gibi görünebilir. Var olmayan bir sınıf için nasıl unit testleri yazılabilir diye bir soru akla gelebilir. TDD uygulandığı taktirde, oluşturulan testler sadece sistemde olması gereken fonksiyonların programlanmasını sağlar. Programcılar kafalarında oluşan modelleri program koduna çevirirler. Bu süreçte çoğu zaman sistemi kullanıcı gözlüğüyle değil, programcı gözlüğüyle görürler. Bu da belki ilk etapta gerekli olmayan davranışların sisteme eklenmesine sebep verebilir. Unit testlerinde bu durum farklıdır. Örneğin akseptans testlerinde tüm sistem bir kullanıcının perspektifinden test edilir. Bu testlerde sistemin mutlaka sahip olması gerektiği davranışlar test edilmiş olur. Eğer akseptans testleri oluşturarak yazılım sürecine başlarsak, testin öngördüğü fonksiyonları implemente ederiz. Böylece gereksiz ve belki bir zaman sonra kullanılabileceğini düşünerek oluşturduğumuz fonksiyonlar programlanmaz. TDD ile testler oluşturulan sisteme paralel olarak oluşur. Sonradan bir sistem için onlarca ya da yüzlerce unit testi oluşturmak çok zor olacağı için, unit testlerini oluşturarak yazılama başlamak çok daha mantıklıdır. TDD konseptini bir sonraki bölümde detaylı olarak yakından inceleyeceğiz.</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%2Fyazilimda-degisik-test-turleri%2F&amp;linkname=Yaz%C4%B1l%C4%B1mda%20De%C4%9Fi%C5%9Fik%20Test%20T%C3%BCrleri"><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/yazilimda-degisik-test-turleri/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Test Edilebilir Tasarım</title>
		<link>http://www.kurumsaljava.com/2008/12/03/test-edilebilir-tasarim-testable-software-design/</link>
		<comments>http://www.kurumsaljava.com/2008/12/03/test-edilebilir-tasarim-testable-software-design/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 12:26:34 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Yazılım Testleri]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=310</guid>
		<description><![CDATA[<p>XP projeleri test güdümlü (Test Driven Deevelopment =TDD) ilerler. Programcı, testlerin gerektirdiği sınıfları oluştururken tasarım kararları alır bu bunları uygular. Bu tasarım kararları kodun gelecekte ne oranda yeniliklere açık olduğunu belirler. <span id="more-310"></span>Seçilen tasarımın test edilebilir yapıda olması da büyük önem taşımaktadır. Aksi taktirde testlerin koddan önce oluşturulması bir sorun haline gelir. TDD tarzı implementasyonda tasarım sorunlarıyla karşılaşmamak ve test edilebilir bir tasarım oluşturmak için takip edilmesi gereken bazı tasarım prensipleri şöyledir:</p>
<ul>
<li>Kalıtım (inheritance) yerine kompozisyon kullanılmalıdır.</li>
<li>Static metot ve Singleton yapılar kullanılmamalıdır.</li>
<li>Bağımlılıkların isole edilmesi gerekir.</li>
<li>Bağımlılıkların enjekte (injection) edilmesi, testleri kolaylaştırır.</li>
</ul>
<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>XP projeleri test güdümlü (Test Driven Deevelopment =TDD) ilerler. Programcı, testlerin gerektirdiği sınıfları oluştururken tasarım kararları alır bu bunları uygular. Bu tasarım kararları kodun gelecekte ne oranda yeniliklere açık olduğunu belirler. <span id="more-310"></span>Seçilen tasarımın test edilebilir yapıda olması da büyük önem taşımaktadır. Aksi taktirde testlerin koddan önce oluşturulması bir sorun haline gelir. TDD tarzı implementasyonda tasarım sorunlarıyla karşılaşmamak ve test edilebilir bir tasarım oluşturmak için takip edilmesi gereken bazı tasarım prensipleri şöyledir:</p>
<ul>
<li>Kalıtım (inheritance) yerine kompozisyon kullanılmalıdır.</li>
<li>Static metot ve Singleton yapılar kullanılmamalıdır.</li>
<li>Bağımlılıkların isole edilmesi gerekir.</li>
<li>Bağımlılıkların enjekte (injection) edilmesi, testleri kolaylaştırır.</li>
</ul>
<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%2F2008%2F12%2F03%2Ftest-edilebilir-tasarim-testable-software-design%2F&amp;linkname=Test%20Edilebilir%20Tasar%C4%B1m"><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/03/test-edilebilir-tasarim-testable-software-design/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Unit Testing Konseptleri</title>
		<link>http://www.kurumsaljava.com/2008/11/28/unit-testing-konseptleri/</link>
		<comments>http://www.kurumsaljava.com/2008/11/28/unit-testing-konseptleri/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 13:53:22 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Yazılım Testleri]]></category>
		<category><![CDATA[Code Coverage]]></category>
		<category><![CDATA[Junit]]></category>
		<category><![CDATA[Mock]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=243</guid>
		<description><![CDATA[<p>Yazılım sürecinde oluşturulan sistemin kalite kontrolü unit testleri ile yapılır. Bu bölümde<br />
unit testlerin nasıl hazırlandığını yakından inceleyeceğiz. Bir sonraki bölümünde yer alan test<br />
güdümlü yazılımı (Test Driven Development – TDD) uygulayabilmek için unit test<br />
konseptlerinin bilinmesi gerekmektedir.<br />
Java tabanlı sistemlerde unit testleri JUnit1 olarak isimlendirilir. Bu isim aynı ismi taşıyan test<br />
frameworkü olan JUnit’den gelmektedir. Java’da unit testleri yazabilmek için JUnit<br />
frameworkünden faydalanacağız.</p>
<p><span id="more-243"></span></p>
<p>Değişik türde unit testleri oluşturmak mümkündür. Bunlar:</p>
<ul>
<li>JUnit testleri (Unit Testing)</li>
<li>Entegrasyon testleri (Integration testing)</li>
<li>Arayüz (interface) testleri (Functional Interface Testing)</li>
<li>Regresyon testleri (Regression Testing)</li>
<li>Akseptans testleri (Acceptance Testing)</li>
<li>Sistem testleri (System Testing)</li>
<li>Stres testleri (Stress Testing)</li>
<li>Performans testleri (Performance Testing)</li>
</ul>
<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/JUnit-Action-Vincent-Massol/dp/1930110995%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1930110995" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51FE6H4B99L._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/JUnit-Recipes-Practical-Methods-Programmer/dp/1932394230%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1932394230" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51JByOT1xEL._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/JUnit-Pocket-Guide-Kent-Beck/dp/0596007434%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596007434" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41xvhs-GeLL._SL160_.jpg" alt="" /></a></p>
]]></description>
			<content:encoded><![CDATA[<p>Yazılım sürecinde oluşturulan sistemin kalite kontrolü unit testleri ile yapılır. Bu bölümde<br />
unit testlerin nasıl hazırlandığını yakından inceleyeceğiz. Bir sonraki bölümünde yer alan test<br />
güdümlü yazılımı (Test Driven Development – TDD) uygulayabilmek için unit test<br />
konseptlerinin bilinmesi gerekmektedir.<br />
Java tabanlı sistemlerde unit testleri JUnit1 olarak isimlendirilir. Bu isim aynı ismi taşıyan test<br />
frameworkü olan JUnit’den gelmektedir. Java’da unit testleri yazabilmek için JUnit<br />
frameworkünden faydalanacağız.</p>
<p><span id="more-243"></span></p>
<p>Değişik türde unit testleri oluşturmak mümkündür. Bunlar:</p>
<ul>
<li>JUnit testleri (Unit Testing)</li>
<li>Entegrasyon testleri (Integration testing)</li>
<li>Arayüz (interface) testleri (Functional Interface Testing)</li>
<li>Regresyon testleri (Regression Testing)</li>
<li>Akseptans testleri (Acceptance Testing)</li>
<li>Sistem testleri (System Testing)</li>
<li>Stres testleri (Stress Testing)</li>
<li>Performans testleri (Performance Testing)</li>
</ul>
<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/JUnit-Action-Vincent-Massol/dp/1930110995%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1930110995" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51FE6H4B99L._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/JUnit-Recipes-Practical-Methods-Programmer/dp/1932394230%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1932394230" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51JByOT1xEL._SL160_.jpg" alt="" /></a>   <a href="http://www.amazon.co.uk/JUnit-Pocket-Guide-Kent-Beck/dp/0596007434%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhttpwwwxpturk-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596007434" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41xvhs-GeLL._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%2F28%2Funit-testing-konseptleri%2F&amp;linkname=Unit%20Testing%20Konseptleri"><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/28/unit-testing-konseptleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

