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
- Refactoring sonrası kaldırılmayan metotlar
 - Kullanımdan kalkmış (deprecated) özellikler
 - Yanlış dependency injection
 - Feature flag sistemlerinde kapatılmış kod yolları
 
⚙️ Dead Code Tespiti
Modern .NET araçları bu konuda oldukça güçlü:
- 🧠 Roslyn Analyzers → 
CA1801,S1144gibi 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?
- Önce analiz et, silmeden önce emin ol
 git grepveya IDE search ile çağrım var mı bak- Feature flag ise, önce feature tamamen kaldırıldı mı kontrol et
 git blameile 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
| Etki | Açıklama | 
|---|---|
| 💣 Karmaşıklık artar | Yeni geliştiriciler hangi kodun aktif olduğunu anlamakta zorlanır | 
| 🧩 Bakım zorluğu | Gereksiz bağımlılıklar, build süresini artırır | 
| 🧱 Güvenlik riski | Unutulmuş 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ı incelegit 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
- Feature cleanup sprint planla
 - Product owner ile birlikte doğrula: kullanılmıyor mu?
 - Kaldırmadan önce telemetri ile emin ol
(örnek: endpoint kullanım oranı %0 mı?) 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
| Özellik | Dead Code | Forgotten Code | 
|---|---|---|
| Tanım | Hiç çalışmayan veya çağrılmayan kod | Hâlâ erişilebilir ama artık işe yaramayan kod | 
| Tespit yöntemi | Statik analiz, coverage | Domain bilgisi, Git geçmişi | 
| Etkisi | Performans ve derleme yükü | Karmaşıklık, güvenlik riski | 
| Temizleme şekli | Otomatik analiz araçları | Manuel inceleme ve onay | 
| Zorluk seviyesi | Kolay | Zor | 
| Risk | Düşük | Yü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
 





