Ki jan yo aplike yon analizè kòd estatik nan yon pwojè eritaj san yo pa demotive ekip la

Ki jan yo aplike yon analizè kòd estatik nan yon pwojè eritaj san yo pa demotive ekip la
Li fasil pou eseye yon analizè kòd estatik. Men, aplike li, espesyalman nan devlopman nan yon gwo pwojè fin vye granmoun, mande pou konpetans. Si fè mal, analizè a ka ajoute travay, ralanti devlopman, ak demotive ekip la. Ann pale yon ti tan sou fason pou byen apwoche entegrasyon analiz estatik nan pwosesis devlopman epi kòmanse sèvi ak li kòm yon pati nan CI/CD.

Entwodiksyon

Dènyèman, yo te atire atansyon mwen sou piblikasyon an "Kòmanse ak analiz estatik san yo pa akablan ekip la". Sou yon bò, sa a se yon bon atik ki vo fè konesans ak. Nan lòt men an, li sanble ke li toujou pa bay yon repons konplè sou kòman yo san doulè aplike analiz estatik nan yon pwojè ki gen anpil. nan kòd eritaj Atik la di ke Ou ka aksepte dèt teknik ak travay sèlman sou nouvo kòd, men pa gen okenn repons a sa yo dwe fè ak dèt teknik sa a pita.

Ekip PVS-Studio nou an ofri opinyon li sou sijè sa a. Ann gade nan ki jan pwoblèm nan nan aplikasyon yon analizè kòd estatik rive an plas an premye, ki jan yo simonte pwoblèm sa a, ak ki jan yo san doulè piti piti elimine dèt teknik.

Pwoblèm

Anjeneral li pa difisil pou lanse ak wè ki jan yon analizè estatik travay [1]. Ou ka wè erè enteresan oswa menm frajil frajilite potansyèl nan kòd la. Ou ka menm ranje yon bagay, men Lè sa a, anpil pwogramè bay moute.

Tout analizè estatik pwodui fo pozitif. Sa a se yon karakteristik nan metodoloji analiz kòd estatik la, e pa gen anyen ki ka fè sou li. Nan ka jeneral la, sa a se yon pwoblèm ki pa ka rezoud, jan te konfime pa teyorèm Rice a [2]. Algoritm aprantisaj machin yo pap ede tou [3]. Menm si yon moun pa ka toujou di si kòd sa a oswa sa a mal, Lè sa a, ou pa ta dwe atann sa a nan pwogram nan :).

Fo pozitif yo pa yon pwoblèm si analizè estatik la deja konfigirasyon:

  • Andikape seri règ ki pa enpòtan;
  • Gen kèk dyagnostik ki pa enpòtan yo te enfim;
  • Si nou ap pale de C oswa C++, Lè sa a, makro yo make moute ki gen ladan konstriksyon espesifik ki lakòz avètisman initil parèt nan chak kote kote makro sa yo yo itilize;
  • Fonksyon pwòp yo make ki fè aksyon ki sanble ak fonksyon sistèm (pwòp analogue li yo memcpy oswa printf) [4];
  • Fo pozitif yo espesyalman enfim lè l sèvi avèk kòmantè;
  • Ak sou sa.

Nan ka sa a, nou ka espere yon ba pousantaj fo pozitif nan apeprè 10-15% [5]. Nan lòt mo, 9 sou 10 avètisman analizè yo pral endike yon pwoblèm reyèl nan kòd la, oswa omwen "kòd ki gen gwo sant." Dakò, senaryo sa a trè bèl, ak analizeur a se yon zanmi reyèl nan pwogramè a.

Ki jan yo aplike yon analizè kòd estatik nan yon pwojè eritaj san yo pa demotive ekip la
An reyalite, nan yon gwo pwojè, foto inisyal la pral konplètman diferan. Analizè a bay dè santèn oswa dè milye de avètisman pou kòd eritaj. Li enposib byen vit konprann kilès nan avètisman sa yo ki enpòtan ak ki pa. Li se irasyonèl chita epi kòmanse fè fas ak tout avètisman sa yo, depi travay prensipal la nan ka sa a ap sispann pou jou oswa semèn. Tipikman, yon ekip pa kapab peye yon senaryo konsa. Ap gen tou yon gwo kantite diferans ki gate istwa chanjman an. Ak rapid koreksyon an mas nan anpil fragman nan kòd la pral inevitableman rezilta nan nouvo typo ak erè.

