Bii o ṣe le ṣe imuse atunnkanka koodu aimi kan ninu iṣẹ akanṣe kan laisi jijẹ ẹgbẹ naa

Bii o ṣe le ṣe imuse atunnkanka koodu aimi kan ninu iṣẹ akanṣe kan laisi jijẹ ẹgbẹ naa
O rọrun lati gbiyanju olutupalẹ koodu aimi kan. Ṣugbọn lati ṣe imuse rẹ, paapaa ni idagbasoke iṣẹ akanṣe atijọ kan, nilo ọgbọn. Ti o ba ṣe ni aṣiṣe, olutupalẹ le ṣafikun iṣẹ, fa fifalẹ idagbasoke, ati mu ẹgbẹ naa pọ si. Jẹ ki a sọrọ ni ṣoki nipa bii o ṣe le sunmọ isọdọkan ti itupalẹ aimi sinu ilana idagbasoke ati bẹrẹ lilo rẹ gẹgẹbi apakan ti CI/CD.

Ifihan

Laipẹ akiyesi mi ti fa si atẹjade naa "Bibẹrẹ Pẹlu Itupalẹ Aimi Laisi Bori Ẹgbẹ naa"Ni apa kan, eyi jẹ nkan ti o dara ti o tọ lati ni ifaramọ pẹlu. Ni apa keji, o dabi si mi pe ko tun pese idahun pipe lori bi o ṣe le ni irora ni imuse onínọmbà aimi ni iṣẹ akanṣe pẹlu pupọ. Nkan naa sọ pe O le gba gbese imọ-ẹrọ ati ṣiṣẹ nikan lori koodu tuntun, ṣugbọn ko si idahun si kini lati ṣe pẹlu gbese imọ-ẹrọ nigbamii.

Ẹgbẹ PVS-Studio wa nfunni wiwo rẹ lori koko yii. Jẹ ki a wo bii iṣoro ti imuse olutupalẹ koodu aimi kan dide ni ibẹrẹ, bii o ṣe le bori iṣoro yii, ati bii o ṣe le yọkuro ni irora ni kutukutu imukuro gbese imọ-ẹrọ.

Awọn ọrọ

Nigbagbogbo ko nira lati ṣe ifilọlẹ ati wo bii olutupalẹ aimi ṣe n ṣiṣẹ [1]. O le rii awọn aṣiṣe ti o nifẹ tabi paapaa awọn ailagbara ti o ni ẹru ninu koodu naa. O le paapaa ṣatunṣe nkan kan, ṣugbọn lẹhinna ọpọlọpọ awọn pirogirama fi silẹ.

Gbogbo awọn atunnkanka aimi gbejade awọn idaniloju eke. Eyi jẹ ẹya ti ilana itupalẹ koodu aimi, ati pe ko si ohun ti a le ṣe nipa rẹ. Ninu ọran gbogbogbo, eyi jẹ iṣoro ti ko yanju, gẹgẹ bi a ti fi idi rẹ mulẹ nipasẹ imọ-jinlẹ Rice [2]. Awọn algoridimu ikẹkọ ẹrọ kii yoo ṣe iranlọwọ boya [3]. Paapa ti eniyan ko ba le sọ nigbagbogbo boya eyi tabi koodu yẹn jẹ aṣiṣe, lẹhinna o ko yẹ ki o reti eyi lati inu eto naa :).

Awọn idaniloju eke kii ṣe iṣoro ti olutupalẹ aimi ba ti tunto tẹlẹ:

  • Alaabo awọn ipilẹ ofin ti ko ṣe pataki;
  • Diẹ ninu awọn iwadii aisan ti ko ṣe pataki ti jẹ alaabo;
  • Ti a ba n sọrọ nipa C tabi C ++, lẹhinna awọn macro ti wa ni samisi ti o ni awọn itumọ ti pato ti o fa ki awọn ikilo ti ko wulo han ni gbogbo ibi ti a ti lo iru awọn macros;
  • Awọn iṣẹ tirẹ jẹ aami ti o ṣe awọn iṣe ti o jọra si awọn iṣẹ eto (afọwọṣe tirẹ memcpy tabi atẹjade) [4];
  • Awọn idaniloju eke jẹ alaabo pataki nipa lilo awọn asọye;
  • Ati bẹbẹ lọ.

