Analiżi statika - mill-introduzzjoni għall-integrazzjoni

Għajjien ta 'reviżjoni tal-kodiċi bla tarf jew debugging, xi kultant taħseb dwar kif tissimplifika ħajtek. U wara li tfittex ftit, jew billi tfixkel biha aċċidentalment, tista 'tara l-frażi maġika: "Analiżi statika." Ejja naraw x'inhu u kif jista' jinteraġixxi mal-proġett tiegħek.

Analiżi statika - mill-introduzzjoni għall-integrazzjoni
Fil-fatt, jekk tikteb b'xi lingwa moderna, allura, mingħajr lanqas ma tinduna biha, tmexxiha permezz ta 'analizzatur statiku. Il-fatt hu li kwalunkwe kompilatur modern jipprovdi, għalkemm ċkejkna, sett ta’ twissijiet dwar problemi potenzjali fil-kodiċi. Pereżempju, meta tikkumpila kodiċi C++ f'Visual Studio tista' tara dan li ġej:

Analiżi statika - mill-introduzzjoni għall-integrazzjoni
F'dan l-output naraw li l-varjabbli kien qatt ma ntuża imkien fil-funzjoni. Allura fir-realtà, kważi dejjem użajt analizzatur sempliċi tal-kodiċi statiku. Madankollu, b'differenza mill-analizzaturi professjonali bħal Coverity, Klocwork jew PVS-Studio, it-twissijiet ipprovduti mill-kompilatur jistgħu jindikaw biss firxa żgħira ta 'problemi.

Jekk ma tafx ċert x'inhi l-analiżi statika u kif timplimentaha, aqra dan l-artiklubiex titgħallem aktar dwar din il-metodoloġija.

Għaliex għandek bżonn analiżi statika?

Fil-qosor: aċċelerazzjoni u simplifikazzjoni.

L-analiżi statika tippermettilek issib ħafna problemi differenti fil-kodiċi: minn użu mhux korrett tal-kostruzzjonijiet tal-lingwa għal typos. Per eżempju, minflok

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

Int ktibt il-kodiċi li ġej:

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

Kif tistgħu taraw, hemm typo fl-aħħar linja. Pereżempju, PVS-Studio joħroġ it-twissija li ġejja:

V537 Ikkunsidra li tirrevedi l-korrettezza tal-użu tal-oġġett 'y'.

Jekk trid tpoġġi idejk f'dan l-iżball, ipprova eżempju lest f'Compiler Explorer: *biki*.

U kif tifhem, mhux dejjem ikun possibbli li tagħti attenzjoni għal sezzjonijiet ta 'kodiċi bħal dawn mill-ewwel, u minħabba dan, tista' toqgħod tiddibaggja għal siegħa tajba, tistaqsi għaliex kollox jaħdem b'mod stramb.

Madankollu, dan huwa ċarament żball. X'jiġri jekk l-iżviluppatur kiteb kodiċi subottimali minħabba li nesa xi sottili tal-lingwa? Jew saħansitra permess fil-kodiċi imġieba mhux definita? Sfortunatament, każijiet bħal dawn huma kompletament komuni u l-biċċa l-kbira tal-ħin jintefqu biex jiddibaggjaw speċifikament kodiċi tax-xogħol li fih typos, żbalji tipiċi jew imġieba mhux definita.

Huwa għal dawn is-sitwazzjonijiet li dehret analiżi statika. Dan huwa assistent għall-iżviluppatur li se jindika diversi problemi fil-kodiċi u jispjega fid-dokumentazzjoni għaliex mhux meħtieġ li tikteb b'dan il-mod, għal xiex tista 'twassal u kif tirranġaha. Hawn eżempju ta' kif jista' jidher: *biki*.

Tista 'ssib aktar żbalji interessanti li l-analizzatur jista' jiskopri fl-artikoli:

