Momwe mungakhazikitsire static code analyzer mu polojekiti ya cholowa popanda kutsitsa gulu

Momwe mungakhazikitsire static code analyzer mu polojekiti ya cholowa popanda kutsitsa gulu
Ndikosavuta kuyesa static code analyzer. Koma kuti agwiritse ntchito, makamaka pakupanga ntchito yaikulu yakale, pamafunika luso. Ngati atachita molakwika, wosanthula amatha kuwonjezera ntchito, kuchepetsa chitukuko, ndikutsitsa gululo. Tiyeni tikambirane mwachidule za momwe tingayandikire bwino kusakanikirana kwa static kusanthula mu ndondomeko yachitukuko ndikuyamba kugwiritsa ntchito ngati gawo la CI / CD.

Mau oyamba

Posachedwapa chidwi changa chidakopeka ndi bukuli "Kuyamba Ndi Static Analysis Popanda Kulemetsa Gulu"Kumbali imodzi, iyi ndi nkhani yabwino yomwe ndiyenera kuidziwa bwino. Komano, zikuwoneka kwa ine kuti sichikupereka yankho lathunthu la momwe mungakhazikitsire kusanthula kosasunthika mu ntchito yokhala ndi zambiri. Nkhaniyi ikuti Mutha kuvomera ngongole zaukadaulo ndikugwira ntchito pama code atsopano, koma palibe yankho lazomwe mungachite ndi ngongoleyi pambuyo pake.

Gulu lathu la PVS-Studio limapereka malingaliro ake pamutuwu. Tiyeni tiwone momwe vuto la static code analyzer limayambira, momwe mungagonjetsere vutoli, komanso momwe mungathetsere pang'onopang'ono ngongole yaukadaulo.

Nkhani

Nthawi zambiri sizovuta kuyambitsa ndikuwona momwe static analyzer imagwirira ntchito [1]. Mutha kuwona zolakwika zochititsa chidwi kapena zowopsa zomwe zingachitike mu code. Mutha kukonza china chake, koma opanga mapulogalamu ambiri amasiya.

Ma static analyzer onse amatulutsa zabwino zabodza. Ichi ndi gawo la njira yowunikira ma static code, ndipo palibe chomwe chingachitike. Nthawi zambiri, ili ndi vuto lomwe silingathetsedwe, monga zatsimikiziridwa ndi chiphunzitso cha Rice [2]. Njira zophunzirira makina sizithandizanso [3]. Ngakhale munthu sangathe kudziwa nthawi zonse ngati izi kapena codeyo ili yolakwika, musayembekezere izi kuchokera ku pulogalamuyi :).

Zonama zabodza sizovuta ngati static analyzer idakonzedwa kale:

  • Malamulo olemala osafunikira;
  • Zofufuza zina zosafunikira zayimitsidwa;
  • Ngati tikukamba za C kapena C ++, ndiye kuti macros amalembedwa kuti ali ndi zomanga zenizeni zomwe zimapangitsa kuti machenjezo opanda pake awonekere kulikonse kumene macros amagwiritsidwa ntchito;
  • Ntchito zake zimalembedwa zomwe zimagwira ntchito zofanana ndi ntchito zamakina (analogue yake memcpy kapena printf) [4];
  • Zabwino zabodza zimayimitsidwa makamaka pogwiritsa ntchito ndemanga;
  • Ndipo kotero.

Pankhaniyi, titha kuyembekezera kutsika kwabodza kwa 10-15% [5]. Mwa kuyankhula kwina, machenjezo 9 mwa 10 a analyzer adzawonetsa vuto lenileni mu code, kapena "ma code onunkhira kwambiri." Gwirizanani, izi ndizosangalatsa kwambiri, ndipo analyzer ndi bwenzi lenileni la wopanga mapulogalamu.

