Kev soj ntsuam zoo li qub - los ntawm kev taw qhia txog kev sib koom ua ke

Nquag ntawm kev tshuaj xyuas cov lej tsis kawg lossis kev debugging, qee zaum koj xav txog yuav ua li cas kom yooj yim rau koj lub neej. Thiab tom qab tshawb nrhiav me ntsis, lossis los ntawm kev ua yuam kev poob rau nws, koj tuaj yeem pom cov kab lus khawv koob: "Kev tsom xam zoo li qub". Cia peb pom nws yog dab tsi thiab nws tuaj yeem cuam tshuam nrog koj qhov project.

Kev soj ntsuam zoo li qub - los ntawm kev taw qhia txog kev sib koom ua ke
Qhov tseeb, yog tias koj sau hauv ib hom lus niaj hnub, ces, txawm tias tsis paub txog nws, koj tau khiav nws los ntawm tus ntsuas qhov zoo li qub. Qhov tseeb yog tias txhua tus niaj hnub compiler muab, txawm tias me me, cov lus ceeb toom txog cov teeb meem tshwm sim hauv cov cai. Piv txwv li, thaum sau C ++ code hauv Visual Studio koj yuav pom cov hauv qab no:

Kev soj ntsuam zoo li qub - los ntawm kev taw qhia txog kev sib koom ua ke
Hauv qhov tso zis no peb pom tias qhov sib txawv var yeej tsis tau siv nyob qhov twg hauv txoj haujlwm. Yog li, hauv kev muaj tiag, koj yuav luag ib txwm siv qhov yooj yim zoo li qub code analyzer. Txawm li cas los xij, tsis zoo li cov kws tshuaj ntsuam xyuas xws li Coverity, Klocwork lossis PVS-Studio, cov lus ceeb toom muab los ntawm cov neeg muab sau ua ke tsuas yog qhia txog ntau yam teeb meem.

Yog tias koj tsis paub tseeb tias qhov kev txheeb xyuas zoo li cas yog thiab yuav siv nws li cas, nyeem tsab xov xwm nokom paub ntau ntxiv txog cov txheej txheem no.

Vim li cas koj thiaj xav tau kev soj ntsuam zoo li qub?

Nyob rau hauv ib tug nutshell: acceleration thiab simplification.

Kev soj ntsuam zoo li qub tso cai rau koj pom ntau yam teeb meem sib txawv hauv cov cai: los ntawm kev siv cov lus tsis raug mus rau typos. Piv txwv li, es tsis txhob

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

Koj tau sau cov cai hauv qab no:

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

Raws li koj tau pom, muaj ib tug typo nyob rau hauv kab kawg. Piv txwv li, PVS-Studio teeb tsa cov lus ceeb toom hauv qab no:

V537 Xav txog kev tshuaj xyuas qhov tseeb ntawm 'y' khoom siv.

Yog tias koj xav tso koj txhais tes rau hauv qhov yuam kev no, sim ua piv txwv npaj ua hauv Compiler Explorer: *quaj*.

Thiab raws li koj nkag siab, nws tsis yog ib txwm ua tau los saib xyuas cov ntu ntawm cov cai tam sim ntawd, thiab vim li no, koj tuaj yeem zaum debugging rau ib teev zoo, xav tsis thoob vim li cas txhua yam ua haujlwm txawv txawv.

Txawm li cas los xij, qhov no yog qhov yuam kev. Yuav ua li cas yog hais tias tus tsim tawm sau suboptimal code vim nws tsis nco qab ib co subtlety ntawm cov lus? Los yog txawm tso cai rau nws nyob rau hauv cov cai tus cwj pwm tsis meej? Hmoov tsis zoo, cov xwm txheej zoo li no tshwm sim tag nrho thiab tus tsov ntxhuav feem ntawm lub sijhawm yog siv kev debugging tshwj xeeb ua haujlwm code uas muaj typos, raug yuam kev lossis tus cwj pwm tsis meej.

