Statuti nga rishikimi i pafund i kodit ose debogimi, ndonjëherë mendon si ta thjeshtëzosh jetën tënde. Duke bërë pak kërkime, ose duke u përplasur rastësisht, mund të shikosh frazën magjike: "Analiza Statike". Le të shohim se çfarë është kjo dhe si mund të ndërveprojë me projektin tuaj.

Në të vërtetë, nëse shkruani në ndonjë gjuhë moderne, madje pa e ditur, ju e keni kaluar atë përmes analizuesit statik. Çështja është se çdo kompilator modern ofron, edhe pse në një mënyrë të vogël, një grup paralajmërimesh për probleme të potenciale në kod. Për shembull, kur kompiloni kodin C++ në Visual Studio, mund të shihni sa vijon:

Në këtë rezultat, ne shohim se variabli var nuk është përdorur askund në funksion. Pra, në të vërtetë, ju keni përdorur pothuajse gjithmonë një analizues statik të thjeshtë të kodit. Megjithatë, ndryshe nga analizuesit profesionistë si Coverity, Klocwork ose PVS-Studio, paralajmërimet e ofruara nga kompilatori mund të tregojnë vetëm një spektrin të vogël të problemeve.
Nëse nuk e dini me siguri se çfarë është analiza statike dhe si ta implementoni, , për të njohur më në detaje këtë metodologji.
Pse është e nevojshme analiza statike?
Me fjalë të thjeshta: shpejtim dhe thjeshtim.
Analiza statike lejon gjetjen e një sërë problemesh në kod: duke filluar nga përdorimi i gabuar i konstruksioneve të gjuhës, deri te gabimet e shtypjes. Për shembull, në vend që
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ç e shihni, në rreshtin e fundit ka një gabim shtypi. Për shembull, PVS-Studio jep paralajmërimin e mëposhtëm:
Mundohuni të rishikoni saktësinë e përdorimit të artikujt 'y'.
Nëse dëshironi ta testoni këtë gabim vetë, provoni shembullin e gatshëm në Compiler Explorer: **.
Dhe siç e kuptoni, nuk është gjithmonë e mundur të kushtoni vëmendje ndaj këtyre pjesëve të kodit menjëherë dhe për këtë arsye mund të kaloni një kohë të gjatë duke deboguar, duke u pyetur pse gjithçka funksionon kaq çuditshëm.
Megjithatë, kjo është një gabim i qartë. E nëse zhvilluesi shkroi kodin jo optimal për shkak se harroi ndonjë hollësi të gjuhës? Ose ndoshta lejohej një ? К сожалению, подобные случаи совершенно обыденны и львиная часть времени тратится на то, чтобы отладить специфично работающий код, который содержит опечатки, типичные ошибки или undefined behavior.
Pikërisht për këto situata u krijua analiza statike. Ky është një ndihmës për zhvilluesin, i cili do t'i tregojë atij për probleme të ndryshme në kod dhe do të shpjegojë në dokumentacion pse nuk duhet të shkruhet ashtu, çfarë mund të sjellë dhe si ta rregullojmë. Ja një shembull se si mund të duket:*.
Më shumë gabime interesante që analizatori mund të zbulojë, mund t'i gjeni në artikujt:
Tani, pasi keni lexuar këtë material dhe keni siguruar përfitimet e analizës statike, mund të dëshironi ta provoni atë në praktikë. Por nga të filloni? Si ta integroni një mjet të ri në projektin aktual? Dhe si ta njihni ekipin me të? Në këto pyetje do të gjeni përgjigjet më poshtë.
Shënim. Analiza statike nuk zëvendëson dhe nuk anashkalon një gjë kaq të dobishme siç janë rishikimet e kodit. Ajo e plotëson këtë proces, duke ndihmuar të vërehen dhe rregullohen gabimet, pasaktësitë, dhe konstrukcionet e rrezikshme përpara. Është shumë më produktive të përqendroheni në algoritmet dhe qartësinë e kodit gjatë rishikimeve të kodit, jo në gjetjen e një kllapie të vendosur gabimisht ose .
0. Njohja me mjetin
Gjithçka fillon me një version provues. Në të vërtetë, është e vështirë të vendosësh të implementosh diçka në procesin e zhvillimit, nëse nuk e ke parë ndonjëherë mjetin live. Prandaj, hapi i parë është të shkarkosh .
Çfarë do të mësoni në këtë fazë:
- Cilat janë mënyrat e ndërveprimit me analizatorin;
- A është analizatori i pajtueshëm me mjedisin tuaj të zhvillimit;
- Cilat probleme ka tani në projektet tuaja.
Pasi të keni instaluar gjithçka që ju nevojitet, hapi i parë është të filloni analizën e të gjithë projektit (, , ). Në rastin e PVS-Studio në Visual Studio do të shihni një pamje të tillë (klikueshme):

