Dynamiczna analiza programu



Informacje, które udało nam się zgromadzić na temat Dynamiczna analiza programu, zostały starannie sprawdzone i uporządkowane, aby były jak najbardziej przydatne. Prawdopodobnie trafiłeś tutaj, aby dowiedzieć się więcej na temat Dynamiczna analiza programu. W Internecie łatwo zgubić się w gąszczu stron, które mówią o Dynamiczna analiza programu, a jednocześnie nie podają tego, co chcemy wiedzieć o Dynamiczna analiza programu. Mamy nadzieję, że dasz nam znać w komentarzach, czy podoba Ci się to, co przeczytałeś o Dynamiczna analiza programu poniżej. Jeśli informacje o Dynamiczna analiza programu, które podajemy, nie są tym, czego szukałeś, daj nam znać, abyśmy mogli codziennie ulepszać tę stronę.

.

Logo Valgrind . Narzdzie do profilowania kodu.

Analiza dynamiczna programu ( dynamiczna analiza programu lub DPA ) to forma analizy programu, która wymaga wykonania. Pozwala na badanie zachowania programu komputerowego i wpywu jego wykonania na otoczenie. Stosowany w rodowisku fizycznym lub wirtualnym jest czsto uywany do profilowania programów. Czy chodzi o pobranie informacji o czasie uytkowania procesora, wykorzystaniu pamici lub energii zuytej przez program.

Pomaga take znale problemy w programach. Moe na przykad wykry, czy program korzysta z zakazanych obszarów pamici , a nawet ujawni bdy w programie za pomoc fuzzerów . Moe równie pozwoli na debugowanie programu w czasie rzeczywistym, dajc moliwo podgldania tego, co dzieje si w pamici i procesorze w dowolnym momencie jego wykonywania.

Problematyczny

Do analizy programu dostpne s trzy róda informacji: kod ródowy , wykonanie programu i specyfikacja programu. Analiza kodu ródowego jest raczej zarezerwowana dla statycznej analizy programu, podczas gdy wykonanie programu jest bardziej uywane do dynamicznej analizy programu. Ogólnie rzecz biorc, statyczna analiza programu musi analizowa wszystkie gazie kodu ródowego, podczas gdy analiza dynamiczna koncentruje si tylko na wykonaniu programu z okrelonym zestawem danych .

Na przykad profilowanie jest czci analizy dynamicznej, poniewa ledzi czci wykonywanego kodu. Te lady pozwalaj wywnioskowa wpyw programu na róne komponenty sprztowe, na których jest wykonywany ( procesor , pami , dysk twardy itp.). Poniewa zazwyczaj 80% czasu wykonywania programu zajmuje 20% kodu ródowego. Zastosowanie profilera umoliwia dokadne zlokalizowanie, gdzie te 20% si znajduje. W przypadku programów, które s wykonywane równolegle na kilku procesorach, zastosowanie profilera pozwala na wskazanie stopnia zrównoleglenia programu.

Testowanie i debugowanie kodu jest niezbdne dla kadego jzyka . Testowanie mona traktowa jako form dynamicznej analizy programu, której celem jest wykrywanie bdów . Podczas gdy debugger analizuje kod, aby zlokalizowa i poprawi bd .

Analiza szybkoci wykonania

Profiler statystyczny

Aby zwikszy szybko wykonywania programu, jednym z narzdzi, e deweloper moe uy jest profilowanie statystyczny ( Sampling Profiler ). Pomaga wykry punkty zapalne i wskie garda zwizane z wydajnoci , kierujc programist do czci programu, które wymagaj optymalizacji .

Poniej znajduje si przykad minimalistycznego profilera napisanego w jzyku Ruby przez Aarona Pattersona, aby po prostu wyjani, jak dziaa profiler próbkowania  :

def fast; end
def slow; sleep(0.1); end

def benchmark_me
	1000.times { fast }
	10.times { slow }
end

def sample_profiler
	target = Thread.current # récupère l'environnement d'exécution courant
	samples = Hash.new(0) # initialise un dictionnaire qui va contenir les noms des fonctions appelées
	t = Thread.new do # initialise un nouveau thread
		loop do # boucle infinie
			sleep 0.0001 # vitesse d'échantillonnage
			function_name = target.backtrace_locations.first.label # récupère le nom de la fonction en cours d'exécution
			samples[function_name] += 1 # incrémente le nombre de fois que la fonction a été vue
		end
	end
	yield # execute le code passé dans le bloc
	t.kill # arrête le thread
	samples.dup
