Su'esu'ega fa'amau - mai le folasaga i le tu'ufa'atasiga

Ua fiu i le toe iloiloina o tulafono laiti po o le debugging, o nisi taimi e te mafaufau i le auala e faafaigofie ai lou olaga. Ma a maeʻa ona suʻesuʻeina sina mea itiiti, pe faʻafuaseʻi ona tautevateva i luga, e mafai ona e vaʻaia le fuaitau faʻataulāitu: "Suʻesuʻega faʻamau." Se'i va'ai po'o le a lea mea ma pe fa'afefea ona fegalegaleai ma lau poloketi.

Su'esu'ega fa'amau - mai le folasaga i le tu'ufa'atasiga
O le mea moni, afai e te tusitusi i soʻo se gagana faʻaonaponei, e aunoa ma le iloaina, na e faʻatautaia e ala i se suʻesuʻega faʻamau. O le mea moni o soʻo se tagata faʻaonaponei e tuʻuina atu, e tusa lava pe itiiti, seti o lapataiga e uiga i faʻafitauli faʻafitauli i le code. Mo se faʻataʻitaʻiga, pe a tuʻufaʻatasia le C++ code i Visual Studio atonu e te vaʻai i mea nei:

Su'esu'ega fa'amau - mai le folasaga i le tu'ufa'atasiga
I lenei galuega faatino tatou te iloa ai le fesuiaiga var e le'i fa'aaogaina lava i so'o se mea i le galuega. O le mea moni la, e toetoe lava o taimi uma e te faʻaaogaina ai se suʻesuʻega code static faigofie. Ae ui i lea, e le pei o tagata suʻesuʻe faʻapolofesa e pei o Coverity, Klocwork poʻo PVS-Studio, o lapataiga e tuʻuina atu e le tagata faʻapipiʻi e mafai ona faʻaalia ai naʻo ni nai faʻafitauli.

Afai e te le iloa mautinoa pe o le a le suʻesuʻega faʻapitoa ma pe faʻapefea ona faʻatinoina, faitau lenei tusigae aoao atili e uiga i lenei metotia.

Aisea e te manaʻomia ai suʻesuʻega faʻapitoa?

I se faapuupuuga: faʻavavevave ma faʻafaigofie.

O su'esu'ega fa'ata'atia e mafai ai ona e su'eina le tele o fa'afitauli eseese i le fa'ailoga: mai le fa'aoga sese o le fa'aogaina o le gagana e o'o atu i le fa'aoga sese. Mo se faataitaiga, nai lo le

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

Na e tusia le code lea:

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

E pei ona e vaʻai, o loʻo i ai se faʻailoga i le laina mulimuli. Mo se faʻataʻitaʻiga, ua tuʻuina atu e le PVS-Studio le lapataiga lenei:

V537 Mafaufau e toe iloilo le sa'o o le fa'aogaina o mea 'y'.

Afai e te manaʻo e tuʻi ou lima i lenei mea sese, taumafai se faʻataʻitaʻiga saunia i le Compiler Explorer: *tagi*.

Ma e pei ona e malamalama i ai, e le o taimi uma e mafai ai ona gauai atu i ia vaega o le code i le taimi lava lena, ma ona o lenei mea, e mafai ona e nofo i lalo e faʻapipiʻi mo se itula lelei, ma mafaufau pe aisea e matua ese ai mea uma.

Ae ui i lea, e manino lava o se mea sese. Ae fa'afefea pe a tusia e le tagata fa'atupuina le code suboptimal ona ua galo ia te ia se fa'a'ole'ole o le gagana? Pe na faʻatagaina foi i totonu o le code amio e le faamalamalamaina? O le mea e leaga ai, o ia tulaga e masani lava ma o le leona o le taimi e faʻaalu i le faʻaogaina o tulafono faʻapitoa o loʻo i ai typos, mea sese masani poʻo amioga e le faʻamalamalamaina.

Mo nei tulaga na fa'aalia ai su'esu'ega fa'amau. O se fesoasoani lenei mo le atinaʻe o le a faʻasino atu faʻafitauli eseese i totonu o le code ma faʻamatalaina i totonu o faʻamaumauga pe aisea e le tatau ai ona tusia i lenei auala, o le a le mea e mafai ona taʻitaʻia ai ma pe faʻafefea ona faʻaleleia. O se fa'ata'ita'iga lea e ono foliga mai: *tagi*.