Momwe mungakhazikitsire static code analyzer mu polojekiti ya cholowa popanda kutsitsa gulu
Zowona, mu ntchito yayikulu, chithunzi choyambirira chidzakhala chosiyana kwambiri. The analyzer amapereka mazana kapena masauzande a machenjezo a legacy code. Sizingatheke kumvetsetsa mwamsanga kuti ndi machenjezo ati omwe ali ofunikira komanso omwe alibe. Ndizosamveka kukhala pansi ndikuyamba kuthana ndi machenjezo onsewa, popeza ntchito yayikuluyi idzasiya kwa masiku kapena masabata. Kawirikawiri, gulu silingakwanitse kuchita zimenezi. Padzakhalanso ma diffs ambiri omwe amawononga mbiri yakusintha. Ndipo kusintha mwachangu kwazidutswa zambiri mu code kudzabweretsa zolakwika ndi zolakwika zatsopano.

Ndipo chofunika kwambiri, kuchita zimenezi polimbana ndi machenjezo sikumveka bwino. Gwirizanani kuti popeza ntchitoyi yakhala ikuyenda bwino kwa zaka zambiri, zolakwika zambiri zomwe zilimo zakonzedwa kale. Inde, kukonza kumeneku kunali kokwera mtengo kwambiri, kumayenera kusinthidwa, kulandira malingaliro olakwika a ogwiritsa ntchito okhudza nsikidzi, ndi zina zotero. static analyzer ingathandize kukonza zambiri mwa zolakwikazo polemba, mwachangu komanso motchipa. Koma pakadali pano, njira imodzi kapena imzake, zolakwa izi zakhazikitsidwa, ndipo analyzer makamaka amazindikira zolakwika zosafunikira mu code yakale. Khodi iyi singagwiritsidwe ntchito, itha kugwiritsidwa ntchito kawirikawiri, ndipo cholakwikacho sichingabweretse zotsatira zowoneka bwino. Mwina penapake mthunzi wochokera ku batani ndi mtundu wolakwika, koma izi sizimasokoneza aliyense kugwiritsa ntchito mankhwalawa.

N’zoona kuti ngakhale zolakwa zazing’ono zimakhala zolakwa. Ndipo nthawi zina kulakwitsa kungabise kusatetezeka kwenikweni. Komabe, kusiya chilichonse ndikuwononga masiku/masabata kuthana ndi zolakwika zomwe sizimawonekera zikuwoneka ngati lingaliro lokayikitsa.

Okonza mapulogalamu amayang'ana, yang'anani, yang'anani pa machenjezo onsewa okhudza code yakale yogwira ntchito ... Ndipo amaganiza: tikhoza kuchita popanda kusanthula static. Tiyeni tilembe zina zatsopano zothandiza.

Mwa njira yawoyawo, iwo ali olondola. Amalingalira kuti choyamba ayenera kuchotsa machenjezo onsewa mwanjira ina. Pokhapokha adzatha kupindula pogwiritsa ntchito code analyzer nthawi zonse. Kupanda kutero, machenjezo atsopano adzangomira mu akale, ndipo palibe amene adzawalabadire.

Izi ndi zofanana ndi machenjezo a compiler. Palibe chifukwa chomveka kuti amalimbikitsa kusunga chiwerengero cha machenjezo a compiler pa 0. Ngati pali machenjezo a 1000, ndiye pamene pali 1001, palibe amene angamvetsere, ndipo sizikudziwika bwino kumene angayang'ane chenjezo latsopanoli.

Momwe mungakhazikitsire static code analyzer mu polojekiti ya cholowa popanda kutsitsa gulu
Choyipa kwambiri m'nkhaniyi ndi chakuti ngati wina wochokera pamwamba pakali pano akukakamizani kugwiritsa ntchito kusanthula kwa code static. Izi zidzangotsitsa gululo, chifukwa kuchokera kumalingaliro awo padzakhala zovuta zowonjezera za bureaucratic zomwe zimangofika panjira. Palibe amene adzayang'ane malipoti a analyzer, ndipo ntchito zonse zidzakhala "papepala". Iwo. Mwachidziwitso, kusanthula kumapangidwira mu ndondomeko ya DevOps, koma pochita izi sizipindulitsa aliyense. Tinamva nkhani zatsatanetsatane m'mabwalo kuchokera kwa opezeka pamisonkhano. Chochitika choterechi chingalepheretse olemba mapulogalamu kugwiritsa ntchito zida zowunikira kwanthawi yayitali, ngati sichoncho kwanthawizonse.

Kukhazikitsa ndi kuthetsa ngongole zaukadaulo