Issa li qrajt dan il-materjal u konvint mill-benefiċċji tal-analiżi statika, tista 'tkun trid tipprovaha. Imma minn fejn tibda? Kif tintegra għodda ġdida fil-proġett attwali tiegħek? U kif tintroduċi t-tim lilu? Issib tweġibiet għal dawn il-mistoqsijiet hawn taħt.

Innota. L-analiżi statika ma tissostitwixxix jew tikkanċellax ħaġa utli bħal reviżjonijiet tal-kodiċi. Jikkumplimenta dan il-proċess, u jgħin biex jinduna u jikkoreġi typos, ineżattezzi, u disinji perikolużi minn qabel. Huwa ħafna aktar produttiv li tiffoka fuq reviżjonijiet tal-kodiċi fuq algoritmi u ċarezza tal-kodiċi, aktar milli tfittex parentesi mhux f'postha jew aqra funzjonijiet ta 'tqabbil boring.

0. Insiru nafu l-għodda

Kollox jibda b'verżjoni ta 'prova. Tabilħaqq, huwa diffiċli li tiddeċiedi li timplimenta xi ħaġa fil-proċess ta 'żvilupp jekk qatt ma rajt l-għodda ħajjin qabel. Għalhekk, l-ewwel ħaġa li għandek tagħmel hu li tniżżel verżjoni bi prova.

Dak li se titgħallem f'dan l-istadju:

  • X'inhuma l-modi biex jinteraġixxu ma 'l-analizzatur;
  • L-analizzatur huwa kompatibbli mal-ambjent tal-iżvilupp tiegħek?
  • X'problemi hemm bħalissa fil-proġetti tiegħek?

Wara li tkun installat dak kollu li għandek bżonn, l-ewwel ħaġa li għandek tagħmel hi li tmexxi analiżi tal-proġett kollu (twieqi, Linux, MacOS). Fil-każ ta' PVS-Studio f'Visual Studio se tara stampa simili (li tista' tikklikkja):

Analiżi statika - mill-introduzzjoni għall-integrazzjoni
Il-fatt hu li l-analizzaturi statiċi normalment joħorġu numru kbir ta 'twissijiet għal proġetti b'bażi ​​ta' kodiċi kbira. M'hemmx għalfejn tirranġahom kollha, peress li l-proġett tiegħek diġà qed jaħdem, li jfisser li dawn il-problemi mhumiex kritiċi. Madankollu, int tista 'tħares lejn l-aktar twissijiet interessanti u kkoreġihom jekk meħtieġ. Biex tagħmel dan, għandek bżonn tiffiltra l-output u tħalli biss l-aktar messaġġi affidabbli. Fil-plugin PVS-Studio għal Visual Studio, dan isir billi jiġi ffiltrat skont il-livelli u l-kategoriji ta 'żball. Għall-output l-aktar preċiż, ħalli biss Għoli и ġenerali (jikklikkja wkoll):

Analiżi statika - mill-introduzzjoni għall-integrazzjoni
Tabilħaqq, 178 twissija huma ħafna aktar faċli biex tarahom minn diversi eluf...

Fit-tabs Medja и Baxxa Ħafna drabi jkun hemm twissijiet tajbin, iżda dawn il-kategoriji jinkludu dawk id-dijanjostiċi li għandhom inqas preċiżjoni (affidabbiltà). Aktar informazzjoni dwar il-livelli ta’ twissija u l-għażliet biex taħdem taħt il-Windows tista’ ssibha hawn: *biki*.

Li tkun irrevediet b'suċċess l-iżbalji l-aktar interessanti (u kkoreġuhom b'suċċess) ta 'min trażżan it-twissijiet li fadal. Dan huwa meħtieġ sabiex twissijiet ġodda ma jintilfux fost dawk qodma. Barra minn hekk, analizzatur statiku huwa assistent għall-programmatur, u mhux lista ta 'bugs. 🙂

1. Awtomazzjoni

