Mar a chuireas tu anailisiche còd statach an gnìomh ann am pròiseact dìleab gun a bhith a’ toirt air falbh an sgioba

Mar a chuireas tu anailisiche còd statach an gnìomh ann am pròiseact dìleab gun a bhith a’ toirt air falbh an sgioba
Tha e furasta anailisiche còd statach fheuchainn. Ach airson a bhuileachadh, gu sònraichte ann an leasachadh seann phròiseact mòr, feumaidh sgil. Ma thèid a dhèanamh ceàrr, faodaidh an anailisiche obair a chuir ris, leasachadh a lughdachadh, agus an sgioba a chuir dheth. Bruidhnidh sinn gu h-aithghearr mu mar as urrainn dhut dèiligeadh gu ceart ri amalachadh mion-sgrùdadh statach a-steach don phròiseas leasachaidh agus tòiseachadh air a chleachdadh mar phàirt de CI / CD.

Ro-ràdh

O chionn ghoirid chaidh m’ aire a tharraing chun fhoillseachadh "A 'tòiseachadh le mion-sgrùdadh statach gun a bhith a' toirt thairis air an sgioba". Air an aon làimh, is e artaigil math a tha seo as fhiach eòlas fhaighinn air. Air an làimh eile, tha e coltach riumsa nach eil e fhathast a ’toirt seachad làn fhreagairt air mar a chuireas tu mion-sgrùdadh statach an gnìomh gun phian ann am pròiseact le mòran Tha an artaigil ag ràdh gun urrainn dhut gabhail ri fiachan teicnigeach agus obrachadh a-mhàin air còd ùr, ach chan eil freagairt sam bith air dè a nì thu leis na fiachan teicnigeach seo nas fhaide air adhart.

Tha an sgioba PVS-Studio againn a’ toirt seachad a bheachd air a’ chuspair seo. Bheir sinn sùil air mar a dh’ èirich an duilgheadas a thaobh buileachadh anailisiche còd statach sa chiad àite, mar a gheibh thu thairis air an duilgheadas seo, agus mar a chuireas tu às do fhiachan teicnigeach mean air mhean.

Iris

Mar as trice chan eil e duilich a chuir air bhog agus faicinn mar a bhios anailisiche statach ag obair [1]. Is dòcha gum faic thu mearachdan inntinneach no eadhon so-leòntachd eagallach sa chòd. Faodaidh tu eadhon rudeigin a cheartachadh, ach an uairsin bidh mòran de luchd-prògramaidh a ’toirt seachad.

Bidh a h-uile anailisiche statach a’ toirt a-mach dearbhaidhean meallta. Tha seo na fheart den mhodh sgrùdaidh còd statach, agus chan urrainnear dad a dhèanamh mu dheidhinn. Anns a 'chùis choitcheann, is e duilgheadas nach gabh fuasgladh a tha seo, mar a chaidh a dhearbhadh le teòirim Rice [2]. Cha chuidich algorithms ionnsachadh inneal nas motha [3]. Fiù mura h-urrainn do neach an-còmhnaidh innse a bheil seo no an còd sin ceàrr, cha bu chòir dùil a bhith agad ri seo bhon phrògram :).

Chan eil nithean ceàrr na dhuilgheadas ma tha an anailisiche statach air a rèiteachadh mu thràth:

  • Seataichean riaghailt neo-iomchaidh do chiorramaich;
  • Chaidh cuid de dhiagnosis neo-iomchaidh a chur à comas;
  • Ma tha sinn a’ bruidhinn mu dheidhinn C no C ++, tha macros air an comharrachadh anns a bheil structaran sònraichte a dh’ adhbharaicheas rabhaidhean gun fheum a’ nochdadh anns a h-uile h-àite far a bheilear a’ cleachdadh macros mar sin;
  • Tha gnìomhan fhèin air an comharrachadh a bhios a’ coileanadh gnìomhan coltach ri gnìomhan siostam (an analogue fhèin cuimhneachail no printf) [4];
  • Tha nithean ceàrr air an ciorramachadh gu sònraichte le bhith a’ cleachdadh bheachdan;
  • Agus mar sin air adhart.