Ak sa ki pi enpòtan, tankou yon feat nan batay la kont avètisman fè ti sans. Dakò ke depi pwojè a te kouri avèk siksè pou anpil ane, pi fò nan erè kritik nan li yo te deja korije. Wi, ranje sa yo te chè anpil, yo te dwe debogaj, te resevwa fidbak itilizatè negatif sou pinèz, ak sou sa. Yon analizè estatik ta ede ranje anpil nan erè sa yo nan etap nan kodaj, byen vit ak bon mache. Men, nan moman sa a, yon fason oswa yon lòt, erè sa yo te fiks, ak analizeur a sitou detekte erè ki pa kritik nan kòd la fin vye granmoun. Kòd sa a pa ka itilize, li ka itilize trè raman, epi yon erè nan li ka pa mennen nan konsekans aparan. Petèt yon kote lonbraj la soti nan bouton an se koulè a ​​mal, men sa a pa entèfere ak itilizasyon nenpòt moun nan pwodwi a.

Natirèlman, menm erè minè yo toujou erè. Epi pafwa yon erè ka kache yon vilnerabilite reyèl. Sepandan, abandone tout bagay ak depanse jou / semèn fè fas ak domaj ki apèn manifeste tèt yo sanble yon lide enziyan.

Pwogramasyon gade, gade, gade tout avètisman sa yo sou ansyen kòd k ap travay... Epi yo panse: nou ka fè san analiz estatik. Ann ale ekri kèk nouvo fonksyonalite itil.

Nan pwòp fason yo, yo gen rezon. Yo kalkile ke premye yo gen yon jan kanmenm debarase m de tout avètisman sa yo. Se sèlman lè sa a yo pral kapab benefisye de itilizasyon regilye nan analizè kòd la. Sinon, nouvo avètisman pral tou senpleman nwaye nan ansyen yo, epi pèsonn pa pral peye atansyon sou yo.

Sa a se menm analoji ak avètisman du. Se pa san rezon ke yo rekòmande pou kenbe kantite avètisman konpilateur nan 0. Si gen 1000 avètisman, Lè sa a, lè gen 1001, pa gen moun ki pral peye atansyon sou li, epi li pa klè ki kote yo gade pou avètisman sa a dernye.

Ki jan yo aplike yon analizè kòd estatik nan yon pwojè eritaj san yo pa demotive ekip la
Bagay ki pi mal nan istwa sa a se si yon moun ki soti anwo nan moman sa a fòse ou sèvi ak analiz kòd estatik. Sa a pral sèlman demotive ekip la, depi nan pwen de vi yo pral gen plis konpleksite biwokratik ki sèlman vin nan chemen an. Pa gen moun ki pral gade rapò analizè a, epi tout itilizasyon yo pral sèlman "sou papye". Moun sa yo. Fòmèlman, analiz yo bati nan pwosesis DevOps la, men nan pratik sa a pa benefisye pèsonn. Nou te tande istwa detaye nan ti joupa nan men patisipan konferans yo. Yon eksperyans konsa ka dekouraje pwogramè yo itilize zouti analiz estatik pou yon tan long, si se pa pou tout tan.

Aplike ak elimine dèt teknik

An reyalite, pa gen anyen difisil oswa pè sou entwodwi analiz estatik menm nan yon gwo pwojè fin vye granmoun.

CI / CD

Anplis, analizeur a ka imedyatman fè pati nan pwosesis devlopman kontinyèl la. Pou egzanp, distribisyon PVS-Studio a gen sèvis piblik pou byen gade rapò a nan fòma ou bezwen an, ak notifikasyon bay devlopè ki te ekri seksyon pwoblèm nan kòd la. Pou moun ki plis enterese nan lanse PVS-Studio nan sistèm CI/CD, mwen rekòmande pou w familyarize w ak korespondan an. seksyon dokiman ak yon seri atik:

Men, ann retounen nan pwoblèm nan nan yon gwo kantite fo pozitif nan premye etap yo nan aplikasyon zouti analiz kòd.

Ranje dèt teknik ki deja egziste ak fè fas ak avètisman nouvo

Modèn analizè estatik komèsyal pèmèt ou etidye sèlman nouvo avètisman ki parèt nan kòd nouvo oswa chanje. Aplikasyon an nan mekanis sa a varye, men sans nan se menm bagay la. Nan analizeur estatik PVS-Studio, fonksyonalite sa a aplike jan sa a.

Pou byen vit kòmanse itilize analiz estatik, nou sijere itilizatè PVS-Studio itilize mekanis pou sipresyon mas avètisman yo.6]. Lide jeneral la se sa ki annapre yo. Itilizatè a te lanse analizè a epi li te resevwa anpil avètisman. Depi yon pwojè ki te nan devlopman pou anpil ane vivan, devlope ak fè lajan, Lè sa a, gen plis chans pa pral gen anpil avètisman nan rapò a ki endike domaj kritik. Nan lòt mo, pinèz kritik yo te deja fiks yon fason oswa yon lòt lè l sèvi avèk metòd pi chè oswa gras a fidbak nan men kliyan yo. An konsekans, tout bagay ki analize a kounye a jwenn ka konsidere kòm dèt teknik, ki se Inposibl eseye elimine imedyatman.

