Analiza binarna może być wrażliwa na przepływ lub niewrażliwa na przepływ. Wrażliwość na przepływ oznacza, że analiza uwzględnia kolejność instrukcji. Aby to wyjaśnić, spójrz na poniższy przykład w pseudokodzie.
![]()
Kod pobiera liczbę całkowitą bez znaku z danych wprowadzonych przez użytkownika, a następnie wykonuje na niej pewne obliczenia. W tym przykładzie załóżmy, że chcesz przeprowadzić analizę, która próbuje określić potencjalne wartości, jakie może przyjąć każda zmienna; nazywa się to analizą zbiorów wartości. Wersja tej analizy niewrażliwa na przepływ po prostu ustaliłaby, że x może zawierać dowolną wartość, ponieważ otrzymuje ją z danych wprowadzonych przez użytkownika. Chociaż ogólnie rzecz biorąc, x może przyjąć dowolną wartość w pewnym momencie programu, nie dotyczy to wszystkich punktów programu.
Zatem informacje dostarczane przez analizę niewrażliwą na przepływ nie są zbyt precyzyjne, ale analiza ta jest stosunkowo tania pod względem złożoności obliczeniowej. Wersja analizy wrażliwa na przepływ dałaby dokładniejsze wyniki. W przeciwieństwie do wariantu niewrażliwego na przepływ, zapewnia ona oszacowanie możliwego zbioru wartości x w każdym punkcie programu, biorąc pod uwagę poprzednie instrukcje. W (1) analiza stwierdza, że x może mieć dowolną wartość bez znaku, ponieważ jest pobierana z danych wejściowych użytkownika i nie było jeszcze żadnych instrukcji ograniczających wartość x. Jednak w (2) można doprecyzować oszacowanie: ponieważ wartość 5 jest dodawana do x, wiadomo, że od tego momentu x może mieć wartość co najmniej 5. Podobnie, po instrukcji w (3) wiadomo, że x jest co najmniej równe 15. Oczywiście, w rzeczywistości sprawy nie są tak proste, gdzie trzeba radzić sobie ze złożonymi konstrukcjami, takimi jak rozgałęzienia, pętle i (rekurencyjne) wywołania funkcji, zamiast prostego kodu liniowego. W rezultacie analizy wrażliwe na przepływ są zazwyczaj znacznie bardziej złożone i wymagają większych nakładów obliczeniowych niż analizy niewrażliwe na przepływ.








