Kusanthula kosasunthika - kuyambira koyambira mpaka kuphatikiza

Wotopa ndi kubwereza kachidindo kosatha kapena kukonza zolakwika, nthawi zina mumaganiza za momwe mungachepetsere moyo wanu. Ndipo mutatha kufufuza pang'ono, kapena mwangozi mwangozi, mutha kuwona mawu amatsenga: "Kusanthula mosasunthika." Tiyeni tiwone chomwe chiri komanso momwe chingagwirizane ndi polojekiti yanu.

Kusanthula kosasunthika - kuyambira koyambira mpaka kuphatikiza
M'malo mwake, ngati mulemba m'chinenero chamakono, ndiye kuti, osazindikira, munayendetsa pogwiritsa ntchito static analyzer. Chowonadi ndi chakuti wophatikiza wamakono amapereka, ngakhale pang'ono, machenjezo okhudza mavuto omwe angakhalepo mu code. Mwachitsanzo, mukapanga kachidindo ka C ++ mu Visual Studio mutha kuwona zotsatirazi:

Kusanthula kosasunthika - kuyambira koyambira mpaka kuphatikiza
Mu lipoti ili tikuwona kuti kusinthaku var sichinagwiritsidwe ntchito kulikonse. Chifukwa chake, kwenikweni, nthawi zonse mumagwiritsa ntchito chosanthula chosavuta cha static code. Komabe, mosiyana ndi osanthula akatswiri monga Coverity, Klocwork kapena PVS-Studio, machenjezo operekedwa ndi compiler angangosonyeza mavuto ochepa.

Ngati simukudziwa motsimikiza kuti static analysis ndi chiyani komanso momwe mungagwiritsire ntchito, werengani nkhaniyikuti mudziwe zambiri za njira iyi.

N'chifukwa chiyani mukufunikira static analysis?

Mwachidule: kufulumizitsa ndi kuphweka.

Kusanthula kosasunthika kumakupatsani mwayi wopeza zovuta zosiyanasiyana mu code: kuchokera pakugwiritsa ntchito molakwika zilankhulo kupita ku ma typos. Mwachitsanzo, m'malo

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

Munalemba khodi ili:

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

Monga mukuwonera, pali typo pamzere womaliza. Mwachitsanzo, PVS-Studio ikupereka chenjezo ili:

V537 Ganizirani kuunikanso kulondola kwa kagwiritsidwe ntchito ka chinthu cha 'y'.

Ngati mukufuna kuyika manja anu mu cholakwika ichi, yesani chitsanzo chokonzekera mu Compiler Explorer: *kulira*.

Ndipo monga mukumvetsetsa, sizingatheke nthawi zonse kumvetsera zigawo zotere za code nthawi yomweyo, ndipo chifukwa cha izi, mukhoza kukhala pansi ndikuwongolera kwa ola labwino, ndikudabwa chifukwa chake zonse zimagwira ntchito modabwitsa.

Komabe, izi ndizolakwika. Nanga bwanji ngati wopangayo alemba nambala yocheperako chifukwa wayiwala chilankhulo china? Kapena analola izo mu code khalidwe losadziwika? Tsoka ilo, milandu yotereyi ndi yofala kwambiri ndipo nthawi yomwe mkango umagwiritsidwa ntchito nthawi zambiri umatha kukonza zolakwika zomwe zili ndi typos, zolakwika wamba kapena machitidwe osadziwika.

Ndi pazimenezi pamene kusanthula kosasunthika kudawonekera. Uyu ndi wothandizira kwa wopanga mapulogalamu omwe adzawonetsa mavuto osiyanasiyana mu code ndikufotokozera muzolemba chifukwa chake sikoyenera kulemba motere, zomwe zingayambitse komanso momwe angakonzere. Nachi chitsanzo cha momwe zingawonekere: *kulira*.

Mutha kupeza zolakwika zambiri zomwe analyzer angazindikire m'nkhani:

Tsopano popeza mwawerenga nkhaniyi ndipo mwatsimikiza za ubwino wa kusanthula kosasintha, mungafune kuyesa. Koma kuti tiyambire pati? Momwe mungaphatikizire chida chatsopano mu polojekiti yanu yamakono? Ndipo momwe mungadziwitse gululo kwa iye? Mudzapeza mayankho a mafunsowa pansipa.

Zindikirani: Kusanthula kosasunthika sikulowa m'malo kapena kuletsa chinthu chofunikira monga kuwunika kwa ma code. Imakwaniritsa izi, kuthandiza kuzindikira ndi kukonza zolakwika, zolakwika, ndi mapangidwe owopsa pasadakhale. Zimakhala zopindulitsa kwambiri kuyang'ana pa ndemanga zama code pa ma aligorivimu ndi kumveka bwino kwa ma code, m'malo moyang'ana mabatani olakwika kapena werengani ntchito zofananitsa zosasangalatsa.

0. Kudziwa chida

Zonse zimayamba ndi mtundu woyeserera. Zowonadi, ndizovuta kusankha kuyambitsa china chake munjira yachitukuko ngati simunachiwonepo chidacho. Chifukwa chake, chinthu choyamba muyenera kuchita ndikutsitsa mtundu woyeserera.

Zomwe muphunzire pa nthawiyi:

  • Ndi njira ziti zolumikizirana ndi analyzer;
  • Kodi analyzer imagwirizana ndi malo anu otukuka?
  • Ndi mavuto otani omwe alipo muntchito zanu?

Mukayika zonse zomwe mukufuna, chinthu choyamba muyenera kuchita ndikusanthula polojekiti yonse (Windows, Linux, macOS). Pankhani ya PVS-Studio mu Visual Studio muwona chithunzi chofananira (chodina):

Kusanthula kosasunthika - kuyambira koyambira mpaka kuphatikiza
Chowonadi ndi chakuti ma static analyzers nthawi zambiri amapereka machenjezo ambiri pama projekiti okhala ndi ma code ambiri. Palibe chifukwa chokonzekera zonse, popeza polojekiti yanu ikugwira ntchito kale, zomwe zikutanthauza kuti mavutowa sali ovuta. Komabe, inu mutha kuyang'ana machenjezo osangalatsa kwambiri ndi kuwakonza ngati kuli kofunikira. Kuchita izi, muyenera zosefera linanena bungwe ndi kusiya okha odalirika mauthenga. Mu pulogalamu yowonjezera ya PVS-Studio ya Visual Studio, izi zimachitika ndikusefa ndi milingo yolakwika ndi magulu. Pazotulutsa zolondola kwambiri, siyani zokha High ΠΈ General (komanso kudina):

Kusanthula kosasunthika - kuyambira koyambira mpaka kuphatikiza
Zowonadi, machenjezo a 178 ndiosavuta kuwona kuposa masauzande angapo ...

Mu ma tabu sing'anga ΠΈ Low Nthawi zambiri pamakhala machenjezo abwino, koma maguluwa akuphatikizapo matenda omwe ali ndi zolondola zochepa (zodalirika). Zambiri zokhudzana ndi machenjezo ndi zosankha zogwirira ntchito pansi pa Windows zitha kupezeka apa: *kulira*.

Kuwunikiranso bwino zolakwika zosangalatsa kwambiri (ndi kuzikonza bwino) ndikofunikira kupondereza machenjezo otsala. Izi ndizofunikira kuti machenjezo atsopano asatayike pakati pa akale. Kuphatikiza apo, static analyzer ndi wothandizira pulogalamuyo, osati mndandanda wa nsikidzi. πŸ™‚

1. Zochita zokha

