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.

Statiskā analīze - no ievada līdz integrācijai
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:

Statiskā analīze - no ievada līdz integrācijai
Å 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ā

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

Jūs uzrakstījāt Ŕādu kodu:

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

Kā redzat, pēdējā rindā ir drukas kļūda. Piemēram, PVS-Studio izdod Ŕādu brÄ«dinājumu:

V537 Apsveriet iespēju pārskatÄ«t vienuma ā€œyā€ lietojuma pareizÄ«bu.

Ja vēlaties atklāt Å”o kļūdu, izmēģiniet gatavu piemēru programmā Compiler Explorer: *raudāt*.

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):

Statiskā analīze - no ievada līdz integrācijai
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):

Statiskā analīze - no ievada līdz integrācijai
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ē.

Ko jūs uzzināsiet Ŕajā posmā:

  • Kādas automatizācijas iespējas nodroÅ”ina rÄ«ks;
  • 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:

Lai integrētu analīzi CI, jums ir jāveic trīs darbības:

  • uzstādiet analizatoru;
  • IzpildÄ«t analÄ«zi;
  • Sniedziet rezultātus.

Piemēram, lai instalētu PVS-Studio operētājsistēmā Linux (Debian-base), jums ir jāizpilda Ŕādas 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

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:

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

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):

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

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.

Vairāk par CI analīzes iestatīŔanu varat lasīt rakstā "PVS-Studio un nepārtraukta integrācija" (Windows) vai "Kā iestatīt PVS-Studio programmā Travis CI" (Linux).

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:

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

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:

Statiskā analīze - no ievada līdz integrācijai
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:

Statiskā analīze - no ievada līdz integrācijai
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.

Statiskā analīze - no ievada līdz integrācijai

Ja vēlaties dalÄ«ties ar Å”o rakstu ar angliski runājoÅ”u auditoriju, lÅ«dzu, izmantojiet tulkoÅ”anas saiti: Maksims Zvjagintsevs. Statiskā analÄ«ze: no darba sākÅ”anas lÄ«dz integrācijai.

Avots: www.habr.com

Pievieno komentāru