T.C.

MALTEPE ÜN İVERS İTES İ

FEN B İLİMLER İ ENST İTÜSÜ

BİLG İSAYAR MÜHEND İSL İĞİ ANAB İLİM DALI

YAZILIM HATA LOGLARI KULLANILARAK VER İ MADENC İLİĞİ UYGULAMASI GERÇEKLE ŞTİRİLMES İ

GÖKHAN ACUN

Yüksek Lisans Tezi

Tez Danı şmanı

Yrd. Doç. Dr. Turgay Tugay Bilgin

İSTANBUL – 2014

T.C.

MALTEPE ÜN İVERS İTES İ

FEN B İLİMLER İ ENST İTÜSÜ

BİLG İSAYAR MÜHEND İSL İĞİ ANAB İLİM DALI

YAZILIM HATA LOGLARI KULLANILARAK VER İ MADENC İLİĞİ UYGULAMASI GERÇEKLE ŞTİRİLMES İ

YÜKSEK L İSANS TEZ İ

GÖKHAN ACUN

Tez Danı şmanı

Yrd. Doç. Dr. Turgay Tugay Bilgin

İSTANBUL – 2014

ÖZET

Yüksek Lisans Tezi, Yazılım Hata Logları Kullanılarak Veri Madencili ği Uygulaması Gerçekle ştirilmesi, Maltepe Üniversitesi, Fen Bilimleri Enstitüsü, Bilgisayar Mühendisli ği Anabilim Dalı.

Bu tez çalı şmasında bir kurumsal kaynak planlama yazılımına ait günlük hata loglarını veritabanından çekip birtakım öni şleme i şlemleri gerçekle ştirerek, elde edilen veri üzerinde birliktelik analizi algoritması çalı ştıran bir yazılım geli ştirilmi ştir. Bu yazılım sayesinde, bir hatanın olu şmasına yol açan ko şulların birliktelik analizi gerçekle ştirilerek elde edilen sonuçları yönetim kademesine e-posta gönderen bir yapı kurulmu ştur. Ayrıca, hataya sebep olan sık örüntüler tespit edilmi ş ve görselle ştirilmi ştir.

Bu tez be ş bölümden olu şmaktadır. Birinci bölümünde tez ile ilgili genel kavramlar açıklanmı ştır. İkinci bölümde literatür taraması sonucu derlenen çalı şmalara yer verilmi ştir. Üçüncü bölümde günlük hata loglarının veritabanından çekilmesinden, veri öni şleme adımının uygulanmasından, Apriori algoritmasının ve Graphviz yazılımının uygulanmasından sonra ilgili ki şilere hata analizi hakkında bilgi verilmesinden bahsedilmektedir. Dördüncü bölümde de çalı şma sonunda elde edilen sonuçlar de ğerlendirilmi ştir.

Bu tez 2014 yılında tamamlanmı ştır ve 84 sayfadan olu şmaktadır .

Anahtar Kelimeler: Veri Madencili ği, Log Madencili ği, Hata Madencili ği, Data Mining, Log Mining, Bug Mining

i

ABSTRACT

Master Thesis, Performing a Data Mining Application using Bug Logs, T.C. Maltepe University, Institute of Natural Sciences, Department of Computer Engineering.

In this master thesis, a software has been developed, performing some data preprocessing steps taking daily bug logs about an Enterprise Resource Planning software from a database. This software executes association rule mining on data. After association rule mining, E-mail about the results of the conditions of the bugs is sent to management position. Moreover, the frequent patterns, causing bug, has been detected and visualized.

This thesis has five sections. In the first section, general concepts of the thesis have been mentioned. In the second section, the previous studies about the general concepts have been presented. In the third section, it is explained that daily bug logs are taken from database, data-preprocessing has been implemented, Apriori algoritm and Graphiz software have been applied and bug analysis has been informed to related people through e-mail. In the last section, the results of the study have been discussed and interpreted.

This thesis has been completed in 2014, and consists of 84 pages .

Keywords: Veri Madencili ği, Log Madencili ği, Hata Madencili ği, Data Mining, Log Mining, Bug Mining

ii

TE ŞEKKÜR

Tez konusunu seçmemde beni yönlendiren, tez süreci boyunca destek ve yardımlarını esirgemeyen, de ğerli bilgilerinden istifade etti ğim danışman hocam Yrd. Doç. Dr. Turgay Tugay BİLG İN’e, maddi ve manevi deste ğini benden hiçbir zaman esirgemeyen çok de ğerli aileme ve çalı şmalarım sırasında eme ği geçen herkese te şekkürlerimi sunarım.

iii

İÇİNDEK İLER

ÖZET ...... i ABSTRACT ...... ii TE ŞEKKÜR ...... iii İÇİNDEK İLER ...... iv ŞEK İLLER...... vi ÇİZELGELER ...... viii 1. GİRİŞ ...... 1 1.1 Veri Madencili ği ...... 1 1.1.1 Önemli Kullanımlar ...... 3 1.2 Yazılım Madencili ği ...... 3 1.3 Hata Madencili ği ...... 4 1.4 Log Madencili ği ...... 6 2. LİTERATÜR İNCELEMES İ ...... 8 2.1 Hata Madencili ği ...... 8 2.2 Log Dosyaları Madencili ği ...... 17 2.3 Apriori Algoritması ...... 24 2.3.1 Genel Çerçeve ...... 25 2.3.2 Örnekler ...... 27 2.4 Graflar ...... 29 2.4.1 Graf Tanımı ...... 30 2.4.2 Graf Örne ği ...... 30 2.4.3 Graf Uygulamaları ...... 33 2.4.4 Di ğer Graf Çe şitleri ...... 34 2.5 Graphviz Yazılımı ...... 35 2.5.1 Dot Programlama Dili ...... 35 3. YAZILIM LOGLARI İLE KR İTİK HATA TESP İT S İSTEM İ ...... 38 3.1 Geli ştirme Ortamı ve Kullanılan Araçlar ...... 39 3.1.1 ColdFusion Programlama Dili ...... 39 3.1.2 Windows Servisi ...... 40 3.1.3 Veritabanı Tasarımı ...... 41 3.1.4 Workcube Hakkında ...... 42 3.2 Ham Veri Seti ...... 47 3.3 Veri Öni şleme Modülü ...... 50 3.3.1 Sayfa (PAGE) ...... 50

iv

3.3.2 Hata Tanımı ( BUG_DETAIL ) ...... 51 3.4 Apriori Algoritmasının Uygulanması ...... 56 3.5 Graphviz Yazılımının Uygulanması ...... 58 3.6 Uygulama Türleri ...... 60 3.6.1 Grafiksel Kullanıcı Arayüzü Tabanlı Hata Analizi Uygulaması ...... 61 3.6.2 Windows Servisi Tabanlı Hata Analizi Uygulaması ...... 63 4. DENEYSEL SONUÇLAR ...... 65 5. DE ĞERLEND İRME VE ÖNER İLER ...... 68 6. KAYNAKLAR ...... 70 ÖZGEÇM İŞ ...... 73

v

ŞEK İLLER

Sayfa No Şekil 2.1 Bir yazılım hatasının tahmini için durum diyagramı ...... 8 Şekil 2.2 Yeni bir hatanın tamir süresine göre kümelenmesinin durum diyagramı ...... 9 Şekil 2.3 Amaçlanan güvenlik açı ğı ke şfinin akı ş şeması ...... 10 Şekil 2.4 Veri seti modeli ...... 14 Şekil 2.5 Hata yerelle ştirme performansı için amaçlanan yakla şımın bakı ş açısı ...... 16 Şekil 2.6 Apriori algoritmasının akı ş şeması ...... 25 Şekil 2.7 Örnek veri seti ...... 27 Şekil 2.8 Bir elemanlı ö ğe setlerinin destek adetleri ...... 28 Şekil 2.9 İki elemanlı ö ğe setlerinin destek adetleri ...... 28 Şekil 2.10 Üç elemanlı ö ğe setlerinin destek adetleri ...... 29 Şekil 2.11 Bir bilgisayar a ğı ...... 31 Şekil 2.12 Veri merkezleri arasında çoklu ba ğlantılı bilgisayar a ğı ...... 31 Şekil 2.13 Te şhis ba ğlantılı bir a ğ yapısı ...... 32 Şekil 2.14 Çok yönlü ba ğlantılı bir bilgisayar a ğı ...... 33 Şekil 2.15 Küçük bir graf örne ğinin çizilmesi ...... 37 Şekil 3.1 Sistemin temel akı ş şeması ...... 38 Şekil 3.2 Örnek bir windows servisi olu şturma ekranı ...... 40 Şekil 3.3 Zamanlayıcı nesnesine periyot zamanının atanması ...... 41 Şekil 3.4 Veritabanı tasarımının varlık-ili şki şeması ...... 42 Şekil 3.5 Workcube yazılımının ileti şim noktaları ...... 43 Şekil 3.6 Workcube yazılımı giri ş ekranı ...... 44 Şekil 3.7 Workcube yazılımı anasayfası ...... 44 Şekil 3.8 Workcube yazılımına ba ğlı olarak çalı şan örnek bir B2B sitesi giri ş sayfası . 45 Şekil 3.9 Workcube yazılımına ba ğlı olarak çalı şan örnek bir B2C sitesi ...... 46 Şekil 3.10 Workcube yazılımına ba ğlı olarak çalı şan örnek bir kariyer portali ...... 46 Şekil 3.11 Workcube yazılımına ba ğlı olarak çalı şan örnek bir PDA portali ...... 47 Şekil 3.12 Veri madencili ği uygulanan örnek bir hata e-postası ...... 48 Şekil 3.13 Yazılımsal hataların tutuldu ğu BUGS tablosu...... 48 Şekil 3.14 Apriori algoritmasının talep etti ği veri formatı ...... 56 Şekil 3.15 Apriori algoritmasının üretti ği ve sık birliktelikleri gösteren kural dosyası . 58

vi

Şekil 3.16 Graphviz yazılımı uygulanacak dosya ...... 59 Şekil 3.17 Graphviz yazılımı uygulandı ğında elde edilen graf yapısı ...... 60 Şekil 3.18 Ara yüz tabanlı uygulamanın ekran görüntüsü ...... 61 Şekil 3.19 Birliktelik kuralları olu şturulduktan sonra ekran görüntüsü ...... 62 Şekil 3.20 E-posta aracılı ğıyla gönderilen ek dosyanın gelen kutusu görünümü ...... 63 Şekil 4.1 24.09.2013 tarihinde olu şan hataların veritabanı görünümü ...... 66 Şekil 4.2 24.09.2013 tarihinde olu şan hata birliktelikleri ...... 67

vii

ÇİZELGELER

Sayfa No

Çizelge 2.1 Veri setinin her sınıfında anahtar kelime sayısı ...... 12 Çizelge 2.2 Farklı ürünlerin hata ve bile şen sayıları ...... 14 Çizelge 2.3 Raporlardan seçilen farklı nitelikler ve yeniden atamaların sayısı ...... 15 Çizelge 2.4 Bir e-posta log tablosu örne ği ...... 18 Çizelge 2.5 Sorgu logu kaydı örne ği ...... 19 Çizelge 2.6 Veri özeti adımından sonra kelimelerin sıklık tablosu ...... 20 Çizelge 2.7 Örnek log satırları...... 21 Çizelge 2.8 Anonimle ştirme adımından sonra örnek loglar ...... 22 Çizelge 2.9 Simgeleme adımından sonra loglar ...... 23 Çizelge 2.10 Kategorizasyon adımından sonra loglar ...... 24 Çizelge 3.1 Sayfa alanının sadele ştirmeden önceki ve sonraki hali ...... 51 Çizelge 3.2 Örnek hata tipleri ...... 51

viii

1. GİRİŞ

Bu tez çalı şmasında yazılım hata logları kullanılarak bir veri madencili ği uygulaması gerçekle ştirilmi ştir. Yazılım sistemlerinde yer alan hata depoları (repository) eğer do ğru de ğerlendirilirse, önemli bir bilgi kayna ğıdır. Veri madencili ği, kullanı şlı olabilecek ilginç bilgileri ke şfetmek için bu depolar üzerine uygulanabilir. Bu bilgiler sayesinde geli ştirim ekipleri gelecek yazılım kurgularını ve sürümlerini do ğru planlayabilirler.

Bu çalı şmada bir kurumsal yazılım şirketinde kullanılan yazılım sisteminin hataları de ğerlendirilmi ştir. Bir tabloda saklanmakta olan bu hatalar tez kapsamında geli ştirilen yazılım aracılı ğıyla günlük olarak çekilerek daha önceden belirlenen bir hata kritiklik sınıflandırması uygulanmı ştır. Daha sonra hataların belli bir yüzdedeki birliktelikleri bulunmu ştur. Bu birliktelikler graf yapısı aracılı ğıyla görselle ştirilmi ştir. Bu görsel, belli ki şilere e-posta yoluyla gönderilebilmi ştir. Böylece istenilen ki şiler günlük olarak kritik hatalar hakkında bilgilendirilebilmi ştir.

Uygulamanın günlük olarak çalı şabilmesi için Windows servis deste ğiyle otomatik bir yapı kurulmu ştur. Ayrıca ilgili uygulamanın Windows servis dı şında uygulama formu üzerinden yönetilebilen bir türevi de kurgulanmı ştır.

1.1 Veri Madencili ği

Veri madencili ği, bilgisayar bilimlerinin disiplinler arası bir sahasıdır [1]. Veritabanlarında bilgi ke şfi (Knowledge-Discovery in Databases) olarak da bilinir [1]. Veri madencili ği; yapay zeka, makine ö ğrenmesi, istatistik ve veritabanı sistemlerinin kesi şiminde yöntemleri olan ve büyük miktarlardaki veri setlerinde örüntüler ke şfetmenin hesaplamalı bir sürecidir. Veri madencili ği sürecinin nihai amacı bir veri setinden bilgi üretmek ve onu daha ileri kullanımlar için anla şılabilir bir veriye dönü ştürmektir [1]. Son yıllarda popüler olmaya ba şlamı ştır. Birliktelik kuralı madencili ği, veri madencili ğinin en aktif ara ştırma sahalarından birisidir.

1

Veri madencili ği; genellikle örüntü e şleme ya da di ğer neden-sonuç tekniklerini kullanarak daha önceden bilinmeyen verilerden bilgi çıkarma sürecidir. Veri noktaları arasındaki ba ğlantıları saptamak için depodaki büyük miktardaki veri üzerinde i şleyen hesaplama gücünü kullanır. Veri madencili ğinin siber güvenli ğin yanı sıra ulusal güvenli ği sa ğlamada da birçok uygulaması vardır. Ayrıca şüpheli insanların bulunmasında, bankalara daha iyi performans sa ğlamada, yeni mü şteriler kazanmada, mü şterilerin satın alma davranı şlarını incelemede de faydaları vardır. Kredi kartı dolandırıcılı ğı ve biyometrik uygulamalar için uygulanabilir [2].

Veri madencili ği, veritabanı ve yapay zeka teknolojilerinin bir kombinasyonudur. Yapay zeka kavramı son on yılda ciddi bir sıçrama yapmı ştır, ancak halihazırda var olan bilgisayar bilimlerine de önemli bir katkı sa ğlayabilece ğini de kanıtlamı ştır. Aslında birçok uzman, veri madencili ğinin internet ve veri ambarcılı ğından sonra endüstrideki en sıcak üçüncü saha oldu ğuna inanmaktadır [3].

Veri madencili ği gerçekte veriyi analiz etme sürecinden sonraki adımdır. Ancak sadece sorguları ve kullanıcı tanımlı ili şkileri elde etmek yerine bir adım ileri giderek verideki anlamlı ili şkileri de bulmaktadır. Bu ili şkiler veriyi incelemede daha derin bir bakı ş açısı kazandırmaktadır.

