Falanqaynta joogtada ah - laga bilaabo hordhac ilaa isdhexgalka

Ku daalay dib-u-eegis kood aan dhammaad lahayn ama cillad-saarid, mararka qaarkood waxaad ka fikirtaa sidii noloshaada loo fududayn lahaa. Oo ka dib markaad wax yar baadho, ama si lama filaan ah ugu turunturoodo, waxaad arki kartaa weedha sixirka ah: "Falanqaynta joogtada ah." Aynu aragno waxa ay tahay iyo sida ay ula falgeli karto mashruucaaga.

Falanqaynta joogtada ah - laga bilaabo hordhac ilaa isdhexgalka
Dhab ahaantii, haddii aad ku qorto luqad kasta oo casri ah, ka dibna, adigoon xitaa ogaanin, waxaad ku dhex martay falanqaynta static. Xaqiiqdu waxay tahay in iskuduwe kasta oo casri ah uu bixiyo, in kasta oo yar, oo digniino ah oo ku saabsan dhibaatooyinka iman kara ee koodka. Tusaale ahaan, markaad ururinayso koodka C++ gudaha Visual Studio waxaad arki kartaa kuwan soo socda:

Falanqaynta joogtada ah - laga bilaabo hordhac ilaa isdhexgalka
Wax soo saarkan waxaan ku aragnaa doorsoomiyaha waxaa jira marna looma isticmaalin meel kasta oo shaqada ah. Markaa run ahaantii, waxaad had iyo jeer isticmaashay falanqeeye koodhka taagan. Si kastaba ha ahaatee, si ka duwan falanqeeyayaasha xirfadlayaasha ah sida Coverity, Klocwork ama PVS-Studio, digniinaha uu bixiyo iskudubariduhu waxa laga yaabaa inay muujiyaan oo kaliya tiro yar oo dhibaatooyin ah.

Haddii aanad si dhab ah u garanayn waxa ay tahay falanqaynta taagan iyo sida loo hirgeliyo. akhri maqaalkansi aad wax badan uga barato habkan.

Maxaad ugu baahan tahay falanqaynta taagan?

Marka la soo koobo: dardargelinta iyo fududaynta.

Falanqaynta joogtada ahi waxay kuu oggolaanaysaa inaad ka hesho koodka dhibaatooyin badan oo kala duwan: laga bilaabo isticmaalka khaldan ee dhisidda luqadda ilaa qoraallada qoraalka. Tusaale ahaan, halkii

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

Waxaad qortay summadan soo socota:

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

Sida aad arki karto, waxaa jira typo oo ku jira safka ugu dambeeya. Tusaale ahaan, PVS-Studio waxay soo saartaa digniintan:

V537 Tixgeli inaad dib u eegto saxnaanta isticmaalka shayga 'y'.

Haddii aad rabto inaad gacmahaaga geliso qaladkan, isku day tusaale diyaarsan oo ku jira Compiler Explorer: *ooyi*.

Oo sida aad fahamsan tahay, mar walba suurtagal ma aha in aad fiiro gaar ah u yeelato qaybaha code-ka isla markiiba, iyo sababtaas awgeed, waxaad fadhiisan kartaa qaladka saacad wanaagsan, adoo la yaabban sababta wax walba u shaqeeyaan si la yaab leh.

Si kastaba ha ahaatee, tani si cad waa qalad. Maxaa dhacaya haddii horumariyuhu uu qoray koodka hoose sababtoo ah wuxuu illoobay wax yar oo qarsoodi ah oo luqadda ah? Ama xitaa loo oggolaaday koodka dabeecad aan qeexnayn? Nasiib darro, kiisaska noocan oo kale ah gabi ahaanba waa wax caadi ah oo qaybta libaaxa waxay ku lumiyaan khaladka si gaar ah koodka shaqada oo ka kooban qoraallo, khaladaad caadi ah ama dabeecad aan la qeexin.

Waa xaaladahan in falanqaynta taagan ay u muuqatay. Kani waa kaaliyaha horumariyaha kaas oo tilmaamaya dhibaatooyin kala duwan oo ku jira koodhka oo ku sharxi doona dukumentiga sababta aan loo baahnayn in sidan loo qoro, waxa ay u horseedi karto iyo sida loo hagaajiyo. Waa tan tusaale waxa ay u ekaan karto: *ooyi*.

Waxaad ka heli kartaa khaladaad aad u xiiso badan oo uu falanqeeyuhu ku ogaan karo maqaallada:

Hadda oo aad akhriday qoraalkan oo aad ku qanacday faa'iidooyinka falanqaynta taagan, waxaa laga yaabaa inaad rabto inaad tijaabiso. Laakiin halkee laga bilaabo? Sidee loogu dhex dari karaa qalab cusub mashruucaaga hadda? Iyo sida loo baro kooxda isaga? Waxaad ka heli doontaa jawaabaha su'aalahan hoos.

Fiiro gaar ah. Falanqaynta joogtada ahi ma beddesho ama tirtirto shay faa'iido leh sida dib u eegista code. Waxay dhamaystiraysaa habkan, iyadoo ka caawinaysa in la ogaado oo la saxo qoraalada, khaladaadka, iyo naqshadaha khatarta ah ka hor. Way ka faa'iido badan tahay in diirada la saaro dib u eegista koodka ee algorithms-yada iyo caddaynta koodka, halkii laga raadin lahaa khaanad khaldan ama akhri shaqooyinka isbarbardhigga caajiska ah.

0. Barashada qalabka

Waxaas oo dhan waxay ku bilaabmaan nooca tijaabada ah. Runtii, way adag tahay in la go'aansado in wax lagu soo bandhigo habka horumarinta haddii aadan waligaa arag qalabka si toos ah ka hor. Sidaa darteed, waxa ugu horreeya ee ay tahay inaad sameyso waa soo dejinta nooca tijaabada.

Maxaad ku baran doontaa heerkan:

  • Waa maxay siyaabaha loola falgalo falanqeeyaha;
  • Falanqeeyuhu ma ku habboon yahay deegaankaaga horumarineed?
  • Waa maxay dhibaatooyinka hadda ka jira mashaariicdaada?

Kadib markaad rakibto wax kasta oo aad u baahan tahay, waxa ugu horreeya ee ay tahay inaad sameyso waa inaad sameyso falanqaynta mashruuca oo dhan (Windows, Linux, macOS). Xaaladda PVS-Studio ee Visual Studio waxaad ku arki doontaa sawir la mid ah (la gujin karo):

Falanqaynta joogtada ah - laga bilaabo hordhac ilaa isdhexgalka
Xaqiiqdu waxay tahay in falanqeeyayaasha joogtada ahi ay inta badan bixiyaan digniino tiro badan oo loogu talagalay mashaariicda leh saldhig kood weyn. Looma baahna in la hagaajiyo dhamaantood, maadaama mashruucaagu uu horeyba u shaqeynayay, taas oo macnaheedu yahay dhibaatooyinkani maaha kuwo muhiim ah. Si kastaba ha ahaatee, adiga waxaad ka eegi kartaa digniinaha ugu xiisaha badan oo sax haddii loo baahdo. Si aad tan u samayso, waxaad u baahan tahay inaad shaandhayso wax soo saarka oo aad ka tagto kaliya fariimaha ugu kalsoonaan karo. Gudaha PVS-Studio plugin ee Visual Studio, tan waxaa lagu sameeyaa iyadoo lagu shaandheynayo heerarka qaladka iyo qaybaha. Wax soo saarka ugu saxsan, ka tag kaliya Sare ΠΈ General (sidoo kale la gujin karo):

Falanqaynta joogtada ah - laga bilaabo hordhac ilaa isdhexgalka
Runtii, 178 digniinood ayaa aad uga fudud in la daawado in ka badan dhowr kun...

In tabs Dhexdhexaad ΠΈ Low Badanaa waxaa jira digniino wanaagsan, laakiin qaybahan waxaa ka mid ah kuwa ogaanshaha ee leh saxsanaan yar (isku-kalsoonaan). Macluumaad dheeraad ah oo ku saabsan heerarka digniinta iyo ikhtiyaarrada ka shaqeynta Windows-ka ayaa laga heli karaa halkan: *ooyi*.

Ka dib markii si guul leh loo eego khaladaadka ugu xiisaha badan (oo si guul leh loo saxo) ayaa mudan cadaadin digniinaha haray. Tani waa lagama maarmaan si aysan digniino cusub uga dhex lumin kuwii hore. Intaa waxaa dheer, falanqeeye taagan ayaa kaaliye u ah barnaamijka, ee maaha liiska cayayaanka. πŸ™‚

1. Automation