Ni ọran yii, a le nireti oṣuwọn rere eke kekere ti o to 10-15% [5]. Ni awọn ọrọ miiran, 9 ninu 10 awọn ikilọ atupale yoo tọka iṣoro gidi kan ninu koodu naa, tabi o kere ju “koodu gbigbo oorun ti o lagbara.” Gba, oju iṣẹlẹ yii dun pupọ, ati olutupalẹ jẹ ọrẹ gidi ti olupilẹṣẹ naa.

Bii o ṣe le ṣe imuse atunnkanka koodu aimi kan ninu iṣẹ akanṣe kan laisi jijẹ ẹgbẹ naa
Ni otitọ, ninu iṣẹ akanṣe nla kan, aworan akọkọ yoo yatọ patapata. Olutupalẹ ṣe agbejade awọn ọgọọgọrun tabi ẹgbẹẹgbẹrun awọn ikilọ fun koodu julọ. Ko ṣee ṣe lati yara ni oye eyiti ninu awọn ikilọ wọnyi ṣe pataki ati eyiti kii ṣe. O jẹ aibikita lati joko ati bẹrẹ ṣiṣe pẹlu gbogbo awọn ikilọ wọnyi, nitori pe iṣẹ akọkọ ninu ọran yii yoo da duro fun awọn ọjọ tabi awọn ọsẹ. Ni deede, ẹgbẹ kan ko le ni iru oju iṣẹlẹ bẹẹ. Nọmba nla ti awọn iyatọ yoo tun wa ti o ba itan-akọọlẹ iyipada jẹ. Ati ṣiṣatunṣe ibi-iyara ti ọpọlọpọ awọn ajẹkù ninu koodu naa yoo ja si awọn aṣiṣe ati awọn aṣiṣe tuntun.

Ati julọ ṣe pataki, iru kan feat ninu igbejako ikilo ki asopọ kekere ori. Gba pe niwọn igba ti iṣẹ akanṣe naa ti nṣiṣẹ ni aṣeyọri fun ọpọlọpọ ọdun, pupọ julọ awọn aṣiṣe pataki ninu rẹ ti ni atunṣe tẹlẹ. Bẹẹni, awọn atunṣe wọnyi jẹ gbowolori pupọ, ni lati ṣatunṣe, gba awọn esi olumulo odi nipa awọn idun, ati bẹbẹ lọ. Oluyanju aimi yoo ṣe iranlọwọ lati ṣatunṣe ọpọlọpọ awọn aṣiṣe wọnyi ni ipele ifaminsi, ni iyara ati olowo poku. Ṣugbọn ni akoko yii, ọna kan tabi omiiran, awọn aṣiṣe wọnyi ti wa titi, ati pe olutupalẹ ṣe awari awọn aṣiṣe ti kii ṣe pataki ni koodu atijọ. Koodu yii le ma ṣee lo, o le ṣee lo ni ṣọwọn, ati pe aṣiṣe ninu rẹ le ma ja si awọn abajade akiyesi. Boya ni ibikan ti ojiji lati bọtini jẹ awọ ti ko tọ, ṣugbọn eyi ko dabaru pẹlu lilo ẹnikẹni ti ọja naa.

Dajudaju, paapaa awọn aṣiṣe kekere tun jẹ aṣiṣe. Ati nigba miiran aṣiṣe le tọju ailagbara gidi kan. Bibẹẹkọ, fifun ohun gbogbo ati lilo awọn ọjọ / awọn ọsẹ ṣiṣe pẹlu awọn abawọn ti o fara han ara wọn dabi imọran ti iyalẹnu.

Awọn olupilẹṣẹ wo, wo, wo gbogbo awọn ikilọ wọnyi nipa koodu iṣẹ atijọ… Ati pe wọn ronu: a le ṣe laisi itupalẹ aimi. Jẹ ká lọ kọ diẹ ninu awọn titun wulo iṣẹ.

