Analiza statike - nga hyrja në integrim

Të lodhur nga rishikimi ose korrigjimi i pafund i kodit, ndonjëherë mendoni se si ta thjeshtoni jetën tuaj. Dhe pasi të kërkoni pak, ose duke u penguar rastësisht mbi të, mund të shihni frazën magjike: "Analizë statike". Le të shohim se çfarë është dhe si mund të ndërveprojë me projektin tuaj.

Analiza statike - nga hyrja në integrim
Në fakt, nëse shkruani në ndonjë gjuhë moderne, atëherë, pa e kuptuar fare, e kaloni përmes një analizuesi statik. Fakti është se çdo përpilues modern ofron, megjithëse një grup të vogël paralajmërimesh për problemet e mundshme në kod. Për shembull, kur përpiloni kodin C++ në Visual Studio, mund të shihni sa vijon:

Analiza statike - nga hyrja në integrim
Në këtë dalje shohim se ndryshorja ishte nuk është përdorur askund në funksion. Pra, në realitet, pothuajse gjithmonë keni përdorur një analizues të thjeshtë të kodit statik. Megjithatë, ndryshe nga analizuesit profesionistë si Coverity, Klocwork ose PVS-Studio, paralajmërimet e dhëna nga përpiluesi mund të tregojnë vetëm një gamë të vogël problemesh.

Nëse nuk e dini me siguri se çfarë është analiza statike dhe si ta zbatoni atë, lexoni këtë artikullpër të mësuar më shumë rreth kësaj metodologjie.

Pse keni nevojë për analiza statike?

Me pak fjalë: përshpejtimi dhe thjeshtimi.

Analiza statike ju lejon të gjeni shumë probleme të ndryshme në kod: nga përdorimi i gabuar i konstrukteve të gjuhës deri te gabimet e shtypit. Për shembull, në vend të

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

Ju keni shkruar kodin e mëposhtëm:

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

Siç mund ta shihni, ka një gabim shtypi në rreshtin e fundit. Për shembull, PVS-Studio lëshon paralajmërimin e mëposhtëm:

V537 Merrni parasysh rishikimin e korrektësisë së përdorimit të artikullit 'y'.

Nëse dëshironi të futni duart në këtë gabim, provoni një shembull të gatshëm në Compiler Explorer: *qaj*.

Dhe siç e kuptoni, nuk është gjithmonë e mundur t'i kushtoni vëmendje menjëherë seksioneve të tilla të kodit, dhe për shkak të kësaj, mund të uleni duke korrigjuar për një orë të mirë, duke pyetur veten pse gjithçka funksionon kaq çuditërisht.

Megjithatë, ky është padyshim një gabim. Po sikur zhvilluesi të shkruante kodin jooptimal sepse ka harruar disa hollësi të gjuhës? Ose edhe lejohet në kod sjellje e papërcaktuar? Fatkeqësisht, raste të tilla janë krejtësisht të zakonshme dhe pjesa më e madhe e kohës harxhohet për korrigjimin e kodit specifik të punës që përmban gabime shtypi, gabime tipike ose sjellje të papërcaktuara.

Pikërisht për këto situata u shfaq analiza statike. Ky është një asistent për zhvilluesin i cili do të tregojë probleme të ndryshme në kod dhe do të shpjegojë në dokumentacion pse nuk është e nevojshme të shkruhet në këtë mënyrë, çfarë mund të çojë dhe si ta rregullojë atë. Ja një shembull se si mund të duket: *qaj*.

Ju mund të gjeni gabime më interesante që analizuesi mund të zbulojë në artikujt:

Tani që e keni lexuar këtë material dhe jeni bindur për përfitimet e analizës statike, mund të dëshironi ta provoni. Por nga të filloni? Si të integroni një mjet të ri në projektin tuaj aktual? Dhe si ta prezantoni ekipin me të? Përgjigjet për këto pyetje do të gjeni më poshtë.

Shënim. Analiza statike nuk zëvendëson ose anulon një gjë kaq të dobishme si rishikimet e kodit. Ai plotëson këtë proces, duke ndihmuar në vërejtjen dhe korrigjimin e gabimeve, pasaktësive dhe modeleve të rrezikshme paraprakisht. Është shumë më produktive të përqendrohesh në rishikimet e kodit mbi algoritmet dhe qartësinë e kodit, në vend që të kërkosh një kllapa të gabuar ose lexoni funksionet e krahasimit të mërzitshëm.

0. Njohja me mjetin

