Static analysis - gikan sa pasiuna hangtod sa panagsama

Gikapoy sa walay katapusan nga pagrepaso sa code o pag-debug, usahay maghunahuna ka kung unsaon pagpayano ang imong kinabuhi. Ug human sa pagpangita og gamay, o pinaagi sa aksidenteng pagkapandol niini, imong makita ang magic nga hugpong sa mga pulong: "Static analysis". Atong tan-awon kung unsa kini ug kung giunsa kini makig-uban sa imong proyekto.

Static analysis - gikan sa pasiuna hangtod sa panagsama
Sa tinuud, kung nagsulat ka sa bisan unsang modernong sinultian, nan, nga wala nimo nahibal-an, gipadagan nimo kini pinaagi sa usa ka static analyzer. Ang tinuod mao nga ang bisan unsang modernong compiler naghatag, bisan usa ka gamay, hugpong sa mga pasidaan bahin sa mga potensyal nga problema sa code. Pananglitan, sa pag-compile sa C++ code sa Visual Studio mahimo nimong makita ang mosunod:

Static analysis - gikan sa pasiuna hangtod sa panagsama
Niini nga output atong makita nga ang variable var wala gayud gigamit bisan asa sa function. Mao nga sa tinuud, hapit kanunay nimo gigamit ang usa ka yano nga static code analyzer. Bisan pa, dili sama sa mga propesyonal nga analista sama sa Coverity, Klocwork o PVS-Studio, ang mga pasidaan nga gihatag sa compiler mahimong magpakita lamang sa gamay nga mga problema.

Kung dili ka sigurado kung unsa ang static nga pagtuki ug kung giunsa kini ipatuman, basaha kini nga artikulosa pagkat-on og dugang mahitungod niini nga pamaagi.

Ngano nga kinahanglan nimo ang static nga pagtuki?

Sa laktod nga pagkasulti: pagpadali ug pagpayano.

Gitugotan ka sa static nga pag-analisa nga makit-an nimo ang daghang lainlaing mga problema sa code: gikan sa dili husto nga paggamit sa mga pagtukod sa lengguwahe hangtod sa mga typo. Pananglitan, imbes nga

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

Gisulat nimo ang mosunod nga code:

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

Sama sa imong nakita, adunay usa ka typo sa katapusan nga linya. Pananglitan, ang PVS-Studio nag-isyu sa mosunod nga pasidaan:

V537 Ikonsiderar ang pagrepaso sa pagkahusto sa paggamit sa butang nga 'y'.

Kung gusto nimo ipunting ang imong mga kamot sa kini nga sayup, pagsulay usa ka andam nga nahimo nga pananglitan sa Compiler Explorer: *naghilak*.

Ug ingon sa imong nasabtan, dili kanunay posible nga hatagan dayon ang pagtagad sa ingon nga mga seksyon sa code, ug tungod niini, mahimo ka nga maglingkod sa pag-debug sa usa ka maayo nga oras, nahibulong kung ngano nga ang tanan molihok nga katingad-an.

Bisan pa, kini klaro nga usa ka sayup. Unsa kaha kung ang developer nagsulat sa suboptimal nga code tungod kay nakalimtan niya ang pipila ka pagkapino sa pinulongan? O bisan pa gitugotan kini sa code dili matino nga kinaiya? Ikasubo, ang ingon nga mga kaso kay kasagaran ug ang bahin sa leon sa oras gigugol sa pag-debug espesipikong nagtrabaho nga code nga adunay mga typo, kasagaran nga mga sayup o dili matino nga pamatasan.

Alang niini nga mga sitwasyon nga nagpakita ang static nga pagtuki. Kini usa ka katabang sa developer nga magtudlo sa lainlaing mga problema sa code ug ipasabut sa dokumentasyon kung ngano nga dili kinahanglan nga isulat kini nga paagi, kung unsa ang mahimo’g hinungdan niini ug kung giunsa kini pag-ayo. Ania ang usa ka pananglitan kung unsa ang hitsura niini: *naghilak*.

Makita nimo ang labi ka makapaikag nga mga sayup nga makit-an sa analisador sa mga artikulo:

Karon nga nabasa na nimo kini nga materyal ug kombinsido sa mga benepisyo sa static nga pagtuki, mahimo nimong sulayan kini. Apan asa magsugod? Giunsa pag-integrate ang bag-ong himan sa imong proyekto karon? Ug unsaon pagpaila sa team ngadto kaniya? Makita nimo ang mga tubag niini nga mga pangutana sa ubos.

Matikdi. Ang static nga pagtuki dili makapuli o makakansela sa usa ka mapuslanon nga butang sama sa mga pagsusi sa code. Nagdugang kini niini nga proseso, nga nagtabang sa pagmatikod ug pagtul-id sa mga typo, dili tukma, ug delikado nga mga disenyo nga abante. Mas produktibo ang pag-focus sa mga pagrepaso sa code sa mga algorithm ug katin-aw sa code, imbes nga mangita og sayop nga parenthesis o basaha makalaay nga pagtandi function.

0. Pag-ila sa himan

Kini tanan nagsugod sa usa ka pagsulay nga bersyon. Sa tinuud, lisud ang pagdesisyon nga ipatuman ang usa ka butang sa proseso sa pag-uswag kung wala pa nimo makita ang himan nga buhi kaniadto. Busa, ang una nimong buhaton mao ang pag-download pagsulay nga bersyon.

Unsa ang imong makat-unan niini nga yugto:

  • Unsa ang mga paagi sa pagpakig-uban sa analisador;
  • Nahiuyon ba ang analista sa imong palibot sa pag-uswag?
  • Unsa nga mga problema ang anaa karon sa imong mga proyekto?

Human nimo ma-install ang tanan nga imong kinahanglan, ang una nga butang nga kinahanglan nimong buhaton mao ang pagdagan usa ka pagtuki sa tibuuk nga proyekto (Windows, Linux, macOS). Sa kaso sa PVS-Studio sa Visual Studio makakita ka og susama nga hulagway (ma-click):

Static analysis - gikan sa pasiuna hangtod sa panagsama
Ang tinuod mao nga ang mga static analisador kasagarang nag-isyu sa daghang mga pasidaan alang sa mga proyekto nga adunay daghang base sa code. Dili kinahanglan nga ayohon silang tanan, tungod kay ang imong proyekto nagtrabaho na, nga nagpasabut nga kini nga mga problema dili kritikal. Apan, ikaw mahimo nimong tan-awon ang labing makapaikag nga mga pasidaan ug tul-ira sila kon gikinahanglan. Aron mahimo kini, kinahanglan nimo nga i-filter ang output ug ibilin lamang ang labing kasaligan nga mga mensahe. Sa PVS-Studio plugin alang sa Visual Studio, kini gihimo pinaagi sa pagsala sa mga lebel sa sayup ug mga kategorya. Alang sa labing tukma nga output, ibilin lamang Hataas ΠΈ Kinatibuk-ang (mahimo usab nga i-klik):

Static analysis - gikan sa pasiuna hangtod sa panagsama
Sa tinuud, ang 178 nga mga pasidaan labi ka dali nga tan-awon kaysa pila ka libo ...

Sa mga tab medium ΠΈ ubos Kasagaran adunay maayo nga mga pasidaan, apan kini nga mga kategorya naglakip sa mga diagnostic nga adunay gamay nga katukma (kasaligan). Dugang nga impormasyon bahin sa mga lebel sa pasidaan ug mga kapilian sa pagtrabaho ubos sa Windows makita dinhi: *naghilak*.

Ang malampuson nga pagribyu sa labing makapaikag nga mga sayup (ug malampuson nga gitul-id kini) takus pugngan ang nahabilin nga mga pasidaan. Kini gikinahanglan aron ang bag-ong mga pasidaan dili mawala taliwala sa mga daan. Dugang pa, ang usa ka static analyzer usa ka katabang sa programmer, ug dili usa ka lista sa mga bug. πŸ™‚

1. Automation

