<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>TEST GÜDÜMLÜ YAZILIM GELĐŞ TĐ RME SÜRECĐ VE KULLANILAN ÇERÇEVELER</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Ecir Uğur KÜÇÜKSĐ LLE</string-name>
          <email>ecirkucuksille@sdu.edu.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Nurullah ÖZTÜRK</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Đ brahim Arda ÇANKAYA</string-name>
          <email>ardacankaya@sdu.edu.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Asım Sinan YÜKSEL</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Kelimeler. Test Güdümlü Yazılım Geliştirme</institution>
          ,
          <addr-line>Test Çerçeveleri, Test Çeşitleri</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Süleyman Demirel Üniversitesi</institution>
          ,
          <addr-line>Bilgisayar Mühendisliği</addr-line>
          ,
          <country country="TR">Türkiye</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Özet. Test Güdümlü Yazılım Geliştirme modeli önce test koşullarının yazılmasını, sonrasında da yazılan testleri geçecek ve kendinden beklenen işlevi yerine getirecek kodun yazılarak bir yazılımın geliştirilmesini öngören yazılım geliştirme modelidir. Başarılı test sürecinin gerçekleştirilmesi ile en az hataya sahip yüksek doğrulukta yazılımlar üretilebilmektedir. Günümüzde test güdümlü yazılım geliştirme sürecinde kullanılmak üzere hazırlanmış birçok test çerçevesi bulunmaktadır. Bu çalışmada test güdümlü yazılım geliştirme süreci ve var olan test çerçeveleri hakkında bilgi verilerek, bu çerçevelerin kısa bir karşılaştırılması yapılmıştır.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Yazılım projelerinin en önemli bölümlerinden biri test yazım sürecidir. Başarılı bir
