Ich suche nach Ressourcen für den Einstieg in die Programmanalyse .
Das einzige Buch, das ich zu diesem Thema gefunden habe, ist das Nielson & Nielson- Buch.
Davon abgesehen scheint es nur "Compiler" -Bücher zu geben, in denen "Programmanalyse" ein Kapitel oder etwas in dieser Richtung wäre.
Kennen die Leute andere Ressourcen?
Antworten:
Leider gibt es nicht viele Lehrbücher zum Thema. Ich denke, der beste Weg, um Programmanalyse heute zu lernen, besteht darin, verschiedene verfügbare Kurse zu untersuchen, mit einigen Implementierungen zu spielen und dann einige Forschungsarbeiten für Ihre spezifischen Bedürfnisse zu lesen. Was folgt, ist eine sehr kleine Auswahl dessen, was da draußen ist. Da Sie ausdrücklich erwähnt haben, dass compilerorientierte Analysen leicht zu finden waren, werde ich dieses Material im Folgenden nicht behandeln.
Webbasierte Ressourcen Dies sind Artikel, in denen die Verwendung statischer Analysen außerhalb eines Kompilierungskontexts hervorgehoben wird.
Eine Reverse Engineering Reddit-Diskussion zur Programmanalyse enthält viele nützliche Links.
Mozilla Wiki zur abstrakten Interpretation.
Bereitstellen der statischen Analyse , ein Artikel von Dr. Dobbs von Flash Sheridan
Ein paar Milliarden Codezeilen später: Verwenden der statischen Analyse, um Fehler in der realen Welt zu finden , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler in Mitteilungen der ACM.
Universitätskurse zur Programmanalyse
Werkzeuge zum Spielen
Ich liste hier nicht viele Recherchetools auf. Es gibt viele davon, aber ich habe versucht, einige aufzulisten, die Sie herunterladen und spielen können, um den Bereich besser zu verstehen.
Interproc ist ein sehr lehrreiches Werkzeug, um die numerische statische Analyse kennenzulernen.
Die Apron Numeric Abstraction-Bibliothek, wenn Sie sich wirklich für numerische Analysen interessieren.
Slayer ist ein Formanalyse-Tool von Microsoft Research.
jStar ist ein Analysator für Java, der auf Trennungslogik basiert.
Microsoft Research hat zahlreiche Gruppen, die zahlreiche Tools entwickeln, von denen viele zum Download zur Verfügung stehen oder über Web-Demos verfügen. Ich kann hier nicht alles auflisten und schlage vor, dass Sie mit ihnen spielen.
Es gibt noch viel mehr, aber das reicht wahrscheinlich aus, um Sie eine Weile zu beschäftigen.
quelle
Dieses Feld ist extrem breit ... suchen Sie nach Beweisen für die Programmkorrektheit (es gibt einige Tools wie Klee ). Dann gibt es alle Arten von "Programmprüfern" unterschiedlicher Raffinesse (siehe beispielsweise Schiene oder Fehlerfinder für eine Auswahl des Bereichs), Programme, die die "Einhaltung der Programmierrichtlinien" prüfen. Sogar Linux ' Smatch fällt in diese Kategorie.
Für dynamische Tools gibt es alle Arten von Tools für die Leistungs- / Testabdeckung und Dinge zur Speicherprüfung wie Valgrind .
Grenzen Sie den interessierenden Bereich ein und führen Sie dann einen Drilldown durch.
quelle
In der Programmanalyse gibt es zwei Forschungsschwerpunkte :
dynamic
und diestatic
Programmanalyse.Um einen ersten Eindruck von der Programmanalyse zu bekommen, empfehle ich, Kapitel 4, 6, 9 im Dragon-Buch zu lesen, wenn Sie Hintergrundwissen in Compilern haben .
Wenn Sie zumindest grundlegende Grafiken kennen, ist es besser, einen Kurs für Hochschulabsolventen wie MIT 6.820 und CMU 17-355 / 17-665 / 17-819 zu absolvieren .
In den obigen Abschnitten geht es um statische Programmanalysen. Wenn Sie sich mehr für die dynamische Programmanalyse interessieren , ist die Programmprofilerstellung ein guter Ausgangspunkt.
quelle