<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="tr">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Yazılım Hata Kestirimi İçin Veri Analizi Yöntemlerinin Kullanılması</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Özkan</forename><surname>Sari</surname></persName>
							<email>ozkan.sari@provus.com.tr</email>
							<affiliation key="aff0">
								<orgName type="institution">Provus -A Mastercard Company</orgName>
								<address>
									<settlement>Ayazağa, İstanbul</settlement>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Oya</forename><surname>Kalipsiz</surname></persName>
							<email>kalipsiz@yildiz.edu.tr</email>
							<affiliation key="aff0">
								<orgName type="institution">Provus -A Mastercard Company</orgName>
								<address>
									<settlement>Ayazağa, İstanbul</settlement>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Bilgisayar</forename><forename type="middle">Mühendisliği</forename><surname>Bölümü</surname></persName>
							<affiliation key="aff0">
								<orgName type="institution">Provus -A Mastercard Company</orgName>
								<address>
									<settlement>Ayazağa, İstanbul</settlement>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Yıldız</forename><forename type="middle">Teknik</forename><surname>Üniversitesi</surname></persName>
							<affiliation key="aff0">
								<orgName type="institution">Provus -A Mastercard Company</orgName>
								<address>
									<settlement>Ayazağa, İstanbul</settlement>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><surname>İstanbul</surname></persName>
							<affiliation key="aff0">
								<orgName type="institution">Provus -A Mastercard Company</orgName>
								<address>
									<settlement>Ayazağa, İstanbul</settlement>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Yazılım Hata Kestirimi İçin Veri Analizi Yöntemlerinin Kullanılması</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">A989BB83164FE0624E7AA59DB64946D1</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T17:20+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>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.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="tr">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Giriş</head><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. 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 <ref type="bibr" target="#b0">[1]</ref>. 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Yazılım Hata Kestirimi Yöntemleri</head><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 <ref type="bibr" target="#b1">[2]</ref>. 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. 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 <ref type="bibr" target="#b2">[3]</ref>.</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 <ref type="bibr" target="#b2">[3]</ref>. Ç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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1">Kaynak Kod Metrikleri</head><p>Ç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 <ref type="bibr" target="#b3">[4,</ref><ref type="bibr" target="#b4">5]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2">Süreç Metrikleri Tabanlı Yaklaşım</head><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 <ref type="bibr" target="#b5">[6]</ref>. 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3">Önceki Kusurlar</head><p>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 <ref type="bibr" target="#b6">[7]</ref>. Çalışmamızda da bu tip bir hata veritabanından faydalanılmıştır.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.4">Değişikliklerin Entropisi</head><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 <ref type="bibr" target="#b7">[8]</ref>.</p><p>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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Veri Analizi Yöntemleri</head><p>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.. Lojistik regresyon analizinde temel amaç bir regresyon denklemi oluşturarak, bireylerin hangi grubun üyesi olduğunu kestirmektir <ref type="bibr" target="#b8">[9]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1">Regresyon Analizi</head><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.</p><p>[10].</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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>3.2</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Doğrusal Regresyon Analizi ile Lojistik Regresyon Analizinin Kıyaslanması</head><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 <ref type="bibr" target="#b9">[11]</ref>.</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 <ref type="bibr" target="#b10">[12]</ref>. 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 <ref type="bibr" target="#b10">[12]</ref> 3.3</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Lojistik Regresyon Analizi</head><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 <ref type="bibr" target="#b11">[13]</ref>.</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 <ref type="bibr" target="#b8">[9,</ref><ref type="bibr">10]</ref>: İ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. Sıralı (Ordinal) Lojistik Regresyon Analizi: Bağımlı değişken sıralı nitel 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 <ref type="bibr" target="#b9">[11]</ref>. Lojistik regresyonun istatistiksel modeli aşağıda verilmiştir. "β"katsayılarının hesaplanması bölümün devamında anlatılmaktadır.</p><p>(</p><formula xml:id="formula_0">)<label>1</label></formula><p>Buradan yola çıkarak p, yani bir kategoriye ait olma olasılığı aşağıdaki şekilde bulunur:</p><p>(2)</p><p>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 <ref type="bibr" target="#b9">[11]</ref>.</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. Bu veriden yola çıkarak aşağıdaki lojik regresyon hesaplamaları yapılabilir:</p><formula xml:id="formula_1">Odds(genç)=22/51=0,431<label>(3)</label></formula><p>y=ln(0,431) = -0,841</p><p>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</p><p>b1= ln(3,5)-ln(0,431) = 1,253 -(-0,841) =2,094</p><p>y = -0,841+2,094A</p><p>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) ) <ref type="bibr" target="#b9">(11)</ref> Ö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) )</p><p>p=3,5008 / 4,5008 = 0,778</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Veri Seti</head><p>Çalışmamızda Marco D'Ambros tarafından hazırlanmış hata kestirimi veritabanından faydalanılmıştır <ref type="bibr" target="#b2">[3]</ref>. 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. 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 <ref type="bibr" target="#b12">[14]</ref>.</p><p>Veritabanının seçilen örnek metrikleri içeren bir kesiti Tablo 2'de görülmektedir. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Lojistik Regresyon Uygulaması</head><p>Söz konusu hata kestirimi veritabanı R dili ve R-Studio aracı kullanılarak lojistik regresyon analizine tabi tutulmuştur <ref type="bibr" target="#b13">[15]</ref>. 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. Yapılan hesaplamalar neticesinde elde edilen lojistik model denklemi aşağıda verilmiştir.</p><formula xml:id="formula_11">y = logit(p) = -2,251056+0,007283xFAN-IN+0,006744xWMC+0,025149xNOA+ 0,015507xNOM<label>(14)</label></formula><p>Buradan yola çıkarak, kod dosyasının hatalı kategorisine ait olma olasılığı aşağıdaki şekilde hesaplanabilir: p=exp( y ) / ( 1 + exp( y ) ) <ref type="bibr" target="#b13">(15)</ref> 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. Burada katsayıların eksponansiyeli alınarak, bahis oranı (odds ratio, OR) değerleri de yorumlanmış ve Tablo 5'te gösterilmiştir. 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.2">Metrik Değerlerinin Elde Edilmesi</head><p>Söz konusu Provus bünyesinde geliştirilen proje kodlarından modele uyumlu metrik değerlerinin elde edilmesinde Eclispe IDE <ref type="bibr" target="#b11">[13]</ref> Google Code Pro Analytix <ref type="bibr" target="#b12">[14]</ref> ve Eclipse Metrics Eklentisi <ref type="bibr" target="#b16">[18]</ref> araçlarından faydalanılmıştır.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>6.3</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>İlk Sonuçlar ve Bulgular</head><p>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. 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>7</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Gelecek Çalışmalar</head><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.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>3 . 4</head><label>34</label><figDesc>Lojistik Regresyon Analizi Terimleri Lojistik regresyon ile ilgili bazı terimler bu bölümde verilmiştir: 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. Bahis Oranı (Odds Ratio, OR): İki "odds"un birbirine oranıdır. 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. 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.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Tablo 3 .</head><label>3</label><figDesc>Lojistik Regresyon Modeli Hesaplama Sonuçları ve Katsayıları Anlamlılık (Significance) Kodları: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1 ' ' 1 Hata ~ FAN-IN + WMC + NOA + NOM</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Tablo 4 .</head><label>4</label><figDesc>Lojistik Model Güven Aralıkları</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>Tablo 1 .</head><label>1</label><figDesc>Yaşlılığa göre hastalığa yakalanma verisi</figDesc><table><row><cell>Yaşlılık (A)</cell><cell>Hasta</cell><cell>Değil</cell><cell>Toplam</cell></row><row><cell>Genç (&lt;60)</cell><cell>22</cell><cell>51</cell><cell>73</cell></row><row><cell>Yaşlı (&gt;60)</cell><cell>21</cell><cell>6</cell><cell>27</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head></head><label></label><figDesc>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.</figDesc><table><row><cell cols="6">─ WMC (İng. Weighted Method Count) CK metriklerinden birisidir [4]. Kodun kar-</cell></row><row><cell cols="6">maşıklığı (İng. cyclomatic complexity) değerini ifade eder. Metoddaki toplam farklı</cell></row><row><cell cols="6">yollar hesaba katılır. Buradaki değer sınıftaki tüm metodların toplam WMC değe-</cell></row><row><cell>rini ifade eder.</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell>─ NOA (İng.</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell></cell><cell cols="4">Tablo 2. Kullanılan veri setinden örnek bir kesit</cell><cell></cell></row><row><cell>Dosya/Sınıf İsmi</cell><cell cols="2">FAN-IN WMC</cell><cell>NOA</cell><cell>NOM</cell><cell>Hatalı mı?</cell></row><row><cell>IndexBinaryFolder</cell><cell>1</cell><cell>1</cell><cell>1</cell><cell>6</cell><cell>0</cell></row><row><cell>CachedIndexEntry</cell><cell>1</cell><cell>2</cell><cell>2</cell><cell>1</cell><cell>0</cell></row><row><cell>ASTNode</cell><cell>102</cell><cell>131</cell><cell>131</cell><cell>20</cell><cell>1</cell></row><row><cell>MemberTypeBinding</cell><cell>1</cell><cell>0</cell><cell>0</cell><cell>5</cell><cell>0</cell></row><row><cell>CodeSnippetParser</cell><cell>1</cell><cell>7</cell><cell>7</cell><cell>41</cell><cell>0</cell></row><row><cell>Location</cell><cell>1</cell><cell>12</cell><cell>12</cell><cell>2</cell><cell>0</cell></row><row><cell cols="2">SingleMemberAnnotation 2</cell><cell>4</cell><cell>4</cell><cell>13</cell><cell>0</cell></row><row><cell>NLSTag</cell><cell>2</cell><cell>4</cell><cell>4</cell><cell>2</cell><cell>0</cell></row><row><cell cols="6">Seçilen veri setindeki belirtilen kısaltmaların ifade ettiği metriklerin anlamları aşa-</cell></row><row><cell>ğıda verilmiştir:</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell cols="6">─ FAN-IN değeri mevcut sınıfa referans veren diğer sınıfların sayısını gösterir.</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_2"><head></head><label></label><figDesc>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.Ç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.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<ref type="bibr" target="#b14">[16]</ref>. 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. Modüllerin ilklendirme işlemlerini yöneten ortak sınıflardır.</figDesc><table><row><cell>6</cell><cell>Modelin Kullanımı</cell></row><row><cell>6.1</cell><cell cols="2">Modelin Uygulandığı Projenin Özellikleri</cell></row><row><cell cols="3">İlk aşamada projede aktif olarak kullanılan temel bazı sınıflar incelenerek sonuçları</cell></row><row><cell cols="2">paylaşılmıştır.</cell></row><row><cell cols="3">İncelenen sınıflar ve projede gerçekleştirdikleri işlevler aşağıda verilmiştir:</cell></row><row><cell cols="3">─ FileUtil: Projenin ortak kütüphanesinde bulunan bir sınıftır. Genel dosya okuma ve</cell></row><row><cell cols="3">Tablo 5. Lojistik Model Bahis Oranı Değerleri yazma işlemleri bu sınıftan yönetilir.</cell></row><row><cell cols="3">(Sabit Terimi) ─ MailMessageHelper: Tüm modüller tarafından e-posta göndermek için ortak ola-FAN-IN WMC NOA NOM rak kullanılır.</cell></row><row><cell cols="3">0,105288 ─ ProvusScheduledThreadPool: Paralel gerçekleştirilecek işlemlerin yönetilmesin-1,007309 1,006766 1,025468 1,015628</cell></row><row><cell cols="3">de kullanılan, yoğun iş yüklerini yöneten temel sınıflardır.</cell></row><row><cell cols="3">Tablo 5'deki sonuçlara bakarak, diğer değişkenler sabit tutulmak üzere değişken-─ ModuleInitializer:</cell></row><row><cell cols="3">lerdeki değişimin ihtimaller üzerindeki etkisi hakkında aşağıdaki yorumlar yapılabilir:</cell></row><row><cell cols="3">─ FAN-IN değerindeki 1 birim artış, kabul ihtimalini %0,73 arttırır.</cell></row><row><cell cols="3">─ WMC değerindeki 1 birim artış, kabul ihtimalini %0,67 arttırır.</cell></row><row><cell cols="3">─ NOA değerindeki 1 birim artış, kabul ihtimalini %2,55 arttırır.</cell></row><row><cell cols="3">─ NOM değerindeki 1 birim artış, kabul ihtimalini %1,56 arttırır.</cell></row><row><cell></cell><cell cols="2">Tablo 6. Lojistik Model Test Sonuçları</cell></row><row><cell></cell><cell>Test Veri Sayısı</cell><cell>573</cell></row><row><cell></cell><cell>Başarılı</cell><cell>486</cell></row><row><cell></cell><cell>Başarısız</cell><cell>87</cell></row><row><cell></cell><cell>Başarı Oranı</cell><cell>% 84,817</cell></row></table></figure>
		</body>
		<back>
			<div type="annex">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>8</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Teşekkür</head><p>Ç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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>9</head><p>Kaynakça</p></div>			</div>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Software Defect Reduction Top 10 List</title>
		<author>
			<persName><forename type="first">B</forename><surname>Boehm</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><forename type="middle">R</forename><surname>Basili</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Computer</title>
		<imprint>
			<biblScope unit="volume">34</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="135" to="137" />
			<date type="published" when="2001">2001</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Effort-aware defect prediction models</title>
		<author>
			<persName><forename type="first">Thilo</forename><surname>Mende</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Rainer</forename><surname>Koschke</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceeding of the 14th European Conference on Software Maintenance and Reengineering (CSMR 2010)</title>
				<meeting>eeding of the 14th European Conference on Software Maintenance and Reengineering (CSMR 2010)</meeting>
		<imprint>
			<publisher>IEEE Computer Society</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="109" to="118" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">An extensive comparison of bug prediction approaches</title>
		<author>
			<persName><forename type="first">Michele</forename><surname>Marco D'ambros</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Romain</forename><surname>Lanza</surname></persName>
		</author>
		<author>
			<persName><surname>Robbes</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 7th International Working Conference on Mining Software Repositories</title>
				<meeting>the 7th International Working Conference on Mining Software Repositories</meeting>
		<imprint>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="31" to="41" />
		</imprint>
	</monogr>
	<note>MSR &apos;10</note>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">A comparative analysis of the effciency of change metrics and static code attributes for defect prediction</title>
		<author>
			<persName><forename type="first">Raimund</forename><surname>Moser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Witold</forename><surname>Pedrycz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Giancarlo</forename><surname>Succi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of ICSE 2008</title>
				<meeting>ICSE 2008</meeting>
		<imprint>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="181" to="190" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Predicting defects for eclipse</title>
		<author>
			<persName><forename type="first">Thomas</forename><surname>Zimmermann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Rahul</forename><surname>Premraj</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Andreas</forename><surname>Zeller</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of PROMISE 2007, sayfa 76</title>
				<meeting>PROMISE 2007, sayfa 76</meeting>
		<imprint>
			<publisher>IEEE CS</publisher>
			<date type="published" when="2007">2007</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Predicting faults using the complexity of code changes</title>
		<author>
			<persName><forename type="first">Ahmed</forename><forename type="middle">E</forename><surname>Hassan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of ICSE 2009</title>
				<meeting>ICSE 2009</meeting>
		<imprint>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="78" to="88" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">A metrics suite for object oriented design</title>
		<author>
			<persName><forename type="first">R</forename><surname>Shyam</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Chris</forename><forename type="middle">F</forename><surname>Chidamber</surname></persName>
		</author>
		<author>
			<persName><surname>Kemerer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Trans. Software Eng</title>
		<imprint>
			<biblScope unit="volume">20</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="476" to="493" />
			<date type="published" when="1994">1994</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Empirical validation of objectoriented metrics on open source software for fault prediction</title>
		<author>
			<persName><forename type="first">Tibor</forename><surname>Gyimothy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Rudolf</forename><surname>Ferenc</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Istvan</forename><surname>Siket</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Trans. Software Eng</title>
		<imprint>
			<biblScope unit="volume">31</biblScope>
			<biblScope unit="issue">10</biblScope>
			<biblScope unit="page" from="897" to="910" />
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Logistic Regression</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">T</forename><surname>Larose</surname></persName>
		</author>
		<ptr target="http://turkistatistik.net/upload/dosya/reganaliz.pdf" />
	</analytic>
	<monogr>
		<title level="m">Regresyon Analizi, Türkistatistik</title>
				<editor>
			<persName><forename type="first">Fikret</forename><surname>Gültekin</surname></persName>
		</editor>
		<meeting><address><addrLine>Hoboken, NJ</addrLine></address></meeting>
		<imprint>
			<publisher>John Wiley &amp; Sons, Inc</publisher>
			<date type="published" when="2006">2006. 10. 9 Mayıs 2014</date>
		</imprint>
	</monogr>
	<note>Data Mining Methods and Models</note>
