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ę.
.
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.
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 .
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 fast
równie benchmark_me
nie 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.
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.
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.
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 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:
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.
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 if
warunek c + 2 == 12
nie jest sprawdzany, a jedynie poprzez wykonanie symboliczne, mona stwierdzi, e gdyby c
byo 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.
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:
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.
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.
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ę.