Human makaila, panahon na aron i-configure ang mga plugins ug i-integrate sa CI. Kinahanglan kini buhaton sa dili pa magsugod ang mga programmer sa paggamit sa static analyzer. Ang tinuod mao nga ang programmer mahimong makalimot sa paghimo sa pag-analisar o dili gusto nga buhaton kini. Aron mahimo kini, kinahanglan nimo nga buhaton ang katapusan nga pagsusi sa tanan aron ang wala pa nasulayan nga code dili makasulod sa kinatibuk-ang sanga sa pag-uswag.

Unsa ang imong makat-unan niini nga yugto:

  • Unsa nga mga kapilian sa automation ang gihatag sa himan;
  • Nahiuyon ba ang analisador sa imong sistema sa asembliya?

Tungod kay wala’y perpekto nga dokumentasyon, usahay kinahanglan nimo nga isulat pagsuporta. Normal kini ug nalipay kami sa pagtabang kanimo. πŸ™‚

Karon magpadayon kita sa padayon nga paghiusa (CI) nga mga serbisyo. Ang bisan unsang analisador mahimong ipatuman ngadto kanila nga walay bisan unsang seryoso nga mga problema. Aron mahimo kini, kinahanglan nimo nga maghimo usa ka lahi nga yugto sa pipeline, nga sagad nahimutang pagkahuman sa pagtukod ug mga pagsulay sa yunit. Gihimo kini gamit ang lainlaing mga gamit sa console. Pananglitan, ang PVS-Studio naghatag sa mosunod nga mga gamit:

Aron mahiusa ang pagtuki sa CI, kinahanglan nimo buhaton ang tulo ka mga butang:

  • I-install ang analisador;
  • Run analysis;
  • Ihatag ang mga resulta.

Pananglitan, aron ma-install ang PVS-Studio sa Linux (Debian-base), kinahanglan nimo nga ipadagan ang mosunod nga mga mando:

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

Sa mga sistema nga nagpadagan sa Windows, wala’y paagi aron ma-install ang analyzer gikan sa manager sa package, apan posible nga i-deploy ang analista gikan sa linya sa mando:

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

Mahimo nimong mabasa ang dugang bahin sa pag-deploy sa PVS-Studio sa mga sistema nga nagdagan sa Windows *dinhi*.

Human sa pag-instalar, kinahanglan nimo nga direktang ipadagan ang pagtuki. Bisan pa, girekomenda nga buhaton kini pagkahuman sa pag-compile ug paglabay sa mga pagsulay. Kini tungod kay ang static nga pag-analisa kasagarang mokabat ug doble ang gitas-on sa pag-compile.

Tungod kay ang pamaagi sa paglansad nagdepende sa plataporma ug mga bahin sa proyekto, ipakita nako ang kapilian alang sa C++ (Linux) ingon usa ka pananglitan:

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

Ang una nga sugo maghimo sa pagtuki, ug ang ikaduha mga sobregi-convert ang report ngadto sa text format, gipakita kini sa screen ug gibalik ang return code gawas sa 0 kung adunay mga pasidaan. Ang usa ka mekanismo nga sama niini mahimong dali nga magamit aron babagan ang usa ka pagtukod kung adunay mga mensahe sa sayup. Bisan pa, mahimo nimong tangtangon kanunay ang bandila -w ug ayaw pagbabag ug asembliya nga adunay mga pasidaan.

Matikdi. Ang format sa teksto dili kombenyente. Gihatag kini sa yano nga pananglitan. Hatagi'g pagtagad ang usa ka mas makapaikag nga format sa report - FullHtml. Gitugotan ka niini nga mag-navigate sa code.

Mahimo nimong mabasa ang dugang bahin sa pag-set up sa pagtuki sa CI sa artikulo "PVS-Studio ug Padayon nga Paghiusa"(Windows) o"Giunsa ang pag-set up sa PVS-Studio sa Travis CI"(Linux).

Okay, imong gi-configure ang analista sa build server. Karon, kung adunay usa nga nag-upload sa wala pa nasulayan nga code, ang yugto sa pag-verify mapakyas, ug mahimo nimong mahibal-an ang problema, bisan pa, dili kini hingpit nga kombenyente, tungod kay mas episyente ang pagsusi sa proyekto dili pagkahuman sa paghiusa sa mga sanga, apan sa wala pa kini, sa yugto sa paghangyo sa pagbitad.A.