Mutadziwana bwino, ndi nthawi yokonza mapulagini ndikuphatikiza mu CI. Izi ziyenera kuchitika opanga mapulogalamu asanayambe kugwiritsa ntchito static analyzer. Chowonadi ndi chakuti wopanga mapulogalamu angayiwala kuloleza kusanthula kapena kusafuna kuchita konse. Kuti muchite izi, muyenera kuyang'ana komaliza kwa chilichonse kuti code yosayesedwa isalowe mu nthambi yachitukuko.

Zomwe muphunzire pa nthawiyi:

  • Ndi zosankha zotani zomwe chidacho chimapereka;
  • Kodi analyzer ikugwirizana ndi dongosolo lanu la msonkhano?

Popeza zolemba zangwiro kulibe, nthawi zina muyenera kulembamo chithandizo. Izi nzabwinobwino ndipo ndife okondwa kukuthandizani. πŸ™‚

Tsopano tiyeni tipitirire ku ntchito za continuous integration (CI). Analyzer iliyonse imatha kukhazikitsidwa mwa iwo popanda mavuto akulu. Kuti muchite izi, muyenera kupanga siteji yosiyana mu payipi, yomwe nthawi zambiri imakhala pambuyo poyesa kumanga ndi ma unit. Izi zimachitika pogwiritsa ntchito zida zosiyanasiyana za console. Mwachitsanzo, PVS-Studio imapereka zida zotsatirazi:

Kuti muphatikize kusanthula mu CI, muyenera kuchita zinthu zitatu:

  • Ikani analyzer;
  • Thamangani kusanthula;
  • Perekani zotsatira.

Mwachitsanzo, kukhazikitsa PVS-Studio pa Linux (Debian-base), muyenera kuyendetsa malamulo awa:

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

Pamakina omwe ali ndi Windows, palibe njira yokhazikitsira analyzer kuchokera kwa woyang'anira phukusi, koma ndizotheka kuyika analyzer kuchokera pamzere wolamula:

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

Mutha kuwerenga zambiri za kutumiza PVS-Studio pamakina omwe akuyendetsa Windows *apa*.

Pambuyo unsembe, muyenera kuthamanga kusanthula mwachindunji. Komabe, tikulimbikitsidwa kuchita izi pokhapokha pakuphatikiza ndi kuyesa kwadutsa. Izi ndichifukwa choti kusanthula kwa static nthawi zambiri kumatenga nthawi yayitali kuwirikiza kuphatikizika.

Popeza njira yotsegulira imadalira nsanja ndi mawonekedwe a projekiti, ndikuwonetsa njira ya C ++ (Linux) monga chitsanzo:

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

Lamulo loyamba lidzachita kusanthula, ndipo lachiwiri maenvulopuamasintha lipotilo kukhala mtundu wamawu, amawonetsa pazenera ndikubweza nambala yobwereza kupatula 0 ngati pali machenjezo. Makina ngati awa angagwiritsidwe ntchito mosavuta kutsekereza kumanga pakakhala mauthenga olakwika. Komabe, mutha kuchotsa mbendera nthawi zonse -w ndipo musatseke msonkhano wokhala ndi machenjezo.

Zindikirani: Mawonekedwe a mawu ndi ovuta. Amaperekedwa monga chitsanzo. Samalani mtundu wosangalatsa wa lipoti - FullHtml. Imakulolani kuti mudutse ma code.

Mutha kuwerenga zambiri za kukhazikitsa kusanthula pa CI m'nkhaniyi "PVS-Studio ndi Continuous Integration"(Windows) kapena"Momwe mungakhazikitsire PVS-Studio mu Travis CI"(Linux).

Chabwino, mwakonza analyzer pa seva yomanga. Tsopano, ngati wina akweza kachidindo kosayesedwa, siteji yotsimikizira idzalephera, ndipo mudzatha kuzindikira vutoli, komabe, izi sizothandiza, chifukwa ndi bwino kuyang'ana polojekitiyo osati mutagwirizanitsa nthambi, koma pamaso pake, pa siteji yopempha kukoka.