Ni ọna tiwọn, wọn jẹ ẹtọ. Wọn ro pe akọkọ wọn ni lati bakan kuro ninu gbogbo awọn ikilọ wọnyi. Nikan lẹhinna wọn yoo ni anfani lati ni anfani lati lilo igbagbogbo ti olutupalẹ koodu. Bí bẹ́ẹ̀ kọ́, àwọn ìkìlọ̀ tuntun yóò kàn rì sínú ògbólógbòó, kò sì sí ẹni tí yóò fiyè sí wọn.

Eleyi jẹ kanna ni apéerẹìgbìyànjú bi pẹlu alakojo ikilo. Kii ṣe laisi idi pe wọn ṣeduro fifi nọmba awọn ikilọ alakopọ ni 0. Ti awọn ikilọ 1000 ba wa, lẹhinna nigbati 1001 ba wa, ko si ẹnikan ti yoo ṣe akiyesi rẹ, ati pe ko han ibiti o wa ikilọ tuntun yii.

Bii o ṣe le ṣe imuse atunnkanka koodu aimi kan ninu iṣẹ akanṣe kan laisi jijẹ ẹgbẹ naa
Ohun ti o buru julọ ninu itan yii ni ti ẹnikan lati oke ni akoko yii fi agbara mu ọ lati lo itupalẹ koodu aimi. Eyi yoo ṣe agbega ẹgbẹ naa nikan, nitori lati oju-ọna wọn yoo jẹ afikun eka bureaucratic ti o gba ọna nikan. Ko si ẹnikan ti yoo wo awọn ijabọ atupale, ati pe gbogbo lilo yoo jẹ “lori iwe” nikan. Awon. Ni deede, itupalẹ jẹ itumọ sinu ilana DevOps, ṣugbọn ni iṣe eyi ko ṣe anfani ẹnikẹni. A gbọ awọn itan alaye ni awọn agọ lati ọdọ awọn olukopa apejọ. Iru iriri bẹẹ le ṣe irẹwẹsi awọn olupilẹṣẹ lati lo awọn irinṣẹ itupalẹ aimi fun igba pipẹ, ti kii ba ṣe lailai.

Ṣiṣe ati imukuro gbese imọ-ẹrọ

Ni otitọ, ko si ohun ti o ṣoro tabi idẹruba nipa iṣafihan itupalẹ aimi paapaa sinu iṣẹ akanṣe atijọ kan.

CI / CD

Pẹlupẹlu, olutupalẹ le lẹsẹkẹsẹ jẹ apakan ti ilana idagbasoke ilọsiwaju. Fun apẹẹrẹ, pinpin PVS-Studio ni awọn ohun elo fun wiwo ijabọ ni irọrun ni ọna kika ti o nilo, ati awọn iwifunni si awọn olupilẹṣẹ ti o kọ awọn apakan iṣoro ti koodu naa. Fun awọn ti o nifẹ diẹ sii lati ṣe ifilọlẹ PVS-Studio lati awọn eto CI / CD, Mo ṣeduro pe ki o mọ ararẹ pẹlu awọn ti o baamu. apakan iwe ati onka awọn nkan:

Ṣugbọn jẹ ki a pada si ọran ti nọmba nla ti awọn idaniloju eke ni awọn ipele akọkọ ti imuse awọn irinṣẹ itupalẹ koodu.

Titunṣe gbese imọ-ẹrọ ti o wa tẹlẹ ati ṣiṣe pẹlu awọn ikilo tuntun

Awọn atunnkanka iṣowo ti ode oni gba ọ laaye lati kawe awọn ikilọ tuntun nikan ti o han ni koodu tuntun tabi yipada. Awọn imuse ti yi siseto yatọ, ṣugbọn awọn lodi jẹ kanna. Ninu oluyẹwo aimi PVS-Studio, iṣẹ ṣiṣe yii jẹ imuse bi atẹle.

