Fa'afefea ona fa'atino se su'esu'ega fa'ailoga fa'amau i totonu o se galuega fa'agasolo e aunoa ma le fa'aleagaina o le 'au

Fa'afefea ona fa'atino se su'esu'ega fa'ailoga fa'amau i totonu o se galuega fa'agasolo e aunoa ma le fa'aleagaina o le 'au
E faigofie ona fa'ata'ita'i se su'esu'ega code static. Ae o le faʻatinoina, aemaise lava i le atinaʻeina o se galuega tele tuai, e manaʻomia ai le tomai. Afai e sese le faia, e mafai e le tagata suʻesuʻe ona faʻaopoopo galuega, faʻagesegese le atinaʻe, ma faʻavaivaia le 'au. Sei o tatou talanoa puupuu pe faʻafefea ona faʻafeiloaʻi lelei le tuʻufaʻatasia o suʻesuʻega faʻapitoa i le faʻagasologa o atinaʻe ma amata faʻaaogaina o se vaega o le CI / CD.

Faatomuaga

Talu ai nei na tosina atu ai loʻu mafaufau i le lomiga "Amataina i le Static Analysis e aunoa ma le lofituina o le 'au". I le tasi itu, o se tusiga lelei lea e aoga le faamasani i ai. I le isi itu, e foliga mai ia te aʻu e le o maua mai ai se tali atoatoa i le auala e faʻaogaina ai le faʻaogaina o suʻesuʻega faʻataʻitaʻi i se poloketi ma le tele. of legacy code Fai mai le tusiga e mafai ona e talia aitalafu faʻapitoa ma galue i luga o tulafono fou, ae leai se tali i le mea e fai i lenei aitalafu faʻapitoa mulimuli ane.

O le matou PVS-Studio 'au e ofoina atu lana vaaiga i lenei autu. Seʻi o tatou vaʻavaʻai pe faʻafefea ona tulaʻi mai le faʻafitauli o le faʻaaogaina o se static code analyzer i le mea muamua, pe faʻafefea ona foia lenei faʻafitauli, ma pe faʻafefea ona faʻasolosolo malie ona faʻaumatia aitalafu faʻapitoa.

Mataupu

E masani lava e le faigata ona faʻalauiloa ma vaʻai pe faʻafefea ona galue se suʻesuʻega static [1]. E mafai ona e vaʻai i ni mea sese mataʻutia poʻo ni faʻalavelave faʻafefe i le code. E mafai foi ona e toe faaleleia se mea, ae o le tele o tagata fai polokalame ua fiu.

O su'esu'ega fa'ata'ita'i uma e maua ai fa'amatalaga sese. Ole vaega lea ole faiga ole su'esu'ega ole static code, ma e leai se mea e mafai ona fai. I le tulaga lautele, o se faafitauli e le mafai ona foia, e pei ona faamaonia e Rice's theorem [2]. O le a le fesoasoani foi masini algorithms [3]. E tusa lava pe le mafai e se tagata ona taʻuina i taimi uma pe sese lenei poʻo lena code, e le tatau ona e faʻamoemoeina lenei mea mai le polokalame :).

O mea lelei sese e le o se faʻafitauli pe afai ua uma ona faʻatulagaina le suʻesuʻega faʻamau:

  • Fa'aleaogaina seti tulafono le talafeagai;
  • O nisi o su'esu'ega le talafeagai ua fa'aletonu;
  • Afai tatou te talanoa e uiga i le C poʻo le C ++, ona faʻailogaina lea o macros o loʻo i ai ni faʻavae faʻapitoa e mafua ai ona faʻaalia lapataiga le aoga i soʻo se mea e faʻaogaina ai ia macros;
  • O lo'o fa'ailogaina ia lava galuega e fa'atino ai gaioiga e tutusa ma galuega fa'atino (ona lava analogue memcpy poʻo lolomitusi) [4];
  • O fa'amatalaga sese e fa'agata fa'apitoa i le fa'aaogaina o fa'amatalaga;
  • Ma isi.

I lenei tulaga, e mafai ona tatou faʻamoemoeina se fua faatatau lelei sese maualalo e uiga i le 10-15% [5]. I se isi faaupuga, 9 mai le 10 suʻesuʻe lapataiga o le a faʻaalia ai se faʻafitauli moni i totonu o le code, poʻo le itiiti ifo o le "codes manogi malosi." Ioe, o lenei faʻaaliga e matua manaia lava, ma o le suʻega o se uo moni a le tagata fai polokalame.

