Anailís statach - ón réamhrá go dtí an comhtháthú

Tuirseach de athbhreithniú cód endless nó debugging, uaireanta smaoiníonn tú faoi conas a shimpliú do shaol. Agus tar éis cuardach beag a dhéanamh, nó trí thimpiste a chur air, is féidir leat an frása draíochta a fheiceáil: "Anailís statach." Feicfimid cad atá ann agus conas is féidir leis idirghníomhú le do thionscadal.

Anailís statach - ón réamhrá go dtí an comhtháthú
Go deimhin, má scríobhann tú in aon teanga nua-aimseartha, ansin, gan é a thuiscint fiú, rith tú trí anailíseoir statach é. Is é fírinne an scéil go soláthraíonn aon tiomsaitheoir nua-aimseartha, cé gur sraith bheag rabhaidh é faoi fhadhbanna a d'fhéadfadh a bheith sa chód. Mar shampla, agus cód C++ á thiomsú agat in Visual Studio b’fhéidir go bhfeicfeá iad seo a leanas:

Anailís statach - ón réamhrá go dtí an comhtháthú
Sa aschur seo feicimid go bhfuil an athróg Bhí níor úsáideadh é áit ar bith san fheidhm. Mar sin i ndáiríre, beagnach i gcónaí a d'úsáid tú anailíseoir cód statach simplí. Mar sin féin, murab ionann agus anailíseoirí gairmiúla ar nós Coverity, Klocwork nó PVS-Studio, ní fhéadfaidh na rabhaidh a sholáthraíonn an tiomsaitheoir ach raon beag fadhbanna a léiriú.

Mura bhfuil a fhios agat go cinnte cad is anailís statach ann agus conas é a chur i bhfeidhm, léigh an t-alt seochun tuilleadh a fhoghlaim faoin modheolaíocht seo.

Cén fáth a bhfuil anailís statach de dhíth ort?

In achomair: luasghéarú agus simpliú.

Ligeann anailís statach duit go leor fadhbanna éagsúla a aimsiú sa chód: ó úsáid mhícheart na dtógálacha teanga go dtí an clóscríobhán. Mar shampla, in ionad

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

Scríobh tú an cód seo a leanas:

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

Mar a fheiceann tú, tá clóscríobh sa líne dheireanach. Mar shampla, eisíonn PVS-Studio an rabhadh seo a leanas:

V537 Smaoinigh ar cheart úsáid a bhaint as mír 'y' a athbhreithniú.

Más mian leat do lámha a bhrú isteach san earráid seo, bain triail as sampla réidh in Compiler Explorer: *caoin*.

Agus mar a thuigeann tú, ní féidir i gcónaí aird a thabhairt ar a leithéid de chodanna de chód láithreach, agus mar gheall air seo, is féidir leat suí síos debugging ar feadh uair an chloig maith, ag smaoineamh cén fáth a oibríonn gach rud chomh aisteach.

Mar sin féin, is léir gur botún é seo. Cad a tharlaíonn má scríobh an forbróir cód suboptimal toisc go ndearna sé dearmad ar roinnt subtlety na teanga? Nó fiú cead é sa chód iompar neamhshainithe? Ar an drochuair, tá cásanna den sórt sin go hiomlán coitianta agus caitear an chuid is mó ama ag dífhabhtú go sonrach cód oibre ina bhfuil clóscríobh, earráidí tipiciúla nó iompar neamhshainithe.

Is ar na cásanna seo a bhí anailís statach le feiceáil. Seo cúntóir don fhorbróir a chuirfidh in iúl fadhbanna éagsúla sa chód agus a mhíneoidh sa doiciméad cén fáth nach bhfuil sé riachtanach a scríobh ar an mbealach seo, cad is féidir é a thoradh agus conas é a shocrú. Seo sampla den chuma a bheadh ​​air: *caoin*.

Is féidir leat earráidí níos suimiúla a aimsiú is féidir leis an anailísí a bhrath sna hailt:

Anois go bhfuil an t-ábhar seo léite agat agus go bhfuil tú cinnte faoi na buntáistí a bhaineann le hanailís statach, b'fhéidir gur mhaith leat triail a bhaint as. Ach cá háit le tosú? Conas uirlis nua a chomhtháthú le do thionscadal reatha? Agus conas an fhoireann a chur in aithne dó? Gheobhaidh tú freagraí ar na ceisteanna seo thíos.

Tabhair faoi deara. Ní chuireann anailís statach a leithéid de rud úsáideach in ionad nó a chealaítear le hathbhreithnithe cód. Comhlánaíonn sé an próiseas seo, ag cuidiú le clóscríobháin, míchruinneas agus dearaí contúirteacha a thabhairt faoi deara agus a cheartú roimh ré. Tá sé i bhfad níos táirgiúla díriú ar léirmheasanna cód ar algartaim agus soiléireacht cóid, seachas lúibíní nó lúibíní míchearta a lorg. feidhmeanna comparáide leadránach a léamh.

0. Ag cur aithne ar an uirlis

Tosaíonn sé ar fad le leagan trialach. Go deimhin, tá sé deacair cinneadh a dhéanamh rud éigin a chur i bhfeidhm sa phróiseas forbartha mura bhfaca tú an uirlis beo riamh. Mar sin, is é an chéad rud ba chóir duit a dhéanamh a íoslódáil leagan trialach.

Cad a fhoghlaimeoidh tú ag an gcéim seo:

  • Cad iad na bealaí chun idirghníomhú leis an anailísí;
  • An bhfuil an anailíseoir comhoiriúnach le do thimpeallacht forbartha?
  • Cad iad na fadhbanna atá i do thionscadail faoi láthair?

Tar éis duit gach rud atá uait a shuiteáil, is é an chéad rud ba chóir duit a dhéanamh ná anailís a dhéanamh ar an tionscadal iomlán (Windows, Linux, MacOS). I gcás PVS-Studio in Visual Studio feicfidh tú pictiúr den chineál céanna (inchliceáilte):

Anailís statach - ón réamhrá go dtí an comhtháthú
Is é an fírinne gur gnách go n-eisíonn anailísí statacha líon mór rabhaidh do thionscadail a bhfuil bonn cód mór acu. Ní gá iad go léir a shocrú, toisc go bhfuil do thionscadal ag obair cheana féin, rud a chiallaíonn nach bhfuil na fadhbanna seo ríthábhachtach. Mar sin féin, tú is féidir leat breathnú ar na rabhaidh is suimiúla agus iad a cheartú más gá. Chun seo a dhéanamh, ní mór duit an t-aschur a scagadh agus gan ach na teachtaireachtaí is iontaofa a fhágáil. Sa bhreiseán PVS-Studio do Visual Studio, déantar é seo trí scagadh de réir leibhéil earráide agus catagóirí. Chun an t-aschur is cruinne, fág amháin Ard- и Go ginearálta (inchliceáil freisin):

Anailís statach - ón réamhrá go dtí an comhtháthú
Go deimhin, tá sé i bhfad níos éasca 178 rabhadh a fheiceáil ná na mílte ...

I gcluaisíní Meánach и Íseal Go minic tá rabhaidh maith ann, ach cuimsíonn na catagóirí seo na diagnóisic sin a bhfuil níos lú cruinneas (iontaofacht) acu. Tá tuilleadh eolais faoi leibhéil rabhaidh agus roghanna le haghaidh oibriú faoi Windows le fáil anseo: *caoin*.

Tar éis athbhreithniú rathúil a dhéanamh ar na hearráidí is suimiúla (agus iad a cheartú go rathúil) is fiú é faoi ​​chois rabhaidh atá fágtha. Tá sé seo riachtanach ionas nach gcailltear rabhaidh nua i measc na sean-cinn. Ina theannta sin, is cúntóir é anailísí statach don ríomhchláraitheoir, agus ní liosta fabhtanna. 🙂

1. Автомatiзация