Gjithçka fillon me një version provë. Në të vërtetë, është e vështirë të vendosësh të zbatosh diçka në procesin e zhvillimit nëse nuk e ke parë kurrë më parë mjetin drejtpërdrejt. Prandaj, gjëja e parë që duhet të bëni është të shkarkoni versioni i provës.

Çfarë do të mësoni në këtë fazë:

  • Cilat janë mënyrat për të ndërvepruar me analizuesin;
  • A është analizuesi i pajtueshëm me mjedisin tuaj të zhvillimit?
  • Çfarë problemesh ka aktualisht në projektet tuaja?

Pasi të keni instaluar gjithçka që ju nevojitet, gjëja e parë që duhet të bëni është të bëni një analizë të të gjithë projektit (Dritaret, Linux, MacOS). Në rastin e PVS-Studio në Visual Studio do të shihni një pamje të ngjashme (të klikueshme):

Analiza statike - nga hyrja në integrim
Fakti është se analizuesit statikë zakonisht lëshojnë një numër të madh paralajmërimesh për projektet me një bazë të madhe kodi. Nuk ka nevojë t'i rregulloni të gjitha, pasi projekti juaj tashmë po funksionon, që do të thotë se këto probleme nuk janë kritike. Megjithatë, ju mund të shikoni paralajmërimet më interesante dhe korrigjoni ato nëse është e nevojshme. Për ta bërë këtë, duhet të filtroni daljen dhe të lini vetëm mesazhet më të besueshme. Në shtojcën PVS-Studio për Visual Studio, kjo bëhet duke filtruar sipas niveleve dhe kategorive të gabimeve. Për rezultatin më të saktë, lini vetëm i lartë и i përgjithshëm (gjithashtu i klikueshëm):

Analiza statike - nga hyrja në integrim
Në të vërtetë, 178 paralajmërime janë shumë më të lehta për t'u parë se disa mijëra...

Në skeda Medium и ulët Shpesh ka paralajmërime të mira, por këto kategori përfshijnë ato diagnostifikime që kanë më pak saktësi (besueshmëri). Më shumë informacion rreth niveleve të paralajmërimit dhe opsioneve për të punuar nën Windows mund të gjenden këtu: *qaj*.

