Analisi estatikoa - Sarreratik integraziora

Kodeen berrikuspen edo arazketa amaigabeaz nekatuta, batzuetan zure bizitza nola erraztu pentsatzen duzu. Eta pixka bat bilatu ondoren, edo ustekabean topatu ondoren, esaldi magikoa ikus dezakezu: "Analisi estatikoa". Ikus dezagun zer den eta nola elkarreragin dezakeen zure proiektuarekin.

Analisi estatikoa - Sarreratik integraziora
Izan ere, edozein hizkuntza modernotan idazten baduzu, orduan, konturatu ere egin gabe, analizatzaile estatiko baten bidez exekutatu duzu. Kontua da edozein konpilatzaile modernok abisu sorta txiki bat bada ere, kodean balizko arazoei buruz ematen duela. Esate baterako, Visual Studio-n C++ kodea konpilatzean honako hau ikus dezakezu:

Analisi estatikoa - Sarreratik integraziora
Irteera honetan ikusten dugu aldagaia izan zen ez zen inoiz erabili funtzioan inon. Beraz, errealitatean, ia beti kode estatikoko analizatzaile soil bat erabiltzen duzu. Hala ere, Coverity, Klocwork edo PVS-Studio bezalako analizatzaile profesionalek ez bezala, konpilatzaileak emandako abisuek arazo sorta txiki bat baino ez dute adierazi.

Ez badakizu ziur zer den analisi estatikoa eta nola inplementatu, irakurri artikulu haumetodologia honi buruz gehiago jakiteko.

Zergatik behar duzu analisi estatikoa?

Hitz gutxitan: azelerazioa eta sinplifikazioa.

Analisi estatikoak kodean arazo ezberdin asko aurki ditzakezu: hizkuntzaren eraikuntza okerren erabileratik hasi eta idazketa akatsetaraino. Adibidez, ordez

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

Kode hau idatzi duzu:

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

Ikus dezakezunez, azken lerroan akats bat dago. Adibidez, PVS-Studio-k abisu hau ematen du:

V537 Demagun 'y' elementuaren erabilera zuzena aztertzea.

Errore honetan eskuak sartu nahi badituzu, saiatu prest egindako adibide bat Compiler Explorer-en: *negar egin*.

Eta ulertzen duzunez, ez da beti posible horrelako kode-atalei berehala erreparatzea, eta horregatik, ordu on batez arazketan eseri zaitezke, dena zergatik funtzionatzen duen hain arraro galdetuz.

Hala ere, argi dago hau akats bat dela. Zer gertatzen da garatzaileak kode optimoa idatziko balu hizkuntzaren sotiltasun bat ahaztu duelako? Edo kodean onartu ere definitu gabeko portaera? Zoritxarrez, horrelako kasuak guztiz ohikoak dira eta denboraren zati handiena akatsak, akats tipikoak edo definitu gabeko portaera dituen kode zehatzak arazketan igarotzen dira.

Egoera horietarako analisi estatikoa agertu zen. Hau garatzaileentzako laguntzaile bat da, kodean hainbat arazo adieraziko dituena eta dokumentazioan azalduko du zergatik ez den beharrezkoa modu honetan idaztea, zertara ekar dezakeen eta nola konpondu. Hona hemen nolakoa izan daitekeen adibide bat: *negar egin*.

Artikuluetan analizatzaileak hauteman ditzakeen akats interesgarriagoak aurki ditzakezu:

Orain, material hau irakurri eta analisi estatikoen onurez sinetsita zaudenez, probatu nahi duzu. Baina nondik hasi? Nola txertatu tresna berri bat zure egungo proiektuan? Eta nola aurkeztu taldea? Galdera hauen erantzunak behean aurkituko dituzu.

Oharra. Analisi estatikoak ez du ordezkatzen edo baliogabetzen kodearen berrikuspenak bezalako gauza erabilgarria. Prozesu hori osatzen du, akatsak, zehaztasun ezak eta diseinu arriskutsuak aldez aurretik antzematen eta zuzentzen laguntzen du. Askoz produktiboagoa da kodeen berrikuspenetan zentratzea algoritmoei eta kodearen argitasunari buruzkoa, okerreko parentesi edo parentesi bat bilatzea baino. konparazio funtzio aspergarriak irakurri.

0. Tresna ezagutzea

