Mokhoa oa ho kenya ts'ebetso ea static code analyzer morerong oa lefa ntle le ho theola sehlopha

Mokhoa oa ho kenya ts'ebetso ea static code analyzer morerong oa lefa ntle le ho theola sehlopha
Ho bonolo ho leka static code analyzer. Empa ho e kenya ts'ebetsong, haholo-holo ho nts'etsopele ea morero o moholo oa khale, ho hloka tsebo. Haeba e entsoe ka phoso, mohlahlobi a ka eketsa mosebetsi, a liehisa nts'etsopele, 'me a theola sehlopha. A re ke re bue ka bokhutšoane mabapi le mokhoa oa ho atamela ka mokhoa o nepahetseng ho kopanngoa ha tlhahlobo e tsitsitseng ts'ebetsong ea nts'etsopele le ho qala ho e sebelisa e le karolo ea CI / CD.

Selelekela

Haufinyane tjena ke ile ka khahloa ke khatiso "Ho qala ka Analysis Static Ntle le ho Imetsa Sehlopha". Ka lehlakoreng le leng, ena ke sehlooho se setle se lokelang ho tloaelana le sona. Ka lehlakoreng le leng, ho bonahala ho 'na hore e ntse e sa fane ka karabo e feletseng mabapi le mokhoa oa ho kenya ts'ebetsong ka mokhoa o sa utloiseng bohloko ha ho hlahlojoa static morerong o nang le lintho tse ngata. Sengoliloeng se re U ka amohela sekoloto sa tekheniki mme oa sebetsa ka khoutu e ncha feela, empa ha ho na karabo ea hore na u etse eng ka sekoloto sena sa tekheniki hamorao.

Sehlopha sa rona sa PVS-Studio se fana ka maikutlo a sona tabeng ena. A re shebeng hore na bothata ba ho kenya ts'ebetsong ea static code analyzer bo hlaha joang pele, mokhoa oa ho hlōla bothata bona, le mokhoa oa ho felisa molato oa tekheniki butle-butle.

Litaba

Hangata ha ho thata ho qala le ho bona hore na static analyzer e sebetsa joang [1]. U ka bona liphoso tse khahlisang kapa esita le bofokoli bo tšosang bo ka bang teng ho khoutu. U ka ba ua lokisa ntho e itseng, empa joale baetsi ba mananeo ba bangata ba tela.

Li-analyzers tsohle tse tsitsitseng li hlahisa maikutlo a fosahetseng. Ena ke tšobotsi ea mokhoa oa ho hlahloba khoutu e tsitsitseng, 'me ha ho letho le ka etsoang ka eona. Ka kakaretso, bona ke bothata bo ke keng ba rarolloa, joalokaha ho netefalitsoe ke khopolo ea Rice [2]. Mekhoa ea ho ithuta ka mochini le eona e ke ke ea thusa [3]. Esita le haeba motho a ke ke a bolela kamehla hore na sena kapa khoutu eo e fosahetse, joale ha ua lokela ho lebella sena ho tsoa lenaneong :).

Lits'oants'o tsa bohata ha se bothata haeba static analyzer e se e hlophisitsoe:

  • Lisete tsa melao tse sa sebetseng tse holofetseng;
  • Litlhahlobo tse ling tse sa sebetseng li holofalitsoe;
  • Haeba re bua ka C kapa C ++, joale li-macros li tšoauoa tse nang le lihahi tse khethehileng tse etsang hore litemoso tse se nang thuso li hlahe sebakeng se seng le se seng moo li-macros tse joalo li sebelisoang teng;
  • Mesebetsi ea hau e tšoailoe e etsang liketso tse ts'oanang le ts'ebetso ea sistimi (analogue ea eona memcpy kapa hatisa) [4];
  • Maemo a fosahetseng a holofalitsoe ka ho khetheha ho sebelisa maikutlo;
  • Ho joalo joalo.

Tabeng ena, re ka lebella sekhahla se tlaase sa bohata se ka bang 10-15% [5]. Ka mantsoe a mang, litemoso tse 9 ho tse 10 tsa analyzer li tla bontša bothata ba 'nete khoutu, kapa bonyane "khoutu e monko o matla." Lumellana, boemo bona bo monate haholo, 'me mohlahlobi ke motsoalle oa sebele oa moqapi oa lenaneo.