Isbarasho ka dib, waa waqtigii la habeyn lahaa plugins oo lagu dhex dari lahaa CI. Tani waa in la sameeyaa ka hor intaanay barnaamij-bixiyeyaashu bilaabin isticmaalka falanqeeye taagan. Xaqiiqdu waxay tahay in barnaamij-sameeyaha laga yaabo inuu iloobo inuu awood u yeesho falanqaynta ama uusan rabin inuu sameeyo gabi ahaanba. Si tan loo sameeyo, waxaad u baahan tahay inaad wax walba ku samayso hubinta ugu dambeysa si aan koodhka aan la tijaabin u galin laanta horumarinta guud.

Maxaad ku baran doontaa heerkan:

  • Waa maxay ikhtiyaarrada otomaatiga ah ee uu qalabku bixiyo;
  • Falanqeeyuhu ma ku habboon yahay nidaamka isu-ururintaada?

Maadaama dukumeenti kaamil ah aysan jirin, mararka qaarkood waa inaad wax ku qortaa taageero. Tani waa caadi, waana ku faraxsanahay inaan ku caawinno. πŸ™‚

Hadda aan u gudubno adeegyada is-dhexgalka joogtada ah (CI). Falanqeeye kasta ayaa lagu hirgelin karaa iyaga iyada oo aan wax dhibaato ah oo halis ah dhicin. Si arrintan loo sameeyo, waxaad u baahan tahay inaad abuurto marxalad gaar ah oo dhuumaha ah, taas oo inta badan ku taal ka dib imtixaannada dhismaha iyo cutubka. Tan waxaa lagu sameeyaa iyadoo la isticmaalayo utility console kala duwan. Tusaale ahaan, PVS-Studio waxay bixisaa adeegyadan soo socda:

Si aad u dhexgeliso falanqaynta CI, waxaad u baahan tahay inaad sameyso saddex shay:

  • Ku rakib falanqaynta;
  • Orod falanqaynta;
  • Keen natiijooyin

Tusaale ahaan, si aad ugu rakibto PVS-Studio Linux (Debian-base), waxaad u baahan tahay inaad socodsiiso amarada soo socda:

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

Nidaamyada ku shaqeeya Windows, ma jirto hab lagu rakibo falanqeeyaha maareeyaha xirmada, laakiin waxaa suurtagal ah in la geeyo falanqeeyaha khadka taliska:

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

Waxaad ka akhrisan kartaa wax badan oo ku saabsan geynta PVS-Studio nidaamyada ku shaqeeya Windows *halkan*.

Kadib rakibidda, waxaad u baahan tahay inaad si toos ah u socodsiiso falanqaynta. Si kastaba ha ahaatee, waxaa lagu talinayaa in la sameeyo tan kaliya ka dib marka la isku duba rido iyo imtixaanada la gudbo. Tani waa sababta oo ah falanqaynta joogtada ahi waxay caadi ahaan qaadataa laba jeer inta la ururinayo.

Maadaama habka la bilaabay uu ku xiran yahay goobta iyo astaamaha mashruuca, waxaan tusi doonaa ikhtiyaarka C++ (Linux) tusaale ahaan:

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

Amarka koowaad ayaa sameyn doona falanqaynta, kan labaadna baqshadahau beddelo warbixinta qaab qoraal ah, ku soo bandhiga shaashadda oo soo celisa koodka soo celinta oo aan ahayn 0 haddii ay jiraan digniino. Habkan oo kale ayaa si ku habboon loo isticmaali karaa si loo xannibo dhismaha marka ay jiraan farriimo khalad ah. Si kastaba ha ahaatee, waxaad mar walba ka saari kartaa calanka -w oo ha hor istaagin shir ay ku jiraan digniino.

Fiiro gaar ah. Qaabka qoraalka waa dhib. Waxaa loo bixiyaa si fudud tusaale ahaan. U fiirso qaabka warbixinta oo aad u xiiso badan - FullHtml. Waxay kuu ogolaanaysaa inaad dhex maraan koodka.

Waxaad ka akhrisan kartaa wax badan oo ku saabsan dejinta falanqaynta CI ee maqaalka "PVS-Studio iyo is dhexgalka joogtada ah"(Windows) ama"Sida loo sameeyo PVS-Studio ee Travis CI" (Linux).

Hagaag, waxaad ku habaysay falanqeeyaha dhisaha serfarka. Hadda, haddii qof soo dhejiyay koodka aan la tijaabin, heerka xaqiijinta wuu ku guuldareysan doonaa, waxaadna awoodi doontaa inaad ogaato dhibaatada, si kastaba ha ahaatee, tani maahan mid gebi ahaanba ku habboon, maadaama ay aad u fiican tahay in la hubiyo mashruuca ma aha ka dib markii laamaha la isku daray, laakiin ka hor, marxaladda codsiga jiidista. A.