end

result = sample_profiler { benchmark_me }

p result # => {"sleep"=>6497, "slow"=>1}

Jak wida powyej, gdy program profilujcy zatrzymuje program w celu sprawdzenia, która funkcja jest uruchomiona, funkcja sleep pojawia si 6497 razy, w porównaniu do jednego razu dla funkcji slow. Funkcje, jak fastrównie benchmark_menie zostay nawet zmierzone. Deweloper uzyskuje zatem wskazanie funkcji, która zajmuje najwicej czasu w jego programie.

Chocia profiler próbkowania spowalnia czas wykonywania programu (poniewa konieczne jest zatrzymanie biecego zadania, aby zobaczy, która funkcja jest wykonywana), nie wymaga modyfikowania kodu bezporednio w locie lub w gór.

Profiler opónie

W przypadku aplikacji interaktywnej tradycyjne programy profilujce dostarczaj jedynie mao przydatnych danych na temat opónie odczuwanych przez uytkownika. Profiler zwraca dane o kodzie na czas wykonywania programu. Jednak w przypadku programu interaktywnego (na przykad edytora tekstu) obszarami zainteresowania s te, w których uytkownik próbuje wej w interakcj z programem (ruch myszy, uycie klawiatury itp.). Te interakcje reprezentuj bardzo niski czas pracy procesora i koszt w porównaniu z cakowitym czasem dziaania edytora. Dlatego nie pojawiaj si jako miejsca do optymalizacji podczas profilowania programu. Dlatego istniej narzdzia do profilowania opónie, które koncentruj si na tych spowolnieniach.

Analiza zuycia pamici

Wane jest, aby profilowa uycie pamici podczas uruchamiania programu. Szczególnie, jeli program ma dziaa przez dugi czas (jak na serwerze ) i unika odmowy usugi . Do tego typu analizy uywane s typy dokadnych profilerów. Oznacza to, e program profilujcy sprawdza dokadnie, ile razy kada funkcja zostaa wywoana.

Poniej znajduje si przykad minimalistycznego profilera napisanego w jzyku Ruby przez Aarona Pattersona, aby po prostu wyjani, jak dziaa Exact Profiler  :

def fast; end # return immediatly
def slow; sleep(0.1); end # return after 0.1 second
    
def benchmark_me
    1000.times { fast } # 1000 appels a la fonction fast
    10.times { slow } # 10 appels a la fonction slow 
end

def exact_profiler
    counter = Hash.new(0) # dictionnaire vide
    tp = TracePoint.new(:call) do |event| # lorsqu'une fonction est appelée
        counter[event.method_id] += 1 # on l'ajoute dans le dictionnaire
    end
    tp.enable # on active le code ci dessus
    yield # on appelle le code passé dans le bloc
    tp.disable # on arrête de compter les appels de fonction
    return counter
end

result = exact_profiler { benchmark_me }

p result # {:benchmark_me=>1, :fast=>1000, :slow=>10}

Niezalenie od uywanego jzyka, ten typ profilera bdzie wymaga instrumentalizacji kodu. Konieczne jest dodanie wikszej liczby instrukcji w programie, które powinny byy zosta wykonane za kadym razem, gdy funkcja jest wywoywana lub koczona. Moe to by dramatyczne dla czasu trwania programu. Moe skoczy si 10 do 4000 razy wolniej.

W Java np Java Profiler (JP) wstawia dodatkowe bajtowego przyrost wartoci licznika za kadym razem, gdy metoda jest tzw. Zmieni to rzeczywisty czas wykonania kodu i czsto powoduje problemy z synchronizacj (kolejno wykonywania wtków moe ulec zmianie), gdy jest uruchamiany w aplikacjach wielowtkowych.

W przypadku profilera pamici musz by uywane tylko funkcje majce zwizek z pamici. Na przykad w przypadku Valgrind funkcje malloc i free zostan zastpione funkcj, która powiadamia Valgrind, e zostay wywoane przed ich wykonaniem. Niektóre z funkcji zapisujcych w pamici, które s powszechnie uywane lub powoduj problemy dla Valgrind, takie jak memcpy lub strcpy, s równie oprzyrzdowane.

