Pierwsze kroki z analizą programu

10

Szukam zasobów na początek analizy programu .

Jedyną książką, jaką znalazłem na ten temat, jest książka Nielson i Nielson .

Poza tym wydaje się, że istnieją tylko książki „kompilatorowe”, w których „analiza programu” byłaby rozdziałem lub czymś podobnym.

Czy ludzie znają inne zasoby?

abeln
źródło
3
Trudno pokonać Nielsona i Nielsona za rozpoczęcie. Google dla artykułów ankietowych. Spójrz na ostatnie materiały z Sympozjum Analiz Statycznych (SAS). Następnie zainteresuj się konkretnymi analizami Google.
Dave Clarke
Pamiętaj, że nie lubimy pytań z listy . Na szczęście wydaje się, że przyciągnęła to dobra odpowiedź, ale proszę powstrzymać się od zadawania takich pytań. Google sam, a następnie zapytaj o rzeczy w znalezionych zasobach.
Raphael

Odpowiedzi:

7

Niestety nie ma zbyt wielu podręczników na ten temat. Myślę, że najlepszym sposobem na naukę analizy programów jest dzisiaj ankieta na temat różnych dostępnych kursów, zagranie z kilkoma wdrożeniami, a następnie przejrzenie kilku artykułów naukowych dotyczących konkretnych potrzeb. Poniżej znajduje się bardzo mała próbka tego, co tam jest. Ponieważ konkretnie wspomniałeś, że analizy zorientowane na kompilator były łatwe do znalezienia, nie będę omawiać takiego materiału poniżej.

Zasoby internetowe Są to artykuły podkreślające zastosowanie analizy statycznej poza kontekstem kompilacji.

  1. Inżynieria odwrotna Reddit dyskusja na analizie programów posiada wiele przydatnych linków.

  2. Mozilla Wiki o abstrakcyjnej interpretacji.

  3. Wdrażanie analizy statycznej , artykuł dr Dobbs autorstwa Flash Sheridan

  4. Kilka miliardów linii kodu później: wykorzystanie analizy statycznej do znalezienia błędów w realnym świecie , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler w komunikacji z ACM.

Kursy uniwersyteckie na temat analizy programu

  1. Anders Møller z Arhus University prowadzi kurs obejmujący technologie obiektowe i sieciowe.
  2. Bor-Yuh Evan Chang z University of Colorado Boulder ma podstawowy kurs, który obejmuje wdrożenie OCaml i kurs dla absolwentów .
  3. Ben Hardekopf z Uniwersytetu Kalifornijskiego w Santa Barbara miał kiedyś świetny zestaw zadań, ale nie są już dostępne online. Wygląda na to, że niektórzy studenci, którzy wzięli udział w tym kursie, udostępnili implementację języka Python .
  4. Markus Müller-Olm ukończył kurs z zakresu analizy systemu Android .
  5. Reinhard Wilhelm z University of Sarbruecken prowadzi kurs dla absolwentów, który obejmuje zastosowania analiz statycznych, takich jak analiza czasowa, przewidywanie zachowania pamięci podręcznej i niektóre analizy kształtu.
  6. Sumit Gulwani z MSR prowadził niezły kurs statystycznego szacowania zużycia zasobów przez programy (czas / pamięć) w Oregon Summer School on Programming Languages .
  7. Koushik Sen na Uniwersytecie Kalifornijskim w Berkeley prowadzi kurs, który koncentruje się na wyszukiwaniu błędów i którego tematyka obejmuje wykonanie concolic i sprawdzenie modelu oprogramowania.
  8. Jeffrey Foster z University of Maryland prowadzi kurs obejmujący systemy typów, sprawdzanie modeli, analizę aliasów i wiele innych zwykłych materiałów.
  9. Patrick Cousot spędził rok w MIT i prowadził kompleksowy, fundamentalny kurs interpretacji abstrakcyjnej. Zadania obejmują implementację OCaml, która przechodzi od konkretnej semantyki kolekcjonowania do pewnych algorytmicznie nietrywialnych pomysłów.
  10. Oczywiście absolwent na abstrakcyjnej interpretacji prowadzone przez niektórych liderów w tej dziedzinie jest dobre miejsce, aby nadrobić zaległości na jeszcze więcej teorii.
  11. Patrick Cousot prowadził krótki kurs interpretacji abstrakcyjnej w Oregon Summer School on Programming Languages w 2009 roku.

