Anailís statach a chur i bhfeidhm sa phróiseas, seachas é a úsáid chun fabhtanna a aimsiú

Spreagadh mé an t-alt seo a scríobh ag an méid mór ábhar ar anailís statach atá ag teacht níos mó ar mo aird. Gcéad dul síos, seo Blag stiúideo PVS, a chuireann chun cinn go gníomhach é féin ar Habré le cabhair ó athbhreithnithe ar earráidí a aimsíonn a n-uirlis i dtionscadail foinse oscailte. Le déanaí PVS-stiúideo i bhfeidhm Tacaíocht Java, agus, ar ndóigh, na forbróirí IntelliJ IDEA, a bhfuil an-tógtha i anailíseoir dócha gurb é an ceann is airde chun cinn do Java lá atá inniu ann, níorbh fhéidir fanacht amach.

Agus athbhreithnithe den sórt sin á léamh, gheobhaidh tú an mothú go bhfuil muid ag caint faoi elixir draíochta: brúigh an cnaipe, agus anseo tá sé - liosta de na lochtanna roimh do chuid súl. De réir mar a fheabhsaíonn anailísí, go bhfaighidh níos mó agus níos mó fabhtanna go huathoibríoch, agus beidh na táirgí a scanadh na robots seo níos fearr agus níos fearr, gan aon iarracht ar ár gcuid.

Ach níl aon elixirs draíochta ann. Ba mhaith liom labhairt faoi na rudaí nach bpléitear go hiondúil i bpoist mar “seo na rudaí is féidir lenár róbat a aimsiú”: cad nach féidir le hanailíseoirí a dhéanamh, cad é a ról agus a n-áit i ndáiríre sa phróiseas seachadta bogearraí, agus conas iad a chur i bhfeidhm i gceart .

Anailís statach a chur i bhfeidhm sa phróiseas, seachas é a úsáid chun fabhtanna a aimsiú
Ratchet (foinse: Vicipéid).

Cad nach féidir le hanailíseoirí statacha a dhéanamh riamh

Cad is anailís cód foinse ann, ó thaobh praiticiúil de? Soláthraímid roinnt cód foinse mar ionchur, agus mar aschur, i mbeagán ama (i bhfad níos giorra ná tástálacha a rith) faighimid roinnt faisnéise faoinár gcóras. Is é an teorainn bhunúsach atá dosháraithe go matamaiticiúil ná nach féidir linn ach aicme sách cúng faisnéise a fháil ar an mbealach seo.

Is é an sampla is cáiliúla de fhadhb nach féidir a réiteach trí úsáid a bhaint as anailís statach fadhb múchadh: Is teoirim í seo a chruthaíonn go bhfuil sé dodhéanta algartam ginearálta a fhorbairt a fhéadfaidh a chinneadh ó chód foinse an chláir cé acu an lúbfaidh sé nó an gcríochnóidh sé in am teoranta. Síneadh ar an teoirim seo Teoirim Rís, a shonraíonn, maidir le haon airí neamhfhánach d’fheidhmeanna ináirimh, gur fadhb do-rianta algartamaíoch é cinneadh a dhéanamh an ndéanann clár treallach meastóireacht ar fheidhm le maoin den sórt sin. Mar shampla, tá sé dodhéanta anailísí a scríobh a fhéadfaidh a chinneadh ó aon chód foinseach an bhfuil an clár atá á anailísiú ina chur i bhfeidhm algartam a ríomhann, abair, cearnógú slánuimhir.

Mar sin, tá teorainneacha dosháraithe ag baint le feidhmiúlacht anailíseoirí statacha. Ní bheidh anailísí statach in ann rudaí mar, mar shampla, "eisceacht pointeoir nialasach" a bhrath i dteangacha a cheadaíonn luach nialasach, nó i ngach cás lena gcinntear tarlú an” tréith gan aimsiú" i dteangacha atá clóscríofa go dinimiciúil. Is é an rud is féidir leis an anailísí statach is airde a dhéanamh ná aird a tharraingt ar chásanna speisialta, arb é an líon acu, i measc na bhfadhbanna go léir a d’fhéadfadh a bheith agat le do chód foinse, ná, gan áibhéil, titim san aigéan.