Wara li ssir familjari, wasal iż-żmien li tikkonfigura l-plugins u tintegra fis-CI. Dan għandu jsir qabel ma l-programmaturi jibdew jużaw l-analizzatur statiku. Il-fatt hu li l-programmatur jista 'jinsa li jippermetti l-analiżi jew ma jridx jagħmel dan xejn. Biex tagħmel dan, għandek bżonn tagħmel xi verifika finali ta 'kollox sabiex il-kodiċi mhux ittestjat ma jkunx jista' jidħol fil-fergħa tal-iżvilupp ġenerali.

Dak li se titgħallem f'dan l-istadju:

  • X'għażliet ta 'awtomazzjoni tipprovdi l-għodda;
  • L-analizzatur huwa kompatibbli mas-sistema ta 'assemblaġġ tiegħek?

Peress li d-dokumentazzjoni perfetta ma teżistix, xi drabi trid tikteb fiha appoġġ. Dan huwa normali u aħna kuntenti li ngħinuk. 🙂

Issa ejja ngħaddu għal servizzi ta' integrazzjoni kontinwa (CI). Kwalunkwe analizzatur jista 'jiġi implimentat fihom mingħajr problemi serji. Biex tagħmel dan, għandek bżonn toħloq stadju separat fil-pipeline, li normalment jinsab wara l-bini u t-testijiet tal-unità. Dan isir billi tuża diversi utilitajiet tal-console. Pereżempju, PVS-Studio jipprovdi l-utilitajiet li ġejjin:

Biex tintegra l-analiżi fis-CI, trid tagħmel tliet affarijiet:

  • Installa l-analizzatur;
  • Mexxi analiżi;
  • Iwassal riżultati.

Pereżempju, biex tinstalla PVS-Studio fuq Linux (Debian-base), trid tħaddem il-kmandi li ġejjin:

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

Fuq sistemi li jħaddmu Windows, m'hemm l-ebda mod kif tinstalla l-analizzatur mill-maniġer tal-pakketti, iżda huwa possibbli li l-analizzatur jiġi skjerat mil-linja tal-kmand:

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

Tista' taqra aktar dwar l-iskjerament ta' PVS-Studio fuq sistemi li jaħdmu Windows *hawn*.

Wara l-installazzjoni, għandek bżonn tmexxi l-analiżi direttament. Madankollu, huwa rakkomandat li tagħmel dan biss wara li l-kumpilazzjoni u t-testijiet ikunu għaddew. Dan għaliex l-analiżi statika tipikament tieħu d-doppju tal-kompilazzjoni.

Peress li l-metodu tat-tnedija jiddependi fuq il-pjattaforma u l-karatteristiċi tal-proġett, ser nuri l-għażla għal C++ (Linux) bħala eżempju:

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

L-ewwel kmand se jwettaq l-analiżi, u t-tieni envelopsjikkonverti r-rapport f'format ta 'test, jurih fuq l-iskrin u jirritorna kodiċi ta' ritorn minbarra 0 jekk ikun hemm twissijiet. Mekkaniżmu bħal dan jista 'jintuża b'mod konvenjenti biex jimblokka bini meta jkun hemm messaġġi ta' żball. Madankollu, inti tista 'dejjem tneħħi l-bandiera -w u timblokkax assemblaġġ li jkun fih twissijiet.

Innota. Il-format tat-test huwa inkonvenjenti. Huwa pprovdut sempliċement bħala eżempju. Oqgħod attent għal format ta' rapport aktar interessanti - FullHtml. Jippermettilek tinnaviga permezz tal-kodiċi.

Tista' taqra aktar dwar it-twaqqif ta' analiżi fuq CI fl-artiklu "PVS-Studio u Integrazzjoni Kontinwa" (Windows) jew "Kif twaqqaf PVS-Studio fi Travis CI" (Linux).

Okay, ikkonfigurajt l-analizzatur fuq is-server tal-bini. Issa, jekk xi ħadd tella 'kodiċi mhux ittestjat, l-istadju ta' verifika se jonqos, u inti tkun kapaċi tiskopri l-problema, madankollu, dan mhux kompletament konvenjenti, peress li huwa aktar effiċjenti li jiċċekkja l-proġett mhux wara li l-fergħat ikunu ġew magħquda, iżda quddiemu, fl-istadju tal-ġibda A.

