<!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>
      <journal-title-group>
        <journal-title>Aselsan A.Ş. SST-GGZYTM, P.K.</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Yazılım Hata Kayıtlarının Makine Öğrenmesi Yöntemleriyle Kümelenerek, Hataya Sebep Olan Bileşenlerin Tespit Edilmesi</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Sinan POLAT</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Kelimeler: Hata Kayıtları</institution>
          ,
          <addr-line>Makine Öğrenmesi, Denetimsiz Öğrenme, Kümeleme, Yazılım Geliştirme</addr-line>
        </aff>
      </contrib-group>
      <volume>1</volume>
      <issue>06172</issue>
      <fpage>444</fpage>
      <lpage>453</lpage>
      <abstract>
        <p>Özet. ASELSAN Savunma Sistem Teknolojileri Sektör Başkanlığı Gömülü ve Gerçek Zamanlı Yazılım Tasarım Müdürlüğü bünyesinde geliştirilen yazılımlar SST Kalite Yönetim Sisteminin tanımlamış olduğu yazılım geliştirme sürecine uygun olarak geliştirilmektedir. Bu bağlamda geliştirilen yazılımlar yapılan geliştirme testleri sonrası, yeterlilik testlerine girmektedirler. Yeterlilik testleri sırasında yazılımda görülen hatalar için yazılım test mühendisleri, hata takip aracında kayıt açarak, ilgili sürüm hatalarını yazılım mühendislerine bildirmektedirler. Kaydı açılan hata kayıtları bazen beklediğimizden daha fazla bilgi içerebilmektedir. Öyle ki, hataya sebep olan bileşen ya da bileşenler hata açıklamasından çıkarılabilmektedir. Bu doğrultuda hata kayıtları üzerinden hataya sebep olan bileşenlerin otomatik olarak tespit edilmesi, hem zaman tasarrufu sağlayacak, hem de sorunun çözümünü kolaylaştıracaktır. Ayrıca, bileşenlerdeki hata yoğunluğunun tespit edilmesi gibi yazılım mühendisliği metriklerinin hesaplanmasına da yardımcı olacaktır. Bu çalışmada, hataya sebep olan bileşenlerin tespiti amacıyla, hata kayıtlarının denetimsiz öğrenme teknikleri ile kümelenmesi1 anlatılacaktır. Denetimsiz öğrenme2, etiketli veriler olmaksızın, girdi veri kümeleri üzerinden çıkarsamalar yapmak için kullanılan bir makine öğrenme3 yöntemidir. Çalışmanın değerlendirilmesinde, ASELSAN Savunma Sistem Teknolojileri Sektör Başkanlığı Gömülü ve Gerçek Zamanlı Yazılım Tasarım Müdürlüğü bünyesinde geliştirilen iki farklı atış kontrol yazılımı için girilen yaklaşık 1200 hata kaydı veri kümesi olarak kullanılmıştır. Kümeleme için ise K-means ve Sonek Ağacı4 Clustering denetimsiz öğrenme algoritmaları kullanılarak performansları değerlendirilmiştir. Deneysel çalışmalar sonucu elde edilen ölçümler oldukça umut verici olmuştur. Öyle ki, hata analizi sonucu hesaplanan doğruluk metriğine göre, hataların %78'inin başarılı bir şekilde hataya sebep olan bileşene göre sınıflandırıldığı görülmüştür.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1 Clustering 2 Unsupervised Learning 3 Machine Learning 4 Suffix Tree</title>
      <p>Detection of Components Causing Errors
by Clustering Software Error Records
with Machine Learning Methods</p>
    </sec>
    <sec id="sec-2">
      <title>Sinan POLAT</title>
      <p>Aselsan A.Ş. SST-GGZYTM, P.K. 1 06172, Yenimahalle, Ankara
