Was ist der Zweck der Code-Analyse und wann muss ich sie verwenden?

26

Ich habe von der Code-Analyse von Visual Studio gehört, aber noch nie eine verwendet. Ich habe MSDN gelesen , verstehe aber immer noch nicht die tatsächliche Verwendung der Codeanalyse.

Ist es nicht dasselbe wie StyleCop?

Irgendwo wurde auch FxCop erwähnt. Was ist der Unterschied zur Code-Analyse?

Muss ich die Code-Analyse für jedes Projekt verwenden? Sind die von meinen Kollegen durchgeführten Codeüberprüfungen unzureichend?

Arseni Mourzenko
quelle

Antworten:

36

Was ist Code-Analyse?

Die Code-Analyse (früher FxCop) ist ein statisches Analyse- Tool, das nach allgemeinen Mustern sucht , die möglicherweise darauf hinweisen, dass im Quellcode etwas nicht stimmt. Wenn beispielsweise eine Instanz einer Klasse, die implementiert IDisposablewird, nicht ordnungsgemäß entsorgt wird, gibt die Codeanalyse eine Warnung aus:

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

Dies ist die korrekte Implementierung des vorherigen Codeteils:

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

Wie jedes statische Analysewerkzeug soll die Code-Analyse mühsam (oder einfach langweilig) zu findende Muster manuell finden. Beispielsweise kann es im vorherigen Beispiel für einen Entwickler ziemlich langweilig sein, zu überprüfen, ob eine von ihm verwendete Klasse implementiert ist IDisposable(oder sich an alle .NET Framework-Klassen zu erinnern, die sie implementieren).

Welche Projekte qualifizieren sich?

Obwohl es wie alle statischen Analysewerkzeuge zu Fehlalarmen kommt, ist es in der Regel von Vorteil, für geschäftskritischen Code Null-Warnungen festzulegen, ohne Unterdrückungen zu verwenden . In Visual Studio kann die Codeanalyse so konfiguriert werden, dass sie zur Kompilierungszeit ausgeführt wird. Wenn in den Projekteinstellungen auch festgelegt ist, dass Warnungen als Fehler behandelt werden sollen, bleiben Verstöße gegen die Regeln für die Codeanalyse nicht unbemerkt.

Da die statische Analyse bei mittleren oder großen Projekten einige Zeit in Anspruch nehmen kann, ist es häufig eine gute Idee, sie von den Maschinen des Entwicklers auf den TFS-Build-Server zu verschieben. Während das Ausführen der Code-Analyse während des Pre-Commits keine gute Idee ist (im Gegensatz zu StyleCop), kann es dennoch beim Erstellen ausgeführt werden und fehlschlagen, wenn Warnungen gefunden werden.

Für nicht geschäftskritischen Code kann die Codeanalyse manuell in Visual Studio oder über die Befehlszeile ausgeführt werden. Die Überprüfungen und Warnungen können in den Projekteigenschaften genau auf Ihre Anforderungen abgestimmt werden. Beispielsweise können Globalisierungswarnungen deaktiviert werden, wenn Ihr Projekt nicht lokalisiert werden soll.

Wie bei StyleCop ist es wichtig zu entscheiden, ob das Projekt zu Beginn des Projekts null Warnungen aus der Codeanalyse enthält. Die Einführung in ein bestehendes Projekt kann zu schmerzhaft sein.

Unterscheidet es sich von StyleCop?

Beachten Sie, dass die Code-Analyse nicht mit StyleCop identisch ist . Der erste Unterschied besteht darin, dass die Codeanalyse mit der kompilierten Assembly funktioniert, während StyleCop mit der Quelle selbst arbeitet. Der zweite (und wichtigste) Unterschied besteht darin, dass die Codeanalyse nach Mustern sucht, die auf einen Fehler hinweisen, während StyleCop lediglich Stilregeln erzwingt - eine einfache Konvention, die von Ihrem Team verwendet wird.

Die Code-Analyse ist auch besonders nützlich für Anfänger, die die Sprache nicht sehr gut kennen , da sie oft zu "Aha!" Momente. Beispiel: CA2105: Array-Felder sollten nicht schreibgeschützt sein. Dies kann dazu führen, dass jemand feststellt, dass ein Array selbst dann nicht unveränderlich ist, wenn es als schreibgeschützt markiert ist, da nichts verbietet, die Elemente innerhalb des Arrays zu ändern. StyleCop führt nicht zu Entdeckungen: Es ist nichts Interessantes zu wissen, dass Felder mit einem Kleinbuchstaben beginnen oder dass Ortsgesprächen ein Präfix vorangestellt werden sollte this.

Auch wenn einige Regeln sowohl von Codeanalyse und StyleCop erzwungen werden (wie CA1707: Identifikatoren sollten keine Unterstrichen vs. SA1310: Feldnamen nicht Strich enthalten ), die beiden Werkzeuge komplementär sind und oft nebeneinander verwendet.

Wir haben bereits Code-Reviews

Das Vorhandensein von Codeüberprüfungen ist kein Grund, eine Code-Analyse zu vermeiden. Sowohl die Code-Analyse als auch StyleCop eignen sich hervorragend, um Dinge vor einer Code-Überprüfung automatisch zu finden . Es gibt nichts Schlimmeres, als eine Codeüberprüfung durchzuführen, um Stilprobleme oder problematische Muster zu identifizieren, die automatisch hätten gefunden werden können. Bewahren Sie Code-Reviews für interessante Dinge auf.

Ein weiterer Aspekt ist, dass menschliche Gutachter Probleme, die bei der Code-Analyse festgestellt wurden, nicht unbedingt gut erkennen können. Beispielsweise kann eine Instanz einer Klassenimplementierung IDisposablean einem Ort erstellt und dann an einem anderen Ort angeordnet werden. Es wird einige Zeit dauern, bis ein Prüfer es findet, während es nur wenige Millisekunden dauert, bis ein statisches Analysetool es erkennt.

Arseni Mourzenko
quelle