Analiza energetyczna

Wraz z pojawieniem si smartfonów i rozwojem Internetu rzeczy zuycie energii stao si w ostatnich latach bardzo wan kwesti. Chocia moliwe jest zmniejszenie czstotliwoci procesorów lub nawet poczenie zasobów materiaowych w celu zmniejszenia zuycia usugi, bezporednie zmniejszenie zuycia energii przez programy pozostaje rozwizaniem, które mona stosowa równolegle.

Energia profilowania jest jednym z rozwiza, które mog pomóc w uwiadomieniu sobie zuycia programu. Polega to na profilowaniu kodu aplikacji podczas oceny zuycia energii w celu powizania zuycia z instrukcjami . Do pomiaru zuycia energii podczas dziaania programu mona zastosowa kilka rozwiza. Na przykad moliwe jest bezporednie mierzenie zuycia za pomoc komponentów sprztowych , które s umieszczane bezporednio przed kadym z komponentów uywanych przez program. Jednak nie zawsze jest moliwy dostp do takich elementów pomiarowych. Dlatego te inna strategia polega na wykorzystaniu wczeniej zbudowanych modeli konsumpcji. Modele te musz uwzgldnia elementy sprztowe uywane przez program, ale take róne stany tych elementów.

Analiza energetyczna jest szczególna, poniewa wymaga nie tylko uruchomienia programu, ale take znajomoci profilu energetycznego wszystkich elementów maszyny, na której pracuje, w celu dokadnego obliczenia wpywu energii.

Analiza energetyczna programów pozostaje bardzo skomplikowana do precyzyjnej oceny. Rzeczywicie, nawet jeli niektóre modele pozwalaj zbliy si do 10% marginesu bdu w porównaniu z rzeczywistym zuyciem, kilka czynników komplikuje zadanie. Przede wszystkim fakt, e niektóre urzdzenia maj duo komponentów (np. Smartfony), jest problematyczny, aby wzi wszystko pod uwag. Nastpnie róne stany, które moe przyj procesor (takie jak stan oszczdzania energii) lub jego czstotliwo , zmieniaj wyniki. Fakt, e niektóre elementy, takie jak GPS, s aktywne lub nie, lub e anteny WIFI s w trakcie nadawania lub odbioru, s równie elementami, które naley wzi pod uwag w równaniu. Mog si równie róni niezalenie od uruchomionego programu, co dodatkowo komplikuje zadanie.

W zalenoci od zastosowanych technik profilowanie energii mona postrzega z mniejsz lub wiksz szczegóowoci . Niektóre technologie próbuj nawet oszacowa zuycie energii dla danej linii kodu.

Analiza cienia

Analiza koloru (lub analiza Taint w jzyku angielskim) polega na zabarwieniu danych w celu ledzenia ich postpów w systemie komputerowym. Te dane mog by plikami przechowywanymi na dysku twardym, w zmiennych przechowywanych w pamici RAM lub dowoln inn informacj krc w dowolnym rejestrze sprztowym . Wszystkie programy, które s zalene od przyciemnionych danych, s nastpnie kolejno przyciemniane.

Mona go skonfigurowa za pomoc komponentów sprztowych (fizycznych lub emulowanych ) bezporednio zaimplementowanych na maszynie lub za pomoc oprogramowania . Ustawiajc system barwienia bezporednio na materiale, znacznie atwiej jest kontrolowa dane, które przechodz przez kady element. Na przykad zabarwienie wpisu na poziomie klawiatury jest lepsze ni zabarwienie wpisu w formularzu internetowym. Jeli zoliwe oprogramowanie (na przykad) mog próbowa unikn wykrycia przez tworzenie hak s (które zmieniaj normalne funkcjonowanie programu), które s nazywane przed klawiatura osignie przegldarki internetowej. " Jednak dodawanie elementów fizycznych moe by mudne. A jeli te komponenty s emulowane, dziaanie obserwowanego programu moe zosta spowolnione. Analiza odcieni moe mie kilka moliwych przypadków:

  • Dowiedz si, jakich danych program uyje i skd one pochodz. Mona to wykorzysta do sprawdzenia, czy aplikacja majca dostp do okrelonych praw nie naduywa ich i nie próbuje wykra wraliwych danych. Jest to przydatne na przykad w celu zapewnienia, e aplikacja przestrzega ogólnych warunków uytkowania  ;
  • Monitoruj, kiedy zoliwe oprogramowanie moe uzyska dostp do wraliwych danych stron trzecich, aby spróbowa wykry potencjaln wykorzystan luk.