E vërteta është se zakonisht për projektet me një bazë të madhe kodesh, analizatorët statikë japin një numër të madh paralajmërimesh. Nuk është e domosdoshme t'i rregulloni të gjitha, pasi projekti juaj tashmë funksionon, pra këto probleme nuk janë kritike. Sidoqoftë, ju dhe t'i korrigjoni ata kur të jetë e nevojshme. Për këtë është e nevojshme të filtroni daljen dhe të lini vetëm mesazhet më të besueshme. Në plugin-in PVS-Studio për Visual Studio, kjo bëhet përmes filtrimit sipas niveleve dhe kategorive të gabimeve. Për daljen më të saktë, lini aktive vetëm E Lartë dhe General (po ashtu klikueshme):

Vërtet, të shikosh 178 paralajmërime është ndjeshëm më e lehtë sesa disa mijëra…
Në seksionet Medium dhe I ulët shpesh hasen paralajmërime të mira, megjithatë në këto kategori regjistrohen ato diagnostikime, të cilat kanë saktësi (besueshmëri) më të ulët. Më shumë për nivelet e paralajmërimeve dhe opsionet e punës nën Windows mund të shikoni këtu: **.
Pas shqyrtimit të gabimeve më interesante (dhe pas korrigjimit të tyre) është e rëndësishme . Kjo është e nevojshme për të parandaluar që paralajmërimet e reja të humbasin në mesin e atyre të vjetra. Për më tepër, analisti statik është një ndihmës për programuesin, dhe jo një listë për defektet. 🙂
1. Automatizimi
Pas njohjes, vjen koha për konfigurimin e plugineve dhe integrimin në CI. Kjo duhet bërë para se programuesit të fillojnë të përdorin analistin statik. Kjo është sepse programuesi mund të harrojë të aktivizojë analizën ose mund të mos dëshirojë fare. Për këtë, duhet të bëhet një kontroll përfundimtar i gjithçkaje, në mënyrë që kodi i pa kontrolluar të mos mund të hyjë në degën e zhvillimit të përbashkët.
Çfarë do të mësoni në këtë fazë:
- Cilat opsione automatizimi ofron mjeti;
- A është analisti i përputhshëm me sistemin tuaj të ndërtimit.
Duke marrë parasysh se dokumentacioni ideal nuk ekziston, ndonjëherë duhet të shkruani në . Kjo është normale dhe ne jemi të gatshëm t'ju ndihmojmë. 🙂
Dhe tani le të kalojmë në shërbimet e integrimit të vazhdueshëm (CI). Çdo analist mund të integrohet në to pa ndonjë problem të rëndësishëm. Për këtë është e nevojshme të krijoni një fazë të veçantë në pipeline, e cila zakonisht ndodhet pas ndërtimit dhe testeve të njësive. Kjo bëhet me ndihmën e različit utiliteteve të konsolës. Për shembull, PVS-Studio ofron këto utilitete:
- (analizë e zgjidhjeve, projekteve C#, C++ në Windows)
- (monitorimi i kompilimit)
- (analizë e projekteve C++ në Linux / macOS)
- (analizë e zgjidhjeve, projekteve C# në Linux / macOS)
- (analizë e projekteve Java)
- (konvertues i skedarëve të raportit)
Për integrimin e analizës në CI, duhet të bëni tre gjëra:
- Të instaloni analistin;
- Të aktivizoni analizën;
- Dërgoni rezultatet.
Për shembull, për të instaluar PVS-Studio në Linux (baze Debian) duhet të kryeni 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-studioNë sistemet nën menaxhimin e Windows nuk ka mundësi të instaloni analistin nga menaxheri i paketave, megjithatë ka mundësi të vendosni analistin nga linja e komandës:
PVS-Studio_setup.exe /verysilent /suppressmsgboxes
/norestart /nocloseapplicationsMë shumë rreth vendosjes së PVS-Studio në sistemet nën menaxhimin e Windows mund të lexoni **.
Pas instalimit, duhet të nisni në mënyrë të drejtpërdrejtë analizën. Megjithatë, kjo rekomandohet vetëm pasi të ketë përfunduar kompaktimi dhe testet. Kjo lidhet me faktin se analiza statike zakonisht kërkon dy herë më shumë kohë se sa kompaktimi.
Duke pasur parasysh se mënyra e nisjes varet nga platforma dhe karakteristikat e projektit, do të tregoj një variant për C++ (Linux) si shembull:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -wKomanda e parë do të kryejë analizën, ndërsa e dyta raportin në format tekstual, do ta shfaqë atë në ekran dhe do të kthejë një kod kthimi të ndryshëm nga 0 në rast se ka paralajmërime. Një mekanizëm i tillë është i dobishëm për të bllokuar ndërtimin në rast se ka mesazhe gabimesh. Megjithatë, ju gjithmonë mund të hiqni flamurin -w dhe të mos bllokoni ndërtimin që përmban paralajmërime.
Shënim. Formati tekstual është i padëshirueshëm. Ai jepet vetëm si shembull. Vini re formati më interesant të raportit — FullHtml. Ai lejon navigimin në kod.
Më shumë rreth konfigurimit të analizës në CI mund të lexoni në artikullin "" (Windows) ose "" (Linux).
Mirë, keni konfiguruar funksionimin e analistit në serverin e ndërtimit. Tani, nëse dikush ka ngarkuar kod të pa verifikuar, do të bjerë faza e kontrollit, dhe ju do të mund të zbulojni problemin, megjithatë kjo nuk është shumë e përshtatshme, pasi është më efikase të kontrolloni projektin jo pas përzierjes së degëve, por para saj, në fazën e kërkesës së tërheqjes.
Në përgjithësi, konfigurimi i analizës së kërkesës së tërheqjes nuk ndryshon shumë nga ajo e nisjes normale të analizës në CI, përveç nevojës për të marrë listën e skedareve të ndryshuara. Zakonisht ato mund të merren duke kërkuar diferencën midis degëve duke përdorur git:
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.listTani tani është e nevojshme të kaloni në analizator këtë listë fichiers. Për shembuj, në PVS-Studio kjo është realizuar me anë të një flagu -S:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.listMë shumë për analizën e kërkesave pull mund të mësoni **. Edhe nëse CI juaj nuk është në listën e shërbimeve të përmendura në artikull, do t'ju jetë e dobishme seksioni i përgjithshëm, i dedikuar teorisë së këtij lloji analize.
Duke konfiguruar analizën e kërkesave pull, do të mund të bllokoni angazhimet që përmbajnë paralajmërime, duke krijuar kështu një kufi, të cilin kodi i papërfunduar nuk mund ta kalojë.
Kjo është padyshim e mirë, megjithatë do të dëshironim të kishim mundësinë të shihnim të gjitha paralajmërimet në një vend. Jo vetëm nga analizatori statik, por edhe nga testet njësi ose nga analizatori dinamik. Për këtë, ekzistojnë shërbime dhe plugina të ndryshme. PVS-Studio, për shembuj, ka .
2. Integrimi në makinat e zhvilluesve
Tani është koha për të instaluar dhe konfiguruar analizatorin për përdorim të përditshëm në zhvillim. Në këtë pikë, ju keni njohur pjesën më të madhe të mënyrave të punës, prandaj kjo mund të quhet pjesa më e lehtë.
Si një variant më të thjeshtë – zhvilluesit vetë mund të instalojnë analizatorin e nevojshëm. Megjithatë, kjo do të marrë shumë kohë dhe do t'i divertojë ata nga zhvillimi, prandaj mund të automatizoni këtë proces duke përdorur një installer dhe flag të nevojshëm. Për PVS-Studio ekzistojnë . Megjithatë, gjithmonë ekzistojnë menaxherë paketash, për shembuj, Chocolatey (Windows), Homebrew (macOS) ose dhjetëra mundësi për Linux.
Më pas do të jetë e nevojshme të instaloni plugina të nevojshëm, për shembull, për , , etc.
3. Përdorimi i përditshëm
Në këtë fazë, është koha të themi disa fjalë për mënyrat e përshpejtimit të punës së analizatorit gjatë përdorimit të përditshëm. Një analizë e plotë e gjithë projektit zë shumë kohë, megjithatë sa shpesh ne e ndryshojmë kodin njëherazi në të gjithë projektin? Padyshim, nuk ka një refaktorizim kaq të gjerë që ndikon menjëherë të gjithë bazën e kodit. Numri i dosjeve që ndryshohen njëherazi rrallë kalon dhjetë, prandaj ka kuptim t'i analizosh ato. Për një situatë të tillë ekziston . Vetëm mos u shqetësoni, nuk është një tjetër mjet. Kjo është një modalitet special që lejon analizimin e skedarëve të ndryshuar dhe të varësive të tyre, dhe kjo ndodh automatikisht pas ndërtimit, nëse po punoni në një IDE me plugin të instaluar.
Në rastin që analizatori të zbulojë probleme në kodin e sapo ndryshuar, ai do t'ju informojë vetë. Për shembull, PVS-Studio do t'ju njoftojë për këtë me një alarm:

Sigurisht, nuk mjafton të thuash zhvilluesve të përdorin mjetin. Duhet të gjejmë një mënyrë për t'u treguar se çfarë është dhe si funksionon. Ja, për shembull, artikuj për fillimin e shpejtë me PVS-Studio, megjithatë mund të gjeni tutoriale të ngjashme për çdo mjet që preferoni:
Artikuj të tillë ofrojnë gjithçka të nevojshme për përdorim të përditshëm dhe nuk marrë shumë kohë. 🙂
Edhe në fazën e njohjes me mjetin ne e kemi përmbushur shumë paralajmërime gjatë një prej nisteve të para. Fatkeqësisht, analizatorët statikë nuk janë perfekt, prandaj ndonjëherë japin alarme false. Shtypja e tyre është zakonisht e lehtë, për shembull, në pluginin PVS-Studio për Visual Studio mjafton të shtypni një buton:

Megjithatë, ju mund të mos i shtypni ata vetëm. Për shembull, mund të informoni mbështetje për praninë e problemeve. Nëse të gjitha alarmet false mund të rregullohen, atëherë në përditësimet e ardhshme mund të vini re se çdo herë po bëhet gjithnjë e më pak e zakonshme që alarmeret false për bazën tuaj të kodit.
Pasi të integrohet
Ja ku ishim, kaluam të gjitha fazat e integrimit të analizës statike në procesin e zhvillimit. Pavarësisht rëndësisë së konfigurimit të mjeteve të tilla në CI, vendi më i rëndësishëm për të nisur është pikërisht kompjuteri i zhvilluesit. Sepse analiza statike nuk është një gjykatës që thotë diku larg jush se kodi nuk është i përshtatshëm. Përkundrazi, është një ndihmës që ju tregon, nëse jeni të lodhur dhe ju kujton, nëse keni harruar diçka.
E vërteta është se pa përdorimin e rregullt, analiza statike nuk do ta thjeshtojë ndjeshëm zhvillimin. Në fakt, përfitimi më i madh për zhvilluesin qëndron jo vetëm në gjetjen e segmenteve të komplikuara dhe kontroverse të kodit, por gjithashtu në zbDiscovery e hershme të tyre. Pajtohuni se të shkosh në testim për të zbuluar një problem është jo vetëm e pakëndshme, por edhe shumë e gjatë. Ndërsa, analiza statike, me përdorim të rregullt, shqyrton çdo ndryshim direkt në kompjuterin tuaj dhe raporton për vendet e dyshimta gjatë punës mbi kodin.
Dhe nëse ju ose kolegët tuaj ende nuk jeni të sigurt nëse duhet të implementoni një analizator, ju propozoj tani të kaloni në leximin e artikullit "". Në të, shqyrtohen shqetësimet tipike të zhvilluesve që besojnë se analiza statike do t'ua heqë kohën dhe kështu me radhë.
Nëse dëshironi të ndani këtë artikull me audiencën anglisht-folëse, ju lutem përdorni lidhjen për përkthimin: Maxim Zvyagintsev. .
Burimi: habr.com
