Staatiline programmi analüüs

Allikas: Vikipeedia

Staatiline programmi analüüs on arvutitarkvara analüüs, mis töötab ilma programmi käivitamata. Programmi töötamise ajal tehtavad analüüsi nimetatakse dünaamiliseks analüüsiks.[1] Staatilist analüüsi rakendatakse peamiselt programmi lä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[muuda | muuda lähteteksti]

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.[2]

Kasvav kommertskasutusala staatilisele analüüsile on ohutuse seisukohast olulistest arvutisüsteemides kasutatava tarkvara omaduste tõestamine ja potentsiaalsete nõrkuste tuvastamine koodis.[3] Järgmised tööstusalad on võtnud staatilise koodi analüüsi kasutusele, et parendada pidevalt keerulisemaks muutuvat tarkvara kvaliteeti.

  1. Meditsiinitarkvara: USA toidu- ja ravimiamet (FDA) on võtnud staatilise analüüsi kasutusele meditsiiniliste seadmete jaoks.[4]
  2. Tuumatarkvara: Ühendkuningriigi Tuumaregulatsioonide Amet (ONR) soovitab kasutada staatilist analüüsi tuumareaktorite kaitsesüsteemides.[5]
  3. Lennundustarkvara (kombinatsioonis dünaamilise analüüsiga).[6]

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.[7] 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.[8]

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[9], ja on üldlevinud tavaks tarkvara ettevõtetes.[10]

Tööriista tüübid[muuda | muuda lähteteksti]

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.[11]

  • Ü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.[12]
  • 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[muuda | muuda lähteteksti]

Andmete põhine staatiline analüüs kasutab suurt hulka olemasolevat koodi, et tuletada programmeerimise reegleid.[13] 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.[14] Näiteks on ära näidatud, et kui kaldutakse liiga palju kõrvale objektorienteeritud rakendusliidesest, siis on tõenäoliselt tegemist veaga.[15] Samuti on võimalik õppida suurest hulgast minevikuparandustest ja -hoiatustest.[13]

Viited[muuda | muuda lähteteksti]

  1. Wichmann, B. A.; Canning, A. A.; Clutterbuck, D. L.; Winsbarrow, L. A.; Ward, N. J.; Marsh, D. W. R. Märts 1995. Industrial Perspective on Static Analysis. Software Engineering Journal:69-75. Originaali arhiivikoopia seisuga 27.09.2011 Vaadatud 05.12.2018. (inglise)
  2. Patrick Briand, Martin Brochet, Thierry Cambois, Emmanuel Coutenceau, Olivier Guetta, Daniel Mainberte, Frederic Mondot, Patrick Munier, Loic Noury, Philippe Spozio, Frederic Retailleau. 2010. Software Quality Objectives for Source Code. Proceedings: Embedded Real Time Software and Systems 2010 Conference. Vaadatud 05.12.2018. (inglise)
  3. Benjamin Livshits 2006. Improving Software Security with Precise Static and Runtime Analysis. Originaali arhiivikoopia seisuga 05.06.2011 Vaadatud 05.12.2018. (inglise)
  4. FDA Infusion Pump Software Safety Research at FDA . Food and Drug Administration Originaali arhiivikoopia seisuga 01.09.2010 Vaadatud 05.12.2018. (inglise)
  5. Computer based safety systems. Originaali arhiivikoopia seisuga 04.01.2013 Vaadatud 05.12.2018. (inglise)
  6. FAA, Certification Authorities Software Team (CAST) Position Paper CAST-9. Considerations for Evaluating Safety Engineering Approaches to Software Assurance. Originaali arhiivikoopia seisuga 06.10.2013 Vaadatud 05.12.2018. (inglise)
  7. VDC Research Defect Prevention for Embedded Software Quality.Originaali arhiivikoopia seisuga 11.04.2012 Vaadatud 05.12.2018. (inglise)
  8. Prause, Christian R., René Reiners, and Silviya Dencheva. 2010. Empirical study of tool support in highly distributed research projects. Global Software Engineering (ICGSE), 2010 5th IEEE International Conference on IEEE Vaadatud 05.12.2018. (inglise)
  9. M. Howard and S. Lipner. The Security Development Lifecycle: SDL: A Process for Developing Demonstrably More Secure Software. Microsoft Press, 2006. {{cite journal}}: tühi viide (juhend)
  10. Achim D. Brucker and Uwe Sodan. Deploying Static Application Security Testing on a Large Scale In GI Sicherheit 2014. Lecture Notes in Informatics, 228, pages 91-101, GI, 2014. Originaali arhiivikoopia seisuga 21.10.2014 Vaadatud 05.12.2018. (inglise)
  11. https://web.archive.org/web/20131228132152/http://www.omg.org/CISQ_compliant_IT_Systemsv.4-3.pdf. Originaali arhiivikoopia seisuga 28.12.2013 Vaadatud 05.12.2018. (inglise)
  12. Bartel, Alexandre; Klein, Jacques; Monperrus, Martin; Le Traon, Yves. 01.06.2014 Static Analysis for Extracting Permission Checks of a Large Scale Framework: The Challenges and Solutions for Analyzing Android. IEEE Transactions on Software Engineering Vaadatud 05.12.2018. (inglise)
  13. 13,0 13,1 Learning from other's mistakes: Data-driven code analysis. www.slideshare.net Vaadatud 05.12.2018. (inglise)
  14. Oh, Hakjoo; Yang, Hongseok; Yi, Kwangkeun 2015. Learning a strategy for adapting a program analysis via bayesian optimisation https://dl.acm.org/citation.cfm?doid=2814270.2814309
  15. Monperrus, Martin; Mezini, Mira. 2013. Detecting missing method calls as violations of the majority rule. ACM Transactions on Software Engineering and Methodology Vaadatud 05.12.2018. (inglise)

Välislingid[muuda | muuda lähteteksti]