Anns a 'chùis seo, faodaidh sinn a bhith an dùil ìre ìosal dearbhach ceàrr de mu 10-15% [5]. Ann am faclan eile, seallaidh 9 a-mach à 10 rabhaidhean anailisiche fìor dhuilgheadas sa chòd, no co-dhiù “còd le fàileadh làidir.” Aontaich, tha an suidheachadh seo air leth tlachdmhor, agus tha an anailisiche na fhìor charaid don phrògramadair.

Mar a chuireas tu anailisiche còd statach an gnìomh ann am pròiseact dìleab gun a bhith a’ toirt air falbh an sgioba
Ann an da-rìribh, ann am pròiseact mòr, bidh an dealbh tùsail gu tur eadar-dhealaichte. Bidh an anailisiche a’ toirt a-mach ceudan no mìltean de rabhaidhean airson còd dìleab. Tha e do-dhèanta tuigsinn gu sgiobalta dè am fear de na rabhaidhean sin a tha buntainneach agus dè nach eil. Tha e neo-chùramach suidhe sìos agus tòiseachadh a 'dèiligeadh ris na rabhaidhean sin uile, oir bidh am prìomh obair sa chùis seo a' stad airson làithean no seachdainean. Mar as trice, chan urrainn do sgioba pàigheadh ​​​​airson a leithid de shuidheachadh. Bidh cuideachd àireamh mhòr de diffs ann a bhios a’ milleadh eachdraidh an atharrachaidh. Agus tha e do-sheachanta gun toir deasachadh mòr luath de dh’ uimhir de chriomagan sa chòd typos agus mearachdan ùra.

Agus nas cudromaiche, chan eil a leithid de chleas anns an t-sabaid an aghaidh rabhaidhean a’ dèanamh mòran ciall. Aontaich leis gu bheil am pròiseact air a bhith a’ ruith gu soirbheachail airson grunn bhliadhnaichean, gu bheil a’ mhòr-chuid de na mearachdan èiginneach ann air an ceartachadh mar-thà. Bha, bha na fuasglaidhean sin gu math daor, dh'fheumadh iad a bhith air an dì-bhugachadh, fhuair iad fios air ais àicheil bho luchd-cleachdaidh mu bhiteagan, agus mar sin air adhart. Chuidicheadh ​​​​anailisiche statach mòran de na mearachdan sin aig ìre còdaidh a cheartachadh, gu sgiobalta agus gu saor. Ach an-dràsta, aon dòigh no dòigh eile, tha na mearachdan sin air an suidheachadh, agus bidh an anailisiche sa mhòr-chuid a’ lorg mhearachdan neo-èiginneach san t-seann chòd. Is dòcha nach tèid an còd seo a chleachdadh, is ann ainneamh a thèid a chleachdadh, agus is dòcha nach toir mearachd ann builean follaiseach. Is dòcha an àiteigin gu bheil an sgàil bhon phutan an dath ceàrr, ach chan eil seo a’ cur bacadh air cleachdadh neach sam bith den toradh.

Gu dearbh, tha eadhon mearachdan beaga fhathast nan mearachdan. Agus uaireannan faodaidh mearachd fìor so-leòntachd fhalach. Ach, tha e coltach gur e beachd amharasach a th’ ann a bhith a’ leigeil seachad a h-uile càil agus a’ caitheamh làithean / seachdainean a’ dèiligeadh ri uireasbhaidhean a tha gan nochdadh fhèin.

Bidh luchd-prògramaidh a 'coimhead, a' coimhead, a 'coimhead air na rabhaidhean sin uile mun t-seann chòd obrach ... Agus tha iad a' smaoineachadh: is urrainn dhuinn a dhèanamh às aonais mion-sgrùdadh statach. Nach sgrìobh sinn gnìomh feumail ùr.