Fa'afefea ona fa'atino se su'esu'ega fa'ailoga fa'amau i totonu o se galuega fa'agasolo e aunoa ma le fa'aleagaina o le 'au
O le mea moni, i se galuega tele, o le ata muamua o le a matua ese lava. O lo'o tu'uina atu e le tagata su'esu'e le faitau selau po'o le afe o lapata'iga mo le fa'ailoga tuai. E le mafai ona vave malamalama po o le fea o nei lapataiga e talafeagai ma o fea e le talafeagai. E le talafeagai le nofo i lalo ma amata ona feagai ma nei lapataiga uma, talu ai o le galuega autu i lenei mataupu o le a taofi mo aso poʻo vaiaso. E masani lava, e le mafai e se 'au ona gafatia se fa'aaliga fa'apea. Ole a iai fo'i le tele o fa'eseesega e fa'aleagaina ai le tala fa'asolopito. Ma o le vave fa'asa'oina o le tele o vaega i totonu o le fa'ailoga e mautinoa lava e i'u ai i ni fa'ailoga fou ma mea sese.

Ma o le mea pito sili ona taua, o sea tulaga i le taua faasaga i lapataiga e itiiti sona uiga. Ia ioe talu ai o le poloketi o loʻo faʻagasolo manuia mo le tele o tausaga, o le tele o faʻalavelave matuia i totonu ua uma ona faʻasaʻo. Ioe, o nei faʻatonuga e taugata tele, e tatau ona faʻapipiʻi, maua faʻamatalaga le lelei a tagata e uiga i bugs, ma isi. O se su'esu'ega fa'amautu e fesoasoani e fa'aleleia le tele o nei mea sese i le fa'asologa o le coding, vave ma taugofie. Ae i le taimi nei, i se tasi auala poʻo se isi, o nei mea sese ua faʻamautu, ma e masani ona iloa e le au suʻesuʻe ni mea sese e le taua i le tulafono tuai. Atonu e le fa'aogaina lenei fa'ailoga, e seasea fa'aaogaina, ma o se mea sese i totonu atonu e le o'o atu ai i ni fa'ai'uga iloga. Masalo o se mea o le ata mai le ki o le lanu sese, ae e le faʻalavelave i le faʻaogaina e se tasi o le oloa.

Ioe, e oo lava i nai mea sese o loo sese lava. Ma o nisi taimi o se mea sese e mafai ona natia ai se faʻafitauli moni. Ae ui i lea, o le tuʻuina atu o mea uma ma faʻaalu aso / vaiaso e feagai ai ma faaletonu e tau le faʻaalia i latou lava e foliga mai o se manatu masalosalo.

E vaʻavaʻai tagata fai polokalame, vaʻai, vaʻavaʻai i nei lapataiga uma e uiga i le tulafono tuai galue ... Ma latou manatu: e mafai ona tatou faia e aunoa ma se suʻesuʻega faʻapitoa. Tatou o e tusi ni galuega aoga fou.

I la latou lava ala, latou te sa'o. Latou te manatu e tatau ona latou aveesea muamua nei lapataiga uma. Na'o le taimi lena o le a mafai ai ona latou manuia mai le fa'aaogaina masani o le code analyzer. A leai, o lapataʻiga fou o le a na ona malemo i lapataʻiga tuai, ma e leai se tasi e gauai atu i ai.

O le fa'atusa lava lea e tasi e pei o lapata'iga tu'ufa'atasi. E le o se mafuaaga latou te fautuaina ai le tausia o le numera o lapataiga faʻapipiʻi i le 0. Afai e iai le 1000 lapataiga, a oʻo loa i le 1001, e leai se tasi e faʻalogo i ai, ma e le o manino le mea e suʻe ai lenei lapataiga fou.

Fa'afefea ona fa'atino se su'esu'ega fa'ailoga fa'amau i totonu o se galuega fa'agasolo e aunoa ma le fa'aleagaina o le 'au
O le mea sili ona leaga i lenei tala pe afai e faʻamalosia oe e se tasi mai luga i le taimi nei e faʻaaoga le suʻesuʻega o le code static. O lenei mea o le a naʻo le faʻavaivaia o le 'au, talu ai mai lo latou manatu o le ai ai le faʻalavelave faʻalavelave faʻapitoa e naʻo le faʻalavelave. E leai se tasi o le a tilotilo i lipoti a le au suʻesuʻe, ma o faʻaoga uma o le a naʻo "i luga o pepa". O na. I le tulaga aloaia, o suʻesuʻega e fausia i totonu o le DevOps process, ae i le faʻatinoga e le manuia ai se tasi. Sa matou faalogo i tala auiliili i faleoo mai tagata na auai i le konafesi. O sea poto masani e mafai ona faʻavaivaia ai le au fai polokalame mai le faʻaogaina o meafaigaluega faʻapitoa mo se taimi umi, pe a le faʻavavau.