Nws yog rau cov xwm txheej no uas qhov kev soj ntsuam zoo li qub tau tshwm sim. Qhov no yog tus pab cuam rau tus tsim tawm uas yuav taw qhia ntau yam teeb meem hauv cov cai thiab piav qhia hauv cov ntaub ntawv vim li cas nws tsis tsim nyog los sau txoj kev no, nws tuaj yeem ua rau thiab yuav kho li cas. Nov yog ib qho piv txwv ntawm qhov nws yuav zoo li: *quaj*.

Koj tuaj yeem pom ntau qhov tsis txaus ntseeg uas tus ntsuas ntsuas tuaj yeem pom hauv cov ntawv:

Tam sim no koj tau nyeem cov ntaub ntawv no thiab ntseeg tau cov txiaj ntsig ntawm kev txheeb xyuas zoo li qub, koj yuav xav sim nws. Tab sis yuav pib qhov twg? Yuav ua li cas muab cov cuab yeej tshiab rau hauv koj qhov project tam sim no? Thiab yuav ua li cas qhia pab neeg rau nws? Koj yuav pom cov lus teb rau cov lus nug hauv qab no.

Nco ntsoov. Kev soj ntsuam zoo li qub tsis hloov lossis tshem tawm qhov tseem ceeb xws li kev txheeb xyuas cov lej. Nws ua kom tiav cov txheej txheem no, pab kom pom thiab kho qhov typos, qhov tsis raug, thiab cov qauv tsim txaus ntshai ua ntej. Nws yog qhov ua tau zoo dua los tsom rau kev tshuaj xyuas cov lej ntawm algorithms thiab code clarity, es tsis yog nrhiav cov kab lus tsis raug lossis nyeem boring kev sib piv functions.

0. Kev paub txog lub cuab yeej

Nws tag nrho pib nrog ib tug mus sib version. Tseeb, nws yog ib qho nyuaj rau kev txiav txim siab los siv ib yam dab tsi rau hauv txoj kev loj hlob yog tias koj tsis tau pom lub cuab tam nyob ua ntej. Yog li ntawd, thawj qhov koj yuav tsum ua yog download tau sim version.

Yam koj yuav kawm nyob rau theem no:

  • Dab tsi yog txoj hauv kev los cuam tshuam nrog lub ntsuas ntsuas;
  • Puas yog tus ntsuas ntsuas tau zoo nrog koj qhov kev loj hlob ib puag ncig?
  • Tam sim no muaj teeb meem dab tsi hauv koj qhov project?

Tom qab koj tau teeb tsa txhua yam koj xav tau, thawj qhov koj yuav tsum ua yog khiav kev tshuaj ntsuam ntawm tag nrho qhov project (lub qhov rais, Linux, MacOS). Nyob rau hauv rooj plaub ntawm PVS-Studio hauv Visual Studio koj yuav pom ib daim duab zoo sib xws (nias):

Kev soj ntsuam zoo li qub - los ntawm kev taw qhia txog kev sib koom ua ke
Qhov tseeb yog tias cov kws tshuaj ntsuam xyuas zoo li qub feem ntau tshaj tawm cov lus ceeb toom ntau rau cov haujlwm nrog cov lej loj. Tsis tas yuav kho lawv tag nrho, vim tias koj qhov project twb ua haujlwm lawm, uas txhais tau tias cov teeb meem no tsis yog qhov tseem ceeb. Txawm li cas los xij, koj koj tuaj yeem saib cov lus ceeb toom nthuav tshaj plaws thiab kho lawv yog tias tsim nyog. Txhawm rau ua qhov no, koj yuav tsum tau lim cov zis thiab tawm tsuas yog cov lus ntseeg siab tshaj plaws. Hauv PVS-Studio plugin rau Visual Studio, qhov no yog ua los ntawm kev lim los ntawm qib thiab pawg. Rau qhov tseeb tshaj tawm, tawm xwb High ΠΈ General (kuj clickable):