Nan dòigh fhèin, tha iad ceart. Tha iad a’ dèanamh a-mach gum feum iad an toiseach cuidhteas fhaighinn de na rabhaidhean sin uile. Is ann dìreach an uairsin a gheibh iad buannachd bho bhith a’ cleachdadh an anailis còd gu cunbhalach. Rud eile, bidh rabhaidhean ùra dìreach a’ bàthadh ann an seann fheadhainn, agus cha toir duine aire dhaibh.

Is e seo an aon samhlachas ri rabhaidhean neach-cruinneachaidh. Chan e gun adhbhar a tha iad a 'moladh an àireamh de rabhaidhean compiler a chumail aig 0. Ma tha 1000 rabhaidhean ann, an uairsin nuair a tha 1001 ann, cha toir duine aire dha, agus chan eil e soilleir càite an coimhead thu airson an rabhadh as ùire seo.

Mar a chuireas tu anailisiche còd statach an gnìomh ann am pròiseact dìleab gun a bhith a’ toirt air falbh an sgioba
Is e an rud as miosa san sgeulachd seo ma tha cuideigin bho shuas aig an àm seo a’ toirt ort mion-sgrùdadh còd statach a chleachdadh. Cha toir seo ach an sgioba air falbh, oir bhon t-sealladh aca bidh iom-fhillteachd biùrocratach a bharrachd ann nach fhaigh ach air an t-slighe. Cha toir duine sùil air aithisgean an anailisiche, agus bidh a h-uile cleachdadh dìreach “air pàipear”. An fheadhainn sin. Gu foirmeil, tha mion-sgrùdadh air a thoirt a-steach don phròiseas DevOps, ach ann an cleachdadh chan eil seo na bhuannachd do dhuine sam bith. Chuala sinn sgeulachdan mionaideach aig bothain bho luchd-frithealaidh na co-labhairt. Faodaidh eòlas mar seo luchd-prògramaidh a bhrosnachadh bho bhith a’ cleachdadh innealan sgrùdaidh statach airson ùine mhòr, mura h-eil gu bràth.

Cur an gnìomh agus cuir às do fhiachan teicnigeach

Gu dearbh, chan eil dad duilich no eagallach mu bhith a’ toirt a-steach mion-sgrùdadh statach eadhon ann an seann phròiseact mòr.

CI / CD

A bharrachd air an sin, faodar an anailisiche a dhèanamh sa bhad mar phàirt den phròiseas leasachaidh leantainneach. Mar eisimpleir, tha goireasan ann an cuairteachadh PVS-Studio airson an aithisg fhaicinn gu h-iomchaidh anns a’ chruth a dh’ fheumas tu, agus fiosan do luchd-leasachaidh a sgrìobh earrannan trioblaideach den chòd. Dhaibhsan aig a bheil barrachd ùidh ann a bhith a’ cur air bhog PVS-Studio bho shiostaman CI/CD, tha mi a’ moladh gum bi sibh eòlach air an fheadhainn fhreagarrach. earrann sgrìobhainnean agus sreath de artaigilean:

Ach rachamaid air ais gu cùis àireamh mhòr de rudan ceàrr aig na ciad ìrean de bhith a’ buileachadh innealan sgrùdaidh còd.

A' càradh fiachan teicnigeach a th' ann mar-thà agus a' dèiligeadh ri rabhaidhean ùra

Leigidh sgrùdairean statach malairteach ùr-nodha leat sgrùdadh a dhèanamh air rabhaidhean ùra a tha a’ nochdadh ann an còd ùr no atharraichte. Tha buileachadh an uidheamachd seo eadar-dhealaichte, ach tha an rud mar an ceudna. Anns an anailisiche statach PVS-Studio, tha an gnìomh seo air a bhuileachadh mar a leanas.