Guud ahaan, dejinta falanqaynta codsi jiid kama duwana bilawga caadiga ah ee falanqaynta CI. Marka laga reebo baahida loo qabo in la helo liiska faylasha la beddelay. Kuwaas waxaa badanaa lagu heli karaa iyadoo la waydiiyo faraqa u dhexeeya laamaha iyadoo la adeegsanayo git:

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

Hadda waxaad u baahan tahay inaad u gudbiso liiskan faylalka falanqeeyayaasha si aad u geliso. Tusaale ahaan, PVS-Studio tan waxaa laga hirgaliyay iyadoo la isticmaalayo calanka -S:

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

Waxaad ka heli kartaa wax badan oo ku saabsan falanqaynta codsiyada jiidashada *halkan*. Xitaa haddii CI-gaagu aanu ku jirin liiska adeegyada lagu sheegay maqaalka, waxaad ka heli doontaa qaybta guud ee u go'an aragtida falanqaynta noocan ah mid waxtar leh.

Adiga oo dejinaya falanqaynta codsiyada jiidista, waxaad xannibi kartaa ballanqaadyada digniinaha ku jira, si aad u abuurto xuduud aanu koodka aan la tijaabin ka gudbi karin.

Runtii tani waa wax fiican, laakiin waxaan jeclaan lahaa inaan awoodo inaan dhammaan digniinaha ku arko hal meel. Kaliya maahan falanqeeye taagan, laakiin sidoo kale laga soo qaado imtixaannada cutubka ama falanqeeyaha firfircoon. Waxa jira adeegyo iyo plugins kala duwan tan. PVS-Studio, tusaale ahaan, waxay leedahay plugin si loogu daro SonarQube.

2. Isku-dhafka mashiinka horumarinta

Hadda waa waqtigii la rakibi lahaa oo la habeyn lahaa falanqeeye si loogu isticmaalo horumarinta maalin kasta. Halkaa marka ay marayso waxa aad hore u baratay badi hababka shaqada, markaa tan waxa loogu yeedhi karaa qaybta ugu fudud.

Sida ikhtiyaarka ugu fudud, horumariyayaashu waxay rakibi karaan falanqeeyaha lagama maarmaanka ah laftooda. Si kastaba ha ahaatee, tani waxay qaadan doontaa waqti badan waxayna ka jeedin doontaa horumarka, si aad u habayn karto habkan adoo isticmaalaya rakibaha iyo calanka lagama maarmaanka ah. PVS-Studio waxaa jira noocyo kala duwan calamada si toos ah loogu rakibo. Si kastaba ha ahaatee, waxaa had iyo jeer jira maareeyayaal xirmo, tusaale ahaan, Chocolatey (Windows), Homebrew (macOS) ama daraasiin ikhtiyaar ah Linux.

Markaas waxaad u baahan doontaa inaad rakibto plugins lagama maarmaanka ah, tusaale ahaan Studio Visual, IDEA, fuushanba iwm

3. Isticmaalka maalinlaha ah

Marxaladdan, waa waqtigii la dhihi lahaa dhowr eray oo ku saabsan siyaabaha loo dedejin karo falanqeeyayaasha inta lagu jiro isticmaalka maalinlaha ah. Falanqaynta dhamaystiran ee mashruuca oo dhan waxay qaadataa wakhti badan, laakiin imisa jeer ayaan bedelnaa koodka dhammaan mashruuca hal mar? Ma jiraan wax dib-u-soo-celin ah oo aad u weyn oo isla markiiba saameyn doona dhammaan saldhigga koodhka. Tirada faylalka ee la bedelay mar dhif ah ayaa ka badan darsin, marka waxaa macno leh in la falanqeeyo. Xaaladdan oo kale ayaa jirta habka falanqaynta korodhka. Kaliya ha ka welwelin, tani maaha qalab kale. Tani waa hab gaar ah oo kuu ogolaanaya inaad falanqeyso kaliya faylasha la beddelay iyo ku tiirsanaanta, tani waxay si toos ah u dhacdaa ka dib marka la dhiso haddii aad ka shaqeyneyso IDE oo leh plugin ku rakiban.

