Statinė analizė – nuo ​​įvado iki integravimo

Pavargę nuo nesibaigiančio kodo peržiūros ar derinimo, kartais galvojate, kaip supaprastinti savo gyvenimą. Ir šiek tiek paieškojus ar netyčia užklydus matosi magiška frazė: „Statinė analizė“. Pažiūrėkime, kas tai yra ir kaip jis gali sąveikauti su jūsų projektu.

Statinė analizė – nuo ​​įvado iki integravimo
Tiesą sakant, jei rašote kokia nors šiuolaikine kalba, tada, net nesuvokdami, perleidote tai per statinį analizatorių. Faktas yra tas, kad bet kuris šiuolaikinis kompiliatorius pateikia, nors ir nedidelį, įspėjimų apie galimas kodo problemas rinkinį. Pavyzdžiui, kai kompiliuojate C++ kodą Visual Studio, galite matyti:

Statinė analizė – nuo ​​įvado iki integravimo
Šiame išvestyje matome, kad kintamasis buvo niekur funkcijoje nebuvo naudojamas. Taigi iš tikrųjų jūs beveik visada naudojote paprastą statinio kodo analizatorių. Tačiau skirtingai nei profesionalūs analizatoriai, tokie kaip Coverity, Klocwork ar PVS-Studio, kompiliatoriaus pateikiami įspėjimai gali nurodyti tik nedidelę problemų spektrą.

Jei tiksliai nežinote, kas yra statinė analizė ir kaip ją įgyvendinti, perskaitykite šį straipsnįNorėdami sužinoti daugiau apie šią metodiką.

Kodėl jums reikia statinės analizės?

Trumpai tariant: pagreitis ir supaprastinimas.

Statinė analizė leidžia rasti daug įvairių problemų kode: nuo neteisingo kalbos konstrukcijų vartojimo iki rašybos klaidų. Pavyzdžiui, vietoj

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

Jūs parašėte šį kodą:

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

Kaip matote, paskutinėje eilutėje yra rašybos klaida. Pavyzdžiui, PVS-Studio pateikia šį įspėjimą:

V537 Apsvarstykite galimybę peržiūrėti „y“ elemento naudojimo teisingumą.

Jei norite įžvelgti šią klaidą, išbandykite paruoštą pavyzdį „Compiler Explorer“: *spustelėkite*.

Ir kaip supranti, ne visada galima iš karto atkreipti dėmesį į tokias kodo dalis ir dėl to gali gerą valandą sėdėti derindamas, galvodamas, kodėl viskas taip keistai veikia.

Tačiau tai akivaizdi klaida. Ką daryti, jei kūrėjas parašė neoptimalų kodą, nes pamiršo kai kurias kalbos subtilybes? Ar net leido tai kode neapibrėžtas elgesys? Deja, tokie atvejai yra visiškai įprasti ir didžioji laiko dalis praleidžiama derinant specialiai veikiantį kodą, kuriame yra rašybos klaidų, tipinių klaidų ar neapibrėžto elgesio.

Būtent šioms situacijoms atsirado statinė analizė. Tai asistentas kūrėjui, kuris nurodys įvairias kode esančias problemas ir paaiškins dokumentacijoje, kodėl taip rašyti nebūtina, prie ko tai gali privesti ir kaip tai ištaisyti. Štai pavyzdys, kaip tai gali atrodyti: *spustelėkite*.

Įdomesnių klaidų, kurias analizatorius gali aptikti, rasite straipsniuose:

Dabar, kai perskaitėte šią medžiagą ir įsitikinote statinės analizės pranašumais, galbūt norėsite ją išbandyti. Bet nuo ko pradėti? Kaip integruoti naują įrankį į dabartinį projektą? O kaip jam supažindinti komandą? Atsakymus į šiuos klausimus rasite žemiau.

Pastaba. Statinė analizė nepakeičia ir neatšaukia tokio naudingo dalyko kaip kodo peržiūros. Jis papildo šį procesą, padeda iš anksto pastebėti ir ištaisyti rašybos klaidas, netikslumus ir pavojingus dizainus. Daug produktyviau yra sutelkti dėmesį į kodų peržiūras apie algoritmus ir kodo aiškumą, o ne ieškoti netinkamai išdėstytų skliaustų ar skaityti nuobodžias palyginimo funkcijas.