E mafai ona e mauaina nisi mea sese e mafai ona iloa e le tagata suʻesuʻe i tala:

O lea la ua e faitau i lenei mea ma ua e mautinoa i aoga o suʻesuʻega faʻapitoa, atonu e te manaʻo e faʻataʻitaʻi. Ae o fea e amata ai? E fa'afefea ona tu'ufa'atasia se meafaigaluega fou i lau galuega o lo'o iai nei? Ma faʻafefea ona faʻafeiloaʻi le 'au ia te ia? O le ae mauaina tali i nei fesili i lalo.

Manatua: Ole su'esu'ega fa'amautu e le suitulaga pe fa'aleaogaina se mea aoga e pei ole iloiloga ole code. E faaatoatoaina ai lenei faagasologa, e fesoasoani e matau ma faasa'o mea sese, le sa'o, ma mamanu matautia i le taimi muamua. E sili atu ona aoga le taulaʻi atu i faʻamatalaga tulafono i luga o algorithms ma faʻamalamalama manino, nai lo le suʻeina o se faʻamaufaʻailoga sese poʻo faitau galuega fa'atusatusa le manaia.

0. Ia iloa le meafaigaluega

E amata uma i se fa'ata'ita'iga version. O le mea moni, e faigata ona filifili e faʻafeiloaʻi se mea i totonu o le atinaʻeina o le faagasologa pe afai e te leʻi vaʻaia muamua le meafaigaluega. O le mea lea, o le mea muamua e tatau ona e faia o le download lomiga faataitai.

O mea o le a e aʻoaʻoina i lenei laasaga:

  • O a auala e fegalegaleai ai ma le su'esu'e;
  • E fetaui le su'esu'e ma lou siosiomaga atina'e?
  • O a fa'afitauli o lo'o i ai nei i au galuega fa'atino?

A maeʻa ona e faʻapipiʻi mea uma e te manaʻomia, o le mea muamua e tatau ona e faia o le faʻatautaia lea o se auiliiliga o le galuega atoa (pupuni, Linux, macOS). I le tulaga o le PVS-Studio i le Visual Studio o le a e vaʻai i se ata tutusa (faʻapipiʻi):

Su'esu'ega fa'amau - mai le folasaga i le tu'ufa'atasiga
O le mea moni e masani lava ona tuʻuina atu e le au suʻesuʻe faʻataʻitaʻi se numera tele o lapataiga mo poloketi ma se faʻavae tele. E leai se mana'oga e toe fa'aleleia uma, talu ai o lo'o galue lau poloketi, o lona uiga o nei fa'afitauli e le taua. Ae peitai, o oe e mafai ona e tilotilo i lapataiga sili ona manaia ma faasa'o pe a tatau ai. Ina ia faia lenei mea, e tatau ona e faamama le gaioiga ma tuʻu naʻo feʻau sili ona faʻatuatuaina. I le PVS-Studio plugin mo Visual Studio, e faia lenei mea e ala i le faʻamamaina e ala i tulaga sese ma vaega. Mo le sa'o atoatoa, tu'u na'o maualuga и Aoao (e mafai foi ona kiliki):

Su'esu'ega fa'amau - mai le folasaga i le tu'ufa'atasiga
Ioe, 178 lapataiga e sili atu le faigofie ona vaʻaia nai lo le tele o afe ...

I tabs feoloolo и maulalo E masani ona i ai lapataiga lelei, ae o nei vaega e aofia ai na diagnostics e itiiti ifo le saʻo (faʻatuatuaina). E mafai ona maua nisi fa'amatalaga e uiga i tulaga lapata'i ma filifiliga mo le galue i lalo ole Windows: *tagi*.

O le toe iloiloina lelei o mea sese e sili ona manaia (ma faʻasaʻo lelei) e aoga taofia lapataiga o totoe. E mana'omia lenei mea ina ia aua ne'i mou atu lapata'iga fou i lapataiga tuai. E le gata i lea, o le static analyzer o se fesoasoani mo le polokalame, ae le o se lisi o mea sese. 🙂

1. Otometi

