Aikido

Ulaşılamayan ölü kod nasıl tespit edilir ve kaldırılır?

Okunabilirlik

Kural
Kaldır erişilemeyen ölü kod
Ulaşılamayan kod karışık kafa karıştırıcıdır, 
test edilemez, ve olmamalıdır kaldırılmalıdır kaldırılmalıdır.

Desteklenen diller: 45+

Giriş

Ulaşılamayan kod, kod tabanınızda mantık hatası olduğunu gösterir. Aşağıdaki koddan sonra gelen return veya fırlatmak Yürütülmek üzere yazılmış ancak hiçbir zaman çalışmayan ifadeler vardır. Her zaman yanlış olan koşullar, hiçbir zaman tetiklenmeyen doğrulama veya hata işleme işlemlerini gizler. Kontrol akışı nedeniyle mantığın asla ulaşamadığı dallar, yürütülemeyen işlevler içerir. Ulaşılamayan kod bulduğunuzda, kodunuzun amaçlandığı şekilde çalışmadığı bir hata bulmuş olursunuz.

Neden önemli?

Güvenlik açıkları: Ulaşılamayan güvenlik kontrolleri uygulamanızı korumaz. Kimlik doğrulama, yetki verme veya girdi doğrulama işlemleri bir return Açıklamanıza göre, kodunuz güvenli görünüyor ama aslında değil. Saldırganlar, güvenlik önlemleri varmış gibi görünen ancak aslında bu önlemleri atlayan işlevlerden yararlanabilir. Kod incelemesi sırasında bu güvenlik açıkları gözden kaçabilir; çünkü güvenlik mantığı kod tabanında mevcut olsa da hiçbir zaman çalıştırılmamaktadır.

Üretim ortamındaki mantık hataları: Ölü kod, fonksiyonunuzun düşündüğünüz mantığı uygulamadığı anlamına gelir. Hiç çalıştırılmayan doğrulama işlemleri, geçersiz verilerin geçmesine izin verir. Ulaşılamayan hata işleme, hataların yakalanmadan yayılmasına neden olur. Atlanan iş kuralları, hatalı sonuçlara yol açar. Kod doğru görünse de amaçlandığından farklı davranır.Test eksiklikleri: Ulaşılamayan kod test edilemez. Kritik kodlara ulaşılamamasına rağmen test paketiniz başarılı çıkıyorsa, bu, söz konusu yolları kapsayan testlerinizin olmadığı anlamına gelir. Ulaşılamayan kod, önemli mantığın mevcut olduğu ancak çalışıp çalışmadığını doğrulayan testlerin bulunmadığı test kapsamındaki boşlukları ortaya çıkarır.

Paket boyutuna etkisi: Ulaşılamayan kod, JavaScript paketinizde gereksiz yük olarak kullanıcılara yine de gönderilir. Kullanıcılar, hiçbir zaman çalıştırılmayacak kodu indirip çözümler; ancak bu durum, gereksiz kodun işaret ettiği mantık hatalarına kıyasla ikincil öneme sahiptir.

Kod örnekleri

❌ Uygun değil:

function transferFunds(fromAccount, toAccount, amount) {
    if (!fromAccount || !toAccount) {
        return { success: false, error: 'Invalid accounts' };
    }

    if (amount <= 0) {
        return { success: false, error: 'Invalid amount' };
        logSuspiciousActivity(fromAccount, amount);
    }

    const balance = getBalance(fromAccount);
    if (balance >= amount) {
        deductFunds(fromAccount, amount);
        addFunds(toAccount, amount);
        return { success: true };
    }

    return { success: false, error: 'Insufficient funds' };

    // Check for fraud patterns
    if (isHighRiskTransaction(fromAccount, toAccount, amount)) {
        notifyFraudTeam(fromAccount, toAccount, amount);
        return { success: false, error: 'Transaction blocked' };
    }
}

Neden yanlış: İşlev, bu mantığa ulaşmadan geri döndüğü için dolandırıcılık tespit mantığı hiçbir zaman çalışmaz. Tutar kontrolünden sonra gerçekleştirilmesi gereken şüpheli faaliyet kaydı da hiçbir zaman yürütülmez. Bu işlev, güvenlik önlemlerine sahip gibi görünse de aslında tüm transferleri dolandırıcılık kontrolü yapmadan işler.

✅ Uygunluk:

function transferFunds(fromAccount, toAccount, amount) {
    if (!fromAccount || !toAccount) {
        return { success: false, error: 'Invalid accounts' };
    }

    if (amount <= 0) {
        logSuspiciousActivity(fromAccount, amount);
        return { success: false, error: 'Invalid amount' };
    }

    if (isHighRiskTransaction(fromAccount, toAccount, amount)) {
        notifyFraudTeam(fromAccount, toAccount, amount);
        return { success: false, error: 'Transaction blocked' };
    }

    const balance = getBalance(fromAccount);
    if (balance >= amount) {
        deductFunds(fromAccount, amount);
        addFunds(toAccount, amount);
        return { success: true };
    }

    return { success: false, error: 'Insufficient funds' };
}

Bunun önemi: Tüm güvenlik kontrolleri, transfer işlemi gerçekleştirilmeden önce uygulanır. Her işlemde dolandırıcılık tespiti yapılır. Şüpheli faaliyetler kayıt altına alınır. Bu işlev, sahip olduğu görünen güvenlik mantığını uygular.

Sonuç

Ulaşılamayan kod, amaçlanan işlevselliğin hiçbir zaman yürütülmediği mantık hatalarına işaret eder. CI boru hattınızdaki statik analiz araçlarıyla bunu tespit edin ve bunu sadece kod temizliği olarak değil, kritik bir sorun olarak ele alın. Ulaşılamayan kod keşfettiğinizde, bunun neden var olduğunu ve hangi mantığın çalışması gerekirken çalışmadığını araştırın.

Sık Sorulan Sorular

Sorularınız mı var?

Büyük kod tabanlarında erişilemeyen kodları nasıl tespit edebilirim?

Statik analiz araçları, return veya throw deyimlerinden sonra gelen kod gibi bariz durumları tespit eder. Karmaşık durumlarda ise testler sırasında kod kapsama araçlarını kullanın. Kapsamlı test takımlarında sıfır kapsama gösteren kodlara muhtemelen ulaşılamamaktadır; ancak bu kodlar sadece test edilmemiş olabilir, bu nedenle manuel olarak doğrulamanız gerekir.

Peki ya try-catch bloklarındaki erken dönüşlerden sonraki kod ne olacak?

Try bloğundaki return ifadesinden sonra, ancak finally bloğundan önce yer alan kodlara ulaşılamaz. Finally bloğu, return ifadeleri sonrasında bile her zaman yürütülür. Sık karşılaşılan bir hata, temizleme kodunu try bloğundaki return ifadesinden sonra yerleştirmek yerine, aslında çalışacağı yer olan finally bloğuna yerleştirmemektir.

Ulaşılamayan kod, çalışma zamanı hatalarına neden olabilir mi?

"Ulaşılamayan kod" hatanın ta kendisidir. Bu, çalışması gereken kritik mantığın yürütülemediği anlamına gelir. Ulaşılamayan kodunuzda doğrulama, güvenlik kontrolleri veya hata işleme varsa, istisna atmasa bile fonksiyonunuz hatalıdır. Hata, ulaşılmayan kodun sistemi çökertmesi değil, amaçlanan işlevselliğin hiçbir zaman çalışmamasıdır.

Peki ya özellik bayrakları ve koşullu derleme?

Özellik bayraklarıyla devre dışı bırakılmış kodlar, ortamınızda devre dışı bırakılmış olsalar bile çalışma zamanında hâlâ erişilebilir durumdadır. Gerçek anlamda erişilemez kodların ise kontrol akışı nedeniyle yapısal olarak yürütülmesi imkânsızdır. Özellik bayrağıyla işaretlenmiş kodlara ise koşullu olarak erişilebilir ve bu kodlar, özelliği tamamen kaldırana kadar kalmalıdır.

Kullanılmayan işlevleri ve içe aktarmaları kaldırmalı mıyım?

Evet, ama bu farklı bir sorun. Ulaşılamayan kod, kontrol akışı nedeniyle yapısal olarak kendi fonksiyonu içinde çalıştırılamaz. Kullanılmayan fonksiyonlar ise çağrılabilir, ancak hiçbir zaman çağrılmaz. Her ikisi de kaynak israfına yol açar, ancak farklı tespit stratejileri gerektirir. Ulaşılamayan kod tespiti fonksiyon düzeyinde gerçekleştirilirken, kullanılmayan kod tespiti ise programın tamamının analiz edilmesini gerektirir.

Şimdi güvenliğinizi sağlayın

Kodunuzu, bulutunuzu ve çalışma zamanınızı tek bir merkezi sistemde güvenceye alın.
Güvenlik açıklarını otomatik olarak hızla bulun ve düzeltin.

Kredi kartı gerekmez | Tarama sonuçları 32 saniyede.