Dadansoddiad statig - o'r cyflwyniad i'r integreiddio

Wedi blino o adolygu cod diddiwedd neu ddadfygio, weithiau rydych chi'n meddwl sut i symleiddio'ch bywyd. Ac ar ôl chwilio ychydig, neu drwy faglu arno’n ddamweiniol, gallwch weld yr ymadrodd hud: “Dadansoddiad statig”. Gadewch i ni weld beth ydyw a sut y gall ryngweithio â'ch prosiect.

Dadansoddiad statig - o'r cyflwyniad i'r integreiddio
Mewn gwirionedd, os ydych chi'n ysgrifennu mewn unrhyw iaith fodern, yna, heb hyd yn oed sylweddoli hynny, fe wnaethoch chi ei redeg trwy ddadansoddwr statig. Y ffaith yw bod unrhyw gasglwr modern yn darparu, er mai set fach iawn o rybuddion am broblemau posibl yn y cod. Er enghraifft, wrth lunio cod C ++ yn Visual Studio efallai y gwelwch y canlynol:

Dadansoddiad statig - o'r cyflwyniad i'r integreiddio
Yn yr allbwn hwn rydym yn gweld bod y newidyn var ni ddefnyddiwyd erioed yn unrhyw le yn y swyddogaeth. Felly mewn gwirionedd, roeddech chi bron bob amser yn defnyddio dadansoddwr cod statig syml. Fodd bynnag, yn wahanol i ddadansoddwyr proffesiynol fel Coverity, Klocwork neu PVS-Studio, efallai mai dim ond ystod fach o broblemau y gall y rhybuddion a ddarperir gan y casglwr nodi.

Os nad ydych chi'n gwybod yn sicr beth yw dadansoddiad statig a sut i'w weithredu, darllenwch yr erthygl honi ddysgu mwy am y fethodoleg hon.

Pam mae angen dadansoddiad statig arnoch chi?

Yn gryno: cyflymu a symleiddio.

Mae dadansoddiad statig yn caniatáu ichi ddod o hyd i lawer o broblemau gwahanol yn y cod: o ddefnydd anghywir o luniadau iaith i deipos. Er enghraifft, yn lle

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

Fe wnaethoch chi ysgrifennu'r cod canlynol:

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

Fel y gwelwch, mae teipio yn y llinell olaf. Er enghraifft, mae PVS-Studio yn rhoi'r rhybudd canlynol:

V537 Ystyried adolygu cywirdeb defnydd eitem 'y'.

Os ydych chi am brocio'ch dwylo i'r gwall hwn, rhowch gynnig ar enghraifft barod yn Compiler Explorer: *crio*.

Ac fel y deallwch, nid yw bob amser yn bosibl rhoi sylw i adrannau o'r fath o'r cod ar unwaith, ac oherwydd hyn, gallwch chi eistedd i lawr yn dadfygio am awr dda, gan feddwl tybed pam mae popeth yn gweithio mor rhyfedd.

Fodd bynnag, mae hyn yn amlwg yn gamgymeriad. Beth pe bai'r datblygwr yn ysgrifennu cod suboptimal oherwydd iddo anghofio rhywfaint o gynildeb yn yr iaith? Neu hyd yn oed ei ganiatáu yn y cod ymddygiad heb ei ddiffinio? Yn anffodus, mae achosion o'r fath yn gwbl gyffredin ac mae'r rhan fwyaf o'r amser yn cael ei dreulio'n difa chwilod yn gweithio'n benodol cod sy'n cynnwys teipio, gwallau nodweddiadol neu ymddygiad heb ei ddiffinio.

Ar gyfer y sefyllfaoedd hyn yr ymddangosodd dadansoddiad statig. Mae hwn yn gynorthwyydd i'r datblygwr a fydd yn tynnu sylw at wahanol broblemau yn y cod ac yn esbonio yn y ddogfennaeth pam nad oes angen ysgrifennu fel hyn, beth all arwain ato a sut i'w drwsio. Dyma enghraifft o sut y gallai fod: *crio*.

Gallwch ddod o hyd i wallau mwy diddorol y gall y dadansoddwr eu canfod yn yr erthyglau:

