2009-11-10 6 views
5

Gibt es irgendein statisches Quellcode-Analyse-Tool, das dabei helfen kann, nicht erreichbaren/nicht verwendeten Code in C# -Programmen zu finden?Open-Source-Tool zum Ermitteln nicht erreichbaren/unbenutzten C# -Codes

+0

Äh, Visual Studio gibt Warnungen über nicht erreichbaren oder nicht verwendeten Code ... – Joren

+6

Nur nicht verwendete Segmente von Funktionen, und das wird vom Compiler behandelt, nicht VS. Ich habe das Gefühl, dass das OP von völlig unbenutzten/nicht aufgerufenen Funktionen spricht, die vom Compiler nicht behandelt werden. –

+2

@ ApoY2k unerreichbar ja. Nehmen wir an, Sie deklarieren eine Methode, rufen sie aber nie auf. AFAIK wird nicht unterstützt. – ParmesanCodice

Antwort

5

FxCop, das in höhere Editionen von Visual Studio integriert ist, warnt vor nicht verwendeten privaten oder internen Mitgliedern. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie "Codeanalyse ausführen". In Verbindung mit "nicht erreichbaren Codesegmenten", die vom Compiler identifiziert werden, wie andere bemerkt haben, sollte dies den verbleibenden unbenutzten Code erfassen. FxCop

(Note wird nicht warnen ungenutzter öffentlichen oder geschützten Mitglieder, da diese Teil einer API für die Verwendung durch externe Anrufer bestimmt sein könnte. Auch FxCop in allen Editionen von Visual Studio nicht verfügbar ist, obwohl ältere Versionen sind zum Download verfügbar.)

+0

FxCop ist separat von VS erhältlich, soweit ich weiß (ich weiß, dass es separat erhältlich ist, es ist der freie Teil, über den ich mir nicht sicher bin). –

+0

Ja, getrennt und frei. – Cheeso

1

Das beste, was ich vorschlagen kann, ist ein Code-Coverage-Tool auf der Haupt-Executable statt einer Test-Assembly, dann die Anwendung durch ihre Schritte ... Eine statische Analyse von Code wäre NP schwer in etwas esoterischer zu tun Fälle.

+2

Es ist viel schlimmer als NP-HARD. Eine exakte statische Analyse der Codeabdeckung ist praktisch * per definitionem * das Halteproblem. Offensichtlich entspricht die Frage "Führt diese Codezeile jemals aus" zu "Hält dieses Programm jemals an?" (Ersetzen Sie einfach jeden Halt im Programm durch eine Endlosschleife, und die fragliche Zeile mit einem Halt, und führen Sie dann Ihren Haltedetektor aus.) Das Halteproblem ist sicherlich nicht NP-HARD; es ist unaussprechlich. –

+0

@Eric: Ich habe kurz davor aufgehört, The Halting Problem zu erwähnen, denn obwohl es für mich richtig klingt, war ich nicht ganz sicher, ob es in diesem Fall anwendbar war. –

1

Obwohl kein Open-Source-Tool, können Sie R# (Resharper) verwenden. Es handelt sich um ein visuelles Studio-Add-In, das Ihnen nicht erreichbaren Code anzeigen kann und es automatisch entfernen kann (mithilfe der Systembereinigung).

+3

Es ist aber nicht Open Source, oder? –

+0

Ist es mindestens kostenlos (kostenlos) oder müssen Sie es kaufen? – hasen

+1

Es ist nicht kostenlos, aber Sie können ihre Beta-Version kostenlos (zumindest für jetzt) ​​verwenden - nächtliche Builds sind verfügbar unter: http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+5.0+Nightly+Builds –

0

Sie können das Code Coverage-Tool verwenden, das in Visual Studio 2005/2008 Team Suite verfügbar ist.

-1

Das Tool NDepend kann helfen, ungenutzten Code in einer .NET-Codebasis zu finden. Dieses Tool ist jedoch nicht Open Source. Haftungsausschluss: Ich bin einer der Entwickler dieses Tools.

NDepend schlägt vor, Code Rule over LINQ Query (CQLinq) zu schreiben. Rund 200 default code rules vorgeschlagen werden, von denen 3 bis Erkennung nicht verwendeten/toter Code gewidmet werden:

NDepend in Visual Studio integriert ist, so können diese Regeln checked/browsed/edited right inside the IDE sein. Das Tool kann auch in Ihren CI-Prozess integriert werden und es kann reports erstellen, das Regeln verletzt und Täter-Code-Elemente zeigt.

Wenn Sie diese 3 Links oben auf den Quellcode dieser Regeln klicken, werden Sie feststellen, dass die Typen und Methoden ein wenig komplex sind. Dies liegt daran, dass sie nicht nur unbenutzte Typen und Methoden, sondern auch Typen und Methoden, die durch nicht verwendete tote Typen und Methoden (rekursiv) verwendet wurden, nur nur erkennen.

Dies ist statische Analyse, damit das Präfix Potenziell in den Regelnamen. Wenn ein Codeelement nur durch Reflexion verwendet wird, können diese Regeln es als nicht verwendet betrachten, was nicht der Fall ist.

Zusätzlich zu diesen drei Regeln würde ich empfehlen, die Codeabdeckung durch Tests zu messen und eine vollständige Abdeckung anzustreben.Oft wird der Code, der nicht durch Tests abgedeckt werden kann, tatsächlich unbenutzt/tot Code, der sicher verworfen werden kann. Dies ist besonders nützlich bei komplexen Algorithmen, bei denen nicht klar ist, ob ein Codezweig erreichbar ist oder nicht.

Verwandte Themen