Kif timplimenta analizzatur tal-kodiċi statiku fi proġett wirt mingħajr ma tiddemotiva t-tim

Kif timplimenta analizzatur tal-kodiċi statiku fi proġett wirt mingħajr ma tiddemotiva t-tim
Huwa faċli li tipprova analizzatur tal-kodiċi statiku. Iżda biex timplimentaha, speċjalment fl-iżvilupp ta 'proġett antik kbir, teħtieġ ħila. Jekk isir ħażin, l-analizzatur jista 'jżid ix-xogħol, inaqqas l-iżvilupp, u jiddemotiva t-tim. Ejja nitkellmu fil-qosor dwar kif approċċ tajjeb għall-integrazzjoni ta 'analiżi statika fil-proċess ta' żvilupp u tibda tużaha bħala parti minn CI/CD.

Introduzzjoni

Riċentement inġibdet l-attenzjoni tiegħi għall-pubblikazzjoni "Nibdew B'Analiżi Statika Mingħajr Ma Tgħaqqad it-Tim". Min-naħa waħda, dan huwa artiklu tajjeb li ta 'min jiffamiljarizza ruħu miegħu. Min-naħa l-oħra, jidhirli li għadu ma jipprovdix tweġiba sħiħa dwar kif timplimenta mingħajr tbatija analiżi statika fi proġett b'ħafna tal-kodiċi legacy.L-artiklu jgħid li Tista 'taċċetta dejn tekniku u taħdem biss fuq kodiċi ġdid, iżda m'hemm l-ebda tweġiba għal x'għandek tagħmel b'dan id-dejn tekniku aktar tard.

It-tim tagħna tal-PVS-Studio joffri l-opinjoni tiegħu dwar dan is-suġġett. Ejja nħarsu lejn kif l-ewwel tqum il-problema tal-implimentazzjoni ta 'analizzatur tal-kodiċi statiku, kif tegħleb din il-problema, u kif telimina gradwalment id-dejn tekniku mingħajr tbatija.

Kwistjonijiet

Normalment mhux diffiċli li tniedi u tara kif jaħdem analizzatur statiku [1]. Tista 'tara żbalji interessanti jew saħansitra vulnerabbiltajiet potenzjali tal-biża' fil-kodiċi. Tista 'anki tiffissa xi ħaġa, iżda mbagħad ħafna programmaturi jieqfu.

L-analizzaturi statiċi kollha jipproduċu pożittivi foloz. Din hija karatteristika tal-metodoloġija tal-analiżi tal-kodiċi statiku, u xejn ma jista 'jsir dwarha. Fil-każ ġenerali, din hija problema li ma tistax tissolva, kif ikkonfermat mit-teorema ta’ Rice [2]. L-algoritmi tat-tagħlim bil-magni lanqas se jgħinu [3]. Anke jekk persuna ma tistax dejjem tgħid jekk dan jew dak il-kodiċi huwiex ħażin, allura m'għandekx tistenna dan mill-programm :).

Pożittivi foloz mhumiex problema jekk l-analizzatur statiku jkun diġà kkonfigurat:

  • Settijiet ta' regoli irrilevanti b'diżabilità;
  • Xi dijanjostiċi irrilevanti ġew diżattivati;
  • Jekk qed nitkellmu dwar C jew C++, allura macros huma mmarkati li fihom kostruzzjonijiet speċifiċi li jikkawżaw twissijiet inutli li jidhru f'kull post fejn jintużaw macros bħal dawn;
  • Il-funzjonijiet proprji huma mmarkati li jwettqu azzjonijiet simili għall-funzjonijiet tas-sistema (l-analogu tagħha stess memcpy jew printf) [4];
  • Pożittivi foloz huma speċifikament diżattivati ​​bl-użu tal-kummenti;
  • U hekk.

F'dan il-każ, nistgħu nistennew rata baxxa pożittiva falza ta 'madwar 10-15% [5]. Fi kliem ieħor, 9 minn kull 10 twissijiet tal-analizzatur jindikaw problema reali fil-kodiċi, jew tal-inqas "kodiċi b'riħa qawwija." Naqbel, dan ix-xenarju huwa estremament pjaċevoli, u l-analizzatur huwa ħabib reali tal-programmatur.