Nawr eich bod wedi darllen y deunydd hwn ac yn argyhoeddedig o fanteision dadansoddi statig, efallai y byddwch am roi cynnig arno. Ond ble i ddechrau? Sut i integreiddio offeryn newydd i'ch prosiect presennol? A sut i gyflwyno'r tîm iddo? Fe welwch atebion i'r cwestiynau hyn isod.

Nodyn. Nid yw dadansoddiad statig yn disodli nac yn canslo peth mor ddefnyddiol ag adolygiadau cod. Mae'n ategu'r broses hon, gan helpu i sylwi a chywiro teipiau, gwallau a dyluniadau peryglus ymlaen llaw. Mae'n llawer mwy cynhyrchiol canolbwyntio ar adolygiadau cod ar algorithmau ac eglurder cod, yn hytrach na chwilio am gromfachau anghywir neu darllen swyddogaethau cymharu diflas.

0. Dod i adnabod yr offeryn

Mae'r cyfan yn dechrau gyda fersiwn prawf. Yn wir, mae'n anodd penderfynu rhoi rhywbeth ar waith yn y broses ddatblygu os nad ydych erioed wedi gweld yr offeryn yn fyw o'r blaen. Felly, y peth cyntaf y dylech ei wneud yw llwytho i lawr Fersiwn prawf.

Beth fyddwch chi'n ei ddysgu ar y cam hwn:

  • Beth yw'r ffyrdd o ryngweithio â'r dadansoddwr;
  • A yw'r dadansoddwr yn gydnaws â'ch amgylchedd datblygu?
  • Pa broblemau sydd yn eich prosiectau ar hyn o bryd?

Ar ôl i chi osod popeth sydd ei angen arnoch, y peth cyntaf y dylech ei wneud yw rhedeg dadansoddiad o'r prosiect cyfan (ffenestri, Linux, MacOS). Yn achos PVS-Studio yn Visual Studio fe welwch lun tebyg (cliciwch):

Dadansoddiad statig - o'r cyflwyniad i'r integreiddio
Y ffaith yw bod dadansoddwyr statig fel arfer yn cyhoeddi nifer fawr o rybuddion ar gyfer prosiectau sydd â sylfaen cod mawr. Nid oes angen eu trwsio i gyd, gan fod eich prosiect eisoes yn gweithio, sy'n golygu nad yw'r problemau hyn yn hollbwysig. Fodd bynnag, chi gallwch edrych ar y rhybuddion mwyaf diddorol a'u cywiro os oes angen. I wneud hyn, mae angen i chi hidlo'r allbwn a gadael y negeseuon mwyaf dibynadwy yn unig. Yn yr ategyn PVS-Studio ar gyfer Visual Studio, gwneir hyn trwy hidlo yn ôl lefelau gwall a chategorïau. Ar gyfer yr allbwn mwyaf cywir, gadewch yn unig uchel и cyffredinol (hefyd yn clicadwy):

Dadansoddiad statig - o'r cyflwyniad i'r integreiddio
Yn wir, mae 178 o rybuddion yn llawer haws eu gweld na rhai miloedd...

Mewn tabiau Canolig и isel Yn aml mae rhybuddion da, ond mae'r categorïau hyn yn cynnwys y diagnosteg hynny sydd â llai o gywirdeb (dibynadwyedd). Mae rhagor o wybodaeth am lefelau rhybuddio ac opsiynau ar gyfer gweithio o dan Windows ar gael yma: *crio*.

Mae'n werth adolygu'r gwallau mwyaf diddorol yn llwyddiannus (a'u cywiro'n llwyddiannus). atal y rhybuddion sy'n weddill. Mae hyn yn angenrheidiol fel nad yw rhybuddion newydd yn mynd ar goll ymhlith yr hen rai. Yn ogystal, mae dadansoddwr statig yn gynorthwyydd i'r rhaglennydd, ac nid yn rhestr o fygiau. 🙂

1. awtomeiddio