B'mod ġenerali, it-twaqqif ta 'analiżi ta' talba ta 'ġibda mhix ħafna differenti mit-tnedija tas-soltu ta' analiżi fuq CI. Ħlief għall-ħtieġa li tikseb lista ta 'fajls mibdula. Dawn normalment jistgħu jinkisbu billi ssir mistoqsija dwar id-differenzi bejn il-fergħat billi tuża git:

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

Issa għandek bżonn tgħaddi din il-lista ta 'fajls lill-analizzatur bħala input. Pereżempju, f'PVS-Studio dan huwa implimentat bl-użu tal-bandiera -S:

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

Tista' ssir taf aktar dwar l-analiżi tat-talbiet tal-ġibda *hawn*. Anke jekk is-CI tiegħek mhix fuq il-lista tas-servizzi msemmija fl-artiklu, issib it-taqsima ġenerali ddedikata għat-teorija ta 'dan it-tip ta' analiżi utli.

Billi twaqqaf analiżi ta 'pull requests, tista' timblokka kommits li fihom twissijiet, u b'hekk toħloq limitu li kodiċi mhux ittestjat ma jistax jaqsam.

Dan kollu ċertament tajjeb, imma nixtieq inkun nista' nara t-twissijiet kollha f'post wieħed. Mhux biss mill-analizzatur statiku, iżda wkoll minn testijiet tal-unità jew mill-analizzatur dinamiku. Hemm diversi servizzi u plugins għal dan. PVS-Studio, per eżempju, għandu plugin għall-integrazzjoni fis-SonarQube.

2. Integrazzjoni fuq magni tal-iżviluppatur

Issa wasal iż-żmien li tinstalla u tikkonfigura l-analizzatur għall-użu ta 'żvilupp ta' kuljum. Sa dan il-punt diġà sirt familjari mal-biċċa l-kbira tal-modi ta 'ħidma, għalhekk din tista' tissejjaħ l-aktar parti faċli.

Bħala l-aktar għażla sempliċi, l-iżviluppaturi jistgħu jinstallaw l-analizzatur meħtieġ huma stess. Madankollu, dan se jieħu ħafna ħin u jtellifhom mill-iżvilupp, sabiex tkun tista 'awtomatizza dan il-proċess billi tuża installatur u l-bnadar meħtieġa. Għal PVS-Studio hemm diversi bnadar għal installazzjoni awtomatizzata. Madankollu, dejjem hemm maniġers tal-pakketti, pereżempju, Chocolatey (Windows), Homebrew (macOS) jew għexieren ta 'għażliet għal Linux.

Imbagħad ser ikollok bżonn tinstalla l-plugins meħtieġa, pereżempju għal Visual Studio, IDEA, Rikkieb eċċ.

3. Użu ta 'kuljum

F'dan l-istadju, wasal iż-żmien li tgħid ftit kliem dwar modi kif tħaffef l-analizzatur waqt l-użu ta 'kuljum. Analiżi kompluta tal-proġett kollu tieħu ħafna ħin, imma kemm-il darba nibdlu l-kodiċi matul il-proġett kollu f'daqqa? Qatt ma hemm l-ebda refactoring li huwa tant kbir li immedjatament jaffettwa l-bażi tal-kodiċi kollha. In-numru ta 'fajls li qed jinbidlu kull darba rari jaqbeż tużżana, għalhekk jagħmel sens li jiġu analizzati. Għal sitwazzjoni bħal din hemm mod ta' analiżi inkrementali. Biss ma jkun allarmat, din mhix għodda oħra. Dan huwa mod speċjali li jippermettilek tanalizza biss fajls mibdula u d-dipendenzi tagħhom, u dan jiġri awtomatikament wara li tibni jekk tkun qed taħdem f'IDE bil-plugin installat.

