Frage

Welche Probleme würde man hoffen, die Verwendung einer statischen Anrufdiagrammanalyse in einem Programm zu finden? FXCOP verwendet eine statische Aufruf -Diagrammanalyse. Welche Probleme findet es diese Technik?

http://msdn.microsoft.com/library/bb429476.aspx
http://en.wikipedia.org/wiki/callgraph

Entschuldigung für meinen Mangel an Wissen, ich habe einige Informationen über Google gefunden, befürchtete aber, dass es sehr unvollständig ist. Vielen Dank!

War es hilfreich?

Lösung 2

Das habe ich gefunden:

Call-Graphen werden verwendet, um Probleme in Bezug auf die Programmausführung, den Verstoß gegen empfohlene Richtlinien und mögliche Code-Injektionsangriffe zu erkennen.

Durch das Erstellen eines Diagramms der aufrufenden Beziehungen zwischen verschiedenen Methoden ist leicht zu erkennen, wo Probleme zu bestimmten Zeiten auftreten können, wenn bestimmte Methoden aufgerufen werden oder wie bestimmte Methoden aufgerufen werden. Es ist leicht zu erkennen, wann eine Prozedur/Funktion gegen Richtlinien wie die Aufrechterhaltung der Modularität der Code verletzt. Es ist leicht zu erkennen, wo böswilliger Code möglicherweise an bestimmten Stellen angegeben werden kann, weil sie Beziehungen bezeichnen und wie sie strukturiert sind. Auf diese Weise bieten Anrufgraps einen Kontext für die statische Analyse und führen zu genaueren Ergebnissen.

Da FXCOP statische Call-Graphen verwendet, kann es nur in einem Grad darüber spekulieren.

Andere Tipps

Für sich selbst ist der Anrufgraph genau das; Es gibt keine "falschen" Anrufdiagramme (es sei denn, Sie haben eine Stilprüfung, die eine Rekursion verbietet).

Das eigentliche Problem ist, dass Sie zu verstehen, wie Code an einem Punkt im Programm problematisch sein könnte, Sie normalerweise die Form der Welt verstehen (welche Datenstrukturen leben, welche Werte sie enthalten könnten, welche Beziehungen sie haben könnten) in der Moment, in dem dieser Codepunkt aktiv ist. Die Aufrufdiagramm zeigt, wie Ausführung zum Interessenscodepunkt erreicht wird, und der gesamte Code entlang dieses Aufrufdiagrammpfads legt den Code -Ausführungskontext fest. Dies ermöglicht dem statischen Analysator eine "kontextsensitive" Analyse, die viel genauere Antworten gibt.

Dies führt zu einem zweiten Problem: Wie bekommt man ein genaues Anrufdiagramm? Wenn Sie einen direkten Anruf von B von A haben, ist es einfach, "A Anrufe B" aufzuschreiben, und der Meinung, dass dies eine genaue Call-Graph-Tatsache ist. Aber wenn A einen Anruf durch einen indirekten Zeiger tätigt (können Sie virtuelle Methodenversand sagen?) Plötzlich ist nicht so klar, wer ein Anruf anruft; Am Ende haben Sie A-Might-Call-B1, A-Might-Call-B2, ... was man tatsächlich aufruft, hängt tatsächlich von dem Kontext ab, in dem ein ausgeführt wird ... oops, Sie benötigen das Anrufdiagramm für die Herstellung die Anrufdiagramm. Die Art der guten Nachricht ist, dass Sie die Anrufgrafik von unten aufbauen: "Ich weiß, dass dies sicherlich wahr ist, also muss das sicherlich wahr sein." An Orten, an denen der Analzyer es nicht herausfinden kann, erraten es im Allgemeinen eine konservative Vermutung: ("Alle diese Anrufe könnten möglich sein, ich kann sie nicht ausschließen"). Dieser Konservatismus ist eine der wichtigsten Ursachen für die Genauigkeit Ihres statischen Analysators.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top