Maitiro ekuita iyo static kodhi analyzer mune yenhaka purojekiti pasina kusimudzira timu

Maitiro ekuita iyo static kodhi analyzer mune yenhaka purojekiti pasina kusimudzira timu
Zviri nyore kuedza static code analyzer. Asi kuishandisa, kunyanya mukugadzirwa kwepurojekiti huru yekare, kunoda unyanzvi. Kana zvikaitwa zvisizvo, muongorori anogona kuwedzera basa, kudzikamisa budiriro, uye kuderedza timu. Ngatitaurei muchidimbu nezve nzira yekusvika nayo nemazvo kubatanidzwa kweiyo static ongororo mune yekuvandudza maitiro uye kutanga kuishandisa sechikamu cheCI / CD.

Nhanganyaya

Munguva pfupi yapfuura pfungwa dzangu dzakakweverwa kune chinyorwa "Kutanga NeStatic Analysis Pasina Kukurisa Chikwata". Kune rumwe rutivi, ichi chinyorwa chakanaka chakakodzera kujairana nacho. Kune rumwe rutivi, zvinoratidzika kwandiri kuti haisati inopa mhinduro yakakwana pamusoro pekuita zvisingarwadzi kushandisa static kuongorora muprojekti ine zvakawanda. yelegacy code.Chinyorwa chinoti Unogona kugamuchira chikwereti chehunyanzvi uye kushanda chete nekodhi nyowani, asi hapana mhinduro kune chekuita nechikwereti ichi gare gare.

Chikwata chedu chePVS-Studio chinopa maonero aro pane iyi nyaya. Ngatitarisei kuti dambudziko rekushandisa static code analyzer rinomuka sei pakutanga, nzira yekukunda dambudziko iri, uye nzira yekubvisa zvishoma nezvishoma chikwereti chehunyanzvi.

Nyaya

Kazhinji hazvina kuoma kuvhura uye kuona kuti static analyzer inoshanda sei [1]. Iwe unogona kuona zvikanganiso zvinofadza kana kutyisa zvinogona kukanganisa mukodhi. Iwe unogona kunyange kugadzirisa chimwe chinhu, asi ipapo vazhinji vanogadzira mapurogiramu vanorega.

Yese static analyzers inoburitsa nhema positives. Ichi chikamu cheiyo static kodhi yekuongorora nzira, uye hapana chinogona kuitwa nezvazvo. Kazhinji, iri idambudziko risingagadziriswe, sezvakasimbiswa nedzidziso yaRice [2]. Michina yekudzidza algorithms haizobatsiri kana [3]. Kunyangwe kana munhu asingakwanisi kugara ataura kuti iyi kana iyo kodhi haina kunaka, saka haufanirwe kutarisira izvi kubva kuchirongwa :).

Nhema dzenhema harisi dambudziko kana iyo static analyzer yakatogadzirwa:

  • Yakaremara isina basa seti yemitemo;
  • Dzimwe ongororo dzisina basa dzakaremara;
  • Kana isu tichitaura nezve C kana C ++, ipapo macros akaiswa chiratidzo ane chaiwo magadzirirwo anokonzera kusashanda yambiro kuoneka munzvimbo dzese dzinoshandiswa macros;
  • Mabasa ega anomakwa anoita zviito zvakafanana nemaitiro ehurongwa (analogue yayo memcpy kana kudhinda) [4];
  • Nhema dzenhema dzakaremara zvakananga kushandisa mazwi;
  • Etc.

Muchiitiko ichi, tinogona kutarisira yakaderera yenhema yakanaka mwero we10-15% [5]. Mune mamwe mazwi, 9 kubva pagumi yambiro yeanalyzer icharatidza dambudziko chairo mukodhi, kana kuti "kodhi-yakasimba-inonhuwa." Bvumiranai, chiitiko ichi chinonakidza kwazvo, uye muongorori ishamwari chaiyo yemugadziri.