M'malo mwake, palibe chovuta kapena chowopsa pakuyambitsa kusanthula kosasunthika ngakhale muntchito yayikulu yakale.

CI/CD

Kuphatikiza apo, analyzer imatha kupangidwa nthawi yomweyo kukhala gawo lachitukuko chopitilira. Mwachitsanzo, kugawa kwa PVS-Studio kumakhala ndi zida zowonera lipotilo mwanjira yomwe mukufuna, komanso zidziwitso kwa opanga omwe adalemba magawo ovuta a code. Kwa iwo omwe ali ndi chidwi chokhazikitsa PVS-Studio kuchokera ku machitidwe a CI / CD, ndikupangira kuti mudziwe bwino zomwe zikugwirizana nazo. gawo zolemba ndi mndandanda wa zolemba:

Koma tiyeni tibwererenso ku nkhani ya chiwerengero chachikulu chachinyengo pazigawo zoyamba zogwiritsira ntchito zida zowunikira ma code.

Kukonza ngongole yaukadaulo yomwe ilipo komanso kuthana ndi machenjezo atsopano

Ma analyzer amakono amalonda amakulolani kuti muphunzire machenjezo atsopano omwe amawonekera mu code yatsopano kapena yosinthidwa. Kukhazikitsidwa kwa makinawa kumasiyanasiyana, koma tanthauzo lake ndilofanana. Mu PVS-Studio static analyzer, ntchitoyi imayendetsedwa motere.

Kuti tiyambe kugwiritsa ntchito kusanthula kosasunthika, tikupempha ogwiritsa ntchito a PVS-Studio kuti agwiritse ntchito njira yopondereza machenjezo ambiri [6]. Lingaliro wamba ndi awa. Wogwiritsa ntchito adayambitsa analyzer ndipo adalandira machenjezo ambiri. Popeza kuti polojekiti yomwe yakhala ikuchitika kwa zaka zambiri ili ndi moyo, ikupanga ndi kupanga ndalama, ndiye kuti mwina sipadzakhala machenjezo ambiri mu lipoti losonyeza zolakwika zazikulu. Mwa kuyankhula kwina, nsikidzi zovuta zakonzedwa kale mwanjira ina pogwiritsa ntchito njira zodula kapena chifukwa cha mayankho ochokera kwa makasitomala. Chifukwa chake, chilichonse chomwe wosanthula amapeza pano amatha kuonedwa ngati ngongole yaukadaulo, zomwe sizingatheke kuyesa kuchotsa nthawi yomweyo.

Mutha kuuza PVS-Studio kuti iwona machenjezowa ngati osafunikira pakadali pano (sungani ngongole zaukadaulo zamtsogolo), ndipo siziwonetsanso. Wosanthula amapanga fayilo yapadera pomwe imasunga zambiri za zolakwika zomwe sizinali zosangalatsa. Ndipo tsopano PVS-Studio ipereka machenjezo pamakhodi atsopano kapena osinthidwa. Komanso, zonsezi zimachitidwa mwanzeru. Ngati, mwachitsanzo, mzere wopanda kanthu ukuwonjezedwa kumayambiriro kwa fayilo ya code source, ndiye kuti analyzer amamvetsa kuti, kwenikweni, palibe chomwe chasintha, ndipo chidzapitiriza kukhala chete. Fayilo iyi ikhoza kuyikidwa mudongosolo lowongolera. Fayiloyo ndi yayikulu, koma ili si vuto, chifukwa palibe chifukwa chosungira nthawi zambiri.

Tsopano opanga mapulogalamu onse awona machenjezo okhudzana ndi ma code atsopano kapena osinthidwa okha. Chifukwa chake, mutha kuyamba kugwiritsa ntchito analyzer, monga amanenera, kuyambira tsiku lotsatira. Ndipo mutha kubwereranso ku ngongole yaukadaulo pambuyo pake, ndikuwongolera zolakwika pang'onopang'ono ndikukonza analyzer.

Kotero, vuto loyamba la kukhazikitsidwa kwa analyzer mu ntchito yaikulu yakale lathetsedwa. Tsopano tiyeni tione zoyenera kuchita ndi ngongole zaukadaulo.

Kukonza zolakwika ndi kukonzanso

