Ayẹwo aimi - lati ifihan si isọpọ

Bani o ti atunyẹwo koodu ailopin tabi n ṣatunṣe aṣiṣe, nigbami o ronu nipa bi o ṣe le ṣe igbesi aye rẹ simplify. Ati lẹhin wiwa diẹ, tabi nipa ikọsẹ lairotẹlẹ lori rẹ, o le rii gbolohun ọrọ idan: “Itupalẹ aimi”. Jẹ ká wo ohun ti o jẹ ati bi o ti le se nlo pẹlu rẹ ise agbese.

Ayẹwo aimi - lati ifihan si isọpọ
Ni otitọ, ti o ba kọ ni eyikeyi ede ode oni, lẹhinna, laisi paapaa mọ ọ, o ran nipasẹ oluyẹwo aimi. Otitọ ni pe eyikeyi olupilẹṣẹ ode oni n pese, botilẹjẹpe kekere kan, ṣeto awọn ikilọ nipa awọn iṣoro ti o pọju ninu koodu naa. Fun apẹẹrẹ, nigbati o ba n ṣajọ koodu C++ ni Studio Visual o le rii atẹle naa:

Ayẹwo aimi - lati ifihan si isọpọ
Ni yi o wu ti a ba ri wipe oniyipada je ko lo nibikibi ninu iṣẹ naa. Nitorinaa ni otitọ, o fẹrẹ nigbagbogbo lo oluyẹwo koodu aimi ti o rọrun. Bibẹẹkọ, ko dabi awọn olutupalẹ alamọdaju bii Ibori, Klocwork tabi PVS-Studio, awọn ikilọ ti a pese nipasẹ alakojọ le ṣe afihan iwọn kekere ti awọn iṣoro nikan.

Ti o ko ba mọ daju kini itupalẹ aimi ati bii o ṣe le ṣe imuse rẹ, ka yi articlelati ni imọ siwaju sii nipa ilana yii.

Kini idi ti o nilo itupalẹ aimi?

Ni kukuru: isare ati simplification.

Itupalẹ aimi gba ọ laaye lati wa ọpọlọpọ awọn iṣoro oriṣiriṣi ninu koodu: lati lilo ti ko tọ ti awọn itumọ ede si typos. Fun apẹẹrẹ, dipo

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

O ko koodu wọnyi:

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

Bi o ti le rii, typo kan wa ni laini to kẹhin. Fun apẹẹrẹ, PVS-Studio ṣe ikilọ wọnyi:

V537 Gbé àtúnyẹ̀wò àtúnyẹ̀wò ìlò ohun kan 'y'.

Ti o ba fẹ gbe ọwọ rẹ sinu aṣiṣe yii, gbiyanju apẹẹrẹ ti a ṣe ni Compiler Explorer: *kigbe*.

Ati bi o ṣe yeye, kii ṣe nigbagbogbo ṣee ṣe lati fiyesi si iru awọn apakan ti koodu lẹsẹkẹsẹ, ati nitori eyi, o le joko ni aṣiṣe fun wakati ti o dara, iyalẹnu idi ti ohun gbogbo n ṣiṣẹ ni ajeji.

Sibẹsibẹ, eyi jẹ kedere aṣiṣe. Ohun ti o ba ti awọn Olùgbéejáde kowe suboptimal koodu nitori ti o gbagbe diẹ ninu awọn arekereke ti awọn ede? Tabi paapaa gba laaye ninu koodu naa aisọye iwa? Laanu, iru awọn ọran jẹ ibi ti o wọpọ patapata ati ipin kiniun ti akoko ni lilo n ṣatunṣe aṣiṣe ni pato koodu iṣẹ ti o ni awọn typos, awọn aṣiṣe aṣoju tabi ihuwasi aisọye.

O jẹ fun awọn ipo wọnyi ti itupalẹ aimi han. Eyi jẹ oluranlọwọ fun olupilẹṣẹ ti yoo tọka awọn iṣoro pupọ ninu koodu ati ṣalaye ninu iwe idi ti ko ṣe pataki lati kọ ni ọna yii, kini o le ja si ati bii o ṣe le ṣatunṣe. Eyi ni apẹẹrẹ ti ohun ti o le dabi: *kigbe*.

O le wa awọn aṣiṣe ti o nifẹ diẹ sii ti olutupalẹ le rii ninu awọn nkan wọnyi:

Ni bayi ti o ti ka ohun elo yii ti o si ni idaniloju awọn anfani ti itupalẹ aimi, o le fẹ gbiyanju rẹ. Sugbon ibi ti lati bẹrẹ? Bii o ṣe le ṣepọ ọpa tuntun kan si iṣẹ akanṣe lọwọlọwọ rẹ? Ati bi o ṣe le ṣafihan ẹgbẹ naa fun u? Iwọ yoo wa awọn idahun si awọn ibeere wọnyi ni isalẹ.

Akiyesi. Itupalẹ aimi ko rọpo tabi fagile iru nkan to wulo bi awọn atunwo koodu. O ṣe afikun ilana yii, ṣe iranlọwọ lati ṣe akiyesi ati ṣatunṣe awọn typos, awọn aiṣedeede, ati awọn apẹrẹ ti o lewu ni ilosiwaju. O jẹ iṣelọpọ pupọ diẹ sii lati dojukọ awọn atunyẹwo koodu lori awọn algoridimu ati asọye koodu, dipo wiwa fun akọmọ ti ko tọ tabi ka boring lafiwe awọn iṣẹ.

0. Ngba lati mọ ọpa

Gbogbo rẹ bẹrẹ pẹlu ẹya idanwo kan. Nitootọ, o ṣoro lati pinnu lati ṣafihan nkan kan sinu ilana idagbasoke ti o ko ba rii ohun elo laaye tẹlẹ. Nitorinaa, ohun akọkọ ti o yẹ ki o ṣe ni gbigba lati ayelujara trial version.

Kini iwọ yoo kọ ni ipele yii:

  • Kini awọn ọna lati ṣe ajọṣepọ pẹlu olutupalẹ;
  • Ṣe olutupalẹ ni ibamu pẹlu agbegbe idagbasoke rẹ?
  • Awọn iṣoro wo ni o wa lọwọlọwọ ninu awọn iṣẹ akanṣe rẹ?

Lẹhin ti o ti fi sori ẹrọ ohun gbogbo ti o nilo, ohun akọkọ ti o yẹ ki o ṣe ni ṣiṣe itupalẹ gbogbo iṣẹ akanṣe naa (Windows, Linux, MacOS). Ninu ọran ti PVS-Studio ni Studio Visual iwọ yoo rii aworan ti o jọra (titẹ):

Ayẹwo aimi - lati ifihan si isọpọ
Otitọ ni pe awọn atunnkanka aimi nigbagbogbo funni ni nọmba nla ti awọn ikilọ fun awọn iṣẹ akanṣe pẹlu ipilẹ koodu nla kan. Ko si iwulo lati ṣatunṣe gbogbo wọn, nitori iṣẹ akanṣe rẹ ti n ṣiṣẹ tẹlẹ, eyiti o tumọ si pe awọn iṣoro wọnyi ko ṣe pataki. Sibẹsibẹ, iwọ o le wo awọn ikilo ti o nifẹ julọ ki o si ṣe atunṣe wọn ti o ba jẹ dandan. Lati ṣe eyi, o nilo lati àlẹmọ awọn o wu ki o si fi nikan ni julọ gbẹkẹle awọn ifiranṣẹ. Ninu ohun itanna PVS-Studio fun Studio Visual, eyi ni a ṣe nipasẹ sisẹ nipasẹ awọn ipele aṣiṣe ati awọn ẹka. Fun abajade deede julọ, fi silẹ nikan ga и Gbogbogbo (tun le tẹ):

Ayẹwo aimi - lati ifihan si isọpọ
Lootọ, awọn ikilọ 178 rọrun pupọ lati wo ju ọpọlọpọ ẹgbẹrun lọ…

Ninu awọn taabu alabọde и Low Nigbagbogbo awọn ikilọ to dara wa, ṣugbọn awọn ẹka wọnyi pẹlu awọn iwadii aisan ti o ni deede to kere (igbẹkẹle). Alaye diẹ sii nipa awọn ipele ikilọ ati awọn aṣayan fun ṣiṣẹ labẹ Windows ni a le rii nibi: *kigbe*.

Nini ṣe atunyẹwo aṣeyọri awọn aṣiṣe ti o nifẹ julọ (ati ni ifijišẹ ṣe atunṣe wọn) jẹ tọ dinku awọn ikilo ti o ku. Eyi jẹ dandan ki awọn ikilọ tuntun ma ba sọnu laarin awọn ti atijọ. Ni afikun, olutupalẹ aimi jẹ oluranlọwọ fun olupilẹṣẹ, kii ṣe atokọ ti awọn idun. 🙂

1. adaṣiṣẹ

