Kod analizinin amacı nedir ve ne zaman kullanmam gerekir?


26

Visual Studio'nun Kod analizini duydum ama hiç kullanmadım. Okudum MSDN , ama yine Kod analizinin gerçek kullanımını anlamıyorum.

StyleCop ile aynı değil mi?

Bir yerlerde, FxCop da bahsedildi. Kod analizi ile fark nedir?

Her proje için Kod analizi kullanmam gerekir mi? Meslektaşlarım tarafından yapılan kod incelemeleri yetersiz mi?

Yanıtlar:


36

Kod analizi nedir?

Kod analizi (daha önce FxCop), kaynak kodunda bir şeylerin yanlış olduğunu gösterebilecek ortak kalıpları arayan statik bir analiz aracıdır . Örneğin, uygulayan bir sınıfın örneği doğru şekilde atılmazsa, Kod analizi bir uyarı verir:IDisposable

private void DoSomething()
{
    var connection = new SqlConnection(...);
    this.ChangeSomeData(connection);
}

Bu önceki kod parçasının doğru uygulanmasıdır:

private void DoSomething()
{
    using (var connection = new SqlConnection(...))
    {
        this.ChangeSomeData(connection);
    }
}

Herhangi bir statik analiz aracı olarak, Kod analizi, elle bulmak için zahmetli (veya basitçe sıkıcı) kalıplar bulmayı amaçlar. Örneğin, önceki örnekte, bir geliştiricinin kullandığı herhangi bir sınıfın uygulanıp uygulanmadığını kontrol etmesi IDisposable(veya bunu uygulayan tüm .NET Framework sınıflarını hatırlaması) oldukça sıkıcı olabilir .

Hangi projeler nitelikli?

Her ne kadar herhangi bir statik analiz aracı olarak yanlış pozitiflere maruz kalsa da, ticari öneme sahip kod için sıfır uyarı almayı, baskı kullanmadan hedeflemekte fayda vardır . Visual Studio'da Kod analizi derleme zamanında çalışacak şekilde yapılandırılabilir; Proje ayarları aynı zamanda uyarıların hata olarak kabul edilmesi gerektiğini belirtirse, Kod analizi kurallarının ihlali fark edilmeden kalmaz.

Statik analiz orta veya büyük projeler için biraz zaman alabildiğinden, geliştiricilerin makinelerinden TFS yapı sunucusuna taşımak genellikle iyi bir fikirdir. Ön işleme sırasında Kod analizi çalıştırılması iyi bir fikir değildir (StyleCop'tan farklı olarak), ancak uyarılar bulunursa derlemeye devam edebilir ve başarısız olabilir.

Kritik olmayan kod için, Kod analizi Visual Studio'dan veya komut satırından manuel olarak çalıştırılabilir . Kontroller ve uyarılar, gereksinimlerinize uyacak şekilde proje özelliklerinde ayrıntılı olarak incelenebilir. Örneğin, projeniz yerelleştirilmiyorsa , küreselleşme uyarıları kapatılabilir.

StyleCop'ta olduğu gibi, projenin başlangıcından itibaren kod analizinden sıfır uyarının gelip gelmeyeceğine karar vermek önemlidir. Mevcut bir projede tanıtmak çok acı verici olabilir.

StyleCop'tan farklı mı?

Kod analizinin StyleCop ile aynı olmadığını unutmayın . İlk fark, Kod analizinin derlenmiş derlemeyle çalıştığı ve StyleCop kaynağın kendisiyle çalıştığıdır. İkinci (ve en önemli) fark, Kod analizinin bir hataya işaret edebilecek püf noktaları araştırmasıdır.

Kod analizi ayrıca dili iyi bilmeyen yeni başlayanlar için de yararlıdır , çünkü genellikle "Aha!" anlar. Örneğin, CA2105: Dizi alanları yalnızca okunmamalı , birileri salt okunur olarak işaretlenmiş olsa bile, değiştirilemez hale getirmez, çünkü dizideki öğeleri değiştirmeyi yasaklayan herhangi bir şey bulunamaz. StyleCop keşiflere yol açmaz: alanların küçük harfle başladığını veya yerel aramaların öneklenmesi gerektiğini bilmekle ilgili ilginç bir şey yoktur this.

Bazı kurallar hem Kod analizi hem de StyleCop tarafından uygulanmış olsa bile ( CA1707: Tanımlayıcılar alt çizgi vs. SA1310: Alan adları alt çizgi içermemelidir ), bu iki araç tamamlayıcıdır ve sıklıkla yan yana kullanılır.

Zaten kod incelemelerimiz var

Kod incelemelerinin varlığı, Kod analizinden kaçınmak için bir neden değildir. Hem Kod analizi hem de StyleCop, kod incelemeden önce otomatik olarak bir şeyler bulmakta mükemmeldir . Bir kod incelemesini, otomatik olarak bulunabilecek olan saptama stil problemlerini veya sorunlu kalıpları harcamaktan daha kötü bir şey yoktur. İlginç şeyler için kod değerlendirmeleri tutun.

Diğer bir husus, insan hakemlerin mutlaka Kod analizi ile tespit edilen sorunları tespit etmede iyi olmadıklarıdır. Örneğin, bir sınıf uygulamasının bir örneği IDisposablebir yerde yaratılabilir ve daha sonra farklı bir yere atılabilir. Bir gözden geçiricinin onu bulması biraz zaman alacaktır, ancak statik bir analiz aracının keşfetmesi sadece birkaç milisaniyede sürecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.