Chosavuta komanso chachirengedwe ndikupatula nthawi yosanthula machenjezo a analyzer oponderezedwa ndikuthana nawo pang'onopang'ono. Kwinakwake muyenera kukonza zolakwika mu code, kwinakwake muyenera kukonzanso kuti muwuze wosanthula kuti codeyo ilibe vuto. Chitsanzo chosavuta:

if (a = b)

Ambiri ophatikiza C ++ ndi osanthula amadandaula za code yotere, popeza pali kuthekera kwakukulu komwe amafunadi kulemba. (a == b). Koma pali mgwirizano wosaneneka, ndipo izi nthawi zambiri zimatchulidwa m'zolemba, kuti ngati pali zowonjezera zowonjezera, zimaganiziridwa kuti wolemba mapulogalamu adalemba mwadala malamulo otere, ndipo palibe chifukwa cholumbira. Mwachitsanzo, mu zolemba za PVS-Studio za diagnostics V559 (CWE-481) zalembedwa momveka bwino kuti mzere wotsatirawu udzaonedwa kuti ndi wolondola komanso wotetezeka:

if ((a = b))

Chitsanzo china. Kodi zayiwalika mu code C++ iyi? yopuma kapena ayi?

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

PVS-Studio analyzer ipereka chenjezo pano V796 (CWE-484). Izi sizingakhale zolakwika, chifukwa chake muyenera kupereka chidziwitso powonjezera tanthauzo lake [[kugwa]] kapena, mwachitsanzo, __chinthu__((fallthrough)):

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

Titha kunena kuti kusintha kwa code koteroko sikukonza cholakwikacho. Inde, izi ndi zoona, koma zimapanga zinthu ziwiri zothandiza. Choyamba, lipoti la analyzer limachotsa zolakwika. Kachiwiri, malamulowa amamveka bwino kwa anthu omwe akukhudzidwa ndi kukonza kwake. Ndipo izi ndi zofunika kwambiri! Kwa izi zokha, ndikofunikira kuchita zosintha zing'onozing'ono kuti codeyo ikhale yomveka bwino komanso yosavuta kuyisamalira. Popeza wowunikirayo samamvetsetsa ngati "kusweka" ndikofunikira kapena ayi, sizidziwikanso kwa opanga mapulogalamu anzawo.

Kuphatikiza pa kukonza zolakwika ndi kukonzanso, mutha kuletsa mwachiwonekere machenjezo a analyzer abodza. Zofufuza zina zosafunikira zitha kuzimitsidwa. Mwachitsanzo, wina amaganiza kuti machenjezo ndi opanda pake V550 za kufananiza mayendedwe oyandama/awiri. Ndipo ena amawayika kukhala ofunika komanso oyenera kuwaphunzira [7]. Ndi machenjezo ati omwe amawonedwa kuti ndi ofunikira komanso omwe sali ndi gulu lachitukuko kuti lisankhe.

Palinso njira zina zopondereza zidziwitso zabodza. Mwachitsanzo, macro markup adatchulidwa kale. Zonsezi zikufotokozedwa mwatsatanetsatane muzolembedwa. Chofunikira kwambiri ndikumvetsetsa kuti ngati mukuyenda pang'onopang'ono komanso mwadongosolo kugwira ntchito ndi malingaliro onyenga, palibe cholakwika ndi iwo. Machenjezo ambiri osasangalatsa amatha pambuyo pokonzekera, ndipo malo okhawo omwe amafunikira kuphunzira mosamala komanso kusintha kwina kwa code kumakhalabe.

Komanso, nthawi zonse timathandiza makasitomala athu kukhazikitsa PVS-Studio ngati pali zovuta. Komanso, panali nthawi zina pamene ife tokha tinachotsa machenjezo onyenga ndi kukonza zolakwika [8]. Zikatero, ndidaganiza zonena kuti njira iyi yolumikizirana ingathenso :).

Njira ya Ratchet

Palinso njira ina yosangalatsa yosinthira pang'onopang'ono ma code pochotsa chenjezo la static analyzer. Mfundo yaikulu ndi yakuti chiwerengero cha machenjezo chikhoza kuchepa.

