Sida loo hirgeliyo falanqeeyaha code static ee mashruuca dhaxalka ah iyada oo aan la dhiirigelin kooxda

Sida loo hirgeliyo falanqeeyaha code static ee mashruuca dhaxalka ah iyada oo aan la dhiirigelin kooxda
Way fududahay in la isku dayo falanqaynta koodhka taagan. Laakiin si loo hirgeliyo, gaar ahaan horumarinta mashruuc duug ah, waxay u baahan tahay xirfad. Haddii si khalad ah loo sameeyo, falanqeeyuhu wuxuu ku dari karaa shaqo, hoos u dhigi karaa horumarka, oo wuxuu dumin karaa kooxda. Aynu si kooban uga hadalno sida saxda ah ee loo wajaho is dhexgalka falanqaynta joogtada ah ee habka horumarinta oo aan bilowno isticmaalka qayb ka mid ah CI/CD.

Horudhac

Dhawaan dareenkaygu wuxuu soo jiitay daabacaadda "Ku Bilawga Falanqaynta Joogta Ah Adoo Aan Kooxda Ka Badinβ€œDhinaca, qoraalkani waa maqaal wanaagsan oo mudan in la is barto, dhanka kale, waxay iila muuqataa inaan weli jawaab dhammaystiran laga helin sidii si xanuun la’aan ah loogu hirgelin lahaa falanqaynta mawqifka ah ee mashruuca oo leh wax badan. of Legacy code Maqaalka ayaa sheegaya in aad aqbali karto deynta farsamada oo aad ka shaqeyso kaliya code cusub, laakiin ma jirto jawaab ah waxa lagu sameeyo deyntan farsamo hadhow.

Kooxdayada PVS-Studio waxay soo bandhigaan aragtidooda mawduucan. Aynu eegno sida dhibaatada hirgelinta falanqaynta code static u kaco meesha ugu horeysa, sida looga gudbo dhibaatadan, iyo sida si aan xanuun lahayn loo baabi'iyo deynta farsamada.

Arrimaha

Badanaa ma adka in la bilaabo oo la eego sida uu u shaqeeyo falanqeeye taagan [1]. Waxaa laga yaabaa inaad ku aragto koodka khaladaad xiiso leh ama xitaa baylahda iman kara cabsida. Xitaa wax waad hagaajin kartaa, laakiin markaa barnaamijyo badan ayaa ka tanaasula.

Dhammaan falanqeeyayaasha static waxay soo saaraan wanaag been abuur ah. Tani waa sifo ka mid ah habka falanqaynta koodhka taagan, waxna lagama qaban karo. Xaaladda guud, tani waa dhibaato aan la xallin karin, sida uu xaqiijiyay Rice's theorem [2]. Algorithms-yada barashada mashiinka midkoodna ma caawin doono [3]. Xitaa haddii qofku uusan had iyo jeer sheegi karin in kan ama code-kaas uu khaldan yahay, markaa waa inaadan tan ka filan barnaamijka :).

Wanaagga beenta ahi dhib maaha haddii falanqeeyaha taagan mar hore la habeeyey:

  • Xeerarka aan khusayn ee naafada ah;
  • Qaar ka mid ah baadhista aan khusayn waa la naafo;
  • Haddii aan ka hadlayno C ama C ++, markaa macros ayaa la calaamadeeyay oo ay ku jiraan dhismayaal gaar ah oo keena digniino aan faa'iido lahayn oo ka soo baxa meel kasta oo macrosyadaas ah;
  • Shaqooyinka gaarka ah ayaa lagu calaamadeeyay kuwaas oo sameeya ficillo la mid ah hawlaha nidaamka (analoog u gaar ah xaashi ama printf) [4];
  • Wanaagga beenta ah ayaa si gaar ah u naafo iyadoo la isticmaalayo faallooyin;
  • Iyo wixii la mid ah.