Maitiro ekuita iyo static kodhi analyzer mune yenhaka purojekiti pasina kusimudzira timu
Muchokwadi, muchirongwa chikuru, mufananidzo wekutanga uchave wakasiyana zvachose. Iyo analyzer inoburitsa mazana kana zviuru zveyambiro kune legacy code. Hazvibviri kukurumidza kunzwisisa kuti ndeipi yeyambiro iyi yakakosha uye isingakodzeri. Hazvina musoro kugara pasi uye kutanga kubata nenyevero idzi dzose, sezvo basa guru munyaya iyi richamira kwemazuva kana mavhiki. Kazhinji, timu haigone kuwana mamiriro akadaro. Pachave zvakare nenhamba hombe yemhando dzakasiyana dzinokanganisa nhoroondo yekuchinja. Uye kukurumidza kugadzirisa misa yezvimedu zvakawanda mukodhi zvinozokonzera typos nyowani uye zvikanganiso.

Uye zvinotonyanya kukosha, kuita kwakadaro mukurwisa nyevero hakuna musoro. Bvumiranai kuti sezvo purojekiti yave ichibudirira kwemakore akawanda, yakawanda yezvikanganiso zvakakomba mairi zvakatogadziriswa. Hongu, izvi zvigadziriso zvaidhura zvakanyanya, zvaifanira kugadziriswa, zvakagamuchira zvisina kunaka mushandisi mhinduro nezve bugs, zvichingodaro. A static analyzer yaizobatsira kugadzirisa akawanda ezvikanganiso izvi padanho rekodhi, nekukurumidza uye zvakachipa. Asi panguva ino, imwe nzira kana imwe, zvikanganiso izvi zvakagadziriswa, uye muongorori anonyanya kuona zvikanganiso zvisiri izvo zvakanyanya mukodhi yekare. Iyi kodhi inogona kusashandiswa, inogona kushandiswa kashoma, uye kukanganisa mairi kunogona kusatungamira kune zvinoonekwa mhedzisiro. Zvichida pane imwe nzvimbo mumvuri kubva pabhatani ndiwo mavara asina kunaka, asi izvi hazvikanganisi kushandiswa kweumwe munhu wechigadzirwa.

Chokwadi, kunyange zvikanganiso zviduku zvichiri kukanganisa. Uye dzimwe nguva kukanganisa kunogona kuvanza kusagadzikana chaiko. Nekudaro, kusiya zvese uye kupedza mazuva / mavhiki uchibata nekuremara izvo zvisinganyatso kuzviratidza zvinoita senge zano rinopokana.

Vagadziri vepurogiramu vanotarisa, tarisai, tarisai zvose izvi nyevero pamusoro pekodhi yekare yekushanda ... Uye vanofunga: tinogona kuita pasina static analysis. Handei tinonyora humwe hutsva hunobatsira kushanda.

Nenzira yavo vamene, vakarurama. Vanofunga kuti kutanga vanofanira kubvisa yambiro idzi dzese. Ipapo chete ivo vachakwanisa kubatsirwa nekushandisa nguva dzose yekodhi analyzer. Zvikasadaro, nyevero itsva dzichangonyura mune dzekare, uye hapana achadziteerera.

Iyi ndiyo fananidzo yakafanana neyeyevero dzemuunganidzi. Hazvisi pasina chikonzero chekuti vanokurudzira kuchengetedza nhamba yenyevero ye compiler pa 0. Kana pane 1000 yambiro, ipapo kana pane 1001, hapana anozoteerera pairi, uye hazvisi pachena kuti ndekupi kutsvaga iyi yambiro itsva.

Maitiro ekuita iyo static kodhi analyzer mune yenhaka purojekiti pasina kusimudzira timu
Chinhu chakaipisisa munyaya iyi kana mumwe munhu anobva kumusoro panguva ino achikumanikidza kushandisa static code analysis. Izvi zvinongodzikisira timu, nekuti kubva pamaonero avo pachave nekuwedzera kuomarara kunowanikwa munzira. Hapana achatarisa mishumo yeanalyzer, uye kushandiswa kwose kuchava "papepa". Avo. Nenzira, kuongorora kunovakwa muDevOps maitiro, asi mukuita izvi hazvibatsiri chero munhu. Takanzwa nyaya dzakadzama pamatumba kubva kune vaipinda musangano. Chiitiko chakadaro chinogona kuodza mwoyo vanogadzira kubva kushandisa static maturusi ekuongorora kwenguva yakareba, kana zvisiri zvachose.