Momwe mungakhazikitsire static code analyzer mu polojekiti ya cholowa popanda kutsitsa gulu

Chiwerengero cha machenjezo operekedwa ndi static analyzer amalembedwa. Chipata chaubwino chimapangidwa m'njira yoti tsopano mutha kungolowetsa kachidindo komwe sikumawonjezera kuchuluka kwa ntchito. Zotsatira zake, njira yochepetsera pang'onopang'ono kuchuluka kwa ma alarm imayamba ndikusintha analyzer ndikuwongolera zolakwika.

Ngakhale ngati munthu akufuna kunyenga pang'ono ndikusankha kudutsa chipata cha khalidwe osati kuchotsa machenjezo mu code yake yatsopano, koma pokonza code yakale ya chipani chachitatu, izi sizowopsya. Momwemonso, ratchet imazungulira mbali imodzi, ndipo pang'onopang'ono chiwerengero cha zolakwika chidzachepa. Ngakhale ngati munthu safuna kukonza zolakwika zake zatsopano, afunikabe kukonza zina zake mu code yoyandikana nayo. Panthawi ina, njira zosavuta zochepetsera chiwerengero cha machenjezo zimatha, ndipo pamabwera pamene nsikidzi zenizeni zidzakonzedwa.

Njirayi ikufotokozedwa mwatsatanetsatane m'nkhani yosangalatsa kwambiri ya Ivan Ponomarev ".Limbikitsani kusanthula kosasintha munjira, m'malo moyang'ana nsikidzi nazo", zomwe ndimalimbikitsa kuwerengera kwa aliyense amene akufuna kukonza ma code.

Wolemba nkhaniyi alinso ndi lipoti pamutuwu: "Kusanthula kosasunthika kosasunthika".

Pomaliza

Ndikuyembekeza kuti pambuyo pa nkhaniyi, owerenga adzakhala akuvomereza kwambiri zida zowunikira zosasunthika ndipo adzafuna kuzigwiritsira ntchito pa chitukuko. Ngati muli ndi mafunso, ndife okonzeka nthawi zonse langizani ogwiritsa ntchito static analyzer PVS-Studio ndikuthandizira pakukhazikitsa kwake.

Palinso kukaikira kwina ngati kusanthula kwa static kungakhale kothandiza komanso kothandiza. Ndinayesera kuthetsa kukayikira kwakukulu kumeneku muzofalitsa "Zifukwa zowonetsera PVS-Studio static code analyzer mu ndondomeko ya chitukuko" [9].

Zikomo chifukwa cha chidwi chanu ndipo bwerani ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ndikuyesa PVS-Studio analyzer.

Maulalo owonjezera

  1. Andrey Karpov. Kodi ndingawone bwanji machenjezo osangalatsa omwe PVS-Studio analyzer amapangira C ndi C ++ code?
  2. Wikipedia. Theorem ya Rice.
  3. Andrey Karpov, Victoria Khanieva. Kugwiritsa ntchito kuphunzira pamakina pakuwunika kokhazikika kwa code source source.
  4. PVS-Studio. Zolemba. Zokonda zina zowunikira.
  5. Andrey Karpov. Makhalidwe a PVS-Studio analyzer pogwiritsa ntchito chitsanzo cha EFL Core Libraries, 10-15% zabodza.
  6. PVS-Studio. Zolemba. Kuponderezedwa kwakukulu kwa mauthenga a analyzer.
  7. Ivan Andryashin. Za m'mene tidayesera kusanthula kwa static pa projekiti yathu yoyeserera yophunzitsira ya X-ray endovascular operation.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Momwe gulu la PVS-Studio lidasinthira nambala ya Unreal Engine.
  9. Andrey Karpov. Zifukwa zodziwitsira static code analyzer PVS-Studio munjira yachitukuko.

Momwe mungakhazikitsire static code analyzer mu polojekiti ya cholowa popanda kutsitsa gulu

Ngati mukufuna kugawana nkhaniyi ndi omvera olankhula Chingerezi, chonde gwiritsani ntchito ulalo womasulira: Andrey Karpov. Momwe mungayambitsire static code analyzer mu polojekiti ya cholowa osati kufooketsa gulu.

Source: www.habr.com

Kuwonjezera ndemanga