Nyocha static - site na ntinye aka na ntinye

Ike gwụrụ nke nyocha koodu na-adịghị agwụ agwụ ma ọ bụ debugging, mgbe ụfọdụ ị na-eche maka otu esi eme ka ndụ gị dị mfe. Na mgbe ịchọchara ntakịrị, ma ọ bụ site na ịsụ ngọngọ na ya, ị nwere ike ịhụ nkebi ahịrịokwu ahụ: "Ntụle static." Ka anyị hụ ihe ọ bụ yana otu ọ ga-esi mekọrịta ọrụ gị.

Nyocha static - site na ntinye aka na ntinye
N'ezie, ọ bụrụ na ị na-ede n'asụsụ ọ bụla ọgbara ọhụrụ, mgbe ahụ, na-enweghị ọbụna na-aghọta ya, ị na-agba ọsọ ya site static analyzer. Nke bụ́ eziokwu bụ na ndị nchịkọta ọgbara ọhụrụ ọ bụla na-enye, ọ bụ ezie na ọ dị ntakịrị, setịpụrụ ịdọ aka ná ntị banyere nsogbu ndị nwere ike ịdị na koodu ahụ. Dịka ọmụmaatụ, mgbe ị na-achịkọta koodu C++ na Visual Studio ị nwere ike ịhụ ihe ndị a:

Nyocha static - site na ntinye aka na ntinye
Na mmepụta a anyị na-ahụ na agbanwe agbanwe var ejibeghị ebe ọ bụla na ọrụ ahụ. Yabụ n'eziokwu, ọ fọrọ nke nta ka ọ bụrụ mgbe niile na-eji ihe nyocha koodu static dị mfe. Agbanyeghị, n'adịghị ka ndị nyocha ọkachamara dị ka Coverity, Klocwork ma ọ bụ PVS-Studio, ịdọ aka ná ntị nke ndị nchịkọta na-enye nwere ike igosi obere nsogbu.

Ọ bụrụ na ịmaghị nke ọma ihe static analysis bụ na otu esi eme ya, gụọ akụkọ aịmụtakwu banyere usoro a.

Kedu ihe kpatara ịchọrọ nyocha static?

Na nkenke: osooso na mfe.

Nyocha static na-enye gị ohere ịchọta ọtụtụ nsogbu dị iche iche na koodu ahụ: site na iji asụsụ na-ezighị ezi na-arụ ọrụ ruo na typos. Dị ka ihe atụ, kama

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

I dere koodu a:

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

Dịka ị na-ahụ, enwere typo na ahịrị ikpeazụ. Dịka ọmụmaatụ, PVS-Studio na-enye ịdọ aka ná ntị ndị a:

V537 Tụlee ịtụle izi ezi nke ojiji ihe 'y'.

Ọ bụrụ n’ịchọrọ itinye aka gị na njehie a, nwaa ihe atụ emeberela na Compiler Explorer: *akwa akwa*.

Ma dị ka ị ghọtara, ọ bụghị mgbe niile ka ị ga-aṅa ntị na ngalaba ndị dị otú ahụ nke koodu ozugbo, na n'ihi nke a, ị nwere ike ịnọdụ ala na-emezigharị maka oge dị mma, na-eche ihe mere ihe niile ji arụ ọrụ dị iche iche.

Agbanyeghị, nke a doro anya bụ mmejọ. Gịnị ma ọ bụrụ na onye mmepụta dere suboptimal code n'ihi na ọ chefuru ụfọdụ aghụghọ nke asụsụ? Ma ọ bụ ọbụna kwere ya na koodu agwa enweghị nkọwa? N'ụzọ dị mwute, ndị dị otú ahụ ikpe bụ kpam kpam na òkè nke ọdụm na-eji debugging kpọmkwem ọrụ koodu nke nwere typos, ahụkarị njehie ma ọ bụ na-akọwapụtaghị omume.

Ọ bụ maka ọnọdụ ndị a ka nyocha static pụtara. Nke a bụ onye na-enyere aka maka onye mmepụta nke ga-akọwapụta nsogbu dị iche iche na koodu ahụ ma kọwaa n'akwụkwọ ihe mere na ọ dịghị mkpa ide otú a, ihe ọ nwere ike iduga na otu esi edozi ya. Nke a bụ ọmụmaatụ ihe ọ nwere ike ịdị ka: *akwa akwa*.