Nthawi zambiri, kukhazikitsa kusanthula kopempha sikusiyana kwambiri ndi kukhazikitsidwa kwanthawi zonse kwa kusanthula pa CI. Kupatula kufunikira kopeza mndandanda wamafayilo osinthidwa. Izi zitha kupezeka pofunsa kusiyana pakati pa nthambi pogwiritsa ntchito git:

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

Tsopano muyenera kupereka mndandanda wamafayilo awa kwa analyzer ngati kulowetsa. Mwachitsanzo, mu PVS-Studio izi zikugwiritsidwa ntchito pogwiritsa ntchito mbendera -S:

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

Mutha kudziwa zambiri za kusanthula zopempha zokoka *apa*. Ngakhale CI yanu ilibe pamndandanda wazinthu zomwe zatchulidwa m'nkhaniyi, mupeza kuti gawo lazonse lomwe laperekedwa ku lingaliro la kusanthula kwamtunduwu ndi lothandiza.

Pokhazikitsa kusanthula kwa zopempha zokoka, mutha kuletsa zomwe zili ndi machenjezo, potero ndikupanga malire omwe nambala yosayesedwa sangathe kuwoloka.

Zonsezi ndizabwino, koma ndikufuna kuti ndizitha kuwona machenjezo onse pamalo amodzi. Osati kokha kuchokera ku static analyzer, komanso kuchokera ku mayeso a unit kapena kuchokera ku dynamic analyzer. Pali mautumiki osiyanasiyana ndi mapulagini a izi. PVS-Studio, mwachitsanzo, ili ndi plugin kuti iphatikizidwe mu SonarQube.

2. Kuphatikiza pa makina opanga mapulogalamu

Tsopano ndi nthawi yoti muyike ndikusintha analyzer kuti mugwiritse ntchito tsiku ndi tsiku. Pofika pano mwadziwa kale njira zambiri zogwirira ntchito, kotero izi zitha kutchedwa gawo losavuta kwambiri.

Monga njira yosavuta kwambiri, opanga amatha kukhazikitsa analyzer ofunikira okha. Komabe, izi zidzatenga nthawi yambiri ndikusokoneza chitukuko, kotero mutha kusintha ndondomekoyi pogwiritsa ntchito oyika ndi mbendera zofunika. Kwa PVS-Studio pali zosiyanasiyana mbendera zoikamo zokha. Komabe, nthawi zonse pamakhala oyang'anira phukusi, mwachitsanzo, Chocolatey (Windows), Homebrew (macOS) kapena zosankha zambiri za Linux.

Kenako muyenera kukhazikitsa mapulagini ofunikira, mwachitsanzo Zooneka situdiyo, Lingaliro, Wokwera etc.

3. Kugwiritsa ntchito tsiku ndi tsiku

Pakadali pano, ndi nthawi yoti munene mawu ochepa okhudza njira zofulumizitsira kusanthula pakugwiritsa ntchito tsiku ndi tsiku. Kusanthula kwathunthu kwa polojekiti yonse kumatenga nthawi yochuluka, koma ndi kangati timasintha ma code mu polojekiti yonse nthawi imodzi? Palibe kukonzanso komwe kuli kwakukulu kwambiri kotero kuti kungakhudze ma code onse nthawi yomweyo. Chiwerengero cha mafayilo omwe amasinthidwa nthawi zambiri sichiposa khumi ndi awiri, kotero ndizomveka kuwasanthula. Kwa mkhalidwe wotere ulipo njira yowunikira yowonjezera. Osachita mantha, ichi si chida china. Iyi ndi njira yapadera yomwe imakulolani kuti mufufuze mafayilo osinthidwa okha ndi kudalira kwawo, ndipo izi zimachitika pokhapokha mutamanga ngati mukugwira ntchito mu IDE ndi pulogalamu yowonjezera.