Kif timplimenta analizzatur tal-kodiċi statiku fi proġett wirt mingħajr ma tiddemotiva t-tim
Fir-realtà, fi proġett kbir, l-istampa inizjali se tkun kompletament differenti. L-analizzatur joħroġ mijiet jew eluf ta’ twissijiet għal kodiċi wirt. Huwa impossibbli li wieħed jifhem malajr liema minn dawn it-twissijiet huma rilevanti u liema mhumiex. Huwa irrazzjonali li toqgħod bilqiegħda u tibda tittratta dawn it-twissijiet kollha, peress li x-xogħol ewlieni f'dan il-każ jieqaf għal jiem jew ġimgħat. Tipikament, tim ma jaffordjax xenarju bħal dan. Se jkun hemm ukoll numru kbir ta 'diffs li jħassru l-istorja tal-bidla. U l-editjar tal-massa rapidu ta 'daqstant frammenti fil-kodiċi inevitabbilment se jirriżulta fi typos u żbalji ġodda.

U l-aktar importanti, proeza bħal din fil-ġlieda kontra t-twissijiet ftit tagħmel sens. Naqbel li peress li l-proġett ilu għaddej b'suċċess għal ħafna snin, ħafna mill-iżbalji kritiċi fih diġà ġew ikkoreġuti. Iva, dawn it-tiswija kienu għaljin ħafna, kellhom jiġu debugged, irċevew feedback negattiv tal-utent dwar bugs, eċċ. Analizzatur statiku jgħin biex jiffissa ħafna minn dawn l-iżbalji fl-istadju tal-kodifikazzjoni, malajr u bl-irħis. Iżda bħalissa, b'xi mod jew ieħor, dawn l-iżbalji ġew iffissati, u l-analizzatur prinċipalment jiskopri żbalji mhux kritiċi fil-kodiċi l-antik. Dan il-kodiċi ma jistax jintuża, jista 'jintuża rari ħafna, u żball fih jista' ma jwassalx għal konsegwenzi notevoli. Forsi x'imkien id-dell mill-buttuna huwa l-kulur ħażin, iżda dan ma jfixkilx l-użu tal-prodott minn ħadd.

Naturalment, anke żbalji minuri għadhom żbalji. U xi kultant żball jista’ jaħbi vulnerabbiltà reali. Madankollu, li jċedu kollox u li jqattgħu ġranet/ġimgħat jittrattaw difetti li bilkemm jimmanifestaw ruħhom tidher qisha idea dubjuża.

Il-programmaturi jħarsu, iħarsu, iħarsu lejn dawn it-twissijiet kollha dwar il-kodiċi tax-xogħol antik... U jaħsbu: nistgħu nagħmlu mingħajr analiżi statika. Ejja mmorru niktbu xi funzjonalità utli ġdida.

Bil-mod tagħhom, għandhom raġun. Jidhru li l-ewwel iridu b’xi mod jeħilsu minn dawn it-twissijiet kollha. Hekk biss ikunu jistgħu jibbenefikaw mill-użu regolari tal-analizzatur tal-kodiċi. Inkella, twissijiet ġodda sempliċement jegħrqu f'dawk qodma, u ħadd ma jagħti kashom.

Din hija l-istess analoġija bħal ma 'twissijiet kompilatur. Mhux mingħajr raġuni li jirrakkomandaw li n-numru ta 'twissijiet tal-kompilatur jinżammu f'0. Jekk ikun hemm 1000 twissija, allura meta jkun hemm 1001, ħadd ma jagħti attenzjoni għaliha, u mhux ċar fejn tfittex din it-twissija l-aktar ġdida.

Kif timplimenta analizzatur tal-kodiċi statiku fi proġett wirt mingħajr ma tiddemotiva t-tim
L-agħar ħaġa f'din l-istorja hija jekk xi ħadd minn fuq f'dan il-mument iġġiegħlek tuża analiżi tal-kodiċi statiku. Dan se jiddemotiva biss lit-tim, peress li mill-perspettiva tagħhom se jkun hemm kumplessità burokratika addizzjonali li tfixkel biss. Ħadd mhu se jħares lejn ir-rapporti tal-analizzatur, u l-użu kollu se jkun biss "fuq il-karta". Dawk. Formalment, l-analiżi hija mibnija fil-proċess DevOps, iżda fil-prattika dan ma jibbenefika lil ħadd. Smajna stejjer dettaljati fil-kabini minn dawk li attendew il-konferenza. Esperjenza bħal din tista 'tiskoraġġixxi lill-programmaturi milli jużaw għodod ta' analiżi statika għal żmien twil, jekk mhux għal dejjem.