A maeʻa ona faʻamasani, ua oʻo i le taimi e faʻapipiʻi ai plugini ma tuʻufaʻatasia ile CI. E tatau ona faia lenei mea a'o le'i amata ona fa'aogaina e le au fai polokalame le su'esu'ega static. O le mea moni e mafai e le tagata fai polokalame ona galo e mafai ona suʻesuʻe pe le manaʻo e fai. Ina ia faia lenei mea, e tatau ona e faia se suʻesuʻega mulimuli o mea uma ina ia le mafai ona oʻo atu le code e leʻi faʻataʻitaʻiina i le lala atinaʻe lautele.

O mea o le a e aʻoaʻoina i lenei laasaga:

  • O a filifiliga otometi e maua e le meafaigaluega;
  • E fetaui le su'esu'e ma lau faiga fa'apotopotoga?

Talu ai e le o iai ni faʻamaumauga atoatoa, o nisi taimi e tatau ona e tusi i totonu lagolago. Ole mea masani lea ma matou te fiafia e fesoasoani ia oe. 🙂

Se'i o tatou aga'i atu i auaunaga fa'aauau (CI). Soʻo se suʻesuʻega e mafai ona faʻatinoina i totonu ia i latou e aunoa ma ni faʻafitauli matuia. Ina ia faia lenei mea, e tatau ona e faia se tulaga ese i le paipa, lea e masani ona maua pe a uma le fausiaina ma le iunite suʻega. E faia lenei mea i le faʻaaogaina o mea faʻaoga eseese. Mo se faʻataʻitaʻiga, o le PVS-Studio o loʻo tuʻuina atu mea aoga nei:

Ina ia tuʻufaʻatasia suʻesuʻega ile CI, e tatau ona e faia ni mea se tolu:

  • Fa'apipi'i le su'esu'e;
  • Su'esu'ega tamo'e;
  • Tuuina atu i'uga.

Mo se faʻataʻitaʻiga, e faʻapipiʻi le PVS-Studio i luga o Linux (Debian-base), e tatau ona e faʻatinoina tulafono nei:

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-studio

I luga o faiga faʻaoga Windows, e leai se auala e faʻapipiʻi ai le suʻesuʻe mai le pule o pusa, ae e mafai ona faʻapipiʻi le suʻesuʻe mai le laina o le poloaiga:

PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications

E mafai ona e faitau atili e uiga i le faʻaogaina o le PVS-Studio i luga o faiga faʻaoga Windows *iinei*.

A maeʻa faʻapipiʻi, e tatau ona e faʻatautaia saʻo le auiliiliga. Ae ui i lea, e fautuaina e faia lenei mea pe a maeʻa le tuʻufaʻatasia ma suʻega ua pasia. E mafua ona o su'esu'ega fa'amau e masani ona fa'aluaina le umi nai lo le tu'ufa'atasiga.

Talu ai ona o le faʻalauiloaina o le auala e faʻalagolago i luga o le faʻavae ma galuega faʻatino, o le a ou faʻaalia le filifiliga mo C ++ (Linux) e fai ma faʻataʻitaʻiga:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w

O le poloaiga muamua o le a faia le auiliiliga, ma le lona lua teutusifa'aliliuina le lipoti i le fa'asologa o tusitusiga, fa'aali i luga o le lau ma toe fa'afo'i mai le fa'ailoga e ese mai le 0 pe a iai ni lapataiga. O se masini fa'apenei e mafai ona fa'aoga lelei e poloka ai se fale pe a iai ni fa'amatalaga sese. Ae ui i lea, e mafai lava ona e aveese le fuʻa -w ma aua neʻi poloka se faapotopotoga o iai lapataʻiga.

Manatua: E le faigofie le fa'atulagaina o tusitusiga. Ua saunia faigofie e fai ma faataitaiga. Fa'alogo i se fa'asologa o lipoti e sili atu ona manaia - FullHtml. E fa'atagaina oe e fa'afeiloa'i i le code.

E mafai ona e faitau atili e uiga i le setiina o suʻesuʻega ile CI ile tusiga "PVS-Studio ma Fa'aauau Fa'atasi"(Pupuni) poʻo"Faʻafefea ona faʻatutuina le PVS-Studio i Travis CI"(Linux).

