A learning-based method for detecting defective classes in object-oriented systems
2015
0 views
0 downloads
Advisor: Doç. Dr. Feza Buzluca
Abstract (TR)
Günümüzün rekabetçi ortamında artan müşteri ihtiyaçları geleneksel yazılım geliştirme yöntemlerinin değişmesi gerekliliğini ortaya çıkarmıştır. Müşteri ihtiyaçlarını en iyi şekilde anlamak ve yerine getirmek için yazılım ekibi ile müşteri arasında devamlı bir karşılıklı etkileşim olması gerekmektedir. Müşteri ihtiyaçları projenin ilk safhasında iyi belirlenmeli ve yazılım altyapısı bu ihtiyaçlara yönelik tasarlanmalıdır. Projenin ilerleyen aşamalarında, ihtiyaca yönelik müşteri tarafından gelen yeni istekler veya geri bildirimler yazılımdaki sınıflarda değişiklik yapılmasına sebep olabilmektedir. Mevcut yazılımın değişen isteklere uyum sağlayacak esneklikte tasarlanması, yazılımın ilerleyen sürümlerinde bakım maliyetlerinin düşürülmesinde önemli bir role sahiptir. Yazılımdan beklentiler arttıkça, yazılımlar yapısal olarak karmaşıklaşmakta ve bunun sonucunda yazılım geliştirme ve bakım maliyetleri artmaktadır. Yazılım dünyasında son zamanlarda üzerinde durulan en önemli konulardan biri yazılımda kalitenin sağlanmasıdır. Yazılımda kalite kavramı, yazılım projelerinin maliyetlerini önemli ölçüde iyileştiren unsurların başında gelmektedir. Yazılımın esnekliği, bakımının kolay olması, anlaşılabilirliği, gerçeklenebilirliği, kolay sınanabilir olması ve güvenilirliği gibi kriterler kaliteli bir yazılımdan beklenen özelliklerdir. Ancak, projelerdeki zaman kısıtı, müşteri isteklerinin projenin en başında iyi belirlenmemesi, müşteri taleplerinin sıkça değişmesi, yazılım ekibindeki iletişim eksiklikleri, yazılım geliştiren ekibin nesneye dayalı tasarımın gerekliliklerini bilmemesi ve uygulamaması sonucunda yazılımlardaki tasarım kalitesi düşmektedir. Yazılım projelerinin tasarım kalitesini projenin erken safhalarında değerlendirmek, ilerleyen aşamalarda projenin sağlıklı bir şekilde devam ettirilebilmesini sağlar. Yazılımın mevcut kalitesinin değerlendirilmesinin yanısıra ileriki fazlarda sorun çıkarabilecek bileşenlerin önceden tespit edilmesi ile yazılımdaki kalitenin devamlılığını sağlanır. Kalitenin ölçülebilmesi ve değerlendirilebilmesi için bir kalite modeline ve ölçme metoduna gereksinim vardır. Elde edilen ölçümlerden yazılımın kalitesine ilişkin bir anlam çıkarılabilmesi için metrik-kalite ilişkisi incelenerek sonucun yorumlanması gerekmektedir. Yazılımı ölçmek ve kalitesini değerlendirebilmek için yazılım ölçüm metrikleri kullanılır. Yazılım metrikleri, yazılımların belirli özelliklerine göre kalitelerini belirleyebilmek için sayısal değerler ile ölçülmesidir. Yazılım metrikleri, yazılım çalıştırılmadan yazılımın kaynak kodundan statik bir şekilde elde edilebileceği gibi, yazılımın çalışma anında dinamik bir şekilde de toplanabilir. Bu bağlamda yazılım metrikleri ile yapılan ölçümlerle elde edilen sayısal veriler kullanılarak yazılımın hataya açık, kusurlu bileşenlerini önceden kestirimi mümkündür. Yazılımda çıkacak olası hataların erken tespit edilmesinin iki önemli avantajı bulunmaktadır; (i) yazılımının kusurlu bileşenleri önceden belirlenip yazılım geliştiriciler önceden xxii bilgilendirildiği takdirde, ilgili sınıfların tasarımlarında iyileştirme ve düzeltmeler yapılabilir, (ii) yazılımı test edenler, yazılımın kritik kısımlarının sınanmasını önceliklendirebilir ve bu sayede yazılım sınama maliyetleri ve süresi önemli ölçüde azaltılabilir. Bu şekilde proje geliştirmek ve bakımının sağlanması için harcanan işgücü ve zamandan kazanç sağlanır. Yazılım sınıflarındaki tasarımsal problemler, yazılımın anlaşılabilirliğini, esnekliğini ve tekrar kullanılabilirliğini azaltır. Tasarım kusuru olan yazılım bileşenlerinin analiz edilmesi, değiştirilmesi ve sınanması zordur. Bu sınıfların bakım maliyeti yüksektir ve bakımı zaman alır. Yapısal tasarım kusurları kodun derleme veya çalışma zamanında hata vermezler. Bu tarz sınıflar üzerinde değişiklik yapılmadığı müddetçe yazılım yaşam döngüsü boyunca kendilerini gizleyebilirler ve hata üretmeyebilirler. Yazılımın işlevselliğini değiştirmeden kodda iyileştirme yapılmak suretiyle sınıfların yapısal bozuklukları düzeltilmedikçe, tasarım kusuru olan sınıflar yazılıma yapılacak her değişiklikte yeni hatalar çıkarmaya eğilimli hale gelecektir. Yapılacak çoğu değişiklik bu sınıflarda ve bu sınıfın bağımlılığının yüksek olduğu sınıflarda hata çıkaracak ve yazılımın fonksiyonelliğini düşürecektir. Bu durumda, sınıfın hata sıklığı olarak da adlandırılabilecek, sınıfa yapılan değişiklik başına sınıfta çıkan hata sayısı artar. Hataya eğilimli bu sınıfları yazılımın erken safhalarında tespit etmek hem test, hem de geliştirme maliyetlerini azaltır. Yapısal tasarım kusurları bulunan yazılım sınıfları çoğunlukla; çok karmaşık, yazılımın diğer sınıflarına olan bağımlılığı yüksek, kendi içerisinde uyumu düşük ve kalıtım hiyerarşisindeki uygun olmayan yerde olabilmektedir. Bu özellikler yazılımın iç özellikleri olarak adlandırılmaktadır. Bu iç özelliklere sahip yapısal bozukluklar, yazılımın tasarım ve kod metrikleri kullanılarak belirlenebilmektedir. Ancak, yazılım metriklerinin değişik özelliklerde ve dağılımlarda olması, aldıkları minimum ve maksimum değerlerin farklılaşması sebebiyle, yazılım kusurlarını belirlemek için yazılım metriklerini kullanarak kesin kurallar oluşturmak zordur. Bununla birlikte, yazılımda kalitenin tanımlanabilmesi için farklı metrikler bir arada kullanılarak modeller oluşturulabilir; fakat metrik ağırlıklarına, eşik değerlerine ve rollerine bağlı bir modelleme disiplini oluşturmak kolay değildir. Bu sebeple sınıflardaki kusur tahmini için öğrenme tabanlı yöntemler yaygın bir şekilde kullanılmaktadır. Bu çalışmada, yapısal tasarım kusuru olan hataya eğilimli sınıfları tespit etmek için karar ağacı modelleri oluşturularak öğrenme tabanlı bir yöntem önerilmektedir. Öğrenme tabanlı yöntemlerde, örnek veri ya da geçmiş bilgiler kullanılarak, gelecekteki bir durumun kestirimini yapmak mümkündür. Belirli parametrelere bağlı olarak bir model tanımlanır ve bu model gelecekteki bir veri için öngörü yapmak için kullanılır. En iyi parametre değerleri bulunduğunda yöntemin kestirim başarısı artmaktadır. Karar ağaçları modellemesi eldeki verinin sınıflandırılması için kullanılabilecek en etkili yöntemlerden birisidir. Karar ağacı, kök düğümden, iç düğümlerden, dallardan ve yaprak düğümlerden oluşmaktadır. Her bir iç düğümde ilgili kurala göre bir karar verilir ve kararın sonucuna göre dallardan biri seçilir. Karar denetimi kökte başlar ve yaprak düğümlere gelene kadar özyinelemeli olarak devam eder. Yaprak düğümler karar algoritmasının sonlandığı yerdir ve aynı yapraktaki örnekler aynı sınıfa mensupturlar. Karar ağaçları eğitim kümesinde yer alan niteliklerden yalnızca ihtiyaç duyduklarını kullanır ve boyut indirgeme işlevini kendisi gerçekleştirir. Karar ağacının seçtiği nitelikler, problemin tahmini için en belirleyici özelliklerdir. xxiii Önerilen yöntemde kullanılan tasarım metrikleri ile nesneye dayalı yazılımların tasarım kalitesi nitelikleri ölçümlenerek, kusurlu sınıfların kestirimi yapılmıştır. Öğrenme tabanlı yöntemlerde modelin doğruluğu, kullanılan eğitim kümesi ile doğrudan ilişkilidir. Modelin eğitimi için sınıfların hata sıklığı ve değişim sayıları göz önüne alınarak yenilikçi bir yaklaşımla veri kümesi oluşturulmuştur. Yazılımdaki sınıfların ileriki sürümlerde hata çıkarıp çıkarmayacağının kestirimini yapabilmek için her bir sınıfın belirli bir kurala göre etiketlenmesi gerekmektedir. Modeli eğitmek için kullanılacak eğitim kümesi oluşturulurken, telekom sektöründe kullanımda olan iki olgun yazılım projesinin kaynak kodları ardışıl sürümler boyunca incelenmiştir. Proje A yazılımı sektörde altı yıldır, Proje B ise sektörde dört yıldır kullanılmaktadır. Her bir sürümün hata raporları sürüm notları arasında yer almaktadır. Her projenin sürüm raporunda ilgili sürümde hangi hataların çözümlerinin yapıldığı, müşteri değişiklik isteklerinin neler olduğu ve o sürümde gelen yeni özelliklerle ilgili detaylar yer alır. Çalışma kapsamında kullanılan Proje A ve Proje B yazılımlarının hata raporları yazılımcı ekiple birlikte değerlendirilmiştir. Yapılan gözlemler sonucunda bazı önemli çıkarımlar yapılmıştır: (i) Yapısal kusuru olan sınıfların hemen hemen hepsi testler sırasında hata çıkarmaya meyillidir; buna ek olarak sağlıklı sınıfların bazıları da hata raporlarında yer alabilmektedir, (ii) Kusurlu sınıflar değiştirilmediği sürece hata çıkarmayabilirler; hatalar değişikliklerden sonra ortaya çıkmaktadır, (iii) Sağlıklı sınıflar çok sık değişime uğramazlar; ancak bu sınıflarda değişiklik olduğunda nadiren hata gözlenebilmektedir. Yazılım sınıflarında olan değişiklikler; müşteri kullanım senaryolarındaki değişikliklerle, yeni versiyonla gelen yeni özelliklerin gerçeklenmesi veya önceki sürümlerden kalıtılan hatalara gelen düzeltmelerden etkilenerek tetiklenebilmektedir. Yazılım sınıflarında olan tüm değişiklikler gerek yazılım takımının desteği ile gerekse kod incelemeleri ile değerlendirilerek, yazılımlarda bulunan her bir sınıfın hata sıklığı hesaplanmıştır. Eğitim kümesindeki hata sıklıklarına ve değişim sayılarına göre sınıfları "kusurlu/sağlıklı" olarak etiketlemek için birçok eşik değeri ile denemeler yapılmıştır. Bu denemeler sonucunda sık değişime uğrayan sınıflar ve sık hata çıkaran sınıflar belirlenmiş ve değerleri belirlenen eşik değerlerinin üzerinde kalan sınıflar "kusurlu" olarak etiketlenirken, tersi özellikteki sınıflar "kusursuz" olarak etiketlenmiştir. Ancak, yapılan deneyler esnasında yazılımdaki bazı sınıfların hiç değişmediği ya da çok az değişime uğradığı gözlenmiştir. Bu tarz sınıflar yapısal olarak kusurlu olsalar dahi, yazılım yaşam döngüsü boyunca değişime uğramadıkları için, bu sınıfların doğrudan "sağlıklı" olarak sınıflandırılması gerçekçi bir yaklaşım değildir. Bu sınıfları etiketlemek için eğitim kümesinde "kusurlu" olarak belirlenmiş sınıfların belirleyici özelliği olan sınıf karmaşıklıkları göz önüne alınmıştır. Bu durumda, hiç değişim geçirmeyen ya da az değişen sınıflardan, sınıf karmaşıklığı eğitim kümesindeki "kusurlu" sınıfların sınıf karmaşıklığının belli oranda yukarısında olan sınıflar "kusurlu" olarak etiketlenip, eğitim kümesine dahil edilmiştir. Her iki yazılım projesindeki sınıfların yazılım metrikleri, literatürde yer alan metrik elde etme araçları yardımıyla ile elde edilmiştir. Eğitim kümesinde her bir sınıf için toplanan metrikler ve sınıfın "kusurlu/kusursuz" etiketleri yer almaktadır. Elde edilen verilerle oluşturulan eğitim kümesi kullanılarak öğrenme tabanlı bir model oluşturulmuş ve bu model sistemin önceden görmediği bir versiyonundaki sınıfların hata kestirimini yapmak üzere kullanılmıştır. Öğrenme algoritmasının kusurlu olarak tahmin ettiği sınıflar belli sayıdaki sürümler boyunca gözlemlenmiş ve yöntemin kusurlu sınıfları tahmin başarısı elde edilmiştir. Sonuçlar, düşük kaliteli yazılım sınıflarının sıklıkla değiştiğini ve hataya eğilimli olduklarını göstermektedir. Proje A' dan elde edilen eğitim kümesi oluşturarak eğitilen sistem, aynı projenin ilerleyen safhalarında bir sürümdeki sık hata üreten kusurlu sınıfların %80' ini başarılı bir şekilde belirlemiştir. Aynı eğitim kümesi hiç eğitilmediği Proje B yazılımının herhangi bir sürümündeki sınıflarından kusurlu olanlarının %83' ünü doğru tahmin etmiştir. Geliştirilen öğrenme tabanlı yöntemin belirlediği sınıfların öncelikli olarak sınanması ve tasarımsal olarak kodlarında iyileştirilme yapılması gerekliliği ile ilgili yazılım proje ekibi bilgilendirilmiştir. Bu çalışma kapsamında önerilen öğrenme tabanlı yöntemin sonuçları, telekomünikasyon sektöründeki yazılımlarda sık hata üreten tasarım kusuru olan sınıfları önemli oranda tespit etmektedir. Yazılım ekibinin bile farkında olmadığı bazı sınıfların kusurları tespit edilmiş ve bu sayede projenin ilerleyen sürümlerinde kaliteli yazılım geliştirilerek, yazılım geliştirme süresi ve bakım faaliyetlerinden kazanç sağlanmasına katkıda bulunulmuştur.
Author
Dr. Çağıl Biray
Institution
How to Cite
Çağıl Biray (Yüksek Lisans Tezi). A learning-based method for detecting defective classes in object-oriented systems, 2015, Istanbul Technical University.
Keywords
License
Tüm Hakları Saklıdır
This work is shared under the specified license terms.
More theses from Istanbul Technical University
- Investigation Of Stretching Effect With Mixed Finite Element Formulations For Laminated Beams And Plates(2023)
- Veri madenciliği yöntemlerini kullanarak anemi sınıflandırılmasına yönelik bir uygulama(2015)
- Moebius elektrolizi anot çamurlarından platin grubu metallerin uzaklaştırılması ve geri kazanımı(2015)
- İlçe belediye hizmet binalarında tasarım yaklaşımlarının mekân dizim yöntemi ile incelenmesi(2015)
- Bir II. Alman İmparatorluğu projesi: Kaiser Wilhelm Anıtı'ndan Alman çeşmesine(2015)
- Soil salinity mapping by integrating remote sensing data with ground measurements; a case study in Lower Seyhan Plate, Adana, Turkey(2015)
