Tlhahlobo e tsitsitseng - ho tloha kenyelletsong ho ea ho kopanngoa

U khathetse ke tlhahlobo e sa feleng ea khoutu kapa ho lokisa liphoso, ka linako tse ling u nahana ka mokhoa oa ho nolofatsa bophelo ba hau. 'Me ka mor'a ho batlisisa hanyenyane, kapa ka ho oela ho eona ka phoso, u ka bona poleloana ea boselamose: "Tlhahlobo e tsitsitseng." Ha re bone hore na ke eng le hore na e ka sebelisana joang le morero oa hau.

Tlhahlobo e tsitsitseng - ho tloha kenyelletsong ho ea ho kopanngoa
Ha e le hantle, haeba u ngola ka puo leha e le efe ea morao-rao, joale, ntle le ho e hlokomela, u ile ua e tsamaisa ka analyzer e tsitsitseng. 'Nete ke hore moqapi ofe kapa ofe oa sejoale-joale o fana ka litemoso, leha e le tse nyane, mabapi le mathata a ka bang teng khoutu. Mohlala, ha o etsa khoutu ea C++ ho Visual Studio o ka bona tse latelang:

Tlhahlobo e tsitsitseng - ho tloha kenyelletsong ho ea ho kopanngoa
Ka sephetho sena re bona hore ho fetoha e ne e le ha ho mohla e kileng ea sebelisoa kae kapa kae mosebetsing. Kahoo ha e le hantle, u batla u sebelisa analyzer e bonolo ea static code. Leha ho le joalo, ho fapana le bahlahlobi ba litsebi ba kang Coverity, Klocwork kapa PVS-Studio, litemoso tse fanoeng ke moqapi li ka 'na tsa bontša feela mathata a fokolang.

Haeba u sa tsebe hantle hore na static analysis ke eng le hore na u ka e kenya ts'ebetsong joang, bala sehlooho senaho ithuta haholoanyane ka mokhoa ona.

Ke hobane'ng ha u hloka tlhahlobo e tsitsitseng?

Ka bokhutšoanyane: ho potlakisa le ho nolofatsa.

Tlhahlobo e tsitsitseng e u lumella ho fumana mathata a mangata a fapaneng ka khoutu: ho tloha tšebelisong e fosahetseng ea lipuo tsa lipuo ho ea ho typos. Ka mohlala, sebakeng sa

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

U ngotse khoutu e latelang:

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

Joalokaha u bona, ho na le typo moleng oa ho qetela. Mohlala, PVS-Studio e fana ka temoso e latelang:

V537 Nahana ka ho hlahloba ho nepahala ha tšebeliso ea ntho ea 'y'.

Haeba u batla ho kenya matsoho phosong ena, leka mohlala o entsoeng hantle ho Compiler Explorer: *lla*.

'Me ha u ntse u utloisisa, hase kamehla ho ka khonehang ho ela hloko likarolo tse joalo tsa khoutu hang-hang,' me ka lebaka la sena, u ka lula fatše ho lokisa phoso ka hora e ntle, u ipotsa hore na ke hobane'ng ha ntho e 'ngoe le e' ngoe e sebetsa ka mokhoa o makatsang.

Leha ho le joalo, ho hlakile hore sena ke phoso. Ho thoe'ng haeba moqapi a ngotse khoutu e tlase hobane a lebetse puo e poteletseng? Kapa o bile o e lumelletse ho khoutu boitšoaro bo sa hlalosoang? Ka bomalimabe, linyeoe tse joalo li tloaelehile ka ho feletseng 'me karolo ea tau ea nako e sebelisoa ho lokisa liphoso ka ho khetheha khoutu e sebetsang e nang le typos, liphoso tse tloaelehileng kapa boitšoaro bo sa hlalosoang.

Ke bakeng sa maemo ana moo tlhahlobo e tsitsitseng e ileng ea hlaha. Enoa ke mothusi oa moqapi ea tla supa mathata a sa tšoaneng ka khoutu mme a hlalose litokomaneng hore na ke hobane'ng ha ho sa hlokahale ho ngola ka tsela ena, hore na e ka lebisa ho eng le ho e lokisa joang. Mona ke mohlala oa hore na e ka shebahala joang: *lla*.