Lelei, ua e fa'atulagaina le su'esu'e i luga o le fale faufale. I le taimi nei, afai e tuʻuina atu e se tasi le code e leʻi faʻamaonia, o le a le manuia le faʻamaoniga, ma o le a mafai ona e iloa le faʻafitauli, peitaʻi, e leʻo atoatoa lenei mea, talu ai e sili atu le lelei o le siakiina o le poloketi e leʻi maeʻa ona tuʻufaʻatasia lala, ae i luma atu, i le tulaga talosaga toso A.

I se tulaga lautele, o le faʻatulagaina o se suʻesuʻega talosaga toso e le ese tele mai le faʻalauiloaina masani o se auiliiliga ile CI. Se'i vagana le mana'oga e maua se lisi o faila ua suia. E masani ona maua nei mea e ala i le fesiligia o eseesega i le va o lala e faʻaaoga ai le git:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

Ole taimi nei e te mana'omia le tu'uina atu o lenei lisi o faila ile su'esu'ega e fai ma fa'aoga. Mo se faʻataʻitaʻiga, i le PVS-Studio o loʻo faʻatinoina e faʻaaoga ai le fuʻa -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

E mafai ona e iloa atili e uiga i le suʻeina o talosaga toso *iinei*. E tusa lava pe le o iai lau CI i luga o le lisi o auʻaunaga o loʻo taʻua i le tusiga, o le ae mauaina le vaega lautele e tuʻuina atu i le talitonuga o lenei ituaiga o auʻiliʻiliga aoga.

E ala i le faʻatulagaina o auʻiliʻiliga o talosaga toso, e mafai ona e poloka commit o loʻo i ai lapataiga, ma faʻatupuina ai se tuaoi e le mafai ona sopoia e le code e leʻi faʻamaonia.

E mautinoa lava le lelei o nei mea uma, ae ou te manaʻo e mafai ona vaʻai i lapataiga uma i se nofoaga e tasi. E le gata mai le static analyzer, ae mai le iunite suʻega poʻo mai le dynamic analyzer. E i ai auaunaga eseese ma plugins mo lenei. PVS-Studio, mo se faʻataʻitaʻiga, ei ai plugin mo le tuʻufaʻatasia i le SonarQube.

2. Fa'atasi i luga o masini fa'atupuina

Ua oo i le taimi e faʻapipiʻi ma faʻapipiʻi le suʻesuʻega mo le faʻaogaina o atinaʻe i aso uma. E oo atu i le taimi lea ua e masani i le tele o auala e galue ai, o lea e mafai ona taʻua o le vaega sili ona faigofie.

I le avea ai ma filifiliga sili ona faigofie, e mafai e le au atinaʻe ona faʻapipiʻi le suʻesuʻega talafeagai latou lava. Ae ui i lea, o le a tele se taimi e alu ai ma faʻalavelaveina i latou mai le atinaʻe, o lea e mafai ai ona e faʻaogaina lenei faagasologa e faʻaaoga ai se faʻapipiʻi ma fuʻa talafeagai. Mo PVS-Studio e eseese fuʻa mo le faʻapipiʻiina otometi. Ae ui i lea, o loʻo i ai pea pule o pusa, mo se faʻataʻitaʻiga, Chocolatey (Windows), Homebrew (macOS) poʻo le tele o filifiliga mo Linux.

Ona e manaʻomia lea e faʻapipiʻi plugins talafeagai, mo se faʻataʻitaʻiga mo potu vaaia, MANATU, Tietie ma isi tulaga faapena

3. Fa'aoga i aso uma

I lenei laʻasaga, ua oʻo i le taimi e fai ai ni nai upu e uiga i auala e faʻavave ai le suʻega i le faʻaaogaina i aso uma. O se su'esu'ega atoa o le poloketi atoa e tele se taimi e alu ai, ae fa'afia ona tatou suia fa'ailoga i le galuega atoa i le taimi e tasi? E foliga mai e le o iai se toe fa'afoliga tele naua o le a vave ona a'afia ai le fa'avae code atoa. Ole numera o faila e suia ile taimi e seasea sili atu ile sefulu, o lea e talafeagai ai le suʻeina. Mo se tulaga faapena e i ai faiga su'esu'e fa'aopoopo. Ae aua e te popole, e le o se isi meafaigaluega. O se faiga faʻapitoa lea e mafai ai ona e suʻeina naʻo faila faila ma latou faʻalagolago, ma e tupu otometi pe a uma le fausiaina pe afai o loʻo e galue i se IDE ma faʻapipiʻi le plugin.

