Özet:
Kalıplar tasarımı geliştirmek ve bunun sonucunda sürdürülebilirliği, yeniden kullanılabilirliği ve tersine mühendisliği iyileştirmek için kullanılan önemli tekniklerdir. Nesne yönelimli yazılımlarda yaygın olarak meydana gelen problemlere karşı yeniden kullanılabilir olan genel çözümlere ise tasarım kalıpları denmektedir. Tasarım kalıpları yaygın problemleri çözmek için kullanabilecek biçimselleştirilmiş üstün yöntemler şeklindedir. Karşıt kalıplar ise tekrar eden bir probleme karşı yaygın olarak uygulanan, tasarım kalıbı olarak düşünülen fakat aksine genellikle verimsiz ve riskli çözümlerdir. Bazı çalışmalar göstermiştir ki, karşıt kalıpların kullanılması yazılım sistemlerinin sürdürülebilirliği üzerinde olumsuz etkilere sahiptir.
Kod kokusu (kötü koku) zayıf tasarım ve geliştirmenin ve daha derin bir problemin semptomlarıdır. Bazı durumlarda bu semptomlar yazılım geliştiricilerin önemli yamalar geliştirirken acele etmelerinden ya da yerinde olmayan tercihler vermelerinden kaynaklanır. Kod kokuları kodun anlaşılabilirliğini düşürür, aynı zamanda hata ve değişim meyillidirler. Bu yüzden kod kokularının tespit edilmesi ve gerektiği zaman da düzeltme işlemlerinin planlanıp uygulanması gerekmektedir. Kod kokuları aynı zamanda karşıt kalıpların belirtileri olarak da karşımıza çıkmaktadır. Bir karşıt kalıp, bir ya da daha fazla kod kokusunun bir araya gelmesinden, ya da bazı kod metriklerinin belirli sınırları aşmasından meydana gelebilmektedir.
Bu çalışma, Java nesne yönelimli programlama dilinde yazılmış projeleri analiz ederek, bazı kod kokuları ve metrik değerlerinin hesaplanmasını ve bu değerlerin referans aralıklarda olup olmamasına göre karşıt kalıp içeren sınıfların tespit edilmesini amaçlamaktadır. Karşıt kalıp tespitinde metrik tabanlı analizin yanında kod üzerinde bazı kokuların varlığını gösteren bazı
kurallara dayalı doğrulamalar da yapılmaktadır. Varlığının tespit edilmesi amaçlanan karşıt kalıplar Blob, Swiss Army Knife ve Lava Flow karşıt kalıplarıdır. Bu karşıt kalıpların tespit edilmesi için projenin kaynak kod dosyalarını ve binary dosyalarını girdi olarak alan otomatik bir yaklaşım kullanılmaktadır. Sınıflar kendi içlerinde ve birbirleriyle etkileşimli olarak analiz edilip bazı metrikler çıkarılmaktadır. Baz alınan projelerin hesaplanan metrik değerleri üzerinde aykırı değer filtrelemesi yapıldıktan sonra ortaya çıkan ortalamalar ile referans değerler oluşmaktadır. Bu referans değerlerin dışında olan sınıflar potansiyel karşıt kalıp olarak tespit edilmektedir. Apache’nin 3 projesi ve büyük bir havayolu şirketinin 3 projesi referans projeler olarak analiz edilmiş ve filtrelenmiş ortalama değerleri baz alınmıştır. Ayrıca incelenen projenin filtrelenmiş ortalama değerleri ve yaygın olarak bilinen bazı metriklerin kabul edilen sınır değerleri de göz önünde bulundurulmuştur. Karşıt kalıp olarak veya normal olarak işaretlenen sınıflar kontrol edilerek geliştirilen yazılımın ürettiği sonuçların doğruluğu hesaplanmaya çalışılmıştır.