0. Susipažinimas su priemone

Viskas prasideda nuo bandomosios versijos. Iš tiesų, sunku nuspręsti ką nors įtraukti į kūrimo procesą, jei niekada anksčiau nematėte įrankio gyvai. Todėl pirmas dalykas, kurį turėtumėte padaryti, yra atsisiųsti bandomoji versija.

Ko išmoksite šiame etape:

  • Kokie yra sąveikos su analizatoriumi būdai;
  • Ar analizatorius suderinamas su jūsų kūrimo aplinka?
  • Kokių problemų šiuo metu kyla jūsų projektuose?

Įdiegę viską, ko reikia, pirmas dalykas, kurį turėtumėte padaryti, tai atlikti viso projekto analizę (Windows, Linux, macOS). PVS-Studio atveju Visual Studio pamatysite panašų paveikslėlį (spustelėkite):

Statinė analizė – nuo ​​įvado iki integravimo
Faktas yra tas, kad statiniai analizatoriai paprastai pateikia daugybę įspėjimų apie projektus, turinčius didelę kodų bazę. Nereikia jų visų taisyti, nes jūsų projektas jau veikia, o tai reiškia, kad šios problemos nėra kritinės. Tačiau jūs galite pažvelgti į įdomiausius įspėjimus ir prireikus juos pataisykite. Norėdami tai padaryti, turite filtruoti išvestį ir palikti tik patikimiausius pranešimus. Visual Studio PVS-Studio papildinyje tai atliekama filtruojant pagal klaidų lygius ir kategorijas. Norėdami gauti tiksliausią išvestį, palikite tik aukštas и bendras (taip pat galima spustelėti):

Statinė analizė – nuo ​​įvado iki integravimo
Iš tiesų, 178 įspėjimai yra daug lengviau matomi nei keli tūkstančiai...

Skirtuke vidutinis и žemas Dažnai yra gerų įspėjimų, tačiau šios kategorijos apima diagnostiką, kurios tikslumas (patikimumas) yra mažesnis. Daugiau informacijos apie įspėjimo lygius ir darbo su Windows parinktis rasite čia: *spustelėkite*.

Sėkmingai peržiūrėti įdomiausias klaidas (ir sėkmingai jas ištaisyti) verta išjungti likusius įspėjimus. Tai būtina, kad nauji įspėjimai nepasimestų tarp senųjų. Be to, statinis analizatorius yra programuotojo asistentas, o ne klaidų sąrašas. 🙂

1. Automatika

Susipažinus, laikas konfigūruoti papildinius ir integruotis į CI. Tai turi būti padaryta prieš programuotojams pradedant naudoti statinį analizatorių. Faktas yra tas, kad programuotojas gali pamiršti įjungti analizę arba visai nenorėti to daryti. Norėdami tai padaryti, turite atlikti galutinį visko patikrinimą, kad nepatikrintas kodas nepatektų į bendrą kūrimo šaką.

Ko išmoksite šiame etape:

  • Kokias automatizavimo galimybes suteikia įrankis;
  • Ar analizatorius suderinamas su jūsų surinkimo sistema?

Kadangi tobulos dokumentacijos nėra, kartais tenka rašyti parama. Tai normalu ir mes džiaugiamės galėdami jums padėti. 🙂

Dabar pereikime prie nuolatinės integracijos (CI) paslaugų. Bet koks analizatorius gali būti įdiegtas į juos be jokių rimtų problemų. Norėdami tai padaryti, dujotiekyje turite sukurti atskirą etapą, kuris paprastai yra po konstrukcijos ir įrenginio bandymų. Tai atliekama naudojant įvairias konsolės programas. Pavyzdžiui, PVS-Studio teikia šias paslaugas:

Norėdami integruoti analizę į CI, turite atlikti tris dalykus:

  • Įdiekite analizatorių;
  • Vykdyti analizę;
  • Pateikite rezultatus.

Pavyzdžiui, norėdami įdiegti PVS-Studio Linux (Debian-base), turite paleisti šias komandas:

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

Sistemose, kuriose veikia „Windows“, nėra galimybės įdiegti analizatoriaus iš paketų tvarkyklės, tačiau galima įdiegti analizatorių iš komandinės eilutės:

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