Ar ôl dod yn gyfarwydd, mae'n bryd ffurfweddu ategion ac integreiddio i CI. Rhaid gwneud hyn cyn i raglenwyr ddechrau defnyddio'r dadansoddwr statig. Y ffaith yw y gall y rhaglennydd anghofio galluogi dadansoddiad neu ddim eisiau ei wneud o gwbl. I wneud hyn, mae angen i chi wneud rhywfaint o wirio terfynol o bopeth fel na all cod heb ei brofi fynd i mewn i'r gangen datblygiad cyffredinol.

Beth fyddwch chi'n ei ddysgu ar y cam hwn:

  • Pa opsiynau awtomeiddio y mae'r offeryn yn eu darparu;
  • A yw'r dadansoddwr yn gydnaws â'ch system gydosod?

Gan nad oes dogfennaeth berffaith yn bodoli, weithiau mae'n rhaid i chi ysgrifennu i mewn cefnogaeth. Mae hyn yn normal ac rydym yn hapus i'ch helpu. 🙂

Nawr, gadewch i ni symud ymlaen at wasanaethau integreiddio parhaus (CI). Gellir gweithredu unrhyw ddadansoddwr ynddynt heb unrhyw broblemau difrifol. I wneud hyn, mae angen i chi greu cam ar wahân ar y gweill, sydd fel arfer wedi'i leoli ar ôl y profion adeiladu ac uned. Gwneir hyn gan ddefnyddio amrywiol gyfleustodau consol. Er enghraifft, mae PVS-Studio yn darparu'r cyfleustodau canlynol:

Er mwyn integreiddio dadansoddiad i CI, mae angen i chi wneud tri pheth:

  • Gosodwch y dadansoddwr;
  • Rhedeg dadansoddiad;
  • Cyflwyno canlyniadau.

Er enghraifft, i osod PVS-Studio ar Linux (Debian-base), mae angen i chi redeg y gorchmynion canlynol:

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 systemau sy'n rhedeg Windows, nid oes unrhyw ffordd i osod y dadansoddwr gan y rheolwr pecyn, ond mae'n bosibl defnyddio'r dadansoddwr o'r llinell orchymyn:

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

Gallwch ddarllen mwy am ddefnyddio PVS-Studio ar systemau sy'n rhedeg Windows *yma*.

Ar ôl gosod, mae angen i chi redeg y dadansoddiad yn uniongyrchol. Fodd bynnag, argymhellir gwneud hyn dim ond ar ôl llunio a phrofion. Mae hyn oherwydd bod dadansoddiad statig fel arfer yn cymryd dwywaith yn hwy na'r gwaith llunio.

Gan fod y dull lansio yn dibynnu ar y platfform a'r nodweddion prosiect, byddaf yn dangos yr opsiwn ar gyfer C ++ (Linux) fel enghraifft:

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

Bydd y gorchymyn cyntaf yn perfformio'r dadansoddiad, a'r ail amlenniyn trosi'r adroddiad yn fformat testun, yn ei arddangos ar y sgrin ac yn dychwelyd cod dychwelyd heblaw 0 os oes rhybuddion. Gellir defnyddio mecanwaith fel hwn yn gyfleus i rwystro adeiladwaith pan fydd negeseuon gwall. Fodd bynnag, gallwch chi bob amser gael gwared ar y faner -w a pheidiwch â rhwystro cynulliad sy'n cynnwys rhybuddion.

Nodyn. Mae fformat y testun yn anghyfleus. Fe'i darperir yn syml fel enghraifft. Rhowch sylw i fformat adroddiad mwy diddorol - FullHtml. Mae'n caniatáu ichi lywio drwy'r cod.

Gallwch ddarllen mwy am sefydlu dadansoddiad ar CI yn yr erthygl "PVS-Stiwdio ac Integreiddio Parhaus" (Windows) neu "Sut i sefydlu PVS-Studio yn Travis CI" (Linux).

Iawn, rydych chi wedi ffurfweddu'r dadansoddwr ar y gweinydd adeiladu. Nawr, os bydd rhywun yn uwchlwytho cod heb ei brofi, bydd y cam dilysu yn methu, a byddwch yn gallu canfod y broblem, fodd bynnag, nid yw hyn yn gwbl gyfleus, gan ei bod yn fwy effeithlon gwirio'r prosiect nid ar ôl i'r canghennau gael eu huno, ond o'i flaen, yn y cam cais tynnu.

