Yüksek LisansAçık Erişim

Nesneye yönelik sistemlerde kusurlu sınıfların öngörülmesi için makine öğrenmesi temelli bir yöntem oluşturulması

Bu tez size mi ait?

Bu kayıt toplu arşivden geldi. Sizinse profilinize bağlayın.

2018
0 görüntülenme
0 i̇ndirme

Özet (TR)

Bugünün gelişmiş yazılım sistemlerinin boyutundaki ve karmaşıklığındaki artış nedeniyle, gerekli tedbirler alınmadığı zamanlarda projelerde yapısal kusuru bulunan sınıfların sayısı da artmaktadır. Yapısal kusuru olan sınıflar, iç uyumları düşük, karmaşıklıkları yüksek, diğer sınıflara bağımlılıkları fazla olan sınıflardır. Kötü tasarlanmış sınıfları değiştirmek, test etmek ve düzeltmek zaman aldığından, bakım maliyetleri de yüksek olur. Bu çalışmada, testlerdeki hataların çoğunu üreten, yapısal kusurları bulunan sınıfları saptamak için bir makine öğrenmesi tabanlı yöntem oluşturma yaklaşımı amaçlandı. Bu amaç ile yazılım geliştiricilere ve test uzmanlarına hata eğilimli sınıfları öngörme, hataların kaynaklarını hakkında bilgi vererek tasarım kusurlarını ortadan kaldırma ve bakım maliyetlerini azaltma konularında yardımcı olmak hedeflendi. Öğrenme tabanlı yöntemlerde, modeli eğitmek için kullanılan veri kümesi, tahmin modelinin doğruluğunu kuvvetle etkiler. Bu nedenle, mevcut yazılım projelerinden toplanan verileri ve farklı metrikleri kullanarak doğru veri setini oluşturmak hedeflendi. Veri kümelerini oluşturmak için yazılımlar belli sayıda sürümler (version) boyunca gözlemlenerek üç farklı gruptan metrik değeri toplanır. Birinci grupta evrimsel (tarihsel) metrikler yer alır. Örneğin refaktör sayısı, revizyon sayısı ve hata düzeltme sayısı gibi metrikler tarihsel metriklerdir. İkinci grupta yazılımın yapısı hakkında bilgi veren kod metrikleri bulunur. Örneğin kod satır sayısı, bağlama (coupling) ve birleşme (cohesion) gibi metrikler kod metrikleridir. Üçüncü grup metrikler ise yazılım geliştiricilerinin etkileşimleri hakkında bilgi içeren mikro etkileşim metrikleridir. Örneğin, bir sınıf üzerinde değişiklik yapan geliştirici sayısı, bir geliştiricinin aynı anda sahip olduğu görev (task) sayısı gibi metriklerdir. İkinci adım, etiketleme adımı modelin performansını etkileyen çok önemli bir adımdır. Bu çalışmada, sınıf üzerinde gerçekleştirilen hata düzeltme sayısının sınıfın geçirdiği reviyon sayısına oranına bakılarak etiketleme yapıldı. Bu oran önceden belirlenmiş olan eşik değerinden yüksek olursa sınıf "Buggy" olarak, küçük olursa "Clean" olarak işaretlenir. Bu yöntemin dayandığı düşünce; yapısal kusurları olan sınıfların herhangi bir değişime (revizyon) uğradıktan sonra hata çıkarma olasılıklıklarının sağlıklı sınıflara göre daha yüksek olduğudur. Bu nedenle etiketleme yapılırken mutlak hata sayısı değil, hata sayısını revizyon sayısına oranı dikkate alınmaktadır. Sık hata çıkaran sınıflar "kusurlu" olarak işlaretlenirken, az hata üreten veya hiç hata üretmeyen sınıflar ise "sağlıklı" olarak işaretlenmektedir. Üçüncüsü, ilgisiz metrikleri kaldırarak en uygun metrik alt kümesini elde etmek için CFS (Korelasyon Temelli Özellik Seçimi) ve PCA (Temel Bileşen Analizi) yöntemleri kullanıldı. Bu özellik seçimi işlemi, modelin anlaşılabilirliğini ve hata algılama performansını artırır. CFS, öznitelikler ile sınıfın etiketinin öngörülebilirliği arasındaki korelasyonu dikkate alarak metrik seçimi yapar. CFS ile seçilen metrikler sınıfların etiketiyle yüksek korelasyona sahipken, metrikler arası korelasyon düşük olur. CFS adımında belirlenen bazı metrikler, PCA yöntemiyle kolayca toplanıp yorumlanabilecek daha anlamlı metriklerle değiştirildi. Metrik sadeleştirmesi yapılırken elde edilmesi kolay ve çıkarım yapılabilecek anlamlı metriklerin seçilmesine dikkat edilmelidir. PCA kullanarak, aynı temel bileşende bulunan metrikler arasından toplanması ve yorumlanması daha kolay olan metrik seçildi. Bunu yaparken proje liderlerine, test uzmanlarına ve yazılım geliştiricilerine sağlıklı bilgi vermek amaçlandı. Dördüncü olarak veri kümeleri dengesizliğini gidermek amacıyla çoğunluk sınıflar üzerinde, projelerin özellikleri de değerlendirilerek sadeleştirme yapıldı. Genellikle, toplanan eğitim verileri, kusurlu olanlardan (azınlık) çok daha fazla sağlıklı sınıflar (çoğunluk) içerir. Bu dengesiz dağılım neticesinde makine öğrenme yöntemlerinin azınlık sınıflarını öğrenme performansları düşük olmaktadır. Veri kümesi dengesizliği giderilerek sınıflandırma performansının arttırılması amaçlanmıştır. Son olarak model oluşturma yaklaşımımızda Rastgele Orman sınıflandırma yöntemi olarak seçildi. Yaklaşımımız çeşitli açık kaynaklı Eclipse alt projelerinden toplanan verileri içeren beş farklı veri kümesini kullanarak değerlendirildi. Veri kümeleri, Eclipse alt projeleri olan Mylyn, Team, Jdt ve birçok küçük projeden oluşan Etc'dir. Ayrıca bu dört veri kümesinin birleşimi olan All veri kümesi vardır. Herbir veri kümesi 81 metrikten oluşmaktadır. Sonuçlar, yaklaşımımızın, kusur eğilimli sınıfları saptamak için öğrenme tabanlı modeller oluşturmada başarılı olduğunu gösteriyor. Önerilen yaklaşımlar, sistemdeki hataya eğilimli sınıfları %70'ine kadar bulabilmektedir. Bununla birlikte, hataya yatkın sınıfların belirlenmesinde hangi metriklerin etkili olduğu incelendi, bunların projelere göre farklılıklar göstediği görüldü. Bu sebeple farklı yazılım sistemleri için farklı modellerin oluşturulması gerektiği sonucuna varıldı, çünkü her proje kendi karakterine sahip olduğu görüldü. Mylyn projesinde, belirli bir görev üzerinde çalışan yazılım geliştiricinin, çalışırken çalışmasının kesilme sıklığını gösteren "NumInterruptions" metriğinin etkili olduğunu görüldü. Bu metriğin belirli bir değerin (<7.65) altında olduğu sınıflarda hata oluşmamıştır. Bu, bir görevle uğraşırken proje çalışanlarının sıklıkla kesintiye uğramamaları gerektiği anlamına gelir. Mylyn projesinde başka bir etkili metrik "NumEditEvent" dir. Sınıflar, bu metrik değeri sıfır olduğunda J48 sınıflandırıcısı tarafından "Clean" olarak etiketlenmiştir. Bir sınıfın değiştirilmemesi durumunda bir hata üretmediğini gösterir. Bu, sınıfların etiketlenmesi ile ilgili fikrimizi desteklemektedir. JDT projesinde "RatioCodeUnderstandingEffort" metriği etkili oldu. Bu metrik, doğrudan sınıfın anlaşılabilirliği ile ilgilidir. Bu metriğin belirli bir değerin (<0.835) altında olduğu sınıflarda hata çıkmamıştır. Düşük karmaşıklığı olan sınıfların daha az hata ürettiği anlamına gelir. Etc projesinde tek başına etkili olan bir metrik bulunmamaktadır. Fakat "TimeSinceLastTask" değeri "NumMultiTask" ve "NumInterruptions" değerleri ile birlikte değerlendirildiğinde; bu metrikler belirli bir değerin altında kaldığı zaman sınıfların "Clean" olduğu görüldü. Yani çalışanlar aynı anda birden fazla iş yapmaya çalıştıklarında "NumMultiTask" değeri ve "TimeSinceLastTask" değeri beraber artacaktır. Bu projede çalışanlara aynı anda çok fazla iş verilmemesi gerekmektedir. Ayrıca yazılım geliştiricilerin çalışması yarıda kesilmemelidir. Team projesiyle ilgili elimizde yeterli veri olmadığı için bu projeyle ilgili yorum yapmamak daha doğru olur. Ama yinede analiz etmemiz gerekirse, bu proje için "RatioCommentToCode" oranı belirli bir değeri (0,21) geçtiği zaman sınıflarda hata çıkmadığı gözükmektedir.

Yazar

Fikret Aktaş

Bu Yayına Nasıl Atıf Yapılır

Fikret Aktaş (Yüksek Lisans Tezi). Nesneye yönelik sistemlerde kusurlu sınıfların öngörülmesi için makine öğrenmesi temelli bir yöntem oluşturulması, 2018, İstanbul Technical University.

Lisans

Tüm Hakları Saklıdır

Bu eser belirtilen lisans koşulları altında paylaşılmaktadır.

İstanbul Technical University tezlerinden daha fazlası