Ị nwere ike ịhụ njehie ndị ọzọ na-adọrọ mmasị nke onye nyocha nwere ike ịchọpụta n'ime akụkọ ndị a:

Ugbu a ị gụọla akwụkwọ a ma kwenye na uru dị na nyocha static, ị nwere ike ịnwale ya. Ma olee ebe ịmalite? Otu esi ejikọta ngwa ọrụ ọhụrụ n'ime ọrụ gị ugbu a? Na ka esi ewebata otu ya? Ị ga-ahụ azịza ajụjụ ndị a n'okpuru.

Cheta. Nyocha static anaghị edochi ma ọ bụ kagbuo ihe bara uru dị ka nyocha koodu. Ọ na-emeju usoro a, na-enyere aka ịchọpụta na mezie typos, ezighi ezi, na atụmatụ dị ize ndụ n'ọdịnihu. Ọ na-arụpụta ihe karịa ilekwasị anya na nyocha koodu na algọridim na koodu doro anya, kama ịchọ akara nne na-ezighi ezi ma ọ bụ gụọ ọrụ ntụnyere na-agwụ ike.

0. Ịmata ngwá ọrụ

Ihe niile na-amalite na ụdị nnwale. N'ezie, ọ na-esiri ike ikpebi ịme ihe n'ime usoro mmepe ahụ ma ọ bụrụ na ị hụbeghị ngwá ọrụ ahụ na-ebi ndụ mbụ. Ya mere, ihe mbụ ị ga-eme bụ nbudata ụdị nke Nnwale.

Ihe ị ga-amụta n'oge a:

  • Kedu ụzọ esi emekọrịta ihe na onye nyocha;
  • Ihe nyocha ahụ ọ dabara na gburugburu mmepe gị?
  • Kedu nsogbu dị ugbu a na ọrụ gị?

Mgbe itinyechara ihe niile ịchọrọ, ihe mbụ ị ga - eme bụ ime nyocha nke ọrụ ahụ dum (Windows, Linux, MacOS). N'ihe banyere PVS-Studio na Visual Studio ị ga-ahụ foto yiri ya (nke a na-pịa):

Nyocha static - site na ntinye aka na ntinye
Nke bụ eziokwu bụ na static analyzers na-enyekarị ọtụtụ ịdọ aka ná ntị maka ọrụ nwere nnukwu koodu ntọala. Ọ dịghị mkpa idozi ha niile, ebe ọ bụ na ọrụ gị na-arụ ọrụ, nke pụtara na nsogbu ndị a adịghị mkpa. Agbanyeghị, gị ị nwere ike ile anya ịdọ aka ná ntị kacha adọrọ mmasị ma dozie ha ma ọ dị mkpa. Iji mee nke a, ịkwesịrị ịchachaa mmepụta ma hapụ naanị ozi ndị a pụrụ ịdabere na ya. Na ngwa mgbakwunye PVS-Studio maka Visual Studio, a na-eme nke a site na nzacha site na ọkwa njehie na edemede. Maka mmepụta kacha zie ezie, hapụ naanị High и General (nwere ike ịpị):

Nyocha static - site na ntinye aka na ntinye
N'ezie, ịdọ aka ná ntị 178 dị mfe ilele karịa ọtụtụ puku ...

Na taabụ ọkara и Low Ọtụtụ mgbe, a na-enwe ịdọ aka ná ntị dị mma, mana edemede ndị a gụnyere nyocha ndị ahụ nwere obere izi ezi (ịkwado ntụkwasị obi). Enwere ike ịchọta ozi ndị ọzọ gbasara ọkwa ịdọ aka ná ntị na nhọrọ maka ịrụ ọrụ n'okpuru Windows ebe a: *akwa akwa*.

N'ịbụ onye nyochara nke ọma njehie kachasị adọrọ mmasị (ma dozie ha nke ọma) bara uru kwụsị ịdọ aka ná ntị fọdụrụ. Nke a dị mkpa ka ịdọ aka ná ntị ọhụrụ ghara ịla n'iyi n'etiti ndị ochie. Na mgbakwunye, onye nyocha static bụ onye inyeaka maka onye mmemme, ọ bụghị ndepụta nke ahụhụ. 🙂

1. Akpaaka