Ou ka di PVS-Studio pou konsidere avètisman sa yo pa enpòtan pou kounye a (sove dèt teknik pou pita), epi li p ap montre yo ankò. Analizè a kreye yon fichye espesyal kote li sove enfòmasyon sou erè ki poko enteresan. Epi, koulye a PVS-Studio pral bay avètisman sèlman pou nouvo oswa chanje kòd. Anplis, tout bagay sa a se aplike malen. Si, pou egzanp, yo ajoute yon liy vid nan kòmansman an nan dosye a kòd sous, Lè sa a, analizeur a konprann ke, an reyalite, pa gen anyen ki chanje, epi yo pral kontinye rete an silans. Fichye mak sa a ka mete nan yon sistèm kontwòl vèsyon. Fichye a gwo, men sa a se pa yon pwoblèm, paske pa gen okenn pwen nan estoke li souvan.

Koulye a, tout pwogramasyon yo pral wè avètisman ki gen rapò sèlman ak nouvo kòd oswa chanje. Kidonk, ou ka kòmanse sèvi ak analizeur a, jan yo di, depi jou kap vini an. Epi ou ka retounen nan dèt teknik pita, epi piti piti korije erè ak konfigirasyon analizè a.

Se konsa, pwoblèm nan premye ak aplikasyon an nan analizeur a nan yon gwo pwojè fin vye granmoun te rezoud. Koulye a, an n evalye sa pou yo fè ak dèt teknik.

Koreksyon ensèk ak refactoring

Bagay ki pi senp ak pi natirèl la se mete sou kote kèk tan pou analize avètisman analizeur twouve siprime epi piti piti fè fas ak yo. Yon kote ou ta dwe ranje erè nan kòd la, yon kote ou ta dwe refactor pou di analizè a ke kòd la pa pwoblèm. Egzanp senp:

if (a = b)

Pifò C++ konpilatè ak analizeur plenyen sou kòd sa yo, paske gen yon gwo pwobabilite ke yo aktyèlman te vle ekri. (a == b). Men, gen yon akò ki pa pale, e sa a anjeneral te note nan dokiman an, ke si gen parantèz adisyonèl, Lè sa a, li konsidere ke pwogramè a fè espre te ekri kòd sa yo, epi pa gen okenn bezwen fè sèman. Pou egzanp, nan dokiman PVS-Studio pou dyagnostik V559 (CWE-481) Li ekri klèman ke yo pral konsidere liy sa a kòrèk epi san danje:

if ((a = b))

Yon lòt egzanp. Èske li bliye nan kòd C++ sa a? kraze oswa ou pa?

case A:
  foo();
case B:
  bar();
  break;

Analizè PVS-Studio a pral bay yon avètisman isit la V796 (CWE-484). Sa a ka pa yon erè, nan ka sa a ou ta dwe bay analizeur a yon allusion lè w ajoute atribi a [[fallthrough]] oswa pou egzanp __attribute__((tonbe)):

case A:
  foo();
  [[fallthrough]];
case B:
  bar();
  break;

Li ka di ke chanjman kòd sa yo pa ranje ensèk la. Wi, sa a se vre, men li fè de bagay itil. Premyèman, rapò analizè a debarase m de fo pozitif. Dezyèmman, kòd la vin pi konprann pou moun ki enplike nan antretyen li yo. Ak sa a trè enpòtan! Pou sa sèlman, li vo pote soti nan refactoring minè fè kòd la pi klè ak pi fasil yo kenbe. Depi analizè a pa konprann si "kraze" nesesè oswa ou pa, li pral klè tou pou pwogramè parèy yo.

Anplis de sa nan korije ensèk ak refactoring, ou ka espesyalman siprime avètisman analizeur evidamman fo. Gen kèk dyagnostik ki pa enpòtan yo ka enfim. Pa egzanp, yon moun panse avètisman yo pa itil V550 sou konpare valè flote / doub. Ak kèk klasifye yo kòm enpòtan ak merite pou yo etidye [7]. Ki avètisman yo konsidere kòm enpòtan ak ki pa yo, se ekip devlopman an pou deside.

