Staattinen analyysi - tutustumisesta integraatioon

Kyllästynyt loputtomaan koodien tarkistamiseen tai virheenkorjaukseen, mietit joskus, kuinka yksinkertaistaa elämääsi. Ja kun etsit vähän tai törmäät siihen vahingossa, näet taikalauseen: "Staattinen analyysi". Katsotaanpa, mikä se on ja miten se voi olla vuorovaikutuksessa projektisi kanssa.

Staattinen analyysi - tutustumisesta integraatioon
Itse asiassa, jos kirjoitat millä tahansa nykykielellä, suoritit sen ymmärtämättä staattisen analysaattorin läpi. Tosiasia on, että mikä tahansa nykyaikainen kääntäjä tarjoaa, vaikkakin pienen, joukon varoituksia koodin mahdollisista ongelmista. Esimerkiksi kun käännät C++-koodia Visual Studiossa, saatat nähdä seuraavan:

Staattinen analyysi - tutustumisesta integraatioon
Tässä tulosteessa näemme, että muuttuja oli ei ole koskaan käytetty missään toiminnossa. Joten todellisuudessa käytit melkein aina yksinkertaista staattisen koodin analysaattoria. Kuitenkin toisin kuin ammattianalysaattorit, kuten Coverity, Klocwork tai PVS-Studio, kääntäjän antamat varoitukset voivat viitata vain pieniin ongelmiin.

Jos et tiedä varmasti, mitä staattinen analyysi on ja miten se toteutetaan, lue tämä artikkelisaadaksesi lisätietoja tästä menetelmästä.

Miksi tarvitset staattista analyysiä?

Pähkinänkuoressa: kiihtyvyys ja yksinkertaistaminen.

Staattisen analyysin avulla voit löytää koodista paljon erilaisia ​​​​ongelmia: virheellisestä kielikonstruktioiden käytöstä kirjoitusvirheisiin. Esimerkiksi sen sijaan

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

Kirjoitit seuraavan koodin:

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

Kuten näet, viimeisellä rivillä on kirjoitusvirhe. Esimerkiksi PVS-Studio antaa seuraavan varoituksen:

V537 Harkitse y-kohteen käytön oikeellisuuden tarkistamista.

Jos haluat pistää kätesi tähän virheeseen, kokeile valmis esimerkkiä Compiler Explorerissa: *napsauttaa*.

Ja kuten ymmärrät, tällaisiin koodin osiin ei aina ole mahdollista kiinnittää huomiota heti, ja tämän vuoksi voit istua debugaamassa reilun tunnin ajan ihmetellen, miksi kaikki toimii niin oudosti.

Tämä on kuitenkin selkeä virhe. Entä jos kehittäjä kirjoitti epäoptimaalisen koodin, koska hän unohti kielen hienovaraisuuden? Tai jopa salli sen koodissa määrittelemätön käytös? Valitettavasti tällaiset tapaukset ovat täysin yleisiä, ja suurin osa ajasta kuluu virheenkorjaukseen, joka sisältää erityisesti toimivaa koodia, joka sisältää kirjoitusvirheitä, tyypillisiä virheitä tai määrittelemätöntä käyttäytymistä.

Juuri näitä tilanteita varten ilmestyi staattinen analyysi. Tämä on kehittäjän avustaja, joka osoittaa koodin eri ongelmat ja selittää dokumentaatiossa, miksi näin ei tarvitse kirjoittaa, mihin se voi johtaa ja miten se korjataan. Tässä on esimerkki siitä, miltä se saattaa näyttää: *napsauttaa*.

Löydät lisää mielenkiintoisia virheitä, jotka analysaattori voi havaita artikkeleista:

Nyt kun olet lukenut tämän materiaalin ja olet vakuuttunut staattisen analyysin eduista, sinun kannattaa kokeilla sitä. Mutta mistä aloittaa? Kuinka integroida uusi työkalu nykyiseen projektiisi? Ja kuinka esitellä joukkue hänelle? Löydät vastaukset näihin kysymyksiin alta.

Huom. Staattinen analyysi ei korvaa tai peruuta niin hyödyllistä asiaa kuin kooditarkistukset. Se täydentää tätä prosessia ja auttaa havaitsemaan ja korjaamaan kirjoitusvirheet, epätarkkuudet ja vaaralliset mallit etukäteen. On paljon tuottavampaa keskittyä algoritmien ja koodin selkeyden tarkastuksiin sen sijaan, että etsit väärässä paikassa olevia sulkuja tai lue tylsiä vertailufunktioita.