test süreci sonunda en az hataya sahip yüksek doğrulukta yazılımlar üretilir.
Türkiye’de yazılım kalitesi hakkında 2013 yılında yapılan araştırma sonuçlarına göre test
işiyle görevli olan test uzmanlarının oranı geçen sene %54 iken bu yıl oran %74
olmuştur. Test otomasyonu ile ilgili “performans testleri ve simülasyonu” %43’lük
oran ile birinci sıradayken, “test yönetimi, test işletimi ve birim testi otomasyonu”
%30-35 oranla ikinci sırada olmuştur [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
      <p>Ülkemizde artık test güdümlü yazılım geliştirme sürecine ve test araçlarına olan
ihtiyaçların arttığı gözlenmiştir. Bu nedenle bu çalışmada genel olarak test güdümlü
yazılım süreçleri, birim testi ve yaygın olarak kullanılan dillerdeki en yaygın birim
testi çerçeveleri hakkında bilgi verilerek kıyaslanması yapılmıştır.</p>
      <p>
        TEST GÜDÜMLÜ YAZILIM GELĐŞ TĐ RME SÜRECĐ
Test Güdümlü Programlama yöntemi, Test Öncelikli Geliştirme (TÖG) ve Gözden
Geçirme (Refactoring) yöntemlerinin bir araya getirilmesi ile oluşturulur [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Test
güdümlü yazılım geliştirmekteki hedef gerekli işi yapacak kodu yazmadan önce, bu
koda ait olan testin yazılmasıdır. Test yazıldıktan sonra yapılacak olan iş ise test
kodunu başarıyla geçecek kodun yazılmasıdır. Başarılı bir test sonrasında tekrar başa
dönüp, kod incelenerek problem varsa yeninden düzenleme yapılmalıdır.
      </p>
      <p>
        Test güdümlü programlamanın algoritma adımları şunlardır [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]:
• Testin yazılması
• Testin derlenmesi: Bu aşamada test başarısız olacaktır. Çünkü teste tabi tutulacak
sınıflar ve metodlar henüz yazılmamıştır.
• Sadece derlenmeye yetecek kadar kodun yazılması ve gerekirse yeniden gözden
geçirilmesi
• Testin çalıştırıp başarısız olunduğunun gözlenmesi
• Testi çalıştırıp, testin geçildiğinin görülmesi
• Testlerin tekrar çalıştırılıp, başarılı olduğunun gözlenmesi
• Kodun gözden geçirilerek yeniden düzenlenmesi
• Đ lk adıma dönülerek yeniden başlanılması
Test güdümlü yazılım geliştirme ile birlikte oluşturulan tasarım, kendiliğinden var
olan bir tasarım modeli değildir. Yazdığımız testler şekillendikçe oluşan bir tasarım
modelidir. Testleri oluşturmamızın bize sağladığı pek çok yarar vardır. Bunlardan
birincisi, oluşturduğumuz testler sayesinde uygulamamızın beklendiği gibi çalışıp
çalışmadığının önceden fark edilmesidir. Đ kincisi ise, bu testler sayesinde doğal olarak
dokümantasyon oluşturulmuş olur.
      </p>
      <p>
        Değişik türlerde testler oluşturmak mümkündür. Bunlar [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]:
• Birim Testleri
• Đş levsel Testler
• Entegrasyon Testleri
• Regresyon Testleri
• Kabul Testleri
• Sistem Testleri
• Stres Testleri
• Performans Testleri
Bu çalışmada birim testi ve işlevsel testler üzerinde durulmuştur. Ayrıca güncel
programlama dillerinde yaygın olarak kullanılan test çerçeveleri hakkında bilgi verilerek
karşılaştırmaları yapılmıştır.
2.1
      </p>
    </sec>
    <sec id="sec-2">
      <title>BĐ RĐ M TESTĐ (Unit Test)</title>
      <p>
        Birim Testi, yazılım projesindeki her bir birimin (sınıf ya da metot) hatasız bir
şekilde çalıştığını kanıtlamak için oluşturulan testtir. Birim testi yazılım geliştirme
sürecini kolaylaştırılır, hızlandırır ve her bir sınıfın, metodun doğru çalıştığını
garantilememizi sağlar. Bir testin birim testi olup olmadığını [
        <xref ref-type="bibr" rid="ref3 ref5">3, 5</xref>
        ]:
• Veritabanı etkileşimi varsa,
•
•
•
      </p>
      <sec id="sec-2-1">
        <title>Ağ iletişimi varsa,</title>
        <p>Dosya sistemiyle etkileşimi varsa,</p>
        <p>Testin başarılı olması için gerekli ayarların değişmesi gerekiyorsa,
birim testi değildir diyebiliriz.</p>
        <p>Geliştiriciler zamanlarının sadece %10’dan %50 ye kadar olan bölümünde üretken
bir şekilde kod yazar. Geri kalan kısım düşünme, tasarlama, tartışma gibi aktivitelerle
geçer. Eğer TDD yaklaşımı kullanılmıyorsa manuel olarak hata ayıklama, yakalama
ve düzeltme aşamasında çokça vakit kaybedilecektir. Birim Testlerini yazmamızı ve
kontrol etmemizi kolaylaştıracak birçok çerçeve geliştirilmiştir. Neredeyse her dil için
bir test çerçevesi bulunmaktadır.
2.2</p>
        <p>şĐ levsel Test(Functional Test)
Đş levsel testler uygulamanın bileşenleri arasındaki etkileşimi, bileşenlerin uyumunu
test etmek amacı ile yapılır. Bu testler, durum senaryolarından elde edilir ve her
durum senaryosu bir işlevsel teste dönüşür. Đş levsel testler çok önemlidir. Bu testlerde
bir işlevde yaşanan sıkıntı birbirine bağlı tüm işlevleri etkilemektedir. Düzeltilen hata
da o işleve bağlı tüm işlevlerde düzeldiği anlamına gelir. Ancak birim testinde durum
böyle değildir. Hatanın ilgili işlevi başka işlevlerle bağlantılı olmadığı için alınan hata
da diğer işlevleri etkilememektedir.</p>
        <p>Birim testi ile işlevsel test arasında farklılıklar vardır. Birim testinde kod yazmadan
önce test kodu yazılırken, işlevsel test yazılımın müşteriye tesliminden önce yapılır.
Oluşturulan birim testleri bir kod bloğunun niçin var olduğunu anlatırken, işlevsel
testler uygulamamızı oluştururken hangi özelliklerin gerçekleştiğini
dokümantasyonunu sağlar.
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Kullanılan Çerçeveler</title>
      <p>Bu bölümde masaüstü programlamada en yaygın olan (C++, Java, C#) dillerde, web
programlamada (JSF,ASP.net, PHP) ve mobil programlamada (IOS ve Android)
kullanılan birim testi çerçeveleri incelenmektedir.
3.1</p>
      <p>Masaüstü Programlama
Kullanılan Çerçeveler</p>
      <p>Dillerinde (C++, Java, C#, Scala, Python)
C++ dilinde kullanılan birçok çerçeve mevcuttur. Bunların bir kaçından kısaca
bahsetmek gerekirse:</p>
      <p>Boost Test: Birim Test kütüphanesi Boost C++ kaynak kütüphanesinin bir
parçasıdır. Ticari olmayan kullanımı teşvik eden Boost Lisansı ile lisanslanmıştır.
Mimari, üyelik fonksiyonlarını test fonksiyonu gibi kullanan test sınıflarına sahip xUnit
mimarisinden farklıdır. Çerçeve, testlerin çalışması için gerekli kodu üreten makrolar
kullanır. Esas testleri gerçekleştirmek için ise “Assertion” lar kullanılır. Bu çerçeve
test araçlarının kullanımını ve bunları hiyerarşik bir yapıda organize etmeyi
kolaylaştıran araçlar sunar. Kullanıcıları hata denetimi, raporlama, parametre işleme gibi
karmaşık işlemlerden kurtarır. Çerçevenin başlatılması için bir main() fonksiyonu
sağlar, komut satırı parametrelerini ayarlar, kullanıcının hazırlamış olduğu
init_unit_test_suite(argc, argv) fonksiyonunu çağırır ve kullanıcının testlerini çalıştırır.
Test sonucunda başarılı ve başarısız olan test durumları sürekli izlenir ve o ana kadar
yapılan testlerin, toplam yapılması gereken test miktarına göre ilerleme durumu çeşitli
formatlarda raporlanır. Birim Test Çerçevesi hem basit hem de karmaşık testler için
uygundur. Buna rağmen, üretim ortamındaki kodu test etmek amacıyla kullanılmaz.
Birim Test Çerçevesi işbirliği içinde olan çeşitli bileşenlerden oluşur. Tüm bileşenler
boost::unit_test ismi altında yer almaktadır.</p>
      <p>Cppunit Test: Đ lk olarak uygulamanın görev testleri yazılıp sonra bu testlerde
başarılı/başarısız olma durumu kontrol edilir. Doğru şekilde uygulanması halinde tüm
birim testlerden geçmelidir. Başarısızlığın önceden fark edilmesinde, hataların
önceden ayıklanmasında bize yardımcı olan bir test çerçevesidir.</p>
      <p>
        Bu iki birim testi çerçevesi birçok ortak özelliğe sahip olsa da birbirine göre üstün
oldukları alanlar da bulunmaktadır. Bunu bir tablo üzerinde göstermek gerekirse [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]:
      </p>
      <p>Tablo 1. Boost Test / CppUnit Test Çerçevelerinin Kıyaslaması
Özellik</p>
      <sec id="sec-3-1">
        <title>Profesyonel geliştirme</title>
        <p>Sürdürülebilirlik
Xml çıktısı
Son test
Fikstürler
Otomatik test
Devre dışı iken test
Dahili zengin assert fonksiyonları
Özelleştirilmiş assert
Ölümcül olmayan assert
Hata yakalama
Arayüz çalıştırma durumu</p>
        <p>Boost Test
Var
Var
Var
Var
Var</p>
        <p>NCBI
var
Var
Var
?
?
uzantı
desteği</p>
        <p>Cppunit
Test</p>
        <p>Var
Yok
Var
Yok
Var
Var
Yok
Var
Var
Yok
Yok
Var</p>
        <p>Java platformlarında en çok bilinen temel iki test çerçevesi JUnit ve TestNG dir.
Đ kisi de karmaşık test senaryolarında tam olarak istenilen kod parçacıklarında test
oluşturmaya izin verebilecek kadar güçlü çerçevelerdir.</p>
        <p>JUNIT: Junit tekrarlanabilir testleri yazmak ve çalıştırmak için kullanılan açık
kaynak kodlu bir çerçevedir. Birim test çerçeveleri için XUnit mimarisinin bir
örneğidir. JUnit özellikleri, programdan beklenen sonuçları test etmek için
beklentileri, yaygın test verilerini paylaşmak için test fikstürlerini içerir.</p>
        <p>
          TestNG: TestNG işlevselliği sayesinde kullanımı kolaydır ve güçlü bir test
aracıdır. TestNG birçok özelliği desteklemektedir. Örneğin; esnek test
konfigürasyonu, veritabanı testi için destek, aynı sınıfın birden çok örneği için destek, güçlü
çalıştırma modeli, gömülü betik dili (beanshell) için daha fazla esneklik, çalışma
zamanı ve günlüğü için varsayılan JDK fonksiyonları gibi birçok güçlü yönleri olan bir
çerçevedir. [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ].
        </p>
        <p>Tablo 2. JUnit / TestNG çerçevelerinin Kıyaslanması
Özellik
Kullanıcı tanımlı yaşam döngüsü
Test organize edebilme (grup vb.)
Dağıtılmış test uygulaması
Paralel test uygulaması
Veri güdümlü testler
Bağımlı testler
IDE bağlantısı
Ant bağlantısı
Maven bağlantısı
Alana göre uzantılar (veritabanı, HTTP vb.)
Bilgi paylaşım platformu
JUnit
Var
Yok
Yok
Yok
Yok
Yok
Var
Var
Var
Var
Var</p>
        <p>TestNG
Var
Var
Var
Var
Var
Var
Var
Var
Var
Yok
Var</p>
        <p>Kullanıcı tanımlı yaşam döngüsü, test yapanlara hangi metotların hangi sırada
olacağını belirten bir özelliktir. Junit ve TestNG nin ikisinde de bu özellik mevcuttur.
JUnit ile gruplama işlemi sadece basit bir sınıfta gruplama işlemidir. Büyük
projelerde testleri dağıtık ya da paralel modda çalıştırmak kesin olarak uygulamanın
hızını artırır. Veri güdümlü testler sayesinde büyük miktarlardaki veriler basit bir test
senaryosu oluşturularak bütün verilere uygulanabilir.</p>
        <p>C# programlama dilinde kullanılan test çerçeve araçları tüm Microsoft
programlama dillerinde ortak olarak kullanılmaktadır. En yaygın kullanılan test araçları NUnit
te XUnit.net’tir. NUnit te XUnit .net e çok benzer şekilde test kısımları direk olarak
projede kodun içine oluşturulur. Fakat mekanizması köklerde, durumlarda ve
özelliklerde oldukça farklıdır. .Net için geliştirilmiş bir birim test çerçevesidir. XUnit ise
XML programların karmaşık senaryolarını test eder. Yapı olarak JUnit e çok
benzerdir.</p>
        <p>Scala ölçeklenebilir programlama anlamına gelmektedir. Scala programlama dili
ruby, java, c++ dillerinin birleşimi şeklinde bir dildir.</p>
        <p>ScalaTest, Scala ve Java kodları test edilebilen bir test aracıdır. Junit, TestNG,
ScalaCheck, Jmack gibi test araçları ile bağlantılıdır. Bundan dolayı daha hızlı ve
başarılı bir yapıdır. ScalaTest projede bütün kısımlara uygulanabilir, en küçük proje
parçacığından geniş çaplı projelere kadar destek sunar.</p>
        <p>Python, test temelli geliştirme için kullanışlı bir dildir. Kendi içindeki bileşenler
sayesinde başka eklentilere gerek duymadan testler yapılabilir. Standart
kütüphanesinde test temelli geliştirmeye gerekli her şey mevcuttur.</p>
        <p>Unittest, JUnit’in Python dili versiyonu olan bir test çerçevesidir. Python 2.1
versiyonu ve daha üst versiyonlarında temel olarak yüklü şekilde gelir. Diğer
dillerdeki birim testler ile benzer bir yapıdadır. Unittest Xunit stilinde bir çerçeve
olduğundan Pyunit diye adlandırılmıştır. Xunit’in diğer stilleriyle neredeyse aynı
şekilde çalışır.
3.2</p>
        <p>Web Programlama Dillerinde (JSF,ASP.NET,PHP) Kullanılan Çerçeveler
Web çatısı altında incelediğimizde ise JSF dilinde en yaygın olarak bilinen test
çerçevesi CACTUS iken ASP.Net te NUNIT, PHP ise PHPUNIT’tir.</p>
        <p>
          Cactus, Jakarta projesinin [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] server taraflı Java kodlarının birim testleri için
geliştirilmiş basit bir test çerçevesidir. Cactus’ün amacı server taraflı kodların test
yazımının maliyetini düşürmektir. JUnit kullanmaktadır. Cactus, konteyner stratejisi
uygular. Testler konteyner içerisinde çalıştırır. Konteyner stratejisinde konteyner bir
nesnedir. Bu nesne diğer nesneleri içinde bulundurur ve bu nesnelere erişimi,
nesnelerin oluşturulmasını, yok edilmesini yönetir. Bu test daha iyi kod yazmayı, kod
incelemeyi ve evrensel bir kod oluşturmayı sağlar.
        </p>
        <p>PPHUnit ile test oluşturmanın normal test oluşturmaktan farkı yoktur. Sadece
testin yapılma şekli farklıdır. Yani programın beklendiği gibi çalışıp çalışmadığının
kontrol edilme biçimi, bir dizi testin uygulanma şekli, yazılımın
birimlerinin/bileşenlerinin (units) doğrulunu otomatik olarak test eden çalıştırılabilir
kod parçalıkları farklılık oluşturmaktadır. Bu çalıştırılabilir kod parçacıklarına da
birim test adı verilir.</p>
        <p>Ruby on Rails, Ruby programlama dili üzerinde çalışan, açık kaynak kodlu bir web
tabanlı uygulama geliştirme çatısıdır. Rails, testleri yazmayı çok basit hale getirmiştir.
Rails’in internet tarayıcısına bağlı kalmadan gelen istekleri test edebilme şansı vardır.</p>
        <p>
          Rails’in kendisine ait birim testi çerçevesi mevcuttur. Rspec [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], Ruby on Rails
için test aracıdır. Esnek ve düzenlenebilir raporlar verebilir. Đ çerisinde taklit (mocking
/stubbing) çerçevesi gömülüdür, komut zenginliği vardır.
        </p>
        <p>
          3.3. Mobil Programlama Dillerinde (iOS, Android) Kullanılan Çerçeveler
Mobil platformda durumu ele aldığımızda ise iOS ve Android programlama
dillerinde en çok kullanılan test çerçeveleri iOS için Ocunit/Ghunit [
          <xref ref-type="bibr" rid="ref11 ref12">11, 12</xref>
          ] iken Android
te ise Robotium/Monkeyrunner’dir [
          <xref ref-type="bibr" rid="ref15 ref16">15, 16</xref>
          ].
        </p>
        <p>
          *OCUnit’te hazır olarak yeni test sınıfı mevcuttur ve direk oluşturulabilir [
          <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
          ];
fakat GHUnitte temelde hazır olarak böyle bir sınıf bulunmamaktadır, dışarıdan
eklenti ile GHUnit te de hazır test sınıfı oluşturulabilir.
        </p>
        <p>
          *OCUnitin testleri derlenmeden önce uygulamaya eklenir ki bu olayda bir problem
olmaması için ekstra dikkat gerekir. GHUnitte ise mantıksal ve uygulama testleri
arasında çok farklılıklar yoktur. Ayrıca GHUnitte setUpClass ve tearDownClass
metotları mevcuttur [
          <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
          ].
        </p>
        <p>*OCUnit ve GHUnit te test metodunu debug yapma işlemi aynı şekildedir.
*Test sonuçlarını veya test kayıtlarını yorumlamak, değerlendirmek OCUnit’te
problemlidir. Log kayıtları sadece konsolda görünmektedir. GHUnitte test sonuçları
UITableView de görünmektedir ki bu tabloya filtre uygulanabilir, yönetilebilir.</p>
        <p>
          Robotium, Android uygulamalarını test etmeye yarayan açık kaynak kodlu bir test
çerçevesidir [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. Bu çerçeveye ait tüm kaynak kodlar [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]’den indirilebilir. Test
senaryosu geliştirenler bu çerçeveyi kullanarak fonksiyon, sistem ve kabul testleri
yazabilirler. Kullanıcının geliştirilen bir uygulamayı kullanırken izlediği adımları
taklit ederek test senaryoları oluşturulabilir.
        </p>
        <p>
          Monkeyrunner, Android uygulamalarını test etmeyi sağlayan diğer bir test
çerçevesidir [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. Bu aracı kullanarak uygulamalar dışarıdan kontrol edilebilir. Uygulamalar
emulatör ya da gerçek bir araca yüklenerek çalıştırılabilir. Monkeyrunner tam olarak
bir test etme aracı değildir. Çünkü Robotium’da olduğu gibi test senaryoları
oluşturulup test yapılamaz. Bunun yerine uygulmalara girdi gönderilip (tıklama ya da tuşa
basma yoluyla), bunun sonucunda oluşan çıktıların ekran görüntüleri kaydedilebilir.
Tablo 3’de Robotium ve Monkeyrunner için kıyaslama yapılmıştır [
          <xref ref-type="bibr" rid="ref15 ref16">15, 16</xref>
          ].
        </p>
        <p>Tablo 3. Robotium / Monkeyrunner çerçevelerinin Kıyaslanması
Kriterler</p>
        <p>Kaydetme ve
Çalıştırma</p>
        <p>Nesne Tanımlama</p>
        <p>Tekrar</p>
      </sec>
      <sec id="sec-3-2">
        <title>Doğrulama /</title>
        <p>Noktası</p>
        <p>Test Verisi Kullanımı
Raporlama
Komutlar
Etkinliği
Genişletilebilme
Lisans/Destek</p>
        <p>Kontrol</p>
        <p>Robotium
Kayıt desteklenmiyor
Tekrar çalıştırma başarılı</p>
        <p>Nesne tanıma tam olarak
desteklenir</p>
        <p>Doğrulama / kontrol noktası çok
başarılı</p>
        <p>Başarılı
Başarılı
Genelde başarılı
Çok etkin
Çok genişletilebilir değil
Açık kaynak kodlu, geleceği var
Monkeyrunner</p>
        <p>Kayıt ve yeniden çalıştırma
başarılı</p>
        <p>Tanıma ve kontrol noktaları iyi
derecede desteklenir</p>
        <p>Yüksek derecede doğrulama ve
kontrol noktası desteği</p>
        <p>Başarılı
Başarılı
Çok başarılı değil
Etkin
Çok genişletilebilir değil
Açık kaynak kodlu, geleceği var
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Sonuç</title>
      <p>Yapılan araştırmalar gösteriyor ki hataların fark edilmesi ve çözümlenmesi şirketlere,
kurumlara para, zaman ve itibar kaybettirmektedir. Bu nedenle de artık günümüzde
test güdümlü yazılım geliştirme sürecine verilen önem artmıştır. Bu amaçla projelerin
iyi kurgulanması ve doğru test araçlarının kullanılması projelerin başarıya
ulaşmasında en önemli etkendir.</p>
      <p>Sonuç olarak, test süreçleri yazılım geliştirme yaşam döngüsü içerisinde önemli bir
yere sahiptir ve geliştirilecek yazılımın zamanında tamamlanmasını ve maliyetini ve
doğrudan etkiler. Bu süreç için doğru test araçlarının kullanılması sürecin başarısını
önemli ölçüde etkiler. Doğru testler, doğru planlama, doğru kişiler ve iyi test araçları
ile başarı yakalanır. Test güdümlü modern yazılım geliştirme tekniklerinin temel yapı
taşlarını testler oluşturmaktadır. Bu nedenle test araçlarının seçimi ayrı bir öneme
sahiptir. Bu çalışma kapsamında test aracı seçiminde yazılımcılara faydalı olabilecek
çeşitli çerçevelere değinildi, birbirlerine göre üstünlükleri, zayıflıkları ortaya konuldu.
Bu tespitler, Süleyman Demirel Üniversitesi bünyesinde gerçekleştirilen projelerden
ve bu konuda yapılan literatür taramaları sonucunda elde edilen bilgilerden
faydalanılarak oluşturulmuştur. Bu çalışmanın diğer testleri de kapsayacak şekilde
genişletilmesi ve detaylandırılması mümkündür. Bu yönüyle çalışmamız ileride
yapılacak benzer çalışmalara örnek teşkil edecektir.</p>
      <p>Kaynaklar</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <source>Turkey Software Quality Report</source>
          <year>2013</year>
          , http://www.testrisk.com/
          <year>2013</year>
          /05/turkey-softwarequality
          <source>-report-2013</source>
          .html
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Ambler</surname>
            ,
            <given-names>S. W.</given-names>
          </string-name>
          (
          <year>2006</year>
          ).
          <article-title>Introduction to test driven development (TDD).</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Yamuç</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Çakın</surname>
            <given-names>A.</given-names>
          </string-name>
          (
          <year>2012</year>
          ). Web Uygulamaları Geliştirilmesinde Test Güdümlü
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Programlamanın</given-names>
            <surname>Yeri: Bir Örnek Durum Çalışması</surname>
          </string-name>
          , Akademik Bilişim Konferansı
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Acar</given-names>
            <surname>Özcan</surname>
          </string-name>
          , Extreme Programming,
          <source>Pusula Yayınevi</source>
          ,
          <year>2009</year>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Feathers</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          (
          <year>2004</year>
          ).
          <article-title>Working effectively with legacy code</article-title>
          . Prentice Hall Professional.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Llopis</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          (
          <year>2004</year>
          ).
          <article-title>Exploring the C++ unit testing framework jungle</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Louridas</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          (
          <year>2005</year>
          ).
          <article-title>JUnit: unit testing and coiling in tandem</article-title>
          . Software, IEEE,
          <volume>22</volume>
          (
          <issue>4</issue>
          ),
          <fpage>12</fpage>
          -
          <lpage>15</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>9. http://jakarta.apache.org</mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>10. http://rspec.info</mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>11. http://www.sente.ch/software/ocunit/</mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>12. https://github.com/gabriel/gh-unit</mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Horovitz</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kim</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>LaMarche</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          , &amp;
          <string-name>
            <surname>Mark</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          (
          <year>2013</year>
          ).
          <article-title>Unit Testing, Debugging, and Instruments</article-title>
          .
          <source>In More iOS6 Development</source>
          (pp.
          <fpage>481</fpage>
          -
          <lpage>510</lpage>
          ). Apress.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          (
          <year>2011</year>
          ).
          <article-title>Core Objective-C in 24 Hours</article-title>
          . Keith Lee.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Knott</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          (
          <year>2011</year>
          ).
          <article-title>Robotium@ XING. Automated regres-sion tests on mobile Android devices</article-title>
          .
          <source>Book your training with Díaz &amp; Hilterscheid!</source>
          ,
          <volume>26</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Rajath</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          (
          <year>2012</year>
          ).
          <source>Automated Testing Framework For Android Based Applications</source>
          .
          <source>International Journal of Research in Robotics Applications-IJRRA</source>
          ,
          <volume>1</volume>
          (
          <issue>1</issue>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>17. https://code.google.com/p/robotium/</mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>