Lẹhin ti o mọ, o to akoko lati tunto awọn afikun ati ṣepọ sinu CI. Eyi gbọdọ ṣee ṣaaju ki awọn pirogirama bẹrẹ lilo olutupalẹ aimi. Otitọ ni pe olupilẹṣẹ le gbagbe lati mu itupalẹ ṣiṣẹ tabi ko fẹ ṣe rara. Lati ṣe eyi, o nilo lati ṣe idanwo ikẹhin ti ohun gbogbo ki koodu ti ko ni idanwo ko le wọle si ẹka idagbasoke gbogbogbo.

Kini iwọ yoo kọ ni ipele yii:

  • Awọn aṣayan adaṣe wo ni ọpa pese;
  • Ṣe olutupalẹ ni ibamu pẹlu eto apejọ rẹ?

Niwọn igba ti iwe pipe ko si, nigbami o ni lati kọ sinu atilẹyin. Eyi jẹ deede ati pe a ni idunnu lati ran ọ lọwọ. 🙂

Bayi jẹ ki a lọ si awọn iṣẹ iṣọpọ lemọlemọfún (CI). Oluyanju eyikeyi le ṣe imuse sinu wọn laisi awọn iṣoro to ṣe pataki. Lati ṣe eyi, o nilo lati ṣẹda ipele ti o yatọ ni opo gigun ti epo, eyiti o wa nigbagbogbo lẹhin kikọ ati awọn idanwo ẹyọkan. Eyi ni a ṣe nipa lilo ọpọlọpọ awọn ohun elo console. Fun apẹẹrẹ, PVS-Studio pese awọn ohun elo wọnyi:

Lati ṣepọ itupalẹ sinu CI, o nilo lati ṣe awọn nkan mẹta:

  • Fi sori ẹrọ oluyẹwo;
  • Ṣiṣe ayẹwo;
  • Pese esi.

Fun apẹẹrẹ, lati fi PVS-Studio sori Linux (Debian-base), o nilo lati ṣiṣe awọn aṣẹ wọnyi:

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

Lori awọn eto ti n ṣiṣẹ Windows, ko si ọna lati fi sori ẹrọ olutupalẹ lati ọdọ oluṣakoso package, ṣugbọn o ṣee ṣe lati mu olutupalẹ lati laini aṣẹ:

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

O le ka diẹ sii nipa gbigbe PVS-Studio sori awọn eto nṣiṣẹ Windows *nibi*.

Lẹhin fifi sori ẹrọ, o nilo lati ṣiṣe itupalẹ taara. Sibẹsibẹ, o niyanju lati ṣe eyi nikan lẹhin akopọ ati awọn idanwo ti kọja. Eleyi jẹ nitori aimi onínọmbà ojo melo gba lemeji bi gun bi akopo.

Niwọn igba ti ọna ifilọlẹ da lori pẹpẹ ati awọn ẹya akanṣe, Emi yoo ṣafihan aṣayan fun C ++ (Lainos) gẹgẹbi apẹẹrẹ:

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

Aṣẹ akọkọ yoo ṣe itupalẹ, ati ekeji awọn apooweyi iroyin pada si ọna kika ọrọ, ṣafihan loju iboju ki o da koodu ipadabọ pada yatọ si 0 ti awọn ikilọ ba wa. Ilana bii eyi le ṣee lo ni irọrun lati dènà kikọ nigbati awọn ifiranṣẹ aṣiṣe ba wa. Sibẹsibẹ, o le nigbagbogbo yọ asia -w má si ṣe dina ijọ ti o ni awọn ikilọ ninu.

Akiyesi. Ọna kika ọrọ ko nirọrun. O ti pese ni irọrun bi apẹẹrẹ. San ifojusi si ọna kika ijabọ ti o nifẹ diẹ sii - FullHtml. O faye gba o lati lilö kiri nipasẹ awọn koodu.

O le ka diẹ sii nipa iṣeto igbekale lori CI ninu nkan naa "PVS-Studio ati Tesiwaju Integration"(Windows) tabi"Bii o ṣe le ṣeto PVS-Studio ni Travis CI"(Linux).

O dara, o ti tunto olutupalẹ lori olupin Kọ. Bayi, ti ẹnikan ba gbe koodu ti ko ni idanwo, ipele ijẹrisi yoo kuna, ati pe iwọ yoo ni anfani lati rii iṣoro naa, sibẹsibẹ, eyi ko rọrun patapata, nitori pe o munadoko diẹ sii lati ṣayẹwo iṣẹ naa kii ṣe lẹhin ti awọn ẹka ti dapọ, ṣugbọn niwaju rẹ, ni ipele ti o beere fun A.