Ngati analyzer awona zovuta mu code yomwe yasinthidwa posachedwa, idzafotokoza izi palokha. Mwachitsanzo, PVS-Studio ikuwuzani za izi pogwiritsa ntchito chenjezo:

Kusanthula kosasunthika - kuyambira koyambira mpaka kuphatikiza
Inde, kuwuza opanga mapulogalamu kuti agwiritse ntchito chida sikokwanira. Tiyenera kuwauza mwanjira inayake kuti ndi chiyani komanso momwe zilili. Pano, mwachitsanzo, pali nkhani zoyambira mwachangu PVS-Studio, koma mutha kupeza maphunziro ofanana pachida chilichonse chomwe mungafune:

Nkhani zoterezi zimapereka chidziwitso chonse chofunikira pakugwiritsa ntchito tsiku ndi tsiku ndipo sizitenga nthawi yambiri. πŸ™‚

Ngakhale titafika podziwa chidacho, tidaletsa machenjezo ambiri pakuyambitsa koyamba. Tsoka ilo, ma static analyzers sali angwiro, kotero nthawi ndi nthawi amapereka malingaliro onyenga. Nthawi zambiri ndizosavuta kuwaletsa; mwachitsanzo, mu pulogalamu yowonjezera ya PVS-Studio ya Visual Studio mumangodina batani limodzi:

Kusanthula kosasunthika - kuyambira koyambira mpaka kuphatikiza
Komabe, mungathe kuchita zambiri kuposa kungowapondereza. Mwachitsanzo, mutha kunena za vuto kuti muthandizire. Ngati zabwinoza zabodza zitha kuwongoleredwa, ndiye kuti muzosintha zamtsogolo mutha kuzindikira kuti nthawi iliyonse pamakhala zolakwika zocheperako zomwe zili pa codebase yanu.

Pambuyo pakuphatikiza

Chifukwa chake tadutsa magawo onse ophatikizira kusanthula kosasintha munjira yachitukuko. Ngakhale kufunikira kokhazikitsa zida zotere pa CI, malo ofunikira kwambiri kuti aziyendetsa ndi kompyuta ya wopanga. Pambuyo pake, static analyzer si woweruza yemwe amanena kwinakwake kutali ndi inu kuti codeyo si yabwino. M'malo mwake, ndi wothandizira amene amakuuzani ngati mwatopa ndikukukumbutsani ngati mwaiwala chinachake.

Zowona, popanda kugwiritsa ntchito nthawi zonse, kusanthula kosasunthika sikungathe kufewetsa chitukuko. Kupatula apo, phindu lake lalikulu kwa wopangayo silimangokhalira kufunafuna magawo ovuta komanso otsutsana a code, koma pakuzindikira kwawo koyambirira. Vomerezani kuti kupeza vuto pambuyo poti zosinthidwazo zitatumizidwa kuti zikayezedwe sizongosangalatsa, komanso zimatengera nthawi. Kusanthula kosasunthika, kukagwiritsidwa ntchito pafupipafupi, kumawona kusintha kulikonse pakompyuta yanu ndikuwonetsa malo okayikitsa mukamagwiritsa ntchito ma code.

Ndipo ngati inu kapena anzanu simukudziwa ngati kuli koyenera kugwiritsa ntchito analyzer, ndiye ndikupangira kuti muyambe kuwerenga nkhaniyi "Zifukwa zodziwitsira static code analyzer PVS-Studio munjira yachitukuko". Imakhudzanso nkhawa za omwe akutukula kuti kusanthula kosasintha kudzawatengera nthawi ndi zina zotero.

Kusanthula kosasunthika - kuyambira koyambira mpaka kuphatikiza

Ngati mukufuna kugawana nkhaniyi ndi omvera olankhula Chingerezi, chonde gwiritsani ntchito ulalo womasulira: Maxim Zvyagintsev. Kusanthula kwa Static: Kuyambira Pachiyambi mpaka Kuphatikiza.

Source: www.habr.com

Kuwonjezera ndemanga