L-implimentazzjoni u l-eliminazzjoni tad-dejn tekniku

Fil-fatt, m'hemm xejn diffiċli jew tal-biża' dwar l-introduzzjoni ta 'analiżi statika anki fi proġett antik kbir.

CI / CD

Barra minn hekk, l-analizzatur jista 'minnufih isir parti mill-proċess ta' żvilupp kontinwu. Pereżempju, id-distribuzzjoni PVS-Studio fiha utilitajiet biex tara b'mod konvenjenti r-rapport fil-format li għandek bżonn, u notifiki lill-iżviluppaturi li kitbu sezzjonijiet problematiċi tal-kodiċi. Għal dawk li huma aktar interessati li jniedu PVS-Studio minn sistemi CI/CD, nirrakkomanda li tiffamiljarizza ruħek mal-korrispondenti sezzjoni dokumentazzjoni u sensiela ta’ artikli:

Imma ejja nerġgħu lura għall-kwistjoni ta 'numru kbir ta' pożittivi foloz fl-ewwel stadji tal-implimentazzjoni tal-għodod tal-analiżi tal-kodiċi.

L-iffissar tad-dejn tekniku eżistenti u t-trattament ta’ twissijiet ġodda

Analizzaturi statiċi kummerċjali moderni jippermettulek tistudja biss twissijiet ġodda li jidhru f'kodiċi ġdid jew mibdul. L-implimentazzjoni ta 'dan il-mekkaniżmu tvarja, iżda l-essenza hija l-istess. Fl-analizzatur statiku PVS-Studio, din il-funzjonalità hija implimentata kif ġej.

Biex tibda tuża malajr analiżi statika, nissuġġerixxu li l-utenti ta 'PVS-Studio jużaw il-mekkaniżmu għas-soppressjoni tal-massa ta' twissijiet [6]. L-idea ġenerali hija din li ġejja. L-utent nieda l-analizzatur u rċieva ħafna twissijiet. Peress li proġett li ilu fl-iżvilupp għal ħafna snin huwa ħaj, jiżviluppa u jagħmel il-flus, allura x'aktarx mhux se jkun hemm ħafna twissijiet fir-rapport li jindika difetti kritiċi. Fi kliem ieħor, bugs kritiċi diġà ġew iffissati b'xi mod jew ieħor bl-użu ta 'metodi aktar għaljin jew grazzi għal feedback mill-klijenti. Għaldaqstant, dak kollu li l-analizzatur isib bħalissa jista' jitqies bħala dejn tekniku, li mhuwiex prattiku li wieħed jipprova jelimina immedjatament.

Tista 'tgħid lil PVS-Studio biex tikkunsidra dawn it-twissijiet irrelevanti għalissa (issejvja d-dejn tekniku għal aktar tard), u mhux se jibqa' jurihom. L-analizzatur joħloq fajl speċjali fejn jiffranka informazzjoni dwar żbalji li għadhom mhumiex interessanti. U issa PVS-Studio se joħroġ twissijiet biss għal kodiċi ġdid jew mibdul. Barra minn hekk, dan kollu huwa implimentat b'mod għaqli. Jekk, pereżempju, tiżdied linja vojta mal-bidu tal-fajl tal-kodiċi tas-sors, allura l-analizzatur jifhem li, fil-fatt, xejn ma nbidel, u se jkompli jkun sieket. Dan il-fajl tal-markup jista' jitqiegħed f'sistema ta' kontroll tal-verżjoni. Il-fajl huwa kbir, iżda din mhix problema, peress li m'hemm l-ebda skop li taħżen ta 'spiss.

Issa l-programmaturi kollha se jaraw twissijiet relatati biss ma 'kodiċi ġdid jew mibdul. Għalhekk, tista 'tibda tuża l-analizzatur, kif jgħidu, mill-għada. U tista 'terġa' lura għad-dejn tekniku aktar tard, u tikkoreġi l-iżbalji gradwalment u kkonfigura l-analizzatur.

Allura, l-ewwel problema bl-implimentazzjoni tal-analizzatur fi proġett kbir antik ġiet solvuta. Issa ejja nsemmu x'għandek tagħmel bid-dejn tekniku.

Bug fixes u refactorings