Narzędzia do zabawy

Nie wymieniam tutaj wielu narzędzi badawczych. Jest ich wiele, ale próbowałem wymienić kilka, które można pobrać i grać, aby lepiej zrozumieć ten obszar.

  1. Interproc jest bardzo edukacyjnym narzędziem do nauki o numerycznej analizie statycznej.

  2. Biblioteka fartuchów numerycznych, jeśli naprawdę interesuje Cię analiza numeryczna.

  3. Slayer to narzędzie do analizy kształtów firmy Microsoft Research.

  4. jStar to analizator Java oparty na logice separacji.

  5. Microsoft Research ma wiele grup rozwijających liczne narzędzia, z których wiele jest dostępnych do pobrania lub w wersji demonstracyjnej. Nie mogę tu wymienić wszystkiego i sugeruję, abyś z nimi grał.

Jest o wiele więcej, ale to prawdopodobnie wystarczy, abyś był zajęty przez chwilę.

Vijay D.
źródło
Wow, teraz to wyczerpująca odpowiedź! Wielkie dzięki!
abeln
@Vijay dziękuję za odpowiedź! Zastanawiam się, czy mógłbyś dodać dla mnie kilka wskaźników do analizy kompilatora?
AnneTheAgile,
@AnneTheAgile, myślę, że rozszerzenie zasługuje na osobne pytanie i odpowiedź. Zadaj więc pytanie i chętnie udzielę odpowiedzi.
Vijay D
@VijayD, dziękuję! Napisałem to; cs.stackexchange.com/questions/13392/…
AnneTheAgile
Odpowiadam zbyt wolno, a mój post został usunięty. @VijayD może możesz wysłać mi wiadomość lub dodać tutaj? Interesuję się podstawami. Nie jestem pewien, jak najlepiej znaleźć „analizy zorientowane na kompilator”, które „łatwo znaleźć”? Jestem nowy w tej dziedzinie i chcę rozpocząć właściwą drogę. ty!
AnneTheAgile,
2

To pole jest bardzo szerokie ... szukaj dowodów poprawności programu (istnieje kilka narzędzi, takich jak Klee ). Są też różnego rodzaju „programy sprawdzające” o różnym stopniu zaawansowania (patrz na przykład szyna lub flawfinder dla próbkowania zakresu), programy sprawdzające „zgodność wytycznych programowych”. Nawet smatch Linuksa należy do tej kategorii.

W przypadku narzędzi dynamicznych dostępne są różnego rodzaju narzędzia do testowania wydajności / testowania oraz rzeczy do sprawdzania pamięci, takie jak valgrind .

Zawęź zakres zainteresowania, a następnie przejdź do szczegółów.

vonbrand
źródło
Dzięki. Te, o których wspominasz, to narzędzia , ale co z książkami lub ankietami, na przykład przy statycznej analizie programu?
abeln
1

Istnieją dwa kierunki badawcze w analizie programu: dynamici staticanalizy programu.

Aby po raz pierwszy posmakować analizy programu, polecam przeczytać rozdział 4, 6, 9 w książce Dragon, jeśli masz doświadczenie w kompilatorach .

Lub jeśli przynajmniej znasz podstawowe wykresy, lepiej pójść na kurs dla absolwentów, taki jak MIT 6.820 i CMU 17-355 / 17-665 / 17-819 .

Powyższe dotyczą statycznej analizy programu. Jeśli zależy Ci bardziej na dynamicznej analizie programu , warto rozpocząć profilowanie programu .

emmmphd
źródło