Ni gbogbogbo, ṣiṣeto itupalẹ ibeere fa kii ṣe iyatọ pupọ si ifilọlẹ igbagbogbo ti itupalẹ lori CI. Ayafi fun iwulo lati gba atokọ ti awọn faili ti o yipada. Iwọnyi le nigbagbogbo gba nipasẹ ibeere awọn iyatọ laarin awọn ẹka nipa lilo git:

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

Bayi o nilo lati ṣe atokọ awọn faili yii si olutupalẹ bi titẹ sii. Fun apẹẹrẹ, ni PVS-Studio eyi ni imuse nipa lilo asia -S:

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

O le wa diẹ sii nipa itupalẹ awọn ibeere fifa *nibi* . Paapaa ti CI rẹ ko ba wa lori atokọ awọn iṣẹ ti a mẹnuba ninu nkan naa, iwọ yoo rii apakan gbogbogbo ti o yasọtọ si imọ-jinlẹ ti iru onínọmbà yii wulo.

Nipa siseto igbekale ti awọn ibeere fifa, o le di awọn iṣe ti o ni awọn ikilọ ninu, nitorinaa ṣiṣẹda aala ti koodu ti ko ni idanwo ko le kọja.

Eyi ni gbogbo esan dara, ṣugbọn Emi yoo fẹ lati ni anfani lati wo gbogbo awọn ikilọ ni aye kan. Kii ṣe lati olutupalẹ aimi nikan, ṣugbọn tun lati awọn idanwo ẹyọkan tabi lati oluyanju agbara. Awọn iṣẹ lọpọlọpọ ati awọn afikun wa fun eyi. PVS-Studio, fun apẹẹrẹ, ni o ni itanna fun Integration sinu SonarQube.

2. Integration on developer ero

Bayi o to akoko lati fi sori ẹrọ ati tunto olutupalẹ fun lilo idagbasoke ojoojumọ. Nipa aaye yii o ti mọ tẹlẹ pẹlu ọpọlọpọ awọn ọna ti ṣiṣẹ, nitorinaa eyi ni a le pe ni apakan ti o rọrun julọ.

Gẹgẹbi aṣayan ti o rọrun julọ, awọn olupilẹṣẹ le fi ẹrọ itupalẹ pataki funrararẹ. Bibẹẹkọ, eyi yoo gba akoko pupọ ati yọ wọn kuro ninu idagbasoke, nitorinaa o le ṣe adaṣe ilana yii ni lilo insitola ati awọn asia to wulo. Fun PVS-Studio nibẹ ni o wa orisirisi awọn asia fun aládàáṣiṣẹ fifi sori. Sibẹsibẹ, awọn alakoso package nigbagbogbo wa, fun apẹẹrẹ, Chocolatey (Windows), Homebrew (macOS) tabi awọn dosinni ti awọn aṣayan fun Linux.

Lẹhinna iwọ yoo nilo lati fi sori ẹrọ awọn afikun pataki, fun apẹẹrẹ fun visual Studio, IDEA, Ẹlẹṣin ati be be lo

3. Ojoojumọ lilo

Ni ipele yii, o to akoko lati sọ awọn ọrọ diẹ nipa awọn ọna lati yara olutupalẹ lakoko lilo ojoojumọ. Ayẹwo pipe ti gbogbo iṣẹ akanṣe gba akoko pupọ, ṣugbọn igba melo ni a yipada koodu jakejado gbogbo iṣẹ akanṣe ni ẹẹkan? Nibẹ ni o fee eyikeyi refactoring ti o jẹ ki o tobi ti o yoo lẹsẹkẹsẹ ni ipa lori gbogbo ipilẹ koodu. Nọmba awọn faili ti o yipada ni akoko kan ṣọwọn ju mejila kan lọ, nitorinaa o jẹ oye lati ṣe itupalẹ wọn. Fun iru ipo kan wa afikun onínọmbà mode. Maṣe bẹru, eyi kii ṣe irinṣẹ miiran. Eyi jẹ ipo pataki ti o fun ọ laaye lati ṣe itupalẹ awọn faili ti o yipada nikan ati awọn igbẹkẹle wọn, ati pe eyi yoo ṣẹlẹ laifọwọyi lẹhin ile ti o ba n ṣiṣẹ ni IDE pẹlu ohun itanna ti a fi sii.