Xaaladdan oo kale, waxaan filan karnaa qiime hoose oo been abuur ah oo ku saabsan 10-15%5]. Si kale haddii loo dhigo, 9 ka mid ah 10-kii digniinaha falanqeeyayaasha ayaa muujin doona dhibaato dhab ah oo ka jirta koodka, ama ugu yaraan "koodka ur urta badan." Ogow, dhacdadani waa mid aad u wanaagsan, falanqeeyuhuna waa saaxiibka dhabta ah ee barnaamijka.

Sida loo hirgeliyo falanqeeyaha code static ee mashruuca dhaxalka ah iyada oo aan la dhiirigelin kooxda
Xaqiiqda, mashruuc weyn, sawirka bilowga ah wuxuu noqon doonaa mid gebi ahaanba ka duwan. Falanqeeyaha ayaa soo saara boqolaal ama kumanaan digniin ah oo loogu talagalay koodka dhaxalka. Suurtagal ma aha in si degdeg ah loo fahmo digniinahaas mid ka mid ah kuwa khuseeya iyo kuwa aan ahayn. Waa caqli-darro in la fadhiisto oo la bilaabo wax ka qabashada dhammaan digniinahaas, maadaama shaqada ugu weyn ee kiiskani ay joojin doonto maalmo ama toddobaadyo. Caadi ahaan, kooxdu ma awoodo inay bixiso xaalad noocaas ah. Waxa kale oo jiri doona tiro badan oo kala duwanaansho ah oo wax u dhimaya taariikhda isbeddelka. Iyo tafatirka guud ee degdega ah ee jajabyada badan ee koodka ayaa si lama filaan ah u dhalin doona khaladaad iyo khaladaad cusub.

Iyo tan ugu muhiimsan, guusha noocan oo kale ah ee dagaalka ka dhanka ah digniinta ayaa macno yar samaynaysa. Ogow in maadaama mashruucu si guul leh u socday sanado badan, inta badan khaladaadkii muhiimka ahaa ee ku jiray mar hore ayaa la saxay. Haa, hagaajintan waxay ahaayeen kuwo aad qaali u ah, waxay ahayd in la saxo, helay jawaab celin isticmaale oo xun oo ku saabsan dhiqlaha, iyo wixii la mid ah. Falanqeeye taagan ayaa kaa caawin doona hagaajinta qaar badan oo ka mid ah khaladaadkan marxaladda codaynta, si degdeg ah oo raqiis ah. Laakiin wakhtigan xaadirka ah, si uun ama si kale, khaladaadkan waa la hagaajiyay, falanqeeyuhu wuxuu inta badan ogaadaa khaladaadka aan muhiimka ahayn ee koodkii hore. Koodhkan waxaa laga yaabaa inaan la isticmaalin, waxa laga yaabaa in loo isticmaalo si aad u yar, khaladka ku jirana waxa laga yaabaa inaanay keenin cawaaqib la dareemi karo. Waxaa laga yaabaa in meel hooska ka soo baxa badhanka uu yahay midab khaldan, laakiin tani ma faragelinayso isticmaalka qof kasta ee alaabta.

Dabcan, xitaa khaladaadka yaryar weli waa khalad. Mararka qaarkood qaladku wuxuu qarin karaa baylahnimada dhabta ah. Si kastaba ha ahaatee, ka tanaasulida wax walba iyo qaadashada maalmo/todobaadyo wax ka qabashada cilladaha aan si fudud isu soo bixin waxay u eg tahay fikrad shaki leh.

Barnaamij-bixiyeyaashu waxay eegaan, eegaan, eegaan dhammaan digniinahaas ku saabsan xeerkii hore ee shaqada ... Waxayna u maleynayaan: waxaan samayn karnaa iyada oo aan la samayn falanqaynta joogtada ah. Aynu tagno qor qaar cusub oo waxtar leh.