</biblStruct>

<biblStruct xml:id="b9">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">K</forename><surname>Sümbüloglu</surname></persName>
		</author>
		<author>
			<persName><surname>Sümbüloglu</surname></persName>
		</author>
		<author>
			<persName><surname>Biyoistatistik</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2007">2007</date>
			<publisher>Hatiboglu Yayınevi</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<author>
			<persName><forename type="first">Robert</forename><surname>Burns</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Richard</forename><surname>Burns</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Business Research Methods and Statistics Using SPSS</title>
				<imprint>
			<publisher>Sage Publications</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="volume">24</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<ptr target="http://www.eclipse.org" />
		<title level="m">Eclipse Projesi Websitesi</title>
				<imprint>
			<date type="published" when="2014-05-09">9 Mayıs 2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">How Many Software Metrics Should be Selected for Defect Prediction?</title>
		<author>
			<persName><forename type="first">H</forename><surname>Wang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">M</forename><surname>Khoshgoftaar</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Seliya</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">FLAIRS Conference</title>
				<imprint>
			<date type="published" when="2011">2011</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">R-Studio Web</forename><surname>Sitesi</surname></persName>
		</author>
		<ptr target="https://www.rstudio.com/" />
		<imprint>
			<date type="published" when="2014-05-09">9 Mayıs 2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<monogr>
		<ptr target="http://www.provus.com.tr/hizmetler/atm-operasyon.html" />
		<title level="m">Provus ATM Operasyonları</title>
				<imprint>
			<date type="published" when="2014-05-09">9 Mayıs 2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<monogr>
		<ptr target="https://developers.google.com/java-dev-tools/codepro/doc/" />
		<title level="m">Google Code Pro Analytix Projesi web sitesi</title>
				<imprint>
			<date type="published" when="2014-05-09">9 Mayıs 2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<monogr>
		<ptr target="http://metrics2.sourceforge.net" />
		<title level="m">Eclipse Metrics</title>
				<imprint>
			<date type="published" when="2014-05-09">9 Mayıs 2014</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