L-iktar ħaġa sempliċi u naturali hija li twarrab xi żmien biex tanalizza t-twissijiet tal-analizzaturi mrażżna bil-kbir u tittrattahom gradwalment. X'imkien għandek tiffissa l-iżbalji fil-kodiċi, x'imkien għandek tirrefactor biex tgħid lill-analizzatur li l-kodiċi mhuwiex problematiku. Eżempju sempliċi:

if (a = b)

Ħafna mill-kompilaturi u l-analizzaturi C++ jilmentaw dwar tali kodiċi, peress li hemm probabbiltà kbira li fil-fatt riedu jiktbu (a == b). Iżda hemm ftehim mhux mitkellem, u dan normalment jiġi nnutat fid-dokumentazzjoni, li jekk ikun hemm parentesi addizzjonali, allura jitqies li l-programmatur kiteb deliberatament tali kodiċi, u m'hemmx għalfejn naħlef. Per eżempju, fid-dokumentazzjoni PVS-Studio għad-dijanjostika V559 (CWE-481) huwa miktub b'mod ċar li l-linja li ġejja se titqies korretta u sigura:

if ((a = b))

Eżempju ieħor. Hija minsija f'dan il-kodiċi C++? break jew le?

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

L-analizzatur PVS-Studio se joħroġ twissija hawn V796 (CWE-484). Dan jista 'ma jkunx żball, f'liema każ għandek tagħti ħjiel lill-parser billi żżid l-attribut [[fallthrough]] jew, pereżempju, __attribut__((fallthrough)):

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

Jista 'jingħad li tali bidliet fil-kodiċi ma jiffissawx il-bug. Iva, dan huwa minnu, iżda jagħmel żewġ affarijiet utli. L-ewwelnett, ir-rapport tal-analizzatur jeħles mill-pożittivi foloz. It-tieni nett, il-kodiċi jsir aktar jinftiehem min-nies involuti fil-manutenzjoni tiegħu. U dan huwa importanti ħafna! Għal dan biss, ta 'min twettaq refactorings minuri biex tagħmel il-kodiċi aktar ċar u aktar faċli biex jinżamm. Peress li l-analizzatur ma jifhimx jekk "waqfa" hijiex meħtieġa jew le, ma jkunx ċar ukoll għal programmaturi sħabi.

Minbarra l-iffissar tal-bugs u r-refactorings, tista 'trażżan speċifikament it-twissijiet tal-analizzaturi ovvjament foloz. Xi dijanjostiċi irrilevanti jistgħu jiġu diżattivati. Pereżempju, xi ħadd jaħseb li t-twissijiet huma inutli V550 dwar it-tqabbil tal-valuri float/double. U xi wħud jikklassifikawhom bħala importanti u denji ta’ studju [7]. Liema twissijiet huma kkunsidrati rilevanti u liema mhumiex huwa f'idejn it-tim tal-iżvilupp li jiddeċiedi.

Hemm modi oħra biex irażżnu twissijiet foloz. Pereżempju, il-markup makro ssemma qabel. Dan kollu huwa deskritt f'aktar dettall fid-dokumentazzjoni. L-iktar ħaġa importanti hija li tifhem li jekk tavviċina b'mod gradwali u sistematiku taħdem b'pożittivi foloz, m'hemm xejn ħażin magħhom. Il-maġġoranza l-kbira tat-twissijiet mhux interessanti jisparixxu wara l-konfigurazzjoni, u jibqgħu biss postijiet li verament jeħtieġu studju bir-reqqa u xi bidliet fil-kodiċi.

Ukoll, aħna dejjem ngħinu lill-klijenti tagħna jwaqqfu PVS-Studio jekk jinqalgħu xi diffikultajiet. Barra minn hekk, kien hemm każijiet meta aħna stess eliminajna twissijiet foloz u kkoreġejna żbalji [8]. Fil-każ, iddeċidejt li nsemmi li din l-għażla għal kooperazzjoni estiża hija wkoll possibbli :).

Metodu ratchet

Hemm approċċ ieħor interessanti biex tittejjeb gradwalment il-kwalità tal-kodiċi billi telimina t-twissija tal-analizzatur statiku. L-aħħar linja hija li n-numru ta 'twissijiet jista' jonqos biss.

Kif timplimenta analizzatur tal-kodiċi statiku fi proġett wirt mingħajr ma tiddemotiva t-tim

