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.
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:
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,
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:
Kana iwe uchida kupinza maoko ako muchikanganiso ichi, edza muenzaniso wakagadzirirwa-wakagadzirwa muCompiler Explorer: *
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
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: *
Iwe unogona kuwana zvimwe zvinonakidza zvikanganiso izvo analyzer anogona kuona mune zvinyorwa:
Pamusoro gumi zvikanganiso mumapurojekiti eC ++ e10 Pamusoro gumi zvikanganiso muC # mapurojekiti e10 Epamusoro gumi Bugs muJava Projects ye10
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
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
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 (
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
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: *
Kunyatsoongorora zvikanganiso zvinonyanya kufadza (uye nekubudirira kuzvigadzirisa) zvakakosha
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
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:
PVS-Studio_Cmd.exe (kuongororwa kwemhinduro, C#, C++ mapurojekiti paWindows)CLMonitor.exe (kuunganidza kuongorora)pvs-studio-analyzer (kuongororwa kwemapurojekiti eC ++ paLinux / macOS)pvs-studio-dotnet (mhinduro yekuongorora, C# mapurojekiti paLinux / macOS)pvs-studio.jar (kuongororwa kwemapurojekiti eJava)PlogConverter (report file converter)
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 *
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
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 "
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 *
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
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
Ipapo iwe uchafanirwa kuisa anodiwa plugins, semuenzaniso we
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
Kana iyo analyzer ikaona matambudziko mune ichangobva kuchinjwa kodhi, inoshuma izvi yakazvimirira. Semuenzaniso, PVS-Studio ichakuudza nezve izvi uchishandisa yambiro:
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:
Maitiro ekumhanyisa PVS-Studio paWindows (C, C++, C #) Maitiro ekumhanyisa PVS-Studio paLinux uye macOS (C, C ++) Maitiro ekuvhura PVS-Studio Java
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:
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 "
Kana iwe uchida kugovera chinyorwa ichi nevateereri vanotaura Chirungu, tapota shandisa shanduro yekushandura: Maxim Zvyagintsev.
Source: www.habr.com