Ohjelma -analyysi - Program analysis
| Ohjelmistokehitys |
|---|
In Computer Science , ohjelma-analyysi on prosessi automaattisesti analysoida käyttäytymistä tietokoneohjelmien koskien omaisuutta kuten tarkkuutta, luotettavuutta, turvallisuutta ja elävyyden. Ohjelma -analyysi keskittyy kahteen pääalueeseen: ohjelman optimointi ja ohjelman oikeellisuus . Ensimmäinen keskittyy ohjelman suorituskyvyn parantamiseen ja resurssien käytön vähentämiseen, kun taas jälkimmäinen keskittyy varmistamaan, että ohjelma tekee sen, mitä sen on määrä tehdä.
Ohjelma -analyysi voidaan suorittaa ilman ohjelman suorittamista ( staattinen ohjelma -analyysi ), ajon aikana ( dynaaminen ohjelma -analyysi ) tai molempien yhdistelmänä.
Staattinen ohjelma -analyysi
Ohjelman oikeellisuuden yhteydessä staattinen analyysi voi löytää haavoittuvuuksia ohjelman kehitysvaiheessa. Nämä haavoittuvuudet on helpompi korjata kuin testausvaiheessa havaitut, koska staattinen analyysi johtaa haavoittuvuuden ytimeen.
Koska monet staattisen analyysin muodot ovat laskennallisesti päättämättömiä, mekanismit sen suorittamiseksi eivät aina pääty oikeaan vastaukseen - joko siksi, että ne joskus palauttavat väärän negatiivisen ("ei ongelmia löydetty", kun koodilla on itse asiassa ongelmia) tai väärä positiivinen tai koska he eivät koskaan palauta väärää vastausta, mutta joskus eivät lopeta. Rajoituksistaan huolimatta ensimmäinen mekanismityyppi voi vähentää haavoittuvuuksien määrää, kun taas toinen voi joskus antaa vahvan varmuuden tietyn haavoittuvuusluokan puuttumisesta.
Väärät optimoinnit ovat erittäin epätoivottavia. Ohjelmien optimoinnin yhteydessä on siis kaksi päästrategiaa laskennallisesti päättämättömän analyysin käsittelemiseksi:
- Optimoija, jonka odotetaan valmistuvan suhteellisen lyhyessä ajassa, kuten optimointikääntäjä, voi käyttää katkaistua versiota analyysistä, jonka on taattu valmistuvan rajallisessa ajassa ja joka varmasti löytää vain oikean optimointeja.
- Kolmannen osapuolen optimointityökalu voidaan toteuttaa siten, että se ei koskaan tuota väärää optimointia, mutta myös siten, että se voi joissakin tilanteissa jatkaa toimintaansa loputtomasti, kunnes se löytää (mikä ei ehkä koskaan tapahdu). Tässä tapauksessa työkalua käyttävän kehittäjän on pysäytettävä työkalu ja vältettävä sen käyttämistä uudelleen kyseisellä koodilla (tai mahdollisesti muutettava koodia välttääkseen työkalun kompastumisen).
On kuitenkin olemassa myös kolmas strategia, joka on joskus soveltuu kieliä, jotka eivät ole täysin määritelty, kuten C . Optimoiva kääntäjä voi vapaasti luoda koodin, joka tekee mitä tahansa ajon aikana - jopa kaatumisia - jos se kohtaa lähdekoodin, jonka semantiikka ei ole määritelty käytössä olevalla kielistandardilla.
Ohjausvirtaus
Control-flow -analyysin tarkoituksena on saada tietoa siitä, mitä toimintoja voidaan kutsua ohjelman eri vaiheissa. Kerättyjä tietoja edustaa ohjausvirtauskaavio (CFG), jossa solmut ovat ohjelman ohjeita ja reunat edustavat ohjausvirtaa. Tunnistamalla koodilohkot ja silmukat CFG: stä tulee lähtökohta kääntäjän tekemille optimoinneille.
Tietovirran analyysi
Datavirta-analyysi on tekniikka, joka on suunniteltu keräämään tietoja ohjelman jokaisesta pisteestä ja siitä, miten ne muuttuvat ajan myötä. Tätä tekniikkaa käyttävät kääntäjät usein koodin optimoimiseksi. Yksi tunnetuimmista esimerkeistä tietovirtojen analysoinnista on epäpuhtaustarkistus, joka käsittää kaikki muuttujat, jotka sisältävät käyttäjän toimittamia tietoja-joita pidetään "pilaantuneina" eli turvattomina-ja estää näiden muuttujien käyttämisen, kunnes ne on puhdistettu. Tätä tekniikkaa käytetään usein estämään SQL -injektiohyökkäyksiä . Tahran tarkastus voidaan tehdä staattisesti tai dynaamisesti.
Abstrakti tulkinta
Abstrakti tulkinta mahdollistaa tietojen poiminnan mahdollisesta ohjelman suorittamisesta suorittamatta ohjelmaa. Kääntäjät voivat käyttää näitä tietoja etsiäkseen mahdollisia optimointeja tai varmentaakseen ohjelman tiettyjä vikaluokkia vastaan.
Tyyppijärjestelmät
Tyyppijärjestelmät yhdistävät tyypit ohjelmiin, jotka täyttävät tietyt vaatimukset. Niiden tarkoitus on valita tietyn kielen ohjelmien osajoukko, jota pidetään ominaisuuden mukaan oikeana.
- Tyyppitarkistus - tarkista, hyväksyykö tyyppijärjestelmä ohjelman.
Tyyppitarkistusta käytetään ohjelmoinnissa rajoittamaan ohjelmointikohteen käyttöä ja mitä he voivat tehdä. Tämän tekee kääntäjä tai tulkki. Tyyppitarkistus voi myös auttaa estämään haavoittuvuuksia varmistamalla, että allekirjoitettua arvoa ei liitetä allekirjoittamattomaan muuttujaan. Tyyppitarkistus voidaan tehdä staattisesti (käännöshetkellä), dynaamisesti (ajon aikana) tai molempien yhdistelmällä.
Staattisia tyyppitietoja (joko pääteltyjä tai nimenomaisesti lähdekoodin tyyppimerkintöjen avulla saatuja) voidaan käyttää myös optimointeihin, kuten laatikkomatriisien korvaamiseen pakkaamattomilla matriiseilla.
Tehostejärjestelmät
Tehostejärjestelmät ovat muodollisia järjestelmiä, jotka on suunniteltu edustamaan toimintoa tai menetelmää suorittavia vaikutuksia. Vaikutus kodifioi mitä tehdään ja mitä sillä tehdään - yleensä viitataan vaikutuslajiksi ja alueeksi.
Mallin tarkistus
Mallintarkastuksella tarkoitetaan tiukkoja, muodollisia ja automatisoituja tapoja tarkistaa, täyttääkö malli (joka tässä yhteydessä tarkoittaa koodikappaleen muodollista mallia, vaikka muissa yhteyksissä se voi olla laitteiston malli). erittely. Koodin luontaisen äärellisen tilan luonteen vuoksi, ja sekä spesifikaatio että koodi voidaan muuntaa loogisiksi kaavoiksi, on mahdollista tarkistaa, rikkooko järjestelmä spesifikaatiota tehokkailla algoritmisilla menetelmillä.
Dynaaminen ohjelma -analyysi
Dynaaminen analyysi voi käyttää ohjelman ajonaikaista tietämystä analyysin tarkkuuden lisäämiseksi ja tarjoaa samalla ajonaikaisen suojan, mutta se voi analysoida vain yhden ongelman suorituksen ja saattaa heikentää ohjelman suorituskykyä ajonaikaisten tarkistusten vuoksi.
Testaus
Ohjelmisto on testattava sen laadun varmistamiseksi ja että se toimii odotetulla tavalla luotettavasti, eikä se aiheuta ristiriitoja muiden ohjelmistojen kanssa, jotka voivat toimia sen rinnalla. Testit suoritetaan suorittamalla ohjelma syötteellä ja arvioimalla sen käyttäytyminen ja tuotettu tulos. Vaikkei turvallisuusvaatimukset on määritelty, lisäksi turvallisuuden testaus olisi suoritettava sen varmistamiseksi, että hyökkääjä voi väärentää ohjelmiston ja varastaa tietoja, häiritä ohjelmiston normaalia toimintaa, tai käyttää sitä pivot hyökätä sen käyttäjille.
Seuranta
Ohjelman seuranta tallentaa ja kirjaa erityyppisiä tietoja ohjelmasta, kuten resurssien käytöstä, tapahtumista ja vuorovaikutuksesta, jotta se voidaan tarkistaa epätavallisen käyttäytymisen syiden löytämiseksi tai paikantamiseksi. Lisäksi sitä voidaan käyttää turvatarkastuksiin. Ohjelmien automaattista seurantaa kutsutaan joskus ajonaikaiseksi tarkistukseksi .
Ohjelman leikkaaminen
Ohjelman leikkaamisen tietylle osajoukolle ohjelman leikkaaminen koostuu ohjelman pienentämisestä minimimuotoon, joka tuottaa edelleen valitun toiminnan. Pienennettyä ohjelmaa kutsutaan viipaleeksi ja se on uskollinen esitys alkuperäisestä ohjelmasta määritetyn käyttäytymisen osajoukon alueella. Yleensä viipaleen löytäminen on ratkaisematon ongelma, mutta määrittämällä kohdekäyttäytymisen osajoukon muuttujajoukon arvoilla on mahdollista saada likimääräisiä viipaleita datavirta-algoritmin avulla. Kehittäjät käyttävät yleensä näitä osia virheenkorjauksen aikana virheiden lähteen löytämiseen.
Katso myös
- Automaattinen koodin tarkistus
- Kielipohjainen suojaus
- Monivaihtelu
- Profilointi (tietokoneohjelmointi)
- Ohjelman vahvistus
- Lopettamisanalyysi
Viitteet
Lue lisää
- Agrawal, Hiralal; Horgan, Joseph R.Dynaaminen ohjelmaleikkaus (PDF) .
- Chunlei, Wang; Gang, Zhao; Yiqi, Dai (2009). "Tehokas ohjausvirran suojausanalyysimenetelmä binäärisille suoritettaville tiedostoille". 2009 Toinen IEEE International Conference on Computer Science and Information Technology . s. 272–276. doi : 10.1109/ICCSIT.2009.5234950 . ISBN 978-1-4244-4519-6.
- Nielson, Flemming; Nielson, Hanne Riis; Hankin, Chris (2005). Ohjelma -analyysin periaatteet . Springer Science+Business Media .
Ulkoiset linkit
-
Ohjelman analysointiin liittyvä media Wikimedia Commonsissa