Otu esi emejuputa ihe nyocha koodu static na ọrụ nketa na-ewedaghị otu

Otu esi emejuputa ihe nyocha koodu static na ọrụ nketa na-ewedaghị otu
Ọ dị mfe ịnwale ihe nyocha koodu static. Ma iji mejuputa ya, karịsịa na mmepe nke nnukwu ọrụ ochie, chọrọ nkà. Ọ bụrụ na emeghị ya ezighi ezi, onye nyocha ahụ nwere ike ịgbakwunye ọrụ, belata mmepe, ma mee ka ndị otu ahụ nwee ume. Ka anyị kwuo n'ụzọ dị nkenke maka otu anyị ga-esi abịaru nso na ntinye nke nyocha static n'ime usoro mmepe wee malite iji ya dịka akụkụ nke CI/CD.

Okwu Mmalite

N'oge na-adịbeghị anya, a dọọrọ mmasị m na mbipụta ahụ "Na-amalite na Static Analysis na-enweghị imeri otu". N'otu aka ahụ, nke a bụ isiokwu dị mma nke kwesịrị ịmara. N'aka nke ọzọ, o yiri ka m na ọ ka na-enye azịza zuru ezu na otú e si painlessly mejuputa static analysis na oru ngo na a otutu nke ihe nketa koodu.

Ndị otu PVS-Studio anyị na-enye echiche ya na isiokwu a. Ka anyị lee otú nsogbu nke mejuputa a static code analyzer na-ebilite na mbụ, otú imeri nsogbu a, na otú e si painlessly nwayọọ nwayọọ kpochapụ oru ụgwọ.

Okwu

Ọ naghị esiri ike ịmalite ma hụ ka onye nyocha static si arụ ọrụ [1]. Ị nwere ike ịhụ mperi na-adọrọ mmasị ma ọ bụ ọbụnadị adịghị ike dị egwu na koodu. Ị nwere ike idozi ihe, ma mgbe ahụ, ọtụtụ ndị mmemme na-ahapụ.

All static analyzers na-emepụta ihe adịgboroja. Nke a bụ akụkụ nke usoro nyocha koodu static, ọ nweghịkwa ihe a ga-eme maka ya. N'okwu n'ozuzu, nke a bụ nsogbu na-enweghị ngwọta, dị ka akwụkwọ akụkọ Rice's theorem kwadoro.2]. Algọridim mmụta igwe agaghị enyere aka [3]. Ọbụlagodi na mmadụ enweghị ike ikwu mgbe niile ma nke a ma ọ bụ koodu ahụ ezighi ezi, yabụ ị gaghị atụ anya nke a site na mmemme ahụ :).

Echiche ụgha abụghị nsogbu ma ọ bụrụ na ahaziri static analyzer:

  • Nkwarụ usoro iwu adịghị mkpa;
  • Enweela nkwarụ ụfọdụ nchọpụta na-adịghị mkpa;
  • Ọ bụrụ na anyị na-ekwu maka C ma ọ bụ C ++, mgbe ahụ, a na-edepụta macro nke nwere ihe ndị a kapịrị ọnụ nke na-eme ka ịdọ aka ná ntị na-abaghị uru pụta n'ebe ọ bụla a na-eji ụdị macros;
  • Akara ọrụ nke ya na-eme omume yiri ọrụ sistemu (analọgụ nke ya mmmmmmmmmmmm ma ọ bụ Mbipụta) [4];
  • A na-enwekwaghị ikike ụgha kpọmkwem site na iji nkọwa;
  • Na na na.

N'okwu a, anyị nwere ike ịtụ anya ọnụ ọgụgụ dị mma dị ala nke ihe dịka 10-15% [5]. N'ikwu ya n'ụzọ ọzọ, ịdọ aka ná ntị nyocha 9 n'ime 10 ga-egosi ezigbo nsogbu na koodu ahụ, ma ọ bụ opekata mpe "koodu na-esi ísì ụtọ." Kwekọrịtara, ọnọdụ a dị ezigbo ụtọ, onye nyocha bụ ezigbo enyi nke onye mmemme.