Ní bhaineann anailís statach le fabhtanna a aimsiú

Ón méid thuas, seo a leanas an chonclúid: ní bealach é anailís statach chun líon na lochtanna i gclár a laghdú. Ba mhaith liom a rá: nuair a chuirtear isteach ar do thionscadal den chéad uair, gheobhaidh sé áiteanna “suimiúla” sa chód, ach, is dócha, ní bhfaighidh sé aon lochtanna a chuireann isteach ar cháilíocht do chláir.

Tá na samplaí lochtanna a aimsíonn anailíseoirí go huathoibríoch go hiontach, ach níor cheart dúinn dearmad a dhéanamh gur aimsíodh na samplaí seo trí shraith mhór de bhunachar cód mór a scanadh. De réir an phrionsabail chéanna, aimsíonn hackers a bhfuil an deis acu roinnt pasfhocail shimplí a thriail ar líon mór cuntas ar deireadh na cuntais sin a bhfuil pasfhocal simplí acu.

An gciallaíonn sé seo nár cheart anailís statach a úsáid? Ar ndóigh ní! Agus ar an gcúis chéanna go díreach is fiú gach focal faire nua a sheiceáil lena chinntiú go bhfuil sé san áireamh ar an liosta stad de phasfhocail “simplí”.

Is éard atá i gceist le hanailís statach ná fabht a aimsiú

Go deimhin, tá na fadhbanna a réitítear go praiticiúil trí anailís i bhfad níos leithne. Tar éis an tsaoil, go ginearálta, is éard atá i gceist le hanailís statach aon fhíorú ar chóid foinse a dhéantar sula seoltar iad. Seo roinnt rudaí is féidir leat a dhéanamh:

  • Stíl códaithe a sheiceáil sa chiall is leithne den fhocal. Áiríonn sé seo formáidiú a sheiceáil, úsáid lúibíní folamh/breise a lorg, tairseacha a shocrú ar mhéadracht amhail líon na línte/castacht chiochlomatic modha, etc. - rud ar bith a d’fhéadfadh bac a chur ar inléiteacht agus inchothaitheacht an chóid. I Java, tá uirlis den sórt sin Checkstyle, i Python - flake8. Tugtar “lintéir” ar chláir den aicme seo de ghnáth.
  • Ní hamháin gur féidir cód inrite a anailísiú. Is féidir (agus ba cheart!) comhaid acmhainne ar nós JSON, YAML, XML, .airí a sheiceáil go huathoibríoch le haghaidh bailíochta. Tar éis an tsaoil, tá sé níos fearr a fháil amach go bhfuil struchtúr JSON briste mar gheall ar roinnt comharthaí athfhriotail gan péire ag céim luath d’fhíorú Iarratas Tarraingthe uathoibríoch ná le linn rith na tástála nó am rite? Tá uirlisí cuí ar fáil: e.g. YAMLlint, JSONLint.
  • Is cineál anailíse statach é tiomsú (nó parsáil do theangacha dinimiciúil ríomhchlárúcháin). Go ginearálta, tá tiomsaitheoirí in ann rabhaidh a tháirgeadh a léiríonn fadhbanna le cáilíocht an chóid foinse agus níor cheart neamhaird a dhéanamh orthu.
  • Uaireanta bíonn níos mó i gceist le tiomsú ná cód inrite a thiomsú. Mar shampla, má tá doiciméadú san fhormáid agat AsciiDoctor, ansin agus é á iompú ina HTML/PDF an láimhseálaí AsciiDoctor (Breiseán Maven) in ann rabhaidh a eisiúint, mar shampla, faoi naisc inmheánacha briste. Agus is cúis mhaith é seo gan glacadh leis an Iarratas Tarraingthe le hathruithe doiciméadaithe.
  • Is cineál anailíse statach é seiceáil litrithe freisin. Fóntas aspell in ann an litriú a sheiceáil ní hamháin i ndoiciméadú, ach freisin i gcód foinse cláir (tuairimí agus liteartha) i dteangacha ríomhchlárúcháin éagsúla, lena n-áirítear C/C++, Java agus Python. Is locht freisin é earráid litrithe sa chomhéadan úsáideora nó sa doiciméadú!
  • Tástálacha cumraíochta (faoi cad atá siad - féach. seo и seo tuarascálacha), cé go ndéantar iad a fhorghníomhú in am rite tástála aonaid ar nós pytest, is cineál anailíse statach iad freisin, ós rud é nach ndéanann siad cóid foinse a fhorghníomhú le linn a bhforghníomhaithe.