Vlen të keni shqyrtuar me sukses gabimet më interesante (dhe t'i korrigjoni ato me sukses). shtypni paralajmërimet e mbetura. Kjo është e nevojshme në mënyrë që paralajmërimet e reja të mos humbasin midis të vjetrave. Për më tepër, një analizues statik është një asistent për programuesin, dhe jo një listë e gabimeve. 🙂

1. Automatization

Pasi të njiheni, është koha për të konfiguruar shtojcat dhe për t'u integruar në CI. Kjo duhet bërë përpara se programuesit të fillojnë të përdorin analizuesin statik. Fakti është se programuesi mund të harrojë të aktivizojë analizën ose të mos dëshirojë ta bëjë fare. Për ta bërë këtë, ju duhet të bëni një kontroll përfundimtar të gjithçkaje në mënyrë që kodi i paprovuar të mos hyjë në degën e përgjithshme të zhvillimit.

Çfarë do të mësoni në këtë fazë:

  • Çfarë opsionesh automatizimi ofron mjeti;
  • A është analizuesi i pajtueshëm me sistemin tuaj të montimit?

Meqenëse dokumentacioni i përsosur nuk ekziston, ndonjëherë duhet të shkruani mbështetje. Kjo është normale dhe ne jemi të lumtur t'ju ndihmojmë. 🙂

Tani le të kalojmë te shërbimet e integrimit të vazhdueshëm (CI). Çdo analizues mund të futet në to pa ndonjë problem serioz. Për ta bërë këtë, ju duhet të krijoni një fazë të veçantë në tubacion, e cila zakonisht ndodhet pas testeve të ndërtimit dhe njësisë. Kjo bëhet duke përdorur shërbime të ndryshme të konsolës. Për shembull, PVS-Studio ofron shërbimet e mëposhtme:

Për të integruar analizën në CI, duhet të bëni tre gjëra:

  • Instaloni analizuesin;
  • Analiza e ekzekutimit;
  • Jepni rezultatet.

Për shembull, për të instaluar PVS-Studio në Linux (Debian-base), duhet të ekzekutoni komandat e mëposhtme:

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

Në sistemet që funksionojnë Windows, nuk ka asnjë mënyrë për të instaluar analizuesin nga menaxheri i paketave, por është e mundur të vendoset analizuesi nga linja e komandës:

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

Mund të lexoni më shumë rreth vendosjes së PVS-Studio në sistemet që funksionojnë Windows *këtu*.

Pas instalimit, duhet të kryeni drejtpërdrejt analizën. Sidoqoftë, rekomandohet ta bëni këtë vetëm pasi të kenë kaluar përpilimi dhe testet. Kjo është për shkak se analiza statike zakonisht zgjat dy herë më shumë se përpilimi.

Meqenëse metoda e nisjes varet nga platforma dhe veçoritë e projektit, unë do të tregoj opsionin për C++ (Linux) si shembull:

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

Komanda e parë do të kryejë analizën, dhe e dyta zarfetkonverton raportin në format teksti, e shfaq atë në ekran dhe kthen një kod kthimi të ndryshëm nga 0 nëse ka paralajmërime. Një mekanizëm si ky mund të përdoret lehtësisht për të bllokuar një ndërtim kur ka mesazhe gabimi. Sidoqoftë, gjithmonë mund ta hiqni flamurin -w dhe mos bllokoni një asamble që përmban paralajmërime.

Shënim. Formati i tekstit është i papërshtatshëm. Është dhënë thjesht si shembull. Kushtojini vëmendje një formati më interesant raporti - FullHtml. Kjo ju lejon të lundroni nëpër kod.

Mund të lexoni më shumë rreth vendosjes së analizës në CI në artikullin "PVS-Studio dhe Integrim i Vazhdueshëm" (Windows) ose"Si të konfiguroni PVS-Studio në Travis CI" (Linux).

Në rregull, ju e keni konfiguruar analizuesin në serverin e ndërtimit. Tani, nëse dikush ka ngarkuar kodin e patestuar, faza e verifikimit do të dështojë dhe ju do të jeni në gjendje të zbuloni problemin, megjithatë, kjo nuk është plotësisht e përshtatshme, pasi është më efikase të kontrolloni projektin jo pasi të jenë bashkuar degët, por përpara tij, në fazën e kërkesës për tërheqje.

Në përgjithësi, vendosja e një analize të kërkesës për tërheqje nuk është shumë e ndryshme nga fillimi i zakonshëm i një analize në CI. Me përjashtim të nevojës për të marrë një listë të skedarëve të ndryshuar. Këto zakonisht mund të merren duke pyetur ndryshimet midis degëve duke përdorur git:

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

Tani ju duhet t'ia kaloni këtë listë skedarësh analizuesit si hyrje. Për shembull, në PVS-Studio kjo zbatohet duke përdorur flamurin -S:

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

Mund të mësoni më shumë rreth analizimit të kërkesave për tërheqje *këtu*. Edhe nëse CI juaj nuk është në listën e shërbimeve të përmendura në artikull, do t'ju duket e dobishme seksioni i përgjithshëm kushtuar teorisë së këtij lloji të analizës.

Duke vendosur analizën e kërkesave për tërheqje, ju mund të bllokoni kryerjet që përmbajnë paralajmërime, duke krijuar kështu një kufi që kodi i patestuar nuk mund të kalojë.

E gjithë kjo është sigurisht e mirë, por unë do të doja të isha në gjendje t'i shikoja të gjitha paralajmërimet në një vend. Jo vetëm nga analizuesi statik, por edhe nga testet e njësisë ose nga analizuesi dinamik. Ka shërbime dhe shtojca të ndryshme për këtë. PVS-Studio, për shembull, ka plugin për integrim në SonarQube.

2. Integrimi në makinat zhvilluese

Tani është koha për të instaluar dhe konfiguruar analizuesin për përdorim të përditshëm të zhvillimit. Në këtë pikë ju tashmë jeni njohur me shumicën e mënyrave të punës, kështu që kjo mund të quhet pjesa më e lehtë.

Si opsioni më i thjeshtë, zhvilluesit mund të instalojnë vetë analizuesin e nevojshëm. Sidoqoftë, kjo do të marrë shumë kohë dhe do t'i shpërqendrojë ata nga zhvillimi, kështu që ju mund ta automatizoni këtë proces duke përdorur një instalues ​​dhe flamujt e nevojshëm. Për PVS-Studio ka të ndryshme flamuj për instalim të automatizuar. Sidoqoftë, ka gjithmonë menaxherë të paketave, për shembull, Chocolatey (Windows), Homebrew (macOS) ose dhjetëra opsione për Linux.

Pastaj do t'ju duhet të instaloni shtojcat e nevojshme, për shembull për Visual Studio, IDEA, kalorës etj.

3. Përdorimi i përditshëm

Në këtë fazë, është koha për të thënë disa fjalë për mënyrat për të shpejtuar analizuesin gjatë përdorimit të përditshëm. Një analizë e plotë e të gjithë projektit kërkon shumë kohë, por sa shpesh e ndryshojmë kodin në të gjithë projektin menjëherë? Vështirë se ka ndonjë rifaktorim kaq të madh sa të ndikojë menjëherë në të gjithë bazën e kodit. Numri i skedarëve që ndryshohen në një kohë rrallë tejkalon një duzinë, kështu që ka kuptim t'i analizoni ato. Për një situatë të tillë ekziston mënyra e analizës në rritje. Vetëm mos u shqetësoni, ky nuk është një mjet tjetër. Kjo është një mënyrë e veçantë që ju lejon të analizoni vetëm skedarët e ndryshuar dhe varësitë e tyre, dhe kjo ndodh automatikisht pas ndërtimit nëse jeni duke punuar në një IDE me shtojcën e instaluar.

Nëse analizuesi zbulon probleme në kodin e ndryshuar së fundmi, ai do ta raportojë këtë në mënyrë të pavarur. Për shembull, PVS-Studio do t'ju tregojë për këtë duke përdorur një alarm:

Analiza statike - nga hyrja në integrim
Sigurisht, nuk mjafton t'u thuash zhvilluesve të përdorin mjetin. Duhet t'u tregojmë disi se çfarë është dhe si është. Këtu, për shembull, janë artikuj rreth një fillimi të shpejtë për PVS-Studio, por ju mund të gjeni mësime të ngjashme për çdo mjet që preferoni:

Artikuj të tillë ofrojnë të gjithë informacionin e nevojshëm për përdorim të përditshëm dhe nuk marrin shumë kohë. 🙂

Edhe në fazën e njohjes me mjetin, ne shtypëm shumë paralajmërime gjatë një prej lëshimeve të para. Për fat të keq, analizuesit statikë nuk janë të përsosur, kështu që herë pas here japin pozitivë fals. Zakonisht është e lehtë t'i shtypësh ato; për shembull, në shtojcën PVS-Studio për Visual Studio, thjesht duhet të klikosh një buton:

Analiza statike - nga hyrja në integrim
Megjithatë, ju mund të bëni më shumë sesa thjesht t'i shtypni ato. Për shembull, mund të raportoni një problem në mbështetje. Nëse pozitivi i rremë mund të korrigjohet, atëherë në përditësimet e ardhshme mund të vëreni se çdo herë ka gjithnjë e më pak pozitive false specifike për bazën tuaj të kodit.

Pas integrimit

Pra, ne kemi kaluar nëpër të gjitha fazat e integrimit të analizës statike në procesin e zhvillimit. Pavarësisht nga rëndësia e vendosjes së mjeteve të tilla në CI, vendi më i rëndësishëm për t'i ekzekutuar ato është kompjuteri i zhvilluesit. Në fund të fundit, një analizues statik nuk është një gjyqtar që thotë diku larg jush se kodi nuk është i mirë. Përkundrazi, është një asistent që të thotë nëse je i lodhur dhe të kujton nëse ke harruar diçka.

Vërtetë, pa përdorim të rregullt, analiza statike nuk ka gjasa të thjeshtojë ndjeshëm zhvillimin. Në fund të fundit, përfitimi i tij kryesor për një zhvillues nuk qëndron në kërkimin e seksioneve komplekse dhe të diskutueshme të kodit, por në zbulimin e tyre të hershëm. Pajtohu se zbulimi i një problemi pasi modifikimet janë dërguar për testim nuk është vetëm i pakëndshëm, por edhe kërkon shumë kohë. Analiza statike, kur përdoret rregullisht, shikon çdo ndryshim direkt në kompjuterin tuaj dhe raporton vende të dyshimta gjatë punës me kodin.

Dhe nëse ju ose kolegët tuaj ende nuk jeni të sigurt nëse ia vlen të zbatoni analizuesin, atëherë ju sugjeroj që tani të filloni të lexoni artikullin "Arsyet për të futur analizuesin statik të kodit PVS-Studio në procesin e zhvillimitAi trajton shqetësimet tipike të zhvilluesve se analiza statike do t'u marrë kohën e kështu me radhë.

Analiza statike - nga hyrja në integrim

Nëse dëshironi ta ndani këtë artikull me një audiencë anglishtfolëse, ju lutemi përdorni lidhjen e përkthimit: Maxim Zvyagintsev. Analiza statike: Nga fillimi në integrim.

Burimi: www.habr.com

Shto një koment