Örne ğin, bir bilgisayar tarafından olu şturulmu ş grafik, kullanıcının anlaması için zor olabilir, ama veri madencili ği kullanıcıya verideki akımların tam olarak ne oldu ğunu daha net bir şekilde gösterir. Veri madencili ği, ek bir bilgiye ihtiyaç duymadan veritabanındaki veriye de ğer katmaktadır. Bu durum hem teknik olan hem de teknik olmayan kullanıcıların daha iyi cevaplar alabilmelerini, daha do ğru karar verebilmelerini ve şirketlerin ciddi bir mali tasarruf yapabilmelerini sa ğlamaktadır [3].

2

1.1.1 Önemli Kullanımlar

Bilim ve Mühendislik: Veri madencili ği, bilim ve mühendislik alanlarında son yıllarda geni ş şekilde kullanılmaktadır, örne ğin, biyoinformatik, genetik, tıp, e ğitim ve elektrik mühendisli ği vb. Önemli amaçlarından birisi, insan DNA sırasındaki çe şitlilik ve hastalık e ğilimi arasındaki ili şkiyi anlamaktır. DNA yapılarındaki de ğişikliklerin kanser gibi yaygın hastalıkları nasıl etkiledi ğini ara ştırmaktır. Bu görevi gerçekle ştirmek için kullanılan tekni ğe çok faktörlü boyut indirgeme (multifactor dimensionality reduction) denir [4].

İş Dünyası: Veri madencili ği, şirketlerin insan kaynakları departmanlarına fayda sa ğlamaktadır. İnsan kaynakları departmanları, ba şarılı çalı şanları veri madencili ği sayesinde tespit edebilirler. Mesela ba şarılı çalı şanların mezun oldu ğu üniversiteleri tespit edebilirler ve i şe almalarda odaklarını bu yöne yönlendirebilirler. Ayrıca kazanç ve marj payı hedefleri gibi hedeflerini üretim planları ve i ş gücü seviyesi gibi operasyonel kararlara çevirebilirler.

Veri madencili ği, ayrıca bir şirkete mü şteri ili şkileri yönetiminde de ciddi derecede de ğer katar. Herhangi bir şirket ça ğrı merkezinden rastgele bir mü şteri seçip, e-posta göndermekten daha ziyade bir teklife cevap vermesi muhtemel olan mü şterileri belirleyip çabalarını bu yönde harcayabilir. Kampanyalarda kaynaklarını optimize edebilmek için daha geli şmi ş yöntemleri kullanabilirler, bu sayede bir bireyin bütün potansiyel teklifler arasından hangisine cevap verece ğini tahmin edebilirler. Ayrıca veri kümeleme de mü şteri gruplarını ve kümelerini ke şfetmede kullanılabilir.

1.2 Yazılım Madencili ği

Yazılım madencili ği, yazılım kurgularını anlamayı sağlayan yazılımları modernle ştirme alanında bir bilgi ke şfi uygulamasıdır. Bu süreç tersine mühendislik kavramıyla ili şkilidir [5]. Varlık-ba ğıntı modeli, herhangi bir yazılımdan elde edilen bilgiyi sunmanın sıkça kullanılan bir yöntemidir. Object Management Group (OMG),

3

herhangi bir kodun bilgi ke şfini gerçekle ştirme amacıyla yazılımsal varlıkları ve ili şkileri için bir ontoloji tanımlayan Bilgi Ke şfi Metamodeli tanımı geli ştirmi ştir [5].

Yazılım mimarileri i ş ve ticaret için ciddi derecede de ğer sa ğlar. Bu yüzden yazılım madencili ği veri madencili ğiyle de yakın ili şki içindedir. Yazılım sistemlerinden bilgi çıkarırken sistem tarafından i şlenen veri de ğil de sistemin yapısı ve davranı şları gözlemlenmektedir. Yazılım mühendisli ği bireysel veri setleri yerine veritabanı şemaları gibi meta verileri dikkate almaktadır.

Yazılım madencili ği, i şleyi şini farklı seviyelerde gerçekle ştirebilir. Örne ğin, program seviyesinde olabilir Bu sayede ba ğımsız de ğişkenleri ve ifadeleri inceleyebilir. Yazılımın prosedürleri ve fonksiyonlarının ça ğrılmasını, alt sistemler ve arayüzleri gibi yazılımın mimari seviyesini, veri depolama yapısını, uygulamanın akı ş yapısını veya yazılımı ticari olarak inceleyebilir.

Yazılım depo madencili ği, hem temel hem de de ğerli bilgiyi çıkarmayı içermektedir. Bu madencilik türü aktif bir alandır ve yazılım geli ştirimi ve bakımını desteklemek için kullanılır. Ara ştırmacılar, yöneticiler gibi çe şitli ki şiler, farklı amaçlarla gerçek bilgi üretebilmek için bu depolar üzerinde veri madencili ği gerçekle ştirirler [6].

1.3 Hata Madencili ği

Yazılımdaki kusurlara hata (bug) denir [6]. Hatalar, yazılım geli ştirirken beklenmedik şekillerde olu şan davranı şlardır. Yazılım testçileri ve kalite mühendisleri tarafından yazılımlar test edilirken bu tarz beklenmedik şekilde olu şan davranı şlar hata olarak i şaretlenir. Hatalar; Bugzilla, Perforce, JIRA vb. araçlarla yönetilirler ve izlenirler.

Hataları bulmak bazen zordur. Statik analiz araçları daha önceden tanımlı hataları bulmada sorun ya şamazlar, ancak yeni hata tiplerini öngörmek ve bulmak, ilgili programlama dilini derinlemesine kavrayan bir anlayı ş gerektirir [7]. Derinlemesine olmadan daha genel olarak yapılan gözden geçirmeler daha fazla zaman gerektirirler.

4

Hata raporlarındaki metinsel veriler, hata tamiri sürecinde yazılım geli ştiricilerine önemli bilgiler sa ğlar [8]. Hata veritabanı madencili ği hakkındaki daha önceki çalı şmalar üç temel hususa odaklanmaktadır [8]:

• Hata tamirini do ğru ki şiye atamak

• Tekrarlı hata raporlarını bulmak

• Raporlanmı ş bir hataya do ğru şiddeti atamak

Bir yazılım hata deposu, sadece yazılım hataları hakkında bilgi içermez, yazılım geli ştiricilerinin, kalite mühendislerinin (testçiler), yöneticilerin ve di ğer ekip üyelerinin yazılım hatalarını çözmek için verdikleri çaba hakkında da bilgi içermektedir. Bu bilgi yararlı bilgi örüntüleri çıkarabilmek için analiz edilebilir [9].

Bazen yönetici ve ekip liderleri bazı soruları kendilerine sormak zorunda kalırlar. “Bu yeni gelen yazılım hatasını kime atasam acaba?” veya “Benzer yazılımsal hatayı daha önce çözmü ş bir ki şi var mı?” bu tarz sorulardır. Aslında ekip liderleri hataları çözerken ekip üyelerinin i ş yükünü ve daha önce ilgili hataya yakın benzerlikte hataları çözüp çözmedi ğini göz önünde bulundururlar. Bu da elle gerçekle ştirilen bir süreçtir. Yani yazılım geli ştiricilerine hata raporlarını atamak, zaman kaybına sebep olan sıkıcı bir i ştir.

Herhangi bir yazılım hata deposu yazılım hataları hakkında bilgi içermektedir. Yazılım hata raporları hatanın raporlandı ğı tarih, hatanın tanımı, hatanın özeti (ba şlı ğı), hatanın atandı ğı yazılım geli ştirici, hatayı atayan ki şi, ekip üyelerinin yorumları vb. hata niteliklerini barındırır [9].

Hata izleyicileri, sürüm kontrol sistemleri ve mesaj panoları, yazılım projelerinin geli şmesine yardımcı olur [9]. Bu tarz araçlar yazılım projeleri hakkında bilgiler içermektedir. Böyle bilgiler sürekli bir yazılım geli şimine rehberlik sa ğlaması için veri madencili ği gerçekle ştirilebilir. Hata raporlama sistemleri, kullanıcıların hata

5

raporlarını gönderebilmesi, tanımlayabilmesini, izleyebilmesini, yorum yapabilmesini ve hata raporlarını sınıflandırabilmesini sa ğlar. Bugzilla, hata raporlama aracı için bir örnektir.

Bugzilla gibi bir hata-izleme sistemi; geli ştirim ekipleri, test ekipleri ve son kullanıcılar gibi çe şitli kaynaklardan toplanmı ş hata raporlarını tutarlar. Hata raporlayıcıları, bir hata raporlama sistemine hata raporlarını gönderdi ğinde gönderilen hataların güvenlik problemine sebep olup olmadı ğını göstermek için güvenlikle ilgili hata raporu (security bug reports - SBR) ya da güvenlikle ilgili olmayan hata raporu (not-security bug reports - NSBR) diye hata raporlarını etiketleme ihtiyacı duyarlar [10]. Güvenlikle ilgili olan hatalar olmayanlardan hata tamirinde daha yüksek önceli ğe sahiptirler. Bununla birlikte hata raporlayıcıları güvenlikle ilgili bilgi eksikli ği yüzünden bazen SBR’leri NSBR şeklinde etiketlendirebilirler. Bu yanlı ş anlama güvenlik hatalarını tanımlama ve tamir etmedeki gecikmeye ba ğlı olarak yazılımcı ve sistemcilere zarara sebep olmaktadır.

Hata raporlarının analizi, yazılım depoları madencili ği alanı içinde önemli bir alt sahadır. Hataları sınıflandırma ve hatalara öncelik atama sürecine dair de ğişik bilgiler ortaya çıkarmayı amaçlar. Bunun için kusurları izleme sistemlerinde kullanılabilen zengin veriyi ke şfeder. Hata verisi, Bugzilla ve JIRA gibi sistemlerden kolaylıkla eri şilebiliyorken yaygın bir veritabanı şekli ve veri seti daha kolay kopyalamaya izin verdi ği için gelecek ara ştırmaları ciddi şekilde arttırabilir [11].

1.4 Log Madencili ği

Yazılım sistemleri log dosyalarında kendi aktiviteleriyle ilgili bilgiler toplamaktadır. “loglamak” terimi tamamlanmı ş aktivitelerin kaydını tutmak için bir log defterine kayıt giri şi yapmak demektir. Loglar olarak adlandırılan log dosyalarındaki bilgiler, yazılım sisteminin hareketleri ya da olayları, durum bilgileri ve hata bilgilerinden olu şur. Herhangi bir log satırı temel olarak tarih ve zaman bilgisi, kullanıcı bilgisi, uygulama bilgisi ve olay bilgisi içermektedir. Loglar genellikle sistem izleme, sistemin hatalarını ayıklama ve hata te şhisi için toplanırlar.

6

Log dosyaları, bir sistemin i şleyi şi hakkında önemli bilgiler barındırmaktadır. Bu bilgi; genellikle hata ayıklama, operasyonel profille ştirme, anormallikleri bulma, güvenlik tehditlerini saptama, performansı ölçme vb. gibi i şlemler için kullanılır. Log dosyalarını elle okuma (manually) hala en geni ş kullanılan tekniklerden birisidir. Ancak buna ra ğmen bu derece büyük bir bilgi kitlesi böyle bir teknikle okunamaz. Çünkü bilgi miktarı çok büyüktür. Son yıllarda çe şitli veri madencili ği ve makine öğrenmesi algoritmaları log dosyalarındaki bilgiyi analiz etmek için kullanılmaktadır [12].

Log madencili ği, loglar üzerinde veri madencili ğinin uygulanması işlemidir ve bili şim ara ştırmasının yeni bir sahasıdır. Log verisine ön ko şul tanımlama ve algoritmayı kullanarak madencilik i şlemi uygulama log madencili ğinin en yaygın iki sahasıdır [13]. Ayrıca log madencili ği, web loglarında gizlenmi ş kullanıcı örüntülerini bulabilmek için kullanılabilir.

7

2. LİTERATÜR İNCELEMES İ

2.1 Hata Madencili ği

Nagwani ve Bhansali “A Data Mining Model to Predict Software Bug Complexity Using Bug Estimation and Clustering” isimli makalelerinde bir hatanın karma şıklı ğını tahmin etmeye dair bir model tasarlamı şlardır [6]. Kullandıkları teknik üç a şamalı bir yöntemden olu şmaktadır. İlk a şamada hata deposundaki hatalar için belli bir tamir süresi hesaplanmı ştır. Sonra da bu tamir sürelerine ba ğlı olarak hatalar belli karmaşıklık kümelerine ayrılmı ştır.

Şekil 2.1 Bir yazılım hatasının tahmini için durum diyagramı [6]

Bir yazılım hatasını tahmin etmek için hata kümeleme durum diyagramı Şekil 2.1’de görülmektedir. İkinci a şamada, yeni bir hata geldi ğinde daha önceden tahmin süreleri hesaplanmı ş hatalar referans alınmı ştır. O hatalara göre yeni hatanın tamir zamanı

8

tahmin edilmi ştir. Üçüncü a şamada da yeni hata, Şekil 2.2’de görüldü ğü gibi kendisi için tahmin edilen zamana göre hangi kümeye atanması gerekiyorsa, o kümeye atanmı ştır.

Şekil 2.2 Yeni bir hatanın tamir süresine göre kümelenmesinin durum diyagramı [6]

Breckel “Error Mining: Bug Detection through Comparison with Large Code Databases” adlı makalesinde büyük bir kod veritabanında kar şıla ştırmalar yaparak hataları otomatik olarak saptamaya çalı şmı ştır [7]. Bu yakla şım da şöyle gösterilebilir:

Aşağıdaki C kodu parçası diziler üzerinde i şleyen daha büyük bir fonksiyonun parçası olsun: for(j = 0; j < - n; j++) array[ i ] = j; [7]

Yukarıdaki kodda hatalı kısımlar kırmızı renkle gösterilmi ştir. İlgili algoritma çalıştı ğında yukarıdaki kodu ele almaktadır. Kod veritabanında yukarıdaki koda benzeyen a şağıdaki kodu bulur. for(i = 0; i < k; i++) arr[i] = i; [7]

9

Daha sonra her iki kodu kar şıla ştırır ve aralarındaki farklılıkları ve benzerlikleri inceler. En sonunda üstteki koddaki hatalar ile ilgili olarak bir yorum getirir. Yani kırmızıyla belirtilen kısımları bulacak ve bunları potansiyel birer hata olarak işaretleyecektir.

Kritik ve hassas sistemler için yazılım güvenlik açıklarını tanımlama i şlemi, karma şık yazılım sistemlerine ba ğlı olarak gittikçe önem kazanıyor. Bazı yazılım hataları fark edilmelerinden çok uzun zaman sonra güvenlik açı ğı olarak tanımlanırlar. Bu güvenlik açıkları gizli etkili güvenlik açıkları (hidden impact vulnerabilities) olarak bilinir [8].

Wijayasekara, Manic, Wright ve McQueen, “Mining Bug Databases for Unidentified Software Vulnerabilities” adlı makalelerinde gizli etkili güvenlik açıkları için kullanılan hata veritabanlarına veri madencili ği uygulanmasının gerekti ğini belirtmi şlerdir [8]. Şekil 2.3, çalı şmanın amaçlanan metodolojisini sunmaktadır.

Şekil 2.3 Amaçlanan güvenlik açı ğı keşfinin akı ş şeması [8] 10

