ProHoster > ΠΠ»ΠΎΠ³ > Kev tswj hwm > Yuav ua li cas siv tus lej ntsuas tus lej zoo li qub hauv txoj haujlwm qub txeeg qub teg yam tsis muaj kev txhawb nqa pab pawg
Yuav ua li cas siv tus lej ntsuas tus lej zoo li qub hauv txoj haujlwm qub txeeg qub teg yam tsis muaj kev txhawb nqa pab pawg
Nws yog ib qho yooj yim mus sim ib tug zoo li qub code analyzer. Tab sis los siv nws, tshwj xeeb tshaj yog nyob rau hauv txoj kev loj hlob ntawm ib qhov project qub, yuav tsum muaj kev txawj ntse. Yog tias ua tsis raug, tus kws tshuaj ntsuam xyuas tuaj yeem ntxiv kev ua haujlwm, qeeb kev txhim kho, thiab ua rau pab pawg. Cia peb tham luv luv txog yuav ua li cas kom zoo rau kev sib koom ua ke ntawm kev txheeb xyuas zoo li qub rau hauv txoj kev txhim kho thiab pib siv nws ua ib feem ntawm CI / CD.
Taw qhia
Tsis ntev los no kuv tau mloog mus rau kev tshaj tawm "Pib Nrog Kev Ntsuam Xyuas Static Tsis Txaus Siab Pab Pawg". Ntawm ib sab, qhov no yog ib tsab xov xwm zoo uas tsim nyog tau txais kev paub nrog. Ntawm qhov tod tes, nws zoo nkaus li kuv tias nws tseem tsis tau muab cov lus teb ua tiav ntawm yuav ua li cas tsis siv tshuaj zoo li qub hauv ib qhov project nrog ntau. Tsab xov xwm hais tias Koj tuaj yeem lees txais cov nuj nqis thev naus laus zis thiab ua haujlwm tsuas yog ntawm cov cai tshiab, tab sis tsis muaj lus teb rau yuav ua li cas nrog cov nuj nqis no tom qab.
Peb pab pawg PVS-Studio muab nws qhov kev pom ntawm lub ncauj lus no. Cia peb saib yuav ua li cas qhov teeb meem ntawm kev siv tus lej ntsuas qhov zoo li qub tshwm sim hauv thawj qhov chaw, yuav ua li cas kov yeej qhov teeb meem no, thiab yuav ua li cas kom tsis txhob mob maj mam tshem tawm cov nuj nqis.
Teeb meem
Nws yog feem ntau tsis yooj yim rau kev tso tawm thiab saib seb lub ntsuas hluav taws xob zoo li cas [1]. Koj tuaj yeem pom qhov tsis txaus ntseeg lossis txawm tias txaus ntshai muaj peev xwm ua rau muaj qhov tsis zoo hauv cov cai. Koj tuaj yeem kho qee yam, tab sis tom qab ntawd ntau tus programmers tso tseg.
Tag nrho cov static analyzers tsim qhov tsis zoo. Qhov no yog qhov tshwj xeeb ntawm cov txheej txheem kev tshuaj xyuas zoo li qub, thiab tsis muaj dab tsi tuaj yeem ua tau txog nws. Hauv qhov xwm txheej dav dav, qhov no yog qhov teeb meem tsis tuaj yeem daws tau, raws li kev lees paub los ntawm Rice's theorem [2]. Kev kawm tshuab algorithms yuav tsis pab yog [3]. Txawm hais tias ib tug neeg tsis tuaj yeem qhia tau tias qhov no lossis qhov chaws ntawd tsis raug, ces koj yuav tsum tsis txhob cia siab tias qhov no los ntawm qhov program :).
False positives tsis yog ib qho teeb meem yog hais tias tus static analyzer twb configured:
Yog tias peb tab tom tham txog C lossis C ++, ces macros tau cim tias muaj cov kev tsim tshwj xeeb uas ua rau muaj kev ceeb toom tsis zoo tshwm sim hauv txhua qhov chaw uas siv macros;
Tus kheej lub luag haujlwm raug cim tias ua haujlwm zoo ib yam li cov haujlwm ua haujlwm (nws tus kheej analogue memcpy los yog printf) [4];
Nyob rau hauv cov ntaub ntawv no, peb tuaj yeem cia siab tias qhov tsis zoo tsis zoo ntawm kwv yees li 10-15% [5]. Hauv lwm lo lus, 9 tawm ntawm 10 cov lus ceeb toom ntsuas yuav qhia txog qhov teeb meem tiag tiag hauv cov cai, lossis tsawg kawg "cov lej muaj zog." Pom zoo, qhov xwm txheej no zoo siab heev, thiab tus kws tshuaj ntsuam xyuas yog tus phooj ywg tiag tiag ntawm tus programmer.
Nyob rau hauv kev muaj tiag, nyob rau hauv ib qhov project loj, thawj daim duab yuav txawv kiag li. Cov kws tshuaj ntsuam xyuas tshaj tawm ntau pua lossis ntau txhiab tus lus ceeb toom rau cov cai qub. Nws yog tsis yooj yim sua kom nkag siab sai sai uas cov lus ceeb toom no cuam tshuam thiab qhov twg tsis yog. Nws yog qhov tsis tsim nyog los zaum thiab pib cuam tshuam nrog tag nrho cov lus ceeb toom no, txij li cov haujlwm tseem ceeb hauv qhov no yuav nres rau hnub lossis ntau lub lis piam. Feem ntau, ib pab neeg tsis tuaj yeem them taus qhov xwm txheej zoo li no. Kuj tseem yuav muaj ntau qhov sib txawv uas cuam tshuam txog keeb kwm kev hloov pauv. Thiab kev kho kom ceev ceev ntawm ntau qhov tawg hauv cov cai yuav ua rau muaj kev hloov pauv tshiab thiab tsis raug.
Thiab qhov tseem ceeb tshaj, xws li kev sib ntaus sib tua tiv thaiv kev ceeb toom ua rau muaj kev nkag siab me ntsis. Pom zoo tias txij li qhov project tau ua tiav tau ntau xyoo, feem ntau ntawm cov teeb meem tseem ceeb hauv nws twb raug kho lawm. Yog lawm, cov kev kho no kim heev, yuav tsum tau debugged, tau txais cov lus tsis zoo rau cov neeg siv cov lus qhia txog kab, thiab lwm yam. Tus kws tshuaj ntsuam xyuas zoo li qub yuav pab kho ntau qhov tsis raug ntawm theem coding, sai thiab pheej yig. Tab sis tam sim no, ib txoj hauv kev los yog lwm qhov, cov kev ua yuam kev no tau raug kho, thiab cov neeg soj ntsuam feem ntau pom qhov tsis tseem ceeb hauv cov cai qub. Cov cai no yuav tsis raug siv, nws yuav raug siv tsawg heev, thiab qhov yuam kev hauv nws yuav tsis ua rau pom qhov tshwm sim. Tej zaum qhov chaw ntxoov ntxoo ntawm lub pob yog xim tsis ncaj ncees lawm, tab sis qhov no tsis cuam tshuam rau leej twg siv cov khoom.
Tau kawg, txawm me me yuam kev tseem ua yuam kev. Thiab qee zaum qhov yuam kev tuaj yeem zais qhov muaj qhov tsis zoo tiag tiag. Txawm li cas los xij, muab txhua yam thiab siv hnub / lub lis piam los daws cov teeb meem uas tsis tshua pom lawv tus kheej zoo li lub tswv yim tsis zoo.
Cov programmers saib, saib, saib tag nrho cov lus ceeb toom no txog cov haujlwm qub ... Thiab lawv xav tias: peb tuaj yeem ua yam tsis muaj kev tshuaj xyuas zoo li qub. Wb mus sau ib co tshiab muaj txiaj ntsig functionality.
Ntawm lawv tus kheej, lawv yog txoj cai. Lawv xav tias thawj zaug lawv yuav tsum tau tshem tawm tag nrho cov lus ceeb toom no. Tsuas yog tom qab ntawd lawv yuav muaj peev xwm tau txais txiaj ntsig los ntawm kev siv tus lej ntsuas ntsuas. Txwv tsis pub, cov lus ceeb toom tshiab tsuas yog poob rau hauv cov laus, thiab tsis muaj leej twg yuav mloog lawv.
Tab sis cia peb rov qab mus rau qhov teeb meem ntawm ntau qhov tsis tseeb zoo ntawm thawj theem ntawm kev siv cov cuab yeej tshuaj ntsuam xyuas.
Txhim kho cov nuj nqis uas twb muaj lawm thiab ua raws li cov lus ceeb toom tshiab
Niaj hnub nimno kev lag luam zoo li qub analyzers tso cai rau koj los kawm tsuas yog cov lus ceeb toom tshiab uas tshwm sim hauv cov cai tshiab lossis hloov pauv. Kev siv cov txheej txheem no txawv, tab sis lub ntsiab lus yog tib yam. Hauv PVS-Studio static analyzer, qhov kev ua haujlwm no tau ua raws li hauv qab no.
Txhawm rau sai sai pib siv qhov kev tshuaj ntsuam zoo li qub, peb xav kom cov neeg siv PVS-Studio siv cov txheej txheem rau kev tawm tsam loj ntawm cov lus ceeb toom [6]. Lub tswv yim dav dav yog cov hauv qab no. Tus neeg siv tau pib lub ntsuas ntsuas thiab tau txais ntau yam lus ceeb toom. Txij li thaum ib qhov project uas tau nyob rau hauv txoj kev loj hlob tau ntau xyoo tseem ciaj sia, txhim kho thiab ua tau nyiaj, ces feem ntau yuav tsis muaj ntau cov lus ceeb toom nyob rau hauv tsab ntawv ceeb toom qhia txog qhov tsis xws luag. Hauv lwm lo lus, cov kab mob tseem ceeb twb tau kho ib txoj hauv kev los yog lwm txoj hauv kev siv cov txheej txheem kim dua lossis ua tsaug rau kev tawm tswv yim los ntawm cov neeg siv khoom. Raws li, txhua yam uas tus neeg soj ntsuam pom tam sim no tuaj yeem suav tias yog cov nuj nqis kev lag luam, uas yog qhov tsis zoo los sim tshem tawm tam sim ntawd.
Koj tuaj yeem qhia PVS-Studio kom xav txog cov lus ceeb toom no tsis cuam tshuam rau tam sim no (txuag cov nuj nqis rau tom qab), thiab nws yuav tsis qhia lawv ntxiv lawm. Tus kws tshuaj ntsuam xyuas tsim cov ntaub ntawv tshwj xeeb uas nws khaws cov ntaub ntawv hais txog qhov tsis raug uas tseem tsis tau nthuav tawm. Thiab tam sim no PVS-Studio yuav tshaj tawm cov lus ceeb toom tsuas yog rau tus lej tshiab lossis hloov pauv. Ntxiv mus, tag nrho cov no yog siv cleverly. Yog hais tias, piv txwv li, ib kab khoob tau ntxiv rau qhov pib ntawm cov ntaub ntawv code, ces tus neeg soj ntsuam nkag siab tias, qhov tseeb, tsis muaj dab tsi hloov, thiab yuav nyob twj ywm. Cov ntaub ntawv markup no tuaj yeem muab tso rau hauv qhov kev tswj hwm version. Cov ntaub ntawv loj, tab sis qhov no tsis yog qhov teeb meem, vim tsis muaj qhov taw tes rau kev khaws cia ntau zaus.
Tam sim no txhua tus programmers yuav pom cov lus ceeb toom tsuas yog cuam tshuam rau cov lej tshiab lossis hloov pauv. Yog li, koj tuaj yeem pib siv lub ntsuas ntsuas, raws li lawv hais, txij hnub tom qab. Thiab koj tuaj yeem rov qab mus rau cov nuj nqis technical tom qab, thiab maj mam kho qhov yuam kev thiab teeb tsa lub ntsuas ntsuas.
Yog li ntawd, thawj qhov teeb meem nrog kev siv lub ntsuas ntsuas hauv qhov project qub loj tau raug daws. Tam sim no cia peb xam seb yuav ua li cas nrog cov nuj nqis technical.
Kab laum kho thiab refactorings
Qhov yooj yim tshaj plaws thiab ntuj tshaj plaws yog muab tso tseg qee lub sij hawm los tshuaj xyuas cov lus ceeb toom ntawm cov kws tshuaj ntsuam xyuas thiab maj mam ua nrog lawv. Qee qhov koj yuav tsum kho qhov yuam kev hauv qhov chaws, qhov chaw koj yuav tsum tau rov hais dua los qhia rau tus kws tshuaj ntsuam xyuas tias cov cai tsis muaj teeb meem. Piv txwv yooj yim:
if (a = b)
Feem ntau C ++ compilers thiab cov neeg soj ntsuam yws yws txog cov cai no, vim tias muaj qhov tshwm sim ntau uas lawv xav sau tiag tiag. (a = = b). Tab sis muaj kev pom zoo tsis hais, thiab qhov no feem ntau tau sau tseg hauv cov ntaub ntawv, yog tias muaj cov kab lus ntxiv, ces nws tau txiav txim siab tias tus programmer txhob txwm tshaj tawm cov cai no, thiab tsis tas yuav cog lus. Piv txwv li, hauv PVS-Studio cov ntaub ntawv rau kev kuaj mob V559 (CWE-481) nws tau sau meej meej tias kab hauv qab no yuav raug suav hais tias yog thiab nyab xeeb:
if ((a = b))
Lwm qhov piv txwv. Puas yog nws tsis nco qab hauv C++ code no? so los tsis?
case A:
foo();
case B:
bar();
break;
PVS-Studio analyzer yuav ceeb toom ntawm no V796 (CWE-484). Qhov no yuav tsis yog qhov yuam kev, nyob rau hauv rooj plaub twg koj yuav tsum muab tus parser ib tug hint los ntawm kev ntxiv tus cwj pwm [[taug kev]] los yog piv txwv __attribute__((fallthrough)):
case A:
foo();
[[fallthrough]];
case B:
bar();
break;
Nws tuaj yeem hais tias qhov kev hloov pauv li no tsis kho cov kab laum. Yog, qhov no yog qhov tseeb, tab sis nws ua ob yam tseem ceeb. Ua ntej, cov ntaub ntawv txheeb xyuas tau tshem tawm qhov tsis zoo. Qhov thib ob, txoj cai tau nkag siab ntau dua rau cov neeg koom nrog hauv nws txoj kev saib xyuas. Thiab qhov no tseem ceeb heev! Rau qhov no ib leeg, nws tsim nyog nqa tawm me me refactorings los ua kom cov cai meej dua thiab yooj yim dua los tswj. Txij li thaum tus kws tshuaj ntsuam tsis nkag siab tias "sab" puas xav tau lossis tsis, nws tseem yuav tsis meej rau cov neeg ua haujlwm programmer.
Muaj lwm txoj hauv kev nthuav dav kom maj mam txhim kho cov lej zoo los ntawm kev tshem tawm cov lus ceeb toom zoo li qub. Cov kab hauv qab yog tias cov lus ceeb toom tsuas tuaj yeem txo qis.
Tus naj npawb ntawm cov lus ceeb toom tawm los ntawm tus ntsuas static yog kaw. Lub rooj vag zoo tau teeb tsa hauv txoj hauv kev uas tam sim no koj tsuas tuaj yeem nkag mus rau tus lej uas tsis ua rau muaj kev ua haujlwm ntau ntxiv. Yog li ntawd, cov txheej txheem ntawm maj mam txo cov xov tooj ntawm lub tswb pib los ntawm kev kho cov ntsuas ntsuas thiab kho qhov yuam kev.
Txawm hais tias ib tug neeg xav dag me ntsis thiab txiav txim siab kom dhau lub rooj vag zoo tsis yog los ntawm kev tshem tawm cov lus ceeb toom hauv nws txoj cai tshiab, tab sis los ntawm kev txhim kho cov txheej txheem qub qub, qhov no tsis txaus ntshai. Tag nrho tib yam, lub ratchet tig nyob rau hauv ib qho kev taw qhia, thiab maj mam tus naj npawb ntawm cov tsis xws luag yuav txo. Txawm hais tias ib tug neeg tsis xav kho nws tus kheej qhov tsis xws luag, nws tseem yuav tau txhim kho qee yam hauv cov cai nyob sib ze. Qee lub sij hawm, txoj hauv kev yooj yim los txo tus naj npawb ntawm cov lus ceeb toom xaus, thiab muaj qhov taw tes thaum cov kab tiag tiag yuav raug kho.