Gen lòt fason yo siprime fo alèt. Pou egzanp, makro makro te mansyone pi bonè. Tout bagay sa yo dekri an plis detay nan dokiman an. Bagay ki pi enpòtan an se konprann ke si ou piti piti ak sistematik apwòch travay ak fo pozitif, pa gen anyen ki mal ak yo. A vas majorite de avètisman ki pa enteresan yo disparèt apre konfigirasyon, epi sèlman kote ki vrèman mande pou etid atansyon ak kèk chanjman nan kòd la rete.

Epitou, nou toujou ede kliyan nou yo mete PVS-Studio si nenpòt difikilte rive. Anplis, te gen ka kote nou menm nou elimine fo avètisman ak korije erè [8]. Jis nan ka, mwen deside mansyone ke opsyon sa a pou koperasyon pwolonje posib tou :).

Metòd ratchet

Gen yon lòt apwòch enteresan pou amelyore kalite kòd piti piti pa elimine avètisman analizè estatik la. Liy anba a se ke kantite avètisman ka sèlman diminye.

Ki jan yo aplike yon analizè kòd estatik nan yon pwojè eritaj san yo pa demotive ekip la

Yo anrejistre kantite avètisman analizè estatik la bay. Kalite pòtay se configuré nan yon fason ke kounye a ou ka sèlman antre nan yon kòd ki pa ogmante kantite operasyon yo. Kòm yon rezilta, pwosesis la nan diminye piti piti kantite alam kòmanse pa ajiste analizè a ak korije erè.

Menm si yon moun vle tronpe yon ti kras epi li deside pase pòtay bon jan kalite a pa elimine avètisman nan nouvo kòd li a, men pa amelyore ansyen kòd twazyèm pati a, sa a se pa pè. Menm jan an tou, ratchet la wotasyon nan yon direksyon, epi piti piti kantite domaj yo ap diminye. Menm si yon moun pa vle ranje pwòp nouvo domaj li yo, li pral toujou gen amelyore yon bagay nan kòd vwazen an. Nan kèk pwen, fason ki fasil pou redwi kantite avètisman yo fini, epi gen yon pwen lè ensèk reyèl yo pral fiks.

Metodoloji sa a dekri an plis detay nan yon atik trè enteresan pa Ivan Ponomarev "Aplike analiz estatik nan pwosesis la, olye ke chèche pinèz ak li", ke mwen rekòmande li bay nenpòt moun ki enterese nan amelyore kalite kòd.

Otè atik la tou gen yon rapò sou sijè sa a: "Kontinyèl analiz estatik".

Konklizyon

Mwen espere ke apre atik sa a, lektè yo pral plis aksepte zouti analiz estatik epi yo pral vle aplike yo nan pwosesis devlopman an. Si w gen nenpòt kesyon, nou toujou pare konseye itilizatè yo nan analizè estatik nou an PVS-Studio epi ede ak aplikasyon li yo.

Gen lòt dout tipik sou si analiz estatik ka vrèman pratik ak itil. Mwen te eseye disparèt pifò dout sa yo nan piblikasyon "Rezon pou prezante analizè kòd estatik PVS-Studio nan pwosesis devlopman" [9].

Mèsi pou atansyon ou epi vini telechaje epi eseye analizeur PVS-Studio la.

Lyen adisyonèl

  1. Andrei Karpov. Kouman mwen ka wè byen vit avètisman enteresan ke analizeur PVS-Studio pwodui pou kòd C ak C++?
  2. Wikipedia. Teyorèm Rice a.
  3. Andrey Karpov, Victoria Khanieva. Sèvi ak aprantisaj machin nan analiz estatik nan kòd sous pwogram.
  4. PVS-Studio. Dokimantasyon. Lòt anviwònman dyagnostik.
  5. Andrei Karpov. Karakteristik analizeur PVS-Studio lè l sèvi avèk egzanp bibliyotèk debaz EFL, 10-15% fo pozitif.
  6. PVS-Studio. Dokimantasyon. Mass repwesyon nan mesaj analizeur.
  7. Ivan Andryashin. Konsènan ki jan nou teste analiz estatik sou pwojè nou an nan yon similatè edikatif nan operasyon andovaskilè radyografi.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Ki jan ekip PVS-Studio amelyore kòd Unreal Engine la.
  9. Andrei Karpov. Rezon ki fè yo prezante analizè kòd estatik PVS-Studio nan pwosesis devlopman an.

Ki jan yo aplike yon analizè kòd estatik nan yon pwojè eritaj san yo pa demotive ekip la

Si ou vle pataje atik sa a ak yon odyans ki pale angle, tanpri itilize lyen tradiksyon an: Andrey Karpov. Ki jan yo prezante yon analizè kòd estatik nan yon pwojè eritaj epi yo pa dekouraje ekip la.

Sous: www.habr.com

Add nouvo kòmantè