Mar a fheiceann tú, tá an ról is lú tábhacht ag cuardach do fhabhtanna sa liosta seo, agus tá gach rud eile ar fáil trí úsáid a bhaint as uirlisí foinse oscailte saor in aisce.

Cé acu de na cineálacha seo anailíse statach ar cheart duit a úsáid i do thionscadal? Ar ndóigh, an níos mó is amhlaidh is fearr! Is é an rud is mó ná é a chur i bhfeidhm i gceart, a phléifear tuilleadh.

Píblíne seachadta mar scagaire ilchéime agus anailís statach mar a chéad chéim

Is é an meafar clasaiceach do chomhtháthú leanúnach ná píblíne trína sreabhadh athruithe, ó athruithe cód foinse go seachadadh go dtí táirgeadh. Breathnaíonn seicheamh caighdeánach na gcéimeanna sa phíblíne seo mar seo:

  1. anailís statach
  2. compilyaция
  3. tástálacha aonad
  4. tástálacha comhtháthú
  5. Tástálacha Chomhéadain
  6. seiceáil láimhe

Ní aistrítear athruithe a dhiúltaítear ag an Naoú céim den phíblíne go dtí céim N+1.

Cén fáth go díreach ar an mbealach seo agus ní ar shlí eile? Sa chuid tástála den phíblíne, aithneoidh tástálaithe an phirimid tástála aitheanta.

Anailís statach a chur i bhfeidhm sa phróiseas, seachas é a úsáid chun fabhtanna a aimsiú
Pirimid tástála. Foinse: airteagal Máirtín Fowler.

Ag bun na pirimide seo tá tástálacha atá níos éasca a scríobh, níos tapúla a fhorghníomhú, agus nach bhfuil claonadh acu teip. Dá bhrí sin, ba chóir go mbeadh níos mó acu, ba cheart go gclúdódh siad níos mó cód agus go ndéanfaí iad a fhorghníomhú ar dtús. Ag barr na pirimide, tá a mhalairt fíor, mar sin ba cheart líon na dtástálacha comhtháthaithe agus Chomhéadain a laghdú go dtí an t-íosmhéid is gá. Is é an duine sa slabhra seo an acmhainn is costasaí, mall agus neamhiontaofa, agus mar sin tá sé ag an deireadh agus ní dhéanann sé ach an obair mura bhfuarthas aon lochtanna sna céimeanna roimhe seo. Mar sin féin, úsáidtear na prionsabail chéanna chun píblíne a thógáil i gcodanna nach mbaineann go díreach le tástáil!

Ba mhaith liom analaí a thairiscint i bhfoirm córas scagacháin uisce ilchéime. Soláthraítear uisce salach (athruithe le lochtanna) don ionchur; ag an aschur ní mór dúinn uisce glan a fháil, ina bhfuil gach ábhar salaithe nach dteastaíonn a dhíchur.

Anailís statach a chur i bhfeidhm sa phróiseas, seachas é a úsáid chun fabhtanna a aimsiú
Scagaire ilchéime. Foinse: Cómhaoin Wikimedia

Mar is eol duit, déantar scagairí glantacháin a dhearadh ionas gur féidir le gach easghluaiseachta ina dhiaidh sin codán níos míne d'ábhar salaithe a scagadh amach. Ag an am céanna, tá tréchur níos airde agus costas níos ísle ag cascáidí íonú garbh. In ár analaí, ciallaíonn sé seo go bhfuil geataí cáilíochta ionchuir níos tapúla, a cheangal ar iarracht níos lú chun tús a chur, agus go bhfuil siad iad féin níos unpretentious i bhfeidhm - agus is é seo an t-ord ina bhfuil siad tógtha. Is é ról na hanailíse statach, nach féidir, mar a thuigimid anois, ach na lochtanna is mó a bhaint amach, ná ról na greille “láibe” ag tús an easa scagaire.