Tar éis dul i dtaithí, tá sé in am forlíontáin a chumrú agus iad a chomhtháthú le CI. Ní mór é seo a dhéanamh sula dtosaíonn ríomhchláraitheoirí ag baint úsáide as an anailísí statach. Is é an fírinne go bhféadfadh an ríomhchláraitheoir dearmad a dhéanamh ar anailís a chumasú nó nach bhfuil sé ag iarraidh é a dhéanamh ar chor ar bith. Chun seo a dhéanamh, ní mór duit roinnt seiceáil deiridh a dhéanamh ar gach rud ionas nach féidir leis an gcód neamhthástáilte dul isteach sa bhrainse forbartha ginearálta.

Cad a fhoghlaimeoidh tú ag an gcéim seo:

  • Cad iad na roghanna uathoibrithe a sholáthraíonn an uirlis;
  • An bhfuil an anailíseoir comhoiriúnach le do chóras tionóil?

Ós rud é nach bhfuil doiciméadú foirfe ann, uaireanta caithfidh tú scríobh isteach tacaíocht. Tá sé seo gnáth agus táimid sásta cabhrú leat. 🙂

Anois, a ligean ar bogadh ar aghaidh go dtí seirbhísí comhtháthú leanúnach (CI). Is féidir aon anailísí a chur i bhfeidhm iontu gan aon fhadhbanna tromchúiseacha. Chun seo a dhéanamh, ní mór duit céim ar leith a chruthú sa phíblíne, atá suite de ghnáth tar éis na tástálacha tógála agus aonaid. Déantar é seo trí úsáid a bhaint as fóntais console éagsúla. Mar shampla, soláthraíonn PVS-Studio na fóntais seo a leanas:

Chun anailís a chomhtháthú le CI, ní mór duit trí rud a dhéanamh:

  • Suiteáil an anailíseoir;
  • Rith anailís;
  • Torthaí a sheachadadh.

Mar shampla, chun PVS-Studio a shuiteáil ar Linux (Debian-base), ní mór duit na horduithe seo a leanas a rith:

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

Ar chórais a ritheann Windows, níl aon bhealach ann an anailíseoir a shuiteáil ón mbainisteoir pacáiste, ach is féidir an anailísí a imscaradh ón líne ordaithe:

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

Is féidir leat tuilleadh a léamh faoi PVS-Studio a imscaradh ar chórais a ritheann Windows *anseo*.

Tar éis a shuiteáil, ní mór duit an anailís a reáchtáil go díreach. Mar sin féin, moltar é seo a dhéanamh ach amháin tar éis tiomsú agus tástálacha a rith. Tá sé seo amhlaidh toisc go dtógann anailís statach dhá uair chomh fada leis an tiomsú de ghnáth.

Ós rud é go mbraitheann an modh seolta ar ghnéithe an ardáin agus an tionscadail, taispeánfaidh mé an rogha le haghaidh C ++ (Linux) mar shampla:

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

Déanfaidh an chéad ordú an anailís, agus an dara ceann clúdaighathraíonn an tuairisc go formáid téacs, taispeánann sé ar an scáileán í agus seolann sé cód fillte seachas 0 má bhíonn rabhaidh ann. Is féidir meicníocht mar seo a úsáid go háisiúil chun tógáil a bhlocáil nuair a bhíonn teachtaireachtaí earráide ann. Mar sin féin, is féidir leat an bhratach a bhaint i gcónaí -w agus ná bac le comhthionól ina bhfuil rabhaidh.

Tabhair faoi deara. Tá formáid an téacs deacair. Soláthraítear é go simplí mar shampla. Tabhair aird ar fhormáid tuairisce níos suimiúla - FullHtml. Ligeann sé duit nascleanúint a dhéanamh tríd an gcód.

Is féidir leat tuilleadh a léamh faoi anailís a chur ar bun ar CI san alt "PVS-Stiúideo agus Comhtháthú Leanúnach" (Windows) nó "Conas PVS-Studio a bhunú i Travis CI" (Linux).

Ceart go leor, tá an anailíseoir cumraithe agat ar an bhfreastalaí tógála. Anois, má d'uaslódáil duine cód neamhthástáilte, teipfidh an chéim fíoraithe, agus beidh tú in ann an fhadhb a bhrath, áfach, níl sé seo go hiomlán áisiúil, ós rud é go bhfuil sé níos éifeachtaí an tionscadal a sheiceáil ní tar éis na brainsí a chumasc, ach roimh é, ag an gcéim iarratais tarraingt A.