Şekil 2.3, hata veritabanlarındaki hata raporlarının kısa ve uzun tanımlarını kullanmaktadır. Buradaki amacı gizli etkili güvenlik açıklarını bulmaktır. Bunun için ilk etapta geli şmi ş metin madencili ğini kullanmı ştır. İlgili şekil, raporlanmı ş bir hatadan kısa ve uzun tanımları çıkarır, ondan sonra metin madencili ği sayesinde bir özellik vektörü üretir. Metin madencili ği a şaması; simgele ştirme (tokenizing), durdurucu kelimelerin (stop-words) kaldırılması, e şanlamlı ve hiponim (hyponym) kelimelerin birle ştirilmesi vs gibi a şamalar içermektedir. Ayrıca hatanın raporlandı ğı statik kodun analizi de yapılabilir ve özellik vektörüne eklenebilir. Son olarak sınıflandırıcı, hatanın özellik vektörüne göre raporlanmı ş bir hatayı normal bir hata veya güvenlik açı ğı olan hata olarak sınıflandıracaktır.

Hatalar kısa ve uzun tanımlı olarak sürece dâhil olurlar. Sembolle ştirme, hata tanımlarındaki ünik olan kelimeleri tespit etmek için kullanılmı ştır. Sembolle ştirme sürecinde özel karakterler ve numaralar kaldırılmı ştır. Büyük harf kullanımı ve di ğer metin formatlama da ayrıca metinden çıkarılmıştır. Çizelge 2.1, hatanın her kategorisindeki ünik kelimelerin sayısını göstermektedir. Metin madencili ği sürecinin her adımından sonra özellik vektörünün boyunun azaltılması Çizelge 2.1’de görülebilmektedir [8].

Bu sayede veriler daha sade ve analiz edilmeye müsait bir hale getirilmi ştir.

11

Çizelge 2.1 Veri setinin her sınıfında anahtar kelime sayısı [8]

Lampanfi, Perez ve Demeyer; “The Eclipse and Mozilla Defect Tracking Dataset: “A Genuine Dataset for Mining Bug Information” adlı makalelerinde Eclipse ve Mozilla Kusur İzleme Veri Setini (The Eclipse and Mozilla Defect Tracking Dataset) incelemeyi amaçlamı şlardır [11]. Bu set, bütün hata önceliklendirme ya şam döngüsünü kapsamak için tasarlanmı ştır. Sadece gerçek kusurları barındıran örnek bir veritabanıdır. Bu veri seti; hata şiddetini tahmin etmek için, hata tamir zamanına çalı şmak için ve atanmı ş bile şenleri tanımlamak için kullanılmı ştır.

Bu makalede herhangi bir raporlanmı ş hatanın ya şam döngüsü boyunca geçirdi ği de ğişim ve güncellemelere odaklanılmı ştır [11]. Bir hatanın sadece tek bir ekran görüntüsünü dikkate almak yerine daha de ğişik ve ilginç bulgularının bütün ya şam döngüsü sorgulandı ğında elde edilebilece ği dü şünülmü ştür. Sunulmu ş olan Eclipse ve Mozilla Kusur İzleme Veri Seti, hem Eclipse hem de Mozilla’nın dört popüler ürününün hata raporlarının setini içerir. Bu veri setindeki nitelikler şunlardır [11]:

1. Öncelik: Öncelik, hatanın ne kadar süre içinde tamir edilmesi gerekti ğini gösterir. Bu nitelik tipik olarak P1 en yüksek önceli ği gösterecek şekilde P1 ve P5 arasında çe şitlenir.

12

2. Ciddiyet: Yazılım sistemi üstünde hatanın etki şiddeti. Bu nitelik; önemsiz, az önemsiz, normal, önemli, kritik ve bloklayıcı olarak çe şitlenir.

3. Ürün: Hatanın ili şkili oldu ğu özel yazılım uygulaması

4. Bile şen: Raporlanmı ş hata için ürünün ilgili alt sistemi

5. Hata Durumu: Bu nitelik, hatanın şu anki durumunu göstermektedir. Bu niteli ğin de ğerleri; onaylanmamı ş, yeni, atanmı ş, yeniden açılmı ş, hazır, çözülmü ş, do ğrulanmı ş arasında çe şitlenir.

6. Karar: Bu nitelik, hataya ne oldu ğunu gösterir. Bu niteli ğin de ğeri; tamir edildi, geçersiz, alı şılmı ş tamir, çift, worksforme, tamam de ğil arasında çe şitlenir.

7. Kime Atandı ğı: Atanmı ş hatayı alan geli ştirici tanımı

8. Bilgi Verilecekler: Bu hatanın süreciyle ilgilenen ve bilgi alan kullanıcı

9. Kısa Tanım: Hatayı anlatan tek satırlık bir özet.

10. Sürüm: Hatanın içinde bulundu ğu ürünün sürümü.

11. İş letim Sistemi: Hatanın bulundu ğu i şletim sistemi.

Her niteli ğin kendi raporunun bütün ya şam döngüsü boyunca gerçekle ştirilmi ş farklı “de ğişimleri” derlenmi ştir. Her böyle de ğişim için hata raporunun ilgili niteli ğinin yeni de ğerinin ne zaman atandı ğı tutulmaktadır. Ayrıca de ğiştirilemez iki rapor niteli ği vardır, raporlayıcı ve raporlanmı ş hatanın açılı ş zamanı. Bu nitelikler Şekil 2.4’te görüldü ğü gibi her hata raporu için Rapor örneklerinde (instance) bulunur [11].

13

Şekil 2.4 Veri seti modeli [11]

İlk olarak, her proje için ürünlerin sayısı seçilir ve raporlanmı ş hata sayısı ve bile şen sayısına göre ürünlerin boyutu ölçülür. Ondan sonra, niteliklerin her birinin hata raporlarının ya şam döngüsü boyunca ne kadar sıklıkla güncellendi ğinin sayısı hesaplanır. Çizelge 2.2 seçilmi ş farklı yazılım ürünlerini ve o ürünlerin bile şen ve hata sayılarını göstermektedir.

Çizelge 2.2 Farklı ürünlerin hata ve bile şen sayıları [11]

Ürün Hata Sayısı Bile şen Sayısı

Eclipse Platform 24775 22

Eclipse JDT 10814 6

Eclipse CDT 5640 20

Eclipse PDE 5655 5

Mozilla Core 74292 137

Mozilla Firefox 69879 47

Mozilla Thunderbird 19237 23

Mozilla Bugzilla 4616 21

Hata sınıflandırıcıları, hangi hataların tamir edilece ğine, kimin yapaca ğına ve ne zaman tamir edilece ğine karar verebilmesi için gelen hata raporlarını analiz ederler. Burada, hata sınıflandırıcıları yanlı ş ve kayıp bilgiyi güncelleme imkânına sahiptirler. Özellikle, bir sınıflandırıcı, hatalı “bile şen” nitelikli bir hata raporu aldı ğında güncellemeler o nitelik için olur. Bugzilla bu güncellemelerin kaydını tutar,

14

bundan dolayı hata veritabanında depolanmı ş güncelleme bilgilerini kullanarak bir hata raporunun niteliklerinin her biri için de ğerleri çıkarılabilir. Çizelge 2.3, bütün ürünler için olan böyle atamaların toplam sayısını sunmaktadır [11].

Çizelge 2.3 Raporlardan seçilen farklı nitelikler ve yeniden atamaların sayısı [11]

Hata Niteli ği Atama Yüzdesi Eclipse Mozilla

Hata Durumu %100 %100

Çözümü %100 %100

Kime Atandı ğı %66 %29

Bilgi Verilecek Ki şiler %65 %90 Kısa Tanım %27 %15 Bile şen %18 %17 Ürün %5 %7 Ciddiyet %6 %6 Sürüm %6 %21 Öncelik %3 %6 İş letim Sistemi %5 %10

Çizelge 2.3’te farklı nitelikler ve azalan sırada sıralanmı ş güncelleme frekansları gösterilmektedir. Beklendi ği gibi hata durumu (bug_status), karar (resolution), raporlanmı ş bir hatanın en sık güncellenen nitelikleridir. Bu nitelikler, hangi hataların çözüldü ğünün ve hangilerinin de çözülmeye çalı şıldı ğının kaydını tuttu ğu için en sık güncellenmeye meyillidirler. Çizelge 2.3’te ayrıca en az sıklıkta güncellenen niteliklerin i şletim sistemi (op_sys), öncelik (priority) ve sürüm (version) gibi nitelikler oldu ğu gözlemlenmektedir.

Hata yerelle ştirme, bir yazılım hatasının yazılımsal konum açısından tespit edilme sürecidir. Tantithamthavorn, Teekavanich, Ihara ve Matsumoto; “Mining A Change History to Quickly Identify Bug Locations : A Case Study of the Eclipse Project” 15

adlı makalelerinde hata yerelle ştirme performansını arttırabilmek için yazılımın de ğişim tarihçesini inceleyen bir yakla şım amaçlamı şlardır [14]. Çalı şmanın temel fikri şu şekildedir: Son zamanlarda hatayı düzeltmek için üstünde i şlem yapılmı ş bir dosyanın yakın zamanda tekrar üstünde i şlem yapılma olasılı ğı vardır. Hatanın olu ştu ğu sanılan kaynak kodu dosyasını tahmin etmek için yazılımın de ğişim tarihçesi incelenir ve metinsel kurgularından faydalanılır. Bu yakla şım, Eclipse Platform ve Eclipse JDT’den elde edilen 1212 adet hata raporu üzerinde uygulanıp de ğerlendirilmi ştir. Deneysel sonuçlar ilgili çalı şmanın hata yerelle ştirme performansını geli ştirdi ği ve hatalı dosyaları etkili bir şekilde bulabildi ğini göstermi ştir.

Şekil 2.5 Hata yerelle ştirme performansı için amaçlanan yakla şımın bakı ş açısı [14]

Şekil 2.5, amaçlanan yakla şımın bakı ş açısını göstermektedir. Yeni bir hata raporu için, hata raporunun ba şlık ve tanımına metinsel olarak benzeyen kaynak kodu dosyalarını bulmak için Vektör Uzay Modeli kullanılmı ştır. Daha önce üstünde hata tamiri i şlemi uygulanmı ş dosyalar üzerinde yazılımsal de ğişim tarihçesi analizi uygulanmı ştır. Ardından bu dosyaların hata bulundurma e ğilimleri tahmin edilmi ştir.

16

Son olarak, bu elde edilen verilerin skorları birle ştirilerek yazılım geli ştiricilerine hata bulundurması muhtemel yüksek skorlu kaynak kodu dosyaları bildirilmi ştir.

Metinsel olarak benzeyen dosyaları tespit ederken şöyle bir yol izlenmi ştir. İlk olarak, hata raporu ve kaynak kodu dosyalarından anlamlı kelimeler çıkarılmı ştır. Bütün noktalama işaretleri ve sayılar kaldırılmı ştır. Bütün kelimeler simgelere ayrılmı ştır ve küçük harfe dönü ştürülerek normalize edilmi ştir. Ayrıca yaygın İngilizce kelimeleri (a, an, the gibi) ve genel programlama terimleri (int, double, char gibi) kaldırılmı ştır. Ardından belli e şitsizlikler uygulayarak her hata raporu için ve kaynak kodu dosyaları için bir vektör de ğeri elde edilmi ştir. Üçüncü olarak da her hata raporu ve kaynak kodu dosyası için VSMScore(q,d) de ğerini hesaplamak için ba şka bir e şitsizlik kullanılmı ştır. Son olarak, her hata raporu için belli bir derecenin üstünde olan kaynak kodu dosyaları elde edilmi ştir.

Daha önceden hata tamiri i şlemi uygulanmı ş dosyaları tanımlamak için de ğişim tarihçesi analiz edilmi ştir. Genel olarak, yazılım geli ştiricileri bir hatayı tamir ettiklerinde log kayıtlarında hata raporunun numarasını da belirtirler. Daha önceden tamir edilmi ş dosyaları tanımlamak için yazılım sürüm ar şivleri ve tamir edilmi ş hata raporlarının logları arasındaki mantıksal ili şki kullanılmı ştır. Bu sayede daha önce tamir edilmi ş dosyaların kronolojik sırada bir listesi elde edilebilmi ştir.

2.2 Log Dosyaları Madencili ği

Şirket, kurum, kurulu ş vb. gibi büyük organizasyonlardaki çalı şanlar arasındaki ileti şim, ofis telefonları ya da ofis içi e-posta sistemleri gibi kanallar dı şındaki yöntemlerle de gerçekle şebilmektedir. Ayrıca bu organizasyonlar her türlü suistimale kar şı tedbirli olabilmeleri için ve güvenlik endi şeleri sebebiyle çalı şanlara kar şı sıkı politikalar uygulayabilmektedir. Dahili e-posta ve ileti şimi gözlemlemek bir bakıma böyle organizasyonların ilgilendi ği konulardır. Şuanda bu tarz bir i şlem için güvenilir otomatikle ştirilmi ş bir çözüm bulunmamaktadır. İnsan müdahalesi kaçınılmaz görünür ama pahalıdır. Güvenli bir i şyeri ortamını sa ğlamada pratik bir yöntem şüpheli iletişim ya da kullanıcılara dikkat kesilen otomatik bir filtreleme sistemidir.

17

Esichaikul, Guha ve Niyamosatha, “Mining Email Transaction Logs to Locate Significant Messages and Users” adlı makalelerinde bir sistem içindeki e-posta logları üzerinde veri madencili ği gerçekle ştirmi şlerdir [15]. Bu sayede önem derecesi yüksek ki şileri ve mesajları basit ve sezgisel bir model aracılı ğıyla tespit etmeye çalı şmı şlardır. Bu model, i şlem loglarında graf analizi uygulayarak mesajlara ve kullanıcılara önemlilik skoru atamaya dayanmaktadır.

Çizelge 2.4 Bir e-posta log tablosu örne ği [15]

E-posta Gönderici Mesaj Cevabı Zaman Konu Alıcı Skor ID Tipi Oldu ğu Mesaj

1 A Orjinal 0 1:30 Bulu şma B,C,D 2.2

2 C İletilmi ş 1 2:10 Bulu şma E,F,C 1.6

3 A Orjinal 0 4:45 Öğle C 0.8 Yeme ği

4 E Cevap 2 5:30 Bulu şma C 0.5

5 F Cevap 2 8:30 Bulu şma C 0.5

6 C İletilmi ş 3 9:20 Öğle B,D 0.6 Yeme ği

Çizelge 2.4’teki log örne ği herhangi bir organizasyonun e-posta i şlem loglarından alınmı ştır. Şu alanlardan olu şmaktadır:

1-) Mesaj ID: Her mesaj için ünik pozitif bir tamsayıdır.

2-) Gönderen: Gönderenin ID’sini gösterir.

3-) Mesaj Tipi: “Orjinal”, “ İletilmi ş” ya da “Cevap” seçeneklerinden birini almaktadır.

18

4-) Cevap Oldu ğu Mesaj: Hangi mesajın cevabı oldu ğunu göstermektedir.

5-) Zaman: Mesajın gönderildi ği sistem zamanını göstermektedir.

6-) Konu: Mesajın konu ba şlı ğıdır.

Var olan mesajlar üzerinde belli i şlemler uygulanarak her mesaj için bir skor üretilmi ştir. Mesajların skorlarını belirlerken, ilgili mesajın ba şka bir mesaja cevap niteli ğinde olup olmaması skoru etkilemi ştir. Bu sayede örne ğin, daha fazla cevaplanan mesaj daha yüksek skorlu olmu ştur.

