Nesneye dayalı yazılımlarda tasarım düzeyinde klonların belirlenmesi
Detection of design clones in object-oriented software systems
Yazar: UMUT TEKİN
Danışman: DOÇ. DR. FEZA BUZLUCA
İstanbul Teknik Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı
Derece: Doktora, 2014
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control
Dizin: Bilgisayar yazılımları = Computer softwares ; Nesneye dayalı yazılım = Object oriented software

Özet:
Yazılımlardaki kopya veya belli bir ölçüte göre benzer yapılar yazılım klonları olarak adlandırılmaktadır. Bu tür klonların hızlı ve doğru biçimde belirlenebilmesi, yazılımların tasarımlarının anlaşılması ve iyileştirilmesi (tekrar eden yapıların kütüphanelerde toplanması, sık tekrarlanan tasarım hatlarının düzeltilmesi, lisans ihlallerinin belirlenmesi) konularında yarar sağlamaktadır. Bu tez çalışması kapsamında nesneye dayalı yazılımların tasarımlarındaki klonların belirlenebilmesi için özgün bir yöntem geliştirilmiştir. Geliştirilen yöntem üç temel aşamadan oluşmaktadır. Birinci aşamada, nesneye dayalı yazılımların kodları analiz edilerek kodun soyut sözdizimi ağacı çıkartılmaktadır. Bu ağaç yardımıyla yazılımların üst düzey tasarımlarını temsil eden bir çizge modeli oluşturulmaktadır. Daha sonra, yöntemi hızlandırmak ve aynı yazılım içindeki klonları da bulabilmek amacıyla bir çizge bölmeleme algoritması kullanılarak yazılımın çizge modeli uygun alt çizgelere bölünmektedir. Bölmeleme işlemi sırasında, nesneye dayalı yazılımlar için oldukça önemli ve değiştirilmesi zor olan kalıtım türü ilişkilerin kaybolmaması için bu ilişki tiplerine yüksek ağırlık atanarak, bölmeleme işlemi ağırlıklı biçimde gerçekleştirilmektedir. Üçüncü aşamada ise elde edilen parçalardan bir çizgeler kümesi oluşturulup, bu küme üzerine "sık görünen eş yapılı alt çizge" bulma algoritması uygulanmaktadır. Son aşamada elde edilen sık görünen eş yapılı alt çizgeler, üzerinde çalışılan yazılım veya yazılımların tasarımlarında bulunan tasarım klonlarının modellerini ifade etmektedirler. Çalışma kapsamında açık kaynak kodlu ve endüstriyel yazılımlar üzerinde yapılan deneyler, geliştirilen yöntem ile aynı yazılımın içindeki veya farklı yazılımlar arasındaki tasarım klonlarının belirlenebildiğini göstermiştir. Belirlenen bu tasarım klonlarının, kopyalama sonucu oluşanlarında genellikle kaynak kodları değiştirildiğinden sadece kod karşılaştırması yapan yöntemler ile belirlenmeleri mümkün değildir.

Abstract:
Many software projects contain a significant number of software clones, which are duplicated parts of source code or design models. Identifying these design structures can help designers to understand the high-level architecture of the object-oriented software, discovering reusability possibilities and detecting repeated design flaws that require refactoring. This work proposes a sub-graph mining-based approach for detecting identical design structures in object-oriented systems. The proposed approach contains three main steps. In the first step, the AST (abstract syntax tree) of the source code of the system is analyzed and the design level of abstraction is created. Based on this abstraction, we construct a software model graph, in which classes, interfaces and templates of software constitute the vertices, and the relations between them form the directed edges. According to the importance of the relation type, we assign weight values to the edges of the graph. In the next step, we apply a graph partitioning algorithm to divide the directed and weighted software model graph into small pieces. Finally, in the last step, a sub-graph mining algorithm is applied to discover identical design structures in the generated software model. By analyzing several open-source and industrial projects, we evaluated our approach and discussed the results. The results show that we can detect many design clones within a project or between different projects even if the source codes of the copied structures were changed.