Otu esi emejuputa ihe nyocha koodu static na ọrụ nketa na-ewedaghị otu
N'ezie, na nnukwu ọrụ, foto mbụ ga-adị iche kpamkpam. Onye nyocha ahụ na-enye ọtụtụ narị ma ọ bụ puku kwuru ịdọ aka ná ntị maka koodu nketa. Ọ gaghị ekwe omume ngwa ngwa ịghọta nke ịdọ aka ná ntị ndị a dị mkpa na nke na-adịghị. Ọ bụ ihe ezi uche dị na ya ịnọdụ ala wee malite ime ihe ịdọ aka ná ntị ndị a niile, ebe ọ bụ na isi ọrụ na nke a ga-akwụsị ruo ụbọchị ma ọ bụ izu. Dịka, otu egwuregwu enweghị ike ị nweta ụdị ọnọdụ ahụ. A ga-enwekwa nnukwu ọnụ ọgụgụ dị iche iche na-emebi akụkọ mgbanwe. Na ndezi ngwa ngwa nke ọtụtụ iberibe na koodu ahụ ga-ebute mperi na mperi ọhụrụ.

Na nke kachasị mkpa, ụdị dị otú ahụ na ọgụ megide ịdọ aka ná ntị na-eme ka ọ dị ntakịrị. Kwekọrịta na ebe ọ bụ na ọrụ a na-arụ ọrụ nke ọma ruo ọtụtụ afọ, ọtụtụ n'ime njehie dị egwu dị na ya ka edozilarị. Ee, ndozi ndị a dị oke ọnụ, a ga-emerịrị ya, nweta nzaghachi ndị ọrụ na-adịghị mma gbasara ahụhụ, na ihe ndị ọzọ. Onye nyocha nke static ga-enyere aka dozie ọtụtụ n'ime njehie ndị a na ọkwa koodu, ngwa ngwa na ọnụ ala. Mana n'oge a, otu ụzọ ma ọ bụ ọzọ, edozila njehie ndị a, onye nyocha na-achọpụtakwa njehie na-adịghị mkpa na koodu ochie. Enwere ike ghara iji koodu a, enwere ike iji ya obere oge, yana njehie dị na ya nwere ike ọ gaghị ebute nsonaazụ pụtara ìhè. Ikekwe ebe onyinyo si na bọtịnụ bụ agba na-ezighị ezi, ma nke a anaghị egbochi onye ọ bụla na-eji ngwaahịa ahụ.

N'ezie, ọbụna obere mmejọ ka bụ mmejọ. Ma mgbe ụfọdụ, mmejọ nwere ike zoo ezigbo adịghị ike. Otú ọ dị, ịhapụ ihe niile na iji ụbọchị / izu na-emeso ntụpọ ndị na-apụtachaghị ìhè dị ka echiche na-enyo enyo.

Ndị mmemme na-ele anya, lee anya, lelee ịdọ aka ná ntị ndị a niile gbasara koodu ọrụ ochie ... Ha na-eche: anyị nwere ike ime na-enweghị nyocha nyocha. Ka anyị gaa dee ụfọdụ ọrụ bara uru ọhụrụ.

N'ụzọ nke aka ha, ha ziri ezi. Ha chere na ha ga-ebu ụzọ wepụ ịdọ aka ná ntị ndị a niile n'ụzọ ụfọdụ. Naanị mgbe ahụ ka ha ga-enwe ike irite uru site na iji koodu nyocha mgbe niile. Ma ọ́ bụghị ya, ịdọ aka ná ntị ọhụrụ ga-erikpu ná ntị ochie, ọ dịghịkwa onye ga-aṅa ntị na ha.

Nke a bụ otu ihe atụ dị na ịdọ aka ná ntị ndị nchịkọta. Ọ bụghị n'enweghị ihe kpatara ya na ha na-akwado idobe ọnụ ọgụgụ nke ịdọ aka ná ntị nchịkọta na 0. Ọ bụrụ na e nwere ịdọ aka ná ntị 1000, mgbe ahụ, mgbe e nwere 1001, ọ dịghị onye ga-aṅa ntị na ya, ọ dịghịkwa anya ebe ị ga-achọ ịdọ aka ná ntị ọhụrụ a.