Faʻatinoina ma faʻaumatia aitalafu faʻapitoa

O le mea moni, e leai se mea faigata pe fa'afefe e uiga i le fa'aofiina o su'esu'ega fa'apitoa e o'o lava i se galuega tuai tele.

CI / CD

E le gata i lea, o le suʻesuʻega e mafai ona avea vave ma vaega o le faʻaauauina o le atinaʻe. Mo se faʻataʻitaʻiga, o le tufatufaina atu o le PVS-Studio o loʻo i ai mea aoga mo le vaʻaia lelei o le lipoti i le faʻatulagaga e te manaʻomia, ma faʻamatalaga i tagata atiae na tusia vaega faʻafitauli o le code. Mo i latou e sili atu le fiafia i le faʻalauiloaina o le PVS-Studio mai le CI / CD system, ou te fautua atu ia e faamasani i le mea e fetaui. vaega faʻamaumauga ma se faasologa o tala:

Ae seʻi o tatou toe foʻi i le mataupu o le tele o faʻamatalaga sese i laʻasaga muamua o le faʻatinoina o meafaigaluega auiliiliga code.

Fa'amauina o aitalafu fa'atekinisi o lo'o iai ma le fa'atautaia o lapata'iga fou

O su'esu'ega fa'atauva'a fa'aonaponei fa'aonaponei e fa'atagaina oe e su'esu'e na'o lapata'iga fou e aliali mai i le fa'ailoga fou pe suia. O le faʻatinoga o lenei masini e eseese, ae o le ute e tutusa. I le PVS-Studio static analyzer, o lenei faʻatinoga o loʻo faʻatinoina e pei ona taua i lalo.

Ina ia vave amata faʻaaoga suʻesuʻega faʻapitoa, matou te fautua atu i tagata faʻaoga PVS-Studio e faʻaogaina le masini mo le taofiofia tele o lapataiga [6]. O le manatu lautele o le mea lea. Na faʻalauiloa e le tagata faʻaoga le suʻega ma maua le tele o lapataiga. Talu ai ona o se poloketi ua leva ona atinaʻe mo le tele o tausaga o loʻo ola, atinaʻe ma maua tupe, e foliga mai o le a le tele ni lapataiga i totonu o le lipoti e faʻaalia ai ni faaletonu ogaoga. I se isi faaupuga, ua uma ona faʻapipiʻi faʻalavelave faʻalavelave i se tasi auala poʻo se isi e faʻaaoga ai auala sili atu taugata pe faʻafetai i faʻamatalaga mai tagata faʻatau. E tusa ai ma lea, o mea uma e maua e le tagata suʻesuʻe i le taimi nei e mafai ona taʻua o aitalafu faʻapitoa, lea e le mafai ona taumafai e faʻaumatia vave.

E mafai ona e taʻu atu i le PVS-Studio e mafaufau i nei lapataiga e le talafeagai mo le taimi nei (faʻasaoina aitalafu faʻapitoa mo se taimi mulimuli ane), ma o le a le toe faʻaalia. E faia e le tagata suʻesuʻe se faila faʻapitoa e teu ai faʻamatalaga e uiga i mea sese e leʻi manaia. Ma o lea o le a tuʻuina atu e le PVS-Studio lapataiga mo naʻo le fou pe suia code. E le gata i lea, o nei mea uma e faʻatinoina ma le poto. Afai, mo se faʻataʻitaʻiga, e faʻaopoopoina se laina gaogao i le amataga o le faila code source, ona malamalama lea o le tagata suʻesuʻe, o le mea moni, e leai se mea ua suia, ma o le a faʻaauau pea ona filemu. O lenei faila fa'ailoga e mafai ona tu'u i totonu o se faiga fa'atonu. O le faila e tele, ae e le o se faʻafitauli, talu ai e leai se aoga e teu ai soo.

Ole taimi nei ole a va'aia e tagata fai polokalame uma lapataiga e na'o le fou pe suia code. O le mea lea, e mafai ona e amata faʻaaogaina le suʻega, e pei ona latou fai mai ai, mai le aso e sosoo ai. Ma e mafai ona e toe foʻi i aitalafu faʻapitoa mulimuli ane, ma faʻasolosolo faʻasaʻo mea sese ma faʻapipiʻi le auiliiliga.

O lea la, o le faʻafitauli muamua i le faʻatinoina o le suʻega i se galuega tuai tele ua foia. Se'i o tatou va'ai po'o le a le mea e fai ile aitalafu fa'apitoa.

