Ampiharo ny famakafakana static ao anatin'ilay dingana, fa tsy mitady bibikely miaraka aminy

Nanosika ahy hanoratra ity lahatsoratra ity noho ny habetsahan'ny fitaovana momba ny famakafakana static izay mihamitombo hatrany ny saiko. Voalohany, ity PVS-studio bilaogy, izay mavitrika mampiroborobo ny tenany ao amin'ny Habré miaraka amin'ny fanampian'ny famerenana ny fahadisoana hita amin'ny fitaovany amin'ny tetikasa open source. Vao haingana no nampiharina ny PVS-studio Fanohanana Java, ary, mazava ho azy, ireo mpamorona ny IntelliJ IDEA, izay manana analyse naorina no mety ho avo indrindra amin'ny Java ankehitriny, tsy afaka niala.

Rehefa mamaky hevitra toy izany ianao dia mahazo ny fahatsapana fa miresaka momba ny ody elixir: tsindrio ny bokotra, ary eto - ny lisitry ny kilema eo anoloan'ny masonao. Toa rehefa mihatsara ny mpandinika dia ho hita ho azy ny bibikely, ary ny vokatra nodinihan'ireo robots ireo dia ho tsara kokoa, tsy misy ezaka avy amintsika.

Saingy tsy misy elixir majika. Te hiresaka momba ny zavatra tsy resahina matetika amin'ny lahatsoratra toy ny hoe "indro ny zavatra hitan'ny robot-ntsika": inona no tsy vitan'ny mpanadihady, inona no tena anjara andraikiny sy toerana misy azy amin'ny fizotran'ny fandefasana rindrambaiko, ary ny fomba fampiharana azy ireo araka ny tokony ho izy. .

Ampiharo ny famakafakana static ao anatin'ilay dingana, fa tsy mitady bibikely miaraka aminy
Ratchet (loharano: Wikipedia).

Inona no tsy vitan'ny mpanadihady static

Inona no atao hoe famakafakana kaody loharano, raha ny fomba fijery azo ampiharina? Manome kaody loharano izahay ho fampidirana, ary ho vokatra, ao anatin'ny fotoana fohy (fohy kokoa noho ny fitsapana mandeha) dia mahazo fampahalalana momba ny rafitray izahay. Ny fetra fototra sy tsy azo resena ara-matematika dia ny tsy ahafahantsika mahazo afa-tsy kilasy tery kely amin'izany fomba izany.

Ny ohatra malaza indrindra amin'ny olana iray izay tsy voavaha amin'ny fampiasana famakafakana static dia olana fanakatonana: Ity dia teôrema izay manaporofo fa tsy azo atao ny mamolavola algorithm ankapobe izay afaka mamaritra avy amin'ny kaody loharanon'ny programa na hihodina na hifarana ao anatin'ny fotoana voafetra. Ny fanitarana ity theorem ity dia Ny teôreman'ny vary, izay milaza fa ho an'ny fananana tsy misy dikany amin'ny asa azo kajy, ny famaritana raha toa ny programa tsy misy dikany dia manombatombana ny fiasa miaraka amin'ny fananana toy izany dia olana tsy azo fehezina amin'ny algorithm. Ohatra, tsy azo atao ny manoratra mpandinika iray izay afaka mamaritra avy amin'ny kaody loharano rehetra raha ny programa nodinihina dia fampiharana algorithm iray izay manisa, ohatra, ny squaring ny integer.

Noho izany, ny fiasan'ny mpandinika static dia manana fetra tsy azo resena. Ny mpandinika static dia tsy ho afaka hamantatra velively amin'ny tranga rehetra toy ny, ohatra, ny fisian'ny "null pointer exception" amin'ny fiteny izay mamela ny sandan'ny null, na amin'ny tranga rehetra hamaritana ny fisian'ny " toetra tsy hita" amin'ny fiteny dynamically type. Ny hany azon'ny mpanadihady static mandroso indrindra dia manasongadina tranga manokana, ny isan'ireo, amin'ireo olana mety hitranga amin'ny kaody loharanonao, dia, tsy manitatra, mitete any an-dranomasina.

Ny famakafakana static dia tsy momba ny fitadiavana bibikely

Avy amin'io ambony io dia izao no fehin-kevitra: ny famakafakana static dia tsy fomba iray hampihenana ny isan'ny lesoka amin'ny programa iray. Sahy miteny aho hoe: rehefa sambany no ampiharina amin'ny tetikasanao, dia hahita toerana "mahaliana" ao amin'ny kaody izy, saingy azo inoana fa tsy hahita lesoka izay misy fiantraikany amin'ny kalitaon'ny programanao.

Mahavariana ny ohatra momba ny lesoka hita ho azy avy amin'ny mpandinika, saingy tsy tokony hohadinointsika fa ireo ohatra ireo dia hita tamin'ny alàlan'ny fitarafana andiana codebase lehibe. Amin'ny fitsipika mitovy ihany, ireo mpijirika izay manana fahafahana hanandrana tenimiafina tsotra maromaro amin'ny kaonty marobe dia mahita ireo kaonty manana tenimiafina tsotra ireo amin'ny farany.

Midika ve izany fa tsy tokony hampiasaina ny analyse static? Tsia mazava ho azy! Ary noho ny antony mitovy amin'izany dia ilaina ny manamarina ny tenimiafina vaovao tsirairay mba hahazoana antoka fa tafiditra ao amin'ny lisitry ny tenimiafina "tsotra" izy io.

Ny fanadihadiana static dia mihoatra noho ny fitadiavana bibikely

Raha ny marina, ny olana saika voavaha amin'ny famakafakana dia midadasika kokoa. Raha ny marina, amin'ny ankapobeny, ny famakafakana static dia ny fanamarinana ny kaody loharano natao alohan'ny nanombohana azy. Ireto misy zavatra azonao atao:

  • Fanamarinana ny fomba fanaovana coding amin'ny heviny malalaka indrindra amin'ny teny. Tafiditra ao anatin'izany ny fisavana endrika, fitadiavana ny fampiasana fononteny poakaty/fanampiny, fametrahana tokonam-baravarana amin'ny metrika toy ny isan'ny tsipika/sarotra cyclomatic amin'ny fomba iray, sns. - izay rehetra mety hanakantsakana ny famakiana sy ny fikojakojana ny kaody. Ao Java, ny fitaovana toy izany dia Checkstyle, amin'ny Python - flake8. Ny fandaharana amin'ity kilasy ity dia matetika antsoina hoe "linters."
  • Tsy ny code executable ihany no azo anadihadiana. Ny rakitra loharanon-karena toy ny JSON, YAML, XML, .properties dia azo (ary tokony!) ho voamarina ho azy fa manan-kery. Na izany na tsy izany, tsara kokoa ny mahita fa tapaka ny rafitra JSON noho ny teny tsy misy dikany amin'ny dingana voalohany amin'ny fanamarinana Pull Request mandeha ho azy fa tsy mandritra ny fanatanterahana fitsapana na fotoana fandehanana? Misy fitaovana mifanaraka amin'izany: oh. YAMLlint, JSONLint.
  • Karazana famakafakana static ihany koa ny fanangonana (na fanaparitahana ny fiteny fandaharana mavitrika). Amin'ny ankapobeny, ny compiler dia afaka mamokatra fampitandremana izay manondro olana amin'ny kalitaon'ny loharano ary tsy tokony hodian-tsy hita.
  • Indraindray ny compilation dia mihoatra noho ny fanangonana code executable. Ohatra, raha manana antontan-taratasy amin'ny endrika ianao AsciiDoctor, dia amin'ny fotoana hamadihana azy ho HTML/PDF ny AsciiDoctor handler (Plugin Maven) dia afaka mamoaka fampitandremana, ohatra, momba ny rohy anatiny tapaka. Ary antony tsara tsy hanaiky ny fangatahana Pull miaraka amin'ny fanovana antontan-taratasy.
  • Karazana famakafakana static ihany koa ny fanamarinana tsipelina. Utility aspell dia afaka manamarina tsipelina tsy amin'ny antontan-taratasy ihany, fa koa amin'ny kaody loharanon'ny programa (fanehoan-kevitra sy litera) amin'ny fiteny fandaharana isan-karazany, anisan'izany ny C/C++, Java ary Python. Ny hadisoana tsipelina amin'ny mpampiasa interface na ny antontan-taratasy dia lesoka ihany koa!
  • Fitsapana fanamafisana (momba ny momba azy ireo - jereo. izany и izany Reports), na dia natao tamin'ny fotoam-pitsapana an'ny tarika toy ny pytest aza, dia karazana fanadihadiana static ihany koa, satria tsy manatanteraka ny code source izy ireo mandritra ny famonoana azy.

Araka ny hitanao dia mitana anjara toerana kely indrindra ny fitadiavana bibikely ao amin'ity lisitra ity, ary ny zavatra hafa rehetra dia azo ampiasaina amin'ny fampiasana fitaovana malalaka malalaka.

Iza amin'ireto karazana famakafakana static ireto no tokony hampiasainao amin'ny tetikasanao? Mazava ho azy fa ny bebe kokoa no tsara kokoa! Ny tena zava-dehibe dia ny fampiharana azy araka ny tokony ho izy, izay hodinihina bebe kokoa.

Fantsona fanaterana ho toy ny sivana maromaro sy famakafakana static ho dingana voalohany

Ny fanoharana mahazatra ho an'ny fampidirana mitohy dia fantsona iray ahafahan'ny fiovana mikoriana, manomboka amin'ny fiovan'ny kaody loharano mankany amin'ny fandefasana mankany amin'ny famokarana. Ny filaharan'ny dingana mahazatra amin'ity fantsona ity dia toy izao:

  1. fanadihadiana static
  2. fitambaran'ireo
  3. fitsapana unit
  4. fitsapana fampidirana
  5. Fitsapana UI
  6. fanamarinana manual

Ny fiovana nolavina tamin'ny dingana Nth amin'ny fantsona dia tsy afindra amin'ny dingana N+1.

Nahoana tokoa moa no toy izao fa tsy amin'ny fomba hafa? Ao amin'ny ampahany fitsapana amin'ny fantsona, ireo mpanandrana dia hahafantatra ny piramida fitiliana fanta-daza.

Ampiharo ny famakafakana static ao anatin'ilay dingana, fa tsy mitady bibikely miaraka aminy
Fitsapana piramida. Loharano: lahatsoratra Martin Fowler.

Eo amin'ny farany ambany amin'ity piramida ity dia misy fitsapana mora soratana, haingana kokoa ny fanatanterahana azy, ary tsy manana fironana hahomby. Noho izany, tokony ho betsaka kokoa izy ireo, tokony handrakotra kaody bebe kokoa izy ireo ary hovonoina aloha. Eo an-tampon'ny piramida, ny mifanohitra amin'izany no marina, ka ny isan'ny fampidirana sy ny fitsapana UI dia tokony hahena ho faran'izay kely indrindra. Ny olona ao amin'ity rojo ity no loharano lafo indrindra, miadana ary tsy azo ianteherana, noho izany dia eo amin'ny farany izy ary manatanteraka ny asa raha tsy misy lesoka ny dingana teo aloha. Na izany aza, ny fitsipika mitovy ihany no ampiasaina hanamboarana fantsona amin'ny ampahany tsy mifandray mivantana amin'ny fitsapana!

Te-hanolotra fanoharana aho amin'ny endriky ny rafitra fanivanana rano maromaro. Rano maloto (miova miaraka amin'ny kilema) no omena ny fampidirana; amin'ny fivoahana dia tsy maintsy mahazo rano madio isika, izay nesorina ny loto rehetra tsy ilaina.

Ampiharo ny famakafakana static ao anatin'ilay dingana, fa tsy mitady bibikely miaraka aminy
Sivana maromaro. Loharano: Wikimedia Commons

Araka ny fantatrao, ny sivana fanadiovana dia natao mba hahafahan'ny cascade tsirairay avy eo hanivana ampahany betsaka amin'ny loto. Mandritra izany fotoana izany, ny cascades fanadiovana coarser dia manana throughput ambony sy ambany kokoa. Amin'ny fanoharana ataontsika dia midika izany fa haingana kokoa ny vavahadin'ny kalitaon'ny fidirana, mitaky ezaka kely kokoa hanombohana, ary tsy mihatsaravelatsihy kokoa amin'ny asany - ary izany no filaharana nanamboarana azy. Ny anjara asan'ny famakafakana static, izay, araka ny fahafantarantsika izao, dia afaka manala ny lesoka lehibe indrindra, dia ny andraikitry ny "fotaka" eo am-piandohan'ny sivana cascade.

Ny famakafakana static amin'ny tenany manokana dia tsy manatsara ny kalitaon'ny vokatra farany, toy ny "sivana fotaka" tsy mahatonga ny rano hosotroina. Na izany aza, miaraka amin'ireo singa hafa amin'ny fantsona, dia miharihary ny maha-zava-dehibe azy. Na dia ao anatin'ny sivana misy dingana maromaro aza dia mety ho afaka maka izay rehetra ataon'ireo dingana fampidiran-dresaka ireo dingana fivoahana, mazava ho azy ny voka-dratsin'ny fiezahana hanao ny dingana fanadiovana tsara fotsiny, tsy misy dingana fampidirana.

Ny tanjon'ny "fandrika fotaka" dia ny hanamaivanana ny cascade manaraka amin'ny fahazoana lesoka tena goavana. Ohatra, fara faharatsiny, ny olona manao ny famerenana ny kaody dia tsy tokony ho variana amin'ny kaody diso endrika sy ny fanitsakitsahana ny fenitry ny kaody napetraka (toy ny fononteny fanampiny na sampana misy akany lalina loatra). Ny bibikely toy ny NPE dia tokony ho tratra amin'ny fitsapana vondrona, fa na dia alohan'ny fitsapana aza dia asehon'ny mpanadihady amintsika fa tsy maintsy hitranga ny bibikely, dia hanafaingana ny fanamboarana azy izany.

Mino aho fa mazava izao ny antony tsy hanatsara ny kalitaon'ny vokatra ny famakafakana static raha ampiasaina tsindraindray, ary tokony hampiasaina tsy tapaka hanivanana ireo fiovana misy kilema lehibe. Ny fanontaniana raha hanatsara ny kalitaon'ny vokatrao ve ny fampiasana mpandinika static dia mitovy amin'ny fanontaniana hoe: "Hihatsara ve ny rano nalaina avy amin'ny dobo maloto amin'ny kalitaon'ny fisotroana raha ampitaina amin'ny colander?"

Fampiharana amin'ny tetikasa lova

Fanontaniana azo ampiharina manan-danja: ahoana ny fampiharana ny famakafakana static amin'ny fizotry ny fampidirana mitohy ho "vavahady kalitao"? Raha ny fitsapana mandeha ho azy, dia miharihary ny zava-drehetra: misy andiana fitsapana, ny tsy fahombiazan'ny iray amin'izy ireo dia antony ampy hinoana fa tsy nandalo ny vavahadin'ny kalitao ny fivoriambe. Tsy nahomby ny fikasana hametraka vavahady mitovy amin'ny vokatry ny famakafakana static: be loatra ny fampitandremana famakafakana ao amin'ny kaody lova, tsy tianao ny tsy hiraharaha azy ireo tanteraka, fa tsy azo atao koa ny manajanona ny fandefasana vokatra. satria misy fampitandremana analyse fotsiny.

Rehefa ampiasaina voalohany, ny mpandinika dia mamokatra fampitandremana marobe amin'ny tetikasa rehetra, ny ankamaroany dia tsy mifandray amin'ny fampandehanana ny vokatra. Tsy azo atao ny manitsy ireo fanehoan-kevitra rehetra ireo indray mandeha, ary maro no tsy ilaina. Rehefa dinihina tokoa, fantatsika fa ny vokatra amin'ny ankapobeny dia miasa, na dia alohan'ny hampidirana fanadihadiana static aza!

Vokatr'izany, maro no voafetra amin'ny fampiasana tsindraindray ny famakafakana static, na mampiasa izany amin'ny fomba fampahalalam-baovao fotsiny, rehefa mivoaka fotsiny ny tatitra mpanadihady mandritra ny fivoriambe. Mitovitovy amin'ny tsy fisian'ny famakafakana izany, satria raha efa manana fampitandremana maro isika, dia tsy voamarika ny fisehoan'ny hafa (na dia lehibe toy inona aza) rehefa manova ny code.

Ireto fomba manaraka ireto amin'ny fampidirana vavahady kalitao dia fantatra:

  • Mametraka fetra amin'ny fitambaran'ny isan'ny fampitandremana na ny isan'ny fampitandremana zaraina amin'ny isan'ny andalana misy kaody. Tsy miasa tsara izany, satria ny vavahady toy izany dia mamela malalaka ny fanovana misy kilema vaovao handalo, raha mbola tsy mihoatra ny fetrany.
  • Manamboatra, amin'ny fotoana iray, ny fampitandremana taloha rehetra ao amin'ny kaody toy ny tsy noraharahiana, ary mandà ny fananganana rehefa misy fampitandremana vaovao. Ity fampiasa ity dia omen'ny PVS-studio sy loharano an-tserasera sasany, ohatra, Codacy. Tsy nanana fahafahana niasa tao amin'ny PVS-studio aho, raha ny traikefako tamin'ny Codacy, ny olana lehibe indrindra dia ny famaritana ny atao hoe "antitra" ary inona ny fahadisoana "vaovao" dia algorithm sarotra izay tsy mandeha foana. tsara, indrindra raha ovaina na novana anarana ny rakitra. Raha ny zavatra niainako, Codacy dia afaka tsy miraharaha ny fampitandremana vaovao amin'ny fangatahana fisarihana, ary amin'ny fotoana iray ihany koa dia tsy mandalo fangatahana fisarihana noho ny fampitandremana izay tsy mifandray amin'ny fanovana ny kaody PR nomena.
  • Raha ny hevitro, ny vahaolana mahomby indrindra dia ilay voalaza ao amin'ny boky Fanaterana mitohy "fomba fikorontanana". Ny hevitra fototra dia ny isan'ny fampitandremana famakafakana static dia fananan'ny famoahana tsirairay, ary ny fanovana ihany no avela tsy mampitombo ny isan'ny fampitandremana.

Ratchet

Miasa toy izao izy io:

  1. Amin'ny dingana voalohany, misy firaketana atao amin'ny metadata momba ny famoahana ny isan'ny fampitandremana ao amin'ny kaody hitan'ny mpandinika. Noho izany, rehefa manorina ambony ianao, dia tsy manoratra fotsiny ny "mamotsorana 7.0.2" ny mpitantana ny repository anao, fa "mamotsorana ny 7.0.2 misy fampitandremana 100500." Raha mampiasa mpitantana fitahirizana efa mandroso ianao (toy ny Artifactory), dia mora ny mitahiry metadata momba ny famoahana anao.
  2. Ankehitriny, ny fangatahana fisintonana tsirairay, rehefa namboarina, dia mampitaha ny isan'ny fampitandremana aterak'izany amin'ny isan'ny fampitandremana misy amin'ny famoahana ankehitriny. Raha ny PR dia mitarika ho amin'ny fitomboan'ny isa io, ny fehezan-dalàna dia tsy mandalo ny kalitaon'ny vavahadin'ny fanadihadiana static. Raha mihena na tsy miova ny isan'ny fampitandremana dia mandalo izany.
  3. Amin'ny famoahana manaraka dia horaketina ao amin'ny metadata famoahana indray ny isan'ny fampitandremana nokajiana.

Noho izany tsikelikely fa tsy mitsaha-mitombo (toy ny rehefa miasa ny ratchet), ny isan'ny fampitandremana dia mirona ho aotra. Mazava ho azy fa mety ho voafitaka ny rafitra amin'ny fampidirana fampitandremana vaovao, fa manitsy ny an'ny hafa. Ara-dalàna izany, satria amin'ny halavirana lavitra dia manome vokatra: ny fampitandremana dia ahitsy, amin'ny ankapobeny, tsy amin'ny tsirairay, fa amin'ny vondrona misy karazana iray indray mandeha, ary ny fampitandremana mora azo esorina dia esorina haingana.

Ity tabilao ity dia mampiseho ny fitambaran'ny fampitandremana Checkstyle mandritra ny enim-bolana fiasan'ny "ratchet" toy izany iray amin'ireo tetikasa OpenSource. Nihena tsikelikely ny isan'ny fampitandremana, ary tonga ho azy izany, mifanaraka amin'ny fivoaran'ny vokatra!

Ampiharo ny famakafakana static ao anatin'ilay dingana, fa tsy mitady bibikely miaraka aminy

Mampiasa dikan-teny novaina amin'ity fomba ity aho, manisa fampitandremana misaraka amin'ny alàlan'ny maody tetikasa sy fitaovana famakafakana, ka miteraka rakitra YAML misy metadata fananganana izay toa izao:

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

Amin'ny rafitra CI mandroso rehetra, ny ratchet dia azo ampiharina amin'ny fitaovana famakafakana static nefa tsy miantehitra amin'ny plugins sy fitaovana an'ny antoko fahatelo. Ny mpandinika tsirairay dia mamokatra ny tatitra azy manokana amin'ny lahatsoratra tsotra na endrika XML izay mora hamakafaka. Ny hany sisa tavela dia ny fanoratana ny lojika ilaina amin'ny script CI. Azonao jerena ny fomba fampiharana izany ao amin'ny tetikasa open source mifototra amin'ny Jenkins sy Artifactory eto na eto. Samy miankina amin'ny tranomboky ny ohatra roa ratchetlib: fomba countWarnings() manisa marika xml amin'ny rakitra novokarin'ny Checkstyle sy Spotbugs amin'ny fomba mahazatra, ary compareWarningMaps() manatanteraka ratchet mitovy, manipy fahadisoana rehefa mitombo ny isan'ny fampitandremana amin'ny sokajy rehetra.

Ny fampiharana mahaliana ny "ratchet" dia azo atao amin'ny famakafakana ny tsipelina ny fanehoan-kevitra, ny litera lahatsoratra ary ny antontan-taratasy mampiasa aspell. Araka ny fantatrao, rehefa manamarina ny tsipelina dia tsy ny teny rehetra tsy fantatra amin'ny rakibolana mahazatra no diso fa azo ampidirina amin'ny rakibolana mpampiasa. Raha manao rakibolana manokana ao amin'ny kaody loharanon'ny tetikasa ianao, dia azo amboarina toy izao ny vavahadin'ny kalitaon'ny tsipelina: mandeha aspell miaraka amin'ny rakibolana mahazatra sy mahazatra. tsy tokony tsy mahita diso tsipelina.

Momba ny maha-zava-dehibe ny fanamboarana ny version analyse

Ho fehin-kevitra, ny teboka tokony ho marihina dia na inona na inona fampiharana ny famakafakana ao amin'ny fantsona fanaterana anao dia tsy maintsy amboarina ny dikan'ny analyse. Raha avelanao hanavao ho azy ny mpanadihady, dia rehefa manangona ny fangatahana fisintonana manaraka ianao, dia mety "hipoitra" ny lesoka vaovao izay tsy mifandray amin'ny fiovan'ny code, fa mifandray amin'ny hoe ny mpanadihady vaovao dia afaka mahita lesoka bebe kokoa - ary izany dia handrava ny dingana ataonao amin'ny fanekena ny fangatahana fisintonana. Ny fanavaozana ny mpandinika dia tokony ho hetsika tonga saina. Na izany aza, ny fanamafisana henjana ny dikan'ny singa tsirairay amin'ny fivoriambe dia amin'ny ankapobeny dia fepetra ilaina ary lohahevitra iray ho an'ny fifanakalozan-kevitra manokana.

hitany

  • Ny famakafakana static dia tsy hahita bibikely ho anao ary tsy hanatsara ny kalitaon'ny vokatrao vokatry ny fampiharana tokana. Ny fiantraikany tsara amin'ny kalitao dia tsy azo atao afa-tsy amin'ny fampiasana azy tsy tapaka mandritra ny dingan'ny fandefasana.
  • Ny fitadiavana bibikely dia tsy ny tena asa famakafakana; ny ankamaroan'ny asa mahasoa dia hita amin'ny fitaovana opensource.
  • Mampihatra vavahady kalitao mifototra amin'ny valin'ny fanadihadiana static amin'ny dingana voalohany amin'ny fantsona fanaterana, amin'ny fampiasana "ratchet" ho an'ny code lova.

soratra masina

  1. Fanaterana mitohy
  2. A. Kudryavtsev: Famakafakana fandaharana: ahoana no ahafantarana fa mpandrindra tsara ianao tatitra momba ny fomba famakafakana kaody samihafa (tsy static ihany!)

Source: www.habr.com

Add a comment