Lati yara bẹrẹ lilo itupalẹ aimi, a daba pe awọn olumulo PVS-Studio lo ẹrọ naa fun idinku awọn ikilọ pupọ [6]. Ero gbogbogbo ni atẹle yii. Olumulo naa ṣe ifilọlẹ olutupalẹ ati gba ọpọlọpọ awọn ikilọ. Niwọn igba ti iṣẹ akanṣe kan ti o ti wa ni idagbasoke fun ọpọlọpọ ọdun ti wa laaye, idagbasoke ati ṣiṣe owo, lẹhinna o ṣeese kii yoo ni ọpọlọpọ awọn ikilọ ninu ijabọ ti n tọka awọn abawọn to ṣe pataki. Ni awọn ọrọ miiran, awọn idun to ṣe pataki ti jẹ atunṣe tẹlẹ ni ọna kan tabi omiiran nipa lilo awọn ọna gbowolori diẹ sii tabi ọpẹ si esi lati ọdọ awọn alabara. Nitorinaa, ohun gbogbo ti olutupalẹ lọwọlọwọ rii ni a le gbero gbese imọ-ẹrọ, eyiti ko wulo lati gbiyanju lati yọkuro lẹsẹkẹsẹ.

O le sọ fun PVS-Studio lati ro awọn ikilọ wọnyi ko ṣe pataki fun bayi (fipamọ gbese imọ-ẹrọ fun nigbamii), ati pe kii yoo ṣafihan wọn mọ. Oluyanju ṣẹda faili pataki kan nibiti o ti fipamọ alaye nipa awọn aṣiṣe ti ko nifẹ si sibẹsibẹ. Ati nisisiyi PVS-Studio yoo fun awọn ikilọ nikan fun koodu titun tabi yipada. Pẹlupẹlu, gbogbo eyi ni a ṣe ni ọgbọn. Ti, fun apẹẹrẹ, laini ṣofo ti wa ni afikun si ibẹrẹ ti faili koodu orisun, lẹhinna olutupalẹ loye pe, ni otitọ, ko si ohun ti o yipada, ati pe yoo tẹsiwaju lati dakẹ. Faili isamisi yii le jẹ fi sinu eto iṣakoso ẹya. Faili naa tobi, ṣugbọn eyi kii ṣe iṣoro, nitori pe ko si aaye ni titoju nigbagbogbo.

Bayi gbogbo awọn pirogirama yoo rii awọn ikilọ ti o ni ibatan si koodu tuntun tabi yipada nikan. Nitorinaa, o le bẹrẹ lilo olutupalẹ, bi wọn ṣe sọ, lati ọjọ keji. Ati pe o le pada si gbese imọ-ẹrọ nigbamii, ati ni kutukutu ṣe atunṣe awọn aṣiṣe ati tunto olutupalẹ.

Nitorinaa, iṣoro akọkọ pẹlu imuse ti olutupalẹ ni iṣẹ akanṣe atijọ nla kan ti yanju. Bayi jẹ ki a ro ero kini lati ṣe pẹlu gbese imọ-ẹrọ.

Awọn atunṣe kokoro ati awọn atunṣe

Ohun ti o rọrun julọ ati adayeba julọ ni lati ya akoko diẹ si apakan lati ṣe itupalẹ awọn ikilọ olutupalẹ ti o ti tẹmọlẹ ati ni diẹdiẹ pẹlu wọn. Ibikan ti o yẹ ki o ṣatunṣe awọn aṣiṣe ninu koodu, ibikan ni o yẹ ki o ṣe atunṣe lati sọ fun olutọpa pe koodu ko ni iṣoro. Apẹẹrẹ ti o rọrun:

if (a = b)

Pupọ julọ awọn olupilẹṣẹ C ++ ati awọn atunnkanka kerora nipa iru koodu, nitori iṣeeṣe giga wa pe wọn fẹ lati kọ gaan. (a == b). Ṣugbọn o wa adehun ti a ko sọ, ati pe eyi ni a maa n ṣe akiyesi ninu iwe-ipamọ, pe ti o ba wa ni afikun awọn akọmọ, lẹhinna a kà pe oluṣeto naa ti kọ iru koodu bẹẹ, ko si ye lati bura. Fun apẹẹrẹ, ninu iwe PVS-Studio fun awọn iwadii aisan V559 (CWE-481) o ti kọ ni kedere pe laini atẹle yoo jẹ pe o tọ ati ailewu:

if ((a = b))