Dena probako bertsio batekin hasten da. Izan ere, zaila da garapen-prozesuan zerbait sartzea erabakitzea tresna hori zuzenean ikusi ez baduzu. Hori dela eta, egin behar duzun lehenengo gauza deskargatzea da Froga bertsioa.

Etapa honetan ikasiko duzuna:

  • Zeintzuk dira analizatzailearekin elkarreragiteko moduak;
  • Bateragarria al da analizatzailea zure garapen-ingurunearekin?
  • Zein arazo daude gaur egun zure proiektuetan?

Behar duzun guztia instalatu ondoren, egin behar duzun lehenengo gauza proiektu osoaren azterketa egitea da (Windows, Linux, MacOS). PVS-Studio Visual Studio-n antzeko irudi bat ikusiko duzu (klikatu daiteke):

Analisi estatikoa - Sarreratik integraziora
Kontua da analizatzaile estatikoek abisu kopuru handia ematen dutela normalean kode-oinarri handia duten proiektuetarako. Ez dago guztiak konpondu beharrik, zure proiektua dagoeneko lanean ari baita, eta horrek esan nahi du arazo hauek ez direla kritikoak. Hala ere, zuk abisu interesgarrienak ikus ditzakezu eta zuzendu behar izanez gero. Horretarako, irteera iragazi eta mezu fidagarrienak bakarrik utzi behar dituzu. Visual Studiorako PVS-Studio pluginean, errore-mailen eta kategorien arabera iragazten da. Irteera zehatzena lortzeko, utzi bakarrik High ΠΈ General (klik daitekeena ere):

Analisi estatikoa - Sarreratik integraziora
Izan ere, 178 abisu askoz errazagoak dira ikusteko hainbat mila baino...

Fitxetan Ertaina ΠΈ Behe- Askotan abisu onak daude, baina kategoria horietan zehaztasun (fidagarritasuna) gutxiago duten diagnostikoak sartzen dira. Windows-en lan egiteko abisu-mailei eta aukerei buruzko informazio gehiago hemen aurki daiteke: *negar egin*.

Akats interesgarrienak ongi berrikusi izanak (eta ongi zuzendu izanak) merezi du kendu gainerako abisuak. Beharrezkoa da abisu berriak zaharren artean gal ez daitezen. Gainera, analizatzaile estatiko bat programatzailearen laguntzaile bat da, eta ez akatsen zerrenda. πŸ™‚

1. Automatizazioa

Ezagutu ondoren, pluginak konfiguratzeko eta CI-n integratzeko garaia da. Hau programatzaileak analizatzaile estatikoa erabiltzen hasi aurretik egin behar da. Kontua da programatzaileak analisia gaitzea ahaztu edo ez duela batere egin nahi. Horretarako, guztiaren azken egiaztapena egin behar duzu, probatu gabeko kodea garapen orokorrean sartu ezin dadin.

Etapa honetan ikasiko duzuna:

  • Zer automatizazio aukera eskaintzen ditu tresnak;
  • Bateragarria al da analizatzailea zure muntaketa-sistemarekin?

Dokumentazio perfektua existitzen ez denez, batzuetan idatzi egin behar duzu laguntza. Hau normala da eta pozik lagunduko dizugu. πŸ™‚

Orain joan gaitezen etengabeko integrazio zerbitzuetara (CI). Edozein analizatzaile inplementa daiteke arazo larririk gabe. Horretarako, etapa bereizi bat sortu behar duzu kanalizazioan, normalean eraikitze- eta unitate-proben ondoren kokatuta dagoena. Hau hainbat kontsola utilitate erabiliz egiten da. Adibidez, PVS-Studio-k honako utilitate hauek eskaintzen ditu:

Analisia CI-n integratzeko, hiru gauza egin behar dituzu:

  • Instalatu analizatzailea;
  • Exekutatu azterketa;
  • Emaitzak eman.

Adibidez, PVS-Studio Linux-en (Debian-base) instalatzeko, komando hauek exekutatu behar dituzu:

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

Windows exekutatzen duten sistemetan, ez dago analizatzailea paketeen kudeatzailetik instalatzeko modurik, baina posible da analizatzailea komando-lerrotik zabaltzea:

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

Gehiago irakurri dezakezu PVS-Studio Windows exekutatzen duten sistemetan hedatzeari buruz *Hemen*.