Mgbe ị matachara, ọ bụ oge ịhazi plugins na itinye n'ime CI. A ghaghị ime nke a tupu ndị mmemme amalite iji static analyzer. Nke bụ eziokwu bụ na onye mmemme nwere ike ichefu ime nyocha ma ọ bụ na ọ chọghị ime ya ma ọlị. Iji mee nke a, ịkwesịrị ịme nyocha ikpeazụ nke ihe niile ka koodu a na-enyochabeghị enweghị ike ịbanye na ngalaba mmepe izugbe.

Ihe ị ga-amụta n'oge a:

  • Kedu nhọrọ akpaaka ka ngwá ọrụ na-enye;
  • Ihe nyocha ahụ ọ dabara na sistemụ mgbakọ gị?

Ebe ọ bụ na akwụkwọ zuru oke adịghị, mgbe ụfọdụ ị ga-edebanye aha nkwado. Nke a bụ ihe nkịtị ma anyị nwere obi ụtọ inyere gị aka. 🙂

Ugbu a, ka anyị gaa n'ihu na ọrụ ntinye aka na-aga n'ihu (CI). Enwere ike itinye nyocha ọ bụla n'ime ha n'enweghị nsogbu siri ike. Iji mee nke a, ịkwesịrị ịmepụta ọkwa dị iche na pipeline, nke a na-emekarị mgbe nyochachara ụlọ na otu. A na-eme nke a site na iji ngwa njikwa console dị iche iche. Dịka ọmụmaatụ, PVS-Studio na-enye akụrụngwa ndị a:

Iji tinye nyocha na CI, ịkwesịrị ịme ihe atọ:

  • Wụnye onye nyocha;
  • Gbaa nyocha;
  • Wepụta nsonaazụ.

Dịka ọmụmaatụ, iji wụnye PVS-Studio na Linux (Debian-base), ịkwesịrị ịme iwu ndị a:

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

Na sistemụ na-agba ọsọ Windows, ọ nweghị ụzọ iji wụnye onye nyocha site na njikwa ngwugwu, mana enwere ike ibuga onye nyocha site na ahịrị iwu:

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

Ị nwere ike ịgụkwu banyere ibuga PVS-Studio na sistemụ na-agba Windows *ebe a*.

Mgbe echichi, ịkwesịrị ịgba ọsọ nyocha ozugbo. Otú ọ dị, a na-atụ aro ka ịme nke a nanị mgbe nchịkọta na ule gafechara. Nke a bụ n'ihi na nyocha static na-ewekarị ugboro abụọ ogologo oge nchikota.

Ebe usoro mmalite na-adabere na ikpo okwu na atụmatụ ọrụ, m ga-egosi nhọrọ maka C ++ (Linux) dịka ọmụmaatụ:

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

Iwu nke mbụ ga-eme nyocha, na nke abụọ envelopuna-atụgharị akụkọ ahụ ka ọ bụrụ usoro ederede, gosipụta ya na ihuenyo wee weghachi koodu nloghachi na-abụghị 0 ma ọ bụrụ na enwere ịdọ aka ná ntị. Enwere ike iji usoro dị otú a na-adaba adaba igbochi ihe nrụpụta mgbe enwere ozi njehie. Agbanyeghị, ị nwere ike wepu ọkọlọtọ mgbe niile -w ma egbochila mgbakọ nwere ịdọ aka ná ntị.

Cheta. Ụdị ederede adịghị mma. Enyere ya nanị dị ka ihe atụ. Lezienụ anya na usoro akụkọ na-atọ ụtọ karịa - FullHtml. Ọ na-enye gị ohere ịnyagharịa site na koodu.

Ị nwere ike ịgụkwu gbasara ịmepụta nyocha na CI na isiokwu "PVS-Studio na ntinye aka na-aga n'ihu"(Windows) ma ọ bụ"Otu esi edozi PVS-Studio na Travis CI" (Linux).

Ọ dị mma, ị haziela ihe nyocha na sava wuo. Ugbu a, ọ bụrụ na mmadụ bulite koodu a na-anwaleghị, ọkwa nkwenye ahụ ga-ada, ị ga-enwe ike ịchọpụta nsogbu ahụ, Otú ọ dị, nke a adịghị adaba kpamkpam, ebe ọ bụ na ọ na-arụ ọrụ nke ọma iji lelee ọrụ ahụ ọ bụghị mgbe ejikọtala alaka ndị ahụ, ma. n'ihu ya, n'oge a na-arịọ arịrịọ A.

