Staatiline programmi analüüs

**Staatiline programmi analüüs** onarvutitarkvara analüüs, mis töötab ilma programmi käivitamata. Programmi töötamise ajal tehtavad analüüsi nimetataksedünaamiliseks analüüsiks. Staatilist analüüsi rakendatakse peamiselt programmilähtekoodile või objektkoodile.

Terminit rakendatakse tavaliselt analüüsile, mida teeb automatiseeritud tööriist. Inimese tehtud analüüsi kutsutakse programmi mõistmiseks või koodi ülevaatuseks. Koodi ülevaatusel kasutatakse ka tarkvara inspekteerimist ja tarkvara süstemaatilist läbimist.

## Põhimõtted
Analüüsi keerukus sõltub sellest, kas koodi töötlev analüüsi tööriist käsitleb ainult individuaalsete lausete ja deklaratsioonide käitumist või tervet lähtekoodi terviklikuna. Analüüsist saadud informatsiooni kasutuskohad varieeruvad potentsiaalsete vigade esiletõstmisest (näiteks lint-tööriist) kuni formaalsete meetoditeni, mis matemaatiliselt tõestavad programmi omadusi (näiteks kas programmi käitumine vastab spetsifikatsioonile).

Tarkvara näitajaid ja pöördprojekteerimist võib nimetada staatilise analüüsi vormideks. Tarkvara näitajate tuletamist ja 
staatilist analüüsi tarnitakse aina rohkem koos, eriti manussüsteemide loomises, defineerides niinimetatud tarkvara kvaliteedi objektiivid.

Kasvav kommertskasutusala staatilisele analüüsile on ohutuse seisukohast olulistest arvutisüsteemides kasutatava tarkvara omaduste tõestamine ja potentsiaalsete nõrkuste tuvastamine koodis. Järgmised tööstusalad on võtnud staatilise koodi analüüsi kasutusele, et parendada pidevalt keerulisemaks muutuvat tarkvara kvaliteeti.
# Meditsiinitarkvara: USA toidu- ja ravimiamet (FDA) on võtnud staatilise analüüsi kasutusele meditsiiniliste seadmete jaoks.
# Tuumatarkvara: Ühendkuningriigi Tuumaregulatsioonide Amet (ONR) soovitab kasutada staatilist analüüsi tuumareaktorite kaitsesüsteemides.
# Lennundustarkvara (kombinatsioonis dünaamilise analüüsiga).

Aastal 2012 VDC Researchi tehtud uuringust selgus, et 28,7% küsitletud manussüsteemide tarkvarainseneridest kasutavad
staatilise analüüsi tööriistu ja 39,7% vastanutest eeldavad võtta need tööriistad 2 aasta jooksul kasutusse. Aastal 2010 tehtud uuringu, kus küsitleti Euroopa teadusprojektides töötavaid arendajaid, leiti, et 60% intervjueeritavatest on kasutanud vähemalt harilikke integreeritud arenduskeskkondadesse sisseehitatud staatilisi
analüsaatoreid. See-eest ainult 10% vastanutest kasutasid muud analüüsi tööriista lisaks.

Rakenduse turvalisuse tööstuses kasutatakse lisaks ka terminit Staatiline Rakenduse Turvatestimine (ingl *Static Application Security Testing* ehk SAST). SAST on oluline osa Turvalisuse Arenduse Elutsüklist (ingl *Security Development Lifecycle* ehk SDL), näiteks Microsofti SDL, ja on üldlevinud tavaks tarkvara ettevõtetes.

## Tööriista tüübid
Object Management Group (OMG) avaldas uuringu erinevat tüüpi tarkvara analüüsidest, mis on vajalikud tarkvara kvaliteedi mõõtmiseks ja hindamiseks. Uuring kirjeldab kolme erinevat tarkvara analüüsi taset.

*Üksuse taseme analüüs võtab aset kindlas programmis või alamrutiinis, teadmata ülejäänud programmi kontekst.
*Tehnoloogia taseme analüüs võtab arvesse mõjud üksuste programmide vahel, et saada terviklikum ja tähenduslikum ülevaade programmist. Näiteks on võimalik staatiliselt analüüsida Androidi tehnoloogilist pinu, et leida ligipääsu vigu.
*Süsteemse taseme analüüs võtab arvesse üksuste programmide vahelist mõju ilma, et oleks piiratud ühele kindlale tehnoloogiale või programmeerimiskeelele.

Tarkvara analüüsile on võimalik defineerida lisaks veel üks tase.
*Missiooni/äri taseme analüüs võtab arvesse äri kihi tingimused, reeglid ja protsessid, mis on implementeeritud tarkvara süsteemi osana ettevõtte või programmi kihi tegevustest.

## Andmete põhine staatiline analüüs
Andmete põhine staatiline analüüs kasutab suurt hulka olemasolevat koodi, et tuletada programmeerimise reegleid. Näiteks on võimalik kasutada kõiki Java avatud lähtekoodiga pakette GitHubis, et õppida head analüüsistrateegiat. Reeglite tuletamiseks on võimalik rakendada masinõppe tehnikaid. Näiteks on ära näidatud, et kui kaldutakse liiga palju kõrvale objektorienteeritud rakendusliidesest, siis on tõenäoliselt tegemist veaga. Samuti on võimalik õppida suurest hulgast minevikuparandustest ja -hoiatustest.

## Viited

## Välislingid
* Code Quality Improvement - Coding standards conformance checking (DDJ)
* Competition on Software Verification (SV-COMP)
* Episode 59: Static Code Analysis Saate *Software Engineering Radio* intervjuu (Taskuhääling)
* Implementing Automated Governance for Coding Standards Õpetatakse, miks ja kuidas integreerida staatilist koodis analüüsi ehitamisprotsessi
* Integrate static analysis into a software development process
* The SAMATE Project, kogum automatiseeritud staatilise analüüsi tööriistu