Ní fheabhsaíonn anailís statach leis féin cáilíocht an táirge deiridh, díreach mar nach ndéanann “scagaire láibe” uisce inólta. Agus fós, i gcomhar le gnéithe eile den phíblíne, tá a thábhacht soiléir. Cé go bhféadfadh na céimeanna aschuir gach rud a dhéanann na céimeanna ionchuir a ghabháil i scagaire ilchéime, is léir cad iad na hiarmhairtí a bheidh mar thoradh ar iarracht ar chéimeanna íonúcháin amháin a dhéanamh, gan céimeanna ionchuir.

Is é an cuspóir atá leis an “gaiste láibe” ná cascáidí ina dhiaidh sin a mhaolú ó lochtanna móra a ghabháil. Mar shampla, ar a laghad, níor cheart go gcuirfeadh cód atá formáidithe go mícheart agus sáruithe ar chaighdeáin bhunaithe códaithe (cosúil le lúibíní breise nó brainsí ró-neadaithe) as an áireamh an té atá ag déanamh an athbhreithnithe cóid. Ba cheart fabhtanna cosúil le NPEanna a ghabháil le tástálacha aonaid, ach má thugann an t-anailísí le fios dúinn fiú roimh an tástáil go bhfuil fabht faoi cheangal, cuirfidh sé seo dlús suntasach lena shocrú.

Creidim go bhfuil sé soiléir anois cén fáth nach bhfeabhsaíonn anailís statach cáilíocht an táirge má úsáidtear é ó am go chéile, agus gur cheart í a úsáid i gcónaí chun athruithe a scagadh amach le lochtanna comhlán. Is ionann an cheist an gcuirfidh úsáid anailísí statach feabhas ar cháilíocht do tháirge a bheag nó a mhór le ceist a chur, “An dtiocfaidh feabhas ar cháilíocht óil uisce a thógtar as lochán salach má chuirtear trí colander é?”

Cur i bhfeidhm i dtionscadal oidhreachta

Ceist phraiticiúil thábhachtach: conas anailís statach a chur i bhfeidhm sa phróiseas comhtháthaithe leanúnach mar “gheata cáilíochta”? I gcás tástálacha uathoibríocha, tá gach rud soiléir: tá sraith tástálacha ann, is cúis leordhóthanach é teip aon cheann acu a chreidiúint nach ndearna an tionól pas a fháil sa gheata cáilíochta. Theipeann ar iarracht geata a shuiteáil ar an mbealach céanna bunaithe ar thorthaí anailíse statach: tá an iomarca rabhaidh anailíse sa chód oidhreachta, níl tú ag iarraidh neamhaird a dhéanamh orthu go hiomlán, ach tá sé dodhéanta freisin stop a chur le táirge a sheoladh. díreach toisc go bhfuil rabhaidh anailíseora ann.

Nuair a úsáidtear é den chéad uair, táirgeann an t-anailíseoir líon mór rabhaidh ar aon tionscadal, agus níl baint ag an gcuid is mó díobh le feidhmiú ceart an táirge. Tá sé dodhéanta na tuairimí seo go léir a cheartú ag an am céanna, agus níl go leor riachtanach. Tar éis an tsaoil, tá a fhios againn go n-oibríonn ár dtáirge ina iomláine, fiú sula dtabharfar isteach anailís statach!

Mar thoradh air sin, tá go leor teoranta d'úsáid ó am go chéile ar anailís statach, nó é a úsáid ach amháin i mód faisnéise, nuair a bhíonn tuarascáil anailíseora eisithe go simplí le linn tionóil. Tá sé seo comhionann le héagmais aon anailíse, mar má tá go leor rabhaidh againn cheana féin, ansin ní thugtar faoi deara go dtarlóidh duine eile (is cuma cé chomh tromchúiseach) agus an cód á athrú.