Otu esi emejuputa ihe nyocha koodu static na ọrụ nketa na-ewedaghị otu
Ihe kachasị njọ na akụkọ a bụ ma ọ bụrụ na onye si n'elu ugbu a na-amanye gị iji nyocha koodu static. Nke a ga-eme ka ndị otu ahụ gbadaa, ebe ọ bụ na site n'echiche ha, a ga-enwe mgbagwoju anya ọzọ nke bureaucratic nke na-abanye naanị n'ụzọ. Ọ dịghị onye ga-eleba anya na akụkọ nke analyzer, na ihe niile eji ga-abụ naanị "na akwụkwọ". Ndị ahụ. N'ụzọ nkịtị, a na-ewu nyocha n'ime usoro DevOps, mana na omume nke a anaghị abara onye ọ bụla uru. Anyị nụrụ akụkọ zuru ezu sitere n'aka ndị bịara ogbako na ụlọ ntu. Ahụmahụ dị otú ahụ nwere ike ịkụda ndị na-eme mmemme iji ngwaọrụ nyocha static ogologo oge, ma ọ bụrụ na ọ bụghị ruo mgbe ebighị ebi.

Ịmejuputa na iwepụ ụgwọ ọrụ nka

N'ezie, ọ dịghị ihe siri ike ma ọ bụ egwu banyere iwebata nyocha static ọbụna n'ime nnukwu ọrụ ochie.

CI / CD

Ọzọkwa, onye nyocha nwere ike ozugbo bụrụ akụkụ nke usoro mmepe na-aga n'ihu. Dịka ọmụmaatụ, nkesa PVS-Studio nwere akụrụngwa maka ilele akụkọ ahụ nke ọma n'ụdị ịchọrọ, yana ọkwa nye ndị mmepe dere akụkụ nsogbu nke koodu. Maka ndị nwere mmasị ịmalite PVS-Studio sitere na sistemụ CI/CD, ana m akwado ka ị mara onwe gị nke ọma na ihe kwekọrọ. ngalaba akwụkwọ na usoro isiokwu:

Ma ka anyị laghachi na okwu nke ọnụ ọgụgụ dị ukwuu nke ụgha ụgha na ọkwa mbụ nke mmejuputa koodu nyocha ngwaọrụ.

Idozi ụgwọ ọrụ teknụzụ dị ugbu a yana ime ihe ịdọ aka ná ntị ọhụrụ

Ndị nyocha static azụmahịa ọgbara ọhụrụ na-enye gị ohere ịmụ naanị ịdọ aka ná ntị ọhụrụ pụtara na koodu ọhụrụ ma ọ bụ gbanwere. Mmejuputa usoro a dịgasị iche iche, mana isi ihe bụ otu. Na PVS-Studio static analyzer, a na-arụ ọrụ a dị ka ndị a.

Iji malite ngwa ngwa iji nyocha static, anyị na-atụ aro ka ndị ọrụ PVS-Studio jiri usoro maka mkpochapụ ịdọ aka ná ntị dị ukwuu [6]. Echiche izugbe bụ nke a. Onye ọrụ wepụtara ihe nyocha wee nweta ọtụtụ ịdọ aka ná ntị. Ebe ọ bụ na oru ngo nke na-emepe emepe ruo ọtụtụ afọ dị ndụ, na-emepe emepe ma na-akpata ego, mgbe ahụ ọ ga-abụ na ọ gaghị enwe ọtụtụ ịdọ aka ná ntị na akụkọ ahụ na-egosi ntụpọ dị oke egwu. N'ikwu ya n'ụzọ ọzọ, a na-edozilarị ahụhụ dị egwu n'otu ụzọ ma ọ bụ ọzọ site na iji ụzọ dị oke ọnụ ma ọ bụ ekele maka nzaghachi sitere n'aka ndị ahịa. N'ihi ya, ihe niile onye analyzer na-ahụ ugbu a nwere ike na-atụle teknuzu ụgwọ, nke na-adịghị ike na-agbalị ikpochapụ ozugbo.