Sa kinatibuk-an, ang pagpahimutang sa usa ka pagtuki sa paghangyo sa pagbitad dili lahi sa naandan nga paglansad sa usa ka pagtuki sa CI. Gawas sa panginahanglan nga makakuha usa ka lista sa nabag-o nga mga file. Kini kasagarang makuha pinaagi sa pagpangutana sa mga kalainan tali sa mga sanga gamit ang git:

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

Karon kinahanglan nimo nga ipasa kini nga lista sa mga file sa analista ingon input. Pananglitan, sa PVS-Studio kini gipatuman gamit ang bandila -S:

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

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ Π°Π½Π°Π»ΠΈΠ· pull request'ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ *dinhi*. Bisan kung ang imong CI wala sa lista sa mga serbisyo nga gihisgutan sa artikulo, imong makit-an ang kinatibuk-ang seksyon nga gipahinungod sa teorya sa kini nga klase sa pagtuki nga mapuslanon.

Pinaagi sa pag-set up sa pag-analisa sa mga hangyo sa pagbitad, mahimo nimong babagan ang mga commit nga adunay mga pasidaan, sa ingon paghimo usa ka utlanan nga dili matabok sa wala pa nasulayan nga code.

Kini tanan maayo ra, apan gusto nako nga makita ang tanan nga mga pasidaan sa usa ka lugar. Dili lamang gikan sa static analyzer, kondili gikan usab sa mga unit test o gikan sa dynamic analyzer. Adunay lain-laing mga serbisyo ug mga plugins alang niini. Ang PVS-Studio, pananglitan, adunay plugin alang sa pag-integrate sa SonarQube.

2. Paghiusa sa mga makina sa developer

Karon na ang panahon sa pag-install ug pag-configure sa analista alang sa adlaw-adlaw nga paggamit sa pag-uswag. Niining puntoha nahibal-an na nimo ang kadaghanan sa mga paagi sa pagtrabaho, mao nga matawag kini nga labing kadali nga bahin.

Ingon ang pinakasimple nga kapilian, ang mga developer mahimo nga mag-install sa kinahanglan nga analisador sa ilang kaugalingon. Bisan pa, kini magkinahanglan daghang oras ug makabalda kanila gikan sa pag-uswag, aron mahimo nimo nga awtomatiko kini nga proseso gamit ang usa ka installer ug ang kinahanglan nga mga bandila. Alang sa PVS-Studio adunay lainlain mga bandila alang sa awtomatikong pag-instalar. Bisan pa, adunay kanunay nga mga managers sa package, pananglitan, Chocolatey (Windows), Homebrew (macOS) o daghang mga kapilian alang sa Linux.

Unya kinahanglan nimo nga i-install ang kinahanglan nga mga plugins, pananglitan alang sa visual Studio, IDEYA, Rider ug uban pa

3. Adlaw-adlaw nga paggamit

Niini nga yugto, panahon na nga isulti ang pipila ka mga pulong bahin sa mga paagi aron mapadali ang analisador sa adlaw-adlaw nga paggamit. Ang usa ka kompleto nga pagtuki sa tibuok proyekto nagkinahanglan og daghang panahon, apan unsa ka subsob nga atong usbon ang code sa tibuok nga proyekto sa usa ka higayon? Wala'y bisan unsang refactoring nga dako kaayo nga kini makaapekto dayon sa tibuok code base. Ang gidaghanon sa mga file nga giusab sa usa ka panahon panagsa ra nga molapas sa usa ka dosena, mao nga makatarunganon nga analisahon kini. Alang sa ingon nga kahimtang adunay incremental analysis mode. Ayaw lang kabalaka, dili kini lain nga himan. Kini usa ka espesyal nga mode nga nagtugot kanimo sa pag-analisar lamang sa nabag-o nga mga file ug sa ilang mga dependency, ug kini awtomatiko nga mahitabo pagkahuman sa pagtukod kung nagtrabaho ka sa usa ka IDE nga na-install ang plugin.