Mokhoa oa ho kenya ts'ebetso ea static code analyzer morerong oa lefa ntle le ho theola sehlopha
Ha e le hantle, morerong o moholo, setšoantšo sa pele se tla fapana ka ho feletseng. Analyzer e fana ka litemoso tse makholo kapa tse likete bakeng sa khoutu ea lefa. Ha ho khonehe ho utloisisa kapele hore na ke efe ea litemoso tsena tse bohlokoa le tse seng joalo. Ha ho utloahale ho lula fatše le ho qala ho sebetsana le litemoso tsena kaofela, kaha mosebetsi o ka sehloohong tabeng ena o tla emisa matsatsi kapa libeke. Ka tloaelo, sehlopha ha se khone ho lefella boemo bo joalo. Hape ho tla ba le palo e kholo ea liphapang tse senyang nalane ea phetoho. 'Me ho hlophisoa ka potlako ha likhechana tse ngata ka har'a khoutu ho tla fella ka liphoso le liphoso tse ncha.

Mme sa bohlokwa le ho feta, ketso e jwalo ya ntwa kgahlanong le ditemoso ha e na kelello. Lumellana hore kaha morero ona o 'nile oa sebetsa ka katleho ka lilemo tse ngata, boholo ba liphoso tse tebileng ho oona li se li lokisitsoe. Ee, litokiso tsena li ne li tura haholo, li ile tsa tlameha ho lokisoa, li fumane maikutlo a fosahetseng a basebelisi mabapi le likokoana-hloko, joalo-joalo. A static analyzer e ka thusa ho lokisa liphoso tse ngata sethaleng sa likhoutu, kapele le ka theko e tlase. Empa hajoale, ka tsela e 'ngoe kapa e' ngoe, liphoso tsena li lokisitsoe, 'me mohlahlobi o fumana haholo liphoso tse seng tsa bohlokoa ka har'a khoutu ea khale. Khoutu ena e kanna ea se sebelisoe, e kanna ea sebelisoa ka seoelo, mme phoso e ho eona e kanna ea se ke ea lebisa litlamorao tse hlokomelehang. Mohlomong kae-kae moriti o tsoang ho konopo ke 'mala o fosahetseng, empa sena ha se kena-kenane le tšebeliso ea mang kapa mang ea sehlahisoa.

Ke ’nete hore esita le liphoso tse nyenyane e ntse e le liphoso. 'Me ka linako tse ling phoso e ka pata bofokoli ba sebele. Leha ho le joalo, ho tela ntho e 'ngoe le e' ngoe le ho qeta matsatsi / libeke u sebetsana le bofokoli bo sa bonahaleng ho bonahala eka ke khopolo e belaetsang.

Baetsi ba mananeo ba sheba, sheba, sheba litemoso tsena tsohle mabapi le khoutu ea khale ea ho sebetsa ... 'Me ba nahana: re ka etsa ntle le tlhahlobo e tsitsitseng. Ha re e'o ngola tšebetso e ncha ea bohlokoa.

Ka tsela ea bona, ba nepile. Ba nahana hore pele ba tlameha ho lahla litemoso tsena kaofela. Ke ka nako eo feela ba tla khona ho rua molemo tšebelisong ea kamehla ea analyzer ea khoutu. Ho seng joalo, litemoso tse ncha li tla khangoa ke tsa khale, ’me ha ho motho ea tla li ela hloko.

Ena ke papiso e tšoanang le ea litemoso tsa batho ba bokellang. Ha ho na lebaka la hore ba khothaletse ho boloka palo ea litemoso tsa compiler ho 0. Haeba ho na le litemoso tsa 1000, joale ha ho na le 1001, ha ho motho ea tla e ela hloko, 'me ha ho hlake hore na u ka batla temoso ena e ncha hokae.

Mokhoa oa ho kenya ts'ebetso ea static code analyzer morerong oa lefa ntle le ho theola sehlopha
Ntho e mpe ka ho fetisisa paleng ena ke haeba motho ea tsoang holimo ka nako ena a u qobella ho sebelisa tlhahlobo ea khoutu e tsitsitseng. Sena se tla theola sehlopha feela, hobane ho ea ka pono ea bona ho tla ba le mathata a eketsehileng a bureaucratic a kenang tseleng. Ha ho na motho ea tla sheba litlaleho tsa mohlahlobi, 'me tšebeliso eohle e tla ba feela "ka pampiri". Tseo. Ka mokhoa o hlophisitsoeng, tlhahlobo e hahiloe ts'ebetsong ea DevOps, empa ts'ebetsong sena ha se ruise mang kapa mang molemo. Re utloile lipale tse qaqileng ka maphepheng ho tsoa ho batho ba tlileng kopanong. Boiphihlelo bo joalo bo ka nyahamisa baetsi ba mananeo hore ba se ke ba sebelisa lisebelisoa tsa tlhahlobo tse tsitsitseng ka nako e telele, haeba e se ka ho sa feleng.