Tá na modhanna seo a leanas ar eolas chun geataí cáilíochta a thabhairt isteach:

  • Teorainn a shocrú ar líon iomlán na rabhadh nó ar líon na rabhadh roinnte ar líon na línte cód. Oibríonn sé seo go dona, toisc go gceadaíonn geata den sórt sin go saor athruithe le lochtanna nua dul tríd, chomh fada agus nach sáraítear a dteorainn.
  • Socrú, ag nóiméad áirithe, gach rabhadh d'aois sa chód mar neamhaird, agus diúltú a thógáil nuair a tharlaíonn rabhaidh nua. Soláthraíonn PVS-studio an fheidhmiúlacht seo agus roinnt acmhainní ar líne, mar shampla, Códacy. Ní raibh an deis agam oibriú i PVS-studio, mar do mo thaithí le Codacy, is í an phríomhfhadhb atá acu ná gur algartam casta nach n-oibríonn i gcónaí é earráid “sean” agus cad is earráid “nua” ann. i gceart, go háirithe má athraítear nó má athainmnítear comhaid go mór. I mo thaithí féin, d'fhéadfadh Codacy neamhaird a dhéanamh ar rabhaidh nua in iarratas tarraingt, agus ag an am céanna gan iarratas tarraingthe a rith mar gheall ar rabhaidh nach raibh baint acu le hathruithe ar chód PR ar leith.
  • Is é mo thuairim gurb é an réiteach is éifeachtaí an ceann a thuairiscítear sa leabhar Seachadadh Leanúnach “modh ratcheting”. Is é an smaoineamh bunúsach ná go bhfuil líon na rabhaidh anailíse statach mar mhaoin de gach scaoileadh, agus ní cheadaítear ach athruithe nach n-ardaíonn líon iomlán na rabhaidh.

Ratach

Oibríonn sé ar an mbealach seo:

  1. Ag an gcéim tosaigh, déantar taifead sna meiteashonraí maidir le scaoileadh líon na rabhadh sa chód a fuair na hanailíseoirí. Mar sin, nuair a thógann tú in aghaidh an tsrutha, scríobhann do bhainisteoir stórtha ní hamháin “scaoileadh 7.0.2”, ach “scaoileadh 7.0.2 ina bhfuil 100500 rabhadh seiceála.” Má úsáideann tú ardbhainisteoir stórtha (amhail Artifactory), tá sé éasca meiteashonraí den sórt sin a stóráil faoi do scaoileadh.
  2. Anois déanann gach iarratas tarraingthe, nuair a thógtar é, líon na rabhadh a thagann as a chur i gcomparáid le líon na rabhadh atá ar fáil san eisiúint reatha. Má tá méadú ar an líon seo mar thoradh ar PR, ní théann an cód thar an ngeata cáilíochta le haghaidh anailíse statach. Má thagann laghdú ar líon na rabhadh nó mura n-athraíonn, ansin téann sé thar fóir.
  3. Ag an gcéad eisiúint eile, déanfar an líon athríomh rabhaidh a thaifeadadh arís sna meiteashonraí eisiúna.

Mar sin de beagáinín ach go seasta (cosúil le nuair a oibríonn raicín), beidh claonadh ag líon na rabhadh a náid. Ar ndóigh, is féidir an córas a mhealladh trí rabhadh nua a thabhairt isteach, ach rabhadh duine eile a cheartú. Tá sé seo gnáth, toisc go dtugann sé torthaí thar achar fada: déantar rabhaidh a cheartú, mar riail, ní ina n-aonar, ach i ngrúpa de chineál áirithe ag an am céanna, agus déantar gach rabhadh inbhainte go tapa a dhíchur go tapa.

Taispeánann an graf seo líon iomlán na rabhadh Stíl Seiceála ar feadh sé mhí oibríochta a leithéid de “ratchet”. ceann dár dtionscadail OpenSource. Tá laghdú tagtha ar líon na rabhaidh ag ordú méide, agus tharla sé seo go nádúrtha, i gcomhthreo le forbairt táirgí!

Anailís statach a chur i bhfeidhm sa phróiseas, seachas é a úsáid chun fabhtanna a aimsiú

Úsáidim leagan modhnaithe den mhodh seo, ag comhaireamh rabhaidh ar leithligh de réir modúl tionscadail agus uirlis anailíse, agus mar thoradh air sin tá comhad YAML le meiteashonraí tógála a bhfuil cuma rud éigin mar seo air:

celesta-sql:
  checkstyle: 434
  spotbugs: 45
celesta-core:
  checkstyle: 206
  spotbugs: 13
celesta-maven-plugin:
  checkstyle: 19
  spotbugs: 0
celesta-unit:
  checkstyle: 0
  spotbugs: 0

In aon chóras CI chun cinn, is féidir ratchet a chur i bhfeidhm le haghaidh aon uirlisí anailíse statacha gan a bheith ag brath ar plugins agus uirlisí tríú páirtí. Táirgeann gach anailísí a thuarascáil féin i dtéacs simplí nó i bhformáid XML atá éasca le hanailís a dhéanamh air. Níl fágtha ach an loighic riachtanach a scríobh sa script CI. Is féidir leat a fheiceáil conas a chuirtear é seo i bhfeidhm inár dtionscadail foinse oscailte atá bunaithe ar Jenkins agus Artifactory anseoanseo. Braitheann an dá shampla ar an leabharlann ratchetlib: modh countWarnings() comhaireamh clibeanna xml i gcomhaid ginte ag Checkstyle agus Spotbugs ar an ngnáthbhealach, agus compareWarningMaps() cuireann sé an ratchet céanna i bhfeidhm, ag caitheamh earráid nuair a mhéadaíonn líon na rabhadh in aon cheann de na catagóirí.

Is féidir an "ratchet" a chur i bhfeidhm go suimiúil chun anailís a dhéanamh ar litriú tuairimí, litreacha téacs agus doiciméadú ag baint úsáide as aspell. Mar is eol duit, agus litriú á sheiceáil, níl gach focal nach bhfuil eolas ag an bhfoclóir caighdeánach mícheart; is féidir iad a chur le foclóir an úsáideora. Má dhéanann tú foclóir saincheaptha mar chuid de chód foinse an tionscadail, is féidir an geata cáilíochta litrithe a fhoirmiú mar seo: aspell a rith le foclóir caighdeánach agus saincheaptha níor chóir teacht ar aon earráidí litrithe.

Maidir leis an tábhacht a bhaineann leis an leagan anailísí a shocrú

Mar fhocal scoir, is é an pointe atá le tabhairt faoi deara, is cuma conas a chuireann tú anailís i bhfeidhm ar do phíblíne seachadta, ní mór leagan an anailíseora a shocrú. Má cheadaíonn tú don anailísí nuashonrú spontáineach, ansin agus an chéad iarratas tarraingthe eile á chur le chéile, d’fhéadfadh go n-ardóidh lochtanna nua nach mbaineann le hathruithe cód, ach a bhaineann leis an bhfíric go bhfuil an anailíseoir nua in ann níos mó lochtanna a aimsiú - agus brisfidh sé seo do phróiseas maidir le glacadh le hiarratais tarraingte. Ba cheart gur beart comhfhiosach é anailíseoir a uasghrádú. Mar sin féin, is riachtanas riachtanach go ginearálta socrú docht leagan gach comhpháirte tionóil agus ábhar le haghaidh plé ar leith.

Torthaí

  • Ní bhfaighidh anailís statach fabhtanna duit agus ní fheabhsóidh sé cáilíocht do tháirge mar thoradh ar fheidhmchlár amháin. Ní féidir éifeacht dhearfach ar cháilíocht a bhaint amach ach amháin trína úsáid leanúnach le linn an phróisis seachadta.
  • Ní hé an príomhthasc anailíse é fabhtanna a aimsiú; tá formhór mór na bhfeidhmeanna úsáideacha ar fáil in uirlisí foinse oscailte.
  • Geataí cáilíochta a chur i bhfeidhm bunaithe ar thorthaí anailíse statach ag an gcéad chéim den phíblíne seachadta, ag baint úsáide as “ratchet” le haghaidh cód oidhreachta.

tagairtí

  1. Seachadadh Leanúnach
  2. A. Kudryavtsev: Anailís cláir: conas a thuiscint gur ríomhchláraitheoir maith tú tuairisc a thabhairt ar mhodhanna éagsúla anailíse cód (ní hamháin statach!)

Foinse: will.com

Add a comment