Static analysis - kubva pachisumo kusvika pakubatanidzwa

Waneta nekusingaperi kodhi kudzokorora kana kugadzirisa, dzimwe nguva iwe unofunga nezve nzira yekurerutsa hupenyu hwako. Uye mushure mekutsvaga zvishoma, kana kukanganisa kugumburwa pairi, unogona kuona mutsara wemashiripiti: "Static analysis". Ngationei kuti chii uye kuti ingadyidzana sei nepurojekiti yako.

Static analysis - kubva pachisumo kusvika pakubatanidzwa
Muchokwadi, kana iwe ukanyora mune chero mutauro wemazuva ano, saka, pasina kana kuzviziva, iwe wakamhanya nayo kuburikidza ne static analyzer. Icho chokwadi ndechekuti chero yemazuva ano compiler inopa, kunyangwe idiki, seti yeyambiro nezve zvinogona kuitika mukodhi. Semuenzaniso, kana uchigadzira C ++ kodhi muVisual Studio unogona kuona zvinotevera:

Static analysis - kubva pachisumo kusvika pakubatanidzwa
Mukubuda uku tinoona kuti chinja aiva haina kumboshandiswa chero kupi zvako muchiitiko. Saka muchokwadi, iwe unogara uchishandisa yakapusa static code analyzer. Nekudaro, kusiyana nevaongorori vehunyanzvi vakaita seCoverity, Klocwork kana PVS-Studio, yambiro inopiwa nemuunganidzi inogona kungoratidza huwandu hudiki hwezvinetso.

Kana iwe usingazive chokwadi kuti chii chinonzi static analysis uye kuti ungachiite sei, verenga chinyorwa ichikuti udzidze zvakawanda nezve iyi methodology.

Sei uchida static analysis?

Muchidimbu: kukurumidza uye kurerutsa.

Kuongorora kwakasimba kunotendera iwe kuti uwane akawanda ematambudziko akasiyana mukodhi: kubva pakushandisa zvisirizvo kwemutauro unovaka kune typos. Somuenzaniso, pane

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

Wakanyora kodhi inotevera:

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

Sezvauri kuona, pane typo mumutsetse wekupedzisira. Semuenzaniso, PVS-Studio inopa yambiro inotevera:

V537 Funga kuongorora kurongeka kwemashandisirwo echinhu 'y'.

Kana iwe uchida kupinza maoko ako muchikanganiso ichi, edza muenzaniso wakagadzirirwa-wakagadzirwa muCompiler Explorer: *kuchema*.

Uye sezvaunonzwisisa, hazviiti nguva dzose kuteerera kune zvikamu zvakadaro zvekodhi pakarepo, uye nekuda kweizvi, unogona kugara pasi kugadzirisa kweawa yakanaka, uchishamisika kuti sei zvinhu zvose zvinoshanda zvinoshamisa.

Zvisinei, izvi zviri pachena kukanganisa. Ko kana mugadziri akanyora suboptimal kodhi nekuti akanganwa humwe hunyengeri hwemutauro? Kana kuti akaibvumira mukodhi undefined maitiro? Nehurombo, nyaya dzakadai dzakajairika uye chikamu cheshumba chenguva chinopedzwa kugadzirisa kodhi yekushanda ine typos, zvikanganiso zvakajairika kana maitiro asina kutsanangurwa.

Izvo ndezvemamiriro aya apo static analysis yakaonekwa. Uyu mubatsiri wemugadziri uyo acharatidza matambudziko akasiyana-siyana mukodhi uye anotsanangura mune zvinyorwa nei zvisingakoshi kunyora nenzira iyi, izvo zvingatungamirira uye kuti zvingagadzirisa sei. Heino muenzaniso wezvingaite senge: *kuchema*.

Iwe unogona kuwana zvimwe zvinonakidza zvikanganiso izvo analyzer anogona kuona mune zvinyorwa:

Zvino zvawaverenga chinyorwa ichi uye uine chokwadi nezve mabhenefiti ekuongorora kwakamira, ungangoda kuzviedza. Asi pekutangira? Nzira yekubatanidza sei chishandiso chitsva muprojekiti yako yazvino? Uye sei kusuma timu kwaari? Uchawana mhinduro dzemibvunzo iyi pazasi.

Cherechedza: Kuongorora kwakasimba hakutsivire kana kudzima chinhu chinobatsira sekuongorora kwekodhi. Inozadzisa maitiro aya, ichibatsira kuona nekugadzirisa typos, zvisizvo, uye dhizaini ine njodzi pamberi. Zvinonyanya kugadzira kutarisa pakuongorora kodhi pane algorithms uye kujeka kwekodhi, pane kutsvaga mutsara wakasarudzika kana verenga anofinha kuenzanisa mabasa.