0. Työkaluun tutustuminen

Kaikki alkaa kokeiluversiosta. Itse asiassa on vaikea päättää ottaa jotain mukaan kehitysprosessiin, jos et ole koskaan nähnyt työkalua livenä. Siksi ensimmäinen asia, joka sinun tulee tehdä, on ladata kokeiluversio.

Mitä opit tässä vaiheessa:

  • Mitä tapoja olla vuorovaikutuksessa analysaattorin kanssa?
  • Onko analysaattori yhteensopiva kehitysympäristösi kanssa?
  • Mitä ongelmia projekteissanne on tällä hetkellä?

Kun olet asentanut kaiken tarvitsemasi, sinun tulee ensin tehdä analyysi koko projektista (Windows, Linux, macOS). Visual Studion PVS-Studion tapauksessa näet samanlaisen kuvan (napsautettava):

Staattinen analyysi - tutustumisesta integraatioon
Tosiasia on, että staattiset analysaattorit antavat yleensä valtavan määrän varoituksia projekteista, joissa on suuri koodikanta. Niitä kaikkia ei tarvitse korjata, koska projektisi toimii jo, mikä tarkoittaa, että nämä ongelmat eivät ole kriittisiä. Kuitenkin sinä voit tarkastella mielenkiintoisimpia varoituksia ja korjaa ne tarvittaessa. Tätä varten sinun on suodatettava tulos ja jätettävä vain luotettavimmat viestit. Visual Studion PVS-Studio-laajennuksessa tämä tehdään suodattamalla virhetasojen ja luokkien mukaan. Jos haluat tarkimman tulosteen, jätä vain Korkea и general (myös klikattava):

Staattinen analyysi - tutustumisesta integraatioon
Itse asiassa 178 varoitusta on paljon helpompi nähdä kuin useita tuhansia...

Välilehdissä Keskikokoinen и Matala Usein on hyviä varoituksia, mutta näihin luokkiin kuuluvat ne diagnostiikka, joiden tarkkuus (luotettavuus) on pienempi. Lisätietoja varoitustasoista ja Windows-työskentelyn vaihtoehdoista löytyy täältä: *napsauttaa*.

On syytä käydä läpi mielenkiintoisimmat virheet (ja korjata ne onnistuneesti). vaimentaa jäljellä olevat varoitukset. Tämä on välttämätöntä, jotta uudet varoitukset eivät katoa vanhojen joukkoon. Lisäksi staattinen analysaattori on ohjelmoijan apulainen, ei bugiluettelo. 🙂

1. Automaatio

Tutustumisen jälkeen on aika määrittää laajennukset ja integroida ne CI:hen. Tämä on tehtävä ennen kuin ohjelmoijat alkavat käyttää staattista analysaattoria. Tosiasia on, että ohjelmoija voi unohtaa ottaa analyysin käyttöön tai ei halua tehdä sitä ollenkaan. Tätä varten sinun on tehtävä lopullinen tarkistus, jotta testaamaton koodi ei pääse yleiseen kehityshaaraan.

Mitä opit tässä vaiheessa:

  • Mitä automaatiovaihtoehtoja työkalu tarjoaa;
  • Onko analysaattori yhteensopiva kokoonpanojärjestelmäsi kanssa?

Koska täydellistä dokumentaatiota ei ole olemassa, sinun on joskus kirjoitettava sisään tuki. Tämä on normaalia, ja autamme sinua mielellämme. 🙂

Siirrytään nyt jatkuvan integroinnin (CI) palveluihin. Niihin voidaan asentaa mikä tahansa analysaattori ilman vakavia ongelmia. Tätä varten sinun on luotava erillinen vaihe putkilinjaan, joka yleensä sijaitsee rakennus- ja yksikkötestien jälkeen. Tämä tehdään käyttämällä erilaisia ​​konsoliapuohjelmia. Esimerkiksi PVS-Studio tarjoaa seuraavat apuohjelmat:

Jos haluat integroida analyysin CI:hen, sinun on tehtävä kolme asiaa:

  • Asenna analysaattori;
  • Suorita analyysi;
  • Toimita tuloksia.

Esimerkiksi, jos haluat asentaa PVS-Studion Linuxiin (Debian-base), sinun on suoritettava seuraavat komennot:

wget -q -O - https://files.viva64.com/etc/pubkey.txt 
    | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list
  
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio

Windows-järjestelmissä analysaattoria ei voi asentaa paketinhallinnasta, mutta analysaattori on mahdollista ottaa käyttöön komentoriviltä:

PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications

Voit lukea lisää PVS-Studion käyttöönotosta Windows-järjestelmissä *täällä*.

Asennuksen jälkeen sinun on suoritettava analyysi suoraan. On kuitenkin suositeltavaa tehdä tämä vasta kokoamisen ja testien jälkeen. Tämä johtuu siitä, että staattinen analyysi kestää yleensä kaksi kertaa niin kauan kuin kääntäminen.

Koska käynnistystapa riippuu alustasta ja projektin ominaisuuksista, näytän esimerkkinä vaihtoehdon C++:lle (Linux):

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w

Ensimmäinen komento suorittaa analyysin ja toinen kirjekuoretmuuntaa raportin tekstimuotoon, näyttää sen näytöllä ja palauttaa muun palautuskoodin kuin 0, jos on varoituksia. Tällaista mekanismia voidaan kätevästi käyttää estämään koontiversio, kun siinä on virheilmoituksia. Voit kuitenkin aina poistaa lipun -w äläkä peitä varoituksia sisältävää kokoonpanoa.

Huom. Tekstimuoto on epämukava. Se tarjotaan yksinkertaisesti esimerkkinä. Kiinnitä huomiota mielenkiintoisempaan raporttimuotoon - FullHtml. Sen avulla voit selata koodia.

Voit lukea lisää CI:n analyysin määrittämisestä artikkelista "PVS-Studio ja jatkuva integrointi" (Windows) tai "Kuinka ottaa PVS-Studio käyttöön Travis CI:ssä" (Linux).

Okei, olet määrittänyt analysaattorin koontipalvelimelle. Nyt, jos joku latasi testaamattoman koodin, vahvistusvaihe epäonnistuu ja voit havaita ongelman, mutta tämä ei ole täysin kätevää, koska on tehokkaampaa tarkistaa projekti ei sen jälkeen, kun haarat on yhdistetty, vaan ennen sitä, vetopyyntövaiheessa. A.

Yleensä vetopyyntöanalyysin määrittäminen ei eroa paljon tavallisesta CI:n analyysin käynnistämisestä. Lukuun ottamatta tarvetta saada luettelo muuttuneista tiedostoista. Nämä voidaan yleensä saada tiedustelemalla haarojen välisiä eroja gitillä:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

Nyt sinun on välitettävä tämä tiedostoluettelo analysaattorille syötteenä. Esimerkiksi PVS-Studiossa tämä on toteutettu lipulla -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

Saat lisätietoja vetopyyntöjen analysoinnista *täällä*. Vaikka CI ei olisi artikkelissa mainittujen palveluiden luettelossa, tämäntyyppisen analyysin teorialle omistettu yleinen osio on hyödyllinen.

Asettamalla vetopyyntöjen analyysin voit estää varoituksia sisältävät sitoumukset ja luoda siten rajan, jota testaamaton koodi ei voi ylittää.

Tämä kaikki on varmasti hyvä, mutta haluaisin nähdä kaikki varoitukset yhdessä paikassa. Ei vain staattisesta analysaattorista, vaan myös yksikkötesteistä tai dynaamisesta analysaattorista. Tätä varten on olemassa erilaisia ​​palveluita ja laajennuksia. Esimerkiksi PVS-Studio on laajennus integroitavaksi SonarQubeen.

2. Integrointi kehittäjäkoneisiin

Nyt on aika asentaa ja konfiguroida analysaattori jokapäiväistä kehityskäyttöä varten. Tässä vaiheessa olet jo tutustunut useimpiin työskentelytapoihin, joten tätä voidaan kutsua helpoimmaksi osaksi.

Yksinkertaisina vaihtoehtona kehittäjät voivat asentaa tarvittavan analysaattorin itse. Tämä vie kuitenkin paljon aikaa ja häiritsee heitä kehityksestä, joten voit automatisoida tämän prosessin käyttämällä asennusohjelmaa ja tarvittavia lippuja. PVS-Studiolle on erilaisia liput automaattista asennusta varten. Aina löytyy kuitenkin paketinhallintaohjelmia, esimerkiksi Chocolatey (Windows), Homebrew (macOS) tai kymmeniä vaihtoehtoja Linuxille.

Sitten sinun on asennettava tarvittavat laajennukset, esimerkiksi Visual Studio, IDEA, Ratsastaja ja niin edelleen

3. Päivittäinen käyttö