N'ozuzu, ịtọlite ​​​​nyocha arịrịọ ịdọrọ adịghị iche na mmalite mmalite nke nyocha na CI. Ewezuga mkpa ịnweta ndepụta faịlụ gbanwere. Enwere ike nweta ndị a site na ịjụ ajụjụ dị iche n'etiti alaka site na iji git:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

Ugbu a ịkwesịrị ịnyefe ndepụta faịlụ a na onye nyocha ka ọ bụrụ ntinye. Dịka ọmụmaatụ, na PVS-Studio a na-emejuputa a site na iji ọkọlọtọ -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

Ị nwere ike ịmatakwu gbasara nyocha arịrịọ ịdọrọ *ebe a* . Ọbụna ma ọ bụrụ na CI gị adịghị na ndepụta nke ọrụ ndị a kpọtụrụ aha n'isiokwu ahụ, ị ​​ga-ahụ na ngalaba izugbe etinyere na tiori nke ụdị nyocha a bara uru.

Site n'ịtọlite ​​nyocha nke arịrịọ ịdọrọ, ị nwere ike igbochi mmebe nwere ịdọ aka ná ntị, si otú ahụ mepụta oke nke koodu na-anwalebeghị enweghị ike ịgafe.

Nke a niile dị mma n'ezie, mana ọ ga-amasị m ka m nwee ike ịhụ ịdọ aka ná ntị niile n'otu ebe. Ọ bụghị naanị site na static analyzer, kamakwa site na nyocha nke otu ma ọ bụ site na nyocha dị ike. Enwere ọrụ na plugins dị iche iche maka nke a. PVS-Studio, dịka ọmụmaatụ, nwere ngwa mgbakwunye maka ntinye n'ime SonarQube.

2. Njikọ na igwe mmepụta ihe

Ugbu a ọ bụ oge ịwụnye na hazie ihe nyocha maka iji mmepe kwa ụbọchị. Site n'oge a, ị maralarị ọtụtụ ụzọ arụ ọrụ, yabụ enwere ike ịkpọ nke a akụkụ kachasị mfe.

Dị ka nhọrọ kachasị mfe, ndị mmepe nwere ike ịwụnye nyocha dị mkpa n'onwe ha. Otú ọ dị, nke a ga-ewe oge dị ukwuu ma dọpụ uche ha site na mmepe, n'ihi ya ị nwere ike megharịa usoro a site na iji installer na ọkọlọtọ dị mkpa. Maka PVS-Studio enwere ihe dị iche iche ọkọlọtọ maka nrụnye akpaaka. Agbanyeghị, enwere ndị njikwa ngwugwu mgbe niile, dịka ọmụmaatụ, Chocolatey (Windows), Homebrew (macOS) ma ọ bụ ọtụtụ nhọrọ maka Linux.

Mgbe ahụ, ị ​​​​ga-achọ ịwụnye plugins ndị dị mkpa, dịka ọmụmaatụ maka Igwe ihe ngosi, AKW .KWỌ, onye na-agba wdg

3. Eji kwa ụbọchị

N'oge a, ọ bụ oge ikwu okwu ole na ole gbasara ụzọ iji mee ka onye nyocha dị ngwa n'oge eji eme ihe kwa ụbọchị. Nyocha zuru ezu nke ọrụ ahụ dum na-ewe oge dị ukwuu, mana ugboro ole ka anyị na-agbanwe koodu n'ime ọrụ ahụ dum n'otu oge? Ọ dịghị ihe ọ bụla refactoring nke dị ukwuu nke na ọ ga-emetụta ozugbo koodu isi. Ọnụọgụ faịlụ ndị a na-agbanwe n'otu oge anaghị agafe iri na abuo, ya mere ọ bụ ihe ezi uche dị na ya iji nyochaa ha. Maka ọnọdụ dị otú ahụ enwere usoro nyocha nke agbakwunyere. Naanị atụla ụjọ, nke a abụghị ngwá ọrụ ọzọ. Nke a bụ ọnọdụ pụrụ iche nke na-enye gị ohere inyocha naanị faịlụ gbanwere na ndabere ha, nke a na-eme na-akpaghị aka mgbe emechara ụlọ ma ọ bụrụ na ị na-arụ ọrụ na IDE na ngwa mgbakwunye arụnyere.