Jidkooda, way saxan yihiin. Waxay qiyaaseen in marka hore ay tahay inay si uun uga takhalusaan dhammaan digniinahaas. Kaliya markaa waxay awoodi doonaan inay ka faa'iidaystaan ​​isticmaalka joogtada ah ee falanqaynta koodhka. Haddii kale, digniino cusub ayaa si fudud ku qarqi doona kuwii hore, oo ninna dheg uma dhigi doono iyaga.

Tani waxay la mid tahay digniinaha isku-dubaridaha. Maaha sabab la'aan in ay ku taliyaan in lagu ilaaliyo tirada digniinaha compiler ee 0. Haddii ay jiraan 1000 digniin ah, markaa marka ay jiraan 1001, qofna dheg uma dhigi doono, mana cadda halka laga raadinayo digniintan cusub.

Sida loo hirgeliyo falanqeeyaha code static ee mashruuca dhaxalka ah iyada oo aan la dhiirigelin kooxda
Waxa ugu xun sheekadan waa haddii qof xagga sare ka yimid xilligan ku qasbo inaad isticmaasho falanqaynta code static. Tani waxay hoos u dhigi doontaa oo kaliya kooxda, maadaama laga soo bilaabo aragtidooda waxaa jiri doona kakanaanta xafiiseed dheeraad ah oo kaliya oo soo gala jidka. Qofna ma eegi doono warbixinnada falanqeeyayaasha, iyo dhammaan isticmaalka waxay ahaan doonaan oo keliya "warqad". Kuwaas. Si rasmi ah, falanqaynta ayaa lagu dhisay habka DevOps, laakiin ficil ahaan tani cidna faa'iido uma yeelanayso. Waxaan ka maqalnay sheekooyin tafatiran oo ka yimid ka qaybgalayaasha shirka. Waayo-aragnimada noocan oo kale ah waxay ka niyad-jabin kartaa barnaamij-bixiyeyaasha inay isticmaalaan aaladaha falanqaynta joogtada ah muddo dheer, haddaysan ahayn weligeed.

Hirgelinta iyo baabi'inta deynta farsamada

Dhab ahaantii, ma jiraan wax adag ama cabsi ku saabsan soo bandhigida falanqaynta taagan xitaa mashruuc duug ah oo weyn.

CI / CD

Waxaa intaa dheer, falanqeeyaha isla markiiba waxaa laga dhigi karaa qayb ka mid ah habka horumarinta joogtada ah. Tusaale ahaan, qaybinta PVS-Studio waxay ka kooban tahay utility si habboon loogu daawado warbixinta qaabka aad u baahan tahay, iyo ogeysiisyada horumariyeyaasha qoray qaybaha dhibka leh ee koodka. Kuwa aadka u xiisaynaya inay bilaabaan PVS-Studio ee nidaamyada CI/CD, waxaan ku talinayaa inaad barato naftaada waxyaalaha u dhigma. qaybta dukumeenti iyo maqaallo taxane ah:

Laakiin aan ku soo laabano arrinta tiro badan oo been abuur ah marxaladaha ugu horreeya ee hirgelinta qalabka falanqaynta code.

Hagaajinta deynta farsamo ee jirta iyo wax ka qabashada digniinaha cusub

Falanqeeyayaasha ganacsi ee casriga ah waxay kuu oggolaanayaan inaad barato kaliya digniinaha cusub ee ka muuqda kood cusub ama la beddelay. Dhaqangelinta habkan waa kala duwan yahay, laakiin nuxurku waa isku mid. Falanqeeyaha static PVS-Studio, shaqadan waxaa loo fuliyaa sida soo socota.

Si dhakhso ah loo bilaabo isticmaalka falanqaynta taagan, waxaanu soo jeedinaynaa isticmaalayaasha PVS-Studio inay isticmaalaan habka xakamaynta digniinaha badan [6]. Fikradda guud waa kan soo socda. Isticmaaluhu wuxuu bilaabay falanqeeyaha wuxuuna helay digniino badan. Maadaama mashruuc sannado badan ku jiray horumarinta uu nool yahay, horumarinayo oo lacag samaynayo, markaa waxay u badan tahay inaysan jiri doonin digniino badan oo ku jira warbixinta oo tilmaamaya cilladaha muhiimka ah. Si kale haddii loo dhigo, dhiqlaha muhiimka ah ayaa mar hore la hagaajiyay hal hab ama si kale iyadoo la adeegsanayo habab aad qaali u ah ama mahad celinta macaamiisha. Sidaa darteed, wax kasta oo falanqeeyuhu hadda helo waxaa loo tixgelin karaa deyn farsamo, taas oo aan macquul ahayn in la isku dayo in la baabi'iyo isla markiiba.