Abstract. The software developed in the Embedded and Real Time Software
Design Department of ASELSAN Defense Systems Technologies Business Sector
is developed in accordance with the software development process defined by the
SST Quality Management System.The softwares developed in this context is
included in the sufficiency tests after the development tests. For errors seen in the
software during the sufficiency tests, the software test engineers register the bug
tracking and notify the software engineers of the relevant version errors.
Recorded error logs sometimes contain more information than we expect. So that the
component or components that caused the fault can be extracted from the error
description. In this respect, the automatic identification of the faulty components
via error logs will save time and facilitate the solution of the problem. It will also
help in the computation of software engineering metrics, such as determining the
error density in components.</p>
      <p>
        In this study, the clustering of error records with unsupervised learning
techniques will be explained in order to identify the components causing the error.
Unsupervised learning is a machine learning method that is used to make
inferences over input data sets, without labeled data. In the evaluation of the work,
approximately 1200 error logs were used as the data set which entered for the
two different fire control software developed in the Real Time Software Design
Department of ASELSAN Defense Systems Technologies Business Sector. For
clustering, performance was evaluated using K-means and Suffix Tree Clustering
unsupervised learning algorithms. According to the accuracy metric calculated
by the error analysis, 78% of the errors were successfully classified according to
the faulty component.
Yazılım projesi, süreçlerin doğru ve profesyonel şekilde yönetilmesiyle hayata
geçebilmektedir. Başarılı bir yazılım geliştirme süreci için her aşamanın ayrıntılı bir şekilde
planlaması yapılmalı, süreçlerin en sağlıklı şekilde yönetilmesi gerekmektedir. Bu
bağlamda, SST Grubu bünyesinde geliştirilen yazılımlar, müşterilerinin ihtiyaçlarına ve
beklentilerine etkin ve verimli olarak cevap verebilmek için gerekli olan tasarım ve
geliştirme süreçleri doğrultusunda geliştirilmektedir [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Temel olarak bir yazılım
geliştirme döngüsü dört temel aşamada gerçekleşmektedir. Bu adımlar; gereksinimlerin
belirlenmesi, yazılım tasarımının yapılması, kodlama ve test olarak sıralanabilir. Bu
adımların her biri tanımlı olan yönergeler doğrultusunda eksiksiz olarak yapılmalıdır.
Öyle ki, herhangi bir aşamada atlanan ya da görmezden gelinen bir husus sonraki
aşamalarda probleme sebep olabilmektedir.
      </p>
      <p>Yazılım yeterlilik testleri bu anlamda en az tasarım ve kodlama kadar önemli bir role
sahiptir. Öyle ki, geliştirme süreci sırasında oluşan bir hatanın testler sırasında
bulunması, hem yazılımı daha kaliteli hale getirecek, hem de son kullanıcıdan gelebilecek
olumsuz bir geri bildirimin önüne geçilecektir. Bu amaçla testler sırasında bulunan
hatalar için yazılım geliştiricilere bildirimler açılır. Bu bildirimler, hatanın hangi
gereksinim test edilirken oluştuğu, ilgili yazılımın sürümü, kritiklik seviyesi ve hata açıklaması
gibi bölümlerden oluşmaktadır.</p>
      <p>Bildirilen hatalara ait hata açıklamaları bazen beklediğimizden daha fazla bilgi
içerebilmektedir. Hata açıklamasında bulunan bazı anahtar sözcükler hataya neden olan
yazılım bileşenin belirlenmesini sağlayabilmektedir. Bu bağlamda, bir yazılımın hataya
sebep olan ya da hataya açık bileşenlerinin hata kayıtlarının açıklamalarından otomatik
olarak bulunması, hem sorunu çözmek için zaman tasarrufu sağlayacak hem de yazılım
bileşenleri üzerindeki hata yoğunluğu gibi yazılım mühendisliği metriklerinin
bulunabilmesini sağlayacaktır.</p>
      <p>
        Bu çalışmada denetimsiz öğrenme tekniklerini kullanarak hata kayıtlarını hataya
neden olan yazılım bileşenlerine kümeleyen bir yazılım geliştirilmiştir. Denetimsiz
öğrenme, etiketli veriler olmaksızın, girdi veri kümeleri üzerinden çıkarsamalar yapmak
için kullanılan bir makine öğrenme yöntemidir. Denetimsiz öğrenme, kümeleme,
aykırılık tespiti, sinir ağları ve gizli değişken modeller öğrenilmesi gibi yaklaşımları
içermektedir. Fakat en yaygın denetimsiz öğrenme yöntemi, gizli modelleri bulmak veya
verileri gruplamak için kullanılan kümeleme analizidir. Yapılan bu çalışmada
olabilecek en iyi sonucu elde edebilmek için farklı kümeleme modelleri ve algoritmaları
kullanılmıştır. Bu bağlamda Sonek Ağacı Kümeleme (STC) [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] ve K-Means Kümeleme
[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] algoritmaları kullanılmıştır. Bu kümeleme algoritmalarının gerçekleştirilmesinde
Carrot2 Java API’lerinden yardım alınmıştır [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
      <p>Bir diğer önemli nokta, kümeleme işleminden önce hata kayıtlarına bazı önişleme
adımlarının uygulanması gerekliliğidir. Çünkü hata açıklamaları çeşitli yazım hataları,
rakamlar, noktalama işaretleri ve bazı özel isimler içerebilmektedir. Kümeleme
yapmadan önce bu tarz hatalı gruplamaya sebep olabilecek etmenlerin temizlenmesi başarımı
doğrudan etkileyen bir husustur.
Bu bildiride, hata nedeninin otomatik tespiti amacıyla geliştirilen yazılım anlatılacaktır.
Bildirinin akışı 2. bölümde benzer çalışmalar, 3. bölümde projenin geliştirme süreci, 4.
bölümde değerlendirme, 5. bölümde ise sonuçlar olacak şekilde ilerleyecektir.
2</p>
      <sec id="sec-2-1">
        <title>Benzer Çalışmalar</title>
        <p>Literatürde yapılan çalışmalar genellikle Dikey Hata Sınıflandırması (DHS) yöntemini
esas almış olsa da çalışmamızla paralel olarak hataların sebeplerini bulmayı ve yazılım
geliştirme sürecini iyileştirmeyi amaçlamıştır. DHS, hataları sınıflandırıp, analiz eden
bir tekniktir.</p>
        <p>
          1991 yılında Ram Chillarege [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] ve ekibi hataların anlamsal olarak
sınıflandırılabileceğini ve yazılım güvenilirliği ile anlamsal olarak sınıflandırılmış hata türleri arasında
ilişki kurulabileceğini belirtmişlerdir. 1992 yılında yayınladıkları çalışmada ise [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]
Dikey Hata Sınıflandırması(DHS) yöntemini açıklamışlardır.
        </p>
        <p>
          Kumaresh ve Baskaran [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ], farklı projeler üzerinde hataları inceleyerek bu hataların
türlerini bulmaya çalışmışlardır. Hata türlerini belirledikten sonra hata kök sebep
analizi yaparak hataların sebeplerini bulmuşladır.
        </p>
        <p>
          Falessi ve Cantone [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] ise yaptıkları deneyde hataları düzgün ve etkili bir şekilde
sınıflandırma işleminin deneyimle alakalı olduğunu, öncelikle eğitim işleminin
yapılmış olması gerektiğini belirtmişlerdir.
        </p>
        <p>
          Söylemez, Tarhan ve Dikici'nin 2012 yılında yaptıkları çalışmada [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ], hatalar analiz
edilerek hata kayıtlarından geliştirme aşamasında anlamlı bilgiler çıkarmayı ve
geliştiricilere süreç ilerlerken hızlı bir şekilde geribildirim vermeyi öneren Dikey Hata
Sınıflandırması (DHS) tekniğinin özellikleri anlatılmıştır. Sonrasında ise DHS kullanarak
yazılım geliştirme süreçlerini iyileştirmek için belirledikleri yöntem bağlamında, G222
bünyesinde geliştirilen Bütünleşik Sosyal Yardım Hizmetleri Projesi hataları analiz
edilerek DHS tekniğinin uygulanabilirliği araştırılmış, oldukça başarılı sonuçlar elde
edilmiştir.
3
        </p>
        <p>Yapılan Çalışma
Bu bölümde çalışma kapsamında kullanılan veri setine ve temel proje aşamalarına
değinilecek, alt bölümlerde ise bu aşamalar detaylandırılacaktır. Gerçekleştirilen proje
genel anlamda ön işleme, analiz ve değerlendirme olmak üzere üç temel aşamadan
oluşmaktadır.</p>
        <p> Ön işleme
─ Cümlelerin kelimelere parçalanması
─ Önemsiz kelimelerin (ing. Stop words) ve noktalama işaretlerinin silinmesi
─ Büyük-küçük harf uyumunun sağlanması ve kelime köklerinin bulunması
 Analiz
─ Kümeleme
─ Belirlenen kümelere etiket verilmesi ve bileşenlere atanması
 Değerlendirme
Çalışmada veri seti olarak ASELSAN Savunma Sistem Teknolojileri Sektör
Başkanlığı Gömülü ve Gerçek Zamanlı Yazılım Tasarım Müdürlüğü bünyesinde
geliştirilen iki farklı atış kontrol yazılımı için girilen yaklaşık 1200 hata kaydı kullanılmıştır.
Hata kayıtları, hata kaydı atama aracı üzerinden girilmektedir. Hata kayıtları bu araç
üzerinden alınarak MS Office Excel ortamına aktarılmıştır. Alınan bu hata kayıtları,
yazılım geliştiriciler tarafından kategorize edilmiş, hataların yaklaşık 10 farklı yazılım
bileşeninden kaynaklandığı tespit edilmiştir.</p>
        <p>Tablo 1. Örnek hata kaydı
ID
Başlık</p>
        <sec id="sec-2-1-1">
          <title>Açıklama 3.1 Ön işleme</title>
          <p>SIVT00009071</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Açılışta sürekli TRM02 hatası alınması</title>
      <p>Yazılım her açıldığında TRM02 hatası alıyor, fakat aslında
termal kamera ile iletişim var.</p>
      <p>Hata kayıtları yazım hataları, rakamlar, noktalama işaretleri ve özel isimler
içerebilmektedir. Analiz aşamasını doğrudan etkileyecek bu etmenleri ortadan kaldırmak için
öncelikle kayıtların temizlenmesi gereklidir. Bu sebeple, öncelikle hata açıklamaları
kelimelere parçalanarak, ön işleme kapsamında uygulanması planlanan değişiklikler
uygulanmıştır. Bu değişiklikler aşağıda verilmiştir:





</p>
      <p>Noktalama işaretleri, köşeli parantezler ve sayılar kaldırılır.</p>
      <p>Kesme işaretleri kaldırılır.</p>
      <p>Tireli sözcükler iki bölüme ayrılır.</p>
      <p>
        Harf içermeyen diğer parçacıklar silinir.(semboller)
Kısaltmalar tek bir parça olarak ele alınır.
Önemsiz kelimeler kaldırılır. Çeşitli bağlaç, zamir vs. içeren 231 kelimelik bir
liste bu amaçla kullanılmaktadır [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <p>
        Hata kayıtları temizlendikten sonra büyük-küçük harf uyumu ve kök bulma işlemleri
gerçekleştirilir. Öncelikle tüm sözcükler küçük harfle gösterilir. Kelimeleri harf
büyüklüğüne duyarsız hale getirdikten sonra tüm sözcüklerin "Zemberek" Türkçe için kök
bulma aracı yardımıyla kökleri bulunur [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Türkçe zengin bir morfolojik yapıya
sahiptir. İngilizce dört ya da beşten fazla ek almaz iken Türkçe dokuz ya da on ek
alabilecek bir yapıya sahiptir. Bu nedenle genellikle Türkçe ve Türkçe gibi sondan eklemeli
dillerde bir metni analiz etmek zor olabilmektedir. İki tür son ek vardır; çekim ekleri
ve yapım ekleri. Çekim eklerini atmak basittir. Ancak, bir sözcük birden fazla yapım
eki almış olabilir. Bu kelimelerin doğru kökünün bulunabilmesi de sorun teşkil
edebilmektedir. Örneğin, “işçilik” sözcüğü iki yapım eki almıştır. Böyle durumlarda
seçilecek kök tüm yapım eklerinin atılmasıyla bulunacak kök şeklinde bu çalışmada
kullanılmıştır. Bu durumda “işçilik” sözcüğü için bulunacak kök “iş” olacaktır.
3.2
      </p>
      <sec id="sec-3-1">
        <title>Analiz</title>
        <p>En yaygın denetimsiz öğrenme yöntemi, gizli modelleri bulmak veya verileri
gruplamak için kullanılan küme analizidir. Bu nedenle, küme verileri için gizli kalıplar
bulmaya çalışan bir dizi kümeleme yaklaşımı geliştirilmiştir. Bu şekilde, farklı
araştırmacılar farklı küme modelleri kullanır ve bu küme modellerinin her biri için yine farklı
algoritmalar verilebilir. Tipik küme modelleri, hiyerarşik kümeleme, k-means ve
k-medoid kümeleme, Gauss karma modelleri, en yakın komşular, gizli Markov modelleri
vb. olarak verilebilir.</p>
        <p>Objektif olarak değerlendirildiğinde tüm veri türleri üzerinde “doğru” çalışabilen bir
kümeleme algoritması yoktur. Belli bir problem için en uygun kümeleme algoritması,
bir küme modelini diğerine tercih etmek için matematiksel bir sebep olmadıkça
deneysel olarak seçilmelidir. Bu nedenle, belli bir tür model için tasarlanmış bir algoritma,
genellikle çok farklı türde bir model içeren bir veri kümesinde başarısız olur. Bu
bağlamda bu çalışma kapsamında da en iyi sonucu elde edebilmek amacıyla Sonek Ağacı
Kümeleme (STC) ve K-Means Kümeleme algoritmaları kullanılmıştır.</p>
      </sec>
      <sec id="sec-3-2">
        <title>Sonek Ağacı Kümeleme Algoritması (STC)</title>
        <p>Sonek Ağacı Kümeleme (STC), lineer zamanlı çalışabilen bir kümeleme algoritmasıdır.
Temel olarak metinler arasında ortak olarak geçen cümle parçalarının belirlenmesini
amaçlamaktadır. Bu bağlamda bir cümle parçacığı bir veya daha fazla kelimenin sıralı
bir dizilimini ifade etmektedir. Algoritmaya göre temel kümeler, ortak bir ifade
paylaşan metinler kümesi olarak tanımlanabilir. Temel kümelerin tanımlanması, metin
koleksiyonumuz için ters indeks yapısının oluşturulması olarak görülebilir. Sonek ağacı
veri yapısı yardımıyla bu temel kümeler kolaylıkla belirlenebilmektedir. Bu yapı,
koleksiyonun boyutuyla doğrusal olarak ilişkilidir ve metinler okunurken ilgili veri yapısı
da eş zamanlı olarak oluşturulabilmektedir.</p>
        <p>M uzunluğundaki bir S dizgesi için T Sonek ağacının sahip olduğu özellikler aşağıda
verilmiştir:





</p>
        <p>Köklü bir ağaçtır ve yönlüdür
1 ile M arasında etiketlenmiş M yaprağı vardır
Ağaçtaki her bir dal S dizgesinin bir alt dizgesini oluşturur
Kökten, i. yaprağa kadar etiketlenmiş bir yol üzerindeki kenarlar
birleştirilebilir
Kök olmayan her ara düğümün en az 2 yaprağı vardır</p>
        <p>Bir düğümden çıkan kenarlar farklı karakterler ile başlar</p>
        <p>STC; metinlerin temizlenmesi, temel kümelerin tanımlaması ve bu temel kümeleri
kümelere birleştirme olmak üzere üç temel aşamada işlemektedir. Temel kümelerin
birleştirilmesi ile oluşan yeni kümeler, metinler arasındaki ortak cümle parçacıklarını
da bizlere vermiş olacaktır.</p>
        <p>Bizim çalışmamız açısından düşünüldüğünde ise, elde edilen bu ortak cümle
parçacıkları ilgili hata kaydı açıklamalarında ortak geçen bölümler olacaktır. Bulunan ortak
cümle parçacıkları bileşenler ile eşleştirildiğinde ise o kümedeki hataların hangi
bileşenden kaynaklı olduğu da tespit edilmiş olacaktır.</p>
      </sec>
      <sec id="sec-3-3">
        <title>K-means Kümeleme Algoritması</title>
        <p>K-means, bilinen kümeleme problemini çözen en basit denetimsiz öğrenme
algoritmalarından biridir. K-means algoritmasının genel mantığı n adet veri nesnesinden oluşan
bir veri kümesini, giriş parametresi olarak verilen k adet kümeye bölümlemektir. Amaç,
gerçekleştirilen bölümleme işlemi sonunda elde edilen kümelerin, küme içi
benzerliklerinin maksimum ve kümeler arası benzerliklerinin minimum olmasını sağlamaktır.
Kullanılan matematiksel yöntem, her sınıf için merkez olarak belirlenen noktaya olan
uzaklığa (aynı zamanda bu hata miktarıdır) göre yeni kümelerin yerleştirilmesidir.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Algoritma temel olarak 4 aşamadan oluşur:</title>
      <p>1. Küme merkezlerinin belirlenmesi
2. Merkez dışındaki örneklerin mesafelerine göre sınıflandırılması
3. Yapılan sınıflandırmaya göre yeni merkezlerin belirlenmesi (veya eski
merkezlerin yeni merkeze kaydırılması)
4. Kararlı hale (İng. stable state) gelinene kadar 2. ve 3. adımların tekrarlanması
K-Means algoritması rastgele seçilen K (küme sayısı) adet merkez noktayla başlar.
Veri kümesindeki her nokta kendisine en yakın merkez noktanın kümesine atanır.
Küme merkezinin değeri kendine ait noktaların ortalaması alınarak hesaplanır. Bu
işlem merkezlerin değerleri değişmeyinceye kadar devam eder.</p>
      <p>Bizim çalışmamız açısından düşünüldüğünde ise buradaki n değeri hata kaydı
açıklamalarının sayısını ifade ederken, k değeri ise yazılımda bulunan bileşen sayısını ifade
edecektir. Kümelemede kullanılan mesafe ölçütü ise aynı bileşen ile ilgili kelimelerin
sayısı olarak düşünülecektir. Bu doğrultuda, K-means algoritması yardımıyla bulunan
kümeler aynı bileşenden kaynaklı oluşmuş olan hata kümelerini ifade etmiş olacaktır.
Kümelerin merkezlerine en yakın hata kayıtları ise ilgili kümenin hangi bileşen ile
eşleştiği hakkında bilgi vermektedir.
4</p>
      <sec id="sec-4-1">
        <title>Değerlendirme</title>
        <p>Yapılan çalışmanın değerlendirilmesi aşamasında daha önceden de belirtildiği gibi
Aselsan SST GGZYTM bünyesinde geliştirilmiş olan iki farklı atış kontrol yazılımına
ait hata kayıtları kullanılmıştır. Veri setinde yaklaşık 1200 hata kaydı ve 10 farklı
bileşen kategorisi bulunmaktadır. Bu hata kayıtları yazılım geliştiricileri tarafından hataya
neden olan bileşenlere göre işaretlenmiştir. Bu işaretlemeler sadece başarımın
ölçülmesi aşamasında kullanılmış olup, kümeleme algoritmalarına girdi olarak
verilmemiştir. Excel formatında olan hata kayıtlarının, değerlendirme aşamasında kullanılabilmesi
için “ID”, “Konu” ve “Sorun_Istek_Tanimi” alanları seçilerek CSV formatına
dönüştürülmüştür.
Şekil 1. Excel Formatında Hata Kayıtları</p>
        <p>Bilgisayarda, virgülle ayrılmış değerler dosyası (CSV), düz metin halinde sekmeli
verileri (sayıları ve metni) depolamaktadır. Şekil 1’de Excel formatında örnek hata
kayıtları görülürken, Şekil 2’de CSV formatına dönüştürülmüş hata kayıtları verilmiştir.</p>
        <p>Şekil 2. CSV formatına dönüştürülmüş hata kayıtları</p>
        <p>Veri seti hazırlandıktan sonra hata kayıtları STC ve K-means kümeleme
algoritmaları yardımıyla kümelenmiştir. Başarımın ölçülebilmesi için her iki algoritma için de
doğruluk metriği, daha önceden geliştiriciler tarafından işaretlenmiş hata kayıtları
kullanılarak hesaplanmıştır. Doğruluk, analiz sonucunun gerçek değere ne kadar yakın
olduğunun bir ölçütüdür. Ölçümlerin aritmetik ortalamasının gerçek değere yakınlığı
olarak tanımlanır ve hata olarak ifade edilir. Doğruluk formülasyonu Formül 1'de
verilmiştir.</p>
        <p>Değerlendirme sonuçları Tablo 2’de verilmiştir. Sonuçlara göre STC algoritması 11
küme oluştururken 1200 hata kaydından 95 tanesini kümeleyememiştir. K-means
algoritması ise 12 farklı küme oluşturmuştur. Bulunan kümelerdeki hata kayıtları
kategorilerine göre işaretlenip doğruluk metriği hesaplandığında elde edilen sonuçlara göre
STC algoritması %78 başarı gösterirken, K-means algoritması %61 başarı
gösterebilmiştir. (Tablo 2) Daha önceden de belirtildiği üzere tüm veri kümeleri üzerinde başarılı
olarak çalışabilen bir algoritma varlığından söz etmek zordur. İlgili veri seti üzerinde
hangi algoritmanın daha başarılı olacağı ancak deneysel olarak bulunabilmektedir.</p>
        <p>Tablo 2. Doğruluk Ölçümleri</p>
        <sec id="sec-4-1-1">
          <title>Algoritma</title>
          <p>STC
K-Means</p>
        </sec>
        <sec id="sec-4-1-2">
          <title>Doğruluk</title>
          <p>78 %
61 %
Şekil 3’te değerlendirme aşamasında STC algoritması için yazılımdan alınan bir
ekran görüntüsü verilmiştir. Sonuçlar incelendiğinde 11 adet küme bulunduğu görülebilir.
Bulunmuş olan ilk kümenin etiketi “Sistem Silahlı Silah Aktif” olarak belirlenmiş,
kümenin silah ile ilgili yazılım bileşenleri ile ilgili hataları içerdiği sonucu çıkarılmıştır.</p>
          <p>Şekil 3. STC Algoritması için kümeleme (Yazılımdan ekran görüntüsü)
5</p>
        </sec>
      </sec>
      <sec id="sec-4-2">
        <title>Sonuç</title>
        <p>Yaptığımız bu çalışmada, hataya sebep olan bileşenlerin tespiti amacıyla, hata
kayıtlarının denetimsiz öğrenme teknikleri ile kümelenmesi anlatılmıştır. Çalışmanın
değerlendirilmesinde, ASELSAN Savunma Sistem Teknolojileri Sektör Başkanlığı Gömülü
ve Gerçek Zamanlı Yazılım Tasarım Müdürlüğü bünyesinde geliştirilen iki farklı atış
kontrol yazılımı için girilen yaklaşık 1200 hata kaydı veri kümesi olarak kullanılmıştır.
Kümeleme için ise K-means ve Sonek Ağacı Clustering(STC) denetimsiz öğrenme
algoritmaları kullanılarak performansları değerlendirilmiş, deneysel çalışmalar sonucu
elde edilen sonuçlar oldukça umut verici olmuştur. Öyle ki, hata analizi sonucu
hesaplanan doğruluk metriğine göre, hataların %78’inin başarılı bir şekilde hataya sebep olan
bileşene göre sınıflandırıldığı görülmüştür. Böylece yazılım geliştirme sürecinde
oldukça önemli bir yere sahip olan yeterlilik testlerinde bulunan hata kayıtları, daha hızlı
bir şekilde çözülmesi hedeflenmektedir. Ayrıca, yazılım geliştiricilere geliştirdikleri
yazılım bileşenlerine ait hata yoğunluğu ile ilgili geri bildirim de verilebilecektir.
Çalışmanın ilerleyen aşamalarında, bulunan küme etiketleri ile bileşenler arası ilişkilerin,
kullanıcı geri bildirimleri ile öğrenilmesine yönelik yapılabilecek bir eklenti, bulunan
kümelerin bileşenler ile doğrudan eşleşebilmelerini sağlayacaktır.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Kahraman</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>İpek</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>İyidir</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bazlamaçcı</surname>
            ,
            <given-names>C.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bilgen</surname>
            ,
            <given-names>S.: Bileşen</given-names>
          </string-name>
          <string-name>
            <surname>Tabanlı Yazılım Ürün Hattı Geliştirmeye Yönelik Alan Mühendisliği</surname>
          </string-name>
          <article-title>Çalışmaları</article-title>
          .
          <source>In: UYMS'09</source>
          , pp.
          <fpage>283</fpage>
          -
          <lpage>287</lpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Zamir</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Oren</surname>
            <given-names>E.</given-names>
          </string-name>
          :
          <article-title>Web document clustering: A feasibility demonstration</article-title>
          .
          <source>In: Proceedings of the 21st annual international ACM SIGIR conference on Research and development in information retrieval. ACM</source>
          , (
          <year>1998</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Hartigan</surname>
          </string-name>
          , John A.,
          <string-name>
            <surname>Manchek</surname>
            <given-names>A.</given-names>
          </string-name>
          :
          <string-name>
            <surname>Algorithm</surname>
            <given-names>AS</given-names>
          </string-name>
          136:
          <article-title>A k-means clustering algorithm</article-title>
          .
          <source>In: Journal of the Royal Statistical Society</source>
          . Series C (Applied Statistics)
          <volume>28</volume>
          .1, pp.
          <fpage>100</fpage>
          -
          <lpage>108</lpage>
          (
          <year>1979</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Carrot</given-names>
            <surname>Framework</surname>
          </string-name>
          , https://project.carrot2.org/,
          <source>erişim tarihi</source>
          <year>2017</year>
          /06/14
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Chillarege</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kao</surname>
          </string-name>
          , W.-L, Condit, R.G.:
          <article-title>Defect type and its impact on the growth curve</article-title>
          ,
          <source>Proc. 13th Int. Conf. Software Engineering</source>
          , (
          <year>1991</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Chillarege</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bhandari</surname>
            ,
            <given-names>I.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chaar</surname>
            ,
            <given-names>J.K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Halliday</surname>
            ,
            <given-names>M.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moebus</surname>
            ,
            <given-names>D.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ray</surname>
            ,
            <given-names>B.K.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Wong</surname>
          </string-name>
          , M.-Y.:
          <article-title>Orthogonal defect classification-a concept for in-process measurements</article-title>
          ,
          <source>IEEE Trans. Softw</source>
          . Eng., vol.
          <volume>18</volume>
          , pp.
          <fpage>943</fpage>
          -
          <lpage>956</lpage>
          ,
          <string-name>
            <surname>November</surname>
          </string-name>
          (
          <year>1992</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Kumaresh</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Baskaran</surname>
          </string-name>
          , R.:
          <article-title>Article:defect analysis and prevention for software process quality improvement</article-title>
          ,
          <source>International Journal of Computer Applications</source>
          , vol.
          <volume>8</volume>
          , no.
          <issue>7</issue>
          , pp.
          <fpage>42</fpage>
          -
          <lpage>47</lpage>
          ,
          <string-name>
            <surname>October</surname>
          </string-name>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Falessi</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Cantone</surname>
          </string-name>
          , G.:
          <article-title>Exploring feasibility of software defects orthogonal classification</article-title>
          ,
          <source>in International Conference on Software and Data Tecnologies (ICSOFT2006)</source>
          , (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Söylemez</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tarhan</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dikici</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Dikey Hata Sınıflandırması(DHS) ile Yazılım Hatalarının Kök Sebeplerinin İncelenmesi</article-title>
          ,
          <source>in UYMS'12</source>
          , pp.
          <fpage>77</fpage>
          -
          <lpage>84</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10. Stop Words List, http://countwordsfree.com/stopwords/turkish, erişim tarihi
          <year>2017</year>
          /06/14.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Zemberek</surname>
            <given-names>NLP</given-names>
          </string-name>
          , https://github.com/ahmetaa/zemberek-nlp,
          <source>erişim tarihi</source>
          <year>2017</year>
          /06/14.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>