Ho kenya ts'ebetsong le ho felisa sekoloto sa tekheniki

Ha e le hantle, ha ho letho le thata kapa le tšosang mabapi le ho hlahisa tlhahlobo e tsitsitseng esita le morerong o moholo oa khale.

CI / CD

Ho feta moo, analyzer e ka etsoa hang-hang karolo ea ts'ebetso e tsoelang pele ea ntlafatso. Ka mohlala, kabo ea PVS-Studio e na le lisebelisoa tsa ho shebella tlaleho ka mokhoa oo u o hlokang, le litsebiso ho baetsi ba ngotseng likarolo tse thata tsa khoutu. Bakeng sa ba nang le thahasello e kholo ea ho qala PVS-Studio ho tsoa ho litsamaiso tsa CI/CD, ke khothaletsa hore o itloaetse ho tseba ka mokhoa o tšoanang. karolo litokomane le letoto la lingoliloeng:

Empa a re khutleleng tabeng ea palo e kholo ea lintlha tse fosahetseng ka mekhahlelo ea pele ea ho kenya ts'ebetsong lisebelisoa tsa tlhahlobo ea khoutu.

Ho lokisa mokoloto o teng oa tekheniki le ho sebetsana le litemoso tse ncha

Li-analyzer tsa sejoale-joale tsa khoebo li u lumella ho ithuta litemoso tse ncha tse hlahang khoutu e ncha kapa e fetotsoeng. Ts'ebetsong ea mokhoa ona oa fapana, empa moelelo o tšoana. Ho PVS-Studio static analyzer, ts'ebetso ena e sebelisoa ka tsela e latelang.

Ho qala ka potlako ho sebelisa tlhahlobo e tsitsitseng, re fana ka maikutlo a hore basebelisi ba PVS-Studio ba sebelise mochine oa khatello ea litemoso [6]. Khopolo e akaretsang ke e latelang. Mosebelisi o hlahisitse analyzer mme a fumana litemoso tse ngata. Kaha morero o 'nileng oa etsoa ka lilemo tse ngata o ntse o phela, o nts'etsapele le ho etsa chelete, joale ho ka etsahala hore ebe ho ke ke ha e-ba le litemoso tse ngata tlalehong e bontšang mefokolo e tebileng. Ka mantsoe a mang, litšitšili tse mahlonoko li se li lokisitsoe ka tsela e 'ngoe ho sebelisoa mekhoa e theko e boima kapa ka lebaka la maikutlo a tsoang ho bareki. Ka hona, ntho e 'ngoe le e' ngoe eo mohlahlobi a e fumanang hona joale e ka nkoa e le mokoloto oa tekheniki, oo ho seng bonolo ho leka ho o felisa hang-hang.

U ka bolella PVS-Studio ho nka litemoso tsena li sa sebetse hajoale (boloka sekoloto sa tekheniki bakeng sa hamorao), 'me ha e sa tla hlola e li bontša. Mohlahlobi o etsa faele e khethehileng moo e bolokang tlhahisoleseding e mabapi le liphoso tse e-s'o thahasellise. 'Me joale PVS-Studio e tla fana ka litemoso bakeng sa khoutu e ncha kapa e fetotsoeng feela. Ho feta moo, tsena tsohle li sebelisoa ka bohlale. Haeba, ka mohlala, mohala o se nang letho o eketsoa qalong ea faele ea khoutu ea mohloli, joale mohlahlobi o utloisisa hore, ha e le hantle, ha ho letho le fetohileng, 'me le tla tsoela pele ho khutsa. Faele ena ea li-markup e ka kenngoa ho sistimi ea taolo ea mofuta. Faele e kholo, empa sena ha se bothata, kaha ha ho na thuso ea ho e boloka hangata.

Hona joale baetsi bohle ba mananeo ba tla bona litemoso tse amanang le khoutu e ncha kapa e fetotsoeng feela. Kahoo, o ka qala ho sebelisa analyzer, joalo ka ha ba re, ho tloha letsatsing le hlahlamang. 'Me u ka khutlela mokolotong oa tekheniki hamorao,' me butle-butle lokisa liphoso le ho lokisa analyzer.

Kahoo, bothata ba pele ba ts'ebetsong ea analyzer morerong o moholo oa khale bo rarollotsoe. Joale a re boneng hore na re etse eng ka sekoloto sa tekheniki.

Litokiso le li-refactorings

Ntho e bonolo ka ho fetisisa le ea tlhaho ke ho behella ka thōko nako e itseng ea ho hlahloba litemoso tsa analyzer tse hatelitsoeng haholo 'me butle-butle u sebetsane le tsona. Kae-kae u lokela ho lokisa liphoso khoutu, kae-kae u lokela ho refactor ho bolella mohlahlobi hore khoutu ha e na bothata. Mohlala o bonolo:

if (a = b)

Boholo ba baqapi le bahlahlobisisi ba C ++ ba tletleba ka khoutu e joalo, kaha ho na le monyetla o moholo oa hore ba ne ba hlile ba batla ho ngola. (a == b). Empa ho na le tumellano e sa buuoeng, 'me hangata sena se hlokomeloa litokomaneng, hore haeba ho na le li-parentheses tse eketsehileng, joale ho nkoa hore moqapi oa lenaneo o ngotse khoutu e joalo ka boomo,' me ha ho hlokahale ho hlapanya. Ka mohlala, litokomaneng tsa PVS-Studio bakeng sa tlhahlobo ea mafu V559 (CWE-481) ho ngotsoe ka ho hlaka hore mola o latelang o tla nkoa o nepahetse ebile o bolokehile:

if ((a = b))

Mohlala o mong. Na e lebetsoe khoutung ee ea C++? khefu kapa eseng joalo?

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

Mohlahlobi oa PVS-Studio o tla fana ka temoso mona V796 (CWE-484). Sena e kanna ea se be phoso, moo o lokelang ho fa mohlahlobi leseli ka ho eketsa tšobotsi [[fallthrough]] kapa mohlala __attribute__((fallthrough)):

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

Ho ka boleloa hore liphetoho tse joalo tsa khoutu ha li lokise phoso. E, sena ke 'nete, empa se etsa lintho tse peli tse molemo. Taba ea pele, tlaleho ea analyzer e tlosa lintlha tse fosahetseng. Taba ea bobeli, khoutu e utloahala haholoanyane ho batho ba amehang tlhokomelong ea eona. 'Me sena ke sa bohlokoa haholo! Bakeng sa sena feela, ho bohlokoa ho etsa liphetoho tse nyane ho etsa hore khoutu e hlake le ho e boloka habonolo. Kaha mohlahlobi ha a utloisise hore na "khefu" e hlokahala kapa che, ho ke ke ha hlaka le ho baetsi ba mananeo.

Ntle le ho lokisa liphoso le li-refactorings, o ka hatella ka ho hlaka litemoso tsa mohlahlobi oa bohata. Litlhahlobo tse ling tse sa sebetseng li ka emisoa. Ka mohlala, motho e mong o nahana hore litemoso ha li na thuso V550 mabapi le ho bapisa boleng ba ho phaphamala / habeli. 'Me ba bang ba li khetholla e le tsa bohlokoa le tse lokelang ho ithutoa [7]. Ke litemoso life tse nkoang li le bohlokoa le tse sa lokelang ho tsoa ho sehlopha sa ntlafatso ho etsa qeto.

Ho na le litsela tse ling tsa ho thibela litemoso tsa bohata. Ka mohlala, macro markup e boletsoe pejana. Tsena tsohle li hlalositsoe ka ho qaqileng haholoanyane litokomaneng. Ntho ea bohlokoa ka ho fetisisa ke ho utloisisa hore haeba butle-butle le ka mokhoa o hlophisitsoeng u atamela ho sebetsa ka mekhoa ea bohata, ha ho letho le phoso ka bona. Bongata ba litemoso tse sa thabiseng li nyamela ka mor'a ho hlophisoa, 'me ke libaka feela tse hlileng li hlokang ho ithuta ka hloko le liphetoho tse ling tsa khoutu.

Hape, re lula re thusa bareki ba rona ho theha PVS-Studio haeba ho hlaha mathata. Ho feta moo, ho ne ho e-na le maemo ao ka borōna re neng re tlosa litemoso tsa bohata ’me ra lokisa liphoso [8]. Haeba ho ka etsahala, ke ile ka etsa qeto ea ho bolela hore khetho ena bakeng sa tšebelisano e atolositsoeng e ka khoneha :).

Mokhoa oa Ratchet

Ho na le mokhoa o mong o khahlisang oa ho ntlafatsa butle-butle boleng ba khoutu ka ho tlosa temoso ea static analyzer. Ntlha ea bohlokoa ke hore palo ea litemoso e ka fokotseha feela.