Kung ang analisador nakamatikod sa mga problema sa bag-o lang giusab nga code, kini mag-asoy niini nga independente. Pananglitan, ang PVS-Studio mosulti kanimo bahin niini gamit ang usa ka alerto:

Static analysis - gikan sa pasiuna hangtod sa panagsama
Siyempre, ang pagsulti sa mga developers nga gamiton ang himan dili igo. Kinahanglan natong isulti kanila kung unsa kini ug kung unsa kini. Dinhi, pananglitan, ang mga artikulo bahin sa dali nga pagsugod sa PVS-Studio, apan makit-an nimo ang parehas nga mga panudlo alang sa bisan unsang himan nga gusto nimo:

Ang ingon nga mga artikulo naghatag sa tanan nga kasayuran nga gikinahanglan alang sa adlaw-adlaw nga paggamit ug wala magkinahanglan daghang oras. πŸ™‚

Bisan sa yugto sa pag-ila sa himan, gipugngan namon ang daghang mga pasidaan sa usa sa una nga paglansad. Ikasubo, ang mga static nga analista dili perpekto, mao nga matag karon ug unya naghatag sila mga sayup nga positibo. Kasagaran sayon ​​​​nga pugngan sila; pananglitan, sa PVS-Studio plugin alang sa Visual Studio kinahanglan nimo nga i-klik ang usa ka buton:

Static analysis - gikan sa pasiuna hangtod sa panagsama
Apan, labaw pa ang imong mahimo kay sa pagsumpo kanila. Pananglitan, mahimo nimong ireport ang usa ka problema aron suportahan. Kung ang sayup nga positibo mahimong matul-id, unya sa umaabot nga mga pag-update mamatikdan nimo nga sa matag higayon nga adunay gamay ug gamay nga mga sayup nga positibo nga piho sa imong codebase.

Human sa paghiusa

Mao nga naagi na namon ang tanan nga mga yugto sa paghiusa sa static nga pagtuki sa proseso sa pag-uswag. Bisan pa sa kahinungdanon sa pag-set up sa ingon nga mga himan sa CI, ang labing hinungdanon nga lugar sa pagpadagan niini mao ang kompyuter sa developer. Human sa tanan, ang usa ka static analyzer dili usa ka maghuhukom nga nag-ingon sa usa ka dapit nga layo kanimo nga ang code dili maayo. Sa kasukwahi, kini usa ka katabang nga nagsulti kanimo kung gikapoy ka ug nagpahinumdom kanimo kung nakalimtan nimo ang usa ka butang.

Tinuod, kung wala’y regular nga paggamit, ang static nga pag-analisa dili lagmit nga makapasimple sa pag-uswag. Human sa tanan, ang nag-unang kaayohan niini alang sa usa ka developer dili kaayo sa pagpangita alang sa komplikado ug kontrobersyal nga mga seksyon sa code, apan sa ilang sayo nga pagkakita. Mouyon nga ang pagdiskubre sa usa ka problema pagkahuman ipadala ang mga pag-edit alang sa pagsulay dili lamang dili maayo, apan nag-usik usab sa oras. Ang static nga pagtuki, kung gigamit kanunay, tan-awon ang matag pagbag-o direkta sa imong kompyuter ug magreport sa mga kadudahang lugar samtang nagtrabaho sa code.

Ug kung ikaw o ang imong mga kauban dili pa sigurado kung angay ba nga ipatuman ang analista, nan gisugyot ko nga magsugod ka sa pagbasa sa artikulo "Mga hinungdan sa pagpaila sa static code analyzer PVS-Studio sa proseso sa pag-uswag". Gitubag niini ang kasagaran nga mga kabalaka sa mga nag-develop nga ang static nga pag-analisar magdugay sa ilang oras ug uban pa.

Static analysis - gikan sa pasiuna hangtod sa panagsama

Kung gusto nimong ipaambit kini nga artikulo sa usa ka tigpaminaw nga nagsultig English, palihug gamita ang link sa paghubad: Maxim Zvyagintsev. Static Analysis: Gikan sa Pagsugod ngadto sa Integration.

Source: www.habr.com

Idugang sa usa ka comment