Me pehea te whakatinana i tetahi kaitirotiro waehere pateko i roto i tetahi kaupapa tuku iho me te kore e whakaheke i te roopu

Me pehea te whakatinana i tetahi kaitirotiro waehere pateko i roto i tetahi kaupapa tuku iho me te kore e whakaheke i te roopu
He ngawari noa ki te whakamatau i tetahi kaitirotiro waehere pateko. Engari ki te whakatinana, ina koa i roto i te whakawhanaketanga o tetahi kaupapa tawhito nui, me whai pukenga. Ki te he te mahi, ka taea e te kaitataritari te taapiri i te mahi, te whakaroa i te whanaketanga, me te whakaheke i te roopu. Me korero poto me pehea te whakatata tika ki te whakaurunga o te tātaritanga pateko ki roto i te tukanga whanaketanga me te tiimata ki te whakamahi hei waahanga o te CI/CD.

Whakataki

No tata nei ka aro atu ahau ki te whakaputanga "Te Timata Ma te Taatari Pateko me te Kore e Hiahia Te Kapa". I tetahi taha, he tuhinga pai tenei e tika ana kia mohio koe. I tetahi atu taha, ki taku whakaaro kaore ano kia tino whakautu me pehea te whakatinana i te tātaritanga pateko i roto i te kaupapa me te maha o te waehere tuku iho e kii ana te tuhinga ka taea e koe te whakaae ki te nama hangarau me te mahi anake i runga i te waehere hou, engari kaore he whakautu ki te aha ki tenei nama hangarau i muri mai.

Ko ta maatau roopu PVS-Studio e tuku ana i tana tirohanga mo tenei kaupapa. Kia titiro tatou ki te ahua o te raru o te whakatinana i te kaitirotiro waehere pateko i te tuatahi, me pehea te wikitoria i tenei raru, me pehea te whakakore i nga nama hangarau.

Nga take

I te nuinga o te wa karekau he uaua ki te whakarewa me te kite i te mahi a te kaitirotiro pateko [1]. Ka kite pea koe i nga hapa whakamere, i nga whakaraeraetanga whakamataku ranei i roto i te waehere. Ka taea e koe te whakatika i tetahi mea, engari ka mutu te maha o nga kaihōtaka.

Ko nga kaitirotiro pateko katoa ka whakaputa i nga hua pai. He ahuatanga tenei o te tikanga tātari waehere pateko, kaore he mea e taea. I roto i te take whanui, he raruraru kaore e taea te whakaoti, i whakapumautia e te kaupapa a Rice [2]. Kare ano hoki e awhina nga algorithm ako miihini [3]. Ahakoa kaore e taea e te tangata te korero i nga wa katoa he he tenei, ko tera waehere ranei, na kaua koe e tatari mai i te kaupapa :).

Ehara i te mea he raru nga hua pai teka mena kua whirihorahia te kaitirotiro pateko:

  • Kua monoa nga huinga ture kore whai take;
  • Kua monoa etahi tātaritanga kore whai take;
  • Mena kei te korero tatou mo C, C++ ranei, ka tohuhia nga tonotono kei roto nga hanganga motuhake e puta ai nga whakatupato huakore ki nga waahi katoa e whakamahia ai aua tonotono;
  • Ko nga mahi ake e tohuhia ana e mahi ana i nga mahi e rite ana ki nga mahi a te punaha (ko tana ake tairitenga memcpy ranei Tuhinga) [4];
  • Ko nga hua pai teka ka tino monokia ma te whakamahi i nga korero;
  • A pera tonu.

I tenei keehi, ka taea e tatou te tumanako he iti te reeti pai teka mo te 10-15% [5]. I etahi atu kupu, 9 i roto i te 10 nga whakatupato kaitirotiro ka tohu he tino raruraru kei roto i te waehere, he "waehere kakara kaha." Whakaae, he tino rawe tenei ahuatanga, a ko te kaitirotiro he tino hoa o te kaiwhakaputa.

Me pehea te whakatinana i tetahi kaitirotiro waehere pateko i roto i tetahi kaupapa tuku iho me te kore e whakaheke i te roopu
I roto i te meka, i roto i te kaupapa nui, ka tino rereke te pikitia tuatahi. Ka tukuna e te kaitirotiro nga rau, mano ranei o nga whakatupato mo te waehere tuku iho. Kaore e taea te mohio wawe ko wai o enei whakatupato e tika ana, ko tehea kaore. He mea poauau te noho ki raro ka timata ki te whakahaere i enei whakatupato katoa, na te mea ka mutu te mahi matua mo tenei keehi mo nga ra, wiki ranei. I te nuinga o te waa, kaore e taea e te roopu te utu mo tenei ahuatanga. He maha ano nga rereketanga ka pahuatia te hitori huringa. A ko te whakarereketanga papatipu tere o te maha o nga kongakonga i roto i te waehere ka puta he hapa hou me nga hapa.

A ko te mea nui, ko taua mahi i roto i te whawhai ki nga whakatupato he iti noa te tikanga. Whakaae mai i te mea kua pai te whakahaere o te kaupapa mo te maha o nga tau, kua whakatikahia te nuinga o nga hapa nui o roto. Ae, he tino utu enei whakatikatika, me whakakorehia, ka whiwhi urupare a nga kaiwhakamahi kino mo nga pepeha, me era atu. Ka awhina te kaitirotiro pateko ki te whakatika i te maha o enei hapa i te waahi whakawaehere, tere me te iti. Engari i tenei wa, i tetahi huarahi, i tetahi atu ranei, kua whakatikahia enei hapa, a ko te kaitirotiro te nuinga ka kitea nga hapa kore-kino i roto i te waehere tawhito. Kare pea tenei waehere e whakamahia, karekau pea te whakamahi, a na te hapa o roto ka kore pea e puta he hua ka kitea. Tena pea ko te atarangi mai i te paatene he he te tae, engari kaore tenei e raru ki te whakamahi a tetahi i te hua.

Ko te tikanga, ahakoa nga hapa iti he he tonu. A i etahi wa ka taea e te hapa te huna i te tino whakaraerae. Heoi, ko te tuku i nga mea katoa me te whakapau i nga ra/wiki ki te whakahaere i nga hapa karekau e kitea he whakaaro pohehe.

Ka titiro nga kaihōtaka, titiro, tirohia enei whakatupato katoa mo te waehere mahi tawhito... A ka whakaaro ratou: ka taea e tatou te mahi me te kore he tātaritanga pateko. Me haere tatou ki te tuhi i etahi mahi whaihua hou.

I a raatau ake huarahi, ka tika. Ki ta ratou whakaaro ko te tuatahi me peia e ratou enei whakatupato katoa. Katahi ano ka whai hua mai i te whakamahi auau o te kaitirotiro waehere. Ki te kore, ka toremi noa nga whakatupato hou i roto i nga mea tawhito, kare he tangata e aro atu.

He rite tonu tenei ki nga whakatupato whakahiato. Ehara i te mea he take e kii ana ratou kia mau tonu te maha o nga whakatupato whakahiato ki te 0. Mena he 1000 nga whakatupato, ka tae ki te 1001, karekau he tangata e aro ki a ia, a kaore i te maarama ki hea ka rapua tenei whakatupato hou.

Me pehea te whakatinana i tetahi kaitirotiro waehere pateko i roto i tetahi kaupapa tuku iho me te kore e whakaheke i te roopu
Ko te mea kino rawa atu i roto i tenei korero mena ka akiakihia koe e tetahi o runga i tenei wa ki te whakamahi i te tātari waehere pateko. Ma tenei ka whakaheke noa i te roopu, na te mea mai i o raatau tirohanga ka nui ake te uaua o te tari tari ka raru noa. Kaore tetahi e titiro ki nga purongo a te kaitirotiro, a ko nga whakamahinga katoa ka "ki te pepa" anake. Ko era. Ko te tikanga, ka hangaia he tātaritanga ki roto i te tukanga DevOps, engari i roto i nga mahi kaore tenei e whai painga ki tetahi. I rongo matou i nga korero taipitopito i nga tihokahoka mai i te hunga i tae mai ki te hui. Ka taea e tenei wheako te aukati i nga kaihōtaka ki te whakamahi i nga taputapu tātari pateko mo te wa roa, ki te kore ake ake.

Te whakatinana me te whakakore i nga nama hangarau

Inaa, karekau he uaua, he whakamataku ranei mo te whakauru i te tātaritanga pateko tae noa ki tetahi kaupapa tawhito nui.

CI / CD

I tua atu, ka taea tonu te kaitirotiro hei waahanga o te tukanga whanaketanga tonu. Hei tauira, kei roto i te tohatoha PVS-Studio nga taputapu mo te maataki i te ripoata i runga i te whakatakotoranga e hiahia ana koe, me nga whakamohiotanga ki nga kaiwhakawhanake nana i tuhi nga waahanga raru o te waehere. Mo te hunga e hiahia ana ki te whakarewa i te PVS-Studio mai i nga punaha CI / CD, ka tūtohu ahau kia mohio koe ki nga korero e pa ana. wahanga tuhinga me te raupapa tuhinga:

Engari kia hoki mai ano ki te take o te maha o nga painga teka i nga waahanga tuatahi o te whakatinana i nga taputapu tātari waehere.

Te whakatika i nga nama hangarau o naianei me te whakahaere i nga whakatupato hou

Ka taea e koe te ako i nga whakatupato hou ka puta mai i te waehere hou, i whakarereke ranei. He rereke te whakatinanatanga o tenei tikanga, engari he rite tonu te mauri. I roto i te PVS-Studio static analyzer, ka whakatinanahia tenei mahi e whai ake nei.

Kia tere te tiimata ki te whakamahi i te tātaritanga pateko, e kii ana matou kia whakamahia e nga kaiwhakamahi PVS-Studio te tikanga mo te aukati papatipu o nga whakatupato [6]. Ko te whakaaro whanui e whai ake nei. I whakarewahia e te kaiwhakamahi te kaitirotiro me te maha o nga whakatupato. I te mea kei te ora tonu tetahi kaupapa kua roa nei e whanake ana, e whanake ana, e whai moni ana, karekau pea e maha nga whakatupato i roto i te purongo e tohu ana i nga hapa kino. I etahi atu kupu, kua whakatikahia nga pepeke kino i tetahi huarahi, i tetahi atu ma te whakamahi i nga tikanga utu nui ake, he mihi ranei ki nga urupare a nga kaihoko. Na reira, ko nga mea katoa e kitea ana e te kaitirotiro i tenei wa ka kiia he nama hangarau, kaore e taea te ngana ki te whakakore tonu.

Ka taea e koe te korero ki a PVS-Studio kia whakaarohia enei whakatupato kaore e whai kiko mo tenei wa (tiakina nga nama hangarau mo muri), a ka kore e whakaatu. Ka hangaia e te kaitirotiro he konae motuhake hei penapena korero mo nga hapa kaore ano kia pai. Na inaianei ka tukuna e te PVS-Studio nga whakatupato mo nga waehere hou, whakarereke ranei. I tua atu, ka whakatinanahia enei mea katoa ma te mohio. Mena, hei tauira, ka taapirihia he raina kore ki te timatanga o te konae waehere puna, ka mohio te kaitirotiro, he pono, kaore he mea i rereke, ka noho puku tonu. Ka taea te whakauru i tenei konae tohu ki roto i te punaha whakahaere putanga. He nui te konae, engari ehara tenei i te raru, na te mea karekau he take ki te penapena maha.

Inaianei ka kite nga kaihōtaka katoa i nga whakatupato e pa ana ki nga waehere hou, whakarereke ranei. No reira, ka taea e koe te tiimata ki te whakamahi i te kaitirotiro, pera i ta raatau korero, mai i te ra e whai ake nei. A ka taea e koe te hoki ki te nama hangarau i muri mai, me te whakatika i nga hapa me te whirihora i te kaitirotiro.

Na, ko te raruraru tuatahi me te whakatinanatanga o te kaitirotiro i roto i tetahi kaupapa tawhito nui kua whakatauhia. Inaianei me whakaaro he aha te mahi ki te nama hangarau.

Whakatikanga bug me te refactorings

Ko te mea ngawari me te mea maori ko te whakataha i etahi wa ki te tarai i nga whakatupato kaitirotiro kua pehia me te ata whakahaere. I tetahi waahi ka whakatika koe i nga hapa i roto i te waehere, i tetahi waahi me whakahoki ano koe ki te korero ki te kaitirotiro kaore he raru o te waehere. Tauira ngawari:

if (a = b)

Ko te nuinga o nga kaitoi C++ me nga kaitirotiro e amuamu ana mo taua waehere, na te mea he nui te tupono ka hiahia ratou ki te tuhi (a == b). Engari he whakaaetanga kore korero, a, i te nuinga o te wa ka tuhia tenei i roto i nga tuhinga, mena he taapiri taapiri, katahi ka whakaarohia na te kaitakaro i tuhi i taua waehere, kaore he take ki te oati. Hei tauira, i roto i nga tuhinga PVS-Studio mo nga taatai V559 (CWE-481) kua marama te tuhi ko te rarangi e whai ake nei ka kiia he tika me te haumaru:

if ((a = b))

Ko tetahi atu tauira. Kua warewarehia ki tenei waehere C++? whati kaore ranei?

case A:
  foo();
case B:
  bar();
  break;

Ka tukuna e te kaitirotiro PVS-Studio he whakatupato i konei V796 (CWE-484). Ehara pea tenei i te he, me hoatu he tohu ki te parser ma te taapiri i te huanga [[hinga]] ranei, hei tauira, __huanga__((hinga)):

case A:
  foo();
  [[fallthrough]];
case B:
  bar();
  break;

Ka taea te kii ko enei huringa waehere kaore e whakatika i te bug. Ae, he pono tenei, engari e rua nga mahi whai hua. Tuatahi, ka whakakorehia e te ripoata kaitirotiro nga hua pai. Tuarua, ka marama ake te waehere mo nga tangata e whai waahi ana ki te tiaki. A he mea tino nui tenei! Mo tenei anake, he pai ki te kawe i nga refactorings iti kia marama ake ai te waehere me te ngawari ki te pupuri. I te mea karekau e mohio te kaitirotiro mehemea e hiahiatia ana te "pakaru" kaore ranei, kare ano hoki e marama ki nga hoa hötaka.

I tua atu i nga whakatikatika pepeha me nga refactorings, ka taea e koe te whakakore i nga whakatupato kaitirotiro teka. Ka taea te whakakore i etahi tātaritanga kore whai take. Ei hi‘oraa, te mana‘o nei te hoê taata e mea faufaa ore te mau faaararaa V550 mo te whakatairite i nga uara rewa/rua. Ko etahi ka whakarōpū i a raatau he mea nui me te tika ki te ako [7]. Ko ēhea whakatūpato e whakaarotia ana e tika ana, ā, ko ēhea karekau mā te rōpū whakawhanake e whakatau.

He huarahi kee hei pehi i nga matohi teka. Hei tauira, i whakahuahia te tohu tonotono i mua. Ko enei mea katoa ka whakaahuahia i roto i nga korero i roto i nga tuhinga. Ko te mea nui ko te maarama ki te mea ka ata haere me te nahanaha koe ki te mahi me nga hua pai, kaore he he ki a raatau. Ko te nuinga o nga whakatupato ohorere ka ngaro i muri i te whirihoranga, a ko nga waahi e tino hiahia ana kia ata tirotirohia me etahi huringa o te waehere kei te noho tonu.

Ano, ka awhina tonu matou i o taatau kaihoko ki te whakatu i te PVS-Studio mena ka ara ake etahi raru. I tua atu, i etahi wa i whakakorehia e matou nga whakatupato teka me te whakatika i nga hapa [8]. I roto i te take, i whakatau ahau ki te whakahua ko tenei waahanga mo te mahi tahi ka taea hoki :).

Tikanga ratchet

He huarahi whakamere ki te whakapai haere i te kounga o te waehere ma te whakakore i te whakatupato kaitirotiro pateko. Ko te rarangi raro ko te maha o nga whakatupato ka iti noa iho.

Me pehea te whakatinana i tetahi kaitirotiro waehere pateko i roto i tetahi kaupapa tuku iho me te kore e whakaheke i te roopu

Ka tuhia te maha o nga whakatupato i tukuna e te kaitirotiro pateko. Kua whirihorahia te kuaha o te kounga i tenei wa ka taea e koe te whakauru i tetahi waehere kaore e nui ake te maha o nga mahi. Ko te mutunga mai, ka timata te mahi whakaiti i te maha o nga whakaoho ma te whakatikatika i te kaitirotiro me te whakatika hapa.

Ahakoa e hiahia ana te tangata ki te tinihanga iti me te whakatau ki te whakawhiti i te kuaha o te kounga kaore i te whakakore i nga whakatupato i roto i tana waehere hou, engari ma te whakapai ake i te waehere tawhito tuatoru, ehara tenei i te mea whakamataku. He rite tonu, ka huri te ratchet ki tetahi huarahi, ka heke haere te maha o nga hapa. Ahakoa kaore te tangata e hiahia ki te whakatika i ona ake hapa hou, me whakapai tonu e ia tetahi mea i roto i te waehere tata. I etahi wa, ka mutu nga huarahi ngawari ki te whakaiti i te maha o nga whakatupato, ka tae mai te wa ka whakatikahia nga pepeke tuuturu.

Ko tenei tikanga e whakaahuahia ana i roto i tetahi tuhinga tino pai na Ivan Ponomarev "Whakauruhia te tātaritanga pateko ki roto i te tukanga, kaua ki te whakamahi ki te rapu i nga pepeke", e taunaki ana ahau ki te panui ki te hunga e hiahia ana ki te whakapai ake i te kounga o te waehere.

He purongo ano te kaituhi o te tuhinga mo tenei kaupapa: "Te tātari pateko tonu".

mutunga

Te ti'aturi nei au i muri mai i tenei tuhinga, ka kaha ake te whakaae a nga kaipanui ki nga taputapu tātari pateko me te hiahia ki te whakauru ki roto i te kaupapa whanaketanga. Mena kei a koe etahi patai, kei te reri tonu matou tohutohu nga kaiwhakamahi o ta maatau kaitirotiro pateko PVS-Studio me te awhina i tana whakatinanatanga.

Tera atu ano etahi feaa mo te watea me te whai hua te tātaritanga pateko. I whakamatau ahau ki te whakakore i te nuinga o enei feaa i roto i te whakaputanga "Nga take ki te whakauru i te PVS-Studio static code analyzer ki te tukanga whanaketanga" [9].

Nga mihi ki a koe mo to whakaaro ka haere mai скачать ka whakamatau i te kaitirotiro PVS-Studio.

He hononga taapiri

  1. Andrey Karpov. Me pehea e kite wawe ai au i nga whakatupatotanga whakamere e mahia ana e te kaitirotiro PVS-Studio mo te waehere C me C++?
  2. Wikipedia. Te kaupapa o te raihi.
  3. Andrey Karpov, Victoria Khanieva. Te whakamahi i te ako miihini i roto i te tātaritanga pateko o te waehere puna kaupapa.
  4. PVS-Studio. Tuhinga. Tautuhinga tātaritanga taapiri.
  5. Andrey Karpov. Ko nga ahuatanga o te kaitirotiro PVS-Studio e whakamahi ana i te tauira o EFL Core Libraries, 10-15% nga hua teka..
  6. PVS-Studio. Tuhinga. Te pehi papatipu o nga karere tātari.
  7. Ivan Andryashin. Mo te pehea i whakamatauhia ai e matou he tātaritanga pateko i runga i ta maatau kaupapa o te simulator matauranga o te pokanga endovascular X-ray.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Me pehea te whakapai ake a te roopu PVS-Studio i te waehere Unreal Engine.
  9. Andrey Karpov. Nga take ki te whakauru i te kaitirotiro waehere pateko PVS-Studio ki te tukanga whanaketanga.

Me pehea te whakatinana i tetahi kaitirotiro waehere pateko i roto i tetahi kaupapa tuku iho me te kore e whakaheke i te roopu

Ki te hiahia koe ki te tiri i tenei tuhinga ki te hunga whakarongo ki te reo Ingarihi, whakamahia te hononga whakamaori: Andrey Karpov. Me pehea te whakauru i tetahi kaitirotiro waehere pateko i roto i tetahi kaupapa tuku iho, kaua hoki e whakapouri i te roopu.

Source: will.com

Tāpiri i te kōrero