Statyske analyze - fan ynlieding oant yntegraasje

Wurch fan einleaze koadebeoardieling of debuggen, tinke jo soms oer hoe't jo jo libben kinne ferienfâldigje. En nei in bytsje sykjen, of troch tafallich te stroffeljen, kinne jo de magyske útdrukking sjen: "Statyske analyze". Litte wy sjen wat it is en hoe't it kin ynteraksje mei jo projekt.

Statyske analyze - fan ynlieding oant yntegraasje
Yn feite, as jo yn in moderne taal skriuwe, dan, sûnder dat jo it sels realisearje, hawwe jo it troch in statyske analysator rûn. It feit is dat elke moderne kompilator leveret, hoewol in lyts, set warskôgings oer potensjele problemen yn 'e koade. Bygelyks, by it kompilearjen fan C ++-koade yn Visual Studio kinne jo it folgjende sjen:

Statyske analyze - fan ynlieding oant yntegraasje
Yn dizze útfier sjogge wy dat de fariabele var waard nea brûkt oeral yn 'e funksje. Dat yn 'e realiteit hawwe jo hast altyd in ienfâldige statyske koadeanalysator brûkt. Oars as profesjonele analysatoren lykas Coverity, Klocwork of PVS-Studio, kinne de warskôgings dy't troch de gearstaller levere wurde, mar in lyts oanbod fan problemen oanjaan.

As jo ​​​​net wis witte wat statyske analyse is en hoe't jo it útfiere, lês dit artikelom mear te learen oer dizze metodyk.

Wêrom hawwe jo statyske analyze nedich?

Yn in notedop: fersnelling en ferienfâldiging.

Statyske analyze lit jo in protte ferskillende problemen yn 'e koade fine: fan ferkeard gebrûk fan taalkonstruksjes oant typfouten. Bygelyks, ynstee fan

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

Jo hawwe de folgjende koade skreaun:

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

Sa't jo sjen kinne, is der in typflater yn 'e lêste rigel. Bygelyks, PVS-Studio jout de folgjende warskôging:

V537 Tink derom om de krektens fan it gebrûk fan 'y' item te besjen.

As jo ​​​​jo hannen yn dizze flater wolle stekke, besykje dan in klear foarbyld yn Compiler Explorer: *gûle*.

En sa't jo begripe, is it net altyd mooglik om direkt omtinken te jaan oan sokke seksjes fan koade, en hjirtroch kinne jo in goed oere sitte te debuggen, ôffreegje wêrom't alles sa nuver wurket.

Dit is lykwols dúdlik in flater. Wat as de ûntwikkelder suboptimale koade skreau om't hy wat subtilens fan 'e taal fergeat? Of sels tastien it yn 'e koade undefined gedrach? Spitigernôch binne sokke gefallen folslein gewoan en it liuw syn oanpart fan 'e tiid wurdt bestege oan debuggen spesifyk wurkje koade dy't befettet typefouten, typyske flaters of undefined gedrach.

It is foar dizze situaasjes dat statyske analyze ferskynde. Dit is in assistint foar de ûntwikkelder dy't ferskate problemen yn 'e koade sil oanwize en yn' e dokumintaasje útlizze wêrom't it net nedich is om dizze manier te skriuwen, wat it kin liede ta en hoe't jo it reparearje. Hjir is in foarbyld fan hoe't it der útsjen kin: *gûle*.

Jo kinne mear ynteressante flaters fine dy't de analysator kin ûntdekke yn 'e artikels:

No't jo dit materiaal hawwe lêzen en oertsjûge binne fan 'e foardielen fan statyske analyse, wolle jo it miskien besykje. Mar wêr te begjinnen? Hoe kinne jo in nij ark yntegrearje yn jo hjoeddeistige projekt? En hoe foarstelle it team oan him? Jo sille hjirûnder antwurden fine op dizze fragen.

Opmerking: Statyske analyze ferfangt of annulearret net sa'n nuttich ding as koadebeoardielingen. It komplementeart dit proses, en helpt by it opmerken en korrigearjen fan typfouten, ûnkrektens en gefaarlike ûntwerpen foarôf. It is folle produktiver om te rjochtsjen op koadebeoardielingen oer algoritmen en koadedúdlikens, ynstee fan te sykjen nei in ferkeard pleatst heakjes of lês saai ferliking funksjes.

