Fatige ak revizyon kòd kontinuèl oswa debogaj, pafwa ou panse sou ki jan yo senplifye lavi ou. Epi apre rechèch yon ti kras, oswa pa aksidantèlman bite sou li, ou ka wè fraz majik la: "Analiz estatik". Ann wè ki sa li ye ak ki jan li ka kominike avèk pwojè ou a.

An reyalite, si ou ekri nan nenpòt lang modèn, lè sa a, san yo pa menm reyalize li, ou pase li nan yon analizè estatik. Reyalite a se ke nenpòt konpilateur modèn bay, byenke yon ti, seri avètisman sou pwoblèm potansyèl nan kòd la. Pou egzanp, lè w ap konpile kòd C++ nan Visual Studio ou ta ka wè sa ki annapre yo:

Nan pwodiksyon sa a nou wè ke varyab la te pa te janm itilize nenpòt kote nan fonksyon an. Se konsa, an reyalite, ou prèske toujou itilize yon senp analizè kòd estatik. Sepandan, kontrèman ak analizè pwofesyonèl tankou Coverity, Klocwork oswa PVS-Studio, avètisman yo bay pa du a ka sèlman endike yon ti seri pwoblèm.
Si ou pa konnen pou asire w ki sa analiz estatik se ak ki jan yo aplike li, pou aprann plis sou metodoloji sa a.
Poukisa ou bezwen analiz estatik?
Nan yon Nutshell: akselerasyon ak senplifikasyon.
Analiz estatik pèmèt ou jwenn yon anpil nan pwoblèm diferan nan kòd la: soti nan itilizasyon kòrèk nan konstriksyon lang nan erè tip. Pou egzanp, olye pou yo
auto x = obj.x;
auto y = obj.y;
auto z = obj.z;Ou te ekri kòd sa a:
auto x = obj.x;
auto y = obj.y;
auto z = obj.x;Kòm ou ka wè, gen yon typo nan dènye liy lan. Pou egzanp, PVS-Studio bay avètisman sa a:
Konsidere revize kòrèkteman itilizasyon atik 'y'.
Si ou vle pike men ou nan erè sa a, eseye yon egzanp pare-fè nan Compiler Explorer: **.
Ak jan ou konprann, li pa toujou posib yo peye atansyon sou seksyon sa yo nan kòd touswit, ak poutèt sa, ou ka chita debogaj pou yon bon èdtan, mande poukisa tout bagay travay konsa etranj.
Sepandan, sa a se klèman yon erè. E si pwomotè a te ekri kòd ki pa pi bon paske li te bliye kèk sibtilite nan lang lan? Oswa menm pèmèt li nan kòd la ? Malerezman, ka sa yo konplètman komen ak pati lyon an nan tan pase debogaj espesyalman kòd k ap travay ki gen erè tip, erè tipik oswa konpòtman endefini.
Se pou sitiyasyon sa yo analiz estatik te parèt. Sa a se yon asistan pou pwomotè a ki pral lonje dwèt sou divès pwoblèm nan kòd la epi eksplike nan dokiman an poukisa li pa nesesè yo ekri fason sa a, ki sa li ka mennen nan ak ki jan yo ranje li. Men yon egzanp sou sa li ta ka sanble: **.
Ou ka jwenn plis erè enteresan ke analizè a ka detekte nan atik yo:
Kounye a ke ou te li materyèl sa a epi yo konvenki nan benefis ki genyen nan analiz estatik, ou ta ka vle eseye li soti. Men, ki kote yo kòmanse? Ki jan yo entegre yon nouvo zouti nan pwojè aktyèl ou a? Ak ki jan yo prezante ekip la bay li? W ap jwenn repons pou kesyon sa yo anba a.
Note. Analiz estatik pa ranplase oswa anile yon bagay itil tankou revizyon kòd. Li konplete pwosesis sa a, li ede remake epi korije fot, erè, ak desen danjere davans. Li pi pwodiktif pou konsantre sou revizyon kòd sou algoritm ak klè kòd, olye ke chèche yon parantèz mal plase oswa .
0. Aprann konnen zouti a
Li tout kòmanse ak yon vèsyon jijman. Vreman vre, li difisil pou deside prezante yon bagay nan pwosesis devlopman si ou pa janm wè zouti an ap viv anvan. Se poutèt sa, premye bagay ou ta dwe fè se telechaje .
Ki sa ou pral aprann nan etap sa a:
- Ki fason yo kominike avèk analizè a;
- Èske analizè a konpatib ak anviwònman devlopman ou a?
- Ki pwoblèm ki genyen kounye a nan pwojè ou yo?
Apre ou fin enstale tout sa ou bezwen, premye bagay ou ta dwe fè se fè yon analiz de tout pwojè a (, , ). Nan ka PVS-Studio nan Visual Studio ou pral wè yon foto ki sanble (klike sou):

