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?
Odpowiedzi:
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.
Inżynieria odwrotna Reddit dyskusja na analizie programów posiada wiele przydatnych linków.
Mozilla Wiki o abstrakcyjnej interpretacji.
Wdrażanie analizy statycznej , artykuł dr Dobbs autorstwa Flash Sheridan
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
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.
Interproc jest bardzo edukacyjnym narzędziem do nauki o numerycznej analizie statycznej.
Biblioteka fartuchów numerycznych, jeśli naprawdę interesuje Cię analiza numeryczna.
Slayer to narzędzie do analizy kształtów firmy Microsoft Research.
jStar to analizator Java oparty na logice separacji.
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ę.
źródło
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.
źródło
Istnieją dwa kierunki badawcze w analizie programu:
dynamic
istatic
analizy 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 .
źródło