Ọ bụrụ na onye nyocha ahụ achọpụta nsogbu na koodu gbanwere nso nso a, ọ ga-akọ nke a n'onwe ya. Dịka ọmụmaatụ, PVS-Studio ga-agwa gị gbasara nke a site na iji njikere:

Nyocha static - site na ntinye aka na ntinye
N'ezie, ịgwa ndị mmepe ka ha jiri ngwá ọrụ ahụ ezughị. Anyị kwesịrị ịgwa ha ihe ọ bụ na otú ọ dị. Ebe a, dịka ọmụmaatụ, bụ akụkọ gbasara mmalite ngwa ngwa maka PVS-Studio, mana ị nwere ike ịchọta nkuzi ndị yiri ya maka ngwá ọrụ ọ bụla masịrị gị:

Isiokwu ndị dị otú ahụ na-enye ozi niile dị mkpa maka iji ya eme ihe kwa ụbọchị ma ghara iwe oge dị ukwuu. 🙂

Ọbụna n'oge ịmara ngwá ọrụ ahụ, anyị kwụsịrị ọtụtụ ịdọ aka ná ntị n'oge otu n'ime mmalite mbụ. N'ụzọ dị mwute, static analyzers ezughị okè, ya mere site n'oge ruo n'oge ha na-enye ụgha positives. Ọ na-adịkarị mfe ikpochapụ ha dịka ọmụmaatụ, na ngwa mgbakwunye PVS-Studio maka Visual Studio naanị ị ga-achọ pịa otu bọtịnụ:

Nyocha static - site na ntinye aka na ntinye
Otú ọ dị, ị nwere ike ime ihe karịrị nanị ikpochapụ ha. Dịka ọmụmaatụ, ịnwere ike ịkọ nsogbu iji kwado. Ọ bụrụ na enwere ike mezie ihe nrịbama ụgha ahụ, mgbe ahụ na mmelite n'ọdịnihu ị nwere ike ịhụ na oge ọ bụla enwere mbelata ụgha ụgha kpọmkwem maka codebase gị.

Mgbe mwekota

Ya mere, anyị agabigala usoro niile nke ijikọta nyocha static n'ime usoro mmepe. N'agbanyeghị mkpa ọ dị ịtọlite ​​​​ngwaọrụ ndị dị otú ahụ na CI, ebe kachasị mkpa iji na-agba ọsọ bụ kọmputa nke onye mmepụta. A sị ka e kwuwe, onye nyocha static abụghị onye ikpe na-ekwu ebe dị anya n'ebe ị nọ na koodu ahụ adịghị mma. N'ụzọ megidere nke ahụ, ọ bụ onye inyeaka na-agwa gị ma ike gwụrụ gị ma na-echetara gị ma ọ bụrụ na ị chefuru ihe.

N'ezie, na-ejighị ya eme ihe mgbe niile, nyocha static agaghị eme ka mmepe dị mfe. A sị ka e kwuwe, uru ya bụ isi maka onye nrụpụta abụghị nke ukwuu n'ịchọ akụkụ dị mgbagwoju anya na nke esemokwu, kama na nchọpụta mbụ ha. Kwekọrịta na ịchọpụta nsogbu mgbe ezipụchara ndezi ahụ maka nnwale abụghị naanị ihe na-adịghị mma, kamakwa ọ na-ewe oge. Nyocha static, mgbe ejiri ya oge niile, na-eleba anya mgbanwe ọ bụla na kọmputa gị ma na-akọkwa ebe enyo enyo mgbe ị na-arụ ọrụ na koodu.

Ma ọ bụrụ na gị ma ọ bụ ndị ọrụ ibe gị ejighị n'aka ma ọ bara uru itinye nyocha ahụ, m na-atụ aro ka ị malite ịgụ akụkọ ahụ ugbu a "Ihe kpatara ewebata onye nyocha koodu static PVS-Studio n'ime usoro mmepe"Ọ na-eleba anya na-enwekarị nchegbu nke ndị mmepe na nyocha static ga-ewe oge ha na ihe ndị ọzọ.

Nyocha static - site na ntinye aka na ntinye

Ọ bụrụ na ịchọrọ ịkọrọ ndị na-ege ntị na-asụ Bekee akụkọ a, biko jiri njikọ ntụgharị asụsụ: Maxim Zvyagintsev. Analysis Static: Site na ibido ruo na njikọta.

isi: www.habr.com

Tinye a comment