U ka fumana liphoso tse ling tse khahlisang tseo mohlahlobi a ka li bonang ho lingoliloeng:

Kaha joale u se u balile boitsebiso bona 'me u kholisehile ka melemo ea tlhahlobo e tsitsitseng, u ka' na ua batla ho e leka. Empa ho qala hokae? U ka kopanya sesebelisoa se secha joang morerong oa hau oa hajoale? Le mokhoa oa ho tsebisa sehlopha ho eena? U tla fumana likarabo tsa lipotso tsena ka tlase.

Tlhokomeliso: Tlhahlobo e tsitsitseng ha e nkele sebaka kapa ho hlakola ntho ea bohlokoa joalo ka tlhahlobo ea khoutu. E tlatsana le ts'ebetso ena, e thusa ho hlokomela le ho lokisa liphoso, liphoso, le meralo e kotsi esale pele. Ho molemo haholo ho tsepamisa maikutlo ho litlhahlobo tsa khoutu mabapi le li-algorithms le ho hlaka ha khoutu, ho fapana le ho batla masakaneng kapa bala mesebetsi ya papiso e tenang.

0. Ho tseba sesebelisoa

Tsohle li qala ka mofuta oa teko. Ka 'nete, ho thata ho etsa qeto ea ho kenyelletsa ntho e itseng molemong oa nts'etsopele haeba ha u e-so bone sesebelisoa se phela pele. Ka hona, ntho ea pele eo u lokelang ho e etsa ke download mofuta oa teko.

Seo u tla ithuta sona mothating ona:

  • Ke mekhoa efe ea ho sebelisana le analyzer;
  • Na analyzer e lumellana le tikoloho ea hau ea nts'etsopele?
  • Ho na le mathata afe hajoale mererong ea hau?

Ka mor'a hore u kenye ntho e 'ngoe le e' ngoe eo ue hlokang, ntho ea pele eo u lokelang ho e etsa ke ho etsa tlhahlobo ea morero kaofela (Windows, Linux, macOS). Tabeng ea PVS-Studio ho Visual Studio u tla bona setšoantšo se ts'oanang (se tlanya):

Tlhahlobo e tsitsitseng - ho tloha kenyelletsong ho ea ho kopanngoa
'Nete ke hore bahlahlobisisi ba static hangata ba fana ka litemoso tse ngata bakeng sa merero e nang le khoutu e kholo. Ha ho hlokahale ho li lokisa kaofela, kaha morero oa hau o se o ntse o sebetsa, ho bolelang hore mathata ana ha a bohlokoa. Leha ho le joalo, uena u ka sheba litemoso tse thahasellisang ka ho fetisisa le ho li lokisa ha ho hlokahala. Ho etsa sena, o hloka ho sefa sephetho ebe o siea melaetsa e tšepahalang feela. Ho PVS-Studio plugin bakeng sa Visual Studio, sena se etsoa ka ho sefa ka maemo a liphoso le mekhahlelo. Bakeng sa tlhahiso e nepahetseng haholo, tlohela feela High и General (hape e ka penya):

Tlhahlobo e tsitsitseng - ho tloha kenyelletsong ho ea ho kopanngoa
Ka 'nete, litemoso tsa 178 li bonolo haholo ho li shebella ho feta likete tse' maloa ...

Ka li-tab Medium и Low Hangata ho na le litemoso tse ntle, empa lihlopha tsena li kenyelletsa litlhahlobo tse nang le ho nepahala ho fokolang (ho tšepahala). Lintlha tse ling mabapi le maemo a temoso le likhetho tsa ho sebetsa tlasa Windows li ka fumanoa mona: *lla*.

Ho hlahloba ka katleho liphoso tse thahasellisang ka ho fetisisa (le ho li lokisa ka katleho) ho bohlokoa hatella litemoso tse setseng. Sena sea hlokahala e le hore litemoso tse ncha li se ke tsa lahleha har'a tsa khale. Ho phaella moo, static analyzer ke mothusi oa moqapi, eseng lethathamo la likokoana-hloko. 🙂

1. Boiketsetso

Kamora ho tloaelana, ke nako ea ho lokisa li-plugins le ho li kopanya ho CI. Sena se tlameha ho etsoa pele baetsi ba mananeo ba qala ho sebelisa static analyzer. 'Nete ke hore moqapi a ka lebala ho etsa tlhahlobo kapa a se batle ho e etsa ho hang. Ho etsa sena, o hloka ho etsa tlhahlobo ea ho qetela ea ntho e 'ngoe le e' ngoe e le hore khoutu e sa lekoang e se ke ea kena lekaleng la ntlafatso e akaretsang.

Seo u tla ithuta sona mothating ona:

  • Sesebelisoa se fana ka likhetho life tsa boiketsetso;
  • Na analyzer e lumellana le sistimi ea hau ea kopano?

Kaha litokomane tse phethahetseng ha li eo, ka linako tse ling u tlameha ho ngola tšehetso. Sena se tloaelehile 'me re thabela ho u thusa. 🙂

Joale ha re feteleng pele ho litšebeletso tsa continuous integration (CI). Analyzer leha e le efe e ka kenngoa ho tsona ntle le mathata a tebileng. Ho etsa sena, o hloka ho theha sethala se arohaneng pompong, eo hangata e fumanehang ka mor'a liteko tsa ho aha le tsa yuniti. Sena se etsoa ho sebelisoa lisebelisoa tse fapaneng tsa console. Mohlala, PVS-Studio e fana ka lisebelisoa tse latelang:

Ho kopanya tlhahlobo ho CI, o hloka ho etsa lintho tse tharo:

  • Kenya analyzer;
  • Matha tlhahlobo;
  • Fana ka liphetho.

Mohlala, ho kenya PVS-Studio ho Linux (Debian-base), o hloka ho tsamaisa litaelo tse latelang:

wget -q -O - https://files.viva64.com/etc/pubkey.txt 
    | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list
  
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio

Lits'ebetsong tse sebelisang Windows, ha ho na mokhoa oa ho kenya mohlahlobi ho tsoa ho mookameli oa sephutheloana, empa hoa khoneha ho tsamaisa mohlahlobi ho tsoa molaong oa taelo:

PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications

U ka bala haholoanyane ka ho tsamaisa PVS-Studio ho litsamaiso tse sebelisang Windows *mona*.

Kamora ho kenya, o hloka ho tsamaisa tlhahlobo ka kotloloho. Leha ho le joalo, ho kgothaletswa ho etsa sena feela ka mor'a ho bokella le ho feta liteko. Lebaka ke hobane tlhahlobo e sa fetoheng hangata e nka nako e telele habeli ho feta ho bokella.

Kaha mokhoa oa ho qala o itšetlehile ka sethala le likarolo tsa morero, ke tla bontša khetho ea C ++ (Linux) e le mohlala:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w

Taelo ea pele e tla etsa tlhahlobo, 'me ea bobeli lienfelopoe fetolela tlaleho hore e be sebopeho sa mongolo, e e hlahise skrineng ebe e khutlisetsa khoutu ea ho khutlisa ntle le 0 haeba ho na le litemoso. Mochine o kang ona o ka sebelisoa hamonate ho thibela mohaho ha ho na le melaetsa ea liphoso. Leha ho le joalo, u ka tlosa folakha kamehla -w mme o seke wa thibela kopano e nang le ditemoso.

Tlhokomeliso: Sebopeho sa mongolo ha se bonolo. E fanoe feela e le mohlala. Ela hloko sebopeho sa tlaleho se khahlisang haholoanyane - FullHtml. E u lumella ho tsamaea ka har'a khoutu.

U ka bala ho eketsehileng ka ho theha tlhahlobo ho CI sehloohong se reng "PVS-Studio le Tšebelisano e Tsoelang Pele"(Windows) kapa"Mokhoa oa ho theha PVS-Studio ho Travis CI"(Linux).

Ho lokile, o hlophisitse analyzer ho seva sa moaho. Hona joale, haeba motho a kentse khoutu e sa hlahlojoang, sethaleng sa ho netefatsa se tla hlōleha, 'me u tla khona ho bona bothata, leha ho le joalo, sena ha se bonolo ka ho feletseng, kaha ho sebetsa hantle ho hlahloba morero eseng ka mor'a hore makala a kopane, empa pele ho eona, sethaleng sa kopo ea ho hula.