Ngok ve Gong, “Log Mining to Support Web Query Expansions” adlı makalelerinde arama motorlarındaki sorguları inceleyerek gereksiz arama sonuçlarını azaltma ile ilgili bir model geli ştirmi şlerdir [16]. Bunu yaparken de log madencili ğinden faydalanmı şlardır. Yapılan çalı şma, sorgu ko şullarının düzenlenerek ve geli ştirilerek daha do ğru arama sonuçlarının elde edilmeye çalı şılmasına dayanmaktadır.

Halihazırdaki arama motorlarında kullanıcıların aramalarına cevap verme yöntemleri çok tatmin edici de ğildir. Bunlar ya aranan kelimeyle çok fazla alakasız sonuç, ya sadece birkaç sonuç döndürmektedir ya da hiç sonuç döndürmemektedir. Bunun dı şında bazen sonuçlar geldi ğinde aranan kelimeyle ili şkisi epey dü şüktür. Bunun iki sebebi vardır. Girilmi ş arama sorgusu oldukça kısadır veya sorgunun anlamı kullanıcının ihtiyacını yeterince iyi anlatamayabilir.

Çizelge 2.5 Sorgu logu kaydı örne ği [16]

IP Sorgu İfadesi Tarih (TimeStamp) URL Adresi

192.168.1.1 Java WordNet API 12.3.2006 23:00:01 http://www.wordnet.com

Kullanıcıların sorgu hareketleri arama motorları tarafından loglanmaktadır. Bu log kayıtları, genellikle Çizelge 2.5’te de görülece ği üzere kullanıcıların IP adresleri,

19

sorgu ifadeleri, sorgu tarihleri (timestamp) ve kullanıcıların web sayfasında tıkladıkları adresleri içermektedir.

Vouk ve Nagappan “Abstracting log lines to log event types for mining software system logs” adlı makalelerinde bir log dosyasını soyutlamak için yeni bir yakla şım sunmu şlardır [12].

Jen kullanıcısı için i şleme ba şlama

Tom kullanıcısı için i şleme ba şlama

Henry kullanıcı için i şleme ba şlama

Tom kullanıcısı için i şleme ba şlama

Peter kullanıcısı için i şleme ba şlama

Çizelge 2.6 Veri özeti adımından sonra kelimelerin sıklık tablosu [12]

Kelime 1 2 3 4 5

Ba şlama 5 0 0 0 0

işleme 0 5 0 0 0

İçin 0 0 5 0 0

Jen 0 0 0 1 0

Tom 0 0 0 2 0

… 0 0 0 0 …

Kullanıcı 0 0 0 0 5

Çizelge 2.6’da görüldü ğü gibi, “ba şlama”, “i şleme”, ”için”, “kullanıcısı” kelimeleri sırayla 1, 2, 3 ve 5 pozisyonlarında 5 kere geçiyor. Çünkü bu kelimeler log

20

satırlarının statik alanlarıdır. Yani her log kaydında bulunmaktadır. “Jen”, “Henry” ve “Peter” kelimeleri bir kere geçiyor ve “Tom“ iki kere geçiyor. Bunlar di ğer kelimelerin sıklı ğından çok daha azdır. Buradan şöyle bir sonuç çıkarılabilir. Log dosyasında bu satırları olu şturmu ş mesaj a şağıdaki formatta olabilir: “$kullaniciadi kullanıcısı için i şleme ba şlama”. Bu ifade gerçekte log mesajını olu şturmu ş ifadedir. Sabit mesaj tipi sahasına ait olan kelimeler, de ğişken parametre sahasındaki kelimelerden daha sık geçmektedir. Log dosyalarını olay tiplerine soyutlamak için bu özellikten faydalanılmı ştır.

Jiang, Hassan, Flora ve Hamann; “Abstracting Execution Logs to Execution Events for Enterprise Applications” adlı makalelerinde işlem loglarını kullanarak uygulamaların işleyi şlerini gözlemlemeyi amaçlamı şlardır [17]. Log satırları, bir olayın farklı dinamik parametrelerle gerçekle şmesini ifade etmektedir. Bu çalı şmada da bu log satırlarından dinamik parametreler çıkarılarak gerçekle şen i şlem tiplerini tespit eden bir yakla şım amaçlanmı ştır [17].

Log satırları arasındaki benzerlikleri saptamak için yeni bir yakla şım türetilmi ştir. Ardından bu satırlar parametrele ştirip soyutlanmı ştır. Buradaki yakla şım binlerce ya da milyonlarca log satırını işleyerek ölçebilmektedir.

Çizelge 2.7 Örnek log satırları [17]

Log Satırları

1. Hesaplamayı ba şlat 2. Ödeme gerçekle ştir, ürün=çanta, çe şit=1,miktar=100 3. Ödeme gerçekle ştir, ürün=kitap, çe şit=3,miktar=150 4. Hesapla, toplam miktar 250 adettir. 5. Hesaplama tamamlandı.

21

Çalı şma üç adımdan olu şmaktadır: Anonimle ştirme, Simgele ştirme ve Kategorile ştirme. Bu bölümün geri kalanında Çizelge 2.7 ile ilgili küçük bir örnek gösterilmektedir.

Anonimle ştirme adımında, Çizelge 2.7’de dinamik parçalara kar şılık gelen log satırlarındaki dinamik simge alanları için sezgisel tarama (heuristics) kullanılır. Bu dinamik alanlar tespit edildi ğinde genel simgelerle yer de ğiştirilir ($v). Sezgiler eklenebilir ya da buradaki yakla şımdan çıkarılabilir. A şağıdaki iki sezgi (heuristics) log satırlarındaki dinamik parçaları tanımak için kullanılır:

1- “kelime=de ğer” gibi atama çiftleri

2- … de ğer adettir gibi ifadeler

Çizelge 2.8’de log satırlarının anonimle ştirme adımı uygulandıktan sonraki durumu gösterilmi ştir. İkinci ve üçüncü satırlarda e şittir i şaretinden sonra içerikler $v genel terimiyle yer de ğiştirilmi ştir. Dördüncü satırda “250 adettir” ifadesi “=$v” terimiyle yer de ğiştirilmi ştir. İlk ve son satıra yapılmı ş herhangi bir de ğişiklik yoktur .

Çizelge 2.8 Anonimle ştirme adımından sonra örnek loglar [17]

Log Satırları

1. Hesaplamayı ba şlat 2. Ödeme gerçekle ştir, ürün= $v , çe şit= $v ,miktar= $v 3. Ödeme gerçekle ştir, ürün= $v , çe şit= $v ,miktar= $v 4. Hesapla, toplam miktar $v adettir. 5. Hesaplama tamamlandı.

22

Simgele ştirme adımında, her log satırındaki kelime ve parametrelerin sayısına göre anonimle ştirilmi ş log satırları farklı gruplara (kutulara) ayrılmı ştır. Log satırlarını farklı kutulara ayırma Kategorile ştirme Adımı boyunca arama yerini daraltır. Kutular, arama yerini sınırlayarak güncel bir şekilde büyük log dosyalarının işlenilmesine izin verir. Genel terimlerin ($v) sayısını sayarak bir log dosyasındaki parametrelerin sayısı tahmin edilir. Aynı sayıda dinamik simge barındıran log satırları ve aynı sayıda parametre içeren log satırları aynı kutuya yerle ştirilir. Çizelge 2.9, anonimle ştirme ve simgele ştirme adımlarından sonra örnek log satırlarını göstermektedir. Sol kolon bir kutunun adını belirtmektedir. Her kutu bir sayısal işaret ile ifade edilmektedir: kelime sayısı ve bu kutu içindeki di ğer log satırlarıyla ortak parametre sayısı. Çizelge 2.9’da sa ğ kolon log satırlarını göstermektedir. Her satır kutuyu ve ilgili log satırlarını göstermektedir. İkinci ve üçüncü log satırları 8 kelime ve 3 parametre içermektedir. Böylece ikinci ve üçüncü log satırları 8_3 kutusunda birlikte gruplanmı ştır. Benzer şekilde ilk ve son log satırları, hem 3 kelime içerdi ği hem de hiç parametre içermedi ği için 3_0 kutusu içinde birlikte gruplanırlar .

Çizelge 2.9 Simgeleme adımından sonra loglar [17]

Kutu Adı Log Satırları 1. Hesaplamayı ba şlat 3_0 5. Hesaplama tamamlandı

4. Hesapla, toplam miktar $v adettir 5_1

2. Ödeme gerçekle ştir, ürün= $v , çe şit= $v ,miktar= $v 8_3 3. Ödeme gerçekle ştir, ürün= $v , çe şit= $v ,miktar= $v

23

Kategorile ştirme adımında her kutudaki log satırları kar şıla ştırılır ve ilgili i şlem tiplerine soyutlanır. Sonuçlandırılmı ş işlem olayları gelecek referanslar için bir işlem veritabanında depolanır. Algoritma, her kutu kendi içinde de ğerlendirilerek devam etmektedir. Bu adımdan sonra her log satırı bir işlem olayına soyutlanmalıdır. Çizelge 2.10, kategorile ştirme adımından sonra çalı şma örne ğinin sonuçlarını çizelgele ştirmektedir. Algoritma, 3_0 kutusuyla ba şlar. Ba şlangıç olarak bu kutuya uyan herhangi bir işlem olayı yoktur. Bu yüzden ilk log satırına uyan işlem olayı isim olarak da 3_0_1 ilk işlem olayı olur (3 kelimesi olan ve hiç parametresi olmayan kutuya uyan ilk yürütme olayı). Ondan sonra algoritma be şinci log satırını içeren 3_0 kutusundaki bir sonraki log satırına hareket eder. Şu anda sadece bir yürütme olayı vardır: 3_0_1. Be şinci log satırı 3_0_1 yürütme olayına benzemedi ği için, be şinci log satırı için 3_0_2 yeni bir işlem olayı olu şturulur. 3_0 kutusundaki bütün log satırlarının i şlenmesiyle 5_1 kutusuna geçilir. 5_1 kutusuna ba şlangıçta uyan herhangi bir işlem olayı olmadı ğı için dördüncü log satırı 5_1_1 olarak yeni bir işlem olayına atanır. 8_3 kutusundan log satırları i şletildi ğinde benzer log uygulamaları aynı algoritmayla i şler.

Çizelge 2.10 Kategorizasyon adımından sonra loglar [17]

İş lem Olayı Log Satırları

3_0_1 1. Hesaplamayı ba şlat

3_0_2 5. Hesaplama tamamlandı

5_1_1 4. Hesapla, toplam miktar $v adettir

8_3_1 2. Ödeme gerçekle ştir, ürün= $v , çe şit= $v ,miktar= $v

8_3_1 3. Ödeme gerçekle ştir, ürün= $v , çe şit= $v ,miktar= $v

2.3 Apriori Algoritması

Apriori, i şlem yapılabilen veritabanları üzerinde sık öğe seti madencili ği ve birliktelik kuralı ö ğrenimi için kullanılan klasik bir algoritmadır. Apriori tarafından

24

saptanan sık öğe setleri, veritabanında genel akımları vurgulayan birliktelik kurallarını saptamak için kullanılabilir. Market sepet analizi gibi alanlarda uygulamaları vardır.

2.3.1 Genel Çerçeve

Apriori algoritması, birliktelik kuralı madencili ğinde en klasik ve en etkili algoritmalardan birisidir [18]. Ayrıca en yo ğun kullanılan yöntemlerden birisidir. Katman katman çalı şarak döngüsel bir yöntemle kurallarını çıkarır. Öğe seti, öğelerin kümesine denmektedir ve N öğelerini barındıran bir öğe seti, N öğe seti olarak adlandırılmaktadır. Öğe setlerinin sıklı ğı, öğe setlerinin gördü ğü i şlem sayısı anlamına gelmektedir. Temel işleyi şi Şekil 2.6’daki gibidir:

Şekil 2.6 Apriori algoritmasının akı ş şeması [18]

1. Öncelikle sisteme minimum destek ve minimum güven de ğerleri atanmalıdır. Mindestek = s ve minguven = c.

2. Ardından ayrı ayrı 1’li olarak öğe setlerinin adedi hesaplanır. 1’li öğe setlerinin sık sayılabilme şartı her birinin destek sayısının minimum destek sayısından fazla olmasıdır.

25

3. Veritabanından ayrı ayrı bütün öğeler okunur ve her bir öğenin 1’li öğe setleri kullanılır. Ardından her öğe setinin deste ği üretilir. Son olarak 1’li öğe setlerinden 2’li öğe setleri kümesi türetilir.

4. Veritabanı taranır ve 2’li aday öğe seti kümesi türetilebilir ve ondan da 3’lü aday öğe setleri kümesi aynen önceki gibi türetilir.

5. Veritabanı taranır ve Sık Öğe Seti kümesinin daha yüksek seviyede sonuçlanan minimum deste ğiyle kar şıla ştırılır. Son olarak sonraki aday öğe seti yeni bir aday öğe seti gelmeyene kadar türetilir.

Apriori algoritmasının temel prensipleri şu şekilde ifade edilebilir. Birliktelik kuralları üç parametreyle tanımlanır [18].

1. Destek S(XY) : Kuralların ne kadar sıklıkta oldu ğunu ifade etmektedir ve Minsup, minimum deste ğin ne kadar oldu ğunu göstermektedir.

2. Güven C(XY) : Kuralların ne kadar yo ğunlukta oldu ğunu ifade etmektedir ve Minconf, minimum güveni ifade etmektedir.

3. Sık öğe seti : Veritabanındaki kullanıcılar tarafından verilmi ş minimum destek ve güveni kar şılayan birliktelik kuralını tanımlamak için kullanılır.

Bununla birlikte Apriori algoritması uygulamaları çözerken bazı sakıncaları da barındırmaktadır. E ğer sistem farklı n tane öğe setine sahipse, veritabanında tarama yaparken n kere tarama yapmak zorunda kalmaktadır. Bu durum kural üretimi için sistemde ciddi bir zaman kaybına sebep olmaktadır. Böyle bir sürecin zaman karma şıklı ğı m öğe setli n i şleme sahip olan O(e n) olacaktır [19]. Yüksek e şik kriteri olması durumunda bazı öğe setleri daha ilk adımlarda ayrılır. Bu durum da önemli tahmin ve kuralları dı şarıda bırakacaktır.

26

2.3.2 Örnekler

Birinci örnekte, her satırın bir i şlem oldu ğu ve her hücrenin, i şleme ait ba ğımsız bir öğe oldu ğu Şekil 2.7’deki gibi bir veri seti bulunmaktadır.

kalem ka ğıt defter

kalem ka ğıt dosya

kalem ka ğıt defter

kalem ka ğıt dosya

Şekil 2.7 Örnek veri seti [20]

Bu veritabanından saptanabilen birliktelik kuralları şu şekilde olacaktır:

1. Kalem’li setlerin %100’ ü ayrıca ka ğıt da içermektedir.

2. Kalem’li ve ka ğıt’lı setlerin %50’ si ayrıca defter de içermektedir.

3. Kalem’li ve ka ğıt’lı setlerin %50’ si ayrıca dosya da içermektedir.

Bir di ğer örnekte, büyük bir süpermarket her öğe için stok tutma birimine göre satı ş verisini izlemi ştir: “ya ğ” ya da “ekmek” gibi öğe setleri sayısal bir stok tutma birimi tarafından tanımlanmı ştır. Süpermarketin her i şlemin birlikte alınmı ş eşyaları gösterdi ği bir i şlem veritabanı vardır.

İş lemler veritabanında {1,2,3,4}, {1,2}, {2,3,4}, {2,3}, {1,2,4}, {3,4}, ve {2,4} setlerinden olu şmaktadır. Bu veritabanında sık öğe setlerini saptamak için Apriori kullanılmı ştır. Bu şekilde veritabanının en az üç işleminde birlikte geçen bir öğe setinin sık oldu ğu söylenilebilir: 3 de ğeri eşik de ğeri dir [20].

