Programmi analüüs

Programmi analüüsimine on arvutiteadusest pärinev toiming, millega hinnatakse lähtekoodi omadusi automaatselt läbiviidavate meetoditega. Selle eesmärk on ennustada programmi töökindlust, optimeeritust ja turvalisust ning vähendada võimalikke käitusajal (ingl "") tekkivate pahatahtlike või tahtmatute tegevuste arvu.
Ülevaade.
Programmi analüüsimise viise kategoriseeritakse üldiselt vastavalt sellele, millal leiab aset automatiseeritud analüüs: staatilise programmianalüüsi meetodid koguvad koodi kohta käiva informatsiooni kompileerimise ajal (st enne käitusaega) ning dünaamiline programmianalüüs uurib lähtekoodi teguviise käitusaja kestel.
Programmi analüüsimist on võimalik kirjeldada kolme etapina:
Kõige optimaalsem viis programmi analüüsi sooritamiseks on lähtekoodil rakendada nii staatilise kui ka dünaamilise analüüsi meetodeid. Need meetodid täiendavad teineteist: staatiline analüüs suudab määrata veaohtliku koodi täpse asukoha ning hoiatada potentsiaalsetest turvariskidest, mis võivad esile tõusta uuritava programmi täitmisel, ning teisest küljest dünaamiline analüüs keskendub spetsiifilisematele probleemidele, mis jäävad staatilisele analüüsile märkamatuks ja mida on võimalik tuvastada ainult käitusaja jooksul (näiteks ühilduvus andmebaaside või interneti teenustega).
Staatiline programmianalüüs.
Staatiline koodi analüüsimine on arvutiprogrammide silumise otstarbeks mõeldud meetod, mida teostatakse väljaspool programmi käitusaega. Analüsaator on eraldiseisev tarkvara, mis teostab arendatava programmi lähtekoodile automaatset läbivaatust selleks, et tagada programmi vastavus valdkonna standarditele. Staatilist analüüsimist kasutatakse tarkvaratehnikas (ingl ') tarkvara arendamisel ja kvaliteeditagatises (ingl ').
Lähtekoodi analüüsimine automaatsete staatiliste tööriistadega on märkimisväärselt kiirem ja efektiivsem kui tavapärane manuaalne koodi ülevaatus, mida viib läbi tarkvaraarendaja. Staatilise programmianalüüsimiseks mõeldud tööriistad töötavad sarnaselt viirusetõrjetarkvaraga, otsides lähtekoodist eelsätestatud mustrite või reeglite põhjal koodikomplekte, mis võivad sisaldada mingisuguseid defekte. Automaatne tööriist ei suuda siiski täieliku kindlusega tuvastada, et koodijupp on vigane ning ikkagi on vajalik arendajal endal tööriista pakutud muudatused üle vaadata.  Tavapärane staatiline koodianalüüs koosneb neljast faasist: eesmärkide seadmine, staatilise analüüsi tööriista käitamine lähtekoodil, lähtekoodi ülevaatus (tööriista väljundi abiga), paranduste sisseviimine.
Staatilist programmianalüüsimist on kasutatud alates 1960. aastatest. Esialgu oli peamine eesmärk kompilaatorite optimeerimine, hiljem hakati staatilist programmianalüüsimist rakendama laialdasemalt vigade leidmiseks, koodi õigsuse määramiseks ning tarkvara arendamise toetuseks IDE-keskkondades (ingl "").
Dünaamiline programmianalüüs.
Dünaamiline programmianalüüs on fokuseeritud käitusaegse programmi parameetrite uurimisele, see tähendab, et informatsiooni töö protsessi kohta kogutakse reaalajas programmi täitmisel. Teatud tunnuste analüüsimiseks eelistatakse dünaamilist meetodit staatilise meetodi asemel, need tunnused on näiteks dünaamiline siduvus (ingl ""), polümorfism ja lõimete efektiivsus. Lisaks aitab dünaamiline analüüs tuvastada ja eemaldada ebavajalikke detaile või komponente koodis, tagada uuritava programmi ühilduvust muu tarkvaraga ning vähendada programmi testimisele minevaid kulutusi.
Dünaamilise programmianalüüsi efektiivsust saab väljendada läbi kahe peamise omaduse:
Dünaamilist programmianalüüsi on võimalik läbi viia arvuti enda protsessoril või virtuaalsel protsessoril ning selleks on vajalik, et algkood ei sisaldaks kompileerimisaegseid vigu. Analüüsi teostamiseks antakse vaatluse all olevale programmile ette hulk andmeid, mille tõttu sõltub analüüsi tõhusus otseselt sisendandmete kvaliteedist ja kogusest. Automaatset analüüsimist sooritavad selleks ettenähtud dünaamilise analüüsi tööriistad ning nagu ka staatilise programmianalüüsi puhul ei ole alati võimalik kõiki vigu avastada. Paljud kaasaegsed IDE-keskkonnad omavad sisseehitatud dünaamilise analüüsi tööriistu, mida on võimalik kasutada samamoodi nagu teisi keskkonna mooduleid.