Kev soj ntsuam zoo li qub - los ntawm kev taw qhia txog kev sib koom ua ke
Tseeb tiag, 178 ceeb toom yog qhov yooj yim dua los saib ntau dua li ntau txhiab ...

Hauv tabs Medium ΠΈ Tsawg Feem ntau muaj cov lus ceeb toom zoo, tab sis cov pawg no suav nrog cov kev kuaj mob uas tsis tshua muaj tseeb (kev ntseeg siab). Xav paub ntau ntxiv txog qib ceeb toom thiab cov kev xaiv rau kev ua haujlwm hauv Windows tuaj yeem pom ntawm no: *quaj*.

Tau ua tiav kev tshuaj xyuas qhov tsis txaus ntseeg tshaj plaws (thiab ua tiav kho lawv) yog qhov tsim nyog txwv cov lus ceeb toom ntxiv. Qhov no yog qhov tsim nyog kom cov lus ceeb toom tshiab tsis tau ploj ntawm cov qub. Tsis tas li ntawd, tus kws tshuaj ntsuam xyuas zoo li qub yog tus pab cuam rau tus programmer, thiab tsis yog cov npe kab. πŸ™‚

1. Automation

Tom qab tau txais kev paub, nws yog lub sijhawm los teeb tsa plugins thiab koom ua ke rau hauv CI. Qhov no yuav tsum tau ua ua ntej programmers pib siv lub static analyzer. Qhov tseeb yog tias tus programmer yuav hnov ​​​​qab qhib kev tsom xam lossis tsis xav ua txhua yam. Txhawm rau ua qhov no, koj yuav tsum ua qee qhov kev kuaj xyuas zaum kawg ntawm txhua yam kom tsis txhob sim cov lej tsis tuaj yeem nkag mus rau hauv kev txhim kho dav dav.

Yam koj yuav kawm nyob rau theem no:

  • Cov kev xaiv automation dab tsi uas lub cuab yeej muab;
  • Puas yog lub ntsuas ntsuas tau sib haum nrog koj qhov kev sib dhos?

Txij li thaum tsis muaj cov ntaub ntawv zoo meej, qee zaum koj yuav tsum sau rau hauv txhawb nqa. Qhov no yog qhov qub thiab peb zoo siab los pab koj. πŸ™‚

Tam sim no cia peb mus rau qhov kev pabcuam txuas ntxiv (CI) kev pabcuam. Ib qho tshuaj ntsuam xyuas tuaj yeem siv rau hauv lawv yam tsis muaj teeb meem loj. Txhawm rau ua qhov no, koj yuav tsum tsim cov theem sib cais hauv cov kav dej, uas feem ntau yog nyob tom qab kev tsim thiab chav kuaj. Qhov no yog ua tiav siv ntau yam khoom siv console. Piv txwv li, PVS-Studio muab cov khoom siv hauv qab no:

Txhawm rau muab kev txheeb xyuas rau hauv CI, koj yuav tsum ua peb yam:

  • Nruab lub ntsuas ntsuas;
  • Khiav kev tsom xam;
  • Xa cov txiaj ntsig.

Piv txwv li, txhawm rau nruab PVS-Studio ntawm Linux (Debian-base), koj yuav tsum khiav cov lus txib hauv qab no:

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

Ntawm cov tshuab khiav Windows, tsis muaj txoj hauv kev los nruab qhov ntsuas ntsuas los ntawm tus tswj hwm pob, tab sis nws muaj peev xwm xa cov ntsuas ntsuas los ntawm kab hais kom ua:

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

Koj tuaj yeem nyeem ntxiv txog kev siv PVS-Studio ntawm cov tshuab khiav Windows *S, SΡ“S,*.

Tom qab kev teeb tsa, koj yuav tsum khiav qhov kev soj ntsuam ncaj qha. Txawm li cas los xij, nws raug nquahu kom ua qhov no tsuas yog tom qab muab tso ua ke thiab kev xeem dhau lawm. Qhov no yog vim qhov kev txheeb xyuas zoo li qub feem ntau siv ob zaug ntev li kev muab tso ua ke.