Go ginearálta, níl mórán difríochta idir bunú anailíse iarratais tarraingthe agus gnáthsheoladh anailíse ar CI. Ach amháin an gá atá le liosta de na comhaid athraithe a fháil. Is féidir iad seo a fháil de ghnáth trí na difríochtaí idir brainsí a fhiosrú ag baint úsáide as git:

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

Anois ní mór duit an liosta comhad seo a chur ar aghaidh chuig an anailísí mar ionchur. Mar shampla, i PVS-Studio cuirtear é seo i bhfeidhm ag baint úsáide as an bhratach -S:

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

Is féidir leat tuilleadh eolais a fháil faoi anailís a dhéanamh ar iarratais tarraingte *anseo*. Fiú mura bhfuil do CI ar an liosta seirbhísí a luaitear san alt, gheobhaidh tú an chuid ghinearálta atá dírithe ar theoiric an chineáil anailíse seo úsáideach.

Trí anailís a dhéanamh ar iarratais tarraingthe, is féidir leat gealltanais ina bhfuil rabhaidh a bhlocáil, rud a chruthóidh teorainn nach féidir le cód neamhthástáilte a thrasnú.

Is cinnte go bhfuil sé seo go maith, ach ba mhaith liom a bheith in ann na rabhaidh go léir a fheiceáil in aon áit amháin. Ní hamháin ón anailísí statach, ach freisin ó thástálacha aonaid nó ón anailísí dinimiciúil. Tá seirbhísí agus forlíontáin éagsúla ann chuige seo. PVS-Stiúideo, mar shampla, tá breiseán le haghaidh comhtháthú i SonarQube.

2. Comhtháthú ar mheaisíní forbróra

Anois tá sé in am an anailíseoir a shuiteáil agus a chumrú le húsáid laethúil forbartha. Faoin bpointe seo tá cur amach agat cheana féin ar an gcuid is mó de na bealaí oibre, mar sin is féidir an chuid is éasca a thabhairt air.

Mar an rogha is simplí, is féidir le forbróirí an anailíseoir riachtanach a shuiteáil iad féin. Mar sin féin, tógfaidh sé seo go leor ama agus tarraingeoidh siad ón bhforbairt iad, ionas gur féidir leat an próiseas seo a uathoibriú ag baint úsáide as suiteálaí agus na bratacha riachtanacha. Le haghaidh PVS-Studio tá éagsúla Bratacha le haghaidh suiteáil uathoibrithe. Mar sin féin, bíonn bainisteoirí pacáiste ann i gcónaí, mar shampla, Chocolatey (Windows), Homebrew (macOS) nó an iliomad roghanna le haghaidh Linux.

Ansin beidh ort na forlíontáin riachtanacha a shuiteáil, mar shampla le haghaidh Visual Studio, Tuairim, Rider etc.

3. Úsáid laethúil

Ag an gcéim seo, tá sé in am cúpla focal a rá faoi bhealaí chun an anailísí a bhrostú le linn úsáide laethúil. Tógann anailís iomlán ar an tionscadal iomlán go leor ama, ach cé chomh minic is a dhéanaimid cód a athrú ar fud an tionscadail ar fad ag an am céanna? Is ar éigean atá aon athfhachtóiriú atá chomh mór sin go ndéanfaidh sé difear láithreach don bhonn cód iomlán. Is annamh a bhíonn líon na gcomhad a athraítear ag an am céanna níos mó ná dosaen, agus mar sin tá ciall le hanailís a dhéanamh orthu. Chun a leithéid de chás tá modh anailíse incriminteach. Ná bíodh eagla ort, ní uirlis eile é seo. Is modh speisialta é seo a ligeann duit anailís a dhéanamh ar chomhaid athraithe amháin agus a gcuid spleáchais, agus tarlaíonn sé seo go huathoibríoch tar éis tógáil má tá tú ag obair i IDE leis an mbreiseán suiteáilte.