Kuita uye kubvisa chikwereti chehunyanzvi

Muchokwadi, hapana chakaoma kana chinotyisa nezve kuunza static kuongororwa kunyangwe mune yakakura purojekiti yekare.

CI / CD

Zvakare, iyo analyzer inogona pakarepo kuitwa chikamu chekuenderera mberi kwekuvandudza maitiro. Semuenzaniso, iyo PVS-Studio yekugovera ine zvishandiso zvekuona zviri nyore mushumo mune fomati yaunoda, uye zviziviso kune vanogadzira vakanyora zvinonetsa zvikamu zvekodhi. Kune avo vanonyanya kufarira kuvhura PVS-Studio kubva kuCI/CD masisitimu, ini ndinokurudzira kuti uzvizive kune zvinoenderana chikamu zvinyorwa uye nhevedzano yezvinyorwa:

Asi ngatidzokere kunyaya yenhamba yakawanda yenhema dzenhema pamatanho ekutanga ekushandisa maturusi ekuongorora kodhi.

Kugadzirisa chikwereti chiripo chehunyanzvi uye kubata neyambiro nyowani

Yemazuva ano yekutengesa static analyzers inobvumidza iwe kuti udzidze chete yambiro nyowani dzinoonekwa mune nyowani kana yakachinja kodhi. Kuitwa kwemuchina uyu kunosiyana, asi hunhu hwakafanana. MuPVS-Studio static analyzer, basa iri rinoitwa sezvinotevera.

Kukurumidza kutanga kushandisa static kuongorora, isu tinokurudzira vashandisi vePVS-Studio kuti vashandise nzira yekudzvinyirirwa kwakawanda kweyambiro [6]. Pfungwa huru ndeiyi inotevera. Mushandisi akatanga analyzer uye akagamuchira yambiro dzakawanda. Sezvo chirongwa chave chichigadzirwa kwemakore akawanda chiri chipenyu, chichigadzira uye kuita mari, saka sezvingabvira hapazovi nenyevero dzakawanda mumushumo unoratidza kukanganisa kwakanyanya. Mune mamwe mazwi, tsikidzi dzakakomba dzakatogadziriswa neimwe nzira uchishandisa nzira dzinodhura kana kutenda kune mhinduro kubva kune vatengi. Saizvozvo, zvese zvinowanikwa nemuongorori parizvino zvinogona kutariswa chikwereti chehunyanzvi, izvo zvisingaite kuedza kubvisa nekukurumidza.

Unogona kuudza PVS-Studio kuti itarise yambiro idzi dzisina basa parizvino (chengetedza chikwereti chehunyanzvi chekuzotevera), uye hazvichazovaratidza. Iyo analyzer inogadzira yakakosha faira iyo inochengetedza ruzivo nezve zvikanganiso zvisati zvave kunakidza. Uye ikozvino PVS-Studio ichaburitsa yambiro chete yekodhi nyowani kana yakashandurwa. Uyezve, izvi zvose zvinoshandiswa nehungwaru. Kana, semuenzaniso, mutsara usina chinhu wakawedzerwa kune kutanga kwekodhi yekodhi faira, ipapo muongorori anonzwisisa kuti, chaizvoizvo, hapana chakachinja, uye chicharamba chakanyarara. Iyi markup file inogona kuiswa mushanduro control system. Iyo faira yakakura, asi iyi haisi dambudziko, sezvo pasina chikonzero chekuichengeta kazhinji.

Iye zvino vese vanogadzira vanozoona yambiro ine chekuita chete nekodhi nyowani kana yakashandurwa. Nokudaro, unogona kutanga kushandisa analyzer, sezvavanotaura, kubva pazuva rinotevera. Uye iwe unogona kudzokera kuchikwereti chehunyanzvi gare gare, uye zvishoma nezvishoma gadzirisa zvikanganiso uye gadzirisa analyzer.

Saka, dambudziko rekutanga nekushandiswa kweanalyzer mune yakakura purojekiti yekare yakagadziriswa. Zvino ngationei zvekuita nechikwereti chehunyanzvi.

Bug kugadzirisa uye refactorings