Jekk l-analizzatur jiskopri problemi fil-kodiċi mibdul reċentement, jirrapporta dan b'mod indipendenti. Pereżempju, PVS-Studio jgħidlek dwar dan billi tuża twissija:

Analiżi statika - mill-introduzzjoni għall-integrazzjoni
Naturalment, li tgħid lill-iżviluppaturi biex jużaw l-għodda mhix biżżejjed. Irridu ngħidulhom b’xi mod x’inhu u kif inhi. Hawnhekk, pereżempju, hemm artikli dwar bidu ta' malajr għal PVS-Studio, iżda tista' ssib tutorials simili għal kwalunkwe għodda li tippreferi:

Artikli bħal dawn jipprovdu l-informazzjoni kollha meħtieġa għall-użu ta 'kuljum u ma jieħdux ħafna ħin. 🙂

Anke fl-istadju li nsiru nafu l-għodda, soppressina ħafna twissijiet waqt waħda mill-ewwel tnedijiet. Sfortunatament, l-analizzaturi statiċi mhumiex perfetti, għalhekk minn żmien għal żmien jagħtu pożittivi foloz. Normalment huwa faċli li trażżanhom pereżempju, fil-plugin PVS-Studio għal Visual Studio għandek bżonn biss li tikklikkja buttuna waħda:

Analiżi statika - mill-introduzzjoni għall-integrazzjoni
Madankollu, tista 'tagħmel aktar milli sempliċement trażżanhom. Pereżempju, tista' tirrapporta problema lill-appoġġ. Jekk il-pożittiv falz jista 'jiġi kkoreġut, allura f'aġġornamenti futuri tista' tinnota li kull darba jkun hemm inqas u inqas pożittivi foloz speċifiċi għall-codebase tiegħek.

Wara l-integrazzjoni

Allura għaddejna mill-istadji kollha tal-integrazzjoni tal-analiżi statika fil-proċess tal-iżvilupp. Minkejja l-importanza li jitwaqqfu għodod bħal dawn fuq CI, l-aktar post importanti biex imexxuhom huwa l-kompjuter tal-iżviluppatur. Wara kollox, analizzatur statiku mhuwiex imħallef li jgħid x'imkien 'il bogħod minnek li l-kodiċi m'huwiex tajjeb. Anzi, huwa assistent li jgħidlek jekk intix għajjien u jfakkarkom jekk insejtx xi ħaġa.

Veru, mingħajr użu regolari, l-analiżi statika mhux probabbli li tissimplifika l-iżvilupp b'mod sinifikanti. Wara kollox, il-benefiċċju ewlieni tiegħu għal żviluppatur jinsab mhux tant fit-tfittxija għal sezzjonijiet kumplessi u kontroversjali tal-kodiċi, iżda fl-iskoperta bikrija tagħhom. Naqbel li l-iskoperta ta 'problema wara li l-modifiki jkunu ntbagħtu għall-ittestjar mhux biss mhux pjaċevoli, iżda wkoll jieħu ħafna ħin. Analiżi statika, meta tintuża regolarment, tħares lejn kull bidla direttament fuq il-kompjuter tiegħek u tirrapporta postijiet suspettużi waqt li taħdem fuq il-kodiċi.

U jekk int jew il-kollegi tiegħek għadek m'intix ċert jekk jaqbilx li timplimenta l-analizzatur, allura nissuġġerixxi li issa tibda taqra l-artiklu "Raġunijiet biex tintroduċi l-analizzatur tal-kodiċi statiku PVS-Studio fil-proċess ta 'żvilupp". Jindirizza tħassib tipiku tal-iżviluppaturi li l-analiżi statika se tieħu l-ħin tagħhom u l-bqija.

Analiżi statika - mill-introduzzjoni għall-integrazzjoni

Jekk trid taqsam dan l-artikolu ma 'udjenza li titkellem bl-Ingliż, jekk jogħġbok uża l-link tat-traduzzjoni: Maxim Zvyagintsev. Analiżi Statika: Mill-Bidu għall-Integrazzjoni.

Sors: www.habr.com

Żid kumment