Erste Schritte mit der Programmanalyse

10

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?

abeln
quelle
3
Schwer zu schlagen, Nielson und Nielson für den Einstieg. Google für Umfragepapiere. Schauen Sie sich die jüngsten Arbeiten des Static Analysis Symposium (SAS) an. Dann google bestimmte Analysen, die dich interessieren.
Dave Clarke
Beachten Sie, dass wir Listenfragen nicht ganz mögen . Glücklicherweise scheint dies eine gute Antwort gefunden zu haben, aber bitte stellen Sie solche Fragen nicht. Google selbst und frage dann nach dem Material in den Ressourcen, die du findest.
Raphael

Antworten:

7

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.

  1. Eine Reverse Engineering Reddit-Diskussion zur Programmanalyse enthält viele nützliche Links.

  2. Mozilla Wiki zur abstrakten Interpretation.

  3. Bereitstellen der statischen Analyse , ein Artikel von Dr. Dobbs von Flash Sheridan

  4. 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

  1. Anders Møller von der Universität Arhus unterrichtet einen Kurs über objektorientierte und Web-Technologie.
  2. Bor-Yuh Evan Chang von der University of Colorado Boulder hat einen Grundkurs , der eine OCaml-Implementierung und einen Abschlusskurs beinhaltet .
  3. Ben Hardekopf von der University of California in Santa Barbara hatte früher viele Aufgaben, die jedoch online nicht mehr verfügbar sind. Einige Studenten, die an seinem Kurs teilgenommen haben, scheinen eine Python-Implementierung zur Verfügung gestellt zu haben.
  4. Markus Müller-Olm hat einen Abschlusskurs zur Analyse von Android .
  5. Reinhard Wilhelm von der Universität Sarbrücken unterrichtet einen Graduiertenkurs , der statische Analyseanwendungen wie Timing-Analyse, Vorhersage des Cache-Verhaltens und einige Formanalysen abdeckt.
  6. Sumit Gulwani von MSR unterrichtete an der Oregon Summer School für Programmiersprachen einen schönen Kurs zur statischen Schätzung des Ressourcenverbrauchs von Programmen (Zeit / Speicher) .
  7. Koushik Sen von der University of California in Berkeley unterrichtet einen Kurs , der sich auf die Fehlersuche konzentriert und dessen Themen die konkolische Ausführung und die Überprüfung von Softwaremodellen umfassen.
  8. Jeffrey Foster an der University of Maryland unterrichtet einen Kurs , der Typensysteme, Modellprüfung, Alias-Analyse und viele andere übliche Materialien behandelt.
  9. Patrick Cousot verbrachte ein Jahr am MIT und unterrichtete einen umfassenden Grundkurs über abstrakte Interpretation. Die Aufgaben umfassen eine OCaml-Implementierung, die von der konkreten Sammelsemantik bis zu einigen algorithmisch nicht trivialen Ideen reicht.
  10. Ein Abschlusskurs über abstrakte Interpretation, der von einigen Führungskräften auf diesem Gebiet unterrichtet wird, ist ein guter Ort, um noch mehr Theorie nachzuholen.
  11. Patrick Cousot unterrichtete 2009 an der Oregon Summer School über Programmiersprachen einen kurzen Kurs über abstrakte Interpretation .

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.

  1. Interproc ist ein sehr lehrreiches Werkzeug, um die numerische statische Analyse kennenzulernen.

  2. Die Apron Numeric Abstraction-Bibliothek, wenn Sie sich wirklich für numerische Analysen interessieren.

  3. Slayer ist ein Formanalyse-Tool von Microsoft Research.

  4. jStar ist ein Analysator für Java, der auf Trennungslogik basiert.

  5. 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.

Vijay D.
quelle
Wow, das ist eine umfassende Antwort! Vielen Dank!
Abeln
@ Vijay danke für deine Antwort! Ich frage mich, ob Sie mir ein paar Hinweise für die Compiler-Analyse hinzufügen könnten.
AnneTheAgile
@AnneTheAgile, ich denke, dass die Erweiterung eine separate Frage und Antwort verdient. Bitte stellen Sie die Frage und ich gebe Ihnen gerne die Antwort.
Vijay D
@ VijayD, danke! Ich habe es geschrieben; cs.stackexchange.com/questions/13392/…
AnneTheAgile
Ich antworte zu langsam und mein Beitrag wurde gelöscht. @ VijayD vielleicht kannst du mich IM oder hier hinzufügen? Was mich interessiert, sind die Grundlagen. Ich bin mir nicht sicher, wie ich die "compilerorientierten Analysen" am besten finden kann, die "leicht zu finden" waren. Ich bin neu auf dem Gebiet und möchte richtig anfangen. ty!
AnneTheAgile
2

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.

vonbrand
quelle
Vielen Dank. Diejenigen, die Sie erwähnen, sind Werkzeuge , aber was ist mit Büchern oder Umfragen, etwa zur statischen Programmanalyse?
Abeln
1

In der Programmanalyse gibt es zwei Forschungsschwerpunkte : dynamicund die staticProgrammanalyse.

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.

emmmphd
quelle