<!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>Yazılım Hata Kestirimi İçin Veri Analizi Yöntemlerinin Kullanılması</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Özkan SARI</string-name>
          <email>ozkan.sari@provus.com.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>Oya KALIPSIZ</string-name>
          <email>kalipsiz@yildiz.edu.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Bilgisayar Mühendisliği Bölümü, Yıldız Teknik Üniversitesi</institution>
          ,
          <addr-line>İstanbul</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Provus - A Mastercard Company</institution>
          ,
          <addr-line>Ayazağa, İstanbul</addr-line>
        </aff>
      </contrib-group>
      <fpage>293</fpage>
      <lpage>304</lpage>
      <abstract>
        <p>Özet. Yazılım kalite faaliyetleri içerisinde hataların giderilmesi için gerçekleştirilen test faaliyetleri önemli bir yer tutmaktadır. Bazı test faaliyetleri neticesinde dahi hataların tespit edilemediği durumlar olabilir. Bu nedenle yazılım hatalarının ve kusurlarının tespit edilebilmesi için etkin yöntemlere ihtiyaç vardır. Koddaki hatalı olabilecek yerler kodun özellikleri incelenerek tespit edilebilirse hataların daha erken bulunması ve müdahale edilmesi mümkün olacaktır. Hata kestirim faaliyetleri de bu amaca hizmet ederek, yazılımdaki hataların otomatik bir şekilde ve erken safhada tespitini amaçlamaktadır. Devam eden araştırma çalışmasında, belli başlı hata kestirim yöntemleri incelenmiş ve hata kestirimi için etkin bir model geliştirilmesi amaçlanmıştır. Modelin oluşturulması için lojistik regresyon analizi tabanlı yöntemler üzerinde durulmuştur. Ortaya konulan modelin oluşturulmasında ve sınanmasında açık bir hata veritabanından faydalanılmıştır. Ayrıca model Provus - A Mastercard Company bünyesinde geliştirilen yazılımların kodları üzerine uygulanmış ve hata kestirimi konusunda belirli bir seviyede başarı elde edilebilmiştir. Anahtar Kelimeler: Yazılım kalite yönetimi, Yazılım Hataları, Hata kestirimi, Veri analizi, Lojistik regresyon analizi</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Geliştirilen yazılımların bazı hatalar içermesi doğaldır. Önemli olan bu hataların tespit
edilebilmesidir. Hataların tespitinde testler önemli bir yer tutmaktadır ancak her
zaman bu yeterli olmamaktadır. Testte tespit edilemeyen hataların sonradan tespit
edilmesi veya yazılımdaki hataların mümkün olduğunca erken tespit edebilmesi için etkin
yöntemlere ihtiyaç vardır.</p>
      <p>
        Yazılım hatalarının, yazılım geliştirme faaliyetlerinin erken safhalarında tespit
