Ukuhlaziya okungaguquki - kusuka kusingeniso kuya ekuhlanganiseni

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.

Ukuhlaziya okungaguquki - kusuka kusingeniso kuya ekuhlanganiseni
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:

Ukuhlaziya okungaguquki - kusuka kusingeniso kuya ekuhlanganiseni
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, funda lesi sihlokoukuze 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:

V537 Cabangela ukubuyekeza ukulunga kokusetshenziswa kwento ethi 'y'.

Uma ufuna ukufaka izandla zakho kuleli phutha, zama isibonelo esenziwe ngomumo ku-Compiler Explorer: *khala*.

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 ukuziphatha okungachaziwe? 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: *khala*.

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 funda imisebenzi yokuqhathanisa eyisicefe.

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 inguqulo eyisivivinyo.

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 (Windows, Linux, macOS). Endabeni ye-PVS-Studio ku-Visual Studio uzobona isithombe esifanayo (uyachofozwa):

Ukuhlaziya okungaguquki - kusuka kusingeniso kuya ekuhlanganiseni
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 ungabheka izexwayiso ezithakazelisa kakhulu 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):

Ukuhlaziya okungaguquki - kusuka kusingeniso kuya ekuhlanganiseni
Ngempela, izexwayiso ze-178 zilula kakhulu ukubuka kunezinkulungwane ezimbalwa ...

Kumathebhu Medium ΠΈ ongaphakeme Ngokuvamile kuba nezixwayiso ezinhle, kodwa lezi zigaba zihlanganisa lezo zindlela zokuxilonga ezinokunemba okuncane (ukwethembeka). Ulwazi olwengeziwe mayelana namazinga esixwayiso kanye nezinketho zokusebenza ngaphansi kweWindows zingatholakala lapha: *khala*.

Ukubuyekeza ngempumelelo amaphutha athakazelisa kakhulu (futhi wawalungisa ngempumelelo) kufanelekile cindezela izixwayiso ezisele. 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 ukwesekwa. 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:

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-studio

Ezinhlelweni ezisebenzisa iWindows, ayikho indlela yokufaka i-analyzer kusuka kumphathi wephakheji, kodwa kungenzeka ukuthi usebenzise i-analyzer kusuka kulayini womyalo:

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

Ungafunda kabanzi mayelana nokuphakela i-PVS-Studio kumasistimu asebenzisa iWindows *lapha*.

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 endaweni yesikhulumi nasezicini zephrojekthi, ngizobonisa inketho ye-C++ (Linux) njengesibonelo:

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

Umyalo wokuqala uzokwenza ukuhlaziya, kanti owesibili izimvilophuiguqula 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 "I-PVS-Studio kanye Nokuhlanganiswa Okuqhubekayo"(IWindows) noma"Ungayisetha kanjani i-PVS-Studio kuTravis CI"(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.list

Manje 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.list

Ungathola okwengeziwe mayelana nokuhlaziya izicelo zokudonsa *lapha*. 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 i-plugin yokuhlanganiswa ku-SonarQube.

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 amafulegi okufakwa ngokuzenzakalelayo. Kodwa-ke, kuhlale kukhona abaphathi bamaphakheji, ngokwesibonelo, iChocolatey (Windows), Homebrew (macOS) noma inqwaba yezinketho zeLinux.

Khona-ke uzodinga ukufaka ama-plugin adingekayo, isibonelo e-Visual Studio, IDEA, Umgibeli 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 imodi yokuhlaziya ekhuphukayo. 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:

Ukuhlaziya okungaguquki - kusuka kusingeniso kuya ekuhlanganiseni
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:

Ukuhlaziya okungaguquki - kusuka kusingeniso kuya ekuhlanganiseni
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 "Izizathu zokwethula i-static code analyzer PVS-Studio enqubweni yokuthuthukisa". Ibhekana nokukhathazeka okuvamile konjiniyela ukuthi ukuhlaziywa okumile kuzothatha isikhathi sabo nokunye.

Ukuhlaziya okungaguquki - kusuka kusingeniso kuya ekuhlanganiseni

Uma ufuna ukwabelana ngalesi sihloko nezithameli ezikhuluma isiNgisi, sicela usebenzise isixhumanisi sokuhumusha: UMaxim Zvyagintsev. Ukuhlaziya Okuqinile: Ukusuka Ekuqaliseni Kuya Ekuhlanganiseni.

Source: www.habr.com

Engeza amazwana