Statická analýza kódu

Statická analýza kódu je sada metod pro analýzu počítačových programů, které jsou aplikovány bez jejich spuštění (softwarová analýza, která je aplikována na spuštěné programy se nazývá dynamická softwarová analýza). V nejběžnějších případech je analýza prováděna na nějaké verzi zdrojových kódů, nebo formě objektových kódů. Termín analýza programů je většinou spojen s nástroji pro automatickou analýzu, nebo s lidskou analýzou, která se nazývá program comprehension (pochopení programu) nebo posouzení kódu (code review).

Důvody

editovat

Náročnost statické analýzy vykonávané danými nástroji se liší od těch, které berou v úvahu pouze chování jednotlivých deklarací a definicí, a těch, které obsahují kompletní zdrojový kód programu. Informace získané z analýzy daného programu mohou být různé od zdůraznění možných chyb v kódu až po metody, které matematicky vyjadřují vlastnosti týkající se daného programu.

Softwarová metrika a reverzní inženýrství mohou být popsány jako jedny z možných forem softwarové analýzy. Softwarová metrika a statická analýza jsou společně použity zejména při tvorbě vestavěných (embedded) systémů, definující tzv. kvalitu softwarových cílů. Nárůst komerčního použití statické analýzy nastal z důvodů potřeby ověření vlastností programů používaných v počítačových systémech, které jsou z hlediska počítačové bezpečnosti zranitelné. Například následující průmyslová odvětví používají statickou analýzu kódu jako prostředek ke zlepšení kvality stále náročnějších a složitějších programů.

  1. Zdravotnický software: Americký Úřad pro kontrolu potravin a léčiv (FDA) použil statickou analýzu pro lékařský přístroj již v roce 2010.
  2. Jaderný software: Ve Velké Británii Healt and Safety Executive doporučuje použití statické analýzy k ochraně systémů jaderných reaktorů.
  3. Letecký software použití v kombinaci s dynamickou analýzou.

Studie provedená VDC Research z roku 2012 říká, že v současné době 28,7% embedded software inženýrů využívá nástrojů pro statickou analýzu a 39,7% očekávají jejich použití během dvou let.

Druhy nástrojů

editovat

OMG (Object Management Group) nedávno zveřejnila studii týkající se typů softwarových analýz potřebných pro měření a hodnocení kvality softwaru. Tento dokument "How to Deliver Resilient, Secure, Efficient, and Easily Changed IT Systems in Line with CISQ REcommendations" popisuje čtyři úrovně softwarové analýzy.

  1. Jednotková úroveň (Unit Level) – Analýza, která je vykonávána v rámci určitého programu nebo podprogramu, bez připojení do kontextu tohoto programu.
  2. Technologická úroveň (Technology Level) – Analýza, zkoumá interakce mezi jednotlivými částmi programu, aby získala pohled na celkovou strukturu programu s cílem nalézt chyby a vyhnout se tak budoucím problémům.
  3. Systémová úroveň (System Level) – Analýza, která zkoumá interakce mezi jednotlivými částmi programu, ale nezávisle na použitém programovacím jazyce nebo použité technologii.
  4. Účelová/Obchodní úroveň (Mission/Business Level) – Analýza, která zkoumá obchodní a účelové vrstvy, pravidla a procesy, které jsou implementovány do softwarového systému pro činnost v rámci podniku nebo svého účelu. Tyto prvky jsou implementovány aniž by byly omezeny na jednu specifickou technologii nebo programovací jazyk a v mnoha případech jsou distribuovány přes více jazyků, ale jsou staticky extrahovány a analyzovány pro pochopení fungování systému.

Formální metody

editovat

Formální metody označují termín používaný v analýze softwaru (a počítačového hardwaru), jejichž výsledky jsou získány pomocí složitých matematických operací. Tyto matematické techniky zahrnují metody jako například denotační sémantika, axiomatická sémantika, abstraktní interpretace a jiné. Ale ani těmito technikami nelze vždy najít všechny možné běhové (run-time) chyby: neexistuje žádný mechanismus, který vždy pravdivě zodpoví, zda libovolný program může nebo nemusí vykazovat běhové chyby.

Reference

editovat

V tomto článku byl použit překlad textu z článku Static program analysis na anglické Wikipedii.