Tez Arşivi

Hakkımızda

Tez aramanızı kolaylaştıracak arama motoru. Yazar, danışman, başlık ve özete göre tezleri arayabilirsiniz.


İstanbul Teknik Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Anabilim Dalı

A learning-based method for detecting defective classes in object-oriented systems

Nesneye dayalı yazılımlarda hatalı sınıfların öğrenme temelli yöntemle belirlenmesi

Teze Git (tez.yok.gov.tr)

Bu tezin tam metni bu sitede bulunmamaktadır. Teze erişmek için tıklayın. Eğer tez bulunamazsa, YÖK Tez Merkezi tarama bölümünde 398101 tez numarasıyla arayabilirsiniz.

Özet:

In today's competitive environment, increasing customer demands have led to changes in the traditional software development methods In order to clearly determine and fulfill customer requirements, continuous customer interaction with the team is important Following requests and feedbacks of customers necessitate modifications in software classes Poorly designed classes are difficult to analyze, modify and test, so that maintenance costs for such classes are very high Code or design problems in software classes reduce understandability, flexibility and reusability of the system Performing maintenance activities on defective components such as adding new features, adapting to the changes, finding bugs, and correcting errors, is hard and consumes a lot of time Unless the design defects are corrected by a refactoring process these error-prone classes will most likely generate new errors after later modifications Therefore, these classes will have a high error frequency (EF), which is defined as the ratio between the number of errors and modifications Predicting defective classes before releasing the software is an important issue for the software quality assurance Early estimate of error-prone classes has two important benefits, firstly it helps testers to focus on faulty modules of software, thus it saves significant proportion of testing time; secondly developers can refactor classes to correct their design defects Software classes that include structural design defects mostly include one or more of the following properties They are complex, highly coupled to other classes, their internal cohesion is low or they have an inappropriate position in the inheritance hierarchy These properties can be revealed using software design and code metrics of the classes However, it is difficult to work with metrics to create certain rules for detecting defects because of their various types, distributions and different minimum/maximum values Also, different metrics should be used together to create a model for quality assessment; but it is difficult to determine the roles, weights and thresholds of metrics in creating such a model The aim of this work is to detect poorly designed classes, in order to have testers focus on them and/or have the developers refactor them Poorly designed classes typically become error-prone when modified In this thesis, a learning-based decision tree model for detecting error-prone classes with structural design defects is proposed In learning-based systems the accuracy of the model strongly depends on the training set The main novelty in the proposed approach is that the EFs and change counts (ChC) of classes to construct a proper data set is considered for the training of the model ...

Özetin tamamını okumak için tez.yok.gov.tr adresine gidin.

Summary:

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 ...

For full summary, please go to tez.yok.gov.tr.