Waxaad u sheegi kartaa PVS-Studio inay ka fiirsadaan digniinahan aan khusayn hadda (ka badbaadi deynta farsamada hadhow), oo mar dambe ma tusi doonto. Falanqeeyuhu wuxuu abuuraa fayl gaar ah halkaas oo uu ku kaydiyo macluumaadka ku saabsan khaladaadka aan weli xiisaha lahayn. Oo hadda PVS-Studio waxay soo saari doontaa digniino kaliya oo cusub ama la beddelay. Intaa waxaa dheer, waxaas oo dhan waxaa loo hirgeliyaa si xariif ah. Haddii, tusaale ahaan, xariiq madhan lagu daro bilowga faylka koodhka isha, markaa falanqeeyuhu wuxuu fahmayaa in, dhab ahaantii, waxba isma bedelin, oo sii wadi doona aamusnaanta. Faylka calaamadaynta waxa la gelin karaa nidaamka xakamaynta nooca. Faylku waa weyn yahay, laakiin tani dhib ma aha, maadaama aysan jirin wax faa'iido ah oo lagu kaydiyo marar badan.

Hadda dhammaan barnaamij-bixiyeyaasha waxay arki doonaan digniino la xidhiidha kood cusub ama la beddelay. Sidaa darteed, waxaad bilaabi kartaa isticmaalka falanqaynta, sida ay yiraahdaan, laga bilaabo maalinta xigta. Oo waxaad dib ugu noqon kartaa deynta farsamada mar dambe, oo si tartiib tartiib ah u saxdo khaladaadka oo aad dejiso falanqaynta.

Markaa, dhibkii ugu horreeyay ee hirgelinta falanqaynta ee mashruuc weyn oo duug ah ayaa la xalliyay. Hadda aynu ogaano waxa lagu samaynayo deynta farsamada.

hagaajinta cayayaanka iyo dib u soo celinta

Waxa ugu fudud uguna dabiiciga ah waa in wakhti layska dhigo si loo falanqeeyo digniinaha falanqeeye ee aadka loo xakameeyay oo si tartiib tartiib ah wax looga qabto. Meel waa inaad hagaajisaa khaladaadka koodhka, meel waa inaad dib u soo celisaa si aad u sheegto falanqeeyaha in koodka uusan dhibaato lahayn. Tusaale fudud:

if (a = b)

Inta badan isku-dubayaasha C++ iyo falanqeeyayaasha ayaa ka cawda koodka noocaas ah, maadaama ay jirto suurtogalnimo sare oo ay dhab ahaantii rabeen inay qoraan. (a = b). Laakiin waxaa jira heshiis aan la sheegin, tanina badanaa waxaa lagu xusay dukumeentiyada, haddii ay jiraan jaangooyooyin dheeraad ah, ka dibna waxaa loo tixgeliyaa in barnaamijiyuhu si ula kac ah u qoray koodka noocaas ah, looma baahna in la dhaariyo. Tusaale ahaan, dukumeentiyada PVS-Studio ee ogaanshaha V559 (CWE-481) waxaa si cad u qoran in xariiqda soo socota loo qaadan doono sax iyo badbaado:

if ((a = b))

Tusaale kale. Ma lagu ilaaway koodkan C++? nasashada ama maya?

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