Analizy odcieni s regulowane przez zasady, które dyktuj ich zachowanie w oparciu o potrzeby uytkowników. Kada zasada ma 3 waciwoci: sposób wprowadzania odcienia do programu; jak propaguje si do innego programu podczas wykonywania; jak to jest sprawdzane podczas dziaania. Kilka polityk dotyczcych barwników moe wspóistnie w tym samym czasie.

Naley zauway, e analiza odcienia moe czasami wykazywa faszywie pozytywne wyniki.

Debugowanie

Znajd bdy

Jednym ze sposobów spowodowania pojawienia si bdów w programie jest uycie fuzzera (np. AFL). Ten typ programu generalnie nie wymaga adnych modyfikacji kodu ródowego i generuje losowe dane wejciowe w celu awarii kodu . Skuteczno fuzzera jest czsto mierzona przez pokrycie kodu, które zapewnia (im wicej kodu zostao wykonane, tym lepszy fuzzer ). Ten typ programu, który generuje losowe dane wejciowe bez adnych informacji innych ni czasy odpowiedzi programu przeciwnego i jeli si zawiesi, nazywany jest fuzzerem czarnej skrzynki .

Wiele fuzzerów czsto nazywanych fuzzerami typu white box wykorzystuje poczenie wykonania symbolicznego ( analiza statyczna ) i analizy dynamicznej. Uywaj wykonania symbolicznego, aby okreli, które parametry s uywane do eksploracji rónych gazi kodu. Nastpnie przy uyciu bardziej tradycyjnego fuzzera wyszukiwanie bdów odbywa si normalnie.

Na przykad nastpujcy kod ma 1 na 2 32 szanse wywoania bdu:

void foo(int c)  // la variable que le fuzzer va pouvoir faire varier
{
    if ((c + 2) == 12)
        abort(); // une erreur
}

Wpisujc ifwarunek c + 2 == 12nie jest sprawdzany, a jedynie poprzez wykonanie symboliczne, mona stwierdzi, e gdyby cbyo równe 10, to program poyczyby drug ga kodu. W ten sposób fuzzer wybierze odpowiednie wartoci, aby wej do wszystkich gazi programu. Dziki temu bdy pojawiaj si szybciej i s bardziej zoone.

Debugger

Typowym sposobem debugowania kodu jest rczne instrumentalizowanie. Oznacza to, e obserwuj jego zachowanie podczas wykonywania i dodaj wydruki, aby wiedzie, co zostao lub nie zostao wykonane i kiedy znaleziono bd. Uruchomienie programu w debugerze pozwala szybko znale ródo bdu bez koniecznoci modyfikowania jego kodu .

Zwykle debuggery pozwalaj na kilka operacji podczas dziaania programu:

  • Zatrzymaj wykonywanie programu w podanej lokalizacji. Zwykle odbywa si to poprzez wstawienie specjalnej instrukcji puapki, która wysya sygna do debugera, gdy jest on wykonywany. Zwykle ta instrukcja jest umieszczana pod okrelonym numerem linii. Ale na przykad w przypadku programów wieloagentowych moliwe jest równie umieszczenie go po okrelonej liczbie cykli.
  • Wykonaj nastpn instrukcj . Czsto realizowane poprzez zastpienie nastpn instrukcj z puapki instrukcj .
  • Wywietl zawarto zmiennych . Niektóre debuggery koncentruj si na tym punkcie, aby zapewni dalsz wizualizacj. Na przykad bardziej globalny widok umoliwiajcy jednoczesne ledzenie wielu zmiennych i obiektów .

Ale te operacje nie s oczywiste, poniewa kod moe zosta zoptymalizowany przez kompilator . A wród optymalizacji kompilator moe usuwa zmienne lub przestawia linie i traci numery linii.

Podanie

Zwró uwag, e Microsoft czsto uywa fuzzerów jako metody testowania swojego kodu. Tak bardzo, e stao si to procedur, zanim moglimy wprowadzi kod do produkcji.