Apeere miiran. Ṣe o gbagbe ninu koodu C ++ yii? Bireki àí????

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

Oluyanju PVS-Studio yoo fun ikilọ kan nibi V796 (CWE-484). Eyi le ma jẹ aṣiṣe, ninu eyiti ọran naa o yẹ ki o fun olutọpa ni ofiri nipa fifi ẹda naa kun [[nipasẹ]] tabi fun apẹẹrẹ __ eroja__((isubu)):

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

O le sọ pe iru awọn iyipada koodu ko ṣe atunṣe kokoro naa. Bẹẹni, eyi jẹ otitọ, ṣugbọn o ṣe awọn ohun ti o wulo meji. Ni akọkọ, ijabọ atunnkanka yọkuro awọn idaniloju eke. Ni ẹẹkeji, koodu naa di oye diẹ sii fun awọn eniyan ti o ni ipa ninu itọju rẹ. Ati pe eyi ṣe pataki pupọ! Fun eyi nikan, o tọ lati ṣe awọn atunṣe kekere lati jẹ ki koodu naa han ati rọrun lati ṣetọju. Niwọn igba ti olutupalẹ ko loye boya “fifọ” nilo tabi rara, yoo tun jẹ alaimọ si awọn oluṣeto ẹlẹgbẹ.

Ni afikun si awọn atunṣe kokoro ati awọn atunṣe, o le ni pato lati dinku awọn ikilọ atupale eke ti o han gbangba. Diẹ ninu awọn iwadii aisan ti ko ṣe pataki le jẹ alaabo. Fun apẹẹrẹ, ẹnikan ro pe awọn ikilọ jẹ asan V550 nipa wé leefofo / ė iye. Ati pe diẹ ninu awọn pin wọn gẹgẹbi pataki ati pe o yẹ fun ikẹkọ [7]. Awọn ikilo wo ni a ka pe o yẹ ati eyiti ko wa si ẹgbẹ idagbasoke lati pinnu.

Awọn ọna miiran wa lati dinku awọn itaniji eke. Fun apẹẹrẹ, macro markup ti mẹnuba tẹlẹ. Gbogbo eyi ni a ṣe apejuwe ni awọn alaye diẹ sii ninu iwe. Ohun pataki julọ ni lati loye pe ti o ba didiẹdiẹ ati ni eto isunmọ ṣiṣẹ pẹlu awọn idaniloju eke, ko si ohun ti o buru pẹlu wọn. Pupọ julọ ti awọn ikilọ aibikita parẹ lẹhin iṣeto, ati awọn aaye nikan ti o nilo ikẹkọ iṣọra gaan ati diẹ ninu awọn ayipada ninu koodu naa wa.

Paapaa, a nigbagbogbo ṣe iranlọwọ fun awọn alabara wa ṣeto PVS-Studio ti awọn iṣoro eyikeyi ba dide. Pẹlupẹlu, awọn ọran wa nigbati awa funrara yọkuro awọn ikilọ eke ati ṣatunṣe awọn aṣiṣe [8]. O kan ni ọran, Mo pinnu lati darukọ pe aṣayan yii fun ifowosowopo gbooro tun ṣee ṣe :).

Ratchet ọna

Ọna iyanilenu miiran wa lati mu didara koodu pọ si nipa imukuro ikilọ atunnkanka aimi. Laini isalẹ ni pe nọmba awọn ikilọ le dinku nikan.

Bii o ṣe le ṣe imuse atunnkanka koodu aimi kan ninu iṣẹ akanṣe kan laisi jijẹ ẹgbẹ naa

Nọmba awọn ikilọ ti a gbejade nipasẹ olutupalẹ aimi ti wa ni igbasilẹ. Ẹnu didara jẹ tunto ni iru ọna ti o le tẹ koodu sii nikan ti ko mu nọmba awọn iṣẹ pọ si. Bi abajade, ilana ti dinku nọmba awọn itaniji bẹrẹ nipa ṣiṣatunṣe olutupalẹ ati ṣatunṣe awọn aṣiṣe.

