Shandisa static ongororo mukuita, pane kuishandisa kutsvaga tsikidzi

Ndakakurudzirwa kuti ndinyore chinyorwa ichi nehuwandu hukuru hwezvinhu pane static ongororo iri kuramba ichiuya kwandiri. Kutanga, izvi PVS-studio blog, iyo inoshingairira kusimudzira pachayo paHabrΓ© nerubatsiro rweongororo yezvikanganiso zvakawanikwa nechishandiso chavo mumapurojekiti akavhurika sosi. Munguva pfupi yapfuura PVS-studio yakaitwa Java rutsigiro, uye, hongu, vagadziri veIntelliJ IDEA, iyo yakavakirwa-mukati analyzer ingangove yakanyanya kufambira mberi yeJava nhasi, handina kukwanisa kugara kure.

Paunenge uchiverenga wongororo dzakadaro, iwe unowana manzwiro ekuti tiri kutaura nezvemashiripiti elixir: tinya bhatani, uye heino - rondedzero yezvakaremara pamberi pemeso ako. Zvinoita sekunge vaongorori vachivandudza, tsikidzi dzakawanda dzichangowanikwa, uye zvigadzirwa zvakaongororwa nemarobhoti aya zvichava nani uye zviri nani, pasina chero kuedza kwedu.

Asi hapana mashiripiti elixirs. Ini ndinoda kutaura nezve izvo zvisingawanzo kutaurwa nezvayo muzvinyorwa zvakaita se "hezvino zvinhu izvo robhoti yedu inogona kuwana": izvo vaongorori vasingakwanise kuita, ndeipi basa ravo chairo uye nzvimbo muhurongwa hwekuendesa software, uye maitiro ekuita nemazvo. .

Shandisa static ongororo mukuita, pane kuishandisa kutsvaga tsikidzi
Ratchet (chinyorwa: Wikipedia).

Izvo static analyzers hazvigone kuita

Chii chinonzi source code analysis, kubva pamaonero anoshanda? Isu tinopa imwe sosi kodhi seyekupinza, uye sekubuda, munguva pfupi (ipfupi pane yekumhanyisa bvunzo) tinowana rumwe ruzivo nezve system yedu. Iyo yakakosha uye yemasvomhu isingakundike mipimo ndeyekuti isu tinogona kuwana chete yakamanikana kirasi yeruzivo nenzira iyi.

Muenzaniso unonyanya kuzivikanwa wedambudziko risingagoni kugadziriswa uchishandisa static analysis ndeye dambudziko rekuvhara: Iyi ndiyo theorem inoratidza kuti hazvibviri kugadzira algorithm yakajairika iyo inogona kuona kubva kune iyo kodhi kodhi yechirongwa kuti ichaita loop kana kupera munguva inogumira. Kuwedzerwa kweiyi theorem ndiko Rice's theorem, iyo inotaura kuti kune chero pfuma isiri-yadiki ye computable functionals, kuona kana chirongwa chisingatarisirwi chinoongorora basa nechinhu chakadaro idambudziko rine algorithmically risingachinjiki. Semuenzaniso, hazvibviri kunyora analyzer iyo inogona kuona kubva kune chero kodhi kodhi kana chirongwa chiri kuongororwa chirikuitwa kwealgorithm inoverenga, toti, squaring yenhamba.

Saka, mashandiro eiyo static analyzers ane zvisingakundike zvisingakwanisi. A static analyzer haizombo kwanisa kuona muzviitiko zvese senge, semuenzaniso, kuitika kwe "null pointer exception" mumitauro inobvumira kukosha kwekusina, kana mune zvese zviitiko kuona kuitika kwe " chimiro hachiwanikwe" mumitauro yakanyorwa zvine simba. Zvese izvo zvinonyanya kusimudzira static analyzer zvinogona kuita kuratidza akakosha kesi, iyo nhamba iyo, pakati pematambudziko ese anogona kuitika neako kodhi kodhi, iri, pasina kuwedzeredza, kudonha mugungwa.