Falanqeeyaha PVS-Studio ayaa halkan ku soo saari doona digniin V796 (CWE-484). Tani waxaa laga yaabaa inaanay khalad ahayn, markaas waa inaad siisaa baareeyaha tilmaam adiga oo ku daraya sifada [[fallthrough]] ama tusaale ahaan __sifo__((dhacday)):

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

Waxaa la dhihi karaa isbeddellada koodhka noocan oo kale ah ma hagaajiyaan cayayaanka. Haa, tani waa run, laakiin waxay qabataa laba shay oo faa'iido leh. Marka hore, warbixinta falanqeeyuhu waxay meesha ka saaraysaa wanaagga beenta ah. Marka labaad, koodku wuxuu noqdaa mid la fahmi karo dadka ku lugta leh dayactirkiisa. Tanina waa mid aad muhiim u ah! Taas oo keliya, waxaa habboon in la sameeyo dib-u-hagaajin yar si loo sameeyo koodhka si cad oo sahlan loo ilaaliyo. Mar haddii falanqeeyuhu aanu fahmin in "nasasho" loo baahan yahay iyo in kale, sidoo kale ma cadda barnaamijyada kale.

Marka lagu daro hagaajinta cayayaanka iyo dib-u-soo-celinta, waxaad si gaar ah u xakameyn kartaa digniinaha falanqeeyayaasha beenta ah. Qaar ka mid ah baadhitaanada aan khusayn waa la joojin karaa. Tusaale ahaan, qof ayaa u malaynaya in digniintu aanay macno lahayn V550 ku saabsan isbarbardhigga sabeynta/qiyamka labanlaabka ah. Qaarna waxay u kala saaraan inay yihiin kuwo muhiim ah oo mudan in la barto [7]. Digniinaha loo arko inay khuseeyaan iyo kuwa aan ahayn waxay ku xiran tahay kooxda horumarinta inay go'aan ka gaaraan.

Waxaa jira siyaabo kale oo lagu cabudhiyo digniinaha beenta ah. Tusaale ahaan, calaamadaynta macro ayaa hore loo sheegay. Waxaas oo dhan waxaa lagu sifeeyay si faahfaahsan dukumeentiyada. Waxa ugu muhiimsan waa in la fahmo in haddii aad si tartiib tartiib ah oo habaysan u wajahdo la shaqeynta been-abuurka, ma jiraan wax khalad ah iyaga. Inta badan digniinaha aan xiisaha lahayn ayaa baaba'a ka dib qaabeynta, oo kaliya meelaha runtii u baahan daraasad taxaddar leh iyo isbeddelada koodka ayaa hadhay.

Sidoo kale, waxaan had iyo jeer ka caawinnaa macaamiisheena inay dejiyaan PVS-Studio haddii ay jiraan wax dhibaato ah. Waxaa intaa dheer, waxaa jiray kiisas markii anaga lafteena aan meesha ka saarnay digniinaha been abuurka ah oo aan saxno khaladaadka.8]. Kaliya haddii ay dhacdo, waxaan go'aansaday in aan sheego in doorashadan iskaashiga la kordhiyo ay sidoo kale suurtogal tahay :).

Habka Ratchet

Waxaa jira hab kale oo xiiso leh oo si tartiib tartiib ah loo wanaajiyo tayada koodka iyadoo la tirtirayo digniinta falanqeeye taagan. Guntii iyo gabagabadii waa in tirada digniinta ay yarayn karto oo kaliya.

Sida loo hirgeliyo falanqeeyaha code static ee mashruuca dhaxalka ah iyada oo aan la dhiirigelin kooxda

Tirada digniinaha uu soo saaray falanqeeyuhu waa la duubay. Albaabka tayada waxaa loo habeeyey si hadda aad geli karto kood keliya oo aan kordhinayn tirada hawlgallada. Natiijo ahaan, habka si tartiib tartiib ah loo yareeyo tirada qaylo-dhaantu waxay ku bilaabataa hagaajinta falanqaynta iyo hagaajinta khaladaadka.