Tässä vaiheessa on aika sanoa muutama sana tavoista nopeuttaa analysaattoria päivittäisessä käytössä. Koko projektin täydellinen analyysi vie paljon aikaa, mutta kuinka usein muutamme koodia koko projektin läpi kerralla? Tuskin ole olemassa niin suurta refaktorointia, että se vaikuttaisi välittömästi koko koodikantaan. Kerralla muutettavien tiedostojen määrä ylittää harvoin tusinan verran, joten niitä on järkevää analysoida. Tällaista tilannetta varten on olemassa inkrementaalinen analyysitila. Älä pelkää, tämä ei ole toinen työkalu. Tämä on erityinen tila, jonka avulla voit analysoida vain muuttuneita tiedostoja ja niiden riippuvuuksia, ja tämä tapahtuu automaattisesti rakentamisen jälkeen, jos työskentelet IDE:ssä, johon on asennettu laajennus.

Jos analysaattori havaitsee ongelmia äskettäin muutetussa koodissa, se raportoi siitä itsenäisesti. Esimerkiksi PVS-Studio kertoo sinulle tästä hälytyksellä:

Staattinen analyysi - tutustumisesta integraatioon
Tietenkään ei riitä, että kehittäjät käskevät käyttämään työkalua. Meidän on jotenkin kerrottava heille, mitä se on ja miten se on. Tässä on esimerkiksi artikkeleita PVS-Studion pikakäynnistyksestä, mutta voit löytää samankaltaisia ​​opetusohjelmia mille tahansa haluamallesi työkalulle:

Tällaiset artikkelit tarjoavat kaikki päivittäiseen käyttöön tarvittavat tiedot eivätkä vie paljon aikaa. 🙂

Jopa työkaluun tutustumisen vaiheessa tukahduimme monia varoituksia yhden ensimmäisten julkaisujen aikana. Valitettavasti staattiset analysaattorit eivät ole täydellisiä, joten ajoittain ne antavat vääriä positiivisia tuloksia. Niiden tukahduttaminen on yleensä helppoa; esimerkiksi Visual Studion PVS-Studio-laajennuksessa sinun tarvitsee vain napsauttaa yhtä painiketta:

Staattinen analyysi - tutustumisesta integraatioon
Voit kuitenkin tehdä muutakin kuin vain tukahduttaa ne. Voit esimerkiksi ilmoittaa ongelmasta tukeen. Jos väärä positiivinen voidaan korjata, tulevissa päivityksissä voit huomata, että joka kerta on vähemmän ja vähemmän vääriä positiivisia koodikantaasi.

Integroinnin jälkeen

Olemme siis käyneet läpi kaikki staattisen analyysin integroinnin vaiheet kehitysprosessiin. Huolimatta tällaisten työkalujen määrittämisen tärkeydestä CI:ssä, tärkein paikka niiden käyttämiseen on kehittäjän tietokone. Loppujen lopuksi staattinen analysaattori ei ole tuomari, joka sanoo jossain kaukana sinusta, että koodi ei ole hyvä. Päinvastoin, se on avustaja, joka kertoo, jos olet väsynyt, ja muistuttaa sinua, jos olet unohtanut jotain.

Totta, ilman säännöllistä käyttöä staattinen analyysi ei todennäköisesti yksinkertaista merkittävästi kehitystä. Loppujen lopuksi sen päähyöty kehittäjälle ei ole niinkään monimutkaisten ja kiistanalaisten koodin osien etsiminen, vaan niiden varhainen havaitseminen. Hyväksy, että ongelman löytäminen sen jälkeen, kun muokkaukset on lähetetty testattavaksi, ei ole vain epämiellyttävää, vaan myös erittäin aikaa vievää. Säännöllisesti käytettynä staattinen analyysi tarkastelee jokaisen muutoksen suoraan tietokoneellesi ja raportoi epäilyttävistä paikoista koodin käsittelyn aikana.

Ja jos sinä tai kollegasi et ole vielä varma, kannattaako analysaattoria ottaa käyttöön, suosittelen, että aloitat nyt artikkelin lukemisen "Syitä staattisen koodin analysaattorin PVS-Studion käyttöönottamiseksi kehitysprosessissaSe käsittelee kehittäjien tyypillisiä huolia siitä, että staattinen analyysi vie heidän aikaa ja niin edelleen.

Staattinen analyysi - tutustumisesta integraatioon

Jos haluat jakaa tämän artikkelin englanninkielisen yleisön kanssa, käytä käännöslinkkiä: Maxim Zvyagintsev. Staattinen analyysi: aloittamisesta integrointiin.

Lähde: will.com

Lisää kommentti