Fa'alelei bug ma toe fa'afoliga

O le mea pito sili ona faigofie ma sili ona masani o le fa'aavanoaina o se taimi e iloilo ai le tele o le taofiofia o lapataiga a le au su'esu'e ma faasolosolo malie ona taulimaina. I se mea e tatau ona e faʻaleleia mea sese i le code, i se mea e tatau ona e toe faʻafoʻi e taʻu atu i le tagata suʻesuʻe e le o faʻafitauli le code. Fa'ata'ita'iga faigofie:

if (a = b)

O le tele o C++ compiler ma au suʻesuʻe faitio e uiga i ia code, talu ai e maualuga le avanoa latou te mananao moni e tusi (a == b). Ae o loʻo i ai se maliliega e leʻi tautalagia, ma e masani ona matauina i totonu o faʻamaumauga, afai e iai ni puipui faaopoopo, ona manatu ai lea o le tagata fai polokalame na tusia ma le loto i ai sea code, ma e leai se manaʻoga e palauvale. Mo se faʻataʻitaʻiga, i le PVS-Studio faʻamaumauga mo suʻesuʻega V559 (CWE-481) ua manino le tusiaina o le laina lea o le a manatu sa'o ma saogalemu:

if ((a = b))

O le isi faataitaiga. Ua galo i lenei C++ code? malologa pe leai?

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