Xitaa haddii qofku rabo inuu wax yar khiyaamo oo uu go'aansado inuu dhaafo albaabka tayada leh ma aha inuu tirtiro digniinaha koodkiisa cusub, laakiin isagoo hagaajinaya koodkii hore ee xisbiga saddexaad, tani maaha cabsi. Dhammaan isku mid, jilbisku wuxuu u wareegayaa hal jiho, si tartiib tartiib ah tirada cilladaha ayaa yaraan doona. Xitaa haddii qofku aanu rabin inuu hagaajiyo cilladihiisa cusub, wuxuu weli ku qasbanaan doonaa inuu wax ka hagaajiyo xeerka deriska. Mararka qaarkood, siyaabaha fudud ee lagu dhimi karo tirada digniinta ayaa dhammaanaya, waxaana yimaada marka cayayaanka dhabta ah la hagaajin doono.

Habkan ayaa si faahfaahsan loogu sharraxay maqaal aad u xiiso badan Ivan Ponomarev "Ku hirgali falanqaynta hab-socodka, intii aad ka raadin lahayd cayayaan", taas oo aan kula talinayaa in ay akhriyaan qof kasta oo danaynaya hagaajinta tayada code.

Qoraaga maqaalku wuxuu kaloo hayaa warbixin mawduucan ku saabsan: "Falanqaynta joogtada ah ee joogtada ah".

gunaanad

Waxaan rajeynayaa in maqaalkan ka dib, akhristayaasha ay aqbali doonaan qalabka falanqaynta static waxayna doonayaan inay ku hirgeliyaan habka horumarinta. Haddii aad wax su'aalo ah qabtid, mar walba diyaar ayaan nahay talin Isticmaalayaasha Falanqeeyahayaga PVS-Studio oo ka caawiya hirgalintiisa.

Waxaa jira shakiyo kale oo caadi ah oo ku saabsan in falanqaynta taagan ay runtii noqon karto mid ku habboon oo faa'iido leh. Waxaan isku dayay inaan ka saaro inta badan shakiyadan daabacaadda "Sababaha lagu soo bandhigayo PVS-Studio koodka koodhka ee habka horumarinta" [9].

Waad ku mahadsan tahay dareenkaaga oo kaalay ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ oo isku day falanqeeyaha PVS-Studio.

Xiriirin dheeri ah

  1. Andrey Karpov. Sideen degdeg ugu arki karaa digniinaha xiisaha leh ee falanqeeyaha PVS-Studio u soo saaro C iyo C++ code?
  2. Wikipedia. Aragtida Bariiska.
  3. Andrey Karpov, Victoria Khanieva. Isticmaalka barashada mashiinka falanqaynta joogtada ah ee code isha barnaamijka.
  4. PVS-Studio. Dukumeenti Dejinta ogaanshaha dheeraadka ah.
  5. Andrey Karpov. Astaamaha falanqeeyaha PVS-Studio iyadoo la adeegsanayo tusaalaha EFL Core Library, 10-15% been abuur.
  6. PVS-Studio. Dukumeenti Xakamaynta tirada badan ee fariimaha falanqaynta.
  7. Ivan Andryashin. Ku saabsan sida aan u tijaabinay falanqaynta taagan ee mashruuceena ee jiliyaha waxbarasho ee raajada qalliinka endovascular.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Sida kooxda PVS-Studio u wanaajiyeen koodhka Engineerka aan dhabta ahayn.
  9. Andrey Karpov. Sababaha lagu soo bandhigo falanqeeyaha code static PVS-Studio habka horumarinta.

Sida loo hirgeliyo falanqeeyaha code static ee mashruuca dhaxalka ah iyada oo aan la dhiirigelin kooxda

Haddii aad rabto inaad maqaalkan la wadaagto dhagaystayaasha ku hadla Ingiriisiga, fadlan isticmaal xidhiidhka tarjumaadda: Andrey Karpov. Sida loo soo bandhigo falanqaynta code static ee mashruuc dhaxalgal ah oo aan la niyad jabin kooxda.

Source: www.habr.com

Add a comment