Chinhu chakareruka uye chakasarudzika ndechekuisa parutivi imwe nguva yekuongorora yakadzvanywa yambiro yeanalyzer uye zvishoma nezvishoma kubata nazvo. Pane imwe nzvimbo iwe unofanirwa kugadzirisa zvikanganiso mukodhi, pane imwe nzvimbo iwe unofanirwa refactor kuudza analyzer kuti iyo kodhi haina dambudziko. Muenzaniso uri nyore:

if (a = b)

Vazhinji C ++ compilers uye analyzers vanogunun'una nezve kodhi yakadai, sezvo paine mukana wakakura wekuti ivo vaida chaizvo kunyora. (a == b). Asi pane chibvumirano chisingatauriki, uye izvi zvinowanzoonekwa muzvinyorwa, kuti kana pane mamwe maparentheses, zvino inofungidzirwa kuti mugadziri akanyora nemaune code yakadaro, uye hapana chikonzero chekupika. Semuenzaniso, muPVS-Studio zvinyorwa zvekuongorora V559 (CWE-481) zvakanyorwa zvakajeka kuti mutsara unotevera uchaonekwa sewakanaka uye wakachengeteka:

if ((a = b))

Mumwe muenzaniso. Zvakakanganwika here muC++ kodhi iyi? zororo kana kwete?

case A:
  foo();
case B:
  bar();
  break;

Iyo PVS-Studio analyzer ichapa yambiro pano V796 (CWE-484). Izvi zvinogona kunge zvisiri kukanganisa, saka iwe unofanirwa kupa parser zano nekuwedzera hunhu [[fallthrough]] kana semuenzaniso __attribute__((fallthrough)):

case A:
  foo();
  [[fallthrough]];
case B:
  bar();
  break;

Zvinogona kutaurwa kuti shanduko dzakadaro dzekodhi hadzigadzirise bug. Hongu, ichi ichokwadi, asi chinoita zvinhu zviviri zvinobatsira. Chekutanga, iyo analyzer report inobvisa manyepo positives. Chechipiri, iyo kodhi inova inonzwisisika kune vanhu vanobatanidzwa mukugadzirisa kwayo. Uye izvi zvakakosha zvikuru! Kune izvi chete, zvakakodzera kuita zvidiki zvigadziriso kuita kuti kodhi ive yakajeka uye nyore kuchengetedza. Sezvo muongorori asinganzwisisi kuti "kutyora" kuri kudiwa here kana kuti kwete, hazvizove pachena kune vamwe vanogadzira zvirongwa.

Pamusoro pekugadzirisa kwebug uye refactorings, unogona kudzvanya zviri pachena nhema analyzer yambiro. Dzimwe ongororo dzisina basa dzinogona kudzimwa. Semuenzaniso, mumwe munhu anofunga kuti yambiro haina maturo V550 pamusoro pekuenzanisa float/double values. Uye vamwe vanozvironga sevakakosha uye vakakodzera kudzidza [7]. Ndedzipi yambiro dzinoonekwa sedzakakodzera uye dzisiri dziri kuboka rekusimudzira kusarudza.

Pane dzimwe nzira dzekudzvanya nyevero dzenhema. Semuenzaniso, macro markup yakambotaurwa. Zvose izvi zvinotsanangurwa zvakadzama mune zvinyorwa. Chinhu chinonyanya kukosha ndechokunzwisisa kuti kana iwe zvishoma nezvishoma uye zvakarongeka uchisvika kushanda nemafungiro enhema, hapana chakaipa navo. Ruzhinji rweyambiro dzisingafadzi dzinonyangarika mushure mekugadzirisa, uye nzvimbo chete dzinoda kunyatsodzidza uye dzimwe shanduko mukodhi dzinosara.

Zvakare, isu tinogara tichibatsira vatengi vedu kumisikidza PVS-Studio kana paine matambudziko amuka. Uyezve, pane zviitiko apo isu pachedu takabvisa nyevero dzenhema uye tikagadzirisa zvikanganiso [8]. Zvingoitika, ndafunga kutaura kuti iyi sarudzo yekuwedzera kubatana inogoneka zvakare :).

Ratchet nzira

Pane imwe nzira inonakidza yekuvandudza zvishoma nezvishoma kodhi yemhando nekubvisa iyo static analyzer yambiro. Chinokosha ndechekuti nhamba yeyambiro inogona chete kuderera.

