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,
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:
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
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:
Amaphutha aphezulu ayi-10 kumaphrojekthi we-C++ ka-2019 Amaphutha aphezulu ayi-10 kumaphrojekthi we-C# ka-2019 Iziphazamisi Eziphezulu Eziyi-10 Kumiklamo ye-Java yango-2019
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 (
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
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: *
Ukubuyekeza ngempumelelo amaphutha athakazelisa kakhulu (futhi wawalungisa ngempumelelo) kufanelekile
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
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:
I-PVS-Studio_Cmd.exe (ukuhlaziywa kwezixazululo, amaphrojekthi we-C#, C++ ku-Windows)I-CLMonitor.exe (ukuqapha ukuhlanganisa)pvs-studio-analyzer (ukuhlaziywa kwamaphrojekthi we-C++ ku-Linux / macOS)pvs-studio-dotnet (ukuhlaziywa kwesixazululo, amaphrojekthi we-C# ku-Linux / macOS)pvs-studio.jar (ukuhlaziywa kwamaphrojekthi weJava)I-PlogConverter (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-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 *
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
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 "
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 *
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
Khona-ke uzodinga ukufaka ama-plugin adingekayo, isibonelo
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
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:
Isetshenziswa kanjani i-PVS-Studio ku-Windows (C, C++, C#) Ungayisebenzisa kanjani i-PVS-Studio ku-Linux naku-macOS (C, C++) Ungayethula kanjani i-PVS-Studio Java
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 "
Uma ufuna ukwabelana ngalesi sihloko nezithameli ezikhuluma isiNgisi, sicela usebenzise isixhumanisi sokuhumusha: UMaxim Zvyagintsev.
Source: www.habr.com