Haddii falanqeeyuhu uu ogaado dhibaatooyinka koodka dhawaan la beddelay, si madax-bannaan ayuu tan u soo sheegi doonaa. Tusaale ahaan, PVS-Studio ayaa tan kaaga sheegi doonta adiga oo isticmaalaya digniin:

Falanqaynta joogtada ah - laga bilaabo hordhac ilaa isdhexgalka
Dabcan, u sheeg horumariyeyaasha inay isticmaalaan aaladda kuma filna. Waxaan u baahanahay inaan si uun u sheegno waxa ay tahay iyo sida ay tahay. Halkan, tusaale ahaan, waa maqaallo ku saabsan bilawga degdega ah ee PVS-Studio, laakiin waxaad ka heli kartaa casharro la mid ah qalab kasta oo aad doorbidayso:

Maqaallada noocan oo kale ah waxay bixiyaan dhammaan macluumaadka lagama maarmaanka u ah isticmaalka maalinlaha ah mana qaataan waqti badan. πŸ™‚

Xataa marxaladda barashada aaladda, waxaan xakameynay digniino badan inta lagu gudajiro mid ka mid ah furitaankii ugu horreeyay. Nasiib darro, falanqeeyayaasha joogtada ahi ma fiicna, markaa waqti ka waqti waxay bixiyaan faa'iidooyin been ah. Badanaa way fududahay in la xakameeyo; tusaale ahaan, PVS-Studio plugin ee Visual Studio waxaad u baahan tahay oo kaliya inaad gujiso hal badhan:

Falanqaynta joogtada ah - laga bilaabo hordhac ilaa isdhexgalka
Si kastaba ha ahaatee, waxaad samayn kartaa wax ka badan oo kaliya in la cabudhiyo. Tusaale ahaan, waxaad u sheegi kartaa dhibaato si aad u taageerto. Haddii wanaagga beenta ah la sixi karo, ka dib cusboonaysiinta mustaqbalka waxaad ogaan kartaa in mar kasta ay yaraadaan oo ay yaraadaan waxtarka beenta ah ee gaarka ah ee codebase-kaaga.

Is dhexgalka ka dib

Markaa waxaan soo marnay dhammaan heerarka isku dhafka falanqaynta joogtada ah ee habka horumarinta. Inkasta oo ay muhiim tahay in la sameeyo qalabkan oo kale CI, meesha ugu muhiimsan ee lagu socodsiiyo waa kombuyuutarka horumariyaha. Ka dib oo dhan, falanqeeye aan caadi ahayn maaha garsoore sheegaya meel kaa fog in koodka uusan fiicnayn. Taa caksigeeda, waa kaaliye kuu sheega haddii aad daalan tahay oo ku xasuusiya haddii aad wax illowday.

Run, iyada oo aan si joogto ah loo isticmaalin, falanqaynta joogtada ahi uma badna inay si weyn u fududayso horumarka. Ka dib oo dhan, faa'iidada ugu weyn ee horumariyaha maahan wax badan raadinta qaybaha adag ee koodka, laakiin marka hore la ogaado. Ogow in ogaanshaha dhibka ka dib markii wax-ka-beddelka loo diray imtixaanku aanay ahayn wax aan fiicnayn oo keliya, laakiin sidoo kale waqti badan qaadanaysa. Falanqaynta joogtada ah, marka si joogto ah loo isticmaalo, waxay si toos ah u eegtaa isbeddel kasta oo ku yimaada kombuyuutarkaaga waxayna ka warbixisaa meelaha laga shakiyo marka aad ku shaqaynayso koodka.

Oo haddii adiga ama asxaabtaada aadan weli hubin inay mudan tahay hirgelinta falanqaynta, markaa waxaan kuu soo jeedinayaa inaad hadda bilawdo akhrinta maqaalka "Sababaha lagu soo bandhigo falanqeeyaha code static PVS-Studio habka horumarinta"Waxay wax ka qabanaysaa welwelka caadiga ah ee horumariyeyaasha in falanqaynta joogtada ah ay qaadan doonto waqtigooda iyo wixii la mid ah.

Falanqaynta joogtada ah - laga bilaabo hordhac ilaa isdhexgalka

Haddii aad rabto inaad maqaalkan la wadaagto dhagaystayaasha ku hadla Ingiriisiga, fadlan isticmaal xidhiidhka tarjumaadda: Maxim Zvyagintsev. Falanqaynta Joogtada ah: Laga bilaabo Bilawga ilaa Is-dhexgalka.

Source: www.habr.com

Add a comment