edilmesinin daha az masraflı olduğu bilinmektedir. Araştırmalar göstermiştir ki, bir
hatanın düzeltilmesi yazılımın teslimi sonrasına kalırsa, aynı hatanın yazılımın
geliştirme safhasında düzeltilmesine göre maliyet yüz kat daha artmaktadır [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Yazılım
hata kestirim yöntemleri sayesinde yazılımdaki hataların, kodun bazı özellikleri
incelenerek tespit edilmesi mümkündür.
      </p>
      <p>Bu çalışmanın amacı, yazılımdaki hataların kodun özellikleri incelenerek tespit
edilmesi ve hatalı sınıf/dosyaların otomatik bir şekilde ayırt edilebilmesidir. Bu
amaçla kodların bazı metrikleri üzerinden lojistik regresyon analizi ile modülün hatalı olma
ihtimali tespit edilecektir.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Yazılım Hata Kestirimi Yöntemleri</title>
      <p>
        Yazılım mühendisliği alanında yapılmış çalışmalar incelendiğinde, sistemdeki yazılım
kusurlarının tespiti ve kestirimi üzerine birçok araştırma yapıldığı görülmektedir [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
Kaynak kodun metrikleri incelenerek yazılımda gelecekte oluşabilecek hataların
tespiti mümkündür. Metrikler, yazılımın kalitesi hakkında bilgi sağlamak ve olası
hataların kolayca algılanmasında fayda sağlarlar.
      </p>
      <p>
        Hata kestirim faaliyetlerinin kod seviyesinde tespiti yönünde çok çeşitli
yaklaşımlar bulunmaktadır. Bu yaklaşımlar hem yöntem hem de başarım açısından farklılıklar
göstermektedirler [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>
        Bu alanda yapılan çalışmalarda kullanılan farklı yaklaşımlar Marco D'Ambros ve
diğerleri tarafından beş ana gurupta toplanmıştır [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Çalışmamızda farklı tipteki
metrikler incelenmiştir., Kaynak kod metrikleri odaklı yazılım hata kestirimi
yöntemlerine odaklanılmakla beraber diğer yöntemlerin güçlü yönlerinden faydalanılmaya
çalışılmıştır.
2.1
      </p>
      <p>Kaynak Kod Metrikleri
Çalışmamızda temel olarak kaynak kod metriklerini değerlendirilmesine yönelik bir
yöntem kullanılmıştır. Kaynak kod metrikleri yöntemi, çeşitli yazılım metrik
değerlerinin bir arada kullanılması ile bir model oluşturulması ve bu modelin yazılımdaki
hatalarla bağlantısının bulunması esasına dayanır. Literatürdeki birçok çalışma CK
(Chidamber &amp; Kemerer) metriklerini kullanmaktadır. Buna ek olarak nesne tabanlı
metrikler (Object-Oriented Programming - OOP), kaynak kod satır sayısı (Line of
Code - LOC) gibi metrikler de kullanılmaktadır.</p>
      <p>
        Ek olarak OOP metriklerinin CK metrikleri ile birleşimi de hata kestiriminde tercih
edilmektedir. CK metrikleri üzerinden hata kestirimi yapan Chidamber &amp; Kemerer
modeli ve Gyimothy ve diğerlerinin LOC tabanlı hata kestirim yaklaşımı buna örnek
olarak verilebilir [
        <xref ref-type="bibr" rid="ref4 ref5">4, 5</xref>
        ].
2.2
      </p>
      <sec id="sec-2-1">
        <title>Süreç Metrikleri Tabanlı Yaklaşım</title>
        <p>
          Süreç metrikli tabanlı yaklaşımda hatalara değişikliklerin sebep olduğu tezinden yola
çıkılır ve değişikliklerin sayısı, son zamanlardaki değişiklerin sıklığı, değişikliklerin
kaç farklı yazılımcı tarafından yapıldığı vb. değerler incelenir. Buradaki yaklaşımın
temel mantığı özellikle farklı kişiler tarafından, çok ve sık değişiklik yapılan kodlarda
hataların çok olduğu gerçeğidir. Bu yaklaşıma Moser ve diğerlerinin çalışmaları
örnek olarak verilebilir [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. Bu yaklaşım, çalışmada kullanılan kaynak kod metrik odaklı
yaklaşımın özelleşmiş bir tipi olarak düşünülebilir. Diğer metriklerle birlikte süreç
tabanlı metriklerin de kullanılması çalışmanın ilerleyen aşamalarında düşünülebilir.
2.3
        </p>
        <p>
          Önceki Kusurlar
Geçmişteki hatalardan yola çıkarak gelecekteki hataların tahmin edilebileceği
düşüncesinden yola çıkılmıştır. Zimmermann ve diğerleri çalışmalarında geçmişteki kod
kusurlarının bulunduğu yerlerin bir hata veritabanı oluşturularak belirlenmesinin
önemine değinmişlerdir [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. Çalışmamızda da bu tip bir hata veritabanından
faydalanılmıştır.
2.4
        </p>
        <sec id="sec-2-1-1">
          <title>Değişikliklerin Entropisi</title>
          <p>
            Kompleks değişikliklerin basit değişikliklere kıyasla hataya daha açık olduğu tezine
dayanır. Hassan tarafından yapılan çalışma bu yaklaşıma örnek olarak verilebilir [
            <xref ref-type="bibr" rid="ref8">8</xref>
            ].
Bu fikrin temelinde, bir sistemdeki değişikliklerin ne kadar dağınık olduğunun belirli
bir zaman aralığında ölçülmesi vardır. Tek bir dosyayı etkileyen değişiklik, birçok
dosyayı etkileyen değişiklikten daha basit kabul edilir. Değişikliklerdeki yaygınlık
arttıkça, karmaşıklık da artacaktır. Bu tip bir veri elde edilemediği için söz konusu
yönteme çalışmamızda yer verilmemiştir.
3
          </p>
          <p>Veri Analizi Yöntemleri
Yazılım hata kestiriminde kullanılan çeşitli yöntemlerden biri de veri analizidir.
Çalışmamızda, veri analizi yöntemlerinden lojistik regresyon analizi üzerine
odaklanılmıştır..</p>
          <p>
            Lojistik regresyon analizinde temel amaç bir regresyon denklemi oluşturarak,
bireylerin hangi grubun üyesi olduğunu kestirmektir [
            <xref ref-type="bibr" rid="ref9">9</xref>
            ].
3.1
          </p>
        </sec>
        <sec id="sec-2-1-2">
          <title>Regresyon Analizi</title>
          <p>
            Regresyon analizi, aralarında sebep-sonuç ilişkisi bulunan iki veya daha fazla
değişken arasındaki ilişkiyi belirlemek ve ölçmek için kullanılır. Hayatın içindeki birçok
olayda sebep sonuç ilişkisine rastlamak mümkündür. Örneğin, yaş ile boy, şehir
nüfusu ile suç oranı, hayvana verilen yem miktarı ile alınan süt miktarı, çalışanın iş yükü
ile stres gibi çeşitli değişkenler arasında ilişki ortaya koymak mümkündür. [
            <xref ref-type="bibr" rid="ref10">10</xref>
            ].
          </p>
          <p>Değişkenler arasındaki bu ilişkiyi kullanarak o konu ile ilgili tahminler ya da
kestirimler yapabilmek amacıyla regresyon analizi kullanılır.
3.2</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>Doğrusal Regresyon</title>
      </sec>
      <sec id="sec-2-3">
        <title>Kıyaslanması</title>
      </sec>
      <sec id="sec-2-4">
        <title>Analizi ile</title>
      </sec>
      <sec id="sec-2-5">
        <title>Lojistik</title>
      </sec>
      <sec id="sec-2-6">
        <title>Regresyon</title>
      </sec>
      <sec id="sec-2-7">
        <title>Analizinin</title>
        <p>
          Doğrusal regresyon analizi ile Lojistik regresyon analizi değişkenlerin ölçüm biçimi
yönünden farklılık gösterir. Doğrusal regresyon analizinde bağımlı değişken ve
bağımsız değişkenler sayısal (kesikli ya da sürekli) olarak belirtilir. Örneğin, yaş ile kan
basıncı arasında bir ilişki aranacaksa; hem yaş, hem de kan basıncı sayısal olarak
belirtilmelidir. Lojik regresyonda ise bağımlı değişkenler nitelik ve kategorik
bakımdan nitel olarak değerlendirilirler. Cinsiyetin erkek ya da kadın olması buna örnek
verilebilir. Lojik regresyonda bağımsız değişkenler sayısal ya da nitel değerler
alabilirler [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
        </p>
        <p>
          Aşağıdaki örnekte 200 öğrenci, bir kurs bitiminde geçti/kaldı şeklinde
değerlendirilmiştir. Bu kursa girişte de bir ölçme sınavı uygulanmıştır [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. Kursa girişte
uygulanan test skoru ile kurstan geçme arasındaki ilişkiyi bulmak için lojistik
regresyondan faydalanılabilir. Bu örnekte doğrusal regresyon kullanmak olası değildir. Çünkü
bağımlı değişken sonucu 1 ya da 0 değerini alabilir. Doğrusal regresyon ile sınırsız bir
aralıkta sayısal değer elde edilebilir.
        </p>
        <p>
          Şekil 1. Öğrenci giriş sınavı ile kurs geçme arasındaki ilişki araştırması örneği [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]
3.3
        </p>
        <sec id="sec-2-7-1">
          <title>Lojistik Regresyon Analizi</title>
          <p>
            Uygulamalı sosyal bilimlerde karşılaşılan ve araştırılan olaylara ilişkin elde edilen
verilerde, çoğunlukla bağımlı değişkenin iki mümkün değerinden birine sahip
olabileceği varsayılmaktadır. Örneğin bir kişi okuldan mezun olmuştur ya da olmamıştır, bir
işçi çalışıyordur ya da işsizdir, bir kişi bir gruba üyedir ya da değildir, bir hasta
tedaviye cevap verebilir ya da vermeyebilir. İki olası ve farklı değer içeren bu tür verilere
iki değerli veriler denilmektedir. İki değerli veya ikili değişkenler literatürde (0;1)
değişkenleri olarak da adlandırılmaktadır. İki değerli değişkenler ile çalışan bir
araştırmacının hedefi, bağımsız değişkenlerin koşullu bir kümesine bağımlı olarak, başarı
veya başarısızlık olasılığının kestirilmesidir [
            <xref ref-type="bibr" rid="ref13">13</xref>
            ].
          </p>
          <p>
            Lojistik regresyon analizi, bağımlı değişkenin ölçüldüğü ölçek türüne ve bağımlı
değişkenin seçenek sayısına göre üçe ayrılmaktadır [
            <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
            ]:
x
x
x
İkili (Binominal) Lojistik Regresyon Analizi: Bağımlı değişkenin iki
düzeyi olduğunda kullanılır. Örneğin, hasta/sağlam, yaşıyor/öldü,
etkili/etkisiz vb.
          </p>
        </sec>
      </sec>
      <sec id="sec-2-8">
        <title>Sıralı (Ordinal) Lojistik Regresyon Analizi: Bağımlı değişken sıralı ni</title>
        <p>tel veri tipinde olduğunda kullanılır. Örneğin, hafif/orta/şiddetli, çok
etkili/orta derecede, etkili/etkisiz vb.
Çok Kategorili/Düzeyli (Multinominal) İsimsel Lojistik Regresyon
Analizi: Bağımlı değişken ikiden çok düzeyli sıralı olmayan nitel veri
tipinde olduğunda kullanılır. Örneğin, çalışıyor/çalışmıyor/emekli vb.</p>
        <p>
          Lojistik regresyon, bağımsız değişkenin sayısına göre “tek değişkenli lojistik
regresyon” ve “çok değişkenli lojistik regresyon” olarak da sınıflandırılmaktadır. Lojistik
regresyon yönteminin hedefi, bağımlı değişkenin sonucunu tahmin edebilecek en sade
modeli bulmaktır. Lojistik regresyon analizi sonucunda elde edilen modelin uygun
olup olmadığı “model ki-kare” testiyle, her bir bağımsız değişkenin modelde
varlığının anlamlı olup olmadığı ise Wald istatistiği ile sınanır [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
3.4
        </p>
        <sec id="sec-2-8-1">
          <title>Lojistik Regresyon Analizi Terimleri</title>
          <p>
            Lojistik regresyon ile ilgili bazı terimler bu bölümde verilmiştir:
x Odds: Başarı ya da görülme olasılığının (p), başarısızlık ya da görülmeme
olasılığına (1 - p) oranıdır.
x Bahis Oranı (Odds Ratio, OR): İki “odds”un birbirine oranıdır.
x Lojit: Bahis oranının doğal logaritmasıdır. Bahis oranı asimetriktir. Bu
değerin doğal logaritması alınarak simetrik hale dönüştürülür Lojit katsayıları
(lojit) doğrusal regresyon analizindeki “β” katsayısının karşılığıdır.
x En Çok Olabilirlik Yöntemi (Maksimum Likelihood Estimation):
Lojistik regresyonda model kestiriminde en küçük kareler (ordinary least square)
yöntemi yerine, en çok olabilirlik (maximum likelihood) yöntemi kullanılır.
Lojistik regresyonun istatistiksel modeli aşağıda verilmiştir. “β”katsayılarının
hesaplanması bölümün devamında anlatılmaktadır.
(1)
Buradan yola çıkarak p, yani bir kategoriye ait olma olasılığı aşağıdaki şekilde
bulunur:
Lojistik regresyon analizi uygulanırken bazı noktalara dikkat edilmelidir. Uygun tüm
bağımsız değişkenler modele dâhil edilmelidir. Bazı değişkenlerin modele dâhil
edilmemesi hata teriminin büyümesine ve modelin yetersizliğine neden olabilir. Uygun
olmayan tüm bağımsız değişkenler de dışlanmalıdır. Nedensel olarak uygun olmayan
değişkenlerin modele dâhil edilmesi; modeli karmaşık hale getirebilir, modelin
yorumlanmasını zorlaştırabilir, bu değişkenlerin bağımlı değişken üzerinde pay
sahibiymiş gibi yanlış izlenim vermesine neden olabilir [
            <xref ref-type="bibr" rid="ref11">11</xref>
            ].
          </p>
          <p>Örnek olarak, yaşı 60 yaşından büyük olanları yaşlı, küçük olanları genç kabul
ederek, hastalığa yakalanma ile yaşlılık arasındaki ilişkiyi Tablo 1’deki örnek veri setine
göre inceleyebiliriz. Burada bağımlı değişken, hasta olup olmama, bağımsız değişken
ise yaşlılık durumu olacaktır.</p>
          <p>Tablo 1. Yaşlılığa göre hastalığa yakalanma verisi
Yaşlılık (A)
Genç (&lt;60)
Yaşlı (&gt;60)</p>
          <p>Hasta</p>
          <p>Değil</p>
          <p>Toplam
22
21
51
6
73
27
Bu veriden yola çıkarak aşağıdaki lojik regresyon hesaplamaları yapılabilir:
Odds(genç)=22/51=0,431
y=ln(0,431) = -0,841
Odds(yasli)=21/6=3,5</p>
          <p>y=ln(3,5)=1,253</p>
          <p>Bahis Oranı =3,5/0,431=8,121</p>
          <p>Buradaki bahis oranı değerinin anlamı şudur; yaşı 60’tan büyük olanların hasta
olma oranları, yaşı küçük olanlara göre 8,121 kat daha fazladır.</p>
          <p>Modeli yaşlı olma parametresine göre kurarak A: yaşlı olup olmama (1/0) değerini
alır.</p>
          <p>b0= ln(0,431) = -0,841
b1= ln(3,5)-ln(0,431) = 1,253 - (-0,841) =2,094
y = -0,841+2,094A
Lojistik regresyon modeli bu durumda aşağıda gösterilmiştir:</p>
          <p>p=exp(-0,841+2,094A) / ( 1 + exp(-0,841+2,094A) )
Örneğin A=1 yani yaşlı birisi, %77,8 oranında hasta olacaktır.</p>
          <p>
            p=exp(-0,841+2,094 . 1) / ( 1 + exp(-0,841+2,094.1) )
Çalışmamızda Marco D'Ambros tarafından hazırlanmış hata kestirimi veritabanından
faydalanılmıştır [
            <xref ref-type="bibr" rid="ref3">3</xref>
            ]. Bu veritabanı 5 farklı projeden toplamda 5371 örneklem
içermektedir. Verilerin elde edilmesinde popüler açık kaynak kodlu bazı projelerin
kodlarından faydalanılmıştır. Veritabanında CK, nesneye dayalı programlama, değişim,
entropi gibi birçok farklı metrikler ve dosyada/sınıfta hata bulunup bulunmadığı
bilgisi verilmektedir. Bu veritabanından sadece belli tipte metrikler seçilerek lojik
regresyon analizi modeli oluşturmada kullanılmıştır.
          </p>
          <p>
            Buradaki metriklerin tamamının kullanılmaması ve sadece belli metriklerin tercihi,
bu verilerin Provus firmasından elde edilebilen verilerle uyumlu olması amacıyla
yapılmıştır. Ayrıca elde edilen 30’a yakın metriğin tamamının bir model oluşturmada
kullanılması hem pratikte hem de modelin başarısı için mümkün değildir. Yapılan
araştırmalarda da 3 farklı metriğin hata kestirim modellerinde yeterli bir sayı olduğu
ortaya konmuştur [
            <xref ref-type="bibr" rid="ref14">14</xref>
            ].
          </p>
          <p>Veritabanının seçilen örnek metrikleri içeren bir kesiti Tablo 2’de görülmektedir.</p>
          <p>Tablo 2. Kullanılan veri setinden örnek bir kesit
Dosya/Sınıf İsmi
IndexBinaryFolder
CachedIndexEntry
ASTNode
MemberTypeBinding
CodeSnippetParser
Location
SingleMemberAnnotation
NLSTag</p>
          <p>
            FAN-IN
1
1
102
─ FAN-IN değeri mevcut sınıfa referans veren diğer sınıfların sayısını gösterir.
─ WMC (İng. Weighted Method Count) CK metriklerinden birisidir [
            <xref ref-type="bibr" rid="ref4">4</xref>
            ]. Kodun
karmaşıklığı (İng. cyclomatic complexity) değerini ifade eder. Metoddaki toplam farklı
yollar hesaba katılır. Buradaki değer sınıftaki tüm metodların toplam WMC
değerini ifade eder.
─ NOA (İng. Number of Attributes) sınıftaki toplam değişken sayısını ifade eder.
─ NOM (İng. Number of Methods) sınıftaki toplam metod sayısını ifade eder.
5
          </p>
          <p>
            Lojistik Regresyon Uygulaması
Söz konusu hata kestirimi veritabanı R dili ve R-Studio aracı kullanılarak lojistik
regresyon analizine tabi tutulmuştur [
            <xref ref-type="bibr" rid="ref15">15</xref>
            ]. 5371 örneklemden oluşan verinin %10’u test
için ayrılmış, geri kalan kısmı lojistik regresyon modelinin oluşturulmasında
kullanılmıştır.
          </p>
          <p>Bir kod dosyasında hata olup olmama durumunun diğer niteliklerle bağlantısı
üzerine lojistik regresyon modeli oluşturulmuştur. Modelin katsayıları Tablo 3’te
verilmiştir. Burada Z değeri, Wald z istatistik testi değeridir. Tahmin katsayı değerinin,
standart hata değerine bölünmesiyle elde edilir. Karşılık gelen katsayıların istatistiksel
olarak anlamlı olup olmadığını test etmek için kullanılır. Pr(&gt;|z|) ise, Z değerine
karşılık gelen olasılık değeridir. Değerin küçük olması istatistiğin anlamlı olduğunu
gösterir. Son sütunda da değerin ne kadar anlamlı olduğu simgesel olarak gösterilmiştir.</p>
          <p>Tablo 3. Lojistik Regresyon Modeli Hesaplama Sonuçları ve Katsayıları
(Sabit Terimi)
FAN-IN
WMC
NOA
NOM</p>
          <p>Buradan yola çıkarak, kod dosyasının hatalı kategorisine ait olma olasılığı
aşağıdaki şekilde hesaplanabilir:</p>
          <p>Tablo 3’te verilen katsayı tahmin değerleri için R dilindeki confint fonksiyonu ile
hesaplanmış, % 95 güven aralığı değerleri Tablo 4’de gösterilmiştir.</p>
          <p>Tablo 4. Lojistik Model Güven Aralıkları
(Sabit Terimi)
FAN-IN
WMC
NOA
NOM</p>
          <p>% 2,5
-2,365867297
0,001400130
0,004435944
0,017189900
0,005270617</p>
          <p>% 97,5
-2,136243951
0,013165179
0,009051245
0,033108933
0,025742899</p>
          <p>Burada katsayıların eksponansiyeli alınarak, bahis oranı (odds ratio, OR) değerleri
de yorumlanmış ve Tablo 5’te gösterilmiştir.</p>
          <p>Tablo 5. Lojistik Model Bahis Oranı Değerleri
(Sabit Terimi)
0,105288</p>
          <p>FAN-IN
1,007309</p>
          <p>WMC
1,006766</p>
          <p>NOA
1,025468</p>
          <p>NOM
1,015628</p>
          <p>Tablo 5'deki sonuçlara bakarak, diğer değişkenler sabit tutulmak üzere
değişkenlerdeki değişimin ihtimaller üzerindeki etkisi hakkında aşağıdaki yorumlar yapılabilir:
─ FAN-IN değerindeki 1 birim artış, kabul ihtimalini %0,73 arttırır.
─ WMC değerindeki 1 birim artış, kabul ihtimalini %0,67 arttırır.
─ NOA değerindeki 1 birim artış, kabul ihtimalini %2,55 arttırır.
─ NOM değerindeki 1 birim artış, kabul ihtimalini %1,56 arttırır.</p>
          <p>Lojistik regresyon denkleminin elde edilmesinden sonra, test için ayrılan verinin
modele göre nasıl sonuç verdiği kıyaslanmıştır. Modelin %84 oranında başarılı
olduğu görülmüştür. Test sonuçları Tablo 6’da verilmiştir.</p>
          <p>Tablo 6. Lojistik Model Test Sonuçları
Test Veri Sayısı
Başarılı
Başarısız
Başarı Oranı
573
486
87
% 84,817</p>
          <p>Modelin Kullanımı
Çalışmamızda bir sonraki adım, modelin Provus bünyesinde geliştirilen yazılımların
kodları üzerine uygulanmasıdır. Çalışmada kullanılan, hata veritabanı genelde popüler
açık kaynak kodlu bazı projelerin kodlarından derlenmiştir. Bu veri seti üzerinden
oluşturulan modelin, tamamen farklı bir kod ortamında sınanması ve başarısının
görülmesi önemlidir. Bu nedenle Provus bünyesinde geliştirilen bir proje üzerinde
uygulama gerçekleştirilmiştir.
6.1</p>
        </sec>
      </sec>
      <sec id="sec-2-9">
        <title>Modelin Uygulandığı Projenin Özellikleri</title>
        <p>
          Provus bünyesinde geliştirilmekte olan ATM yönetim sistemi yazılımı birçok farklı
modülden oluşan büyük ölçekli bir yazılımdır. Bu yazılım 7-24 ATM’lerle iletişim
halinde çalışan canlı bir sistemdir [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. Bu yazılımı oluşturan proje kodları Java ve C
programla teknolojileri ile geliştirilmiştir ve 250 bin satırdan fazla kod içermektedir.
İlk aşamada projede aktif olarak kullanılan temel bazı sınıflar incelenerek sonuçları
paylaşılmıştır.
        </p>
        <p>İncelenen sınıflar ve projede gerçekleştirdikleri işlevler aşağıda verilmiştir:
─ FileUtil: Projenin ortak kütüphanesinde bulunan bir sınıftır. Genel dosya okuma ve
yazma işlemleri bu sınıftan yönetilir.
─ MailMessageHelper: Tüm modüller tarafından e-posta göndermek için ortak
olarak kullanılır.
─ ProvusScheduledThreadPool: Paralel gerçekleştirilecek işlemlerin
yönetilmesinde kullanılan, yoğun iş yüklerini yöneten temel sınıflardır.
─ ModuleInitializer: Modüllerin ilklendirme işlemlerini yöneten ortak sınıflardır.</p>
        <p>Projenin ortak kütüphanesinde bulunur.
─ ConfigUtil: Projelerin kullandığı ayar dosyalarının okunması ve değerlerinin ortak
bir hafıza alanında tutulmasını yöneten sınıftır.
─ EjournalParser: ATM’ler üzerinden alınan jurnal denilen log dosyalarının
işlenmesini yöneten ana sınıftır.
─ DieboldEJournalDownloadAtmRunner: Diebold marka ATM’lerdeki jurnal
denilen log dosyalarının ATM’den alınması işlemlerinin yönetildiği sınıftır.
─ PAYSFTPClient: Projelerdeki ATM’ye FTP ile bağlanma gibi temel işlemleri
yürüten sınıftır.
6.2</p>
      </sec>
      <sec id="sec-2-10">
        <title>Metrik Değerlerinin Elde Edilmesi</title>
        <p>
          Söz konusu Provus bünyesinde geliştirilen proje kodlarından modele uyumlu metrik
değerlerinin elde edilmesinde Eclispe IDE [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] Google Code Pro Analytix [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] ve
Eclipse Metrics Eklentisi [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] araçlarından faydalanılmıştır.
6.3
        </p>
        <p>İlk Sonuçlar ve Bulgular
Elde edilen örnek veri seti ve modele göre hesaplanan hata ihtimali oranı Tablo 7’de
görülmektedir. İncelenen her bir dosya için Tablo 3’te verilen modele uygun metrik
değerleri çıkartılmış ve modelin sonucunda tespit edilen hata ihtimali oranı ve
gerçekte dosyada hata bulunup bulunmadığı bilgisi verilmiştir.</p>
        <p>Tablo 7. Elde Edilen Modelin Provus Proje Kodlarına Uygulanması
Dosya/Sınıf İsmi
FileUtil
MailMessageHelper
ProvusScheduledThreadPool
ModuleInitializer
ConfigUtil
EjournalParser
DieboldEJournalDownloadAtmRunner
PAYSFTPClient</p>
        <p>Tablo 7’de verilen dosya/sınıflar için hata ihtimalleri incelendiğinde FileUtil
ve EjournalParser sınıflarında diğerlerinden çok yüksek olarak %50 üzeri bir
hata oranı tespit edilmiştir. Bu sınıflarda gerçekten de raporlanan hatalar mevcuttur.
Bu iki sınıf dışında PAYSFTPClient sınıfında da raporlanmış bir hata olmasına
rağmen, model tarafından hata ihtimali %25 gibi daha düşük bir değer olarak
gösterilmiştir. Diğer sınıflar için modelin tespit ettiği düşük hata oranları, gerçek sonuçlarla
uyumluluk göstermektedir.
7</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Gelecek Çalışmalar</title>
      <p>Bildiride konu edilen araştırma çalışması devam etmektedir. Yapılan temel çalışmada
kayda değer bir ilerleme kaydedilmiştir. Bununla birlikte daha farklı ve çeşitli
metrikleri dikkate alan bir model kurmak amacıyla çalışmaların ilerletilmesi
düşünülmektedir.</p>
      <p>Yapılan çalışmalarda hem modelin oluşturulmasında, hem de test için eldeki veri
setlerinin önemi kritiktir. Bunun için daha çeşitli projelerden kodların analiz edilerek
bunların metrikleri değerlendirilmelidir. Ayrıca modelden edilen başarımın daha
farklı yazılım hata kestirimi yöntemlerinin başarımlarıyla kıyaslanması faydalı olacaktır.</p>
      <p>Yapılacak çalışmanın neticesinde kodun analizi ve hata kestiriminin otomatik hale
getirilmesi için, çalışmada ortaya konacak nihai modelin bir yazılım veya araç haline
getirilmesi düşünülebilir.
Çalışmamız Provus – A Mastercard Company tarafından desteklenmiştir. Çalışmaya
konu olan model, firma bünyesinde geliştirilen yazılımların kodları üzerine
uygulanmıştır.
9</p>
      <p>Kaynakça</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Boehm</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Basili</surname>
            <given-names>V.R.</given-names>
          </string-name>
          ,
          <source>“Software Defect Reduction Top 10 List”</source>
          , IEEE Computer, Vol.
          <volume>34</volume>
          , No. 1, s.
          <fpage>135</fpage>
          -
          <lpage>137</lpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Thilo</given-names>
            <surname>Mende</surname>
          </string-name>
          and
          <string-name>
            <given-names>Rainer</given-names>
            <surname>Koschke</surname>
          </string-name>
          ,
          <article-title>Effort-aware defect prediction models</article-title>
          ,
          <source>In Proceeding of the 14th European Conference on Software Maintenance and Reengineering (CSMR</source>
          <year>2010</year>
          ), s.
          <fpage>109</fpage>
          -
          <lpage>118</lpage>
          . IEEE Computer Society,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Marco D'Ambros</surname>
            ,
            <given-names>Michele</given-names>
          </string-name>
          <string-name>
            <surname>Lanza</surname>
            , and
            <given-names>Romain</given-names>
          </string-name>
          <string-name>
            <surname>Robbes</surname>
          </string-name>
          .
          <article-title>An extensive comparison of bug prediction approaches</article-title>
          .
          <source>In MSR '10: Proceedings of the 7th International Working Conference on Mining Software Repositories, s. 31-41</source>
          ,
          <year>2010</year>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Raimund</given-names>
            <surname>Moser</surname>
          </string-name>
          , Witold Pedrycz, and
          <string-name>
            <given-names>Giancarlo</given-names>
            <surname>Succi</surname>
          </string-name>
          .
          <article-title>A comparative analysis of the effciency of change metrics and static code attributes for defect prediction</article-title>
          .
          <source>In Proceedings of ICSE 2008, sayfa 181-190</source>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Thomas</given-names>
            <surname>Zimmermann</surname>
          </string-name>
          , Rahul Premraj, and
          <string-name>
            <given-names>Andreas</given-names>
            <surname>Zeller</surname>
          </string-name>
          .
          <article-title>Predicting defects for eclipse</article-title>
          .
          <source>In Proceedings of PROMISE</source>
          <year>2007</year>
          ,
          <article-title>sayfa 76</article-title>
          . IEEE CS,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Ahmed</surname>
            <given-names>E.</given-names>
          </string-name>
          <string-name>
            <surname>Hassan</surname>
          </string-name>
          .
          <article-title>Predicting faults using the complexity of code changes</article-title>
          .
          <source>In Proceedings of ICSE</source>
          <year>2009</year>
          , s.
          <fpage>78</fpage>
          -
          <lpage>88</lpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Shyam</surname>
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Chidamber</surname>
            and
            <given-names>Chris F.</given-names>
          </string-name>
          <string-name>
            <surname>Kemerer</surname>
          </string-name>
          .
          <article-title>A metrics suite for object oriented design</article-title>
          .
          <source>IEEE Trans. Software Eng.</source>
          ,
          <volume>20</volume>
          (
          <issue>6</issue>
          ):
          <fpage>476</fpage>
          -
          <lpage>493</lpage>
          ,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>Tibor</given-names>
            <surname>Gyimothy</surname>
          </string-name>
          , Rudolf Ferenc, and Istvan Siket.,
          <article-title>Empirical validation of objectoriented metrics on open source software for fault prediction</article-title>
          .
          <source>IEEE Trans. Software Eng.</source>
          ,
          <volume>31</volume>
          (
          <issue>10</issue>
          ):
          <fpage>897</fpage>
          -
          <lpage>910</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Larose</surname>
            ,
            <given-names>D. T.</given-names>
          </string-name>
          (
          <year>2006</year>
          )
          <article-title>Logistic Regression</article-title>
          ,
          <source>in Data Mining Methods and Models</source>
          , John Wiley &amp; Sons, Inc., Hoboken, NJ,
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Fikret</surname>
            <given-names>Gültekin</given-names>
          </string-name>
          , Regresyon Analizi, Türkistatistik.net, http://turkistatistik.net/upload/dosya/reganaliz.pdf ,
          <source>Erişim Tarihi: 9 Mayıs</source>
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Sümbüloglu</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sümbüloglu</surname>
          </string-name>
          , Biyoistatistik, Hatiboglu Yayınevi,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Robert</surname>
            <given-names>Burns</given-names>
          </string-name>
          &amp; Richard Burns,
          <source>Business Research Methods and Statistics Using SPSS, Chapter</source>
          <volume>24</volume>
          ,
          <string-name>
            <surname>Sage</surname>
            <given-names>Publications</given-names>
          </string-name>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13. Eclipse Projesi Websitesi. http://www.eclipse.org. ,
          <source>Erişim Tarihi: 9 Mayıs</source>
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Khoshgoftaar</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <article-title>M. ve</article-title>
          <string-name>
            <surname>Seliya</surname>
          </string-name>
          , N., “
          <article-title>How Many Software Metrics Should be Selected for Defect Prediction?”</article-title>
          , FLAIRS Conference,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>R-Studio Web</surname>
          </string-name>
          Sitesi, https://www.rstudio.com/,
          <source>Erişim Tarihi: 9 Mayıs</source>
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Provus</surname>
          </string-name>
          ATM Operasyonları, http://www.provus.com.tr/hizmetler/atmoperasyon.html,
          <source>Erişim Tarihi: 9 Mayıs</source>
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Google</surname>
          </string-name>
          <article-title>Code Pro Analytix Projesi web sitesi</article-title>
          . https://developers.google.com/javadev-tools/codepro/doc/,
          <source>Erişim Tarihi: 9 Mayıs</source>
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18. Eclipse Metrics. http://metrics2.sourceforge.net,
          <source>Erişim Tarihi: 9 Mayıs</source>
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>