In-numru ta' twissijiet maħruġa mill-analizzatur statiku huwa rreġistrat. Il-bieb tal-kwalità huwa kkonfigurat b'tali mod li issa tista 'ddaħħal biss kodiċi li ma żżidx in-numru ta' operazzjonijiet. Bħala riżultat, il-proċess li jitnaqqas gradwalment in-numru ta 'allarmi jibda billi jaġġusta l-analizzatur u jikkoreġi l-iżbalji.

Anke jekk persuna trid iqarrqu ftit u tiddeċiedi li tgħaddi l-bieb tal-kwalità mhux billi telimina t-twissijiet fil-kodiċi l-ġdid tagħha, iżda billi ttejjeb il-kodiċi antik ta 'parti terza, dan mhux tal-biża'. L-istess, ir-ratchet idur f'direzzjoni waħda, u gradwalment in-numru ta 'difetti jonqos. Anke jekk persuna ma tridx tirranġa d-difetti ġodda tagħha stess, xorta se jkollha ttejjeb xi ħaġa fil-kodiċi tal-ġirien. F'xi punt, il-modi faċli biex jitnaqqas in-numru ta 'twissijiet jispiċċaw, u jasal punt meta bugs reali se jiġu ffissati.

Din il-metodoloġija hija deskritta f'aktar dettall f'artiklu interessanti ħafna minn Ivan Ponomarev "Implimenta analiżi statika fil-proċess, aktar milli tużaha biex issib bugs", li nirrakkomanda li taqra lil kull min hu interessat li jtejjeb il-kwalità tal-kodiċi.

L-awtur tal-artiklu għandu wkoll rapport dwar dan is-suġġett: "Analiżi statika kontinwa".

Konklużjoni

Nittama li wara dan l-artikolu, il-qarrejja jkunu aktar jaċċettaw l-għodod ta 'analiżi statika u jkunu jridu jimplimentawhom fil-proċess ta' żvilupp. Jekk għandek xi mistoqsijiet, aħna dejjem lesti jagħti parir utenti tal-analizzatur statiku tagħna PVS-Studio u jgħinu fl-implimentazzjoni tiegħu.

Hemm dubji tipiċi oħra dwar jekk l-analiżi statika tistax verament tkun konvenjenti u utli. Ippruvajt inneħħi ħafna minn dawn id-dubji fil-pubblikazzjoni "Raġunijiet biex tintroduċi l-analizzatur tal-kodiċi statiku PVS-Studio fil-proċess ta 'żvilupp" [9].

Grazzi tal-attenzjoni tagħkom u ejja download u pprova l-analizzatur PVS-Studio.

Links addizzjonali

  1. Andrey Karpov. Kif nista' nara malajr twissijiet interessanti li l-analizzatur PVS-Studio jipproduċi għall-kodiċi C u C++?
  2. Wikipedija. Teorema tar-ross.
  3. Andrey Karpov, Victoria Khanieva. L-użu tat-tagħlim tal-magni fl-analiżi statika tal-kodiċi tas-sors tal-programm.
  4. PVS-Istudjo. Dokumentazzjoni. Settings dijanjostiċi addizzjonali.
  5. Andrey Karpov. Karatteristiċi tal-analizzatur PVS-Studio bl-użu tal-eżempju tal-Libreriji ewlenin tal-EFL, 10-15% pożittivi foloz.
  6. PVS-Istudjo. Dokumentazzjoni. Soppressjoni tal-massa ta 'messaġġi analizzaturi.
  7. Ivan Andryashin. Dwar kif ittestjajna l-analiżi statika fuq il-proġett tagħna ta 'simulatur edukattiv ta' kirurġija endovaskulari bir-raġġi X.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Kif it-tim tal-PVS-Studio tejjeb il-kodiċi tal-Unreal Engine.
  9. Andrey Karpov. Raġunijiet biex tintroduċi l-analizzatur tal-kodiċi statiku PVS-Studio fil-proċess ta 'żvilupp.

Kif timplimenta analizzatur tal-kodiċi statiku fi proġett wirt mingħajr ma tiddemotiva t-tim

Jekk trid taqsam dan l-artikolu ma 'udjenza li titkellem bl-Ingliż, jekk jogħġbok uża l-link tat-traduzzjoni: Andrey Karpov. Kif tintroduċi analizzatur tal-kodiċi statiku fi proġett wirt u mhux biex tiskoraġġixxi lit-tim.

Sors: www.habr.com

Żid kumment