Mokhoa oa ho kenya ts'ebetso ea static code analyzer morerong oa lefa ntle le ho theola sehlopha

Palo ea litemoso tse fanoeng ke static analyzer e tlalehiloe. Heke ea boleng e hlophisitsoe ka tsela eo joale o ka kenyang khoutu feela e sa eketseng palo ea ts'ebetso. Ka lebaka leo, mokhoa oa ho fokotsa butle-butle palo ea lialamo o qala ka ho lokisa mohlahlobi le ho lokisa liphoso.

Esita le haeba motho a batla ho qhekella hanyenyane mme a etsa qeto ea ho fetisa heke ea boleng eseng ka ho felisa litemoso ka khoutu ea hae e ncha, empa ka ho ntlafatsa khoutu ea khale ea mokha oa boraro, sena ha se tšabe. Leha ho le joalo, ratchet e potoloha ka tsela e le 'ngoe,' me butle-butle palo ea likoli e tla fokotseha. Esita le haeba motho a sa batle ho lokisa mefokolo ea hae e ncha, o ntse a tla tlameha ho ntlafatsa ho hong ho khoutu ea boahelani. Ka nako e 'ngoe, litsela tse bonolo tsa ho fokotsa palo ea litemoso li fela,' me ho fihla ntlha ea ha liphoso tsa sebele li tla lokisoa.

Mokhoa ona o hlalosoa ka ho qaqileng haholoanyane sehloohong se thahasellisang haholo sa Ivan Ponomarev ".Kenya ts'ebetsong tlhahlobo e tsitsitseng, ho e-na le ho batla liphoso ka eona", eo ke khothaletsang ho e balla mang kapa mang ea nang le thahasello ea ho ntlafatsa boleng ba khoutu.

Mongoli oa sengoloa o boetse o na le tlaleho mabapi le sehlooho sena: "Tlhahlobo e tsitsitseng e tsitsitseng".

fihlela qeto e

Ke tšepa hore ka mor'a sehlooho sena, babali ba tla amohela haholoanyane lisebelisoa tsa tlhahlobo ea static mme ba tla batla ho li kenya ts'ebetsong ea tsoelo-pele. Haeba u na le lipotso, re lula re loketse eletsa basebelisi ba static analyzer ea rona PVS-Studio le ho thusa ka ts'ebetsong ea eona.

Ho na le lipelaelo tse ling tse tloaelehileng mabapi le hore na tlhahlobo ea static e ka ba bonolo ebile e na le thuso. Ke ile ka leka ho felisa boholo ba lipelaelo tsena khatisong ea "Mabaka a ho kenyelletsa PVS-Studio static code analyzer ts'ebetsong ea nts'etsopele" [9].

Kea leboha ka tlhokomelo ea hau 'me u tle скачать 'me u leke analyzer ea PVS-Studio.

Lihokelo tse ling

  1. Andrey Karpov. Nka bona litemoso tse khahlisang joang ka potlako tseo mohlahlobi oa PVS-Studio e li hlahisang bakeng sa khoutu ea C le C ++?
  2. Wikipedia. Theorem ea Rice.
  3. Andrey Karpov, Victoria Khanieva. Ho sebelisa ho ithuta ka mochini tlhahlobong e tsitsitseng ea khoutu ea mohloli oa lenaneo.
  4. PVS-Studio. Litokomane. Litlhophiso tse ling tsa tlhahlobo.
  5. Andrey Karpov. Litšobotsi tsa mohlahlobi oa PVS-Studio o sebelisa mohlala oa EFL Core Libraries, 10-15% ea bohata.
  6. PVS-Studio. Litokomane. Khatello e kholo ea melaetsa ea analyzer.
  7. Ivan Andryashin. Mabapi le kamoo re lekileng tlhahlobo e tsitsitseng morerong oa rona oa simulator ea thuto ea X-ray endovascular operation.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Sehlopha sa PVS-Studio se ntlafalitse joang khoutu ea Unreal Engine.
  9. Andrey Karpov. Mabaka a ho kenyelletsa static code analyzer PVS-Studio ts'ebetsong ea nts'etsopele.

Mokhoa oa ho kenya ts'ebetso ea static code analyzer morerong oa lefa ntle le ho theola sehlopha

Haeba u batla ho arolelana sengoloa sena le bamameli ba buang Senyesemane, ka kopo sebelisa sehokelo sa phetolelo: Andrey Karpov. Mokhoa oa ho hlahisa static code analyzer morerong oa lefa le ho se nyahamise sehlopha.

Source: www.habr.com

Eketsa ka tlhaloso