Yn gyffredinol, nid yw sefydlu dadansoddiad cais tynnu yn llawer gwahanol i lansiad arferol dadansoddiad ar CI. Ac eithrio'r angen i gael rhestr o ffeiliau wedi'u newid. Gellir cael y rhain fel arfer trwy gwestiynu'r gwahaniaethau rhwng canghennau gan ddefnyddio git:

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

Nawr mae angen i chi drosglwyddo'r rhestr hon o ffeiliau i'r dadansoddwr fel mewnbwn. Er enghraifft, yn PVS-Studio mae hyn yn cael ei weithredu gan ddefnyddio'r faner -S:

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

Gallwch ddarganfod mwy am ddadansoddi ceisiadau tynnu *yma*. Hyd yn oed os nad yw'ch CI ar y rhestr o wasanaethau a grybwyllir yn yr erthygl, fe welwch yr adran gyffredinol sy'n ymwneud â theori'r math hwn o ddadansoddiad yn ddefnyddiol.

Trwy sefydlu dadansoddiad o geisiadau tynnu, gallwch rwystro ymrwymiadau sy'n cynnwys rhybuddion, a thrwy hynny greu ffin na all cod heb ei brofi ei chroesi.

Mae hyn i gyd yn sicr yn dda, ond hoffwn allu gweld yr holl rybuddion mewn un lle. Nid yn unig gan y dadansoddwr statig, ond hefyd o brofion uned neu o'r dadansoddwr deinamig. Mae yna wahanol wasanaethau ac ategion ar gyfer hyn. PVS-Studio, er enghraifft, wedi ategyn i'w integreiddio i SonarQube.

2. Integreiddio ar beiriannau datblygwr

Nawr mae'n bryd gosod a ffurfweddu'r dadansoddwr ar gyfer defnydd datblygu bob dydd. Erbyn hyn rydych chi eisoes wedi dod yn gyfarwydd â'r rhan fwyaf o'r ffyrdd o weithio, felly gellir galw hyn y rhan hawsaf.

Fel yr opsiwn symlaf, gall datblygwyr osod y dadansoddwr angenrheidiol eu hunain. Fodd bynnag, bydd hyn yn cymryd llawer o amser ac yn tynnu eu sylw oddi wrth ddatblygiad, felly gallwch chi awtomeiddio'r broses hon gan ddefnyddio gosodwr a'r fflagiau angenrheidiol. Ar gyfer PVS-Studio mae yna amryw baneri ar gyfer gosod awtomataidd. Fodd bynnag, mae yna reolwyr pecynnau bob amser, er enghraifft, Chocolatey (Windows), Homebrew (macOS) neu ddwsinau o opsiynau ar gyfer Linux.

Yna bydd angen i chi osod yr ategion angenrheidiol, er enghraifft ar gyfer Visual Studio, IDEA, Rider ac ati

3. Defnydd dyddiol

Ar y cam hwn, mae'n bryd dweud ychydig eiriau am ffyrdd o gyflymu'r dadansoddwr yn ystod defnydd dyddiol. Mae dadansoddiad cyflawn o'r prosiect cyfan yn cymryd llawer o amser, ond pa mor aml ydyn ni'n newid cod trwy gydol y prosiect cyfan ar unwaith? Nid oes prin unrhyw ailffactorio sydd mor fawr fel y bydd yn effeithio ar y sylfaen cod cyfan ar unwaith. Anaml y mae nifer y ffeiliau sy'n cael eu newid ar y tro yn fwy na dwsin, felly mae'n gwneud synnwyr eu dadansoddi. Ar gyfer sefyllfa o'r fath mae modd dadansoddi cynyddrannol. Peidiwch â dychryn, nid yw hwn yn offeryn arall. Mae hwn yn fodd arbennig sy'n eich galluogi i ddadansoddi ffeiliau sydd wedi'u newid yn unig a'u dibyniaethau, ac mae hyn yn digwydd yn awtomatig ar ôl adeiladu os ydych chi'n gweithio mewn IDE gyda'r ategyn wedi'i osod.