27

Apriori algoritmasının ilk adımı, ilk seferinde veritabanını tarayarak destek olarak adlandırılan her üye öğesinin ba ğımsız şekilde yer alma sayılarını hesaplamaktır. Şekil 2.8’deki sonuç elde edilir [20].

Öğe Destek

{1} 3

{2} 6

{3} 4

{4} 5

Şekil 2.8 Bir elemanlı ö ğe setlerinin destek adetleri

Bütün tekli öğe setleri en az 3’lük bir deste ğe sahiptir, bu yüzden bu öğe setleri sıktır denilebilir. Şekil 2.9’da görüldü ğü gibi bir sonraki adımda çiftli öğelerin listesi olu şturulmu ştur:

Öğe Destek

{1,2} 3

{1,3} 1

{1,4} 2

{2,3} 3

{2,4} 4

{3,4} 3

Şekil 2.9 İki elemanlı ö ğe setlerinin destek adetleri

28

{1,2}, {2,3}, {2,4} ve {3,4} çiftleri 3’ ün minimum deste ğini kar şılar ve a şar, bu yüzden onlar sık olarak de ğerlendirilebilir. {1,3} ve {1,4} sık olmadı ğı için {1,3} ve {1,4} içeren herhangi bir daha büyük set sık olamaz. Bu şekilde setler çıkarılabilir: Şimdi veritabanında sık üçlüler aranacaktır, ama bu iki çiftlerin birini içeren bütün üçlüler zaten dı şarıda tutulabilir:

Öğe Destek

{2,3,4} 2

Şekil 2.10 Üç elemanlı ö ğe setlerinin destek adetleri

Örnekte sık üçlüler yoktur. Şekil 2.10’da görüldü ğü gibi {2,3,4} minimal e şiğin altındadır ve di ğer üçlüler dı şarıda tutulur çünkü onlar zaten e şiğin altında olan süper set çiftleridir. Böylece veritabanında sık öğe setleri saptanmı ştır ve bazı öğelerin nasıl sayılmadı ğı gösterilmi ştir.

2.4 Graflar

Graflar, kö şeler (edge) ve bu kö şeleri birbirlerine ba ğlayan kenarlardan (edge) olu şan ayrık a ğ yapılarıdır. Bu dairesel kö şeleri birbirine ba ğlayan ba ğlantılara da kenar denilmektedir. Genel olarak bir graf, do ğru ya da e ğriler kenarları gösterecek şekilde ve daireler de kö şeleri gösterecek şekilde şemasal bir form aracılı ğıyla gösterilir. Graflar, Ayrık Matematik’in ara ştırma sahalarından birisidir [21]. Graf kenarları, yönlü kenarlar veya yönsüz kenarlar olabilir.

Graflar karma şık yapılı çe şitli verileri modellemek için çok önemli araçlardır. Ayrıca farklı disiplinlerdeki problemler graflar aracılı ğıyla çözülebilmektedir. Kö şeler, kök (node) veya nokta (point) olarak da adlandırılabilir. Graflar, graf teorisinin temel konusudur [21].

29

Örne ğin, iki ki şi birbirini tanıyorsa ve birbirleriyle sosyal medya üzerinden bir ba ğlantı olu şturuyorlarsa, bu ba ğ yönsüz grafa bir örnek olacaktır. Ancak sosyal medyada bir ünlünün hayran sayfaları üzerinde ba şka ki şilerin üye oldu ğu dü şünülürse bu yapı da yönlü grafa bir örnek olarak belirtilebilir. Çünkü hayranları bir ünlüyü tanıyabilirler, ancak ünlünün bütün hayranlarını tanımasına imkan yoktur.

2.4.1 Graf Tanımı

Herhangi bir graf, G = (V,E) sıralı çiftler seti olarak tanımlanabilir [21]. Bu tanımdaki V harfi kökler ve kö şeler setini ifade etmektedir. E harfi de tüm kenarların iki elemanlı alt kümelerinin setlerini ifade etmektedir. Karı şıklıktan kaçınmak için bu çe şit graflar yönsüz ve basit olarak tanımlanabilir.

Bir kenara ait kö şeler, kenarın ucu (end), uç noktaları (endpoints) ya da kenarın uç kö şeleri (end vertices) olarak adlandırılırlar. Bir kö şe, graf içinde olup da herhangi bir kenara ait olmayabilir.

Bir grafın sırası (order) |V| (kö şelerin sayısı)’dir [21]. Bir grafın boyutu da kenar sayısı olan |E| olur [21]. Bir kö şenin derecesi ona ba ğlanan kenarların sayısıdır. E ğer bir kenar bir kö şeye her iki tarafından da ba ğlıysa, yani bir döngü varsa derece iki kere sayılır. Birbirlerine bir kenar aracılı ğıyla ba ğlı kö şelere biti şiktir denir [21].

2.4.2 Graf Örne ği

Farklı şehirlerdeki banka şubeleri arasında ileti şim ba ğlantılarından olu şan bir a ğ olsun. Şekil 2.11’de görüldü ğü gibi şubenin konumları dairelerle ve ileti şim ba ğlantıları da çizgilerle gösterilmi ştir. Bu a ğ yapısı graf kenarlarının ileti şim ba ğlantılarını gösterdi ği ve graf kö şelerinin de şubelerin veri merkezlerini gösterdi ği bir graf olarak modellenebilir.

30

Şekil 2.11 Bir bilgisayar a ğı

Bu bilgisayar a ğını gösteren grafın her kenarı iki farklı kö şeyi ba ğlamaktadır. Yani, hiçbir kenar herhangi bir kö şeyi yine kendisine ba ğlamamı ştır. Ayrıca iki farklı kenar aynı kö şeleri birbirine ba ğlamamaktadır. Her kenarın iki farklı kö şeyi ba ğladı ğı ve iki farklı kenarın aynı kö şeleri ba ğlamadı ğı bir grafa basit graf denir [22].

Bir bilgisayar a ğı Şekil 2.12’de oldu ğu gibi veri merkezleri arasında çoklu ba ğlantı da içerebilir. Böyle a ğları modellemek için aynı kö şe çiftlerini ba ğlayan birden daha fazla kenarlı graflara ihtiyaç vardır. Aynı kö şeleri ba ğlayan çoklu kenarlara sahip olabilen graflar çoklu graf olarak adlandırılır. {u,v} aynı sırasız kö şe çiftlerine ba ğlı m tane farklı kenar oldu ğunda {u,v}’nin m çe şitlili ğinin bir kenarı oldu ğu söylenebilir [22].

Şekil 2.12 Veri merkezleri arasında çoklu ba ğlantılı bilgisayar a ğı

31

Bazen bir ileti şim ba ğlantısı herhangi bir veri merkezini te şhis amaçlı olarak geri bildirim döngüsüyle kendisiyle ba ğlayabilir. Bu tarz bir a ğ Şekil 2.13’de gösterilmi ştir. Bu a ğı modellemek için bir kö şeyi kendisine ba ğlayan kenarları dahil etmek gerekir. Bu tarz kenarlara döngü denir ve bazen bir kö şede birden daha fazla döngüye sahip olunabilir.

Şekil 2.13 Te şhis ba ğlantılı bir a ğ yapısı

Bundan önceki graflar yönsüz graflardı. Döngüsel graf olmadı ğı sürece yönsüz bir grafta maksimum kenar sayısı n (n-1)/2 olur [21]. Kenarları da yönsüzdüler. Bununla birlikte bir graf modeli in şa etmek için grafın kenarlarına yönler atamak da gerekli olabilir. Örne ğin, bir bilgisayar a ğında bazı ba ğlantılar sadece tek bir yönde işleyebilir (böyle ba ğlantılar tekli çift katlı hatlar olarak isimlendirilir) Bu yapı bazı veri merkezlerine gönderilen veride çok fazla trafi ğin oldu ğu, az trafi ğin oldu ğu ya da zıt yönde giden trafi ğin olmadı ğı durumdur. Böyle bir a ğ Şekil 2.14’te gösterilmi ştir.

32

Şekil 2.14 Çok yönlü ba ğlantılı bir bilgisayar a ğı

Hatlı bir yönlü graf gösterildi ğinde bir kenarın yönünün u’da ba şlayıp v’de bitti ğini gösteren u’dan v’ye bir ok kullanılır. Yönlü bir grafın döngüleri olabilir ve aynı kö şede ba şlayıp biten çoklu yönlü grafı olabilir. Yönlü bir graf ayrıca u ve v kö şelerini her iki yönde ba ğlayan yönlü kenarlara da sahip olabilir, yani bir yönlü graf u’dan v’ye bir kenara sahip oldu ğunda v’den de u’ya bir ya da daha fazla kenara da sahip olabilir. Yönlü bir grafın döngüsü ve çoklu yönlü kenarı yoksa basit yönlü graf olarak isimlendirilir.

Bazı bilgisayar a ğlarında iki şube arasında çoklu ileti şim sunulabilir. Bir kö şeden ikinci bir kö şeye birden fazla yönlü kenara sahip olabilen yönlü graflar böyle a ğları modellemek için kullanılır.

Bazı modellerde di ğerleri yönlüyken kenarları yönsüz olan bir grafa ihtiyaç duyulur. Hem yönlü hem de yönsüz kenarı olan graflara karı şık graf denir [22]. Örne ğin, bir karma şık graf her iki yönde i şleyen ba ğlantıları içeren bir bilgisayar a ğını modellemek için kullanılabilir.

2.4.3 Graf Uygulamaları

Sosyal a ğlarda graflar, insanlar ve insan grupları arasındaki farklı ili şki çe şitlerine dayalı sosyal yapıları modellemek için yo ğun şekilde kullanılır. Bu sosyal yapılar ve onları sunan graflar sosyal a ğlar olarak bilinir. Bu graf modellerinde bireyler ya da

33

organizasyonlar kö şelerle gösterilir. Bireyler ve organizasyonlar arasındaki ili şkiler de kenarlarla gösterilir. Sosyal a ğların çalı şması oldukça aktif disiplinler arası bir alanıdır ve insanlar arasındaki ili şkilerin farklı çe şitleri onları kullanarak incelenir.

İleti şim a ğlarında aygıtları göstermek için kö şeleri kullanarak farklı ileti şim a ğlarını ve ili şki ba ğlantılarının özel bir çe şidini görselle ştirmek için kenarlar modellenebilir.

Bilgi a ğlarında graflar, özel bilgi çe şitlerini ba ğlayan çe şitli a ğları modellemek için kullanılır. Bir graf kullanılarak World Wide Web modellenebilir. Ayrıca farklı dökümanlardaki alıntılar modellenebilir.

İleti şim a ğlarında graflar, farklı çe şitlerdeki ileti şim a ğlarını, yol, hava ve raylı ağların farklı türlerini modellemede kullanılabilir.

2.4.4 Di ğer Graf Çe şitleri

Yönlerinin olup olmamasına göre, aynı kö şeler arasında birden fazla ba ğlantı olup olmamasına göre ve döngülerin olup olmamasına göre çok farklı graf çe şitleri vardır.

Her kenara bir de ğer (a ğırlık) atanmı şsa o grafa a ğırlıklandırılmı ş graf denir [21]. Bu tarz a ğırlıklar probleme ba ğlı olarak örne ğin, ücretler, uzunluklar vb. sayısal de ğerleri gösterebilir.

Düzenli bir graf, her kö şenin aynı sayıda kom şuya sahip oldu ğu graftır [21]. Her kö şenin derecesi ya da de ğerlili ği aynıdır. k derece kö şeli düzenli bir graf, k dereceli düzenli graf ya da k-düzenli grafı olarak adlandırılır.

Her kö şenin birbiriyle ba ğlantısının oldu ğu graf tam graftır [21].

Bir G grafının V kö şe seti sonsuz olabilir. Sonsuz kö şe setli bir graf ya da sonsuz kenarlı bir graf sonsuz graf olarak adlandırılmı ştır. Tam tersi sonlu kö şe setli ve sonsuz kenar setli bir graf da sonlu graf olarak adlandırılmıştır [21].

34

2.5 Graphviz Yazılımı

Graf görselle ştirme; soyut graf ve a ğların diyagramları olarak yapısal bilgiyi sunmanın bir yoludur. Graphviz, açık kaynak graf görselle ştirme yazılımıdır. İlgili programlama dili DOT, basit metinsel formattaki graf tanımlarını okur ve Bitmap, Ölçülebilir Vektör Grafi ği (Scalable Vector Graphic - SVG) ya da PostScript (ps) gibi farklı şekillerde kullanı şlı diyagramlar üretir [23].

Metinsel tanım genellikle dı ş veri kayna ğından otomatik olarak olu şturulur, ayrıca elle de (manually) olu şturulabilir ve düzenlenebilir. Graphviz kullanıcı tanımlı özelliklere göre grafların biçimlendirilmesini ve çizimini sa ğlar. Graphviz’in sa ğladı ğı yararları kullanarak a ğın içindeki herhangi bir kök hakkında hızlıca bilgi elde edilebilir. Bir analist, bu grafları şüpheli a ğ davranı şlarını daha kolay tanımlamak için kullanır. Ayrıca bunlar bir analiz kayna ğı olarak kullanılabilir.

Graphviz’in standart kök/kenar tabanlı grafları olu şturabilmesinde çe şitli avantajları vardır [24]. Öncelikle jpeg gibi standart grafiksel dosya formatlarını içeren çıktılara izin veren esnek bir yapısı vardır. İkinci olarak da Graphviz paketi; kök rengi, kök şekli, kenar rengi ve kenar geni şliği gibi grafların birçok niteli ğini de ğiştirmeye izin verir. Bu nitelikleri kolaylıkla de ğiştirebilmek graflara ekstra bilgi ekleyebilmeyi sa ğlar. Son avantajı da birçok programlama arayüzü otomatik bir şekilde onu kullanabilir. Graphviz graf tasla ğını otomatik bir süreçle olu şturur.

2.5.1 Dot Programlama Dili

Dot hiyerar şik olarak yönlü graflar çizen bir yapıdır. Eğer kenarlarda yönlülük varsa kullanmak için varsayılan olarak bu araç kullanılır. Dot aynı yöndeki kenarları hedefler (üstten a şağıya ya da soldan sa ğa) ve ardından kenar uzunluklarını azaltmaya çalı şır ve kenar kesi şimlerinden kaçınır. Bu yapı, kaynak dosya olarak graf metin dosyalarını okur ve hedef dosya olarak da GIF, PNG, SVG, PDF ya da PostScript olarak grafik formatında dosyalar üretir [25].

35

Dot grafları dört a şamada üretmektedir [25]. Bu a şamaları bilmek dotun i şleyi şini anlamayı kolayla ştıracaktır.

Dot, DOT dilinde yazılmı ş giri şleri i şleyecektir. Bu dil üç çe şitte nesne tanımlar: graflar, kökler ve kenarlar. Üretilen şekiller yönlü graflardan ( digraph ) veya yönsüz graflardan ( graph ) olu şabilir.

Şekil 2.15’te dot dilinde üretilen bir graf örne ği görülmektedir. İlk satır grafın adı ve tipini göstermektedir. Ondan sonraki satırlar kök, kenar ya da alt grafların ili şkisini göstermektedir.

36

Şekil 2.15 Küçük bir graf örne ğinin çizilmesi [25]

37

3. YAZILIM LOGLARI İLE KR İTİK HATA TESP İT S İSTEM İ