Instalatu ondoren, analisia zuzenean exekutatu behar duzu. Hala ere, hau egitea gomendatzen da konpilazioa eta probak gainditu ondoren. Hau da, analisi estatikoak normalean konpilazioak baino bi aldiz gehiago behar duelako.

Abiarazteko metodoa plataformaren eta proiektuaren ezaugarrien araberakoa denez, C++ (Linux) aukera erakutsiko dut adibide gisa:

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

Lehenengo komandoak analisia egingo du, eta bigarrenak gutun-azalaktxostena testu formatuan bihurtzen du, pantailan bistaratzen du eta 0 ez den itzulera-kode bat itzultzen du abisuak egonez gero. Horrelako mekanismo bat eroso erabil daiteke eraikuntza bat blokeatzeko errore-mezuak daudenean. Hala ere, beti kendu dezakezu bandera -w eta ez blokeatu abisuak dituen muntaia bat.

Oharra. Testu formatua deserosoa da. Adibide gisa besterik ez da ematen. Erreparatu txosten formatu interesgarriago bati - FullHtml. Kodean zehar nabigatzeko aukera ematen du.

CI-n azterketa konfiguratzeari buruzko informazio gehiago irakurri dezakezu " artikuluanPVS-Studio eta Etengabeko Integrazioa" (Windows) edo "Nola konfiguratu PVS-Studio Travis CI-n" (Linux).

Ados, analizatzailea konfigurazio zerbitzarian konfiguratu duzu. Orain, norbaitek probatu gabeko kodea kargatu badu, egiaztapen-faseak huts egingo du eta arazoa detektatu ahal izango duzu, hala ere, hori ez da guztiz erosoa, eraginkorragoa baita proiektua egiaztatzea adarrak batu ondoren ez, baina aurretik, tiratzeko eskaeraren fasean.

Orokorrean, tira-eskaeraren analisia konfiguratzea ez da oso desberdina CI-n azterketa baten ohiko abiaraztetik. Aldatutako fitxategien zerrenda lortzeko beharra izan ezik. Hauek normalean adar arteko desberdintasunak kontsultatuz lor daitezke git erabiliz:

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

Orain fitxategi-zerrenda hau analizatzailera pasa behar duzu sarrera gisa. Adibidez, PVS-Studio-n hau bandera erabiliz inplementatzen da -S:

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

Tira-eskaerak aztertzeari buruzko informazio gehiago aurki dezakezu *Hemen*. Zure CI artikuluan aipatutako zerbitzuen zerrendan ez badago ere, analisi mota honen teoriari eskainitako atal orokorra erabilgarria izango duzu.

Tira-eskaeren analisia konfiguratuz, abisuak dituzten konpromisoak blokeatu ditzakezu, eta, ondorioz, probatu gabeko kodea gainditu ezin duen muga sortuz.

Hau guztia ona da, zalantzarik gabe, baina abisu guztiak leku bakarrean ikusi ahal izatea gustatuko litzaidake. Analizatzaile estatikotik ez ezik, proba unitateetatik edo analizatzaile dinamikotik ere bai. Horretarako hainbat zerbitzu eta plugin daude. PVS-Studio, adibidez, badu SonarQube-n integratzeko plugina.

2. Garatzaileen makinetan integratzea

Orain analizatzailea instalatu eta konfiguratzeko garaia da eguneroko garapenerako erabiltzeko. Puntu honetarako dagoeneko ezagutzen dituzu lan egiteko modu gehienak, beraz, hau dei daiteke zatirik errazena.

Aukerarik errazena denez, garatzaileek beraiek instala dezakete beharrezko analizatzailea. Dena den, honek denbora asko beharko du eta garapenetik aldenduko ditu, beraz, prozesu hau automatiza dezakezu instalatzaile bat eta beharrezko banderak erabiliz. PVS-Studiorako hainbat daude instalazio automatikorako banderak. Hala ere, beti daude paketeen kudeatzaileak, adibidez, Chocolatey (Windows), Homebrew (macOS) edo Linuxerako dozenaka aukera.

Ondoren, beharrezkoak diren pluginak instalatu beharko dituzu, adibidez Visual Studio, IDAE, Rider eta abar.

3. Eguneroko erabilera