0. Yn 'e kunde komme mei it ark

It begjint allegear mei in proefferzje. It is yndied lestich om te besluten om wat yn it ûntwikkelingsproses yn te fieren as jo it ark noch noait earder live sjoen hawwe. Dêrom, it earste ding dat jo moatte dwaan is download proef ferzje.

Wat jo sille leare op dit stadium:

  • Wat binne de manieren om te ynteraksje mei de analysator;
  • Is de analysator kompatibel mei jo ûntwikkelingsomjouwing?
  • Hokker problemen binne d'r op it stuit yn jo projekten?

Nei't jo alles ynstalleare hawwe wat jo nedich hawwe, is it earste ding dat jo moatte dwaan in analyze fan it heule projekt útfiere (Windows, linux, MacOS). Yn it gefal fan PVS-Studio yn Visual Studio sille jo in ferlykbere ôfbylding sjen (klikber):

Statyske analyze - fan ynlieding oant yntegraasje
It feit is dat statyske analyzers meastal in grut oantal warskôgings útjaan foar projekten mei in grutte koadebasis. D'r is net nedich om se allegear te reparearjen, om't jo projekt al wurket, wat betsjut dat dizze problemen net kritysk binne. Lykwols, jo kinne jo sjen op de meast nijsgjirrige warskôgings en korrigearje se as it nedich is. Om dit te dwaan, moatte jo de útfier filterje en allinich de meast betroubere berjochten litte. Yn it PVS-Studio-plugin foar Visual Studio wurdt dit dien troch filterjen op flaternivo's en kategoryen. Foar de meast krekte útfier, lit allinich heech и Algemien (ek te klikken):

Statyske analyze - fan ynlieding oant yntegraasje
Yndied, 178 warskôgingen binne folle makliker te besjen dan ferskate tûzenen ...

Yn ljeppers medium и Leech Faak binne d'r goede warskôgings, mar dizze kategoryen befetsje dy diagnostyk dy't minder krektens (betrouberens) hawwe. Mear ynformaasje oer warskôgingsnivo's en opsjes foar wurkjen ûnder Windows kinne jo hjir fine: *gûle*.

De meast nijsgjirrige flaters mei súkses hawwe besjoen (en se mei súkses korrizjearre) is it wurdich ûnderdrukke oerbleaune warskôgings. Dit is nedich sadat nije warskôgingen net ferlern gean ûnder de âlde. Derneist is in statyske analysator in assistint foar de programmeur, en net in list mei bugs. 🙂

1. Automatisearring

Nei't jo yn 'e kunde kommen binne, is it tiid om plugins te konfigurearjen en te yntegrearjen yn CI. Dit moat dien wurde foardat programmeurs begjinne mei it brûken fan de statyske analysator. It feit is dat de programmeur kin ferjitte analyse yn te skeakeljen of it hielendal net te dwaan. Om dit te dwaan, moatte jo wat lêste kontrôle fan alles dwaan, sadat net-teste koade net yn 'e algemiene ûntwikkelingstak komme kin.

Wat jo sille leare op dit stadium:

  • Hokker automatisearringsopsjes leveret it ark;
  • Is de analysator kompatibel mei jo montagesysteem?

Om't perfekte dokumintaasje net bestiet, moatte jo soms ynskriuwe stypje. Dit is normaal en wy helpe jo graach. 🙂

Litte wy no trochgean nei tsjinsten foar trochgeande yntegraasje (CI). Elke analysator kin yn har wurde ymplementearre sûnder serieuze problemen. Om dit te dwaan, moatte jo in aparte poadium yn 'e pipeline meitsje, dy't meastentiids leit nei de bou- en ienheidstests. Dit wurdt dien mei ferskate konsole-helpprogramma's. Bygelyks, PVS-Studio biedt de folgjende nutsfoarsjenningen:

Om analyse yn CI te yntegrearjen, moatte jo trije dingen dwaan:

  • Ynstallearje de analyzer;
  • Run analyze;
  • Leverje resultaten.

Bygelyks, om PVS-Studio op Linux (Debian-base) te ynstallearjen, moatte jo de folgjende kommando's útfiere:

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

Op systemen dy't Windows draaie, is d'r gjin manier om de analysator te ynstallearjen fan 'e pakketbehearder, mar it is mooglik om de analysator yn te setten fanút de kommandorigel:

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

