Ana içeriğe geç

Code Smell

Kod Kokusu

Okunuşu
koud smel
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/code-smell

Kısaca

Code smell (kod kokusu), kod hâlâ çalışsa bile çoğu zaman daha derin bir tasarım sorununa işaret eden yüzeysel bir belirtidir.

Code smell nedir?

Terim Kent Beck tarafından bulundu ve kokuları ve onları gideren refactoring'leri kataloglayan, Martin Fowler'ın 1999'da yayımlanan Refactoring kitabıyla geniş çapta tanındı. Bir koku bir hata değildir: program kusursuz çalışabilir. Kodun anlaşılmasının, değiştirilmesinin ya da test edilmesinin zor olacağına ve daha yakından bakmaya değer olduğuna dair bir ipucudur.

Yaygın kokular arasında çok fazla şey yapan uzun metotlar ve büyük sınıflar; birkaç yerde düzeltilmesi gereken tekrarlanan kod; uzun parametre listeleri; bir metodun kendi verisinden çok başka bir sınıfın verisini kullandığı feature envy; tek bir değişikliğin birçok dosyada düzenleme gerektirdiği shotgun surgery; küçük türler yerine düz string'ler ve sayılar kullanmak olan primitive obsession ve onları açıklayan bir adı olmayan sihirli sayılar (magic number) vardır.

Her koku belirli refactoring'ler önerir: bir fonksiyon çıkarmak, bir parametre nesnesi getirmek, bir metodu verisini kullandığı sınıfa taşımak, sihirli bir sayıyı adlandırılmış bir sabitle değiştirmek. Linter'lar ve SonarQube gibi araçlar bazı kokuları otomatik olarak işaretler; çoğunun fark edilip tartışıldığı yer de kod incelemesidir.

Sık yapılan bir yanlış, her kokunun giderilmesi gerektiğini düşünmektir. Kokular kural değil, buluşsal yöntemlerdir: yukarıdan aşağıya açıkça okunan uzun bir fonksiyon olduğu gibi bırakılsa daha iyi olabilir; tekrarı çok erken kaldırmak da yanlış bir soyutlama yaratabilir. Amaç sinyali fark edip bilinçli karar vermektir; ideal olarak refactoring'den önce testler hazır olmalıdır.

Önemli noktalar

  • Code smell, bir hatanın değil, olası bir tasarım sorununun belirtisidir.
  • Terimi Kent Beck buldu; Fowler'ın Refactoring'i (1999) onu yaygınlaştırdı.
  • Uzun metotlar, tekrar ve uzun parametre listeleri klasik kokulardır.
  • Her koku onu gidermek için belirli refactoring'ler önerir.
  • Kokular buluşsal yöntemlerdir: her birini bağlamında değerlendirin.

Örnek

Bir koku ve onun refactoring'i (JavaScript)javascript
// Smells: magic numbers, duplicated logic, long parameter list
function price(base, isMember, isHoliday, country, couponCode, quantity) {
  let total = base * quantity;
  if (isMember) total = total * 0.9;
  if (isHoliday) total = total * 0.9;
  if (country === "TR") total = total * 1.2;
  if (country === "DE") total = total * 1.19;
  return total;
}

// Refactored: named constants, one option object, a lookup table
const MEMBER_DISCOUNT = 0.9;
const HOLIDAY_DISCOUNT = 0.9;
const VAT = { TR: 1.2, DE: 1.19 };

function priceFor({ base, quantity, member = false, holiday = false, country }) {
  let total = base * quantity;
  if (member) total *= MEMBER_DISCOUNT;
  if (holiday) total *= HOLIDAY_DISCOUNT;
  return total * (VAT[country] ?? 1);
}

Sık sorulan sorular

Code smell bir hata mı?

Hayır. Kokusu olan kod doğru çalışabilir. Koku, kodun bakımının ya da genişletilmesinin zor olabileceğine işaret eder; bu da gelecekteki hataları daha olası kılar.

En yaygın code smell'ler nelerdir?

Uzun metotlar, büyük sınıflar, tekrarlanan kod, uzun parametre listeleri, feature envy, shotgun surgery, primitive obsession, sihirli sayılar, ölü kod ve kodu netleştirmek yerine kafa karıştırıcı kodu açıklayan yorumlar.

Bir code smell nasıl giderilir?

Davranışın değişmediğini doğrulamak için testlerle, küçük adımlarla yapılan, bir fonksiyon çıkarmak, adlandırılmış bir sabit eklemek ya da bir metodu taşımak gibi eşleşen bir refactoring'le.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar