Whakauruhia te tātaritanga pateko ki roto i te tukanga, kaua ki te whakamahi ki te rapu i nga pepeke

I akiakihia ahau ki te tuhi i tenei tuhinga na te nui o nga rauemi mo te tātaritanga pateko e kaha haere ana ki taku aro. Tuatahi, ko tenei PVS-studio blog, e kaha whakatairanga ana i a ia ano i runga i te Habré me te awhina o nga arotake o nga hapa i kitea e to raatau taputapu i roto i nga kaupapa tuwhera. I tata nei ka whakatinanahia te PVS-studio tautoko Java, a, ko te tikanga, ko nga kaihanga o IntelliJ IDEA, ko tana kaitirotiro hanga-i roto pea te mea tino matatau mo Java i enei ra, kihai i taea te noho atu.

A, no te panui i enei arotake, ka mohio koe kei te korero matou mo te elixir makutu: pehia te paatene, a koinei - he rarangi o nga hapa kei mua i ou kanohi. Te ahua nei ka pai ake nga kaitirotiro, ka nui haere nga pepeha ka kitea, ka pai ake nga hua karapahia e enei karetao, karekau he whakapau kaha ki a maatau.

Engari kaore he elixir makutu. E hiahia ana ahau ki te korero mo nga mea kaore i te korerohia i roto i nga panui penei "koinei nga mea ka kitea e to tatou karetao": he aha nga kaitirotiro e kore e taea te mahi, he aha te tino mahi me te waahi i roto i te tukanga tuku rorohiko, me pehea te whakatinana tika. .

Whakauruhia te tātaritanga pateko ki roto i te tukanga, kaua ki te whakamahi ki te rapu i nga pepeke
Ratchet (puna: wikipedia).

He aha nga kaitirotiro pateko e kore e taea te mahi

He aha te tātari waehere puna, mai i te tirohanga whaitake? Ka whakaratohia e matou etahi waehere puna hei whakaurunga, hei whakaputanga, i roto i te wa poto (he poto ake i nga whakamatautau whakahaere) ka whiwhi matou i etahi korero mo to maatau punaha. Ko te herenga matua me te kore e taea te whakaoti i te pangarau ko te mea ka taea e tatou te whiwhi i tetahi momo korero whaiti noa i tenei huarahi.

Ko te tauira tino rongonui o te rapanga kaore e taea te whakaoti ma te whakamahi i te tātari pateko raruraru kati: He ariā tenei e whakaatu ana kaore e taea te hanga i tetahi algorithm whanui ka taea te whakatau mai i te waehere puna o te hotaka mena ka huri, ka mutu ranei i roto i te waa mutunga. Ko te toronga o tenei kaupapa ko Te kaupapa o te raihi, e kii ana mo nga taonga kore-iti o nga mahi ka taea te tatau, te whakatau mena ka arotakehia e te papatono karekau he mahi me taua taonga he raruraru e kore e taea te whakahaere. Hei tauira, e kore e taea te tuhi i tetahi kaitirotiro ka taea te whakatau mai i tetahi waehere puna mena he whakatinanatanga te hotaka e tātarihia ana he algorithm e tatau ana, penei, te tapawha o te tauoti.

No reira, ko te mahi o nga kaitirotiro pateko he herenga kore e taea te taea. E kore rawa e taea e te kaitirotiro pateko te kite i roto i nga keehi katoa penei, hei tauira, te puta mai o te "motuhake tohu kore" i roto i nga reo e taea ai te uara o te null, i nga keehi katoa ranei ki te whakatau i te puta mai o te " huanga kaore i kitea" i roto i nga reo kua patopato. Ko nga mea katoa ka taea e te kaitirotiro pateko tino matatau ki te whakaatu i nga keehi motuhake, ko te maha o enei, i roto i nga raru katoa e pa ana ki to waehere puna, he maturuturu ki te moana.

Ko te tātaritanga pateko ehara i te rapu pepeha

Mai i nga korero o runga ake nei, ko te whakatau e whai ake nei: ehara te tātaritanga pateko i te huarahi hei whakaiti i te maha o nga hapa o te kaupapa. Ka kaha ahau ki te kii: ka tono ki to kaupapa mo te wa tuatahi, ka kitea nga waahi "whakahihiri" i roto i te waehere, engari, ko te mea pea, kaore e kitea he hapa e pa ana ki te kounga o to kaupapa.

He mea whakamīharo nga tauira o nga hapa ka kitea aunoatia e nga kaitirotiro, engari kaua e wareware i kitea enei tauira ma te karapa i te huinga nui o nga turanga waehere nui. Na te kaupapa ano, ka whai waahi nga kaiwhaiwhai ki te whakamatau i etahi kupuhipa ngawari i runga i te maha o nga kaute ka kitea e raatau nga kaute he kupuhipa ngawari.

Ko te tikanga tenei kia kaua e whakamahia te tātaritanga pateko? Ko te akoranga kaore! A mo te tino take e tika ana kia tirohia ia kupuhipa hou kia mohio kei roto i te rarangi whakamutu o nga kupuhipa "ngawari".

He nui ake te tātaritanga pateko i te kimi pepeha

Ko te tikanga, he whanui ake nga raruraru ka whakatauhia ma te tātari. I muri i nga mea katoa, i te nuinga o te waa, ko te tātaritanga pateko he whakamanatanga o nga waehere puna i mahia i mua i te whakarewatanga. Anei etahi mea ka taea e koe:

  • Te taki i te ahua whakawaehere i roto i te tikanga whanui o te kupu. Kei roto i tenei ko te arowhai whakahōpututanga, te rapu i te whakamahi i nga reu putua/atu, te whakatakoto i nga paepae i runga i nga inenga penei i te maha o nga rarangi/te uaua o te tikanga, me era atu - nga mea katoa ka aukati i te panui me te pupuri tonu o te waehere. I Java, ko taua taputapu ko Checkstyle, i te Python - flake8. Ko nga kaupapa o tenei akomanga ka kiia ko "linters."
  • Ehara i te mea ka taea te wetewete i te waehere kawe. Ko nga konae rauemi penei i te JSON, YAML, XML, .properties ka taea (me!) te tirotiro aunoa mo te mana. I muri i nga mea katoa, he pai ake te mohio kua pakaru te hanganga JSON na etahi korero kore takirua i te wa tuatahi o te Whakaaetanga Pull Tono aunoa atu i te wa e mahia ana te whakamatautau me te wa oma? Kei te waatea nga taputapu tika: hei tauira. YAMLlint, JSONLint.
  • Ko te whakahiato (he porotiti ranei mo nga reo hotaka hihiri) he momo tātaritanga pateko. I te nuinga o te waa, ka taea e nga kaiwhakatakoto whakaaro te whakaputa whakatupato e whakaatu ana i nga raruraru me te kounga o te waehere puna me te kore e warewarehia.
  • I etahi wa ka nui ake te whakahiato i te whakahiato noa i nga waehere ka taea. Hei tauira, mena he tuhinga kei te whakatakotoranga AsciiDoctor, katahi ka huri hei HTML/PDF te kaihautu AsciiDoctor (Maven mono) ka taea te whakaputa whakatupato, hei tauira, mo nga hononga o roto kua pakaru. A he take pai tenei kia kaua e whakaae ki te Tono Toia me nga huringa tuhinga.
  • Ko te taki takikupu he momo tātaritanga pateko. Whakamahinga aporo Ka taea e ia te tirotiro i te takikupu ehara i te mea i roto i nga tuhinga anake, engari i roto ano i nga waehere punaha kaupapa (ko nga korero me nga kupu kupu) i roto i nga reo maha, tae atu ki te C/C++, Java me te Python. Ko te hapa takikupu i roto i te atanga kaiwhakamahi, tuhinga ranei he hapa ano!
  • Nga whakamatautau whirihoranga (mo te aha - tirohia. tenei и tenei nga purongo), ahakoa ka mahia i roto i te wa whakahaere whakamatautau wae penei i te pytest, he momo tātaritanga pateko ano hoki, na te mea karekau e mahia nga waehere puna i te wa e mahia ana.

Ka taea e koe te kite, ko te rapu i nga pepeke kei roto i tenei rarangi he mea iti rawa te mahi, a ko nga mea katoa e waatea ana ma te whakamahi i nga taputapu puna tuwhera kore utu.

Ko tehea o enei momo tātaritanga pateko me whakamahi e koe i roto i to kaupapa? Ko te tikanga, ko te nui ake te pai ake! Ko te mea nui ko te whakatinana tika, ka korerohia ano.

Ko te paipa tuku hei tātari-waahanga maha me te tātari pateko hei waahanga tuatahi

Ko te kupu whakarite mo te whakauru tonu he paipa e rere ai nga huringa, mai i nga huringa waehere puna ki te tuku ki te whakaputa. Ko te raupapa paerewa o nga waahanga o tenei pipeline te ahua penei:

  1. tātari pateko
  2. whakahiato
  3. whakamātautau waeine
  4. nga whakamatautau whakauru
  5. Nga whakamatautau UI
  6. taki ā-ringa

Ko nga huringa i paopaohia i te wahanga N o te paipa kore e whakawhitia ki te atamira N+1.

He aha te take i penei ai, ehara i te mea ke atu? I roto i te waahanga whakamatautau o te paipa, ka mohio nga kaiwhakaatu ki te pyramid whakamatautau rongonui.

Whakauruhia te tātaritanga pateko ki roto i te tukanga, kaua ki te whakamahi ki te rapu i nga pepeke
Tara whakamatautau. Puna: tuhinga Matini Fowler.

Kei raro o tenei tara ko nga whakamatautau he ngawari ake te tuhi, he tere ake te mahi, a kaore he ahua ki te kore. No reira, me nui ake o raatau, me hipoki he waehere ake ka mahia i te tuatahi. I te tihi o te tara, he pono te ritenga, na me whakaheke te maha o te whakauru me nga whakamatautau UI ki te iti rawa. Ko te tangata i roto i tenei mekameka te rauemi tino utu, puhoi me te kore pono, no reira kei te mutunga ia ka mahi noa i nga mahi mena kaore i kitea he hapa i nga waahanga o mua. Heoi ano, he rite tonu nga tikanga mo te hanga paipa ki nga waahanga kaore e pa ana ki te whakamatautau!

E hiahia ana ahau ki te tuku i tetahi kupu whakarite i roto i te ahua o te punaha tātari wai maha. Ko te wai paru (he rereke me nga koha) ka tukuna ki te whakaurunga; i te putanga me whiwhi wai ma, kua whakakorehia nga mea poke katoa.

Whakauruhia te tātaritanga pateko ki roto i te tukanga, kaua ki te whakamahi ki te rapu i nga pepeke
tātari maha-waahanga. Puna: Wikimedia Commons

Kei te mohio koe, kua hoahoatia nga whiriwhiringa horoi kia taea e ia riima o muri mai te tarai i te hautanga pai ake o nga mea poke. I te wa ano, he nui ake te whakaputanga me te iti o te utu. I roto i ta maatau whakataurite, ko te tikanga he tere ake nga kuaha o te kounga whakaurunga, me iti ake te kaha ki te tiimata, a, he maamaa ake te mahi - a koinei te raupapa i hangaia ai. Ko te mahi o te wetewete pateko, e mohio ana tatou inaianei, ka kaha ki te tarai i nga koha kino noa iho, ko te mahi a te matiti "paru" i te timatanga o te riima tātari.

Ko te tātaritanga pateko anake e kore e whakapai ake i te kounga o te hua whakamutunga, penei i te "tatari paru" e kore e pai te inu i te wai. Heoi ano, i te taha o etahi atu waahanga o te paipa, kua kitea tona hiranga. Ahakoa i roto i te tātari multistage ka kaha pea nga waahanga whakaputa ki te hopu i nga mea katoa ka mahia e nga waahanga whakauru, ka maarama he aha nga hua ka puta mai i te ngana ki te mahi ki nga waahanga purenga pai anake, kaore he waahanga whakauru.

Ko te kaupapa o te "mahanga paru" ko te whakaora i nga rikeri o muri mai i te hopu i nga hapa tino kino. Hei tauira, i te iti rawa, ko te tangata e mahi ana i te arotake waehere kia kaua e porearea e te hee te whakatakotoranga waehere me nga takahitanga o nga paerewa whakawaehere kua whakaritea (pēnei i nga rei taapiri, i nga manga kohanga hohonu rawa ranei). Ko nga pepeke penei i nga NPE me hopukina e nga whakamatautau wae, engari mena i mua i te whakamatautau ka tohu te kaitirotiro ki a maatau ka puta he pepeha, ka tere ake te whakatika.

E whakapono ana ahau kua marama inaianei he aha te tātaritanga pateko e kore e whakapai ake i te kounga o te hua mena ka whakamahia i etahi wa, me whakamahi tonu ki te tarai i nga huringa me nga hapa nui. Ko te patai mehemea ka pai ake te kounga o to hua ki te patai, "Ka pai ake te pai o te inu i te wai ka tangohia mai i te harotoroto paru mena ka tukuna ma te colander?"

Te whakatinanatanga ki tetahi kaupapa tuku iho

He patai whaitake nui: me pehea te whakatinana i te tātaritanga pateko ki roto i te tukanga whakauru tonu hei "kuwaha kounga"? I roto i nga keehi o nga whakamatautau aunoa, ka kitea nga mea katoa: he huinga whakamatautau, ko te kore o tetahi o enei he tino take ki te whakapono kaore te huihuinga i eke ki te kuaha kounga. Ko te ngana ki te whakauru i tetahi kuaha i runga i nga hua o te tātaritanga pateko i rahua: he maha rawa nga whakatupato tātaritanga kei roto i te waehere tuku iho, kaore koe e pai ki te wareware i a raatau, engari kaore e taea te aukati i te tuku hua. na te mea kei roto nga whakatupato kaitirotiro.

Ka whakamahia mo te wa tuatahi, ka whakaputahia e te kaitirotiro te maha o nga whakatupato mo tetahi kaupapa, ko te nuinga kaore e pa ana ki te mahi tika o te hua. Kaore e taea te whakatika i enei korero katoa i te wa kotahi, a he maha nga mea kaore e tika. I muri i nga mea katoa, e mohio ana matou kei te mahi katoa a maatau hua, ahakoa i mua i te whakauru i te tātaritanga pateko!

Ko te mutunga mai, he maha nga mea e iti ana ki te whakamahi i etahi wa i te tātaritanga pateko, ka whakamahi ranei i roto i te aratau korero, ka tukuna noa he purongo kaitirotiro i te wa e huihui ana. He rite tenei ki te kore o tetahi tātaritanga, na te mea he maha nga whakatupatotanga, katahi ka puta mai tetahi atu (ahakoa he aha te kino) ina huri te waehere ka kore e kitea.

Ko nga tikanga e whai ake nei mo te whakauru i nga kuaha kounga e mohiotia ana:

  • Whakaritea he rohe mo te tapeke o nga whakatupato, te maha ranei o nga whakatupato ka wehewehea ki te maha o nga rarangi waehere. He kino te mahi, na te mea ka taea e taua keeti te whakarereke me nga hapa hou kia puta, mena karekau e hipa ake te rohe.
  • Te whakatika, i tetahi wa, nga whakatupato tawhito katoa i roto i te waehere kaore i arohia, me te kore e pai ki te hanga ina puta nga whakatupato hou. Ko tenei mahinga e whakaratohia ana e te PVS-studio me etahi rauemi ipurangi, hei tauira, Codacy. Kaore au i whai waahi ki te mahi i roto i te PVS-studio, mo taku wheako ki a Codacy, ko to raatau raru nui ko te whakatau he aha te "tawhito" me te aha he "hou" he he algorithm tino uaua e kore e mahi i nga wa katoa. tika, ina koa ka tino whakarereketia, ka whakaingoatia ano nga konae. I roto i taku wheako, ka taea e Codacy te wareware i nga whakatupato hou i roto i te tono kume, i te wa ano kaore i tukuna he tono kume na runga i nga whakatupato kaore i pa ki nga huringa o te waehere o tetahi PR kua hoatu.
  • Ki taku whakaaro, ko te otinga tino whai hua ko te korero i roto i te pukapuka Te Tuku tonu "tikanga ratcheting". Ko te whakaaro matua ko te maha o nga whakatupato tātaritanga pateko he taonga mo ia tukunga, a ko nga huringa anake ka whakaaetia kia kaua e piki ake te tapeke o nga whakatupato.

Ratchet

He penei te mahi:

  1. I te waahi tuatahi, ka tuhia he rekoata i roto i nga metadata mo te tukunga o te maha o nga whakatupato i roto i te waehere i kitea e nga kaitirotiro. Na, i te wa e hanga ana koe i te awa, ka tuhia e to kaiwhakahaere putunga ehara i te "tuku 7.0.2" engari "tukua te 7.0.2 kei roto 100500 nga whakatupato ahua arowhai." Mena kei te whakamahi koe i tetahi kaiwhakahaere putunga matatau (penei i te Artifactory), he ngawari te penapena i nga metadata mo to tukunga.
  2. Inaianei ko ia tono kume, ka hangaia, ka whakataurite i te maha o nga whakatupato ka puta me te maha o nga whakatupato e waatea ana i te tukunga o naianei. Mena ka piki te PR ki tenei tau, karekau te waehere e paahi i te kuaha kounga mo te tātaritanga pateko. Mena ka heke te maha o nga whakatupato, kaore ranei e rereke, ka paahi.
  3. I te tukunga e whai ake nei, ka tuhia ano te maha o nga whakatupato i tatauhia ki te metadata tuku.

Na ka iti, engari ka mau tonu (penei i te wa e mahi ana te ratchet), ka kore te maha o nga whakatupato. Ko te tikanga, ka taea te whakapohehe i te punaha ma te whakauru i tetahi whakatupato hou, engari ka whakatika i ta tetahi atu. He mea noa tenei, na te mea i runga i te tawhiti ka puta he hua: ka whakatikahia nga whakatupato, hei tikanga, ehara i te mea takitahi, engari i roto i te roopu o tetahi momo i te wa kotahi, a ka tere te whakakore i nga whakatupato ngawari katoa.

Ko tenei kauwhata e whakaatu ana i te tapeke o nga whakatupato Checkstyle mo nga marama e ono o te mahi o taua "ratchet" on tetahi o a maatau kaupapa OpenSource. Kua heke te maha o nga whakatupato i runga i te nui o te nui, a he mea tupu noa tenei, i roto i te whakarara ki te whanaketanga hua!

Whakauruhia te tātaritanga pateko ki roto i te tukanga, kaua ki te whakamahi ki te rapu i nga pepeke

Ka whakamahi ahau i tetahi putanga whakarereke o tenei tikanga, ka tatau wehe i nga whakatupato ma te waahanga kaupapa me te taputapu tātari, ka puta he konae YAML me te hanga metadata he penei te ahua:

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

I roto i tetahi punaha CI matatau, ka taea te whakatinana i te ratchet mo nga taputapu tātari pateko me te kore e whakawhirinaki ki nga taputapu me nga taputapu tuatoru. Ka whakaputahia e ia kaitirotiro tana ake purongo i roto i te tuhinga ngawari, te whakatakotoranga XML ranei e ngawari ana ki te tātari. Ko nga mea katoa e toe ana ko te tuhi i te arorau e tika ana ki te tuhinga CI. Ka taea e koe te kite me pehea te whakatinanatanga o tenei i roto i a maatau kaupapa puna tuwhera i runga i a Jenkins me Artifactory konei ranei konei. Ko nga tauira e rua ka whakawhirinaki ki te whare pukapuka ratchetlib: tikanga countWarnings() tatau xml tūtohu i roto i ngā kōnae i hangaia e Checkstyle me Spotbugs i roto i te ara o mua, a compareWarningMaps() ka whakatinana i te ratchet kotahi, ka maka he hapa ka piki te maha o nga whakatupato i tetahi o nga waahanga.

Ko te whakatinanatanga pai o te "ratchet" ka taea mo te tātari i te takikupu o nga korero, nga kupu kupu me nga tuhinga ma te whakamahi i te aspell. Kei te mohio koe, i te wa e tirotirohia ana te takikupu, kaore nga kupu katoa e kore e mohiotia e te papakupu paerewa i te he, ka taea te taapiri atu ki te papakupu kaiwhakamahi. Mena ka mahia e koe he waahanga papakupu ritenga o te waehere puna o te kaupapa, katahi ka taea te hanga i te kuaha o te kounga o te takikupu penei: te rere aspell me te papakupu paerewa me te ritenga. kaua e tika kaua e kitea he hapa takikupu.

Mo te hiranga o te whakatika i te putanga tātari

Hei mutunga, ko te mea hei tohu, ahakoa pehea te whakatinana i te tātaritanga ki roto i to paipa tuku, me whakatika te putanga o te kaitirotiro. Mena ka whakaaetia e koe te kaitirotiro ki te whakahou ohorere, katahi ka whakaemihia te tono kume e whai ake nei, ka "puke ake" nga hapa hou kaore e pa ana ki nga huringa waehere, engari e pa ana ki te mea ka taea e te kaitirotiro hou te rapu i etahi atu hapa - a ma tenei ka pakaru to tikanga ki te whakaae ki nga tono toia. Ko te whakapai ake i te kaitirotiro me mahi mohio. Heoi ano, ko te whakatika maataki o te putanga o ia waahanga huinga he whakaritenga me te kaupapa mo te korerorero motuhake.

kitenga

  • Karekau te tātaritanga pateko e kitea he pepeke mo koe, kaore hoki e pai ake te kounga o to hua na te tono kotahi. Ko te painga pai ki te kounga ka taea anake ma te whakamahi tonu i te wa o te tuku.
  • Ko te rapu i nga pepeha ehara i te mahi matua mo te tātari; ko te nuinga o nga mahi whai hua kei te waatea i nga taputapu tuwhera.
  • Whakatinana i nga kuaha kounga i runga i nga hua o te tātaritanga pateko i te wa tuatahi o te paipa tuku, ma te whakamahi i te "ratchet" mo te waehere tuku iho.

tohutoro

  1. Te Tuku tonu
  2. A. Kudryavtsev: Te tātari kaupapa: me pehea te mohio he kaiwhakatakoto kaupapa pai koe purongo mo nga tikanga rereke mo te tātari waehere (ehara i te pateko anake!)

Source: will.com

Tāpiri i te kōrero