StatiskÄ analÄ«ze - no ievada lÄ«dz integrÄcijai
Noguris no nebeidzamÄs koda pÄrskatÄ«Å”anas vai atkļūdoÅ”anas, dažreiz jÅ«s domÄjat par to, kÄ vienkÄrÅ”ot savu dzÄ«vi. Un pÄc nelielas meklÄÅ”anas vai nejauÅ”i uzklupot, jÅ«s varat redzÄt burvju frÄzi: "StatiskÄ analÄ«ze". ApskatÄ«sim, kas tas ir un kÄ tas var mijiedarboties ar jÅ«su projektu.
PatiesÄ«bÄ, ja jÅ«s rakstÄt jebkurÄ mÅ«sdienu valodÄ, tad, pat nemanot, jÅ«s to izlaidÄt caur statisko analizatoru. Fakts ir tÄds, ka jebkurÅ” mÅ«sdienu kompilators nodroÅ”ina, lai arÄ« niecÄ«gu, brÄ«dinÄjumu kopu par iespÄjamÄm koda problÄmÄm. PiemÄram, kompilÄjot C++ kodu programmÄ Visual Studio, var tikt parÄdÄ«ts Å”Äds:
Å ajÄ izvadÄ mÄs redzam, ka mainÄ«gais VAR nekad nav izmantots nekur funkcijÄ. TÄtad patiesÄ«bÄ jÅ«s gandrÄ«z vienmÄr izmantojÄt vienkÄrÅ”u statiskÄ koda analizatoru. TomÄr atŔķirÄ«bÄ no profesionÄliem analizatoriem, piemÄram, Coverity, Klocwork vai PVS-Studio, kompilatora sniegtie brÄ«dinÄjumi var norÄdÄ«t tikai uz nelielu problÄmu loku.
Ja nezinÄt, kas ir statiskÄ analÄ«ze un kÄ to ieviest, izlasi Å”o rakstulai uzzinÄtu vairÄk par Å”o metodiku.
KÄpÄc jums nepiecieÅ”ama statiskÄ analÄ«ze?
ÄŖsumÄ: paÄtrinÄjums un vienkÄrÅ”oÅ”ana.
StatiskÄ analÄ«ze ļauj kodÄ atrast daudz dažÄdu problÄmu: no nepareizas valodas konstrukciju lietoÅ”anas lÄ«dz drukas kļūdÄm. PiemÄram, tÄ vietÄ
Un, kÄ jÅ«s saprotat, ne vienmÄr ir iespÄjams pievÄrst uzmanÄ«bu Å”ÄdÄm koda sadaļÄm, un tÄpÄc jÅ«s varat sÄdÄt, atkļūdojot labu stundu, prÄtojot, kÄpÄc viss darbojas tik dÄ«vaini.
TomÄr tÄ acÄ«mredzami ir kļūda. Ko darÄ«t, ja izstrÄdÄtÄjs uzrakstÄ«ja neoptimÄlu kodu, jo viÅÅ” aizmirsa kÄdu valodas smalkumu? Vai pat atļÄva to kodÄ nenoteikta uzvedÄ«ba? DiemžÄl Å”Ädi gadÄ«jumi ir pilnÄ«gi ikdieniŔķa parÄdÄ«ba, un lielÄkÄ daļa laika tiek pavadÄ«ta, atkļūdojot Ä«paÅ”i strÄdÄjoÅ”u kodu, kurÄ ir drukas kļūdas, tipiskas kļūdas vai nedefinÄta uzvedÄ«ba.
TieÅ”i Ŕīm situÄcijÄm parÄdÄ«jÄs statiskÄ analÄ«ze. Å is ir izstrÄdÄtÄja palÄ«gs, kurÅ” norÄdÄ«s uz dažÄdÄm koda problÄmÄm un dokumentÄcijÄ paskaidros, kÄpÄc nav nepiecieÅ”ams Å”Ädi rakstÄ«t, pie kÄ tas var novest un kÄ to labot. Å eit ir piemÄrs tam, kÄ tas varÄtu izskatÄ«ties: *raudÄt*.
VairÄk interesantu kļūdu, ko analizators var atklÄt, varat atrast rakstos:
Tagad, kad esat izlasÄ«jis Å”o materiÄlu un esat pÄrliecinÄts par statiskÄs analÄ«zes priekÅ”rocÄ«bÄm, iespÄjams, vÄlÄsities to izmÄÄ£inÄt. Bet ar ko sÄkt? KÄ integrÄt jaunu rÄ«ku paÅ”reizÄjÄ projektÄ? Un kÄ ar viÅu iepazÄ«stinÄt komandu? Atbildes uz Å”iem jautÄjumiem atradÄ«sit tÄlÄk.
PiezÄ«me. StatiskÄ analÄ«ze neaizstÄj vai neatceļ tik noderÄ«gu lietu kÄ kodu pÄrskatÄ«Å”ana. Tas papildina Å”o procesu, palÄ«dzot jau iepriekÅ” pamanÄ«t un labot drukas kļūdas, neprecizitÄtes un bÄ«stamus dizainus. Daudz produktÄ«vÄk ir koncentrÄties uz koda pÄrskatÄ«Å”anu par algoritmiem un koda skaidrÄ«bu, nevis meklÄt nepareizi novietotas iekavas vai lasÄ«t garlaicÄ«gas salÄ«dzinÄÅ”anas funkcijas.
0. Rīka iepazīŔana
Viss sÄkas ar izmÄÄ£inÄjuma versiju. PatieÅ”Äm, ir grÅ«ti izlemt kaut ko ieviest izstrÄdes procesÄ, ja jÅ«s nekad iepriekÅ” neesat redzÄjis rÄ«ku tieÅ”raidÄ. TÄpÄc pirmÄ lieta, kas jums jÄdara, ir lejupielÄdÄt izmÄÄ£inÄjuma versija.
Ko jÅ«s uzzinÄsiet Å”ajÄ posmÄ:
KÄdi ir mijiedarbÄ«bas veidi ar analizatoru;
Vai analizators ir saderÄ«gs ar jÅ«su izstrÄdes vidi?
KÄdas problÄmas paÅ”laik ir jÅ«su projektos?
Kad esat instalÄjis visu nepiecieÅ”amo, pirmÄ lieta, kas jums jÄdara, ir palaist visa projekta analÄ«zi (Windows, Linux, macOS). PVS-Studio gadÄ«jumÄ programmÄ Visual Studio jÅ«s redzÄsit lÄ«dzÄ«gu attÄlu (noklikŔķinÄms):
Fakts ir tÄds, ka statiskie analizatori parasti izdod milzÄ«gu skaitu brÄ«dinÄjumu projektiem ar lielu kodu bÄzi. Nav nepiecieÅ”ams tÄs visas novÄrst, jo jÅ«su projekts jau darbojas, kas nozÄ«mÄ, ka Ŕīs problÄmas nav kritiskas. TomÄr jÅ«s jÅ«s varat apskatÄ«t interesantÄkos brÄ«dinÄjumus un izlabojiet tos, ja nepiecieÅ”ams. Lai to izdarÄ«tu, jums ir jÄfiltrÄ izvade un jÄatstÄj tikai visuzticamÄkie ziÅojumi. Visual Studio spraudnÄ« PVS-Studio tas tiek darÄ«ts, filtrÄjot pÄc kļūdu lÄ«meÅiem un kategorijÄm. Lai iegÅ«tu visprecÄ«zÄko rezultÄtu, atstÄjiet tikai augsts Šø vispÄrÄjs (arÄ« noklikŔķinÄms):
PatieÅ”Äm, 178 brÄ«dinÄjumus ir daudz vieglÄk apskatÄ«t nekÄ vairÄkus tÅ«kstoÅ”us...
CilnÄs vidÄjs Šø Zems Bieži vien ir labi brÄ«dinÄjumi, taÄu Å”ajÄs kategorijÄs ietilpst tÄs diagnostikas, kurÄm ir mazÄka precizitÄte (uzticamÄ«ba). PlaÅ”Äku informÄciju par brÄ«dinÄjuma lÄ«meÅiem un opcijÄm darbam operÄtÄjsistÄmÄ Windows var atrast Å”eit: *raudÄt*.
VeiksmÄ«gi pÄrskatÄ«t interesantÄkÄs kļūdas (un veiksmÄ«gi tÄs izlabot) ir vÄrts izslÄgt atlikuÅ”os brÄ«dinÄjumus. Tas nepiecieÅ”ams, lai jauni brÄ«dinÄjumi nepazustu starp vecajiem. TurklÄt statiskais analizators ir programmÄtÄja palÄ«gs, nevis kļūdu saraksts. š
1.AutomÄtika
PÄc iepazÄ«Å”anÄs ir pienÄcis laiks konfigurÄt spraudÅus un integrÄties CI. Tas ir jÄdara, pirms programmÄtÄji sÄk lietot statisko analizatoru. Fakts ir tÄds, ka programmÄtÄjs var aizmirst iespÄjot analÄ«zi vai nevÄlas to darÄ«t vispÄr. Lai to izdarÄ«tu, jums ir jÄveic visa galÄ«gÄ pÄrbaude, lai nepÄrbaudÄ«ts kods nevarÄtu iekļūt vispÄrÄjÄ izstrÄdes nozarÄ.
Vai analizators ir savietojams ar jÅ«su montÄžas sistÄmu?
TÄ kÄ perfekta dokumentÄcija nepastÄv, dažreiz jums ir jÄieraksta atbalstu. Tas ir normÄli, un mÄs esam priecÄ«gi jums palÄ«dzÄt. š
Tagad pÄriesim pie nepÄrtrauktas integrÄcijas (CI) pakalpojumiem. Tajos bez nopietnÄm problÄmÄm var ievietot jebkuru analizatoru. Lai to izdarÄ«tu, cauruļvadÄ ir jÄizveido atseviŔķs posms, kas parasti atrodas pÄc uzbÅ«ves un vienÄ«bas pÄrbaudÄm. Tas tiek darÄ«ts, izmantojot dažÄdas konsoles utilÄ«tas. PiemÄram, PVS-Studio nodroÅ”ina Å”Ädas utilÄ«tas:
PVS-Studio_Cmd.exe (risinÄjumu analÄ«ze, C#, C++ projekti operÄtÄjsistÄmÄ Windows)
SistÄmÄs, kurÄs darbojas sistÄma Windows, nav iespÄjams instalÄt analizatoru no pakotÅu pÄrvaldnieka, taÄu ir iespÄjams izvietot analizatoru no komandrindas:
Varat lasÄ«t vairÄk par PVS-Studio izvietoÅ”anu sistÄmÄs, kurÄs darbojas sistÄma Windows *Å”eit*.
PÄc instalÄÅ”anas analÄ«ze ir jÄpalaiž tieÅ”i. TomÄr ieteicams to darÄ«t tikai pÄc apkopoÅ”anas un testu nokÄrtoÅ”anas. Tas ir tÄpÄc, ka statiskÄ analÄ«ze parasti aizÅem divreiz ilgÄku laiku nekÄ kompilÄcija.
TÄ kÄ palaiÅ”anas metode ir atkarÄ«ga no platformas un projekta funkcijÄm, es kÄ piemÄru parÄdÄ«Å”u opciju C++ (Linux):
PirmÄ komanda veiks analÄ«zi, bet otrÄ aploksnespÄrvÄrÅ” atskaiti teksta formÄtÄ, parÄda to ekrÄnÄ un atgriež atgrieÅ”anas kodu, kas nav 0, ja ir brÄ«dinÄjumi. Å Ädu mehÄnismu var Ärti izmantot, lai bloÄ·Ätu bÅ«vÄjumu, ja tiek parÄdÄ«ti kļūdu ziÅojumi. TomÄr jÅ«s vienmÄr varat noÅemt karogu -w un nebloÄ·Äjiet bloku, kurÄ ir brÄ«dinÄjumi.
PiezÄ«me. Teksta formÄts ir neÄrts. Tas ir sniegts vienkÄrÅ”i kÄ piemÄrs. PievÄrsiet uzmanÄ«bu interesantÄkam atskaites formÄtam - FullHtml. Tas ļauj jums pÄrvietoties pa kodu.
Labi, jÅ«s esat konfigurÄjis analizatoru bÅ«vÄÅ”anas serverÄ«. Tagad, ja kÄds augÅ”upielÄdÄja nepÄrbaudÄ«tu kodu, verifikÄcijas posms neizdosies, un jÅ«s varÄsit atklÄt problÄmu, taÄu tas nav gluži Ärti, jo efektÄ«vÄk ir pÄrbaudÄ«t projektu nevis pÄc filiÄļu apvienoÅ”anas, bet pirms tÄ, vilkÅ”anas pieprasÄ«juma stadijÄ. A.
KopumÄ izvilkÅ”anas pieprasÄ«juma analÄ«zes iestatÄ«Å”ana daudz neatŔķiras no parastÄs CI analÄ«zes palaiÅ”anas. IzÅemot nepiecieÅ”amÄ«bu iegÅ«t izmainÄ«to failu sarakstu. Parasti tos var iegÅ«t, vaicÄjot atŔķirÄ«bas starp filiÄlÄm, izmantojot git:
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
Tagad jums ir jÄnodod Å”is failu saraksts analizatoram kÄ ievade. PiemÄram, PVS-Studio tas tiek Ä«stenots, izmantojot karogu -S:
Varat uzzinÄt vairÄk par piesaistes pieprasÄ«jumu analÄ«zi*Å”eit*. Pat ja jÅ«su KI nav rakstÄ minÄto pakalpojumu sarakstÄ, jums noderÄs vispÄrÄ«gÄ sadaļa, kas veltÄ«ta Å”Äda veida analÄ«zes teorijai.
Iestatot vilkÅ”anas pieprasÄ«jumu analÄ«zi, varat bloÄ·Ät brÄ«dinÄjumus saturoÅ”as saistÄ«bas, tÄdÄjÄdi izveidojot robežu, kuru nepÄrbaudÄ«ts kods nevar pÄrkÄpt.
Tas viss noteikti ir labi, bet es vÄlÄtos, lai visi brÄ«dinÄjumi bÅ«tu redzami vienuviet. Ne tikai no statiskÄ analizatora, bet arÄ« no vienÄ«bas testiem vai no dinamiskÄ analizatora. Å im nolÅ«kam ir dažÄdi pakalpojumi un spraudÅi. PiemÄram, PVS-Studio ir spraudnis integrÄcijai SonarQube.
2. IntegrÄcija izstrÄdÄtÄju maŔīnÄs
Tagad ir pienÄcis laiks instalÄt un konfigurÄt analizatoru ikdienas lietoÅ”anai. Å ajÄ brÄ«dÄ« jÅ«s jau esat iepazinies ar lielÄko daļu darba veidu, tÄpÄc to var saukt par vieglÄko daļu.
KÄ vienkÄrÅ”Äko iespÄju izstrÄdÄtÄji var paÅ”i instalÄt nepiecieÅ”amo analizatoru. TomÄr tas prasÄ«s daudz laika un novÄrsÄ«s viÅu uzmanÄ«bu no izstrÄdes, tÄpÄc jÅ«s varat automatizÄt Å”o procesu, izmantojot instalÄtÄju un nepiecieÅ”amos karogus. PVS-Studio ir dažÄdas karodziÅi automatizÄtai uzstÄdÄ«Å”anai. TomÄr vienmÄr ir pakotÅu pÄrvaldnieki, piemÄram, Chocolatey (Windows), Homebrew (macOS) vai desmitiem iespÄju Linux.
PÄc tam jums bÅ«s jÄinstalÄ nepiecieÅ”amie spraudÅi, piemÄram, priekÅ” Visual Studio, IDEA, BraucÄjs un tÄ joprojÄm
3. Ikdienas lietoŔana
Å ajÄ posmÄ ir pienÄcis laiks pateikt dažus vÄrdus par veidiem, kÄ paÄtrinÄt analizatoru ikdienas lietoÅ”anas laikÄ. Visa projekta pilnÄ«ga analÄ«ze aizÅem daudz laika, bet cik bieži mÄs vienlaikus mainÄm kodu visÄ projektÄ? Diez vai ir tik liela pÄrveidoÅ”ana, kas nekavÄjoties ietekmÄtu visu kodu bÄzi. VienlaicÄ«gi mainÄmo failu skaits reti pÄrsniedz duci, tÄpÄc ir lietderÄ«gi tos analizÄt. Å Ädai situÄcijai ir InkrementÄlÄs analÄ«zes režīms. VienkÄrÅ”i neuztraucieties, tas nav vÄl viens rÄ«ks. Å is ir Ä«paÅ”s režīms, kas ļauj analizÄt tikai mainÄ«tos failus un to atkarÄ«bas, un tas notiek automÄtiski pÄc izveides, ja strÄdÄjat IDE ar instalÄtu spraudni.
Ja analizators konstatÄ problÄmas nesen mainÄ«tajÄ kodÄ, tas ziÅos par to neatkarÄ«gi. PiemÄram, PVS-Studio jums par to pastÄstÄ«s, izmantojot brÄ«dinÄjumu:
Protams, nepietiek ar to, ka izstrÄdÄtÄjiem liek izmantot rÄ«ku. Mums kaut kÄ viÅiem ir jÄpasaka, kas tas ir un kÄ tas ir. Å eit, piemÄram, ir raksti par Ätro PVS-Studio palaiÅ”anu, taÄu varat atrast lÄ«dzÄ«gas apmÄcÄ«bas jebkuram rÄ«kam, kuru vÄlaties:
Å Ädi raksti sniedz visu ikdienas lietoÅ”anai nepiecieÅ”amo informÄciju un neaizÅem daudz laika. š
Pat rÄ«ka iepazÄ«Å”anas posmÄ mÄs vienÄ no pirmajÄm palaiÅ”anas reizÄm apspiedÄm daudzus brÄ«dinÄjumus. DiemžÄl statiskie analizatori nav ideÄli, tÄpÄc laiku pa laikam tie sniedz viltus pozitÄ«vus rezultÄtus. Parasti tos ir viegli apspiest; piemÄram, Visual Studio spraudnÄ« PVS-Studio jums vienkÄrÅ”i jÄnoklikŔķina uz vienas pogas:
TomÄr jÅ«s varat darÄ«t vairÄk, nekÄ tikai tos apspiest. PiemÄram, varat ziÅot atbalsta dienestam par problÄmu. Ja viltus pozitÄ«vo rezultÄtu var labot, turpmÄkajos atjauninÄjumos varat pamanÄ«t, ka katru reizi jÅ«su kodu bÄzei ir mazÄk un mazÄk viltus pozitÄ«vu rezultÄtu.
PÄc integrÄcijas
TÄpÄc mÄs esam izgÄjuÅ”i cauri visiem statiskÄs analÄ«zes integrÄÅ”anas attÄ«stÄ«bas procesÄ posmiem. Neskatoties uz to, cik svarÄ«gi ir iestatÄ«t Å”Ädus rÄ«kus CI, vissvarÄ«gÄkÄ vieta, kur tos darbinÄt, ir izstrÄdÄtÄja dators. Galu galÄ statiskais analizators nav tiesnesis, kurÅ” kaut kur tÄlu no jums saka, ka kods nav labs. Gluži otrÄdi, tas ir palÄ«gs, kas paziÅo, ja esi noguris, un atgÄdina, ja esi kaut ko aizmirsis.
Tiesa, bez regulÄras lietoÅ”anas statiskÄ analÄ«ze diez vai bÅ«tiski vienkÄrÅ”os izstrÄdi. Galu galÄ tÄ galvenais ieguvums izstrÄdÄtÄjam ir ne tik daudz sarežģītu un strÄ«dÄ«gu koda sadaļu meklÄÅ”anÄ, bet gan to agrÄ«nÄ atklÄÅ”anÄ. PiekrÄ«tiet, ka problÄmas atklÄÅ”ana pÄc labojumu nosÅ«tÄ«Å”anas pÄrbaudei ir ne tikai nepatÄ«kama, bet arÄ« ļoti laikietilpÄ«ga. StatiskÄ analÄ«ze, ja to izmanto regulÄri, visas izmaiÅas aplÅ«ko tieÅ”i jÅ«su datorÄ un ziÅo par aizdomÄ«gÄm vietÄm, strÄdÄjot ar kodu.
Un, ja jÅ«s vai jÅ«su kolÄÄ£i joprojÄm neesat pÄrliecinÄti, vai ir vÄrts ieviest analizatoru, iesaku jums tagad sÄkt lasÄ«t rakstu "Iemesli statiskÄ koda analizatora PVS-Studio ievieÅ”anai izstrÄdes procesÄTas pievÄrÅ”as tipiskÄm izstrÄdÄtÄju bažÄm, ka statiskÄ analÄ«ze prasÄ«s viÅu laiku un tÄ tÄlÄk.