Bu bölümde kurumsal bir yazılım şirketinin yazılım hataları analiz edilerek kritiklik tespit sistemi yapılmı ştır. Uygulamaya ba şlamadan önce Şekil 3.1’deki gibi bir işleyi ş planlanmı ştır. Öncelikle ham veri setine öni şleme uygulanarak veri madencili ğine uygun hale getirilmi ştir. Daha sonra veri setine Apriori algoritması uygulanarak sık örüntüler tespit edilmi ştir. Tespit edilen sık örüntüler Graphviz yazılımı sayesinde graf görseli halinde sunulmu ştur.

Ba şla

Ham Veri Seti

Veri Öni şleme (Hata Tipi Belirleme)

Apriori Algoritmasına Uygunluk

Apriori Uygulanması

Graphviz Uygulanması

Görsel Graf Gösterilmesi

Son

Şekil 3.1 Sistemin temel akı ş şeması

38

3.1 Geli ştirme Ortamı ve Kullanılan Araçlar

Uygulamada hataların analizi için C#.NET programlama dili ile bir yazılım geli ştirilmi ştir. Bu yazılım hataları veritabanından toplanıp, birliktelik analizi gerçekle ştirilerek bir Windows servisi aracılı ğı ile sonuçları e-posta olarak gönderilmektedir.

Bunun dı şında hata birlikteliklerini analiz a şamasında da Apriori algoritması ve Graphviz yazılımından faydalanılmı ştır.

3.1.1 ColdFusion Programlama Dili

ColdFusion 1995’te J. J. Allaire tarafından ke şfedilmi ş hızlı bir ticari web uygulama geli ştirim platformudur [26]. (Bu platformla kullanılan programlama dili de ayrıca ColdFusion olarak adlandırılır, tam isim olarak da CFML denilmektedir) ColdFusion bir veritabanına basit HTML sayfaları ba ğlamayı kolayla ştırmak için tasarlanmı ştır. İkinci versiyonla birlikte (1996) bir betik dili olmasının yanısıra IDE de içeren bir platform olmu ştur [26]. 2010 yılından beri ColdFusion’un versiyonları (2005’te Adobe Systems tarafından satın alıınmı ştır) kurumsal entegrasyon ve zengin internet uygulamalarının geli şimi için geli şmi ş özellikler içermektedir.

ColdFusion’un öne çıkan özelliklerinden birisi ColdFusion Markup Language (CFML) betik dilidir,. CFML, amaç ve özellik açısından ASP, JSP ve PHP’nin betik bile şenlerine benzetilir, ama etiket yazımı daha çok HTML’ye benzer. Betik yazımı da JavaScript’e benzer. “ColdFusion” genellikle “CFML” ya da “CFM” ile eşanlamlı kullanılır, ama CFML’in ba şka destekledi ği programlama dilleri ColdFusion ve ColdFusion’un yanı sıra ek CFML uygulama sunucuları vardır, örne ğin sunucu taraflı Actionscript ve CFScript olarak bilinen JavaScript formatında yazılabilen gömülü betikler bunlardandır [26].

39

3.1.2 Windows Servisi

Windows servisleri bilgisayarın arka planında her halükarda çalışan yapılardır. Eri şim ve yetkileri fazladır. Onlar sayesinde sistem performansına, sistemdeki hatalara, a ğ eri şimlerine, veritabanı i şlemlerine hükmedilebilir.

Şekil 3.2 Örnek bir windows servisi olu şturma ekranı

Şekil 3.2’de görüldü ğü gibi C# için yeni bir windows servisi olu şturulurken yeni uygulama olu şturma ekranından windows servisi şablonu seçilerek windows servisi olu şturulmu ştur. İş lemin periyodik olarak günlük çalı şması istendi ği için ilgili uygulamaya standart zamanlayıcıdan farklı bir zamanlayıcı nesnesi eklenmi ştir. Şekil 3.3’te görüldü ğü gibi bu eklenen zamanlayıcıda periyot zamanı 1 gün olarak (86400000 ms) atanmı ştır. Ayrıca uygulamaya bir adet olay logu nesnesi de eklenmi ştir.

40

Şekil 3.3 Zamanlayıcı nesnesine periyot zamanının atanması

Windows servisi uygulaması derlenmi ş ve olu şturulmu ştur. Komut satırından özel komutuyla Windows servisi olarak atanmı ştır. Bu a şamadan sonra bilgisayarın Denetim Masası -> Yönetimsel Araçlar -> Hizmetler alanında bir windows servisi olarak görülebilecektir. Di ğer Windows servislerine benzer şekilde çalı ştırılabilir ve durdurulabilir.

3.1.3 Veritabanı Tasarımı

BUGS tablosunun tasarımı gerçekle ştirilirken ba şka bir tablodan da destek alınmı ştır. Bu tablo EMPLOYEES tablosudur. EMPLOYEES tablosu sistemdeki çalı şanların bilgilerini tutmaktadır. BUGS tablosundaki kayıtlar hatanın yapıldı ğı her işlemi tutmaktadır. Bir çalı şan birden fazla hata yapabilece ği için bir çalı şan RECORD_EMP sütununda birden fazla defa bulunabilir. Bu yüzden EMPLOYEES tablosuyla BUGS tablosu arasında 1:N ili şkisinin bulundu ğu söylenebilir.

41

Şekil 3.4 Veritabanı tasarımının varlık-ili şki şeması

3.1.4 Workcube Hakkında

Workcube, %100 web tabanlı ve ölçeklenebilir bir yazılımdır [27]. Workcube, kendi bünyesinde 4500’ün üzerinde i ş objesi bulundurmaktadır [30]. Workcube’ün geli ştirim çalı şmalarına 2001 yılında ba şlanmı ştır ve Adobe ColdFusion, Java ve W3C standartlarıyla geli ştirilmi ştir [27]. Workcube; Apache, IIS ve HTTP web sunucuları üzerinde çalı şabilmektedir [28]. Ayrıca Workcube’ ün modüler bir yapısı vardır ve genel olarak ERP (Enterprise Resource Planning – Kurumsal Kaynak Planlama), CRM (Customer Relation Management – Mü şteri İli şkileri Yönetimi), PMS (Project Management System – Proje Yönetim Sistemi), PAM (Physical Asset Management – Fiziki Varlık Yönetimi), LMS (Learning Management System – Eğitim Yönetimi Sistemi), CMS (Content Relation Management – İçerik Yönetim

42

Sistemi), B2B (Business to Business – İş letmeden i şletmeye e-ticaret) ve B2C (Business to Consumer – İş letmeden son kullanıcıya e-ticaret) temel ba şlıkları altında bulunan 52 modülden olu şmaktadır [29] . Workcube, %100 tarayıcı tabanlı ses ve video ileti şim sunucusu Flash Communicat ion Server, e-posta ve faks sunucularıyla uyumlu çalı şır [27 ]. Workcube, Windows 2000/2003, Redhat/Suse, Solaris, HP UX i şletim sistemleriyle ve Adobe JRun, Adobe ColdFusion, IBM WebSphere, BEA WebLogic uygulama sunucularıyla çalı şabilmektedir [31] . MS SQL, DB2 ve ORACLE veritabanları Workcube’ü desteklemektedir [31] . Workcube yazılımı yakla şık 20 -25 ki şilik bir ekip tarafından geli ştirilmektedir.

Workcube yazılımı, bir ürünün üretiminden bir e -ticaret sitesi aracılı ğıyla son kullanıcıya ula ştırılması na kadar olan bütün a şamalarını içinde bulundurmaktadır. Ürün, bu ya şam döngüsünü farklı modüller içinde devam ettirmektedir.

Şekil 3.5 Workcube yazılımının ileti şim noktaları

Şekil 3.5’te görüldü ğü gibi Workcube yazılımı, kendisine ba ğlı olan üç grubu temel almaktadır. Bu grubun ilki, kendi çalı şanlarıdır. Bu ki şiler Workcube yazılımını kullanan ilgili i şletmenin çalı şanlarından olu şmaktadır . Workcube yazılımına 43

girmeye sadece bu ki şiler yetkilidir. Şekil 3.6’da görüldü ğü gibi Workcube yazılımına kullanıcı adı ve şifre bilgileriyle girilir.

Şekil 3.6 Workcube yazılımı giri ş ekranı

Sisteme girilince kullanıcı anasayfaya yönlendirilir. Ekranın üst bölümünde iki adet menü bulunmaktadır. Üstteki menü sistemin genel menüsüdür. Alttaki menü ise, kullanıcının o anda Workcube’ün hangi modülünde bulundu ğunu göstermektedir. (Şekil 3.7’de görüldü ğü gibi Anasayfa, Gündem modülünde yer almaktadır.) Workcube yazılımının anasayfası kullanıcı bazlı olarak özelleştirilebilmektedir.

Şekil 3.7 Workcube yazılımı anasayfası

Workcube sisteminde kayıtlı bir di ğer grup, üyelerdir. Üyeler yazılımı kullanan işletmenin etkile şim halinde oldu ğu her türlü üyeleri, mü şterileri, bayileri, son kullanıcıları vb. kapsamaktadır. Üyeler; kurumsal ve bireysel üyeler olarak ikiye

44

ayrılmı ştır. Workcube yazılımı, bünyesinde barındırdı ğı ürünlerin bir e-ticaret sitesi aracılı ğıyla satılabilmesine olanak sa ğlamaktadır. Bu siteler B2B (Business-To- Business) ya da B2C (Business-To-Consumer) olabilmektedir. Bu sayede i şletmeler, kendi ürünlerini internet üzerinden satabilmektedirler.

Kurumsal üyeler, ilgili i şletmenin kurumsal ba ğlantısının oldu ğu tüm i şletme ve şirketleri kapsar. Şekil 3.8’de görüldü ğü gibi kurumsal üyeler Workcube yazılımına ba ğlı B2B portallerine girme ve kurumsal olarak alı şveri ş yapma yetkisine sahip olabilirler.

Şekil 3.8 Workcube yazılımına ba ğlı olarak çalı şan örnek bir B2B sitesi giri ş sayfası

Bireysel üyeler, ba ğımsız üyelerdir. Şekil 3.9’da görüldü ğü gibi bireysel üyeler yazılıma kayıtlı olan son kullanıcılara yönelik e-ticaret sitelerine (B2C) girebilme ve alı şveri ş yapabilme haklarına sahip olabilirler.

45

Şekil 3.9 Workcube yazılımına ba ğlı olarak çalı şan örnek bir B2C sitesi

Şekil 3.10’da görüldü ğü gibi Workcube üzerinden kariyer portaller olu şturularak adayların İnsan Kaynakları modülünde yer alan CV bankasına form bırakabilmeleri mümkündür.

Şekil 3.10 Workcube yazılımına ba ğlı olarak çalı şan örnek bir kariyer portali

Son olarak Şekil 3.11’de görüldü ğü gibi Workcube yazılımına ba ğlı olarak PDA portali olu şturulabilmektedir. Workcube yazılımını kullanan işletmenin çalı şanları PDA portaline giri ş yetkisine sahiptirler. Özellikle satı ş çalı şanları, el terminalleri üzerinden satı ş yaptıklarında bu portali kullanabilmektedirler. Tüm portaller merkezi veritabanına ba ğlı olarak çalı şmaktadır. Bu da Workcube yazılımına tümle şik bir yapı kazandırmaktadır.

46

Şekil 3.11 Workcube yazılımına ba ğlı olarak çalı şan örnek bir PDA portali

3.2 Ham Veri Seti

Bu çalı şmada metal, mobilya ve perakende sektörü için geli ştirilmi ş bir ticari programa ait hata logları kullanılmı ştır. Ticari program Adobe ColdFusion programlama diliyle geli ştirilmi ştir.

Normalde program içindeki herhangi bir sayfada yazılımsal bir hata gerçekle şti ğinde Şekil 3.12’deki hata e-postası sistemde tanımlı belli ki şilere gönderilmektedir. Bu e- posta içinde hatayla ilgili önemli bilgilere yer verilmi ştir. Bu sayede sistemin yazılım geli ştiricileri yazılım hataları hakkında detaylı bilgi elde edebilirler. Hatayı do ğru yorumlayarak hataları ayıklayabilirler ve tamir edebilirler.

Bu çalı şmada bu hata e-postaları bir tabloda depolanmı ştır. Bunun için tabloda tutulması planlanan alanlar belirlenmi ştir. Şekil 3.13’te görüldü ğü gibi bu alanlardan olu şan bir tablo olu şturulmu ştur. Böylece sistem içinde herhangi bir sayfada yazılımsal bir hata olu ştu ğunda sistem normal i şleyi şinde oldu ğu gibi hatanın detaylı bilgilerini e-posta olarak göndermemi ştir. Onun yerine hataları ilgili tabloya yazmı ştır. Ardından bu tablodan yapılan çalı şmada yararlanılmı ştır.

47

Şekil 3.12 Veri madencili ği uygulanan örnek bir hata e-postası

Alan Adı Sayfa Tarayıcı Kaydeden Kaydeden Hata Çe şidi IP Detayı

Error Executing www.deneme.com xxx.yyyy MSIE 192.168.18.1 Ali Veli Database Query

Şekil 3.13 Yazılımsal hataların tutuldu ğu BUGS tablosu

48

Buna göre test sistemi üzerinde kullanıcıların gerçekle ştirdi ği veya denk geldi ği bir yazılım hatası ilgili tablomuza hata hakkında kayıt atılmasını sa ğlamı ştır. Tablonun alanları şu şekilde tanımlanmı ştır:

1. BUG_ID: Hataya ait olan ünik alandır. Birincil anahtardır. (integer)

2. DOMAIN_NAME : Yazılım sistemi bir adet ana adres çubu ğu alan adı ve birden fazla alt adres çubu ğu alan adları şeklinde kurgulanmı ştır. Dolayısıyla hatanın olu ştu ğu alan adı bu kısımda tutulmaktadır. (nvarchar)

3. BUG_DETAIL: Bu alanda hata hakkında bilgi veren birkaç cümlelik bir açıklama yer almaktadır. (nvarchar)

4. PAGE : İlgili sistem ünik sayfa adlarından olu şmaktadır. Dolayısıyla bu alan hatanın oldu ğu sayfanın adres çubu ğu adını verir. (nvarchar)

5. BROWSER_TYPE : İlgili hatanın gerçekle şti ği tarayıcının adı ve sürüm numarası tutulmaktadır. (nvarchar)

6. RECORD_DATE : İlgili hatanın gerçekle şti ği tarih de ğeri tutulmaktadır. (datetime)

7. RECORD_IP : İlgili hatanın gerçekle şti ği bilgisayarın IP adresi tutulmaktadır. (nvarchar)

8. RECORD_EMP : İlgili hatanın şirketin hangi çalı şanı tarafından gerçekle ştirilen bir olay sonucu olu ştu ğu bilgisi tutulmaktadır. (integer)

9. RECORD_PAR : İlgili hatanın şirketin hangi kurumsal üyesi tarafından gerçekle ştirilen bir olay sonucu olu ştu ğu bilgisi tutulmaktadır. (integer)

49

10. RECORD_CON : İlgili hatanın şirketin hangi bireysel üyesi tarafından gerçekle ştirilen bir olay sonucu olu ştu ğu bilgisi tutulmaktadır. (integer)

11. RECORD_PDA : İlgili hatanın şirketin hangi çalı şanı tarafından PDA ortamında gerçekle ştirilen bir olay sonucu olu ştu ğu bilgisi tutulmaktadır. (integer)

3.3 Veri Öni şleme Modülü

Bu bölümde, bir önceki bölümde bir tabloda toplanmı ş verinin ön işlemeye tabi tutularak veri madencili ğine uygun hale getirili şimden bahsedilmi ştir. Bir sonraki adımda uygulanacak Apriori algoritması için veri üzerinde bazı revizeler yapılması gerekmektedir.