Ka kakaretso, ho theha tlhahlobo ea kopo ea ho hula ha ho fapane haholo le tlhahiso e tloaelehileng ea tlhahlobo ho CI. Ntle le tlhokahalo ea ho fumana lethathamo la lifaele tse fetotsoeng. Hangata tsena li ka fumanoa ka ho botsa phapang lipakeng tsa makala a sebelisang git:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

Hona joale o hloka ho fetisetsa lenane lena la lifaele ho mohlahlobi e le ho kenya letsoho. Ka mohlala, ho PVS-Studio sena se sebelisoa ho sebelisa folakha -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

U ka fumana lintlha tse ling mabapi le ho sekaseka likopo tsa ho hula *mona*. Esita le haeba CI ea hau e se lethathamong la litšebeletso tse boletsoeng sehloohong sena, u tla fumana karolo e akaretsang e nehetsoeng khopolong ea mofuta ona oa tlhahlobo e le molemo.

Ka ho theha tlhahlobo ea likopo tsa ho hula, o ka thibela boitlamo bo nang le litemoso, ka hona o theha moeli oo khoutu e sa lekoang e ke keng ea o tšela.

Ka sebele sena se molemo, empa ke lakatsa ho khona ho bona litemoso tsohle sebakeng se le seng. Eseng feela ho tsoa ho static analyzer, empa hape le ho tsoa litekong tsa yuniti kapa ho tsoa ho analyzer e matla. Ho na le litšebeletso tse fapaneng le li-plugins bakeng sa sena. Ka mohlala, PVS-Studio e na le plugin bakeng sa ho kopanngoa ho SonarQube.

2. Ho kopanya ho mechine e ntlafatsang

Joale ke nako ea ho kenya le ho hlophisa analyzer bakeng sa ts'ebeliso ea letsatsi le letsatsi ea nts'etsopele. Ka nako ena u se u ntse u tloaelane le mekhoa e mengata ea ho sebetsa, kahoo sena se ka bitsoa karolo e bonolo ka ho fetisisa.

E le khetho e bonolo ka ho fetisisa, bahlahisi ba ka kenya analyzer e hlokahalang ka bobona. Leha ho le joalo, sena se tla nka nako e ngata 'me se ba sitise ho nts'etsopele, kahoo u ka khona ho iketsetsa ts'ebetso ena ho sebelisa mochine le lifolakha tse hlokahalang. Bakeng sa PVS-Studio ho na le tse fapaneng lifolakha bakeng sa ho instola tse iketsang. Leha ho le joalo, ho lula ho na le batsamaisi ba liphutheloana, mohlala, Chocolatey (Windows), Homebrew (macOS) kapa likhetho tse ngata bakeng sa Linux.

Joale o tla hloka ho kenya li-plugins tse hlokahalang, mohlala bakeng sa Visual Studio, IDEA, Moahelani joalo-joalo

3. Tšebeliso ea letsatsi le letsatsi

Nakong ena, ke nako ea ho bua mantsoe a seng makae mabapi le litsela tsa ho potlakisa analyzer nakong ea tšebeliso ea letsatsi le letsatsi. Tlhahlobo e feletseng ea morero oohle e nka nako e ngata, empa ke hangata hakae re fetolang khoutu ho pholletsa le morero oohle hang-hang? Ha ho na refactoring leha e le efe e kholo hoo e tla ama hang-hang motheo oa khoutu kaofela. Palo ea lifaele tse fetotsoeng ka nako ha se hangata e fetang leshome le metso e 'meli, kahoo hoa utloahala ho li sekaseka. Bakeng sa boemo bo joalo ho na le mokhoa o ntseng o eketseha oa tlhahlobo. U se ke ua tšoha, sena ha se sesebelisoa se seng. Ena ke mokhoa o ikhethileng o u lumellang hore u hlahlobe lifaele tse fetotsoeng feela le litšepiso tsa tsona, 'me sena se etsahala ka bohona ka mor'a ho haha ​​​​haeba u sebetsa ho IDE ka plugin e kentsoeng.

Haeba mohlahlobi a lemoha mathata khoutu e sa tsoa fetoloa, e tla tlaleha sena ka boikemelo. Mohlala, PVS-Studio e tla u joetsa ka sena ka tlhokomeliso:

Tlhahlobo e tsitsitseng - ho tloha kenyelletsong ho ea ho kopanngoa
Ehlile, ho bolella bahlahisi hore ba sebelise sesebelisoa ha hoa lekana. Re lokela ho ba bolella ka tsela e itseng hore na ke eng le hore na ke joang. Mona, mohlala, ho na le lingoliloeng tse mabapi le ho qala kapele bakeng sa PVS-Studio, empa u ka fumana lithupelo tse tšoanang bakeng sa sesebelisoa leha e le sefe seo u se ratang:

Lingoliloeng tse joalo li fana ka tlhaiso-leseling eohle e hlokahalang bakeng sa ts'ebeliso ea letsatsi le letsatsi mme ha e nke nako e ngata. 🙂

Le ha re le mothating oa ho tseba sesebelisoa, re ile ra hatella litemoso tse ngata nakong ea ho qala ha pele. Ka bomalimabe, li-analyzers tse tsitsitseng ha lia phethahala, kahoo nako le nako li fana ka maikutlo a fosahetseng. Hangata ho bonolo ho li hatella; mohlala, ho PVS-Studio plugin bakeng sa Visual Studio o hloka feela ho tobetsa konopo e le 'ngoe:

Tlhahlobo e tsitsitseng - ho tloha kenyelletsong ho ea ho kopanngoa
Leha ho le joalo, u ka etsa ho fetang feela ho li hatella. Ka mohlala, u ka tlaleha bothata ho tšehetso. Haeba phoso e fosahetseng e ka lokisoa, joale lintlafatsong tsa nako e tlang u ka hlokomela hore nako le nako ho na le lintlha tse fokolang tse fokolang le tse fokolang tse tobileng ho codebase ea hau.

Ka mor'a ho kopanya

Kahoo re fetile methating eohle ea ho kenyelletsa tlhahlobo e tsitsitseng ts'ebetsong ea nts'etsopele. Ho sa tsotellehe bohlokoa ba ho theha lisebelisoa tse joalo ho CI, sebaka sa bohlokoa ka ho fetisisa sa ho li tsamaisa ke k'homphieutha ea moqapi. Ha e le hantle, static analyzer hase moahloli ea reng kae-kae hole le uena hore khoutu ha e ntle. Ho e-na le hoo, ke mothusi ea u bolellang haeba u khathetse le ho u hopotsa haeba u lebetse ho hong.

Ke 'nete, ntle le tšebeliso e tloaelehileng, tlhahlobo ea static ha e na monyetla oa ho nolofatsa tsoelo-pele haholo. Ntle le moo, molemo oa eona o ka sehloohong bakeng sa nts'etsopele ha oa itšetleha haholo ka ho batla likarolo tse rarahaneng le tse tsosang khang ea khoutu, empa ho lemoha ha bona pele. Lumellana hore ho fumana bothata ka mor'a hore liphetoho li romeloe ho ea hlahlojoa ha ho monate feela, empa hape ho ja nako. Tlhahlobo e tsitsitseng, ha e sebelisoa khafetsa, e sheba phetoho e 'ngoe le e 'ngoe ka kotloloho khomphuteng ea hau mme e tlaleha libaka tse belaetsang ha u ntse u sebetsa khoutu.

'Me haeba uena kapa basebetsi-'moho le uena u ntse u sa tsebe hantle hore na ho bohlokoa ho sebelisa analyzer, joale ke fana ka tlhahiso ea hore u qale ho bala sengoloa "Mabaka a ho kenyelletsa static code analyzer PVS-Studio ts'ebetsong ea nts'etsopele". E sebetsana le matšoenyeho a tloaelehileng a bahlahisi ba hore tlhahlobo e tsitsitseng e tla nka nako ea bona joalo-joalo.

Tlhahlobo e tsitsitseng - ho tloha kenyelletsong ho ea ho kopanngoa

Haeba u batla ho arolelana sengoloa sena le bamameli ba buang Senyesemane, ka kopo sebelisa sehokelo sa phetolelo: Maxim Zvyagintsev. Static Analysis: Ho tloha ho Qala ho ea ho Kopanyo.

Source: www.habr.com

Eketsa ka tlhaloso