Ị nwere ike ịgwa PVS-Studio ka ọ tụlee ịdọ aka ná ntị ndị a adịghị mkpa maka ugbu a (chekwaa ụgwọ ọrụ nka maka emechaa), ọ gaghịkwa egosi ha. Onye nyocha na-emepụta faịlụ pụrụ iche ebe ọ na-echekwa ozi gbasara njehie na-adịbeghị mmasị. Ma ugbu a PVS-Studio ga-enye ịdọ aka ná ntị naanị maka koodu ọhụrụ ma ọ bụ gbanwere. Ọzọkwa, a na-eji amamihe eme ihe niile a. Ọ bụrụ na, dịka ọmụmaatụ, agbakwunyere ahịrị efu na mmalite nke faịlụ koodu isi, mgbe ahụ, onye nyocha ahụ ghọtara na, n'eziokwu, ọ dịghị ihe gbanwere, ọ ga-anọgide na-agbachi nkịtị. Enwere ike itinye faịlụ nrịbama a n'ime sistemụ njikwa ụdị. Faịlụ ahụ buru ibu, mana nke a abụghị nsogbu, ebe ọ bụ na ọ nweghị uru na-echekwa ya ugboro ugboro.

Ugbu a ndị mmemme niile ga-ahụ ịdọ aka ná ntị metụtara naanị koodu ọhụrụ ma ọ bụ gbanwere. Ya mere, ị nwere ike ịmalite iji onye nyocha, dị ka ha na-ekwu, site n'echi ya. Na ị nwere ike ịlaghachi na ụgwọ ọrụ aka ma emesịa, ma jiri nwayọọ nwayọọ dozie njehie ma hazie onye nyocha.

Ya mere, nsogbu mbụ na mmejuputa onye nyocha na nnukwu ọrụ ochie ka edozila. Ugbu a, ka anyị chepụta ihe a ga-eme na teknuzu ụgwọ.

Ndozi ahụhụ na nrụgharị

Ihe kachasị mfe na nke kachasị dị ndụ bụ iwepụta oge iji nyochaa ịdọ aka ná ntị nyocha nke ekpochapụsịrị ma jiri nwayọọ nwayọọ mesoo ha. Ebe ị kwesịrị idozi njehie na koodu ahụ, ebe ị ga-emeghachi omume ịgwa onye nyocha na koodu ahụ abụghị nsogbu. Ọmụmaatụ dị mfe:

if (a = b)

Ọtụtụ ndị nchịkọta C ++ na ndị nyocha na-eme mkpesa banyere koodu dị otú ahụ, ebe ọ bụ na enwere ike dị elu na ha chọrọ n'ezie ide. (a = b). Ma enwere nkwekọrịta a na-ekwughị okwu, a na-ahụkarị nke a na akwụkwọ ahụ, na ọ bụrụ na e nwere ntinye aka ọzọ, mgbe ahụ, a na-ewere ya na onye mmemme ahụ kpachapụrụ anya dee koodu dị otú ahụ, ọ dịghịkwa mkpa ịṅụ iyi. Dịka ọmụmaatụ, na akwụkwọ PVS-Studio maka nyocha V559 (CWE-481) edekwara ya nke ọma na a ga-ewere ahịrị a dị ka nke ziri ezi ma dịkwa mma:

if ((a = b))

Ihe atụ ọzọ. Echefuola ya na koodu C++ a? ezumike ma ọ bụ ọ bụghị?

case A:
  foo();
case B:
  bar();
  break;

Onye nyocha PVS-Studio ga-enye ịdọ aka ná ntị ebe a V796 (CWE-484). Nke a nwere ike ọ gaghị abụ njehie, n'ọnọdụ nke ị ga-enye onye nzacha ihe ntụnye site na ịgbakwunye àgwà ahụ [[dapụta]] ma ọ bụ, ọmụmaatụ, __agwa__((ọdịda)):