Bu revizeler bir anlamda verideki gereksiz bilgilerin temizlenmesinden olu şmaktadır. Aşağıda belirtilen alanlar revizeli haliyle, di ğerleri de var olan haliyle Apriori algoritmasının uygulanaca ğı bir metin dosyasına aktarılır. Bu metin dosyasının verileri tuttu ğu belli bir formatı vardır. Burada da verileri aktarırken bu formata sadık kalınmı ştır.

Revize yapılan alanlar Bölüm 3.3.1 ve Bölüm 3.3.2’de açıklanmı ştır:

3.3.1 Sayfa (PAGE)

Bölüm 3.2’de de belirtildi ği gibi sistem üzerindeki sayfa adları PAGE alanında tutulmu ştur. Ancak bu alanın tabloda tutuldu ğu ilk halinde adres çubu ğu linki olarak uzun şekli yer almaktaydı. Çizelge 3.1’de görüldü ğü gibi her kayıt için aynı olan kısımlar kesilerek sayfa adı sade bir hale getirilmi ştir.

50

Çizelge 3.1 Sayfa alanının sadele ştirmeden önceki ve sonraki hali

SAYFA ADININ TABLODA TUTULDU ĞU HAL İ http://ep.workcube/index.cfm?fuseaction=settings.popup_form_add_process_cat http://ep.workcube/index.cfm?fuseaction=report.detail_inventory_report

REV İZE ED İLM İŞ HAL İ settings.popup_form_add_process_cat report.detail_inventory_report

3.3.2 Hata Tanımı ( BUG_DETAIL )

Bir di ğer alan da BUG_DETAIL alanıdır. Bu alan, hatanın birkaç cümlelik açıklamasıdır. Alanın tablodaki kayıtlarında yer alan tüm hata tanımları soyutlanmı ş ve statik alanlarına göre ünik bir şekle indirgenmi ştir. Bu sayede her hataya ayrı birer tip atanmı ştır. İlgili hatalar ve kar şılık gelen ünik de ğerleri Çizelge 3.2’de görülmektedir.

Çizelge 3.2 Örnek hata tipleri

Hata Tanımı Hata Tipi ID

Could not find the included template … 1 (Dosya bulunamaması ile ilgili hata)

Error Executing Database Query. 2 (SQL sorgusunda ya şanan hata)

51

Element … is undefined in … 3 (Tanımsız de ğişken hatası)

Variable … is undefined in … 4 (Tanımsız de ğişken hatası)

The resource … was not found … 5 (Kaynak bulunamadı hatası)

Context validation error for … 6 (İçerik geçerlilik hatası)

Invalid CFML construct … 7 (Geçersiz CFML yapısı)

Invalid column index … 8 (Geçersiz kolon indeksi)

Invalid list index … 9 (Geçersiz kolon indeksi)

Attribute validation error for … 10 (… için nitelik geçerlilik hatası )

Division by zero.

Division by zero is not allowed … 11 (Sıfıra bölme. Sıfıra bölmeye izin verilmiyor.)

Invalid tag nesting configuration. A query driven queryloop tag is nested inside a queryloop tag that also has a query

52

attribute. This is not allowed. Nesting these tags implies that you want to use grouped processing 12

(Geçersiz etiket biçimlendirmesi. Bir sorgu sürümlü Queryloop etiketi bir sorgu niteli ğine sahip olan queryloop etiketi içinde konumlanmı ştır. Buna izin verilmiyor. Bu etiketleri konumlandırma senin gruplanmı ş i şlemeyi istedi ğini vurguluyor.)

Invalid token … on 13 (Geçersiz bir çerez )

An error occurred when performing … 14 (… i şlemini gerçekle ştirirken hata oldu)

The value … cannot be converted to a number 15 (… de ğeri sayıya çevrilemez)

The tag … requires an end tag.

The tag requires an end tag to 16 nest within …

( etiketinin kapanı ş etiketine ihtiyacı vardır)

Parameter 1 of function IsDefined, which is now … must be a syntactically 17 valid variable name

(IsDefined fonksiyonunun parametresi yazımsal olarak geçerli

bir de ğişken olmalıdır.)

53

function keyword is missing in

FUNCTION declaration.

(function anahtar kelimesi FUNCTION tanımında eksik) 18

Invalid data 19 (Geçersiz veri)

An exception occurred when performing 20 a file operation copy on files

(Dosyalar üzerinde dosya kopyalama yapılırken hataya rastlandı )

NULL is an invalid date or time string. 21 (NULL geçersiz bir tarih veya zaman alanı)

Date value passed to date function

DateAdd is unspecified or invalid. 22 Specify a valid date in

DateAdd function.

(DateAdd fonksiyonuna aktarılan parametre de ğeri geçersiz )

Decryption has failed 23 (Şifre çözme ba şarısızlı ğa u ğradı )

cannot convert the value … to a boolean 24 (De ğer boolean de ğere dönü ştürülemiyor. )

No data was received in the uploaded file 25 ( Yüklenen dosyada herhangi bir kaydı yok.)

54

function has an invalid parameter 26 (Fonksiyonun geçersiz bir parametresi var.)

Cannot perform web service invocation …

The fault returned when invoking the 27 web service

(Web servis ça ğırırken hata olu ştu.)

Web service operation … with parameters 28 (Parametreli … Web servis ça ğırırken hata olu ştu.)

Routines cannot be declared more than once. 29 (Yordamlar birden fazla tanımlanamaz.)

Datasource … could not be found 30 (Veri kayna ğı bulunamadı.)

A CFML variable name cannot end with 31 (CFML de ğişken adı … ile bitemez.)

55

"Kaydeden= AliVeli" "Sayfa=myhome.welcome" "Tarayıcı_Çe şidi=MSIE9" "Alan_Adi=deger"

Her bir alan adı ve de ğeri Farklı alanlar arasında bo şluklar tırnak işareti içinde bırakılır bo şluksuz olarak gösterilir.

Şekil 3.14 Apriori algoritmasının talep etti ği veri formatı

Şekil 3.14, verilerin aktarılmasının ardından metin dosyasının görünümünü göstermektedir.

Sonuç olarak veri öni şleme adımında sistem, “hatalar.txt” adında bir metin dosyası olu şturmu ştur. Her veri, veritabanındaki alan adıyla tırnak i şareti (“”) içinde birle ştirilmi ş ve e şittir (=) i şaretiyle de ayrılmı ş vaziyette olu şturulacaktır. Tırnak işareti içindeki ifadeler içinde bo şluk karakteri bulunmaması gerekmektedir.

3.4 Apriori Algoritmasının Uygulanması

Apriori algoritması ilgili algoritmayı uygulayacak bir çalıştırılabilir dosya (.exe dosyası) kullanılarak uygulanır. Sistem, ilgili Apriori dosyasını parametreleriyle birlikte ça ğırmı ştır. apriori.exe -m3 -s5 -v\";\" -k\"->\" -q0 hatalar.txt -o kural.txt

-m3 : Algoritmadan bulunması istenen birlikteliklerin sayısı

56

-s5 : Algoritmanın bulması gereken minimum birliktelik yüzdesi

Uygulamada yer alan a şağıdaki kod blo ğu Apriori algoritmasının i şletilmesini sa ğlar. Bunun için C# kütüphanesinde yer alan System.Diagnostics kütüphanesinden faydalanılmı ştır. Bu kütüphaneye ba ğlı bir proses olu şturulmu ş ve bu prosesle Apriori algoritmasının çalı ştırılabilir dosyası (executable file) komut satırından çalı ştırılıyor gibi kodun içinden ça ğrılmı ştır ve çalı ştırılmı ştır. Apriori hedef ve kaynak dosyalarında varsayılan konumu C:\Windows\System32 olarak dü şündü ğü için dosyaların yolları belirtilmiştir.

System.Diagnostics. Process process1 = new System.Diagnostics. Process ();

System.Diagnostics. ProcessStartInfo startInfo1 = new System.Diagnostics. ProcessStartInfo (); startInfo1.WindowStyle = System.Diagnostics. ProcessWindowStyle .Hidden; startInfo1.FileName = "apriori.exe" ; startInfo1.Arguments = "-m3 -s20 -v\";\" -k\"->\" -q0 C:/hatalar" + bugun + ".txt -o C:/kural" + bugun + ".txt" ;

Algoritma, hatalar.txt dosyasına uygulandı ğında kural.txt dosyası elde edilmi ştir. Şekil 3.15’te görüldü ğü gibi bu dosyada en çok birlikte geçen 3 örüntünün tüm kayıtlar içinde en az %5’ inde geçenleri bulunmaktadır.

57

Şekil 3.15 Apriori algoritmasının üretti ği ve sık birliktelikleri gösteren kural dosyası

3.5 Graphviz Yazılımının Uygulanması

Graphviz yazılımı, önceki bölümde elde edilen kural dosyasını görselle ştirmeyi sa ğlayacaktır.

İlgili algoritma, bir çalı ştırılabilir dosya (.exe dosyası) kullanılarak uygulanır. Ancak tıpkı Apriori algoritmasında oldu ğu gibi Graphviz yazılımının da uygulanaca ğı dosyanın belli bir formata çevrilmesi gerekmektedir. Bunun için öncelikle kural.txt dosyası içindeki veriler aşağıdaki blo ğun içine dahil edilerek graf_kural.txt dosyası olu şturulur. digraph G {

// kural.txt dosyasından gelen kısım

}

58

Şekil 3.16 Graphviz yazılımı uygulanacak dosya

Şekil 3.16’da görülen graf_kural.txt dosyası hazırlandıktan sonra sistem bu dosyaya a şağıdaki komutu uygulayacaktır. dot -Tpdf graf_kural.txt -o graf.

-Tpdf : Olu şturulacak hedef dosyanın uzantısını belirten parametredir.

Komut çalı ştırıldı ğında sistem, hedef dosyayı belirtilen uzantıda olu ştuacaktır. Bu dosya graf.pdf adında bir pdf dosyası olacaktır. Bu dosya örüntüler arasındaki ili şkiyi Şekil 3.17’de görüldü ğü gibi görselle ştirmektedir.

59

Şekil 3.17 Graphviz yazılımı uygulandı ğında elde edilen graf yapısı

Son a şamada sistem elde edilen bu görseli belirli ki şi ya da ki şilere e-posta yoluyla gönderebilecektir. İlgili görsel, e-postaya ek dosya olarak eklenebilir.

3.6 Uygulama Türleri

Bu çalı şmada iki farklı uygulama tasarlanmı ş ve gerçekle ştirilmi ştir. Bu uygulamalardan ilki “Windows servisi tabanlı hata analizi uygulaması”, di ğeri de “Grafiksel kullanıcı arayüzü tabanlı hata analizi uygulaması”’dır. Windows servisi tabanlı uygulama, çalı ştı ğı bilgisayarın windows servisinin deste ği altında i şlem görmektedir. Bu uygulama periyodik olarak arkaplanda çalı ştı ğı için herhangi bir arayüze sahip de ğildir. Di ğer uygulamada ise uygulamanın ekran arayüzleri bulunmaktadır. Bu uygulamanın işlemesi kullanıcının seçimine ba ğlıdır. Periyodik olarak çalı şma özelli ği bulunmamaktadır.

60

3.6.1 Grafiksel Kullanıcı Arayüzü Tabanlı Hata Analizi Uygulaması

Bu uygulamanın çalı ştırılabilir dosyası (executable file) ça ğrıldı ğında Şekil 3.18’deki pencere açılacaktır. Ekran üzerinde dört adet buton bulunmaktadır. Bu butonlar temel olarak Şekil 3.1’deki i şleyi şle paralel hareket etmektedir. Öncelikle kullanıcıdan sayfada tanımlanması gereken bazı bilgileri girmesi beklenir. Ekranın sa ğ blo ğunda yer alan “Alanlar” çerçevesi içinde hataların hangi alanlarının analiz edilece ği bilgisi seçilir. Örnek olarak hepsi seçilmi ştir.

Şekil 3.18 Ara yüz tabanlı uygulamanın ekran görüntüsü

“Dosyayı Öni şle” butonuna basıldı ğında Bölüm 3.3’de anlatılan işlemler gerçekle ştirilerek ekranın “Tarih” de ğerinde yer alan güne ait hatalar belli bir metin dosyasına atanacaktır. İş lem sorunsuz gerçekle şti ğinde bunu “ İş lem Ba şarıyla Gerçekle şti” uyarısıyla bildirecektir. Sonrasında “Birliktelik Sayısı” alanından çıkarılması gereken kuralların maksimum de ğeri girilmelidir. Bu de ğer “Alanlar” kısmında seçilmi ş alan sayısından fazla olmamalıdır. Ayrıca “Yüzde Oranı” alanından kural dosyasında çıkarılması gereken birlikteliklerin genel verinin minimum yüzde kaçında yer alaca ğı belirtilmelidir.

61

Ardından “Kuralları Olu ştur” butonuna basılır. Sistem kullanıcıdan ilk butonda olu şmu ş hataların dosyasını seçmesini ister. İlgili dosya seçilir. Ekrana i şlemin sorunsuz gerçekle şti ğini bildiren bir uyarı göstermektedir. Bunun dı şında arkaplanda yer alan beyaz çerçeve içerisine de kuralların yer aldı ğı metin dosyasındaki birliktelikleri yansıtacaktır (Şekil 3.19).

Şekil 3.19 Birliktelik kuralları olu şturulduktan sonra ekran görüntüsü

Bu i şlemden sonra kurallar olu şturulmu ş ve birliktelikler çıkarılmı ştır. Artık bu birliktelikler görselle ştirilmelidir. Ekranın alt bölümünde yer alan “Graf Şemasını Çiz” butonuna tıklanır. Bu buton ilgili kuralları görselle ştirerek yeni bir windows formu üzerinde PDF okuyucu aracılı ğıyla Şekil 3.17’deki graf şeklini gösterecektir.

Son olarak bu görsel istenilen ki şiyle payla şılabilecektir. “Kime” kısmında görselin gönderilece ği ki şinin e-posta adresi girilmelidir. Bunun yanısıra “Konu” alanına bir e-posta ba şlı ğı girilmelidir. Bu çerçevede “ePosta Gönder” butonuna basılır. Sistem ilgili ki şiye e-postayı göndererek bunu kullanıcıya bildirir.

E-postanın gönderildi ği ki şi gelen e-postayı açtı ğında Şekil 3.20’deki ekran sayesinde graf görselini elde edebilecektir.

62

Şekil 3.20 E-posta aracılı ğıyla gönderilen ek dosyanın gelen kutusu görünümü

3.6.2 Windows Servisi Tabanlı Hata Analizi Uygulaması

Bu uygulama, daha önceden atanmı ş belli bir tetiklemeye dayanarak çalı ştı ğı için grafiksel kullanıcı arayüzü uygulamasında dört ayrı butonla gerçekle ştirilen fonksiyonları tek çatı altında birle ştirmi ştir. Windows servisi tabanlı bir uygulama oldu ğu için Bölüm 3.1.2’deki i şlemler uygulanarak altyapısı hazırlanmı ştır. Uygulamaya eklenen zamanlayıcı nesnesinin tetiklenme olayına fonksiyon kodları birle ştirilerek eklenmi ştir. Bu sayede windows servisin her tetiklenmesinde tüm işlemler bir arada gerçekle ştirilerek en sonunda ilgili ki şiye e-posta gönderilmi ştir.