Os bydd y dadansoddwr yn canfod problemau yn y cod a newidiwyd yn ddiweddar, bydd yn adrodd hyn yn annibynnol. Er enghraifft, bydd PVS-Studio yn dweud wrthych am hyn gan ddefnyddio rhybudd:

Dadansoddiad statig - o'r cyflwyniad i'r integreiddio
Wrth gwrs, nid yw dweud wrth ddatblygwyr am ddefnyddio'r offeryn yn ddigon. Mae angen i ni rywsut ddweud wrthyn nhw beth ydyw a sut ydyw. Yma, er enghraifft, mae erthyglau am ddechrau cyflym ar gyfer PVS-Studio, ond gallwch ddod o hyd i sesiynau tiwtorial tebyg ar gyfer unrhyw offeryn sydd orau gennych:

Mae erthyglau o'r fath yn darparu'r holl wybodaeth angenrheidiol ar gyfer defnydd bob dydd ac nid ydynt yn cymryd llawer o amser. 🙂

Hyd yn oed ar y cam o ddod i adnabod yr offeryn, fe wnaethom atal llawer o rybuddion yn ystod un o'r lansiadau cyntaf. Yn anffodus, nid yw dadansoddwyr statig yn berffaith, felly o bryd i'w gilydd maent yn rhoi positifau ffug. Fel arfer mae'n hawdd eu hatal; er enghraifft, yn yr ategyn PVS-Studio ar gyfer Visual Studio does ond angen i chi glicio ar un botwm:

Dadansoddiad statig - o'r cyflwyniad i'r integreiddio
Fodd bynnag, gallwch chi wneud mwy na dim ond eu hatal. Er enghraifft, gallwch roi gwybod am broblem i'r cymorth. Os gellir cywiro'r positif ffug, yna mewn diweddariadau yn y dyfodol gallwch sylwi bod llai a llai o bethau positif ffug yn benodol i'ch cod sylfaen bob tro.

После intеграции

Felly rydym wedi mynd trwy bob cam o integreiddio dadansoddiad statig i'r broses ddatblygu. Er gwaethaf pwysigrwydd sefydlu offer o'r fath ar CI, y lle pwysicaf i'w rhedeg yw cyfrifiadur y datblygwr. Wedi'r cyfan, nid yw dadansoddwr statig yn farnwr sy'n dweud rhywle ymhell oddi wrthych nad yw'r cod yn dda. I'r gwrthwyneb, mae'n gynorthwyydd sy'n dweud wrthych os ydych chi wedi blino ac yn eich atgoffa os ydych chi wedi anghofio rhywbeth.

Yn wir, heb ddefnydd rheolaidd, mae dadansoddiad statig yn annhebygol o symleiddio datblygiad yn sylweddol. Wedi'r cyfan, ei brif fantais i ddatblygwr yw nid yn gymaint wrth chwilio am adrannau cymhleth a dadleuol o'r cod, ond wrth eu canfod yn gynnar. Cytuno bod darganfod problem ar ôl i'r golygiadau gael eu hanfon i'w profi nid yn unig yn annymunol, ond hefyd yn cymryd llawer o amser. Mae dadansoddiad statig, pan gaiff ei ddefnyddio'n rheolaidd, yn edrych ar bob newid yn uniongyrchol ar eich cyfrifiadur ac yn adrodd am leoedd amheus wrth weithio ar y cod.

Ac os ydych chi neu'ch cydweithwyr yn dal i fod yn ansicr a yw'n werth gweithredu'r dadansoddwr, yna rwy'n awgrymu eich bod chi nawr yn dechrau darllen yr erthygl "Rhesymau dros gyflwyno'r dadansoddwr cod statig PVS-Studio i'r broses ddatblygu". Mae'n mynd i'r afael â phryderon nodweddiadol datblygwyr y bydd dadansoddiad statig yn cymryd eu hamser ac ati.

Dadansoddiad statig - o'r cyflwyniad i'r integreiddio

Os ydych chi am rannu'r erthygl hon â chynulleidfa Saesneg ei hiaith, defnyddiwch y ddolen gyfieithu: Maxim Zvyagintsev. Dadansoddiad Statig: O'r Dechrau Arni i Integreiddio.

Ffynhonnell: hab.com

Ychwanegu sylw