case A:
  foo();
  [[fallthrough]];
case B:
  bar();
  break;

Enwere ike ịsị na mgbanwe koodu dị otú ahụ adịghị edozi ahụhụ ahụ. Ee, nke a bụ eziokwu, ma ọ na-eme ihe abụọ bara uru. Nke mbụ, akụkọ nyocha na-ewepụ ihe ndị na-adịghị mma. Nke abụọ, koodu ahụ na-aghọwanye ihe nghọta maka ndị na-etinye aka na mmezi ya. Na nke a dị ezigbo mkpa! Maka nke a naanị, ọ bara uru ịme obere mmegharị ahụ iji mee ka koodu ahụ doo anya ma dị mfe idowe. Ebe ọ bụ na onye nyocha ahụ aghọtaghị ma ọ dị mkpa "nkwụsị" ma ọ bụ na ọ bụghị, ọ ga-edokwa anya ndị mmemme ibe.

Na mgbakwunye na ndozi ahụhụ na nrụzigharị, ị nwere ike ikpochapụ ịdọ aka ná ntị nyocha ụgha doro anya. Enwere ike gbanyụọ ụfọdụ nchọpụta nchọpụta na-adịghị mkpa. Dị ka ihe atụ, mmadụ chere na ịdọ aka ná ntị abaghị uru V550 gbasara iji atụnyere ụkpụrụ ise n'elu mmiri / okpukpu abụọ. Ma ụfọdụ na-ekewa ha dị ka ndị dị mkpa na ndị kwesịrị ka a mụọ akwụkwọ [7]. Kedu ịdọ aka ná ntị a na-ewere na ọ dị mkpa na nke na-abụghị nke ndị otu mmepe ikpebi.

Enwere ụzọ ndị ọzọ a ga-esi egbochi mgbasa ozi ụgha. Dịka ọmụmaatụ, ekwuru akara akara macro na mbụ. A kọwara ihe a niile n'ụzọ zuru ezu na akwụkwọ. Ihe kachasị mkpa bụ ịghọta na ọ bụrụ na ị jiri nwayọọ nwayọọ na-abịarute nso na-arụ ọrụ na-ezighị ezi, ọ dịghị ihe dị njọ na ha. Ọnụ ọgụgụ ka ukwuu nke ịdọ aka ná ntị na-enweghị mmasị na-apụ n'anya mgbe nhazichara, na naanị ebe chọrọ n'ezie nlezianya ọmụmụ na ụfọdụ mgbanwe na koodu na-anọgide.

Ọzọkwa, anyị na-enyere ndị ahịa anyị aka ịhazi PVS-Studio ma ọ bụrụ na nsogbu ọ bụla bilitere. Ọzọkwa, e nwere mgbe anyị onwe anyị wepụrụ ịdọ aka ná ntị ụgha ma mezie njehie [8]. Naanị ikpe, ekpebiri m ikwu na nhọrọ a maka imekọ ihe ọnụ ga-ekwe omume :).

Usoro ratchet

Enwere ụzọ ọzọ na-atọ ụtọ iji jiri nwayọ kwalite ogo koodu site na iwepu ịdọ aka ná ntị nyocha static. Isi ala bụ na ọnụ ọgụgụ ịdọ aka ná ntị nwere ike ibelata naanị.

Otu esi emejuputa ihe nyocha koodu static na ọrụ nketa na-ewedaghị otu

A na-edekọ ọnụ ọgụgụ ịdọ aka ná ntị nke static analyzer nyere. A na-ahazi ọnụ ụzọ ámá dị mma n'ụzọ na ugbu a ị nwere ike itinye naanị koodu na-adịghị abawanye ọnụ ọgụgụ ọrụ. N'ihi ya, usoro nke iji nwayọọ nwayọọ belata ọnụ ọgụgụ nke mkpu na-amalite site n'ịgbanwe onye nyocha na mezie njehie.