Grafiksel kullanıcı arayüzü uygulamasında “Birliktelik Sayısı”, “Yüzde Oranı”, “Kolon Sayısı”, ”E-posta Gönderilecek Ki şi” gibi bazı bilgiler dinamik olarak belirlenebiliyordu. Ancak bu uygulamada bu bilgiler statik olarak tanımlanmı ştır.

Aşağıda, tez kapsamında geli ştirilen windows servisi tabanlı uygulamaya ait kodlardan bir bölüm verilmi ştir. Bu kod blo ğunda öncelikle hangi güne ait logların

63

işlem görece ği belirlenmi ş ve “bugun” de ğişkenine atanmı ştır. Sonrasında log kayıtlarına ait analiz dosyalarının konumlandırılaca ğı dosya yolu belirtilmi ştir. Daha sonra veritabanına gerekli bilgilerle ba ğlanılarak veritabanı sorgusu aracılı ğıyla o günkü hata loglarına eri şilmi ştir. Kod satırlarında daha detaylı açıklamalar yer almaktadır. private void timer1_Elapsed( object sender, System.Timers. ElapsedEventArgs e) { /* 1. blok */ /* SQL'den Günlük Hata Loglarının Çekilmesi, Veri Önişleme Adımları ve hatalar.txt dosyasının oluşturulması */

//int kolon_sayisi; //int kayit_sayisi; object Missing = System.Reflection. Missing .Value; //String bugun = DateTime.Now.Year.ToString() + '-' + DateTime.Now.Month.ToString() + '-' + DateTime.Now.Day.ToString(); /* O günün tarihini (yyy-aa-gg) formatında alan komut */ String bugun = "2013-09-24" ; //int sonraki = DateTime.Now.Day + 1; /* Ertesi günün tarihini (yyy-aa-gg) formatında alan komut */ String yarin = "2013-09-25" ; System.IO. StreamWriter file = new System.IO. StreamWriter ("C:/Users/Administrator/Desktop/Tez/Projeler/PencereHiz meti2/PencereHizmeti2/bin/Debug/hatalar" + bugun + ".txt" ); SqlConnectionStringBuilder Ayarlar = new SqlConnectionStringBuilder (); Ayarlar.DataSource = "192.168.18.2" ; /* Veritabanı sunucusunun IP adresi */ Ayarlar.InitialCatalog = "calisma" ; /* Veritabanının adı */ Ayarlar.UserID = "gokhanacun" ; Ayarlar.Password = "Gn236-"; SqlConnection YeniBaglanti = new SqlConnection (Ayarlar.ConnectionString); /* Veritabanına bağlantı nesnesi oluşturuluyor */ YeniBaglanti.Open(); SqlCommand Uygula = new SqlCommand ("SELECT B.WORKCUBE_NAME, B.PAGE, B.BROWSER_TYPE, B.RECORD_IP, (SELECT E.EMPLOYEE_NAME + ' ' + E.EMPLOYEE_SURNAME FROM workcube_cf.dbo.EMPLOYEES E WHERE E.EMPLOYEE_ID = B.RECORD_EMP) KAYDEDEN, B.BUG_DETAIL FROM BUGS B WHERE (B.BUG_DETAIL <> '' OR B.BUG_DETAIL IS NOT NULL) AND B.PAGE LIKE '%=%' AND B.RECORD_EMP IS NOT NULL AND B.RECORD_DATE < '" + yarin + "' AND B.RECORD_DATE >= '" + bugun + "' ORDER BY B.BUG_ID DESC" , YeniBaglanti); /* Üstteki komutta veritabanından o günkü hata log kayıtları çekiliyor */ SqlDataReader DataOku = Uygula.ExecuteReader(); }

64

4. DENEYSEL SONUÇLAR

Tez çalı şması kapsamında bir örnek te şkil etmesi için hata veritabanındaki hatalardan kayıt tarihi 24.09.2013 olanlar incelenmi ştir. Veritabanında o güne ait 38 tane hata bulunmaktadır. Bu hataların veritabanındaki görünümleri Şekil 4.1’de yer almaktadır.

Tez kapsamında geli ştirilen uygulama %20’den fazla ve en az üçlü geçen birliktelikleri bulmak üzere çalı ştırılmı ştır. Uygulama ilk etapta veritabanından bu 38 kaydı çekmi ştir ve hatalar.txt dosyasını olu şturarak bu 38 kaydı Apriori algoritması için hazır duruma getirmi ştir. Apriori algoritması %20’den fazla ve en az üçlü birliktelikleri kural.txt dosyasına kaydetmi ştir.

Buna göre 1 adet be şli birliktelik, 6 adet dörtlü birliktelik ve 14 adet üçlü birliktelik saptanmı ştır. Daha sonra bu birlikteliklere Bölüm 3.5’te anlatıldı ğı gibi Graphviz yazılımı ile graf çizdirilmi ştir. Bu yazılım nihai olarak ilgili birliktelikleri Şekil 3.17’de oldu ğu gibi görselle ştirmi ştir.

Bu görselden a şağıdaki gibi çıkarımlar yapılabilmektedir:

1- “report.detail_report sayfasında olu şan hatalar mutlaka Chrome29.0 tarayıcısında gerçekle şmi ştir.” 2- “report.detail_report sayfasında ve Chrome29.0 tarayıcısında olan hatalar bazı durumlarda Murat Can Parlar kullanıcısı tarafından gerçekle ştirilmi ştir.” 3- “sales.emptypopup_upd_subscription_contract sayfasında olu şan hatalar MSIE9.0 tarayıcısında gerçekle şmi ştir. Bunlardan büyük çoğunlu ğu 2. Hata tipidir. (Çizelge 4.2, “Error Executing Database Query”)“

65

Şekil 4.1 24.09.2013 tarihinde olu şan hataların veritabanı görünümü

66

Şekil 4.2 24.09.2013 tarihinde olu şan hata birliktelikleri

67

5. DE ĞERLEND İRME VE ÖNER İLER

Bu çalı şmada, hata birliktelikleri tespit edilerek hatalar hakkında çıkarımlarda bulunulmu ştur. Bu çıkarımlar sistem üzerinde olu şan hataların genel çerçevesini sunmaktadır. Bu sayede hataların en çok hangi ko şullarda olu ştu ğu tespit edilebilir ve bu ko şullar düzeltilerek veya iyile ştirilerek hatalar minimize edilebilirler. Böylece, daha stabil bir yazılım sistemi elde etmek mümkün olacaktır.

Proje kapsamında geli ştirilen uygulamanın çalı ştırılması sonucunda graf biçiminde görseller elde edilmi ştir. Bu graf görseli belli bir klasörde hangi güne ait oldu ğunu belirtecek şekilde tarih biçimiyle isimlendirilmi ştir. (örn. graf21032013.pdf, graf22032013.pdf, graf23032013.pdf vb.) Bu sayede, her ne kadar bu görseller ilgili ki şilere e-posta yolula gönderilmi ş olsa da ar şiv amaçlı ve geriye dönük inceleme yapabilmek amacıyla bir klasörde saklanması sa ğlanmı ştır.

Gelecekteki çalı şmalarda graf görsellerinin belli bir klasörde tutulması yerine bir dosya yönetimi sistemi aracılı ğıyla istenilen zamanda istenilen tarihe ait görsel elde edilebilecek şekilde daha geli şmi ş bir ar şiv yapısında saklanması planlanmaktadır. Ayrıca, graf görselini otomatik olarak yorumlayabilecek bir yapı in şa edilmesi planlanmaktadır. Bu yapı, graf görselini yorumlayarak görsel hakkındaki önermeleri otomatik olarak sunabilecektir.

Bu çalı şmadaki analizde sadece firma çalı şanlarının sebep oldu ğu hatalar incelenmi ştir. Gerçek uygulamada, ilgili sistemdeki kurumsal veya bireysel üyelerin de olu şturdukları hatalar loglanabilmektedir. Geli ştirilen yazılımın kapsamı geni şletilerek sistemdeki di ğer birey ve ö ğelerin olu şturdu ğu hatalar da incelenebilir. Bu sayede sisteme ba ğlı çalı şan e-ticaret sitelerinde en çok hangi sayfalarda ne tür hatalara denk gelindi ğine dair çıkarımlarda bulunulabilir. Bu alanlarda u ğra ş verecek ara ştırmacılara hata analizi uygulamasını web tabanlı bir yapıya getirilerek e-ticaret sitelerindeki hataları gerçek zamanlı analiz edebilecek hale dönü ştürmeleri önerilebilir.

68

69

6. KAYNAKLAR

1. http://en.wikipedia.org/wiki/Data_mining, (Eri şim Tarihi: 08.01.2014)

2. Thuraisingham B., “Data Mining for Malicious Code Detection and Security Applications”, Web Intelligence and Intelligent Agent Technologies, 2009. WI-IAT '09. IEEE/WIC/ACM International Joint Conferences on, ISBN : 978-0-7695-3801- 3, Milan, 2009

3. Bora S.P. “Data mining and ware housing”, Electronics Computer Technology (ICECT), 2011 3rd International Conference on, ISBN : 978-1-4244-8678-6, Kanyakumari, 2011

4. http://conceptsfordw.blogspot.com.tr/2009/04/notable-uses-of-data- mining_07.html (Eri şim Tarihi: 09.02.2014)

5. http://en.wikipedia.org/wiki/Software_mining, (Eri şim Tarihi: 08.01.2014)

6. Nagwani N. K., Bhansali A., "A Data Mining Model to Predict Software Bug Complexity Using Bug Estimation and Clustering", 2010 International Conference on Recent Trends in Information, ISBN 13: 978-1-4244-5956-8, Kochi, Kerala , 2010.

7. Breckel A., “Error Mining: Bug Detection Through Comparison with Large Code Databases”, Mining Software Repositories (MSR), 9th IEEE Working Conference on, ISBN : 978-1-4673-1760-3, Zürich, 2012

8. Wijayasekara D., Manic, M., Wright, J.L., McQueen, M., “Mining Bug Databases for Unidentified Software Vulnerabilities”, Human System Interactions (HSI) 5th International Conference on, ISBN : 978-1-4673-4498-2, Perth, WA, 2012

9. Nagwani N. K., Verma S., “Predicting Expert Developers for Newly Reported Bugs Using Frequent Terms Similarities of Bug Attributes”, ICT and Knowledge Engineering (ICT & Knowledge Engineering), 2011 9th International Conference on, ISBN : 978-1-4577-2161-8, Bangkok, 2012

10. Gegick, M., Rotella, P., Tao Xie, “Identifying security bug reports via text mining: An industrial case study”, Mining Software Repositories (MSR), 7th IEEE Working Conference on, ISBN : 978-1-4244-6802-7, Cape Town, 2010

11. Lamkanfi, A., Perez, J., Demeyer, S., “The Eclipse and Mozilla defect tracking dataset: A genuine dataset for mining bug information”, Mining Software Repositories (MSR), 10th IEEE Working Conference on, ISBN : 978-1-4799-0345- 0, San Francisco, CA, 2013

70

12. Nagappan, M., Vouk, M.A., “Abstracting log lines to log event types for mining software system logs”, Mining Software Repositories (MSR), 7th IEEE Working Conference on, ISBN : 978-1-4244-6802-7, Cape Town, 2010

13. Lei-Yue Yao, Jian-Ying Xiong, “The research and implementation of a correlative degree mining algorithm based on IIS logs”, Granular Computing, 2009, GRC '09. IEEE International Conference on, ISBN : 978-1-4244-4830-2, Nanchang, 2009

14. Tantithamthavorn C., Teekavanich R., Ihara A., Matsumoto K., “Mining A change history to quickly identify bug locations : A case study of the Eclipse project”, Software Reliability Engineering Workshops (ISSREW), IEEE International Symposium on, Pasadena, CA, USA, 2013

15. Esichaikul, Vatcharaporn, Guha, S., Niyamosatha, T., “Mining email transaction logs to locate significant messages and users”, Advanced Information Management and Service (IMS), 2010 6th International Conference on, ISBN : 978- 1-4244-8599-4, Seoul, 2010

16. Ngok P., Zhiguo Gong, “Log mining to support web query expansions”, Information and Automation, 2009. ICIA '09. International Conference on, ISBN : 978-1-4244-3607-1, Zhuhai, Macau, 2009

17. Zhen Ming Jiang, Hassan, A.E. ; Flora, P. ; Hamann, G., “Abstracting Execution Logs to Execution Events for Enterprise Applications”, Quality Software,. QSIC '08. The Eighth International Conference on, ISBN : 978-0-7695-3312-4, Oxford, 2008

18. Liu Y., Liu Q., Zheng D., Deng Q., “Application and improvement discussion about Apriori algorithm of association rules mining in cases mining of influenza treated by contemporary famous old Chinese medicine”, Bioinformatics and Biomedicine Workshops (BIBMW), 2012 IEEE International Conference on, ISBN : 978-1-4673-2746-6, Philadelphia, 2012

19. Anand H.S., Vinodchandra S.S., “Applying correlation threshold on Apriori algorithm”, Emerging Trends in Computing, Communication and Nanotechnology (ICE-CCN), 2013 International Conference on, ISBN : 978-1-4673-5037-2, Tirunelveli, 2013

20. http://en.wikipedia.org/wiki/Apriori_algorithm (Eri şim Tarihi: 19.01.2014)

21. http://en.wikipedia.org/wiki/Graph_(mathematics)(Eri şim Tarihi: 13.04.2014)

22. Kenneth H. Rosen, “Discrete Mathematics and its Applications”, http://web.karabuk.edu.tr/hakankutucu/Discrete_Mathematics_and_Its_Applications _7th_Edition_Rosen.pdf ,13.04.2014

71

23. Schneider A., Walter S., Langer J., Heinkel U., “Automatic Visualization of Abstract System Specifications”, Quality Software, 2006. QSIC 2006. Sixth International Conference on, ISBN : 0-7695-2718-3, Pekin, 2006

24. Fox C., Wilson D., “Visualization in Interrogator using Graphviz ”, Information Assurance Workshop, 2006 IEEE, ISBN : 1-4244-0130-5, West Point, NY , 2006

25. Emden R. Gansner, Eleftherios Koutsofios, Stephen North, “Drawing graphs with dot”, 2010

26. http://en.wikipedia.org/wiki/Adobe_ColdFusion (Eri şim Tarihi: 20.01.2014)

27. http://www.workcube.com/workcube-nedir (Eri şim Tarihi: 13.04.2014)

28. http://eng.workcube.com/workcube-robust-enterprise-technology-platform (Eri şim Tarihi: 13.04.2014)

29. http://eng.workcube.com/what-is-workcube (Eri şim Tarihi: 13.04.2014)

30. http://eng.workcube.com/thank-you-for-showing-interest-in-workcube (Eri şim Tarihi: 13.04.2014)

31. http://www.workcube.com/neden-coldfusion (Eri şim Tarihi: 13.04.2014)

.

72

ÖZGEÇMİŞ

Gökhan Acun, 1986 yılında Sinop’da do ğdu. Ö ğrenimlerini sırasıyla Piripa şa İlkö ğretim Okulu, Ka ğıthane Anadolu Lisesi’nde (Ortaokul - Lise) tamamladı. 2004 yılında Trakya Üniversitesi Bilgisayar Mühendisli ği bölümünü kazandı ve 2008 yılında mezun oldu. Bir süre (6 ay) İngiltere’nin Eastbourne şehrinde St. Giles College dil okulunda ingilizce e ğitimi aldı. Nisan 2010 tarihinden bu yana Workcube E-İş Sistemleri şirketinde yazılım geli ştirici pozisyonunda çalı şmaktadır. Eylül 2011 tarihinde Maltepe Üniversitesi Bilgisayar Mühendisli ği Bölümü’nde yüksek lisans eğitimine ba şlamı ştır.

73