Merhaba arkadaşlar bugün sizlere Code Smell kavramından bahsetmek istiyorum. Yazıyı hazırlarken okuduğum, yararlandığım kaynakları her zaman olduğu gibi en altta kaynakça kısmında paylaşacağım. Bu linklerde ki yazılara da göz atmanızda fayda var.
Daha önceki yazılarımı okuduysanız patternlerden, prensiplerden bahsetmiştim. Fakat bu sefer bakış açımızı değiştirelim ve olumsuz olabilecek kullanımlardan bahsedelim. Muhtemelen bir sonraki yazımda da antipatternlerden bahsedeceğim.
Code Smell Nedir?
Basitçe tanımlamak gerekirse “Burası hiç içime sinmedi”, “Burada bir terslik var”, “Burası başımızı ağrıtabilir” dediğimiz kodlar yüksek ihtimalle code smelldir.
Daha profesyonel bir tanımlama gerekirse Martin Fowler’a göre “Kötü kokan kod, genellikle sistemdeki daha derin bir probleme karşılık gelen bir göstergedir”. Burada önemli bir nokta code smell genellikle bug değildir. Yani o an için belki bir hata çıkartmıyordur fakat geliştirme maliyetini arttırıyordur, gelecekte de problem çıkarma ihtimalini yükseltiyordur.
“Smelly Code Can Become Rotten Code” – Patrick Jean
Kötü kokan kodlar zamanla managementı ve geliştirme yapmanızı zorlaştıran çürümüş kodlara dönebilir.
Code Smelle Sebep Olan Bazı Faktörler
“A systematic literature review: Refactoring for disclosing code smells in object oriented software” in yazarları Sharanpreet Kaur ve Satwinder Singh’e göre 7 farklı kategoride code smell sınıflandırılabilir. RefactoringGuru ise 5 farklı sınıfa ayırmıştır. Farklı bir sınıflandırmada ise 3 ana başlık altında incelemiştir.
Sharanpreet Kaur ve Satwinder Singh sınıflandırması : https://www.linkedin.com/pulse/tasar%C4%B1m-ve-kod-kalitesinin-art%C4%B1r%C4%B1lmas%C4%B1-%C3%BCzerine-denemeler-kerem-vari%C5%9F
RefactoringGuru sınıflandırması : https://refactoring.guru/refactoring/smells
https://en.wikipedia.org/wiki/Code_smell
Hepsi ile ilgili detaylı sınıflandırmalara bakmak isterseniz yukarıdaki linkleri kullanabilirsiniz. Ben bazı ortak code smell durumlarını yazmak istiyorum.
- Yanlış yada eksik isimlendirmeler
- Aynı işi yapan tekrarlı kodlar
- Gerek olmayan durumlarda overengineering ile basit çözümler yerine karmaşıklığı arttırma
- Aslında verimliliği çok düşük olan hiç kullanılmayan yada çok az kullanılan kod blokları.
- Çok fazla parametre kullanan sınıflar
- Çok fazla boolean kullanımı ile boolean körlüğünün oluşması. Operasyonları bölmek yerine sürekli true false ile tek yerden yönetme çabası.
- Sürekli başka sınıftan beslenen, başka sınıfın metotlarını çok sık kullanan sınıflar
- Kendi sorumluluğu dışında işlem yapan sınıflar
- Kalıtım aldığı sınıfın özelliklerini kullanmayan reddi miras yapan sınıflar
- Bir değişikliği gerçekleştirmek için kod tabanında çok sayıda küçük sınıfa bu değişikliği uygulamanızın gerekmesi
- Çok uzun review süreleri gerektiriyorsa
- Couplingi arttıran yapılar
- Kod içindeki manuel yazılmış sabitler (1, “Product” gibi)
- Çok fazla gezdirilen data grupları
- Bulunduğu sınıf ile örtüşmeyen bağlamı(cohesion) düşük değişkenler
- Yorumlar
- Çok büyük ve yönetilmesi zor sınıflar
Umarım faydalı olmuştur, kalın sağlıcakla … 😀
Kaynakça
https://refactoring.guru/refactoring/smells
https://www.linkedin.com/pulse/tasar%C4%B1m-ve-kod-kalitesinin-art%C4%B1r%C4%B1lmas%C4%B1-%C3%BCzerine-denemeler-kerem-vari%C5%9F
https://linearb.io/blog/what-is-a-code-smell/
https://en.wikipedia.org/wiki/Code_smell