Dead Code ve Forgotten Code

Dead Code ve Forgotten Code

⚰️ Dead Code vs Forgotten Code — Yazılımın Sessiz Tehlikeleri

“Kod yazmak kolay, ama hangi kodun artık gereksiz olduğunu fark etmek ustalık ister.”
— DotNet Senior Developer (C#)


🎯 Giriş

Bir yazılım projesi geliştikçe, büyüdükçe ve evrildikçe bazı kod parçaları artık kullanılmıyor, işlevsizleşiyor veya tamamen unutuluyor.
Bu kodlar genellikle zararsız görünür ama zamanla sistemin hızını, bakım maliyetini ve güvenilirliğini ciddi şekilde etkiler.

İşte bu yazıda, yazılım dünyasının iki gizli düşmanını tanıyacağız:
👉 Dead Code (Ölü Kod) ve Forgotten Code (Unutulmuş Kod)


🧩 1. Dead Code Nedir?

Dead code, projede hiçbir zaman çalışmayan veya referans edilmeyen kod parçalarıdır.
Derlenir, proje içinde yer alır ama asla çağrılmaz.

💻 Örnek:

public class QuizHelper
{
    public int CalculateScore(int correct, int total)
    {
        return (int)((double)correct / total * 100);
    }

    // ⚰️ Dead code - Hiçbir yerden çağrılmıyor
    private void LogInternalState()
    {
        Console.WriteLine("Debug info");
    }
}

Buradaki LogInternalState() fonksiyonu ne testlerde, ne runtime’da hiçbir şekilde kullanılmıyorsa “ölü kod”dur.


🔍 Dead Code’un Ortaya Çıkma Nedenleri

  1. Refactoring sonrası kaldırılmayan metotlar
  2. Kullanımdan kalkmış (deprecated) özellikler
  3. Yanlış dependency injection
  4. Feature flag sistemlerinde kapatılmış kod yolları

⚙️ Dead Code Tespiti

Modern .NET araçları bu konuda oldukça güçlü:

  • 🧠 Roslyn AnalyzersCA1801, S1144 gibi kurallar
  • 🧩 SonarQube → “Unused private methods”, “Dead stores” uyarıları
  • 🧰 ReSharper / Rider → “Method is never used” uyarısı
  • 🧪 Code Coverage Raporları → Hiç test edilmeyen kod yolları genellikle ölüdür

🧹 Dead Code Nasıl Temizlenir?

  1. Önce analiz et, silmeden önce emin ol
  2. git grep veya IDE search ile çağrım var mı bak
  3. Feature flag ise, önce feature tamamen kaldırıldı mı kontrol et
  4. git blame ile son değişiklik tarihini incele

🧩 Kural: “Emin olmadığın kodu silme, ama not et.”
Bir sonraki refactoring’de geri dön.


💀 2. Forgotten Code Nedir?

Forgotten code, projede hala var olan ama artık işlevsel olarak anlamını yitirmiş kodlardır.
Kimi zaman çalışır, kimi zaman da yıllardır kimse dokunmamıştır.

Bu kodlar genellikle legacy feature’lar, geçici çözümler veya deneysel modüllerdir.


💻 Örnek:

if (FeatureFlags.UseLegacyQuizFlow)
{
    RunLegacyQuizFlow(); // ☠️ Forgotten code
}

Eğer UseLegacyQuizFlow feature flag’i 2 yıldır kapalıysa ama hâlâ production’da deploy ediliyorsa, bu “unutulmuş kod”dur.


🔍 Forgotten Code Nasıl Ortaya Çıkar?

  • Uzun süredir dokunulmayan feature flag’ler
  • Artık hiç kullanılmayan endpoint’ler
  • Migration sonrası kaldırılmayan modeller
  • Eski versiyon API’leri
  • “TODO: remove after v2” tarzı notlar

⚠️ Forgotten Code’un Tehlikeleri

EtkiAçıklama
💣 Karmaşıklık artarYeni geliştiriciler hangi kodun aktif olduğunu anlamakta zorlanır
🧩 Bakım zorluğuGereksiz bağımlılıklar, build süresini artırır
🧱 Güvenlik riskiUnutulmuş admin endpoint’leri ciddi açık yaratabilir
🧮 Performans kaybıGereksiz initialization ve konfigürasyon yükü

🔍 Forgotten Code Tespiti

Bu kod türü statik analizle değil, domain bilgisiyle tespit edilir:

  • git log → 2 yıldır değişmemiş dosyaları incele
  • git grep → Feature flag’lerin nerede geçtiğini bul
  • Configuration audit → appsettings veya environment variable karşılaştır
  • Code ownership analizi → Kimse sahiplenmiyorsa muhtemelen unutulmuş

🧹 Forgotten Code Temizleme Stratejisi

  1. Feature cleanup sprint planla
  2. Product owner ile birlikte doğrula: kullanılmıyor mu?
  3. Kaldırmadan önce telemetri ile emin ol
    (örnek: endpoint kullanım oranı %0 mı?)
  4. Kod yorumları yerine deprecated attribute kullan:

    [Obsolete("This flow will be removed in Q4 2025")]
    public void RunLegacyQuizFlow() { }

⚔️ Dead Code vs Forgotten Code — Karşılaştırma Tablosu

ÖzellikDead CodeForgotten Code
TanımHiç çalışmayan veya çağrılmayan kodHâlâ erişilebilir ama artık işe yaramayan kod
Tespit yöntemiStatik analiz, coverageDomain bilgisi, Git geçmişi
EtkisiPerformans ve derleme yüküKarmaşıklık, güvenlik riski
Temizleme şekliOtomatik analiz araçlarıManuel inceleme ve onay
Zorluk seviyesiKolayZor
RiskDüşükYüksek

🧭 Sonuç

Yazılımda “fazla kod” genellikle “fazla risk” anlamına gelir.
Kodun değer üretmediği noktada, onu korumak değil, temizlemek gerekir.

Dead Code sistemini yavaşlatır.
Forgotten Code sistemini tehlikeye sokar.

Temiz bir kod tabanı, sadece okunabilirlik değil, aynı zamanda güvenilirlik ve sürdürülebilirlik demektir.
Unutma: “Silmek de bir mühendislik becerisidir.” 🧹


💡 Ekstra: Önerilen Araçlar

  • 🔍 SonarQube — Ölü kod analizi
  • 🧰 ReSharper / Rider — Unused member tespiti
  • 📊 OpenTelemetry / Application Insights — Endpoint kullanım takibi
  • 🧪 Coverlet / ReportGenerator — Test coverage raporları
  • 🧭 GitLens / SourceGraph — Kod geçmişi ve ownership analizi

admin

Leave a Reply

Your email address will not be published. Required fields are marked *