Jo kinne mear lêze oer it ynsetten fan PVS-Studio op systemen mei Windows *hjir*.

Nei ynstallaasje moatte jo de analyse direkt útfiere. It is lykwols oan te rieden om dit allinich te dwaan nei't kompilaasje en tests binne trochjûn. Dit komt om't statyske analyse typysk twa kear sa lang duorret as kompilaasje.

Sûnt de startmetoade hinget ôf fan it platfoarm en projektfunksjes, sil ik de opsje foar C ++ (Linux) as foarbyld sjen litte:

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

It earste kommando sil de analyse útfiere, en it twadde enveloppenkonvertearret it rapport yn tekstformaat, toant it op it skerm en jout in weromkearkoade oars as 0 as der warskôgings binne. In meganisme lykas dit kin maklik brûkt wurde om in build te blokkearjen as d'r flaterberjochten binne. Jo kinne de flagge lykwols altyd fuortsmite -w en net blokkearje in gearkomste dy't befettet warskôgings.

Opmerking: It tekstformaat is ûngemaklik. It wurdt gewoan as foarbyld oanbean. Jou omtinken oan in nijsgjirriger rapportformaat - FullHtml. It lit jo troch de koade navigearje.

Jo kinne mear lêze oer it ynstellen fan analyse oer CI yn it artikel "PVS-Studio en trochgeande yntegraasje"(Windows) of"Hoe kinne jo PVS-Studio yn Travis CI ynstelle" (Linux).

Okee, jo hawwe de analysator konfigureare op 'e buildserver. No, as immen net teste koade uploade, sil it ferifikaasjestadium mislearje, en jo sille it probleem kinne ûntdekke, lykwols, dit is net hielendal handich, om't it effisjinter is om it projekt te kontrolearjen net nei't de tûken binne gearfoege, mar dêrfoar, op it poadium fan pull-fersyk A.

Yn it algemien, it opsetten fan in pull fersyk analyze is net folle oars as de gewoane lansearring fan in analyze op CI. Utsein foar de needsaak om in list mei feroare triemmen te krijen. Dizze kinne normaal wurde krigen troch de ferskillen tusken tûken te freegjen mei git:

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

No moatte jo dizze list mei bestannen trochjaan oan 'e analysator as ynfier. Bygelyks, yn PVS-Studio dit wurdt útfierd mei help fan de flagge -S:

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

Jo kinne mear útfine oer it analysearjen fan pull-oanfragen *hjir*. Sels as jo CI net op 'e list mei tsjinsten neamd wurdt yn it artikel, sille jo de algemiene seksje wijd oan' e teory fan dit soarte analyze nuttich fine.

Troch it opsetten fan analyze fan pull-oanfragen kinne jo commits blokkearje dy't warskôgings befetsje, en dêrmei in grins meitsje dy't net teste koade net oerstekke kin.

Dit is allegear wol goed, mar ik soe graach alle warskôgings op ien plak sjen kinne. Net allinich fan 'e statyske analysator, mar ek fan ienheidstests as fan' e dynamyske analysator. D'r binne ferskate tsjinsten en plugins foar dit. PVS-Studio hat bygelyks plugin foar yntegraasje yn SonarQube.

2. Yntegraasje op developer masines

No is it tiid om de analysator te ynstallearjen en te konfigurearjen foar deistich ûntwikkelingsgebrûk. Op dit punt binne jo al bekend wurden mei de measte manieren fan wurkjen, dus dit kin it maklikste diel neamd wurde.

As de ienfâldichste opsje kinne ûntwikkelders de nedige analysator sels ynstallearje. Dit sil lykwols in protte tiid nimme en se ôfliede fan ûntwikkeling, sadat jo dit proses kinne automatisearje mei in ynstallearder en de nedige flaggen. Foar PVS-Studio binne d'r ferskate flaggen foar automatisearre ynstallaasje. D'r binne lykwols altyd pakketbehearders, bygelyks Chocolatey (Windows), Homebrew (macOS) of tsientallen opsjes foar Linux.

Dan moatte jo ynstallearje de nedige plugins, bygelyks foar Visual Studio, IDEE, Rider ensfh

3. Deistich gebrûk