0. Kuziva chombo

Zvose zvinotanga neshanduro yekuedza. Hongu, zvakaoma kusarudza kuita chimwe chinhu muhurongwa hwekuvandudza kana usati wamboona chishandiso ichirarama kare. Naizvozvo, chinhu chekutanga chaunofanirwa kuita kudhawunirodha trial version.

Zvauchadzidza panguva ino:

  • Ndedzipi nzira dzekudyidzana neanalyzer;
  • Iyo analyzer inoenderana nenzvimbo yako yekusimudzira?
  • Ndeapi matambudziko aripo parizvino mumapurojekiti ako?

Mushure mekunge waisa zvese zvaunoda, chinhu chekutanga chaunofanirwa kuita kuita ongororo yeprojekiti yese (Windows, Linux, macOS) Panyaya yePVS-Studio muVisual Studio uchaona mufananidzo wakafanana (unodzvanya):

Static analysis - kubva pachisumo kusvika pakubatanidzwa
Icho chokwadi ndechekuti static analyzers vanowanzo buritsa nhamba yakakura yeyambiro kumapurojekiti ane hombe kodhi base. Hapana chikonzero chekuzvigadzirisa zvese, sezvo purojekiti yako iri kutoshanda, zvinoreva kuti matambudziko aya haakoshese. Zvisinei, iwe unogona kutarisa yambiro dzinonakidza uye varuramise kana zvakakodzera. Kuti uite izvi, unofanirwa kusefa zvakabuda uye kusiya chete iwo akavimbika meseji. MuPVS-Studio plugin yeVisual Studio, izvi zvinoitwa nekusefa nemazinga ekukanganisa uye zvikamu. Kuti uwane kunyatsobuda, siya chete High ΠΈ General (inobatikawo):

Static analysis - kubva pachisumo kusvika pakubatanidzwa
Chokwadi, 178 yambiro dziri nyore kuona pane akati wandei…

In tabs nzira ΠΈ Low Kazhinji kune yambiro yakanaka, asi zvikamu izvi zvinosanganisira izvo zvekuongorora izvo zvine zvishoma kurongeka (kuvimbika). Rumwe ruzivo nezve mazinga ekunyevera uye sarudzo dzekushanda pasi peWindows dzinogona kuwanikwa pano: *kuchema*.

Kunyatsoongorora zvikanganiso zvinonyanya kufadza (uye nekubudirira kuzvigadzirisa) zvakakosha dzvanya nyevero dzakasara. Izvi zvinodikanwa kuitira kuti yambiro itsva dzisarasika pakati pekare. Mukuwedzera, static analyzer mubatsiri wemugadziri, uye kwete rondedzero yezvipembenene. πŸ™‚

1. Automation

Mushure mekuziva, inguva yekugadzira plugins uye kubatanidza muCI. Izvi zvinofanirwa kuitwa vasati vatanga kushandisa iyo static analyzer. Icho chokwadi ndechekuti mugadziri anogona kukanganwa kugonesa ongororo kana kusada kuzviita zvachose. Kuti uite izvi, iwe unofanirwa kuita kumwe kuongorora kwekupedzisira kwezvese kuti kodhi isina kuedzwa isakwanise kupinda mubazi rekusimudzira.

Zvauchadzidza panguva ino:

  • Ndedzipi sarudzo dze otomatiki dzinopa chishandiso;
  • Iyo analyzer inoenderana neyako gungano system?

Sezvo magwaro akakwana asipo, dzimwe nguva unofanirwa kunyora mukati tsigiro. Izvi zvakajairika uye tinofara kukubatsira. πŸ™‚

Zvino ngatienderere mberi kune inoenderera mberi yekubatanidza (CI) masevhisi. Chero analyzer inogona kuiswa mavari pasina matambudziko akakomba. Kuti uite izvi, unofanirwa kugadzira nhanho yakaparadzana mupombi, iyo inowanzowanikwa mushure mekuvaka uye unit test. Izvi zvinoitwa uchishandisa akasiyana console utilities. Semuenzaniso, PVS-Studio inopa zvinotevera zvinoshandiswa:

Kubatanidza kuongorora muCI, unofanirwa kuita zvinhu zvitatu:

  • Isa analyzer;
  • Run analysis;
  • Delivery zvawanikwa.

Semuenzaniso, kuisa PVS-Studio paLinux (Debian-base), unofanirwa kumhanyisa inotevera mirairo:

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

Pane masisitimu anomhanyisa Windows, hapana nzira yekuisa iyo analyzer kubva kumaneja wepakeji, asi zvinokwanisika kuendesa analyzer kubva kumutsetse wekuraira:

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

Unogona kuverenga zvakawanda nezve kuendesa PVS-Studio pane masisitimu anomhanya Windows *pano*.