Gus tòiseachadh gu sgiobalta air mion-sgrùdadh statach a chleachdadh, tha sinn a ’moladh gum bi luchd-cleachdaidh PVS-Studio a’ cleachdadh an uidheamachd airson casg mòr air rabhaidhean [6]. Tha am beachd coitcheann mar a leanas. Chuir an neach-cleachdaidh an anailisiche air bhog agus fhuair e mòran rabhaidhean. Leis gu bheil pròiseact a tha air a bhith ga leasachadh airson grunn bhliadhnaichean beò, a’ leasachadh agus a’ dèanamh airgead, is coltaiche nach bi mòran rabhaidhean san aithisg a’ nochdadh lochdan èiginneach. Ann am faclan eile, tha biastagan èiginneach air an suidheachadh mar-thà aon dòigh no dòigh eile le bhith a’ cleachdadh dhòighean nas daoire no mar thoradh air fios air ais bho luchd-ceannach. A rèir sin, faodar beachdachadh air a h-uile dad a lorgas an anailisiche an-dràsta mar fhiachan teignigeach, rud nach eil comasach feuchainn ri cuir às sa bhad.

Faodaidh tu innse do PVS-Studio beachdachadh air na rabhaidhean sin neo-iomchaidh airson a-nis (sàbhail fiachan teicnigeach airson nas fhaide air adhart), agus cha nochd e iad tuilleadh. Bidh an anailisiche a’ cruthachadh faidhle sònraichte far am bi e a’ sàbhaladh fiosrachadh mu mhearachdan nach eil inntinneach fhathast. Agus a-nis cha toir PVS-Studio rabhaidhean a-mach ach airson còd ùr no atharraichte. A bharrachd air an sin, tha seo uile air a chuir an gnìomh gu ciallach. Ma tha, mar eisimpleir, loidhne falamh air a chur ri toiseach an fhaidhle còd stòr, tha an anailisiche a 'tuigsinn, gu dearbh, nach eil dad air atharrachadh, agus cumaidh e sàmhach. Faodar am faidhle comharrachaidh seo a chuir ann an siostam smachd dreach. Tha am faidhle mòr, ach chan eil seo na dhuilgheadas, oir chan eil feum air a stòradh gu tric.

A-nis chì gach prògramadair rabhaidhean co-cheangailte ri còd ùr no atharraichte a-mhàin. Mar sin, faodaidh tu tòiseachadh air an anailisiche a chleachdadh, mar a chanas iad, bhon ath latha. Agus faodaidh tu tilleadh gu fiachan teicnigeach nas fhaide air adhart, agus mean air mhean ceartaich mearachdan agus rèitich an anailisiche.

Mar sin, chaidh a’ chiad duilgheadas le buileachadh an anailisiche ann an seann phròiseact mòr fhuasgladh. A-nis leig dhuinn a-mach dè a nì sinn le fiachan teicnigeach.

Ceartachaidhean bug agus ath-shuidheachadh

Is e an rud as sìmplidh agus as nàdarra ùine a chuir an dàrna taobh gus rabhaidhean anailisiche a tha air am bacadh gu mòr a sgrùdadh agus dèiligeadh riutha mean air mhean. An àiteigin bu chòir dhut mearachdan sa chòd a cheartachadh, an àiteigin bu chòir dhut ath-factaraidh innse don anailisiche nach eil an còd na dhuilgheadas. Eisimpleir shìmplidh:

if (a = b)

Bidh a’ mhòr-chuid de luchd-cruinneachaidh agus sgrùdairean C ++ a’ gearain mun chòd sin, leis gu bheil coltas ann gu bheil iad gu mòr airson sgrìobhadh. (a == b). Ach tha aonta neo-labhairteach ann, agus mar as trice tha seo air a thoirt fa-near anns na sgrìobhainnean, ma tha brathan a bharrachd ann, thathas den bheachd gun do sgrìobh am prògramadair a leithid de chòd a dh’aona ghnothach, agus chan eil feum air mionnachadh. Mar eisimpleir, anns na sgrìobhainnean PVS-Studio airson diagnosachd V559 (CWE-481) tha e sgrìobhte gu soilleir gum bi an loidhne a leanas air a mheas ceart agus sàbhailte:

if ((a = b))

Eisimpleir eile. A bheil e air a dhìochuimhneachadh sa chòd C ++ seo? fois no nach eil?

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

Bheir an anailisiche PVS-Studio rabhadh an seo V796 (CWE-484). Is dòcha nach e mearachd a tha seo, agus sa chùis seo bu chòir dhut sanas a thoirt don parser le bhith a’ cur a’ bhuadh ris [[tuilleadh]] no, mar eisimpleir, __feart__((fallthrough)):

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