Galite perskaityti daugiau apie PVS-Studio diegimą sistemose, kuriose veikia Windows *čia*.

Įdiegę analizę turite paleisti tiesiogiai. Tačiau rekomenduojama tai padaryti tik atlikus kompiliavimą ir atlikus testus. Taip yra todėl, kad statinė analizė paprastai trunka du kartus ilgiau nei kompiliavimas.

Kadangi paleidimo metodas priklauso nuo platformos ir projekto funkcijų, kaip pavyzdį parodysiu C++ (Linux) parinktį:

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

Pirmoji komanda atliks analizę, o antroji vokaikonvertuoja ataskaitą į teksto formatą, parodo ją ekrane ir grąžina kitokį nei 0 grąžinimo kodą, jei yra įspėjimų. Toks mechanizmas gali būti patogiai naudojamas blokuoti kūrimą, kai yra klaidų pranešimų. Tačiau vėliavą visada galite pašalinti -w ir neužblokuokite agregato, kuriame yra įspėjimų.

Pastaba. Teksto formatas nepatogus. Jis pateikiamas tiesiog kaip pavyzdys. Atkreipkite dėmesį į įdomesnį ataskaitos formatą – FullHtml. Tai leidžia naršyti per kodą.

Daugiau apie CI analizės nustatymą galite perskaityti straipsnyje "PVS-studija ir nuolatinė integracija" (Windows) arba "Kaip nustatyti PVS-Studio Travis CI“ (Linux).

Gerai, sukonfigūravote analizatorių kūrimo serveryje. Dabar, jei kas nors įkėlė nepatikrintą kodą, patikrinimo etapas nepavyks ir galėsite aptikti problemą, tačiau tai nėra visiškai patogu, nes efektyviau projektą patikrinti ne sujungus filialus, o prieš jį, traukimo užklausos etape.

Apskritai ištraukimo užklausos analizės nustatymas nedaug skiriasi nuo įprasto CI analizės paleidimo. Išskyrus poreikį gauti pakeistų failų sąrašą. Paprastai juos galima gauti užklausus skirtumus tarp filialų naudojant git:

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

Dabar šį failų sąrašą turite perduoti analizatoriui kaip įvestį. Pavyzdžiui, PVS-Studio tai įgyvendinama naudojant vėliavėlę -S:

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

Galite sužinoti daugiau apie ištraukimo užklausų analizę *čia*. Net jei jūsų KI nėra straipsnyje minimų paslaugų sąraše, jums bus naudinga bendra dalis, skirta šio tipo analizės teorijai.

Nustatydami ištraukimo užklausų analizę, galite blokuoti įsipareigojimus su įspėjimais ir taip sukurti ribą, kurios nepatikrintas kodas negali peržengti.

Visa tai tikrai gerai, bet norėčiau, kad visi įspėjimai būtų matomi vienoje vietoje. Ne tik iš statinio analizatoriaus, bet ir iš vienetinių testų arba iš dinaminio analizatoriaus. Tam yra įvairių paslaugų ir priedų. Pavyzdžiui, PVS-Studio turi įskiepis, skirtas integruoti į „SonarQube“..

2. Integravimas kūrėjų mašinose

Dabar atėjo laikas įdiegti ir sukonfigūruoti analizatorių kasdieniniam kūrimo naudojimui. Šiuo metu jūs jau susipažinote su daugeliu darbo būdų, todėl tai gali būti vadinama lengviausia dalimi.

Kaip paprasčiausią variantą, kūrėjai gali patys įdiegti reikiamą analizatorių. Tačiau tai užtruks daug laiko ir atitrauks juos nuo kūrimo, todėl šį procesą galėsite automatizuoti naudodami diegimo programą ir reikiamas vėliavėles. PVS-Studio yra įvairių vėliavėlės automatiniam diegimui. Tačiau visada yra paketų tvarkytuvų, pavyzdžiui, „Chocolatey“ („Windows“), „Homebrew“ („MacOS“) arba daugybė „Linux“ parinkčių.

Tada turėsite įdiegti reikalingus papildinius, pvz "Visual Studio, IDĖJA, raitelis ir taip toliau

3. Kasdienis naudojimas

