Introduzione all'analisi del programma


10

Sto cercando risorse per iniziare con l' analisi del programma .

L'unico libro che ho trovato sull'argomento è il libro Nielson & Nielson .

Oltre a ciò, sembra che ci siano solo libri "compilatori" in cui "analisi del programma" sarebbe un capitolo o qualcosa del genere.

Le persone conoscono altre risorse?


3
Difficile da battere Nielson e Nielson per iniziare. Google per documenti di indagine. Guarda i recenti lavori del Static Analysis Symposium (SAS). Quindi google analisi particolari che ti interessano.
Dave Clarke

Nota che non ci piacciono abbastanza le domande dell'elenco . Fortunatamente, questo sembra aver attirato una buona risposta, ma per favore astenersi dal porre tali domande. Google stesso e quindi chiedere le cose nelle risorse che trovi.
Raffaello

Risposte:


7

Sfortunatamente non ci sono molti libri di testo sull'argomento. Penso che il modo migliore per imparare l'analisi del programma oggi sia quello di esaminare diversi corsi disponibili, giocare con alcune implementazioni e quindi guardare alcuni documenti di ricerca per le tue esigenze specifiche. Quello che segue è un piccolo esempio di ciò che è là fuori. Dato che hai menzionato specificamente le analisi orientate al compilatore sono facili da trovare, non tratterò di seguito questo materiale.

Risorse basate sul Web Questi sono articoli che enfatizzano l'uso dell'analisi statica al di fuori di un contesto di compilazione.

  1. Una discussione di Reverse Engineering Reddit sull'analisi del programma ha molti link utili.

  2. Mozilla Wiki sull'interpretazione astratta.

  3. Distribuire Static Analysis , un articolo del Dr. Dobbs di Flash Sheridan

  4. Qualche miliardo di righe di codice più tardi: utilizzando l'analisi statica per trovare bug nel mondo reale , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler nelle comunicazioni dell'ACM.

Corsi universitari sull'analisi dei programmi

  1. Anders Møller dell'Università di Arhus tiene un corso che tratta della tecnologia orientata agli oggetti e del web.
  2. Bor-Yuh Evan Chang presso l'Università del Colorado Boulder ha un corso di base che prevede un'implementazione OCaml e un corso di laurea .
  3. Ben Hardekopf dell'Università della California a Santa Barbara aveva un gran numero di incarichi, ma non sono più disponibili online. Alcuni studenti che hanno seguito il suo corso sembrano aver reso disponibile un'implementazione di Python .
  4. Markus Müller-Olm ha un corso di laurea su analisi di Android .
  5. Reinhard Wilhelm presso l'Università di Sarbruecken tiene un corso di laurea che copre applicazioni di analisi statica come analisi di temporizzazione, previsione del comportamento della cache e alcune analisi di forma.
  6. Il Sumit Gulwani di MSR ha tenuto un bel corso sulla stima statica del consumo di risorse dei programmi (tempo / memoria) presso la Oregon Summer School on Programming Languages .
  7. Koushik Sen presso l'Università della California a Berkeley tiene un corso incentrato sulla ricerca di bug e i cui argomenti riguardano l'esecuzione concolica e il controllo del modello software.
  8. Jeffrey Foster presso l'Università del Maryland tiene un corso che tratta di sistemi di tipo, controllo dei modelli, analisi degli alias e molto altro materiale abituale.
  9. Patrick Cousot ha trascorso un anno al MIT e ha tenuto un corso completo di base sull'interpretazione astratta. I compiti includono un'implementazione OCaml che va dalla concreta raccolta di semantica ad alcune idee algoritmicamente non banali.
  10. Un corso di laurea in interpretazione astratta tenuto da alcuni leader del settore è un buon posto per recuperare ulteriore teoria.
  11. Patrick Cousot ha tenuto un breve corso di interpretazione astratta alla Oregon Summer School on Programming Languages nel 2009.

Strumenti con cui giocare

Non sto elencando molti strumenti di ricerca qui. Ce ne sono molti, ma ho provato a elencarne alcuni che è possibile scaricare e giocare per capire meglio l'area.

  1. Interproc è uno strumento molto educativo con cui giocare per conoscere l'analisi statica numerica.

  2. La libreria Astrazione numerica del grembiule se ti piacciono davvero le analisi numeriche.

  3. Slayer è uno strumento di analisi della forma di Microsoft Research.

  4. jStar è un analizzatore per Java basato sulla logica di separazione.

  5. Microsoft Research ha numerosi gruppi che sviluppano numerosi strumenti, molti dei quali sono disponibili per il download o hanno dimostrazioni web. Non posso elencare tutto qui e suggerire di giocare con loro.

C'è molto di più, ma probabilmente è abbastanza per tenerti occupato per un po '.


Wow, ora questa è una risposta completa! Molte grazie!
circa

@Vijay grazie per la tua risposta! Mi chiedo se potresti aggiungere alcuni suggerimenti per l'analisi del compilatore per me?
AnneTheAgile,

@AnneTheAgile, penso che l'estensione meriti una domanda e una risposta separate. Quindi, si prega di porre la domanda e sono felice di fornire la risposta.
Vijay D,

@VijayD, grazie! L'ho scritto; cs.stackexchange.com/questions/13392/…
AnneTheAgile

Sto rispondendo troppo lentamente e il mio post è stato eliminato. @VijayD forse mi puoi IM o aggiungere qui? Quello che mi interessa sono le basi. Non sono sicuro del modo migliore per trovare le "analisi orientate al compilatore" che "erano facili da trovare"? Sono nuovo sul campo e voglio iniziare nel modo giusto. ty!
AnneTheAgile

2

Questo campo è estremamente vasto ... cerca prove della correttezza del programma (ci sono alcuni strumenti in giro, come Klee ). Poi ci sono tutti i tipi di "controllori di programmi" di varia sofisticazione (vedi ad esempio splint o flawfinder per un campionamento della gamma), programmi che controllano la "conformità alle linee guida di programmazione". Anche lo smatch di Linux rientra in questa categoria.

Per gli strumenti dinamici, ci sono tutti i tipi di strumenti di copertura delle prestazioni / test in circolazione e cose per il controllo della memoria come valgrind .

Restringere l'intervallo di interesse, quindi eseguire il drill down.


Grazie. Quelli che menzioni sono strumenti , ma che dire di libri o sondaggi, dicono sull'analisi statica del programma?
circa

1

Ci sono due focus di ricerca nell'analisi del programma: dynamice l' staticanalisi del programma.

Per avere un primo assaggio dell'analisi del programma, ti consiglio di leggere i capitoli 4, 6, 9 nel libro Dragon se hai un background nei compilatori .

O se almeno conosci i grafici di base, sarebbe meglio seguire un corso di livello universitario, come MIT 6.820 e CMU 17-355 / 17-665 / 17-819 .

Quanto sopra riguarda l'analisi del programma statico. Se ti interessa di più dell'analisi dinamica del programma , la profilazione del programma è un buon punto di partenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.