Uwagi i odniesienia

  1. Ducassé 1994 , str.  6
  2. Ducassé 1994 , str.  7
  3. Ducassé 1994 , str.  20
  4. Binder 2006 , str.  45
  5. Kaleba 2017 , str.  1
  6. Yin 2019 , s.  18
  7. Jovic 2011 , s.  155
  8. Confreaks ,   RailsConf 2018: Closing Keynote by Aaron Patterson   ,
  9. Whaley 2000 , s.  79
  10. Jovic 2011 , s.  156
  11. Huang 2017 , s.  64
  12. Adamoli 2010 , s.  13
  13. Abu-Nimeh 2006 , s.  151
  14. Ammons 1997 , s.  85
  15. Binder 2006 , str.  46
  16. Binder 2006 , s.  49
  17. Xu 2013 , s.  11
  18. Nethercote 2003 , s.  58
  19. Kansal 2010 , s.  40
  20. Shuai 2013 , s.  97
  21. Pathak 2012 , s.  30
  22. Shuai 2013 , s.  99
  23. Pathak 2012 , s.  31
  24. Kansal 2010 , s.  42
  25. Shuai 2013 , s.  94
  26. Shuai 2013 , s.  93
  27. Shuai 2013 , s.  92
  28. Schwartz 2010 , str.  320
  29. Yin 2007 , s.  119
  30. Yin 2007 , s.  118
  31. Enck 2014 , s.  4
  32. Yin 2007 , s.  127
  33. Schwartz 2010 , s.  321
  34. Enck 2014 , s.  13
  35. Zhang 2018 , s.  2
  36. Godefroid 2012 , s.  41
  37. Woo 2013 , s.  511
  38. (w)   jFuzz: A Concolic Whitebox Fuzzer for Java   na https://nasa.gov , naukowe ,(dostp 13 lutego 2019 )
  39. Woo 2013 , s.  513
  40. Godefroid 2012 , s.  42
  41. Goeders 2015 , s.  127
  42. Ramsey, 1994 , s.  15
  43. Koeman 2017 , s.  942
  44. Koeman 2017 , s.  952
  45. Marquez Damián 2012 , s.  18
  46. Rafieymehr 2007 , s.  76
  47. Koeman 2007 , s.  970
  48. Yin 2019 , s.  20

Zobacz te

Powizane artykuy

Linki zewntrzne

Bibliografia

Mamy nadzieję, że informacje, które zgromadziliśmy na temat Dynamiczna analiza programu, były dla Ciebie przydatne. Jeśli tak, nie zapomnij polecić nas swoim przyjaciołom i rodzinie oraz pamiętaj, że zawsze możesz się z nami skontaktować, jeśli będziesz nas potrzebować. Jeśli mimo naszych starań uznasz, że informacje podane na temat _title nie są całkowicie poprawne lub że powinniśmy coś dodać lub poprawić, będziemy wdzięczni za poinformowanie nas o tym. Dostarczanie najlepszych i najbardziej wyczerpujących informacji na temat Dynamiczna analiza programu i każdego innego tematu jest istotą tej strony internetowej; kierujemy się tym samym duchem, który inspirował twórców Encyclopedia Project, i z tego powodu mamy nadzieję, że to, co znalazłeś o Dynamiczna analiza programu na tej stronie pomogło Ci poszerzyć swoją wiedzę.

Opiniones de nuestros usuarios

Marika Kowal

Dzięki za ten post na Dynamiczna analiza programu, właśnie tego potrzebowałem

Stefan Tkaczyk

Ten wpis na Dynamiczna analiza programu pomógł mi w ostatniej chwili dokończyć pracę na jutro. Już widziałem, jak znowu ciągnę Wikipedię, coś, czego nauczyciel nam zabronił. Dziękuję za uratowanie mnie.

Wladyslaw Orzechowski

Ten wpis na Dynamiczna analiza programu sprawił, że wygrałem zakład, co mniej niż uzyskanie dobrego wyniku.

Lukasz Kowalik

Wreszcie! W dzisiejszych czasach wydaje się, że jeśli nie piszą artykułów składających się z dziesięciu tysięcy słów, to nie są szczęśliwi. Panowie autorzy treści, to TAK to dobry artykuł o Dynamiczna analiza programu.