Txij li thaum txoj kev tso tawm nyob ntawm lub platform thiab qhov project nta, kuv yuav qhia qhov kev xaiv rau C ++ (Linux) ua piv txwv:

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

Thawj cov lus txib yuav ua qhov kev soj ntsuam, thiab qhov thib ob hnab ntawvhloov daim ntawv tshaj tawm rau hauv cov ntawv nyeem, qhia nws ntawm qhov screen thiab xa rov qab cov lej uas tsis yog 0 yog tias muaj lus ceeb toom. Lub tshuab zoo li no tuaj yeem siv tau yooj yim los thaiv kev tsim thaum muaj cov lus yuam kev. Txawm li cas los xij, koj tuaj yeem tshem tus chij txhua lub sijhawm -w thiab tsis txhob thaiv lub rooj sib txoos uas muaj cov lus ceeb toom.

Nco ntsoov. Cov ntawv nyeem tsis yooj yim. Nws yog muab tsuas yog ua piv txwv. Them mloog rau ib daim ntawv qhia nthuav dav ntxiv - FullHtml. Nws tso cai rau koj mus taug qab cov cai.

Koj tuaj yeem nyeem ntxiv txog kev teeb tsa kev tsom xam ntawm CI hauv kab lus "PVS-Studio thiab kev sib txuas txuas ntxiv"(Windows) los yog "Yuav ua li cas teeb tsa PVS-Studio hauv Travis CI"(Linux).

Okay, koj tau teeb tsa lub ntsuas ntsuas ntawm tus tsim server. Tam sim no, yog hais tias ib tug neeg uploaded untested code, lub pov thawj theem yuav ua tsis tau tejyam, thiab koj yuav nrhiav tau qhov teeb meem, txawm li cas los xij, qhov no tsis yooj yim kiag li, vim tias nws muaj txiaj ntsig zoo los xyuas qhov project tsis yog tom qab cov ceg ntoo tau sib koom ua ke, tab sis. ua ntej nws, ntawm qhov kev thov rub theem. A.

Feem ntau, teeb tsa qhov kev thov rub tawm tsis txawv ntau ntawm qhov kev tso tawm ib txwm muaj ntawm kev tshuaj xyuas ntawm CI. Tsuas yog qhov yuav tsum tau txais cov npe ntawm cov ntaub ntawv hloov pauv. Cov no feem ntau tuaj yeem tau los ntawm kev nug qhov sib txawv ntawm cov ceg siv git:

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

Tam sim no koj yuav tsum dhau daim ntawv teev npe ntawm cov ntaub ntawv no mus rau lub ntsuas ntsuas raws li kev nkag. Piv txwv li, hauv PVS-Studio qhov no yog siv los ntawm tus chij -S:

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

Koj tuaj yeem paub ntau ntxiv txog kev txheeb xyuas rub thov *S, SΡ“S,*. Txawm hais tias koj CI tsis nyob rau hauv cov npe ntawm cov kev pabcuam uas tau hais hauv tsab xov xwm, koj yuav pom cov ntu dav dav rau qhov kev xav ntawm hom kev tshuaj xyuas no muaj txiaj ntsig.

Los ntawm kev teeb tsa kev soj ntsuam ntawm rub cov lus thov, koj tuaj yeem thaiv cov lus cog tseg uas muaj cov lus ceeb toom, yog li tsim kom muaj ib thaj tsam uas tsis tau kuaj xyuas tsis tuaj yeem hla.

Qhov no yog txhua yam zoo, tab sis kuv xav kom pom tag nrho cov lus ceeb toom hauv ib qho chaw. Tsis yog tsuas yog los ntawm cov tshuaj ntsuam xyuas zoo li qub, tab sis kuj los ntawm cov kev ntsuam xyuas hauv tsev lossis los ntawm cov ntsuas dynamic. Muaj ntau yam kev pabcuam thiab plugins rau qhov no. PVS-Studio, piv txwv li, muaj plugin rau kev koom ua ke rau hauv SonarQube.

2. Kev koom ua ke ntawm cov tshuab tsim tawm

Tam sim no nws yog lub sijhawm los nruab thiab teeb tsa lub ntsuas ntsuas rau kev siv txhua hnub. Los ntawm qhov no koj twb tau paub txog feem ntau ntawm txoj kev ua haujlwm, yog li qhov no tuaj yeem hu ua qhov yooj yim tshaj plaws.

Raws li qhov kev xaiv yooj yim tshaj plaws, cov neeg tsim khoom tuaj yeem nruab qhov tsim nyog ntsuas lawv tus kheej. Txawm li cas los xij, qhov no yuav siv sij hawm ntau thiab cuam tshuam lawv los ntawm kev txhim kho, yog li koj tuaj yeem ua qhov txheej txheem no siv tus installer thiab cov chij tsim nyog. Rau PVS-Studio muaj ntau yam chij rau automated installation. Txawm li cas los xij, ib txwm muaj cov thawj tswj hwm pob, piv txwv li, Chocolatey (Windows), Homebrew (macOS) lossis ntau qhov kev xaiv rau Linux.

Tom qab ntawd koj yuav tsum tau nruab qhov tsim nyog plugins, piv txwv li Visual Studio, IDEA, Pob Tsuas Xyooj thiab lwm yam

3. Kev siv txhua hnub

Nyob rau theem no, nws yog lub sijhawm los hais ob peb lo lus hais txog txoj hauv kev txhawm rau txhawm rau txhawm rau ntsuas lub sijhawm siv txhua hnub. Kev soj ntsuam tag nrho ntawm tag nrho qhov project yuav siv sij hawm ntau, tab sis ntau npaum li cas peb hloov code thoob plaws tag nrho qhov project ib zaug? Muaj tsis tshua muaj refactoring uas loj heev uas nws yuav tam sim ntawd cuam tshuam rau tag nrho cov cai hauv paus. Tus naj npawb ntawm cov ntaub ntawv raug hloov nyob rau hauv ib lub sij hawm tsis tshua muaj ntau tshaj ib lub kaum os, yog li nws ua rau kev txiav txim siab rau lawv. Rau qhov xwm txheej zoo li no muaj Incremental tsom xam hom. Tsuas yog tsis txhob ntshai, qhov no tsis yog lwm lub cuab yeej. Qhov no yog hom tshwj xeeb uas tso cai rau koj los txheeb xyuas cov ntaub ntawv hloov pauv thiab lawv cov kev vam khom, thiab qhov no tshwm sim tom qab lub tsev yog tias koj ua haujlwm hauv IDE nrog lub plugin nruab.

Yog tias tus kws tshuaj ntsuam xyuas pom cov teeb meem hauv cov cai uas nyuam qhuav hloov tshiab, nws yuav qhia qhov no ntawm nws tus kheej. Piv txwv li, PVS-Studio yuav qhia koj txog qhov no siv kev ceeb toom:

Kev soj ntsuam zoo li qub - los ntawm kev taw qhia txog kev sib koom ua ke
Tau kawg, qhia cov neeg tsim khoom siv cov cuab yeej tsis txaus. Peb yuav tsum qhia rau lawv paub tias nws yog dab tsi thiab nws yog dab tsi. Ntawm no, piv txwv li, yog cov lus hais txog kev pib sai rau PVS-Studio, tab sis koj tuaj yeem nrhiav cov kev qhia zoo sib xws rau txhua lub cuab yeej koj nyiam:

Cov ntawv zoo li no muab tag nrho cov ntaub ntawv tsim nyog rau kev siv txhua hnub thiab tsis siv sijhawm ntau. πŸ™‚