Má bhraitheann an anailíseoir fadhbanna sa chód a athraíodh le déanaí, tuairisceoidh sé é seo go neamhspleách. Mar shampla, inseoidh PVS-Studio duit faoi seo ag baint úsáide as foláireamh:

Anailís statach - ón réamhrá go dtí an comhtháthú
Ar ndóigh, ní leor a rá le forbróirí an uirlis a úsáid. Ní mór dúinn ar bhealach éigin a insint dóibh cad é agus conas atá sé. Anseo, mar shampla, tá ailt faoi thús tapa do PVS-Studio, ach is féidir leat ranganna teagaisc den chineál céanna a fháil le haghaidh aon uirlis is fearr leat:

Soláthraíonn earraí den sórt sin an fhaisnéis go léir atá riachtanach le húsáid ó lá go lá agus ní thógann siad mórán ama. 🙂

Fiú agus muid ag cur aithne ar an uirlis, chuireamar faoi chois go leor rabhadh le linn ceann de na chéad seoltaí. Ar an drochuair, níl anailíseoirí statacha foirfe, mar sin ó am go chéile tugann siad dearfacha bréagacha. De ghnáth is furasta iad a bhaint; mar shampla, sa bhreiseán PVS-Studio do Visual Studio ní gá duit ach cnaipe amháin a chliceáil:

Anailís statach - ón réamhrá go dtí an comhtháthú
Mar sin féin, is féidir leat níos mó a dhéanamh ná iad a chur faoi chois. Mar shampla, is féidir leat fadhb a thuairisciú le tacaíocht a thabhairt duit. Más féidir an deimhneach bréagach a cheartú, ansin i nuashonruithe amach anseo is féidir leat a thabhairt faoi deara go bhfuil níos lú agus níos lú deimhneacha bréagacha a bhaineann go sonrach le do bhunachar cód.

Integracy posle

Mar sin táimid tar éis dul trí na céimeanna go léir chun anailís statach a chomhtháthú sa phróiseas forbartha. In ainneoin a thábhachtaí atá sé uirlisí den sórt sin a bhunú ar CI, is é ríomhaire an fhorbróra an áit is tábhachtaí chun iad a rith. Tar éis an tsaoil, ní breitheamh é anailísí statach a deir áit éigin i bhfad uait nach bhfuil an cód go maith. Ar a mhalairt, is cúntóir é a insíonn duit má tá tú tuirseach agus cuireann sé i gcuimhne duit má tá dearmad déanta agat ar rud éigin.

Fíor, gan úsáid rialta, ní dócha go ndéanfaidh anailís statach forbairt a shimpliú go suntasach. Tar éis an tsaoil, is é an buntáiste is mó d'fhorbróir nach bhfuil an oiread sin ag cuardach ailt casta agus conspóideacha den chód, ach ina bhrath go luath. Aontaigh go bhfuil sé míthaitneamhach, ní hamháin go bhfuil sé míthaitneamhach fadhb a aimsiú tar éis na hathruithe a bheith seolta le haghaidh tástála, ach go dtógann sé go leor ama freisin. Déanann anailís statach, nuair a úsáidtear é go rialta, breathnú ar gach athrú go díreach ar do ríomhaire agus tuairiscíonn sé áiteanna amhrasacha agus tú ag obair ar an gcód.

Agus mura bhfuil tú féin nó do chomhghleacaithe fós cinnte an fiú an anailísí a chur i bhfeidhm, molaim duit tosú ar an alt a léamh anois "Cúiseanna leis an anailísí cód statach PVS-Studio a thabhairt isteach sa phróiseas forbartha". Tugann sé aghaidh ar ghnáth-imní na bhforbróirí go dtógfaidh anailís statach a gcuid ama agus mar sin de.

Anailís statach - ón réamhrá go dtí an comhtháthú

Más mian leat an t-alt seo a roinnt le lucht féachana Béarla, bain úsáid as an nasc aistriúcháin: Maxim Zvyagintsev. Anailís Statach: Ó Thosú go Comhtháthú.

Foinse: will.com

Add a comment