Maitiro ekuita iyo static kodhi analyzer mune yenhaka purojekiti pasina kusimudzira timu

Huwandu hweyambiro dzakaburitswa neiyo static analyzer yakanyorwa. Gedhi remhando inogadziriswa nenzira yekuti ikozvino unogona kungoisa kodhi isingawedzere nhamba yekushanda. Nekuda kweizvozvo, maitiro ekudzikisa zvishoma nezvishoma nhamba yearamu anotanga nekugadzirisa analyzer uye kugadzirisa zvikanganiso.

Kunyange kana munhu achida kubiridzira zvishoma uye anosarudza kupfuudza gedhi rehutano kwete nekubvisa nyevero mukodhi yake itsva, asi nekuvandudza kodhi yekare yechitatu, izvi hazvityi. Zvose zvakafanana, ratchet inotenderera mune imwe nzira, uye zvishoma nezvishoma nhamba yekuremara ichaderera. Kunyangwe kana munhu asingadi kugadzirisa zvikanganiso zvake zvitsva, achazofanira kuvandudza chimwe chinhu mukodhi yevavakidzani. Pane imwe nguva, nzira dzakareruka dzekudzikisa huwandu hwenyevero dzinopera, uye kunouya imwe nguva apo mabhugi chaiwo achagadziriswa.

Iyi nzira inotsanangurwa zvakadzama munyaya inofadza zvikuru naIvan Ponomarev "Shandisa static ongororo mukuita, pane kuishandisa kutsvaga tsikidzi", yandinokurudzira kuverenga kune chero munhu anofarira kuvandudza kodhi yemhando.

Munyori wechinyorwa anewo mushumo pamusoro penyaya iyi: "Continuous static analysis".

mhedziso

Ndinovimba kuti mushure mechinyorwa ichi, vaverengi vachange vachigamuchira zvakanyanya maturusi ekuongorora maturusi uye vachada kuashandisa mukuita budiriro. Kana uine mibvunzo, tinogara takagadzirira advise vashandisi veyedu static analyzer PVS-Studio uye rubatsiro nekuita kwayo.

Pane kumwe kusahadzika kwakajairwa pamusoro pekuti static ongororo inogona kunyatso kuve nyore uye inobatsira. Ndakaedza kubvisa zvakawanda zvekusahadzika uku mukudhindwa "Zvikonzero zvekuunza iyo PVS-Studio static code analyzer mukuvandudza maitiro" [9].

Ndinokutendai nekuteerera kwenyu uye huya ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ uye edza PVS-Studio analyzer.

Mamwe malink

  1. Andrey Karpov. Ndingakurumidza sei kuona yambiro inonakidza inogadzirwa nePVS-Studio analyzer yeC uye C ++ kodhi?
  2. Wikipedia. Rice's theorem.
  3. Andrey Karpov, Victoria Khanieva. Kushandisa muchina kudzidza mune static ongororo yechirongwa sosi kodhi.
  4. PVS-Studio. Zvinyorwa. Zvimwe zvirongwa zvekuongorora.
  5. Andrey Karpov. Hunhu hwePVS-Studio analyzer uchishandisa muenzaniso weEFL Core Libraries, 10-15% manyepo enhema..
  6. PVS-Studio. Zvinyorwa. Misa kudzvinyirirwa kweanalyzer mameseji.
  7. Ivan Andryashin. Nezve mayedzero atakaita static ongororo papurojekiti yedu yedzidzo simulator yeX-ray endovascular surgery.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Iyo PVS-Studio timu yakavandudza sei Unreal Injini kodhi.
  9. Andrey Karpov. Zvikonzero zvekuunza iyo static code analyzer PVS-Studio mune yekuvandudza maitiro.

Maitiro ekuita iyo static kodhi analyzer mune yenhaka purojekiti pasina kusimudzira timu

Kana iwe uchida kugovera chinyorwa ichi nevateereri vanotaura Chirungu, tapota shandisa shanduro yekushandura: Andrey Karpov. Maitiro ekusuma static kodhi analyzer muchirongwa chenhaka uye kwete kuodza moyo timu.

Source: www.habr.com

Voeg