O le PVS-Studio analyzer o le a tuʻuina atu se lapataiga iinei V796 (CWE-484). Atonu e le o se mea sese, o le a le tulaga e tatau ona e tuʻuina atu i le parser se faʻamatalaga e ala i le faʻaopoopoina o le uiga [[paʻuvale]] pe mo se faataitaiga __uiga__((pa'ū)):

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

E mafai ona faapea o ia suiga code e le faaleleia ai le pusa. Ioe, e moni lenei mea, ae e lua mea aoga. Muamua, o le lipoti a le au suʻesuʻe e faʻaumatia ai mea sese. Lona lua, o le tulafono e sili atu ona malamalama mo tagata o loʻo aʻafia i lona tausiga. Ma e taua tele lenei mea! Mo lenei lava mea, e aoga le faia o nai mea laiti toe faʻaleleia e faʻamalamalama atili ai le code ma faigofie ona tausia. Talu ai e le malamalama le tagata suʻesuʻe pe manaʻomia le "malosi" pe leai, o le a le manino foi i tagata fai polokalame.

E le gata i le fa'aleleia o pusa ma toe fa'afo'i, e mafai ona e taofia fa'amanino fa'amatalaga sese. O nisi o su'esu'ega le talafeagai e mafai ona fa'aletonu. Mo se faʻataʻitaʻiga, e manatu se tasi e leai se aoga o lapataiga V550 e uiga i le fa'atusatusaina o tau fa'alele/faalua. Ma o nisi e faʻavasegaina i latou e taua ma agavaa mo suʻesuʻega [7]. O fea lapataiga e manatu e talafeagai ae o fea e le o iai i le vaega o atinaʻe e filifili.

E i ai isi auala e taofia ai faʻasalalauga sese. Mo se faʻataʻitaʻiga, faʻailoga macro na taʻua muamua. O nei mea uma o loʻo faʻamatalaina atili i le faʻamaumauga. O le mea pito sili ona taua o le malamalama lea afai e te faʻasolosolo malie ma faʻasolosolo faʻaogaina le galue ma mea sese, e leai se mea e leaga ai. O le tele o lapataiga le fiafia e mou atu pe a maeʻa le faʻatulagaina, ma naʻo nofoaga e manaʻomia ai suʻesuʻega faʻaeteete ma nisi suiga i le tulafono e tumau.

E le gata i lea, matou te fesoasoani i taimi uma ia matou tagata faʻatau e setiina le PVS-Studio pe a tulaʻi mai ni faʻafitauli. E lē gata i lea, sa iai foʻi tulaga na tatou aveesea ai lapataʻiga sesē ma faasaʻoina mea sesē [8]. I le tulaga lava, na ou filifili e taʻua o lenei filifiliga mo le faʻalauteleina o le galulue faʻatasi e mafai foi :).

Metotia ratchet

O lo'o i ai se isi auala mata'ina e fa'aleleia atili ai le tulaga lelei o le code e ala i le fa'ate'aina o le lapataiga fa'apitoa. O le pito i lalo o le numera o lapataiga e mafai ona faʻaitiitia.

Fa'afefea ona fa'atino se su'esu'ega fa'ailoga fa'amau i totonu o se galuega fa'agasolo e aunoa ma le fa'aleagaina o le 'au

Le numera o lapataiga na tuʻuina atu e le static analyzer o loʻo faʻamaumau. O le faitotoa lelei ua faʻatulagaina i se auala e mafai ai nei ona e ulufale i se code e le faʻateleina ai le numera o gaioiga. O le iʻuga, o le faʻagasologa o le faʻaitiitia o le numera o faʻailoga e amata i le fetuunaiga o le suʻesuʻe ma faʻasaʻo mea sese.

E tusa lava pe manaʻo se tagata e faʻatau sina mea itiiti ma filifili e pasi le faitotoa lelei e le o le faʻaumatiaina o lapataiga i lana tulafono fou, ae e ala i le faʻaleleia o le tulafono tuai lona tolu, e le o se mea taufaafefe. E tutusa uma, o le ratchet e taamilo i le tasi itu, ma faasolosolo malie le numera o faaletonu o le a faʻaitiitia. E tusa lava pe le manaʻo se tagata e faʻaleleia ona lava faaletonu fou, e tatau lava ona ia faʻaleleia se mea i le tulafono tuaoi. I se taimi, o auala faigofie e faʻaitiitia ai le numera o lapataiga e muta, ma e oʻo mai le taimi o le a faʻamautu ai mea moni.

O lenei metotia o loʻo faʻamatalaina atili faʻamatalaga i se tala sili ona manaia e Ivan Ponomarev "Fa'atino su'esu'ega fa'ata'atia i le fa'agasologa, nai lo le fa'aaogaina e su'e ai fa'aletonu", lea ou te fautuaina e faitau i soʻo se tasi e fiafia i le faʻaleleia o le code code.

O le tusitala o le tusiga e iai foi se lipoti i lenei autu: "Fa'aauau su'esu'ega tumau".

iʻuga

Ou te faʻamoemoe pe a maeʻa lenei tusiga, o le a sili atu ona talia e le aufaitau meafaigaluega suʻesuʻega faʻapitoa ma o le a mananao e faʻatinoina i totonu o le atinaʻe. Afai ei ai ni au fesili, matou te saunia i taimi uma fautua tagata faʻaoga o la matou suʻesuʻega faʻamautu PVS-Studio ma fesoasoani i lona faʻatinoga.

E iai isi masalosaloga masani pe mafai ona faigofie ma aoga su'esu'ega fa'amau. Sa ou taumafai e aveese le tele o nei masalosaloga i le lomiga "Mafuaaga e faʻafeiloaʻi ai le PVS-Studio static code analyzer i le faagasologa o le atinaʻe" [9].

Faafetai mo lou gauai mai ma o mai скачать ma taumafai le PVS-Studio analyzer.

So'oga fa'aopoopo

  1. Andrey Karpov. E faʻafefea ona ou vave vaʻai i lapataiga mataʻutia o loʻo gaosia e le PVS-Studio analyzer mo le C ma le C ++ code?
  2. Wikipedia. Fa'atonuga a Rice.
  3. Andrey Karpov, Victoria Khanieva. Fa'aaogāina o masini a'oa'oga ile su'esu'ega fa'ata'atia ole fa'ailoga puna ole polokalame.
  4. PVS-Studio. Fa'amaumauga. Fa'aopoopo fa'asologa o su'esu'ega.
  5. Andrey Karpov. Uiga o le PVS-Studio analyzer e faʻaaoga ai le faʻataʻitaʻiga o EFL Core Libraries, 10-15% mea sese.
  6. PVS-Studio. Fa'amaumauga. Fa'asao tele o fe'au su'esu'e.
  7. Ivan Andryashin. E uiga i le auala na matou faʻataʻitaʻia ai suʻesuʻega faʻapitoa i la matou poloketi o se simulator faʻaleaʻoaʻoga o le X-ray endovascular taotoga.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Faʻafefea ona faʻaleleia e le vaega o le PVS-Studio le Unreal Engine code.
  9. Andrey Karpov. Mafuaaga e faʻafeiloaʻi ai le static code analyzer PVS-Studio i le faʻagasologa o le atinaʻe.

Fa'afefea ona fa'atino se su'esu'ega fa'ailoga fa'amau i totonu o se galuega fa'agasolo e aunoa ma le fa'aleagaina o le 'au

Afai e te manaʻo e faʻasoa lenei tusiga i se faʻalogo Igilisi, faʻamolemole faʻaoga le fesoʻotaʻiga faʻaliliu: Andrey Karpov. Fa'afefea ona fa'ailoa se su'esu'ega fa'amautu fa'ailoga i se galuega fa'agasolo ae aua le fa'avaivaia le 'au.

puna: www.habr.com

Faaopoopo i ai se faamatalaga