Reyalite a se ke analizè estatik anjeneral bay yon gwo kantite avètisman pou pwojè ki gen yon baz kòd gwo. Pa gen okenn nesesite pou ranje yo tout, depi pwojè ou a deja ap travay, ki vle di pwoblèm sa yo pa kritik. Sepandan, ou menm epi korije yo si sa nesesè. Pou fè sa, ou bezwen filtre pwodiksyon an epi kite sèlman mesaj ki pi serye. Nan Plugin PVS-Studio pou Visual Studio, sa a se fè pa filtraj pa nivo erè ak kategori. Pou pwodiksyon ki pi egzak, kite sèlman segondè и jeneral (klike tou):

Vreman vre, 178 avètisman yo pi fasil pou wè pase plizyè milye...
Nan onglet mwayen и ba Souvan ou jwenn bon avètisman, men kategori sa yo gen ladan yo dyagnostik ki gen mwens presizyon (fyab). Aprann plis bagay sou nivo avètisman yo ak opsyon pou travay anba Windows Ou ka wè l isit la: **.
Èske w gen siksè revize erè ki pi enteresan yo (ak siksè korije yo) se yon valè . Sa nesesè pou nouvo avètisman yo pa pèdi nan mitan ansyen yo. Anplis de sa, yon analizè estatik se yon asistan pou pwogramè a, epi li pa yon lis pinèz. 🙂
1. Otomatik
Apre ou fin fè konesans, li lè yo konfigirasyon grefon ak entegre nan CI. Sa a dwe fè anvan pwogramasyon kòmanse itilize analizè estatik la. Reyalite a se ke pwogramè a ka bliye pèmèt analiz oswa pa vle fè li nan tout. Pou fè sa, ou bezwen fè kèk tcheke final tout bagay pou kòd ki pa teste pa ka antre nan branch devlopman jeneral la.
Ki sa ou pral aprann nan etap sa a:
- Ki opsyon automatisation zouti a bay;
- Èske analizè a konpatib ak sistèm asanble ou a?
Depi dokimantasyon pafè pa egziste, pafwa ou oblije ekri . Sa a nòmal e nou kontan ede w. 🙂
Koulye a, ann ale nan sèvis entegrasyon kontinyèl (CI). Nenpòt analyser ka aplike nan yo san okenn pwoblèm grav. Pou fè sa, ou bezwen kreye yon etap separe nan tiyo a, ki anjeneral sitiye apre tès yo bati ak inite. Sa a se fè lè l sèvi avèk divès kalite sèvis piblik konsole. Pou egzanp, PVS-Studio bay sèvis piblik sa yo:
- (analiz solisyon, pwojè C#, C++ sou Windows)
- (siveyans konpilasyon)
- (analiz pwojè C++ sou Linux / macOS)
- (analiz solisyon yo, pwojè C# sou Linux / macOS)
- (analiz pwojè Java)
- (rapò konvètisè dosye)
Pou entegre analiz nan CI, ou bezwen fè twa bagay:
- Enstale analizè a;
- Kouri analiz;
- Bay rezilta yo.
Pa egzanp, pou enstale PVS-Studio sou Linux (Debian-base) ou bezwen egzekite kòmandman sa yo:
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-studioNan sistèm ki anba kontwòl Windows Pa gen okenn opsyon pou enstale analizè a nan jesyonè pake a, men li posib pou deplwaye analizè a nan liy kòmand lan:
PVS-Studio_setup.exe /verysilent /suppressmsgboxes
/norestart /nocloseapplicationsAprann plis bagay sou deplwaman PVS-Studio sou sistèm k ap fonksyone Windows ou ka li **.
Apre enstalasyon, ou bezwen kouri analiz la dirèkteman. Sepandan, li rekòmande pou fè sa sèlman apre konpilasyon ak tès yo te pase. Sa a se paske analiz estatik anjeneral pran de fwa osi lontan ke konpilasyon.
Piske metòd lansman an depann de platfòm nan ak karakteristik pwojè a, m ap montre opsyon pou C++ (Linux) kòm yon egzanp:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -wPremye kòmandman an pral fè analiz la, epi dezyèm lan konvèti rapò a nan fòma tèks, montre li sou ekran an epi retounen yon kòd retounen lòt pase 0 si gen avètisman. Yon mekanis tankou sa a ka fasilman itilize pou bloke yon bati lè gen mesaj erè. Sepandan, ou ka toujou retire drapo a -w epi pa bloke yon asanble ki gen avètisman.
Note. Fòma tèks la pa konvenyan. Li bay tou senpleman kòm yon egzanp. Peye atansyon sou yon fòma rapò ki pi enteresan - FullHtml. Li pèmèt ou navige nan kòd la.
Ou ka li plis sou konfigirasyon analiz sou CI nan atik la ""(Windows) oubyen ""(Linux).
Oke, ou te konfigirasyon analizè a sou sèvè a bati. Koulye a, si yon moun telechaje kòd ki pa teste, etap verifikasyon an ap echwe, epi ou pral kapab detekte pwoblèm nan, sepandan, sa a se pa totalman pratik, depi li pi efikas yo tcheke pwojè a pa apre branch yo te fizyone, men anvan li, nan etap demann rale A.
An jeneral, mete kanpe yon analiz demann rale pa anpil diferan de lansman abityèl yon analiz sou CI. Eksepte pou nesesite pou jwenn yon lis dosye chanje. Anjeneral yo ka jwenn sa yo lè w mande diferans ki genyen ant branch lè l sèvi avèk git:
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.listKoulye a, ou bezwen pase lis sa a nan dosye analiz la kòm opinyon. Pou egzanp, nan PVS-Studio sa a se aplike lè l sèvi avèk drapo a -S:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.listOu ka jwenn plis enfòmasyon sou analize demann rale **. Menm si CI ou a pa sou lis sèvis yo mansyone nan atik la, w ap jwenn seksyon jeneral ki konsakre nan teyori kalite analiz sa a itil.
Lè w mete analiz de demann rale, ou ka bloke komite ki gen avètisman, kidonk kreye yon fwontyè kòd ki pa teste pa ka travèse.
Sa a se sètènman bon, men mwen ta renmen kapab wè tout avètisman yo nan yon sèl kote. Se pa sèlman soti nan analizè a estatik, men tou, nan tès inite oswa nan analiz la dinamik. Gen divès kalite sèvis ak grefon pou sa. PVS-Studio, pou egzanp, gen .
2. Entegrasyon sou machin devlopè
Koulye a, li lè yo enstale ak konfigirasyon analizè a pou itilizasyon devlopman chak jou. Nan pwen sa a ou te deja vin abitye ak pi fò nan fason yo travay, kidonk sa a ka rele pati ki pi fasil la.
Kòm opsyon ki pi senp, devlopè yo ka enstale analizè ki nesesè yo tèt yo. Sepandan, sa a pral pran anpil tan ak distrè yo nan devlopman, kidonk, ou ka otomatize pwosesis sa a lè l sèvi avèk yon enstale ak drapo ki nesesè yo. Pou PVS-Studio gen divès kalite Sepandan, toujou gen responsab pou jesyon pakè, pa egzanp, Chocolatey (Windows), Bwason Lakay (macOS) oubyen plizyè douzèn opsyon pou Linux.
Lè sa a, w ap bezwen enstale grefon ki nesesè yo, pou egzanp pou , , elatriye.
3. Itilizasyon chak jou
Nan etap sa a, li lè yo di kèk mo sou fason pou pi vit analizè a pandan itilizasyon chak jou. Yon analiz konplè sou tout pwojè a pran anpil tan, men konbyen fwa nou chanje kòd nan tout pwojè a nan yon fwa? Gen diman nenpòt refactoring ki tèlman gwo ke li pral imedyatman afekte baz la kòd tout antye. Nimewo a nan dosye yo te chanje nan yon moman raman depase yon douzèn, kidonk li fè sans analize yo. Pou yon sitiyasyon konsa genyen . Jis pa bezwen pè, sa a se pa yon lòt zouti. Sa a se yon mòd espesyal ki pèmèt ou analize sèlman dosye chanje ak depandans yo, epi sa rive otomatikman apre bati si w ap travay nan yon IDE ak plugin a enstale.
Si analizè a detekte pwoblèm nan kòd ki fèk chanje a, li pral rapòte sa poukont li. Pa egzanp, PVS-Studio ap fè w konnen sa lè l sèvi avèk yon alèt:

Natirèlman, di devlopè yo sèvi ak zouti a pa ase. Nou bezwen yon jan kanmenm di yo sa li ye ak ki jan li ye. Men, pou egzanp, atik sou yon demaraj rapid pou PVS-Studio, men ou ka jwenn leson patikilye menm jan an pou nenpòt zouti ou prefere:
Atik sa yo bay tout enfòmasyon ki nesesè pou itilize chak jou epi yo pa pran anpil tan. 🙂
Menm nan etap nan vin konnen zouti a, nou siprime yon anpil nan avètisman pandan youn nan premye lanse yo. Malerezman, analizè estatik yo pa pafè, kidonk de tan zan tan yo bay fo pozitif. Anjeneral li fasil pou siprime yo, pou egzanp, nan Plugin PVS-Studio pou Visual Studio ou jis bezwen klike sou yon bouton:

Sepandan, ou ka fè plis pase jis siprime yo. Pou egzanp, ou ka rapòte yon pwoblèm bay sipò. Si fo pozitif la ka korije, Lè sa a, nan pwochen mizajou ou ka remake ke chak fwa gen mwens ak mwens fo pozitif espesifik nan kodbaz ou a.
Apre entegrasyon
Se konsa, nou te ale nan tout etap yo nan entegre analiz estatik nan pwosesis devlopman an. Malgre enpòtans ki genyen nan mete kanpe zouti sa yo sou CI, kote ki pi enpòtan yo kouri yo se òdinatè pwomotè a. Apre yo tout, yon analizeur estatik se pa yon jij ki di yon kote byen lwen ou ke kòd la pa bon. Okontrè, se yon asistan ki di w si w fatige e ki raple w si w bliye yon bagay.
Vrè, san yo pa itilize regilye, analiz estatik se fasil pou senplifye devlopman anpil. Apre yo tout, benefis prensipal li yo pou yon pwomotè manti pa tèlman nan rechèch pou seksyon konplèks ak kontwovèsyal nan kòd, men nan deteksyon bonè yo. Dakò ke dekouvri yon pwoblèm apre yo fin voye modifikasyon yo pou tès la pa sèlman dezagreyab, men tou, li pran anpil tan. Analiz estatik, lè yo itilize regilyèman, gade chak chanjman dirèkteman sou òdinatè w lan epi rapòte kote ki sispèk pandan y ap travay sou kòd la.
Men, si oumenm oswa kòlèg ou yo toujou pa sèten si li vo aplike analizè a, Lè sa a, mwen sijere ou kounye a kòmanse li atik la "". Li adrese enkyetid tipik nan devlopè ki analiz estatik pral pran tan yo ak sou sa.
Si ou vle pataje atik sa a ak yon odyans ki pale angle, tanpri itilize lyen tradiksyon an: Maxim Zvyagintsev. .
Sous: www.habr.com