Faodar a ràdh nach eil atharrachaidhean còd mar sin a’ ceartachadh a’ bhiast. Tha, tha seo fìor, ach tha e a 'dèanamh dà rud feumail. An toiseach, tha aithisg an anailisiche a’ faighinn cuidhteas nithean ceàrr. San dàrna h-àite, bidh an còd nas so-thuigsinn dha na daoine a tha an sàs ann a chumail suas. Agus tha seo glè chudromach! Airson seo a-mhàin, is fhiach mion-atharrachaidhean a dhèanamh gus an còd a dhèanamh nas soilleire agus nas fhasa a chumail suas. Leis nach eil an anailisiche a’ tuigsinn a bheil feum air “briseadh” no nach eil, bidh e neo-shoilleir do cho-phrògraman cuideachd.

A bharrachd air rèiteachadh bug agus ath-sgrùdaidhean, faodaidh tu gu sònraichte cuir às do rabhaidhean anailis meallta a tha follaiseach. Faodar cuid de dhiagnosachd neo-iomchaidh a chuir à comas. Mar eisimpleir, tha cuideigin den bheachd gu bheil rabhaidhean gun fheum V550 mu bhith a’ dèanamh coimeas eadar luachan fleòdraidh/dùbailte. Agus tha cuid gan seòrsachadh mar rud cudromach agus airidh air sgrùdadh [7]. Dè na rabhaidhean a thathas a’ meas iomchaidh agus dè nach eil an urra ris an sgioba leasachaidh co-dhùnadh.

Tha dòighean eile ann gus rabhaidhean meallta a chumail fodha. Mar eisimpleir, chaidh iomradh a thoirt air macro markup na bu thràithe. Tha seo uile air a mhìneachadh nas mionaidiche anns na sgrìobhainnean. Is e an rud as cudromaiche a bhith a’ tuigsinn ma tha thu mean air mhean agus gu riaghailteach a’ dèiligeadh ri bhith ag obair le nithean ceàrr, chan eil dad ceàrr orra. Bidh a’ mhòr-chuid de rabhaidhean neo-inntinneach a’ dol à sealladh às deidh an rèiteachadh, agus chan eil ann ach àiteachan a dh’ fheumas sgrùdadh faiceallach agus cuid de dh’ atharrachaidhean sa chòd.

Cuideachd, bidh sinn an-còmhnaidh a’ cuideachadh ar luchd-dèiligidh gus PVS-Studio a stèidheachadh ma dh’ èiricheas duilgheadasan sam bith. A bharrachd air an sin, bha cùisean ann nuair a chuir sinn sinn fhìn air falbh rabhaidhean meallta agus a’ ceartachadh mhearachdan [8]. Dìreach air eagal, chuir mi romham a ràdh gu bheil an roghainn seo airson co-obrachadh leudaichte comasach cuideachd :).

Modh ratchet

Tha dòigh inntinneach eile ann airson càileachd còd a leasachadh mean air mhean le bhith a ’cur às don rabhadh anailisiche statach. Is e an loidhne as ìsle nach urrainn an àireamh de rabhaidhean a dhol sìos.

Mar a chuireas tu anailisiche còd statach an gnìomh ann am pròiseact dìleab gun a bhith a’ toirt air falbh an sgioba

Tha an àireamh de rabhaidhean a chuir an anailisiche statach a-mach air a chlàradh. Tha geata càileachd air a rèiteachadh ann an dòigh nach urrainn dhut a-nis ach còd a chuir a-steach nach àrdaich an àireamh de ghnìomhachd. Mar thoradh air an sin, bidh am pròiseas lughdachadh mean air mhean air an àireamh de rabhaidhean a ’tòiseachadh le bhith ag atharrachadh an anailisiche agus a’ ceartachadh mhearachdan.