Ti olutupalẹ ba ṣawari awọn iṣoro ninu koodu ti yipada laipẹ, yoo jabo eyi ni ominira. Fun apẹẹrẹ, PVS-Studio yoo sọ fun ọ nipa eyi nipa lilo itaniji:

Ayẹwo aimi - lati ifihan si isọpọ
Nitoribẹẹ, sisọ fun awọn olupilẹṣẹ lati lo ọpa naa ko to. A nilo lati sọ fun wọn bakan kini o jẹ ati bi o ṣe jẹ. Nibi, fun apẹẹrẹ, jẹ awọn nkan nipa ibẹrẹ iyara fun PVS-Studio, ṣugbọn o le wa awọn ikẹkọ ti o jọra fun eyikeyi ọpa ti o fẹ:

Iru awọn nkan bẹẹ pese gbogbo alaye pataki fun lilo ojoojumọ ati pe ko gba akoko pupọ. 🙂

Paapaa ni ipele ti nini lati mọ ohun elo naa, a tẹ ọpọlọpọ awọn ikilọ lọwọ lakoko ọkan ninu awọn ifilọlẹ akọkọ. Laanu, awọn atunnkanka aimi ko ni pipe, nitorinaa lati igba de igba wọn fun awọn idaniloju eke. Nigbagbogbo o rọrun lati dinku wọn; fun apẹẹrẹ, ninu ohun itanna PVS-Studio fun Studio Visual o kan nilo lati tẹ bọtini kan:

Ayẹwo aimi - lati ifihan si isọpọ
Sibẹsibẹ, o le ṣe diẹ sii ju pe o kan tẹ wọn mọlẹ. Fun apẹẹrẹ, o le jabo iṣoro kan lati ṣe atilẹyin. Ti o ba jẹ pe a le ṣe atunṣe rere eke, lẹhinna ni awọn imudojuiwọn ọjọ iwaju o le ṣe akiyesi pe ni igba kọọkan awọn idaniloju eke kere ati diẹ ni pato si koodu koodu rẹ.

Lẹhin ti Integration

Nitorinaa a ti kọja gbogbo awọn ipele ti iṣakojọpọ itupalẹ aimi sinu ilana idagbasoke. Laibikita pataki ti ṣeto iru awọn irinṣẹ bẹ lori CI, aaye pataki julọ lati ṣiṣe wọn ni kọnputa olupilẹṣẹ. Lẹhinna, oluyẹwo aimi kii ṣe adajọ ti o sọ ni ibikan ti o jinna si ọ pe koodu ko dara. Ni ilodi si, o jẹ oluranlọwọ ti o sọ fun ọ bi o ba rẹ rẹ ati pe o leti ti o ba ti gbagbe nkan kan.

Lootọ, laisi lilo deede, itupalẹ aimi ko ṣeeṣe lati jẹ ki idagbasoke di irọrun ni pataki. Lẹhinna, anfani akọkọ rẹ fun oluṣe idagbasoke kii ṣe pupọ ni wiwa fun eka ati awọn apakan ariyanjiyan ti koodu, ṣugbọn ni wiwa tete wọn. Gba pe wiwa iṣoro kan lẹhin ti awọn atunṣe ti firanṣẹ fun idanwo kii ṣe aidun nikan, ṣugbọn tun n gba akoko pupọ. Itupalẹ aimi, nigba lilo nigbagbogbo, wo gbogbo iyipada taara lori kọnputa rẹ ati ṣe ijabọ awọn aaye ifura lakoko ti o n ṣiṣẹ lori koodu naa.

Ati pe ti iwọ tabi awọn ẹlẹgbẹ rẹ ko ni idaniloju boya o tọ lati ṣe imuse atunnkanka, lẹhinna Mo daba pe o bẹrẹ kika nkan naa bayi. ”Awọn idi lati ṣafihan oluyẹwo koodu aimi PVS-Studio sinu ilana idagbasoke". O ṣe apejuwe awọn ifiyesi aṣoju ti awọn olupilẹṣẹ pe itupalẹ aimi yoo gba akoko wọn ati bẹbẹ lọ.

Ayẹwo aimi - lati ifihan si isọpọ

Ti o ba fẹ pin nkan yii pẹlu awọn olugbo ti o sọ Gẹẹsi, jọwọ lo ọna asopọ itumọ: Maxim Zvyagintsev. Itupalẹ Aimi: Lati Bibẹrẹ si Integration.

orisun: www.habr.com

Fi ọrọìwòye kun