Kuongorora kwakasimba hakusi kwekutsvaga tsikidzi

Kubva pamusoro apa, mhedziso inotevera: static analysis haisi nzira yekuderedza kuwanda kwekukanganisa purogiramu. Ndingaite kuti nditi: kana ikashandiswa kupurojekiti yako kekutanga, inowana "inofadza" nzvimbo mukodhi, asi, kazhinji, haizowani chero hurema hunokanganisa kunaka kwechirongwa chako.

Mienzaniso yezvikanganiso zvakangowanikwa nevanoongorora zvinokatyamadza, asi isu hatifanirwe kukanganwa kuti iyi mienzaniso yakawanikwa nekutarisa yakakura seti yemakodhi mahombe. Nenzira imwecheteyo, matsotsi ane mukana wekuyedza akati wandei mapassword pahuwandu hweakaundi anozopedzisira awana maakaundi ane password iri nyore.

Izvi zvinoreva here kuti static analysis haifaniri kushandiswa? Kwete! Uye nekuda kwechikonzero chimwe chete icho chakakodzera kutarisa yega yega password kuti uone kuti inosanganisirwa mune yekumira rondedzero ye "nyore" mapassword.

Static analysis inopfuura kutsvaga tsikidzi

Muchokwadi, matambudziko anogadziriswa nekuongorora akawedzera zvakanyanya. Mushure mezvose, zvakajairika, static ongororo ndeye chero ongororo yemabviro macode anoitwa asati atanga. Hezvino zvimwe zvinhu zvaunogona kuita:

  • Kutarisa manyorerwo ekodhi mune yakafara pfungwa yezwi. Izvi zvinosanganisira zvose kutarisa mafomati, kutsvaga kushandiswa kwezvisina chinhu/mamwe maparentheses, kuseta zvikumbaridzo pamametrics senhamba yemitsara/cyclomatic complexity of a method, etc. - chero chinhu chinogona kukanganisa kuverenga nekuchengetedza kodhi. MuJava, chishandiso chakadaro ndiCheckstyle, muPython - flake8. Zvirongwa zvekirasi iyi zvinowanzodaidzwa kuti "linter."
  • Kwete chete executable kodhi inogona kuongororwa. Mafaira ezvekushandisa akadai seJSON, YAML, XML, .properties anogona (uye anofanira!) kungoongororwa otomatiki kuti ane chokwadi here. Mushure mezvose, zviri nani kuziva kuti iyo JSON chimiro chakatyoka nekuda kwemamwe maquotes asina kupetwa padanho rekutanga reotomatiki Dhonza Chikumbiro chekuongorora pane panguva yekuedza bvunzo kana kumhanya nguva? Zvishandiso zvakakodzera zviripo: e.g. YAMLlint, JSONLint.
  • Compilation (kana kupatsanura kune ane simba programming mitauro) zvakare imhando yekuongorora kwakamira. Kazhinji, vagadziri vanokwanisa kugadzira yambiro inoratidza matambudziko ane source code quality uye haifanirwe kufuratirwa.
  • Dzimwe nguva kuunganidza kunopfuura kungogadzira kodhi inogoneka. Semuenzaniso, kana uine zvinyorwa mufomati AsciiDoctor, ipapo panguva yekuishandura kuita HTML/PDF iyo AsciiDoctor mugadziri (Maven plugin) inogona kuburitsa yambiro, semuenzaniso, nezve zvakaputsika zvemukati zvinongedzo. Uye ichi chikonzero chakanaka chekusabvuma Dhonza Chikumbiro nezvinyorwa shanduko.
  • Kuongorora zviperengo zvakare imhando yekuongorora kwakamira. Utility aspell inokwanisa kutarisa zviperengo kwete muzvinyorwa chete, asiwo mumakodhi epurogiramu (makomendi uye zvinyorwa) mumitauro yakasiyana-siyana yekuronga, kusanganisira C/C++, Java nePython. Iko kukanganisa kwezviperengo mushandisi yekushandisa kana zvinyorwa zvakare chikanganiso!
  • Kugadzirisa bvunzo (nezve zvavari - ona. izvi ΠΈ izvi mishumo), kunyangwe ichiitwa muyuniti bvunzo yekumhanya senge pytest, ichokwadi zvakare imhando yekuongorora kwakamira, sezvo vasingaite makodhi makodhi panguva yekuurayiwa kwavo.

Sezvauri kuona, kutsvaga tsikidzi mune iyi runyorwa inoita basa risinganyanyi kukosha, uye zvimwe zvese zviripo nekushandisa emahara akavhurika sosi maturusi.

Ndeupi wemhando idzi dzekuongorora dzakasimba dzaunofanira kushandisa mupurojekiti yako? Zvechokwadi, zvakanyanya nani! Chinhu chikuru ndechekuishandisa nemazvo, izvo zvichakurukurwa mberi.

Kuendesa pombi seyakawanda-nhanho sefa uye static ongororo sedanho rayo rekutanga

Dimikira remhando yepamusoro rekuenderera mberi kwekubatanidza ipombi iyo shanduko inoyerera, kubva kunobva kodhi kodhi inoshanduka kuenda kune yekugadzira. Iyo yakajairwa kutevedzana kwematanho mune iyi pombi inoita seizvi:

  1. static analysis
  2. compilation
  3. unit tests
  4. kubatanidza miedzo
  5. UI bvunzo
  6. cheki chemaoko

Shanduko dzakarambwa paNth nhanho yepombi hadziendeswe padanho N+1.

Sei chaizvo nenzira iyi uye kwete neimwe nzira? Muchikamu chekuyedza chepombi, vanoedza vanozoziva piramidhi yekuyedza inozivikanwa.

Shandisa static ongororo mukuita, pane kuishandisa kutsvaga tsikidzi
Test piramidhi. Kwakabva: chinyorwa Martin Fowler.

Pazasi pepiramidhi iyi pane miedzo iri nyore kunyora, nekukurumidza kuita, uye haina tsika yekutadza. Naizvozvo, panofanira kunge paine akawanda awo, anofanirwa kuvhara mamwe kodhi uye kutanga aurayiwa. Pamusoro pepiramidhi, zvakapesana ichokwadi, saka huwandu hwekubatanidza uye bvunzo dzeUI dzinofanirwa kudzikiswa kusvika pahushoma hunodiwa. Munhu ari muketani iyi ndiyo inonyanya kudhura, inononoka uye isingavimbiki, saka ari kumagumo uye anongoita basa kana matanho apfuura asina kuwana chero kukanganisa. Nekudaro, iwo mamisimboti akafanana anoshandiswa kuvaka pombi muzvikamu zvisina hukama zvakananga nekuyedzwa!

Ndinoda kupa fananidzo nenzira ye-multi-stage water filtration system. Mvura yakasviba (kuchinja nekuremara) inopiwa kune inopinza; pakubuda tinofanira kugamuchira mvura yakachena, umo zvose zvisingadiwi zvakasvibiswa zvakabviswa.

Shandisa static ongororo mukuita, pane kuishandisa kutsvaga tsikidzi
Multi-stage filter. Kwakabva: Wikimedia Commons

Sezvaunoziva, mafirita ekuchenesa akagadzirwa kuitira kuti imwe neimwe inotevera cascade ikwanise kusefa chikamu chinowedzera chakanyanya kunaka chezvinosvibisa. Panguva imwecheteyo, macascades ekunatsa ane huwandu hwepamusoro uye mutengo wakaderera. Mukufananidza kwedu, izvi zvinoreva kuti magedhi emhando yekupinza ari kukurumidza, anoda kushoma kushanda nesimba kuti atange, uye ivo pachavo vanonyanya kuzvininipisa mukushanda - uye uku ndiko kutevedzana kwavanovakwa. Basa rekuongorora static, iro, sezvatinonzwisisa izvozvi, rinokwanisa kudzura zvikanganiso zvakanyanyisa, ibasa regidhi "dhaka" pakutanga kwesefa inoputika.

Kuongorora kwakasimba kwega hakugadzirisi kunaka kwechigadzirwa chekupedzisira, sezvinoita "sefa yedhaka" isingaite kuti mvura inwanwe. Uye zvakadaro, pamwe chete nezvimwe zvinhu zvepombi, kukosha kwayo kuri pachena. Kunyangwe mumasefa akawanda matanho ekubuda anogona kukwanisa kutora zvese zvinoitwa nematanho ekuisa, zviri pachena kuti ndezvipi mhedzisiro inozobva mukuyedza kuita nematanho ekuchenesa-yega, pasina matanho ekuisa.

Chinangwa che "muteyo wedhaka" ndechekubvisa madhaka anotevera kubva pakubata hurema hwakanyanya. Semuenzaniso, padikidiki, munhu ari kuita ongororo yekodhi haafanire kutsauswa nekodhi isina kurongeka uye kutyorwa kweakatemerwa kodhi miyero (seyakawedzera maparentheses kana akanyanya kudzika matavi). Mabhugi senge maNPE anofanirwa kubatwa neyuniti bvunzo, asi kana kunyangwe isati yaitwa bvunzo iyo analyzer ikatiratidza kuti bug inozoitika, izvi zvinokurumidza kukurumidza kugadzirisa.

Ini ndinotenda zvave pachena kuti nei static ongororo isinganatsire kunaka kwechigadzirwa kana ichishandiswa pano neapo, uye ichifanirwa kushandiswa nguva dzose kusefa kunze shanduko dzine hurema hwakanyanya. Mubvunzo wekuti kushandisa static analyzer kuchavandudza kunaka kwechigadzirwa chako zvakangofanana nekubvunza kuti, "Mvura inotorwa mudziva rakasviba ichavandudzwa here pakunwa kana ikapfuura nemucolander?"

Kuitwa kuita chirongwa chenhaka

Mubvunzo unokosha unoshanda: maitiro ekuita static kuongorora mune inoenderera mberi yekubatanidza maitiro se "mhando gedhi"? Muchiitiko chekuedzwa kweotomatiki, zvinhu zvese zviri pachena: kune seti yezviedzo, kukundikana kwechero ipi zvayo chikonzero chakakwana chekutenda kuti gungano harina kupfuura gedhi remhando. Kuedza kuisa gedhi nenzira imwechete zvichienderana nemhedzisiro yekuongorora kwakamira kunokundikana: kune yambiro yakawandisa yekuongorora mune legacy kodhi, haudi kufuratira zvachose, asi zvakare hazvigoneke kumisa kutumira chigadzirwa. nekuda kwekuti ine yambiro yeanalyzer.

Kana yakashandiswa kekutanga, analyzer inoburitsa nhamba yakakura yeyambiro pane chero chirongwa, ruzhinji rwacho rusina hukama nekushanda kwakanaka kwechigadzirwa. Hazvibviri kururamisa aya mazwi ose panguva imwe chete, uye mazhinji haana madikanwa. Mushure mezvose, isu tinoziva kuti chigadzirwa chedu sese chinoshanda, kunyangwe tisati taunza static ongororo!

Nekuda kweizvozvo, mazhinji anongogumira pane dzimwe nguva kushandiswa kweiyo static kuongorora, kana kuishandisa chete mune yeruzivo modhi, apo mushumo weanalyzer unongopihwa panguva yekuungana. Izvi zvakaenzana nekusavapo kwekuongorora chero kupi zvako, nokuti kana isu tatova nenyevero dzakawanda, ipapo kuitika kweimwe (zvisinei kuti yakakomba sei) pakuchinja kodhi inoenda isingaoneki.

Nzira dzinotevera dzekuunza magedhi emhando dzinozivikanwa:

  • Kuisa muganhu pahuwandu hweyambiro kana nhamba yeyambiro yakakamurwa nehuwandu hwemitsara yekodhi. Izvi zvinoshanda zvisina kunaka, nokuti gedhi rakadaro rinobvumira zvakasununguka kuchinja nezvikanganiso zvitsva kuti zvipfuure, chero bedzi muganhu wavo usingapfuuri.
  • Kugadzirisa, pane imwe nguva, nyevero dzese dzekare mukodhi sekufuratirwa, uye kuramba kuvaka kana yambiro nyowani ikaitika. Kushanda uku kunopihwa nePVS-studio uye zvimwe zviwanikwa zvepamhepo, semuenzaniso, Codacy. Ndakanga ndisina mukana wekushanda muPVS-studio, sezvakaitika kwandiri neCodacy, dambudziko ravo guru nderekuti kuona kuti chii chiri "chekare" uye chii "chitsva" chikanganiso igororithmu yakaoma isingashande nguva dzose. nemazvo, kunyanya kana mafaera akagadziridzwa zvakanyanya kana kupihwa zita. Mune ruzivo rwangu, Codacy inogona kufuratira yambiro nyowani muchikumbiro chekudhonza, nepo panguva imwe chete isingapfuure chikumbiro chekudhonza nekuda kweyambiro yaisaenderana nekuchinja kwekodhi yePR yakapihwa.
  • Mukuona kwangu, mhinduro inoshanda zvikuru ndiyo inorondedzerwa mubhuku Kuramba Kuendesa "Nzira yekudzivirira". Pfungwa huru ndeyokuti nhamba yeyambiro yekuongorora yakamira inzvimbo yekuburitswa kwega kwega, uye shanduko chete dzinotenderwa dzisingawedzere huwandu hweyambiro.

Ratchet

Inoshanda seizvi:

  1. Padanho rekutanga, rekodhi inoitwa mune metadata nezve kuburitswa kwenhamba yenyevero mukodhi inowanikwa nevaongorori. Saka, paunovaka kumusoro, maneja wako anonyora kwete "kuburitsa 7.0.2", asi "kuburitsa 7.0.2 ine 100500 checkstyle yambiro." Kana iwe ukashandisa yepamusoro repository maneja (akadai seArtifactory), kuchengetedza metadata yakadaro nezve kuburitswa kwako kuri nyore.
  2. Iye zvino chikumbiro chega chega chekudhonza, kana chavakwa, chinofananidza huwandu hweyambiro inoguma nenhamba yeyambiro iripo mukuburitswa kwazvino. Kana PR inotungamirira kukuwedzera kwenhamba iyi, ipapo kodhi haipfuuri gedhi rehutano rekuongorora static. Kana nhamba yenyevero inoderera kana isingashanduki, zvino inopfuura.
  3. Pakuburitswa kunotevera, nhamba yakaverengerwa yeyambiro icharekodhwa zvakare mune yekuburitsa metadata.

Saka zvishoma nezvishoma asi zvishoma nezvishoma (senge kana ratchet ichishanda), nhamba yeyambiro inozosvika zero. Zvechokwadi, hurongwa hunogona kunyengedzwa nekuunza yambiro itsva, asi kugadzirisa yeumwe munhu. Izvi zvakajairika, nokuti pamusoro pechinhambwe chinopa migumisiro: nyevero dzinoruramiswa, sekutonga, kwete mumwe nomumwe, asi muboka reimwe rudzi panguva imwe chete, uye nyevero dzose dzinobviswa nyore nyore dzinobviswa nokukurumidza.

Iyi girafu inoratidza huwandu hweyambiro yeCheckstyle kwemwedzi mitanhatu yekushanda kwe "ratchet" yakadaro imwe yemapurojekiti edu eOpenSource. Huwandu hwenyevero hwadzikira nehurongwa hwehukuru, uye izvi zvakangoitika zvoga, mukufambirana nekugadzirwa kwechigadzirwa!

Shandisa static ongororo mukuita, pane kuishandisa kutsvaga tsikidzi

Ini ndinoshandisa yakagadziridzwa vhezheni yeiyi nzira, zvakasiyana kuverenga yambiro nepurojekiti module uye yekuongorora chishandiso, zvichikonzera iyo YAML faira ine kuvaka metadata inotaridzika seizvi:

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

Mune chero yepamusoro CI sisitimu, ratchet inogona kuisirwa chero static maturusi ekuongorora pasina kuvimba nema plugins uye yechitatu-bato maturusi. Imwe neimwe analyzer inoburitsa yayo rondedzero mune yakapfava zvinyorwa kana XML fomati iri nyore kuongorora. Chasara ndechekunyora inodiwa logic muCI script. Iwe unogona kuona kuti izvi zvinoitwa sei mumapurojekiti edu akavhurika sosi zvichibva paJenkins uye Artifactory pano kana pano. Mienzaniso miviri iyi inotsamira paraibhurari ratchetlib: nzira countWarnings() inoverenga xml tags mumafaira anogadzirwa neCheckstyle uye Spotbugs nenzira yakajairwa, uye compareWarningMaps() inoshandisa ratchet imwechete, ichikanda chikanganiso kana nhamba yeyambiro mune chero yezvikamu ichiwedzera.

Kuitwa kunonakidza kwe "ratchet" kunogoneka pakuongorora zviperengo zvemashoko, zvinyorwa zvinyorwa uye zvinyorwa uchishandisa aspell. Sezvaunoziva, kana uchitarisa zviperengo, haasi mazwi ese asingazivikanwe kune yakajairwa duramazwi haana kururama; anogona kuwedzerwa kuduramazwi remushandisi. Kana iwe ukaita duramazwi retsika chikamu chekodhi yepurojekiti, saka gedhi remhando yezviperengo rinogona kugadzirwa nenzira iyi: kumhanya aspell neyakajairwa uye tsika duramazwi. handifanire kudaro tsvaga zvikanganiso zvezviperengo.

Pamusoro pekukosha kwekugadzirisa shanduro ye analyzer

Mukupedzisa, poindi yekucherechedza ndeyekuti kunyangwe iwe unoshandisa sei ongororo mupombi yako yekuendesa, iyo vhezheni yeanalyzer inofanirwa kugadziriswa. Kana iwe ukabvumira muongorori kuti agadzirise ega, saka kana uchiunganidza chinotevera chikumbiro chekudhonza, hurema hutsva hunogona "kubuda" husina hukama nekuchinja kwekodhi, asi hune hukama nenyaya yekuti muongorori mutsva anongokwanisa kuwana zvimwe kukanganisa - uye izvi zvinotyora maitiro ako ekubvuma zvikumbiro zvekudhonza. Kuvandudza analyzer kunofanira kunge kuri kuita kwekuziva. Nekudaro, kugadzirisa kwakasimba kweshanduro yechikamu chega chega chegungano kazhinji chinodiwa uye musoro wehurukuro yakaparadzana.

zvakawanikwa

  • Kuongorora kwakasimba hakuzowane tsikidzi kwauri uye haizogadzirise kunaka kwechigadzirwa chako semhedzisiro yechishandiso chimwe chete. Mhedzisiro yakanaka pahutano inogona kuwanikwa chete kuburikidza nekushandiswa kwayo nguva dzose panguva yekuendesa.
  • Kutsvaga tsikidzi harisi iro basa guru rekuongorora zvachose; iyo yakawanda yemabasa anobatsira inowanikwa mune yakavhurikasource maturusi.
  • Shandisa magedhi emhando yakavakirwa pamhedzisiro yekuongorora kwakamira padanho rekutanga repombi yekutumira, uchishandisa "ratchet" yekodhi yenhaka.

nezvakanyorwa

  1. Kuramba Kuendesa
  2. A. Kudryavtsev: Kuongorora kwepurogiramu: kunzwisisa sei kuti iwe uri mugadziri akanaka taura nezve nzira dzakasiyana dzekuongorora kodhi (kwete chete static!)

Source: www.habr.com

Voeg