Ukhathele ukubuyekezwa okungapheli kwekhodi noma ukulungisa iphutha, ngezinye izikhathi ucabanga ukuthi ungayenza kanjani impilo yakho ibe lula. Futhi ngemva kokusesha kancane, noma ukukhubeka kuyo ngephutha, ungabona inkulumo yomlingo: "Ukuhlaziya okuqinile". Ake sibone ukuthi iyini nokuthi ingasebenzisana kanjani nephrojekthi yakho.

Eqinisweni, uma ubhala nganoma yiluphi ulimi lwesimanje, khona-ke, ngaphandle kokuqaphela, uyisebenzise ngokusebenzisa i-analyzer emile. Iqiniso liwukuthi noma yimuphi umdidiyeli wesimanje uhlinzeka, nakuba isethi encane, yezexwayiso mayelana nezinkinga ezingaba khona kukhodi. Isibonelo, lapho uhlanganisa ikhodi ye-C++ ku-Visual Studio ungase ubone okulandelayo:

Kulesi okukhiphayo sibona ukuthi variable i-var ayizange isetshenziswe noma kuphi emsebenzini. Ngakho-ke empeleni, cishe njalo usebenzisa isihlaziyi sekhodi esilula. Kodwa-ke, ngokungafani nabahlaziyi abangochwepheshe abanjengo-Coverity, i-Klocwork noma i-PVS-Studio, izexwayiso ezinikezwe umdidiyeli zingabonisa kuphela ububanzi obuncane bezinkinga.
Uma ungazi ngokuqinisekile ukuthi kuyini ukuhlaziywa okumile nokuthi ungakusebenzisa kanjani, ukuze ufunde kabanzi ngale ndlela yokusebenza.
Kungani udinga ukuhlaziya okumile?
Ngamafuphi: ukusheshisa nokwenza lula.
Ukuhlaziya okuqinile kukuvumela ukuthi uthole izinkinga eziningi ezihlukene kukhodi: kusukela ekusetshenzisweni okungalungile kokwakhiwa kolimi kuye ekubhaleni amagama. Ngokwesibonelo, esikhundleni
auto x = obj.x;
auto y = obj.y;
auto z = obj.z;Ubhale ikhodi elandelayo:
auto x = obj.x;
auto y = obj.y;
auto z = obj.x;Njengoba ubona, kune-typo emgqeni wokugcina. Isibonelo, i-PVS-Studio ikhipha isexwayiso esilandelayo:
Cabangela ukubuyekeza ukulunga kokusetshenziswa kwento ethi 'y'.
Uma ufuna ukufaka izandla zakho kuleli phutha, zama isibonelo esenziwe ngomumo ku-Compiler Explorer: **.
Futhi njengoba uqonda, akunakwenzeka ngaso sonke isikhathi ukunaka izingxenye ezinjalo zekhodi ngokushesha, futhi ngenxa yalokhu, ungakwazi ukuhlala phansi ukulungisa iphutha ihora elihle, uzibuze ukuthi kungani konke kusebenza ngendlela engavamile.
Nokho, lokhu kuyiphutha ngokucacile. Kuthiwani uma unjiniyela ebhala ikhodi ephansi ngoba ekhohlwe ubuqili obuthile bolimi? Noma uyivumele kukhodi ? Ngeshwa, izimo ezinjalo zivamile ngokuphelele futhi ingxenye enkulu yesikhathi ichithwa ukulungisa amaphutha ngokuqondile ikhodi yokusebenza equkethe ama-typos, amaphutha ajwayelekile noma ukuziphatha okungacacisiwe.
Kungenxa yalezi zimo lapho ukuhlaziya okumile kwavela khona. Lona umsizi womthuthukisi ozokhomba izinkinga ezihlukahlukene kukhodi futhi achaze emibhalweni ukuthi kungani kungadingekile ukubhala ngale ndlela, ukuthi yini engaholela kuyo nokuthi ungayilungisa kanjani. Nasi isibonelo sokuthi ingase ibukeke kanjani: **.
Ungathola amaphutha athakaselekayo angatholwa umhlaziyi kuma-athikili:
Manje njengoba usufundile le nto futhi uqiniseka ngezinzuzo zokuhlaziya okumile, ungase ufune ukuyizama. Kodwa ungaqala kuphi? Ungalihlanganisa kanjani ithuluzi elisha kuphrojekthi yakho yamanje? Futhi kanjani ukwethula iqembu kuye? Uzothola izimpendulo zale mibuzo ngezansi.
Qaphela. Ukuhlaziya okuqinile akuthathi indawo noma akukhanseli into ewusizo njengokubuyekezwa kwekhodi. Iphelelisa le nqubo, isiza ukuqaphela nokulungisa ama-typos, amaphutha, nemiklamo eyingozi kusengaphambili. Kukhiqiza kakhulu ukugxila ekubuyekezweni kwekhodi kuma-algorithms kanye nokucaca kwekhodi, kunokubheka abakaki ababekwe kabi noma .
0. Ukwazi ithuluzi
Konke kuqala ngenguqulo yesilingo. Ngempela, kunzima ukunquma ukwethula okuthile ohlelweni lokuthuthukiswa uma ungakaze ulibone ithuluzi bukhoma ngaphambili. Ngakho-ke, into yokuqala okufanele uyenze ukulanda .
Ozokufunda kulesi sigaba:
- Yiziphi izindlela zokuxhumana ne-analyzer;
- Ingabe i-analyzer iyahambisana nendawo yakho yokuthuthuka?
- Yiziphi izinkinga ezikhona njengamanje kumaphrojekthi akho?
Ngemva kokufaka konke okudingayo, into yokuqala okufanele uyenze ukuqhuba ukuhlaziya yonke iphrojekthi (, , ). Endabeni ye-PVS-Studio ku-Visual Studio uzobona isithombe esifanayo (uyachofozwa):