Fiù ma tha neach ag iarraidh beagan meallta agus a 'co-dhùnadh a dhol seachad air a' gheata càileachd chan ann le bhith a 'cur às do rabhaidhean anns a' chòd ùr aige, ach le bhith a 'leasachadh an t-seann chòd treas-phàrtaidh, chan eil seo eagallach. An aon rud, bidh an ratchet a ’cuairteachadh ann an aon taobh, agus mean air mhean bidh an àireamh de lochdan a’ dol sìos. Fiù mura h-eil neach airson na h-uireasbhaidhean ùra aige fhèin a cheartachadh, feumaidh e fhathast rudeigin a leasachadh anns a ’chòd nàbaidh. Aig àm air choreigin, thig na dòighean furasta air an àireamh de rabhaidhean a lughdachadh gu crìch, agus thig àm nuair a thèid fìor bhiteagan a chàradh.

Tha an dòigh-obrach seo air a mhìneachadh nas mionaidiche ann an artaigil fìor inntinneach le Ivan Ponomarev "Cuir mion-sgrùdadh statach an sàs sa phròiseas, seach a bhith ga chleachdadh gus biastagan a lorg", a tha mi a’ moladh a leughadh do dhuine sam bith aig a bheil ùidh ann a bhith a’ leasachadh càileachd còd.

Tha aithisg aig ùghdar an artaigil air a’ chuspair seo cuideachd: “Mion-sgrùdadh statach leantainneach".

co-dhùnadh

Tha mi an dòchas às deidh an artaigil seo, gum bi luchd-leughaidh a’ gabhail barrachd ri innealan sgrùdaidh statach agus gum bi iad airson an cur an sàs sa phròiseas leasachaidh. Ma tha ceist sam bith agad, tha sinn an-còmhnaidh deiseil comhairle luchd-cleachdaidh an anailisiche statach againn PVS-Studio agus cuideachadh le bhith ga bhuileachadh.

Tha teagamhan àbhaisteach eile ann a thaobh am faod mion-sgrùdadh statach a bhith goireasach agus feumail. Dh’ fheuch mi ris a’ mhòr-chuid de na teagamhan sin a chuir às anns an fhoillseachadh “Adhbharan airson an anailisiche còd statach PVS-Studio a thoirt a-steach don phròiseas leasachaidh” [9].

Tapadh leibh airson an aire agus thig скачать agus feuch an anailisiche PVS-Studio.

Ceanglaichean a bharrachd

  1. Andrey Karpov. Ciamar a chì mi rabhaidhean inntinneach gu sgiobalta a bhios an anailisiche PVS-Studio a’ toirt a-mach airson còd C agus C ++?
  2. Uicipeid Teòirim Rice.
  3. Andrey Karpov, Victoria Khanieva. A’ cleachdadh ionnsachadh inneal ann an mion-sgrùdadh statach air còd stòr a’ phrògraim.
  4. PVS-Studio. Sgrìobhainnean. Roghainnean breithneachaidh a bharrachd.
  5. Andrey Karpov. Feartan an anailisiche PVS-Studio a’ cleachdadh eisimpleir Prìomh Leabharlannan EFL, 10-15% dearbhaidhean meallta.
  6. PVS-Studio. Sgrìobhainnean. Mass suppression de theachdaireachdan analyzer.
  7. Ivan Andryashin. Mu mar a rinn sinn deuchainn air mion-sgrùdadh statach air a’ phròiseact againn air simuladair foghlaim de lannsa X-ray endovascular.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Mar a leasaich sgioba PVS-Studio còd Unreal Engine.
  9. Andrey Karpov. Adhbharan airson an anailisiche còd statach PVS-Studio a thoirt a-steach don phròiseas leasachaidh.

Mar a chuireas tu anailisiche còd statach an gnìomh ann am pròiseact dìleab gun a bhith a’ toirt air falbh an sgioba

Ma tha thu airson an artaigil seo a cho-roinn le luchd-èisteachd Beurla, cleachd an ceangal eadar-theangachaidh: Andrey Karpov. Mar a bheir thu a-steach anailisiche còd statach ann am pròiseact dìleab agus gun a bhith a’ dì-mhisneachadh an sgioba.

Source: www.habr.com

Cuir beachd ann