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 sonraki kod gibi bariz durumları tespit edebilir. Daha karmaşık durumlar için, testler sırasında kod kapsama araçlarını kullanın. Tüm test çalıştırmalarında sıfır kapsama gösteren kodlara ulaşılamıyor olabilir. Bazı kodlara ulaşılabilse de sadece test edilmemiş olabileceğinden, her durumu manuel olarak gözden geçirin.

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

Try bloğundaki return ifadesinden sonra, ancak finally ifadesinden önce yer alan kodlara ulaşılamaz. Bununla birlikte, finally blokları return ifadelerinden sonra bile her zaman yürütülür. Sık yapılan hata: Önemli temizleme işlemlerini, aslında çalışacağı yer olan finally bloğu yerine, try bloğundaki return ifadesinden sonra yerleştirmek.

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

Hayır, çünkü bu kod asla çalıştırılmaz. Ancak, hata vermeden tanımlanmamış değişkenlere başvurabilir veya var olmayan işlevleri çağırabilir; bu da durumu daha da sinsi hale getirir. Bu hatalı kod, asla çalıştırılmadığı için tüm testleri geçer, ancak kod tabanını okuyan herkesi yanıltır.

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

Etkinleştirilmemiş özellik bayraklarının ardındaki kod, mevcut ortamınızda devre dışı bırakılmış olsa bile çalışma zamanında erişilebilir durumdadır. Gerçek anlamda erişilemez kodun ise kontrol akışı nedeniyle yapısal olarak yürütülmesi imkânsızdır. Özellik bayrağıyla işaretlenmiş kod koşullu olarak erişilebilir durumdadır ve özellik tamamen kaldırılana kadar kalmalıdır.

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

Evet, ama bu farklı bir ölü kod kategorisidir. Ulaşılamayan kod, kontrol akışı nedeniyle yapısal olarak yürütülmesi imkânsız olan koddur. Kullanılmayan işlevlere ise ulaşılabilir, ancak bunlar hiçbir zaman çağrılmaz. Her ikisi de kaldırılmalıdır, ancak farklı tespit stratejileri gerektirir. Kullanılmayan kodun tespiti, programın tamamının analizini gerektirirken, ulaşılamayan kodun tespiti işlev düzeyinde gerçekleştirilir.

Ş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.