Afai e iloa e le tagata su'esu'e ni fa'afitauli i le code na suia talu ai nei, o le a lipotia e ia lava. Mo se faʻataʻitaʻiga, PVS-Studio o le a taʻu atu ia te oe e uiga i lenei mea e faʻaaoga ai se mataala:

Su'esu'ega fa'amau - mai le folasaga i le tu'ufa'atasiga
Ioe, e le lava le taʻu atu i tagata atiae e faʻaaoga le meafaigaluega. E tatau ona tatou ta'u atu ia i latou po o le a lea ma pe faapefea. O iinei, mo se faʻataʻitaʻiga, o tala e uiga i se amataga vave mo le PVS-Studio, ae e mafai ona e mauaina aʻoaʻoga tutusa mo soʻo se meafaigaluega e te manaʻo ai:

O ia tusiga e maua ai faʻamatalaga uma e manaʻomia mo le faʻaaogaina i aso uma ma e le tele se taimi e alu ai. 🙂

E oo lava i le tulaga o le iloaina o le meafaigaluega, matou te taofiofia le tele o lapataiga i le taimi o se tasi o faʻalauiloa muamua. Ae paga lea, e le atoatoa le au suʻesuʻe static, o lea mai lea taimi i lea taimi latou te tuʻuina atu faʻamatalaga sese. E masani ona faigofie ona taofiofia mo se faʻataʻitaʻiga, i le PVS-Studio plugin mo Visual Studio e te manaʻomia le kiliki i le tasi faʻamau:

Su'esu'ega fa'amau - mai le folasaga i le tu'ufa'atasiga
Ae ui i lea, e mafai ona e faia ni mea e sili atu nai lo na o le taofiofia. Mo se faʻataʻitaʻiga, e mafai ona e lipotia se faʻafitauli e lagolago. Afai e mafai ona faʻasaʻo le mea sese, ona faʻafouga lea i le lumanaʻi e mafai ona e matauina o taimi uma lava e itiiti ma itiiti ni faʻamatalaga sese faʻapitoa i lau codebase.

A maeʻa faʻatasi

O lea ua matou uia laʻasaga uma o le tuʻufaʻatasia o suʻesuʻega faʻapitoa i le faʻagasologa o le atinaʻe. E ui i le taua o le faʻatulagaina o ia meafaigaluega ile CI, o le nofoaga sili ona taua e faʻatautaia ai o le komepiuta a le tagata atiaʻe. A uma mea uma, o se suʻesuʻega faʻapitoa e le o se faʻamasino e fai mai i se mea mamao mai ia te oe e le lelei le code. I se isi itu, o se fesoasoani e taʻu atu ia te oe pe ua e vaivai ma faamanatu ia te oe pe ua galo ia te oe se mea.

E moni, e aunoa ma le fa'aaogaina masani, o su'esu'ega fa'ata'atia e foliga mai e le fa'afaigofie tele le atina'e. A uma mea uma, o lona aoga autu mo se atinaʻe e le o le tele o le suʻeina o vaega lavelave ma fefinauai o le tulafono, ae i lo latou vave iloa. Talitonu o le mauaina o se faʻafitauli pe a uma ona tuʻuina atu faʻataʻitaʻiga mo suʻega e le gata e le fiafia, ae e alu tele foi le taimi. Su'esu'ega fa'amau, pe a fa'aoga masani, va'ai sa'o i suiga uma i lau komepiuta ma lipoti atu nofoaga masalomia a'o galue i le code.

Ma afai o oe poʻo au uo e le o mautinoa pe aoga le faʻatinoina o le suʻega, ona ou fautua atu lea ia e amata nei ona faitau le tusiga "Mafuaaga e faʻafeiloaʻi ai le static code analyzer PVS-Studio i le faʻagasologa o le atinaʻe". O loʻo faʻaalia ai popolega masani o tagata atiaʻe e faʻapea o suʻesuʻega faʻapitoa o le a alu ai o latou taimi ma isi.

Su'esu'ega fa'amau - mai le folasaga i le tu'ufa'atasiga

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: Maxim Zvyagintsev. Static Analysis: Mai le Amataina i le Tuʻufaʻatasia.

puna: www.habr.com

Faaopoopo i ai se faamatalaga