Iqiniso liwukuthi abahlaziyi abamile bavame ukukhipha inombolo enkulu yezixwayiso zamaphrojekthi anesisekelo esikhulu sekhodi. Asikho isidingo sokuzilungisa zonke, njengoba iphrojekthi yakho isivele isebenza, okusho ukuthi lezi zinkinga azibalulekile. Nokho, wena futhi uwalungise uma kunesidingo. Ukuze wenze lokhu, udinga ukuhlunga okukhiphayo futhi ushiye kuphela imilayezo ethembeke kakhulu. Ku-plugin ye-PVS-Studio ye-Visual Studio, lokhu kwenziwa ngokuhlunga ngamazinga wamaphutha nezigaba. Ukuze uthole okukhiphayo okunembe kakhulu, shiya kuphela High и General (futhi kuyachofozeka):

Ngempela, izexwayiso ze-178 zilula kakhulu ukubuka kunezinkulungwane ezimbalwa ...
Kumathebhu Medium и ongaphakeme Izixwayiso ezinhle zivame ukuhlangana nazo, kodwa lezi zigaba zifaka phakathi ukuxilongwa okunokunemba okuphansi (ukuthembeka). Funda kabanzi ngamazinga ezixwayiso kanye nezinketho zokusebenza ngaphansi kwazo Windows Ungayibona lapha: **.
Ukubuyekeza ngempumelelo amaphutha athakazelisa kakhulu (futhi wawalungisa ngempumelelo) kufanelekile . Lokhu kuyadingeka ukuze izixwayiso ezintsha zingalahleki phakathi kwezindala. Ngaphezu kwalokho, i-analyzer emile iwumsizi womhleli, hhayi uhlu lwezinambuzane. 🙂
1. Okuzenzakalelayo
Ngemva kokujwayelana, sekuyisikhathi sokumisa ama-plugin futhi uhlanganise ku-CI. Lokhu kumele kwenziwe ngaphambi kokuthi abahleli bezinhlelo baqale ukusebenzisa i-static analyzer. Iqiniso liwukuthi umhleli angase akhohlwe ukunika amandla ukuhlaziya noma angafuni nhlobo ukukwenza. Ukuze wenze lokhu, udinga ukuhlola okokugcina kwakho konke ukuze ikhodi engahloliwe ingakwazi ukungena egatsheni lokuthuthukiswa okujwayelekile.
Ozokufunda kulesi sigaba:
- Yiziphi izinketho zokuzenzakalela ezinikezwa yithuluzi;
- Ingabe i-analyzer iyahambisana nesistimu yakho yokuhlanganisa?
Njengoba imibhalo ephelele ingekho, ngezinye izikhathi kufanele ubhale . Lokhu kuvamile futhi siyajabula ukukusiza. 🙂
Manje ake siqhubekele kumasevisi okuhlanganiswa okuqhubekayo (CI). Noma iyiphi i-analyzer ingasetshenziswa kuzo ngaphandle kwezinkinga ezinkulu. Ukuze wenze lokhu, udinga ukudala isigaba esihlukile epayipini, elivame ukutholakala ngemuva kokuhlolwa kwesakhiwo kanye neyunithi. Lokhu kwenziwa kusetshenziswa izinsiza ezahlukahlukene ze-console. Isibonelo, i-PVS-Studio inikeza izinsiza ezilandelayo:
- (ukuhlaziywa kwezixazululo, amaphrojekthi e-C#, C++ ku- Windows)
- (ukuqapha ukuhlanganisa)
- (ukuhlaziywa kwamaphrojekthi e-C++ ku- Linux / macOS)
- (ukuhlaziywa kwezixazululo, amaphrojekthi e-C# ku- Linux / macOS)
- (ukuhlaziywa kwamaphrojekthi weJava)
- (bika isiguquli sefayela)
Ukuhlanganisa ukuhlaziya ku-CI, udinga ukwenza izinto ezintathu:
- Faka i-analyzer;
- Run analysis;
- Letha imiphumela.
Isibonelo, ukufaka i-PVS-Studio ku- Linux (Debian-base) udinga ukusebenzisa imiyalo elandelayo:
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-studioKuzinhlelo ezilawulwayo Windows Ayikho inketho yokufaka i-analyzer evela kumphathi wephakheji, kodwa kungenzeka ukufaka i-analyzer kusuka kulayini womyalo:
PVS-Studio_setup.exe /verysilent /suppressmsgboxes
/norestart /nocloseapplicationsFunda kabanzi mayelana nokusebenzisa i-PVS-Studio ezinhlelweni ezisebenzayo Windows ungafunda **.
Ngemva kokufaka, udinga ukuqhuba ukuhlaziya ngokuqondile. Nokho, kunconywa ukwenza lokhu kuphela ngemva kokuhlanganiswa nokuhlolwa sekudlulile. Lokhu kungenxa yokuthi ukuhlaziya okumile ngokuvamile kuthatha isikhathi esiphindwe kabili kunokuhlanganiswa.
Njengoba indlela yokuqalisa incike epulatifomu kanye nezici zephrojekthi, ngizokukhombisa inketho ye-C++ (Linux) njengesibonelo:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -wUmyalo wokuqala uzokwenza ukuhlaziya, kanti owesibili iguqula umbiko ube ifomethi yombhalo, iwuveze esikrinini bese ibuyisela ikhodi yokubuyisela ngaphandle kuka-0 uma kunezixwayiso. Indlela efana nale ingasetshenziswa kalula ukuvimba isakhiwo uma kunemilayezo yephutha. Nokho, ungakwazi njalo ukususa ifulegi -w futhi ungavimbi umhlangano oqukethe izexwayiso.
Qaphela. Ifomethi yombhalo ayilungile. Inikezwa kalula njengesibonelo. Naka ifomethi yombiko ejabulisa kakhulu - i-FullHtml. Ikuvumela ukuthi uzulazule ngekhodi.
Ungafunda kabanzi mayelana nokusetha ukuhlaziywa ku-CI esihlokweni esithi ""(Windows) noma ""(Linux).
Kulungile, ulungiselele isihlaziyi kuseva yokwakha. Manje, uma othile elayishe ikhodi engahloliwe, isigaba sokuqinisekisa sizohluleka, futhi uzokwazi ukubona inkinga, noma kunjalo, lokhu akulula ngokuphelele, ngoba kuphumelela kakhulu ukuhlola iphrojekthi hhayi ngemva kokuba amagatsha ehlanganisiwe, kodwa ngaphambi kwakho, esigabeni sokucela ukudonsa. A.
Ngokuvamile, ukusetha ukuhlaziywa kwesicelo sokudonsa akufani kakhulu nokwethulwa okuvamile kokuhlaziya ku-CI. Ngaphandle kwesidingo sokuthola uhlu lwamafayela ashintshiwe. Lokhu kuvame ukutholwa ngokubuza umehluko phakathi kwamagatsha usebenzisa i-git:
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.listManje udinga ukudlulisa lolu hlu lwamafayela kumhlaziyi njengokufakwayo. Isibonelo, ku-PVS-Studio lokhu kwenziwa kusetshenziswa ifulegi -S:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.listUngathola okwengeziwe mayelana nokuhlaziya izicelo zokudonsa **. Ngisho noma i-CI yakho ingekho ohlwini lwezinsizakalo ezishiwo esihlokweni, uzothola isigaba esijwayelekile esinikezwe ithiyori yalolu hlobo lokuhlaziya luwusizo.
Ngokusetha ukuhlaziya kwezicelo zokudonsa, ungavimba ukuzibophezela okuqukethe izexwayiso, ngaleyo ndlela udale umngcele ikhodi engahloliwe engakwazi ukweqa.
Lokhu kuhle impela, kodwa ngingathanda ukwazi ukubona zonke izixwayiso endaweni eyodwa. Hhayi kuphela kusukela ku-analyzer emile, kodwa futhi kusukela ekuhlolweni kweyunithi noma kusukela ku-analyzer eguqukayo. Kunezinsizakalo ezahlukahlukene nama-plugin alokhu. I-PVS-Studio, ngokwesibonelo, ine .
2. Ukuhlanganiswa emishinini yonjiniyela
Manje sekuyisikhathi sokufaka futhi ulungiselele isihlaziyi ukuze sisetshenziswe nsuku zonke. Kuleli qophelo usuvele ujwayelene neningi lezindlela zokusebenza, ngakho-ke lokhu kungabizwa ngengxenye elula kakhulu.
Njengenketho elula, abathuthukisi bangakwazi ukufaka i-analyzer edingekayo ngokwabo. Nokho, lokhu kuzothatha isikhathi esiningi futhi kubaphazamise ekuthuthukisweni, ukuze ukwazi ukuzenzela le nqubo usebenzisa isifaki namafulegi adingekayo. Ku-PVS-Studio kunezinhlobonhlobo Noma kunjalo, kuhlala kukhona abaphathi bephakheji, isibonelo, i-Chocolatey (Windows), I-Homebrew (macOS) noma izinketho eziningi ze Linux.
Khona-ke uzodinga ukufaka ama-plugin adingekayo, isibonelo , , njll
3. Ukusetshenziswa kwansuku zonke
Kulesi sigaba, sekuyisikhathi sokusho amagama ambalwa mayelana nezindlela zokusheshisa i-analyzer ngesikhathi sokusetshenziswa kwansuku zonke. Ukuhlaziywa okuphelele kwayo yonke iphrojekthi kuthatha isikhathi esiningi, kodwa siyishintsha kangaki ikhodi kuyo yonke iphrojekthi ngesikhathi esisodwa? Akukho ukwenza kabusha okukhulu kangangokuthi kuzothinta ngokushesha yonke isisekelo sekhodi. Inani lamafayela ashintshwayo ngesikhathi akuvamile ukuba lidlule ishumi nambili, ngakho kunengqondo ukuwahlaziya. Isimo esinjalo sikhona . Vele ungethuki, leli akulona elinye ithuluzi. Lena imodi ekhethekile evumela ukuthi uhlaziye amafayela ashintshiwe kuphela kanye nokuncika kwawo, futhi lokhu kwenzeka ngokuzenzakalelayo ngemva kokwakha uma usebenza ku-IDE ne-plugin efakiwe.
Uma i-analyzer ithola izinkinga kukhodi esanda kuguqulwa, izobika lokhu ngokuzimela. Isibonelo, i-PVS-Studio izokutshela ngalokhu isebenzisa isexwayiso:

Yebo, ukutshela abathuthukisi ukuthi basebenzise ithuluzi akwanele. Sidinga ukubatshela ngandlela thize ukuthi kuyini nokuthi kunjani. Nazi, isibonelo, izindatshana ezimayelana nesiqalo esisheshayo se-PVS-Studio, kodwa ungathola okokufundisa okufanayo kunoma yiliphi ithuluzi olithandayo:
Izihloko ezinjalo zinikeza lonke ulwazi oludingekayo ukuze zisetshenziswe nsuku zonke futhi azithathi isikhathi esiningi. 🙂
Ngisho nasesiteji sokwazi ithuluzi, sicindezele izexwayiso eziningi phakathi nokwethulwa kokuqala. Ngeshwa, abahlaziyi be-static abaphelele, ngakho-ke ngezikhathi ezithile banikeza imibono engamanga. Ngokuvamile kulula ukuwacindezela; isibonelo, ku-plugin ye-PVS-Studio ye-Visual Studio udinga nje ukuchofoza inkinobho eyodwa:

Nokho, ungenza okungaphezu nje kokubacindezela. Isibonelo, ungabika inkinga ukuze usekele. Uma okungelona iqiniso kungalungiswa, ezibuyekezweni ezizayo ungakwazi ukuqaphela ukuthi isikhathi ngasinye kukhona amaphozithivu ambalwa nambalwa aqondene ngqo ne-codebase yakho.
Ngemva kokuhlanganiswa
Ngakho-ke sidlule kuzo zonke izigaba zokuhlanganisa ukuhlaziya okumile ohlelweni lokuthuthukiswa. Naphezu kokubaluleka kokusetha amathuluzi anjalo ku-CI, indawo ebaluleke kakhulu yokuwaqhuba yikhompyutha yonjiniyela. Phela, i-static analyzer ayilona ijaji elithi endaweni ethile kude nawe ukuthi ikhodi ayilungile. Kunalokho, umsizi okutshela uma ukhathele futhi akukhumbuze uma kukhona oyikhohliwe.
Yiqiniso, ngaphandle kokusetshenziswa okuvamile, ukuhlaziywa okumile akunakwenzeka ukwenza kube lula ukuthuthukiswa. Phela, inzuzo yayo eyinhloko kanjiniyela ayilele kangako ekufuneni izingxenye zekhodi eziyinkimbinkimbi neziyimpikiswano, kodwa ekutholakaleni kwazo kusenesikhathi. Vumelana ukuthi ukuthola inkinga ngemva kokuthunyelwa kokuhlelwa ukuze kuhlolwe akujabulisi nje kuphela, kodwa futhi kudla isikhathi esiningi. Ukuhlaziya okungaguquki, uma kusetshenziswa njalo, kubheka lonke ushintsho ngqo kukhompuyutha yakho futhi kubike izindawo ezisolisayo ngenkathi usebenza kukhodi.
Futhi uma wena noma ozakwenu ningakaqiniseki ukuthi kufanelekile yini ukusebenzisa i-analyzer, ngiphakamisa ukuthi manje niqale ukufunda lesi sihloko "". Ibhekana nokukhathazeka okuvamile konjiniyela ukuthi ukuhlaziywa okumile kuzothatha isikhathi sabo nokunye.
Uma ufuna ukwabelana ngalesi sihloko nezithameli ezikhuluma isiNgisi, sicela usebenzise isixhumanisi sokuhumusha: UMaxim Zvyagintsev. .
Source: www.habr.com