Mushure mekuisa, unofanirwa kumhanya kuongorora zvakananga. Nekudaro, zvinokurudzirwa kuita izvi chete mushure mekuunganidza uye bvunzo dzapfuura. Izvi zvinodaro nekuti static ongororo inowanzotora kaviri kureba sekuunganidza.

Sezvo nzira yekutanga inoenderana nepuratifomu uye maficha eprojekiti, ini ndicharatidza sarudzo yeC ++ (Linux) semuenzaniso:

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

Murairo wekutanga uchaita kuongorora, uye wechipiri envelopesinoshandura mushumo kuita mavara efomati, oiratidza pachiratidziri uye anodzosera kodhi yekudzoka kunze kwe0 kana paine yambiro. Mechanichani yakaita seiyi inogona kushandiswa zviri nyore kuvhara chivakwa kana paine mhosho. Zvisinei, unogona kugara uchibvisa mureza -w uye musadzivisa ungano ine yambiro.

Cherechedza: Mamiriro ezvinyorwa haana kunaka. Inopiwa semuenzaniso. Teerera kune inonakidza mushumo fomati - FullHtml. Inokubvumira kuti ufambe kuburikidza nekodhi.

Iwe unogona kuverenga zvakawanda nezve kumisikidza kuongororwa paCI mune chinyorwa "PVS-Studio uye Inoenderera Kubatanidzwa"(Windows) kana"Maitiro ekumisa PVS-Studio muTravis CI"(Linux).

Zvakanaka, iwe wakagadzirisa analyzer pane kuvaka server. Iye zvino, kana mumwe munhu akaisa kodhi isina kuedzwa, danho rekusimbisa richakundikana, uye iwe uchakwanisa kuona dambudziko, zvisinei, izvi hazvisi nyore zvachose, sezvo zvinonyanya kushanda kutarisa purojekiti kwete mushure mokunge matavi abatanidzwa, asi. pamberi payo, padanho rekudhonza. A.

Kazhinji, kumisikidza kuongororwa kwechikumbiro chekudhonza hakuna kusiyana zvakanyanya neyakajairwa kuvhurwa kwekuongorora paCI. Kunze kwekudiwa kwekuwana runyoro rwemafaira akachinjwa. Izvi zvinowanzo kuwanikwa nekubvunza mutsauko pakati pemapazi uchishandisa git:

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

Zvino iwe unofanirwa kupfuudza iyi runyorwa rwemafaira kune analyzer sekuisa. Semuenzaniso, muPVS-Studio izvi zvinoshandiswa uchishandisa mureza -S:

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

Unogona kuwana zvimwe nezve kuongorora kudhonza zvikumbiro *pano*. Kunyangwe kana CI yako isiri pane rondedzero yemasevhisi akataurwa muchinyorwa, iwe uchaona iyo chikamu chikamu chakatsaurirwa dzidziso yemhando iyi yekuongorora inobatsira.

Nekumisikidza ongororo yezvikumbiro zvekudhonza, unogona kuvharira madhiri ane yambiro, nekudaro uchigadzira muganho usingakwanise kuyambuka kodhi isina kuedzwa.

Izvi zvese zvakanaka, asi ndinoda kukwanisa kuona yambiro dzese munzvimbo imwechete. Kwete chete kubva kune static analyzer, asiwo kubva kuyuniti bvunzo kana kubva kune inoshanduka analyzer. Kune akasiyana masevhisi uye plugins zveizvi. PVS-Studio, semuenzaniso, ine plugin yekubatanidzwa muSonarQube.

2. Kubatanidzwa pamichina yekugadzira

Iye zvino yave nguva yekuisa uye kugadzirisa iyo analyzer yekushandiswa kwezuva nezuva kusimudzira. Parizvino iwe watove kujairana neakawanda enzira dzekushanda, saka ichi chinogona kunzi chikamu chiri nyore.

Senge iri nyore sarudzo, vanogadzira vanogona kuisa inodiwa analyzer ivo pachavo. Nekudaro, izvi zvinotora nguva yakawanda uye kuvavhiringidza kubva mukusimudzira, saka iwe unogona otomatiki maitiro aya uchishandisa inoisa uye inodiwa mireza. Kune PVS-Studio kune akasiyana mireza yekugadzika otomatiki. Nekudaro, pane nguva dzose mapakeji maneja, semuenzaniso, Chocolatey (Windows), Homebrew (macOS) kana akawanda esarudzo dzeLinux.

Ipapo iwe uchafanirwa kuisa anodiwa plugins, semuenzaniso we Visual Studio, IDEA, mutasvi etc.

3. Kushandiswa kwezuva nezuva

