Statyczna analiza programu - Static program analysis

Analiza statyczna programu to analiza oprogramowania komputerowego wykonywana bez faktycznego wykonywania programów, w przeciwieństwie do analizy dynamicznej , która jest analizą wykonywaną na programach podczas ich wykonywania. W większości przypadków analiza jest wykonywana na jakiejś wersji kodu źródłowego , aw innych przypadkach na jakiejś postaci kodu wynikowego .

Termin ten jest zwykle stosowany do analizy wykonywanej przez zautomatyzowane narzędzie , przy czym analiza wykonywana przez człowieka jest nazywana zrozumieniem programu, zrozumieniem programu lub przeglądem kodu . Inspekcje oprogramowania i instruktaże oprogramowania są również wykorzystywane w tym drugim przypadku.

Racjonalne uzasadnienie

Zaawansowanie analizy wykonywanej przez narzędzia różni się od tych, które uwzględniają tylko zachowanie poszczególnych instrukcji i deklaracji, po takie, które uwzględniają w swojej analizie pełny kod źródłowy programu. Zastosowania informacji uzyskanych z analizy są różne, od wskazywania możliwych błędów kodowania (np. narzędzie lint ) po metody formalne, które matematycznie udowadniają właściwości danego programu (np. jego zachowanie jest zgodne z jego specyfikacją).

Metryki oprogramowania i inżynierię odwrotną można opisać jako formy analizy statycznej. Wyprowadzanie metryk oprogramowania i analiza statyczna są coraz częściej stosowane razem, zwłaszcza przy tworzeniu systemów wbudowanych, poprzez definiowanie tzw. celów jakości oprogramowania .

Rosnące komercyjne wykorzystanie analizy statycznej polega na weryfikacji właściwości oprogramowania używanego w systemach komputerowych o krytycznym znaczeniu dla bezpieczeństwa oraz lokalizowaniu potencjalnie podatnego kodu. Na przykład następujące branże zidentyfikowały wykorzystanie statycznej analizy kodu jako sposobu na poprawę jakości coraz bardziej wyrafinowanego i złożonego oprogramowania:

  1. Oprogramowanie medyczne : Amerykańska Agencja ds. Żywności i Leków (FDA) zidentyfikowała zastosowanie analizy statycznej w urządzeniach medycznych.
  2. Oprogramowanie jądrowe: W Wielkiej Brytanii Urząd Regulacji Jądrowych (ONR) zaleca stosowanie analizy statycznej w systemach ochrony reaktorów .
  3. Oprogramowanie lotnicze (w połączeniu z analizą dynamiczną )
  4. Motoryzacja i maszyny (funkcjonalne funkcje bezpieczeństwa stanowią integralną część każdej fazy rozwoju produktu motoryzacyjnego, ISO 26262 , rozdział 8.)

Badanie przeprowadzone w 2012 r. przez VDC Research wykazało, że 28,7% ankietowanych inżynierów oprogramowania wbudowanego używa obecnie narzędzi do analizy statycznej, a 39,7% spodziewa się, że użyje ich w ciągu 2 lat. Badanie z 2010 r. wykazało, że 60% ankietowanych programistów biorących udział w europejskich projektach badawczych korzystało przynajmniej z podstawowych wbudowanych w IDE analizatorów statycznych. Jednak tylko około 10% korzystało z dodatkowego innego (i być może bardziej zaawansowanego) narzędzia analitycznego.

W branży bezpieczeństwa aplikacji używana jest również nazwa Static application security testing (SAST). SAST jest ważną częścią cykli rozwoju zabezpieczeń (SDL), takich jak SDL zdefiniowany przez Microsoft i powszechną praktyką w firmach programistycznych.

Rodzaje narzędzi

OMG ( Object Management Group ) opublikowało badanie dotyczące rodzajów analizy oprogramowania wymaganej do pomiaru i oceny jakości oprogramowania . Ten dokument „Jak dostarczyć odporne, bezpieczne, wydajne i łatwo modyfikowalne systemy IT zgodnie z zaleceniami CISQ” opisuje trzy poziomy analizy oprogramowania.

Poziom jednostki
Analiza, która odbywa się w ramach określonego programu lub podprogramu, bez łączenia się z kontekstem tego programu.
Poziom technologii
Analiza uwzględniająca interakcje między programami jednostkowymi, aby uzyskać bardziej holistyczny i semantyczny obraz całego programu w celu znalezienia problemów i uniknięcia oczywistych fałszywych alarmów. Na przykład można statycznie przeanalizować stos technologii Androida, aby znaleźć błędy uprawnień.
Poziom systemu
Analiza uwzględniająca interakcje między programami jednostkowymi, ale bez ograniczania się do jednej konkretnej technologii lub języka programowania.

Można zdefiniować kolejny poziom analizy oprogramowania.

Poziom misji/biznesu
Analiza uwzględniająca warunki, reguły i procesy warstwy biznesowej/misji, które są realizowane w ramach systemu oprogramowania pod kątem jego działania w ramach działań w warstwie przedsiębiorstwa lub programu/misji. Elementy te są implementowane bez ograniczania się do jednej konkretnej technologii lub języka programowania, aw wielu przypadkach są dystrybuowane w wielu językach, ale są statycznie wyodrębniane i analizowane w celu zrozumienia systemu w celu zapewnienia misji.

Metody formalne

Metody formalne to termin stosowany do analizy oprogramowania (i sprzętu komputerowego ), której wyniki uzyskuje się wyłącznie dzięki zastosowaniu rygorystycznych metod matematycznych. Matematyczne techniki stosowane obejmują denotational semantykę , aksjomatyczne semantyki , semantyka operacyjnych i abstrakcyjnej interpretacji .

Poprzez proste sprowadzenie do problemu zatrzymania , możliwe jest udowodnienie tego (dla dowolnego kompletnego języka Turinga ), znalezienie wszystkich możliwych błędów w czasie wykonywania w dowolnym programie (lub ogólniej wszelkiego rodzaju naruszenia specyfikacji końcowego wyniku program) jest nierozstrzygalny : nie ma mechanicznej metody, która może zawsze odpowiedzieć zgodnie z prawdą, czy dowolny program może, czy nie, wykazywać błędy w czasie wykonywania. Wynik ten pochodzi z prac Churcha , Gödla i Turinga z lat 30. (patrz: Problem zatrzymania i twierdzenie Rice'a ). Podobnie jak w przypadku wielu pytań nierozstrzygalnych, nadal można próbować podać przydatne przybliżone rozwiązania.

Niektóre z technik implementacji formalnej analizy statycznej obejmują:

Analiza statyczna oparta na danych

Analiza statyczna oparta na danych wykorzystuje duże ilości kodu do wywnioskowania reguł kodowania. Na przykład, można wykorzystać wszystkie otwarte pakiety Java na GitHubie, aby nauczyć się dobrej strategii analizy. Wnioskowanie o regułach może wykorzystywać techniki uczenia maszynowego. Na przykład wykazano, że jeśli ktoś za bardzo odbiega od sposobu korzystania z API zorientowanego obiektowo, prawdopodobnie jest to błąd. Możliwe jest również uczenie się na podstawie dużej liczby wcześniejszych poprawek i ostrzeżeń.

Zobacz też

Bibliografia

Dalsza lektura

Zewnętrzne linki