Fase honetan, eguneroko erabileran analizagailua bizkortzeko moduei buruz hitz batzuk esateko garaia da. Proiektu osoaren azterketa osoa denbora asko eskatzen du, baina zenbat aldiz aldatzen dugu kodea proiektu osoan zehar aldi berean? Ia ez dago hain handia den refactorizaziorik non berehala eragingo dion kode-oinarri osoa. Aldi berean aldatzen diren fitxategien kopurua oso gutxitan dozena bat gainditzen da, beraz, zentzuzkoa da horiek aztertzea. Halako egoera baterako badago analisi inkremental modua. Ez kezkatu, hau ez da beste tresna bat. Aldatutako fitxategiak eta haien mendekotasunak soilik aztertzeko aukera ematen duen modu berezi bat da, eta hau automatikoki gertatzen da eraiki ondoren plugina instalatuta daukan IDE batean lan egiten baduzu.

Analizatzaileak duela gutxi aldatutako kodean arazoak antzematen baditu, modu independentean jakinaraziko du. Adibidez, PVS-Studio-k alerta baten bidez jakinaraziko dizu honi buruz:

Analisi estatikoa - Sarreratik integraziora
Jakina, garatzaileei tresna erabiltzeko esatea ez da nahikoa. Nolabait esan behar diegu zer den eta nola den. Hona hemen, adibidez, PVS-Studiorako hasiera azkar bati buruzko artikuluak, baina nahiago duzun edozein tresnatarako antzeko tutorialak aurki ditzakezu:

Horrelako artikuluek eguneroko erabilerarako beharrezko informazio guztia eskaintzen dute eta ez dute denbora asko behar. πŸ™‚

Tresna ezagutzeko fasean ere, abisu asko kendu genituen lehen abiarazitako batean. Zoritxarrez, analizatzaile estatikoak ez dira perfektuak, beraz, noizean behin positibo faltsuak ematen dituzte. Normalean erraza da horiek kentzea; adibidez, Visual Studiorako PVS-Studio pluginean botoi bat sakatu besterik ez duzu egin behar:

Analisi estatikoa - Sarreratik integraziora
Hala ere, horiek kendu baino gehiago egin dezakezu. Adibidez, arazoren bat jakinarazi diezaiokezu laguntzari. Positibo faltsua zuzendu badaiteke, etorkizuneko eguneraketetan nabarituko duzu aldi bakoitzean gero eta positibo faltsu gutxiago daudela zure kode-basearen espezifikoak.

Integrazioaren ondoren

Beraz, garapen-prozesuan analisi estatikoa integratzeko fase guztiak igaro ditugu. Tresnak CI-n konfiguratzearen garrantzia izan arren, horiek exekutatzeko lekurik garrantzitsuena garatzailearen ordenagailua da. Azken finean, analizatzaile estatiko bat ez da zuregandik urrun dagoen nonbait kodea ez dela ona esaten duen epaile bat. Aitzitik, nekatuta zauden esaten dizun laguntzailea da eta zerbait ahaztu duzun gogoratzen dizu.

Egia da, ohiko erabilerarik gabe, analisi estatikoak nekez erraztuko du garapena nabarmen. Azken finean, garatzaile batentzako bere onura nagusia ez datza hainbeste kode-atal konplexu eta eztabaidagarriak bilatzean, baizik eta haien detekzio goiztiarran. Onartu aldaketak probara bidali ondoren arazo bat aurkitzea ez dela desatsegina bakarrik, baizik eta denbora asko eskatzen duela. Analisi estatikoa, aldizka erabiltzen denean, aldaketa guztiak zuzenean zure ordenagailuan aztertzen ditu eta leku susmagarriak jakinaraziko ditu kodean lan egiten duzun bitartean.

Eta zuk edo zure lankideek oraindik ez bazaudete ziur analizatzailea ezartzea merezi duen ala ez, orduan artikulua irakurtzen hastea gomendatzen dizut "PVS-Studio kode analizatzaile estatikoa garapen-prozesuan sartzeko arrazoiak". Garatzaileen ohiko kezkei erantzuten die analisi estatikoak denbora hartuko duela eta abar.

Analisi estatikoa - Sarreratik integraziora

Artikulu hau ingelesez hitz egiten duen publiko batekin partekatu nahi baduzu, mesedez erabili itzulpen-esteka: Maxim Zvyagintsev. Analisi estatikoa: Hasieratik Integraziora.

Iturria: www.habr.com

Gehitu iruzkin berria