Premiers pas avec l'analyse de programme

10

Je recherche des ressources pour débuter avec l'analyse de programme .

Le seul livre que j'ai trouvé sur le sujet est le livre Nielson & Nielson .

En dehors de cela, il semble qu'il n'y ait que des livres de "compilateur" où "l'analyse de programme" serait un chapitre, ou quelque chose du genre.

Les gens connaissent-ils d'autres ressources?

abeln
la source
3
Difficile de battre Nielson et Nielson pour avoir commencé. Google pour les articles d'enquête. Regardez les comptes rendus récents du Static Analysis Symposium (SAS). Ensuite, google analyse en particulier ce qui vous intéresse.
Dave Clarke
Notez que nous n'aimons pas vraiment les questions de liste . Heureusement, cela semble avoir attiré une bonne réponse, mais veuillez vous abstenir de poser de telles questions. Faites vous-même une recherche sur Google, puis demandez des informations sur les ressources que vous trouvez.
Raphael

Réponses:

7

Malheureusement, il n'y a pas beaucoup de manuels sur le sujet. Je pense que la meilleure façon d'apprendre l'analyse de programme aujourd'hui est de sonder les différents cours disponibles, de jouer avec quelques implémentations et ensuite de regarder quelques articles de recherche pour vos besoins spécifiques. Ce qui suit est un très petit échantillon de ce qui existe. Étant donné que vous avez mentionné spécifiquement que les analyses orientées compilateur étaient faciles à trouver, je ne couvrirai pas ce type de matériel ci-dessous.

Ressources Web Il s'agit d'articles qui mettent l'accent sur l'utilisation de l'analyse statique en dehors d'un contexte de compilation.

  1. Une discussion Reverse Engineering Reddit sur l'analyse de programme contient de nombreux liens utiles.

  2. Mozilla Wiki sur l'interprétation abstraite.

  3. Deploying Static Analysis , un article du Dr Dobbs par Flash Sheridan

  4. Quelques milliards de lignes de code plus tard: utiliser l'analyse statique pour trouver des bogues dans le monde réel , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler en Communication de l'ACM.

Cours universitaires sur l'analyse de programme

  1. Anders Møller à l'Université d'Arhus enseigne un cours qui couvre la technologie orientée objet et web.
  2. Bor-Yuh Evan Chang à l'Université du Colorado Boulder a un cours de base qui implique une implémentation OCaml et un cours d'études supérieures .
  3. Ben Hardekopf de l'Université de Californie à Santa Barbara avait auparavant un grand nombre de missions, mais elles ne sont plus disponibles en ligne. Certains étudiants qui ont suivi son cours semblent avoir mis à disposition une implémentation Python .
  4. Markus Müller-Olm a un cours d'études supérieures sur l' analyse d'Android .
  5. Reinhard Wilhelm de l'Université de Sarbruecken enseigne un cours d'études supérieures qui couvre les applications d'analyse statique telles que l'analyse de synchronisation, la prédiction du comportement du cache et certaines analyses de forme.
  6. Sumit Gulwani de MSR a donné un bon cours sur l'estimation statique de la consommation de ressources des programmes (temps / mémoire) à l' Oregon Summer School on Programming Languages .
  7. Koushik Sen de l'Université de Californie à Berkeley enseigne un cours qui se concentre sur la recherche de bogues et dont les sujets couvrent l'exécution concolique et la vérification des modèles logiciels.
  8. Jeffrey Foster à l'Université du Maryland enseigne un cours qui couvre les systèmes de type, la vérification des modèles, l'analyse des alias et beaucoup d'autres matériaux habituels.
  9. Patrick Cousot a passé un an au MIT et a enseigné un cours de base complet sur l'interprétation abstraite. Les affectations incluent une implémentation OCaml qui va de la sémantique de collecte concrète à des idées algorithmiques non triviales.
  10. Un cours d'études supérieures sur l'interprétation abstraite enseigné par certains leaders dans le domaine est un bon endroit pour rattraper encore plus de théorie.
  11. Patrick Cousot a enseigné un court cours sur l'interprétation abstraite à l' Oregon Summer School on Programming Languages en 2009.

Outils pour jouer avec

Je n'énumère pas beaucoup d'outils de recherche ici. Il y en a beaucoup mais j'ai essayé d'en énumérer quelques-uns que vous pouvez télécharger et jouer pour mieux comprendre la région.

  1. Interproc est un outil très éducatif avec lequel vous pouvez vous familiariser avec l'analyse statique numérique.

  2. La bibliothèque d'abstraction numérique de tablier si vous êtes vraiment dans l'analyse numérique.

  3. Slayer est un outil d'analyse de forme de Microsoft Research.

  4. jStar est un analyseur pour Java basé sur une logique de séparation.

  5. Microsoft Research a de nombreux groupes développant de nombreux outils, dont beaucoup sont disponibles en téléchargement ou ont des démos Web. Je ne peux pas tout énumérer ici et vous suggérer de jouer avec eux.

Il y en a beaucoup plus, mais c'est probablement suffisant pour vous occuper un moment.

Vijay D
la source
Wow, maintenant c'est une réponse complète! Merci beaucoup!
abeln
@Vijay merci pour votre réponse! Je me demande si vous pourriez ajouter quelques pointeurs pour l'analyse du compilateur pour moi?
AnneTheAgile
@AnneTheAgile, je pense que l'extension mérite une question et une réponse distinctes. Veuillez donc poser la question et je serai ravi de vous répondre.
Vijay D du
@VijayD, merci! Je l'ai écrit; cs.stackexchange.com/questions/13392/…
AnneTheAgile
Je réponds trop lentement et mon message a été supprimé. @VijayD vous pouvez peut-être m'envoyer un message instantané ou ajouter ici? Ce qui m'intéresse, ce sont les bases. Je ne sais pas comment trouver au mieux les "analyses orientées compilateur" qui "étaient faciles à trouver"? Je suis nouveau dans le domaine et je veux commencer de la bonne façon. ty!
AnneTheAgile
2

Ce champ est extrêmement large ... recherchez des preuves de l'exactitude du programme (il existe quelques outils, comme Klee ). Il y a ensuite toutes sortes de "vérificateurs de programmes" de sophistication variable (voir par exemple attelle ou flawfinder pour un échantillon de la gamme), des programmes qui vérifient la "conformité aux directives de programmation". Même le smatch de Linux tombe dans cette catégorie.

Pour les outils dynamiques, il existe toutes sortes d'outils de couverture des performances / tests et des éléments pour la vérification de la mémoire comme valgrind .

Limitez la plage d'intérêt, puis effectuez une exploration avant.

vonbrand
la source
Merci. Ceux que vous mentionnez sont des outils , mais qu'en est-il des livres ou des sondages, par exemple sur l'analyse statique des programmes?
abeln
1

Il y a deux axes de recherche dans l'analyse de programme: dynamicet staticl'analyse de programme.

Pour avoir un premier aperçu de l'analyse de programme, je vous recommande de lire le chapitre 4, 6, 9 du livre Dragon si vous avez de l'expérience dans les compilateurs .

Ou si au moins vous connaissez les graphiques de base, il serait préférable de suivre un cours de niveau supérieur, comme le MIT 6.820 et le CMU 17-355 / 17-665 / 17-819 .

Ce qui précède concerne l'analyse de programme statique. Si vous vous intéressez davantage à l'analyse dynamique de programme , le profilage de programme est un bon point de départ.

emmmphd
la source