Paapa ti eniyan ba fẹ iyanjẹ diẹ diẹ ati pinnu lati kọja ẹnu-ọna didara kii ṣe nipa imukuro awọn ikilo ninu koodu titun rẹ, ṣugbọn nipa imudarasi koodu ẹni-kẹta atijọ, eyi kii ṣe idẹruba. Gbogbo kanna, ratchet yiyi ni itọsọna kan, ati ni diėdiė nọmba awọn abawọn yoo dinku. Paapa ti eniyan ko ba fẹ lati ṣatunṣe awọn abawọn titun tirẹ, yoo tun ni lati mu nkan dara si ni koodu adugbo. Ni aaye kan, awọn ọna ti o rọrun lati dinku nọmba awọn ikilọ pari, ati pe aaye kan wa nigbati awọn idun gidi yoo wa titi.

Ilana yii jẹ apejuwe ni awọn alaye diẹ sii ni nkan ti o nifẹ pupọ nipasẹ Ivan Ponomarev "Ṣe itupalẹ aimi sinu ilana, dipo wiwa awọn idun pẹlu rẹ", eyiti Mo ṣeduro kika si ẹnikẹni ti o nifẹ si ilọsiwaju didara koodu.

Onkọwe ti nkan naa tun ni ijabọ lori koko yii: "Tesiwaju aimi onínọmbà".

ipari

Mo nireti pe lẹhin nkan yii, awọn oluka yoo gba diẹ sii ti awọn irinṣẹ itupalẹ aimi ati pe yoo fẹ lati ṣe wọn sinu ilana idagbasoke. Ti o ba ni ibeere eyikeyi, a wa ni imurasilẹ nigbagbogbo ni imọran awọn olumulo ti PVS-Studio olutupalẹ aimi ati iranlọwọ pẹlu imuse rẹ.

Awọn ṣiyemeji aṣoju miiran wa nipa boya itupalẹ aimi le jẹ irọrun ati iwulo gaan. Mo gbiyanju lati yọkuro pupọ julọ awọn ṣiyemeji wọnyi ni atẹjade “Awọn idi lati ṣafihan oluyẹwo koodu aimi PVS-Studio sinu ilana idagbasoke” [9].

O ṣeun fun akiyesi rẹ ki o wa скачать ati ki o gbiyanju PVS-Studio itupale.

Awọn ọna asopọ afikun

  1. Andrey Karpov. Bawo ni MO ṣe le yara wo awọn ikilọ ti o nifẹ ti oluyanju PVS-Studio ṣe fun koodu C ati C ++?
  2. Wikipedia. Rice ká theorem.
  3. Andrey Karpov, Victoria Khanieva. Lilo ẹkọ ẹrọ ni itupalẹ aimi ti koodu orisun eto.
  4. PVS-Studio. Awọn iwe aṣẹ. Awọn eto iwadii afikun.
  5. Andrey Karpov. Awọn abuda ti oluyẹwo PVS-Studio nipa lilo apẹẹrẹ ti EFL Core Libraries, 10-15% awọn idaniloju eke.
  6. PVS-Studio. Awọn iwe aṣẹ. Ibi-bomole ti analyzer awọn ifiranṣẹ.
  7. Ivan Andryashin. Nipa bii a ṣe idanwo itupalẹ aimi lori iṣẹ akanṣe wa ti simulator eto-ẹkọ ti iṣẹ abẹ endovascular X-ray.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Bawo ni ẹgbẹ PVS-Studio ṣe ilọsiwaju koodu Engine Unreal.
  9. Andrey Karpov. Awọn idi lati ṣafihan oluyẹwo koodu aimi PVS-Studio sinu ilana idagbasoke.

Bii o ṣe le ṣe imuse atunnkanka koodu aimi kan ninu iṣẹ akanṣe kan laisi jijẹ ẹgbẹ naa

Ti o ba fẹ pin nkan yii pẹlu olugbo ti o sọ Gẹẹsi, jọwọ lo ọna asopọ itumọ: Andrey Karpov. Bii o ṣe le ṣafihan oluyẹwo koodu aimi ninu iṣẹ akanṣe kan ati kii ṣe lati ṣe irẹwẹsi ẹgbẹ naa.

orisun: www.habr.com

Fi ọrọìwòye kun