Op dit stadium is it tiid om in pear wurden te sizzen oer manieren om de analysator te fersnellen by deistich gebrûk. In folsleine analyze fan it hiele projekt nimt in protte tiid, mar hoe faak feroarje wy koade troch it hiele projekt tagelyk? D'r is amper in refactoring dy't sa grut is dat it fuortendaliks de hiele koadebasis beynfloedet. It oantal bestannen dat tagelyk feroaret is komselden mear as in tsiental, dus it makket sin om se te analysearjen. Foar sa'n situaasje is der inkrementele analyze modus. Wês gewoan net bang, dit is gjin oar ark. Dit is in spesjale modus wêrmei jo allinich feroare bestannen en har ôfhinklikens analysearje kinne, en dit bart automatysk nei it bouwen as jo wurkje yn in IDE mei de plugin ynstalleare.

As de analysator problemen ûntdekt yn 'e koartlyn feroare koade, sil it dit selsstannich rapportearje. Bygelyks, PVS-Studio sil jo hjiroer fertelle mei in warskôging:

Statyske analyze - fan ynlieding oant yntegraasje
Fansels is it net genôch om ûntwikkelders te fertellen om it ark te brûken. Wy moatte har op ien of oare manier fertelle wat it is en hoe it is. Hjir binne bygelyks artikels oer in flugge start foar PVS-Studio, mar jo kinne ferlykbere tutorials fine foar elk ark dat jo leaver hawwe:

Sokke artikels jouwe alle ynformaasje dy't nedich is foar deistich gebrûk en nimme net folle tiid. 🙂

Sels yn it stadium fan it learen fan it ark, hawwe wy in protte warskôgingen ûnderdrukt tidens ien fan 'e earste lansearringen. Spitigernôch binne statyske analyzers net perfekt, dus fan tiid ta tiid jouwe se falske positiven. It is normaal maklik om se te ûnderdrukken, bygelyks yn 'e PVS-Studio-plugin foar Visual Studio moatte jo gewoan op ien knop klikke:

Statyske analyze - fan ynlieding oant yntegraasje
Jo kinne lykwols mear dwaan as se gewoan ûnderdrukke. Jo kinne bygelyks in probleem melde om te stypjen. As it falske posityf kin wurde korrizjearre, dan kinne jo yn takomstige updates fernimme dat elke kear minder en minder falske positives spesifyk binne foar jo koadebase.

Nei yntegraasje

Sa hawwe wy alle stadia trochgien fan it yntegrearjen fan statyske analyse yn it ûntwikkelingsproses. Nettsjinsteande it belang fan it ynstellen fan sokke ark op CI, is it wichtichste plak om se út te fieren de kompjûter fan 'e ûntwikkelder. In statyske analysator is ommers gjin rjochter dy't earne fier fan jo seit dat de koade net goed is. Krektoarsom, it is in assistint dy't jo fertelt as jo wurch binne en jo herinnert as jo wat fergetten binne.

Wier, sûnder regelmjittich gebrûk, is it net wierskynlik dat statyske analyze de ûntwikkeling signifikant ferienfâldigje sil. Ommers, syn wichtichste foardiel foar in ûntwikkelder leit net sasear yn it sykjen nei komplekse en kontroversjele seksjes fan koade, mar yn harren betide detectie. It iens dat it ûntdekken fan in probleem neidat de bewurkingen binne stjoerd foar testen net allinich onaangenaam is, mar ek tige tiidslinend. Statyske analyse, as se regelmjittich brûkt wurde, sjocht nei elke feroaring direkt op jo kompjûter en rapportearret fertochte plakken by it wurkjen oan 'e koade.

En as jo of jo kollega's noch net wis binne oft it it wurdich is om de analysator te ymplementearjen, dan stel ik foar dat jo no begjinne mei it lêzen fan it artikel "Redenen om de statyske koadeanalysator PVS-Studio yn te fieren yn it ûntwikkelingsproses". It behannelet typyske soargen fan ûntwikkelders dat statyske analyse har tiid sil nimme ensafuorthinne.

Statyske analyze - fan ynlieding oant yntegraasje

As jo ​​​​dit artikel wolle diele mei in Ingelsktalig publyk, brûk dan de oersettingskeppeling: Maxim Zvyagintsev. Statyske analyze: fan te begjinnen oant yntegraasje.

Boarne: www.habr.com

Add a comment