Frage

Was ist Dynamischer Code-Analyse?

Wie unterscheidet es sich von Statische Code-Analyse (also, was können Sie fangen können, nicht gefangen werden in statische)?

Ich habe gehört, der überprüfung von Wertebereichen und memory-Analyse - was ist das?

Welche anderen Dinge überprüft werden mit Hilfe dynamische Analyse?

-Adam

War es hilfreich?

Lösung

Einfach ausgedrückt, statische Analyse sammeln Informationen basierend auf source code und dynamische Analyse basiert auf der system Ausführung, oft mit Messgeräten.

Vorteile der dynamischen Analyse

  • Ist in der Lage zu erkennen Abhängigkeiten, die nicht möglich zu erkennen, in der statischen Analyse.Ex.:dynamische Abhängigkeiten mithilfe von reflektion, dependency injection, Polymorphismus.
  • Sammeln zeitlichen Informationen.
  • Beschäftigt sich mit realen input-Daten.Während der statischen Analyse ist es schwierig bis unmöglich, zu wissen, welche Dateien übergeben werden, die als Eingabe, was WEB-Anfragen kommen, was die Benutzer auf, etc.

Nachteile der dynamischen Analyse

  • Können sich negativ auf die performance der Anwendung.
  • Keine Garantie für die vollständige Abdeckung der source-code, wie es ausgeführt werden, basierend auf Benutzer-Interaktion oder automatische tests.

Ressourcen

Es gibt viele dynamische Analyse-tools auf dem Markt, als Debugger den berüchtigtsten ein.Auf der anderen Seite, es ist immer noch eine wissenschaftliche Feld.Es gibt viele Forscher, wie dynamische Analyse für ein besseres Verständnis von software-Systemen.Es gibt eine jährliche workshop gewidmet Analyse der Abhängigkeiten.

Andere Tipps

Im Grunde instrument, Ihren code zu analysieren, Ihr software ausgeführt wird (dynamisch), anstatt nur die Analyse der software ohne laufen (statisch).Sehen Sie hierzu auch das JavaOne-Präsentation zum Vergleich der beiden. Valgrind ein Beispiel ist die dynamische Analyse-tool für C.Sie können auch code-coverage-tools wie Cobertura oder EMMA für Java-Analyse.

Aus Wikipedia definition of dynamic program analysis:

Dynamic program analysis ist die Analyse von computer-software, durchgeführt mit der Ausführung von Programmen gebaut aus, dass die software auf einem realen oder virtueller Prozessor (die Analyse durchgeführt ohne Programme ausführen kann, die ist bekannt als statische code-Analyse).Dynamische Programm Analyse-tools erfordern das laden von spezielle Bibliotheken oder sogar Neukompilierung von Programm-code.

Sie bat um eine gute Erklärung dafür, "bounds checking und memory-Analyse" Probleme.

Unsere Speicher-Sicherheits-Check Werkzeug Instrumente Ihre Anwendung zu beobachten, die zur Laufzeit für den Speicher Zugriff Fehler (buffer overruns, array-index-Fehler, ungültige Zeiger, alloc/free-Fehler).Der link enthält eine detaillierte Erklärung vollständig mit Beispielen.Diese SO beantworten zeigt zwei Programme, die Zeiger in die Toten stack-Frames, und, wie CheckPointer erkennt und meldet die Fehler im Quellcode

Eine kürzere Beispiel:C (und C++) schändlich tun nicht überprüfen Sie die Zugriffe auf arrays, um zu sehen, ob der Zugang ist innerhalb der Grenzen des Arrays.Der Vorteil:gut gestaltete Programm nicht bezahlen die Kosten für eine solche Prüfung in der Produktion-Modus.Der Nachteil:buggy-Programme berühren kann, Dinge, die außerhalb des array, und das kann zu einem Verhalten, das sehr schwer zu verstehen;damit der buggy-Programm ist schwierig zu Debuggen.

Was ist eine dynamic instrumentation tool wie der Speicher-Sicherheits-Checker kann, ist associate einige Metadaten mit jeder Zeiger (z.B., die Art der Sache, auf die der Zeiger "Punkte", und wenn es ist ein array, das array-Grenzen), und überprüfen Sie dann zur Laufzeit, werden alle Zugriffe über Pointer auf arrays, ob das array gebunden ist verletzt.Das tool ändert die ursprünglichen Programm zur Erfassung der Metadaten ab, wo er entsteht (z.B. bei der Eingabe zu Bereiche, in denen arrays deklariert werden oder als das Ergebnis von malloc Betrieb, etc.) und ändert das Programm bei jedem array-Referenz (geschrieben sowohl als x[y], wobei entweder x oder y ist ein array-Zeiger und der Wert ist irgendeine Art von integralen Typ, ähnlich *(x+y)!) zur überprüfung des Zugriffs.Nun, wenn das Programm ausgeführt wird, und führt eine out-of-bounds-Zugriff, der check-ins Fehler und er berichtete auf der ersten Stelle, wo es nachgewiesen werden konnte.[Wenn Sie darüber nachdenken, werden Sie feststellen, dass die Instrumentierung für die Metadaten-Sammlung und überprüfung ist ziemlich clever, um allen die Variante Fällen einer Sprache wie C haben können.Seine wirklich hart, um diese Arbeit zu machen, komplett).

Die gute Nachricht ist, dass jetzt ein solcher Zugang ist gemeldet früh, wo es einfacher ist, um das problem zu erkennen und bestimmen das Programm.Ein solches Werkzeug ist nicht dazu da, Produktion verwenden;verwendet man bei der Entwicklung und beim testen zu helfen, überprüfen Sie die Abwesenheit von Fehlern.Wenn es keine Fehler entdeckt, dann tut man ein normales kompilieren und führt die Programme aus, ohne die Prüfungen.

Dies ist ein sehr gutes Beispiel für eine dynamische Analyse-tool:die Prüfung geschieht zur Laufzeit.

Bounds checking

Dies bedeutet, dass Prüfungen zur Laufzeit der array-Zugriffe.Im Gegensatz zu C ist laissez-faire-Ansatz für Speicher Zugriffe und Zeiger-Arithmetik, in anderen Sprachen wie Java oder C# tatsächlich überprüfen, ob ein bestimmtes array-element ist man versucht zu zugreifen.

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