Ọbụna ma ọ bụrụ na mmadụ chọrọ ịghọgbu ntakịrị ma kpebie ịgafe ọnụ ụzọ dị mma ọ bụghị site n'iwepụ ịdọ aka ná ntị na koodu ọhụrụ ya, ma site n'ịkwalite koodu ochie nke ndị ọzọ, nke a adịghị atụ egwu. N'otu aka ahụ, ratchet na-atụgharị n'otu ụzọ, na nke nta nke nta nke nta nke nta ga-ebelata. Ọbụna ma ọ bụrụ na mmadụ achọghị imezi ntụpọ ọhụrụ ya, ọ ka ga-emeziwanye ihe na koodu agbata obi. N'oge ụfọdụ, ụzọ dị mfe iji belata ọnụ ọgụgụ ịdọ aka ná ntị na-akwụsị, na-abịa mgbe a ga-edozi ezigbo ahụhụ.

A kọwara usoro a n'ụzọ zuru ezu na akụkọ na-adọrọ mmasị nke Ivan Ponomarev "Tinye nyocha static n'ime usoro ahụ, kama ịchọ ahụhụ na ya", nke m na-akwado ịgụrụ onye ọ bụla nwere mmasị ịkwalite ogo koodu.

Onye dere akụkọ ahụ nwekwara akụkọ banyere isiokwu a: "Nyocha static na-aga n'ihu".

nkwubi

Enwere m olileanya na mgbe isiokwu a gachara, ndị na-agụ akwụkwọ ga-anakwere ngwá ọrụ nyocha static ma chọọ ime ya n'ime usoro mmepe. Ọ bụrụ na ị nwere ajụjụ ọ bụla, anyị na-adị njikere mgbe niile ndụmọdụ ndị ọrụ nke nyocha PVS-Studio static ma nyere aka na mmejuputa ya.

E nwere ndị ọzọ ahụkarị obi abụọ banyere ma static analysis pụrụ n'ezie adaba na bara uru. Agbalịrị m ịchụpụ ọtụtụ n'ime obi abụọ ndị a na mbipụta "Ihe mere e ji ewebata PVS-Studio static code analyzer n'ime usoro mmepe" [9].

Daalụ maka nlebara anya gị bịa скачать ma nwalee ihe nyocha PVS-Studio.

Njikọ ndị ọzọ

  1. Andrey Karpov. Kedu ka m ga-esi hụ ịdọ aka ná ntị na-adọrọ mmasị ngwa ngwa nke onye nyocha PVS-Studio na-emepụta maka koodu C na C ++?
  2. Wikipedia. Theorem nke Rice.
  3. Andrey Karpov, Victoria Khanieva. Iji mmụta igwe na nyocha static nke koodu isi mmalite mmemme.
  4. PVS-Studio. Akwụkwọ. Ntọala nchọpụta agbakwunyere.
  5. Andrey Karpov. Njirimara nke PVS-Studio analyzer na-eji ihe atụ nke EFL Core Libraries, 10-15% ụgha positives..
  6. PVS-Studio. Akwụkwọ. Mkpọchi nke ozi nyocha.
  7. Ivan Andryashin. Banyere otu anyị si nwalee nyocha static na ọrụ anyị nke simulator mmụta nke ịwa ahụ endovascular X-ray.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Kedu otu ndị otu PVS-Studio siri kwalite koodu Enjin na-adịghị adị.
  9. Andrey Karpov. Ihe kpatara ewebata onye nyocha koodu static PVS-Studio n'ime usoro mmepe.

Otu esi emejuputa ihe nyocha koodu static na ọrụ nketa na-ewedaghị otu

Ọ bụrụ na ịchọrọ ịkọrọ ndị na-ege ntị na-asụ Bekee akụkọ a, biko jiri njikọ ntụgharị asụsụ: Andrey Karpov. Otu esi ewebata ihe nyocha koodu static na ọrụ nketa na ọ bụghị ịkụda ndị otu.

isi: www.habr.com

Tinye a comment