2010-02-07 5 views
5

Es gibt viele Werkzeuge, die wir verwenden können, um die Abhängigkeiten zwischen Modulen, Quellcodedateien, Klassen oder Funktionen usw. zu zeigen. Aber es gibt kein Werkzeug, um die Abhängigkeiten zwischen Variablen zu analysieren. Ein Abhängigkeitsgraphen von Variablen wäre hilfreich, um den Code zu verstehen und zu refaktorieren.Gibt es ein Tool, das die Abhängigkeiten zwischen Variablen in C# -Programmen analysieren kann?

Zum Beispiel, wenn die Variable b nur für die Berechnung des Wertes der Variable c wird wie folgt verwendet:

b = a; 
.... 
c = b + 2; 

Vielleicht könnten wir die Variable b entfernen, um den Code besser lesbar zu machen:

.... 
c = a + 2; 

Diese Art der Wiederherstellung kann schwierig sein, wenn der Code sehr komplex ist oder viele schlechte Gerüche aufweist.

Gibt es ein Tool, das die Abhängigkeiten zwischen Variablen in C# oder anderen Programmiersprachen analysieren kann?

+1

Mit „Variable“ meinen Sie konkret „lokalen Variable“, oder haben Sie lokale, formale Parameter, Array bedeuten Element, Feld und dereferenzierter Zeiger? Sind Sie besorgt über äußere Variablen von Lambda? Lambda-Parameter? Locals in lambdas? Hoisted Locals in Iterator-Blöcken? Analysieren die Beziehungen zwischen en arbiträre Variablen können ziemlich kompliziert sein, viel komplizierter als nur lokale, insbesondere wenn Sie das variable Aliasing über "ref" -Parameter berücksichtigen. –

+0

Eric Lippert: je mehr Arten von "Variablen" analysiert werden können, desto einfacher wird die Refactory-Arbeit des Codes sein. Ich habe festgestellt, dass es in der Regel viele komplexe Abhängigkeiten gibt, wenn ich versuchte, Legacy-Code umzuwandeln. – askalee

Antwort

1

Resharper ist ein gutes Werkzeug, um C# -Code zu analysieren. Zumindest zeigt es Ihnen nicht verwendete Variable und Variable, die Sie Wert zuweisen, aber nie verwendet.

Wenn Sie ernsthaftes Refactoring Ihres Codes in Betracht ziehen, könnten Sie Komponententests schreiben, um sicherer zu sein, dass Sie nichts kaputt machen.

1

Die Phoenix Project bei Microsoft Research hat einige ziemlich interessante Tools aktiviert. Eine Demo, die ich gesehen habe, zeigt die Hervorhebung von Datenabhängigkeiten. Sie könnten also in Ihrem Beispiel über "c" gehen und alle Ausdrücke, die zu dieser Berechnung beitragen, werden hervorgehoben. Es war mehr eine Demo von Phoenix, als ein vollwertiges Entwickler-Tool, aber sehr cool, um zu sehen, dass es gemacht werden könnte. Phoenix ist ein free download, so dass Sie sehen können, welche Art von Beispiel-Apps enthalten sind.

0

Siehe die Diskussion, wie die DMS Software Reengineering Toolkit (Kontrolle und) Datenflussanalyse macht. Dies ist im Wesentlichen eine klassische Compiler-Analyse von Informationsflüssen, die sogenannte Def-Use-Ketten einschließt. Die Verwendungsketten zeigen, wie ein Wert (eine spezifische Zuweisung) von anderen Teilen des Programms verbraucht wird.

Diese Informationsflüsse werden als Datenstrukturen berechnet und sind daher direkt leicht zu erkennen. (Die Webseite macht Bilder zeigen, aber sie sind Graphen, der Ergebnisse abgeladen zugeführt Punkt. Um dies zu einem Werkzeug zu machen, ist mehr Aufwand.

Wir sind mit diesem Programm Slicer gebaut haben, dass Display diese Information in einem UI. Sie noch nicht im Handel erhältlich.

Grammatech solches Programm Slicer für C und Ada macht, denke ich.

Verwandte Themen