Šiame etape laikas pasakyti keletą žodžių apie būdus, kaip pagreitinti analizatorių kasdieninio naudojimo metu. Išsami viso projekto analizė užtrunka daug laiko, bet kaip dažnai keičiame viso projekto kodą vienu metu? Vargu ar yra tokio didelio pakeitimo, kuris iš karto paveiktų visą kodo bazę. Vienu metu keičiamų failų skaičius retai viršija keliolika, todėl tikslinga juos analizuoti. Tokiai situacijai yra Inkrementinės analizės režimas. Neišsigąskite, tai ne kitas įrankis. Tai specialus režimas, leidžiantis analizuoti tik pakeistus failus ir jų priklausomybes, o tai įvyksta automatiškai sukūrus, jei dirbate IDE su įdiegtu papildiniu.

Jei analizatorius aptiks problemų neseniai pakeistame kode, jis apie tai praneš atskirai. Pavyzdžiui, PVS-Studio jums apie tai praneš naudodama įspėjimą:

Statinė analizė – nuo ​​įvado iki integravimo
Žinoma, neužtenka liepti kūrėjams naudoti įrankį. Turime jiems kažkaip pasakyti, kas tai yra ir kaip yra. Pavyzdžiui, čia yra straipsniai apie greitą PVS-Studio pradžią, tačiau galite rasti panašių mokymo programų, skirtų bet kuriam jūsų norimam įrankiui:

Tokie straipsniai suteikia visą kasdieniniam naudojimui reikalingą informaciją ir neužima daug laiko. 🙂

Netgi susipažindami su įrankiu, per vieną pirmųjų paleidimų nuslopinome daugybę įspėjimų. Deja, statiniai analizatoriai nėra tobuli, todėl karts nuo karto pateikia klaidingus teigiamus rezultatus. Paprastai juos nesunku nuslopinti, pavyzdžiui, PVS-Studio įskiepyje, skirtame Visual Studio, tereikia spustelėti vieną mygtuką:

Statinė analizė – nuo ​​įvado iki integravimo
Tačiau jūs galite padaryti daugiau nei tiesiog juos slopinti. Pavyzdžiui, galite pranešti apie problemą palaikymo tarnybai. Jei klaidingą teigiamą rezultatą galima ištaisyti, būsimuose atnaujinimuose pastebėsite, kad kiekvieną kartą jūsų kodų bazėje yra vis mažiau klaidingų teigiamų rezultatų.

Po integracijos

Taigi mes perėjome visus statinės analizės integravimo į kūrimo procesą etapus. Nepaisant to, kad svarbu nustatyti tokius įrankius CI, svarbiausia jų paleidimo vieta yra kūrėjo kompiuteris. Juk statinis analizatorius nėra teisėjas, kuris kažkur toli nuo tavęs sako, kad kodas nieko gero. Atvirkščiai, tai asistentas, kuris pasako, ar pavargote, ir primena, jei ką nors pamiršote.

Tiesa, be reguliaraus naudojimo statinė analizė vargu ar žymiai supaprastins kūrimą. Galų gale, pagrindinis jo pranašumas kūrėjui yra ne tiek sudėtingų ir prieštaringų kodo dalių paieška, bet ir ankstyvas jų aptikimas. Sutikite, kad problemos aptikimas po to, kai redagavimai buvo išsiųsti išbandyti, yra ne tik nemalonu, bet ir atima daug laiko. Reguliariai naudojama statinė analizė kiekvieną pakeitimą žiūri tiesiai į kompiuterį ir praneša apie įtartinas vietas dirbant su kodu.

Ir jei jūs ar jūsų kolegos vis dar nesate tikri, ar verta įdiegti analizatorių, siūlau dabar pradėti skaityti straipsnį "Priežastys, kodėl PVS-Studio statinio kodo analizatorius buvo įtrauktas į kūrimo procesąJame atsižvelgiama į tipinius kūrėjų susirūpinimą, kad statinė analizė atims jų laiko ir pan.

Statinė analizė – nuo ​​įvado iki integravimo

Jei norite pasidalinti šiuo straipsniu su angliškai kalbančia auditorija, naudokite vertimo nuorodą: Maksimas Zvyagintsevas. Statinė analizė: nuo darbo pradžios iki integracijos.

Šaltinis: www.habr.com

Добавить комментарий