Txawm hais tias nyob rau theem ntawm kev paub txog lub cuab yeej, peb tau txwv ntau cov lus ceeb toom thaum ib qho ntawm thawj zaug tso tawm. Hmoov tsis zoo, cov tshuaj ntsuam xyuas zoo li qub tsis zoo tag nrho, yog li qee lub sijhawm lawv muab qhov tsis zoo. Nws yog feem ntau yooj yim rau suppress lawv; piv txwv li, hauv PVS-Studio plugin rau Visual Studio koj tsuas yog xav tau nyem ib lub pob:

Kev soj ntsuam zoo li qub - los ntawm kev taw qhia txog kev sib koom ua ke
Txawm li cas los xij, koj tuaj yeem ua ntau dua li tsuas yog txwv lawv. Piv txwv li, koj tuaj yeem tshaj tawm qhov teeb meem los txhawb nqa. Yog tias qhov tsis raug zoo tuaj yeem kho tau, tom qab ntawd hauv kev hloov tshiab yav tom ntej koj tuaj yeem pom tias txhua zaus muaj tsawg dua thiab tsawg qhov tsis tseeb qhov tseeb rau koj cov codebase.

Tom qab kev koom ua ke

Yog li peb tau dhau los ntawm tag nrho cov theem ntawm kev sib koom ua ke static tsom xam rau hauv txoj kev loj hlob. Txawm hais tias qhov tseem ceeb ntawm kev teeb tsa cov cuab yeej ntawm CI, qhov chaw tseem ceeb tshaj plaws los khiav lawv yog tus tsim tawm lub computer. Tom qab tag nrho, tus kws tshuaj ntsuam xyuas zoo li qub tsis yog tus kws txiav txim plaub uas hais tias qhov chaw nyob deb ntawm koj tias txoj cai tsis zoo. Ntawm qhov tsis sib xws, nws yog tus pab qhia rau koj yog tias koj nkees thiab ceeb toom koj yog tias koj tsis nco qab qee yam.

Muaj tseeb, tsis tas siv li niaj zaus, kev tshuaj ntsuam zoo li qub tsis zoo li yuav ua rau kev txhim kho yooj yim. Tom qab tag nrho, nws cov txiaj ntsig tseem ceeb rau tus tsim tawm lus dag tsis yog ntau hauv kev tshawb nrhiav qhov nyuaj thiab tsis sib haum xeeb ntawm cov cai, tab sis hauv lawv qhov kev tshawb pom thaum ntxov. Pom zoo tias kev tshawb pom qhov teeb meem tom qab kev hloov kho tau raug xa mus rau kev sim tsis yog qhov tsis zoo xwb, tab sis kuj siv sijhawm ntau heev. Kev soj ntsuam zoo li qub, thaum siv tsis tu ncua, saib txhua qhov kev hloov pauv ncaj qha ntawm koj lub khoos phis tawj thiab tshaj tawm cov chaw tsis txaus ntseeg thaum ua haujlwm ntawm txoj cai.

Thiab yog tias koj lossis koj cov npoj yaig tseem tsis paub meej tias nws puas tsim nyog siv lub ntsuas ntsuas, ces kuv xav kom koj tam sim no pib nyeem tsab xov xwm "Yog vim li cas los qhia qhov zoo li qub code analyzer PVS-Studio rau hauv txoj kev loj hlob". Nws hais txog cov kev txhawj xeeb ntawm cov neeg tsim khoom uas kev soj ntsuam zoo li qub yuav siv sij hawm ntev thiab lwm yam.

Kev soj ntsuam zoo li qub - los ntawm kev taw qhia txog kev sib koom ua ke

Yog tias koj xav qhia cov kab lus no nrog cov neeg hais lus Askiv, thov siv qhov txuas txhais lus: Maxim Zvyagintsev. Kev txheeb xyuas zoo li qub: Los ntawm Pib mus rau kev koom ua ke.

Tau qhov twg los: www.hab.com

Ntxiv ib saib