Panguva ino, inguva yekutaura mazwi mashoma nezve nzira dzekumhanyisa analyzer panguva yekushandiswa kwemazuva ese. Ongororo yakazara yeprojekiti yese inotora nguva yakawanda, asi kangani isu tinoshandura kodhi mupurojekiti yese kamwechete? Iko hakuna kana refactoring yakakura zvekuti inozongokanganisa iyo yese code base. Huwandu hwemafaira ari kuchinjwa panguva haawanzopfuura gumi nemaviri, saka zvine musoro kuaongorora. Kune mamiriro ezvinhu akadaro incremental analysis mode. Usavhunduka, ichi hachisi chimwe chishandiso. Iyi ndiyo yakakosha modhi inobvumidza iwe kuti uongorore chete akachinja mafaera uye zvinoenderana nawo, uye izvi zvinoitika otomatiki mushure mekuvaka kana uri kushanda muIDE ine plugin yakaiswa.

Kana iyo analyzer ikaona matambudziko mune ichangobva kuchinjwa kodhi, inoshuma izvi yakazvimirira. Semuenzaniso, PVS-Studio ichakuudza nezve izvi uchishandisa yambiro:

Static analysis - kubva pachisumo kusvika pakubatanidzwa
Ehe, kuudza vanogadzira kuti vashandise chishandiso hakuna kukwana. Tinofanira neimwe nzira kuvaudza kuti chii uye kuti chii. Heano, semuenzaniso, pane zvinyorwa nezve kukurumidza kutanga kwePVS-Studio, asi iwe unogona kuwana akafanana tutorials kune chero chishandiso chaunoda:

Zvinyorwa zvakadaro zvinopa ruzivo rwese runodikanwa pakushandiswa kwezuva nezuva uye hazvitore nguva yakawanda. πŸ™‚

Kunyangwe padanho rekuziva chishandiso, takadzvanyirira yambiro yakawanda panguva yekutanga kutangwa. Nehurombo, static analyzers haina kukwana, saka nguva nenguva vanopa manyepo. Kazhinji zviri nyore kuvadzvinyirira; semuenzaniso, muPVS-Studio plugin yeVisual Studio unongoda kudzvanya bhatani rimwe chete:

Static analysis - kubva pachisumo kusvika pakubatanidzwa
Zvisinei, unogona kuita zvinopfuura kungodzidzvinyirira. Semuenzaniso, unogona kushuma dambudziko kune kutsigira. Kana iyo yenhema yakanaka inogona kugadziriswa, saka mune ramangwana rekuvandudza iwe unogona kuona kuti nguva imwe neimwe pane mashoma uye mashoma emanyepo enhema akananga kune yako codebase.

Mushure mekubatanidza

Saka takapfuura nematanho ese ekubatanidza static ongororo mukuita kwekusimudzira. Pasinei nekukosha kwekumisikidza maturusi akadaro paCI, nzvimbo inonyanya kukosha yekuamhanyisa ndiyo komputa yemugadziri. Mushure mezvose, static analyzer haasi mutongi anotaura kune imwe nzvimbo kure newe kuti code haina kunaka. Pane zvakasiyana, imubatsiri anokuudza kana wakaneta uye anokuyeuchidza kana wakanganwa chimwe chinhu.

Ichokwadi, pasina kushandiswa nguva dzose, static ongororo haigone kurerutsa zvakanyanya kukura. Mushure mezvose, bhenefiti yayo huru kune anovandudza haina kunyanya mukutsvaga zvikamu zvakaoma uye zvinokakavadzana zvekodhi, asi mukuonekwa kwavo kwekutanga. Bvumiranai kuti kuwana dambudziko mushure mekunge maedzo atumirwa kunoongororwa hakungonakidze chete, asiwo zvinotora nguva. Kuongorora kwakasimba, kana kuchishandiswa nguva dzose, inotarisa shanduko yega yega pakombuta yako uye inoshuma nzvimbo dzinofungira uchishanda pane kodhi.

Uye kana iwe kana vaunoshanda navo musati mave nechokwadi kana zvakakodzera kushandisa analyzer, saka ini ndinokurudzira iwe zvino tanga kuverenga chinyorwa "Zvikonzero zvekuunza iyo static code analyzer PVS-Studio mune yekuvandudza maitiro". Inogadzirisa zvinonetsa zvevagadziri kuti static analysis inotora nguva yavo uye zvichingodaro.

Static analysis - kubva pachisumo kusvika pakubatanidzwa

Kana iwe uchida kugovera chinyorwa ichi nevateereri vanotaura Chirungu, tapota shandisa shanduro yekushandura: Maxim Zvyagintsev. Static Analysis: Kubva Pakutanga kusvika Kubatanidzwa.

Source: www.habr.com

Voeg