Ua raws li kev txheeb xyuas zoo li qub rau hauv cov txheej txheem, tsis yog nrhiav cov kab nrog nws

Kuv tau txais kev tshoov siab los sau cov kab lus no los ntawm ntau cov ntaub ntawv ntawm kev tshuaj xyuas zoo li qub uas tau nce zuj zus tuaj. Ua ntej, qhov no PVS-studio blog, uas nquag txhawb nqa nws tus kheej ntawm Habre nrog kev tshuaj xyuas ntawm qhov tsis raug pom los ntawm lawv cov cuab yeej hauv cov haujlwm qhib. PVS-studio nyuam qhuav ua tiav Java txhawb, thiab, tau kawg, cov neeg tsim khoom ntawm IntelliJ IDEA, uas nws tus kws tshuaj ntsuam ua ke yog qhov zoo tshaj plaws rau Java hnub no, nyob tsis tau.

Thaum nyeem cov kev txheeb xyuas no, ib tus tau txais kev xav tias peb tab tom tham txog cov khawv koob elixir: nias lub pob, thiab ntawm no nws yog - daim ntawv teev cov tsis xws luag nyob rau hauv pem hauv ntej ntawm koj ob lub qhov muag. Nws zoo nkaus li tias raws li cov kws tshuaj ntsuam xyuas txhim kho, yuav muaj cov kab ntau thiab ntau dua, thiab cov khoom lag luam luam tawm los ntawm cov neeg hlau no yuav zoo dua thiab zoo dua, tsis muaj kev siv zog ntawm peb.

Tab sis tsis muaj cov khawv koob elixirs. Kuv xav tham txog yam uas feem ntau tsis tau tham hauv cov lus xws li "Ntawm no yog yam peb cov neeg hlau tuaj yeem nrhiav tau": cov neeg soj ntsuam tsis tuaj yeem ua li cas, lawv lub luag haujlwm thiab qhov chaw yog dab tsi hauv cov txheej txheem xa software, thiab yuav siv lawv li cas kom raug.

Ua raws li kev txheeb xyuas zoo li qub rau hauv cov txheej txheem, tsis yog nrhiav cov kab nrog nws
Ratchet (qhov chaw: wikipedia).

Dab tsi Static Analyzers Yuav Tsis Ua

Yuav ua li cas yog, los ntawm ib tug tswv yim taw tes ntawm view, qhov code tsom xam? Peb noj hauv qee qhov chaw, thiab nyob rau lub sijhawm luv luv (ntau luv dua li kev xeem khiav) peb tau txais qee cov ntaub ntawv hais txog peb lub cev. Qhov tseem ceeb thiab kev ua lej insurmountable txwv yog tias peb tuaj yeem tau txais cov ntaub ntawv nqaim xwb.

Cov piv txwv nto moo tshaj plaws ntawm qhov teeb meem uas tsis tuaj yeem daws tau los ntawm kev txheeb xyuas zoo li qub yog nres teeb meem: Qhov no yog ib qho kev qhia uas ua pov thawj tias nws tsis tuaj yeem tsim cov txheej txheem dav dav uas yuav txiav txim siab los ntawm cov cai ntawm qhov kev zov me nyuam seb nws yuav voj lossis txiav tawm hauv lub sijhawm kawg. Ib qho txuas ntxiv ntawm qhov theorem no yog Rice lub theorem, uas tau hais tias rau ib qho khoom tsis tseem ceeb ntawm kev ua haujlwm, kev txiav txim siab seb qhov kev txiav txim siab puas ntsuas kev ua haujlwm nrog cov cuab yeej no yog qhov teeb meem algorithmically unsolvable. Piv txwv li, nws tsis tuaj yeem sau tus kws tshuaj ntsuam xyuas uas tuaj yeem txiav txim siab los ntawm txhua qhov chaws seb qhov kev tshuaj ntsuam xyuas yog qhov kev siv ntawm ib qho algorithm uas xam, hais, squaring tus lej.

Yog li ntawd, cov functionality ntawm static analyzers muaj insurmountable txwv. Ib tug static analyzer yuav tsis muaj peev xwm txiav txim siab nyob rau hauv txhua rooj plaub xws li, piv txwv li, qhov tshwm sim ntawm "null pointer exception" nyob rau hauv cov lus nullable, los yog nyob rau hauv txhua rooj plaub los txiav txim qhov tshwm sim ntawm "tus cwj pwm tsis pom" nyob rau hauv cov lus nrog. dynamic typing. Txhua yam uas cov kws tshuaj ntsuam xyuas zoo tshaj plaws tuaj yeem ua tau yog qhov tshwj xeeb tshwj xeeb, tus naj npawb ntawm cov teeb meem tshwm sim nrog koj qhov chaws, yog, tsis muaj exaggeration, poob hauv dej hiav txwv.

Kev soj ntsuam zoo li qub tsis yog kev tshawb nrhiav kab

Cov lus xaus ua raws li cov lus qhia saum toj no: kev tshuaj xyuas zoo li qub tsis yog ib txoj hauv kev txo tus naj npawb ntawm qhov tsis xws luag hauv ib qho kev pab cuam. Kuv xav venture hais tias thaum xub thawj ua ntawv thov rau koj qhov project, nws yuav pom qhov chaw "musing" nyob rau hauv cov cai, tab sis, feem ntau yuav, yuav tsis pom tej yam uas cuam tshuam rau qhov zoo ntawm koj qhov kev pab cuam.

Cov piv txwv ntawm qhov tsis xws luag tuaj yeem pom los ntawm cov kws tshuaj ntsuam xyuas tau zoo, tab sis peb yuav tsum tsis txhob hnov ​​​​qab tias cov piv txwv no tau pom los ntawm kev txheeb xyuas cov txheej txheem loj ntawm cov codebases. Los ntawm tib txoj cai, crackers uas muaj peev xwm sim ob peb lo lus zais yooj yim ntawm ntau tus account thaum kawg pom cov nyiaj uas muaj tus password yooj yim.

Qhov no puas txhais tau tias yuav tsum tsis txhob siv cov tshuaj zoo li qub? Tau kawg tsis! Thiab raws nraim tib yam vim li cas nws tsim nyog kuaj xyuas txhua tus password tshiab kom nkag mus rau hauv cov npe nres ntawm "yooj yim" passwords.

Kev soj ntsuam zoo li qub yog ntau dua li nrhiav cov kab

Qhov tseeb, cov teeb meem daws tau los ntawm kev txheeb xyuas yog qhov dav dua. Tom qab tag nrho, feem ntau, kev soj ntsuam zoo li qub yog ib qho kev kuaj xyuas ntawm cov lej uas tau ua ua ntej lawv pib. Nov yog qee yam uas koj tuaj yeem ua:

  • Tshawb xyuas coding style nyob rau hauv qhov dav dav ntawm lo lus. Qhov no suav nrog ob qho tib si kev tshuaj xyuas formatting thiab nrhiav kev siv cov khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob Hauv Java cov cuab yeej no yog Checkstyle, hauv Python nws yog flake8. Cov kev kawm ntawm chav kawm no feem ntau hu ua "linters".
  • Tsis tsuas yog executable code tuaj yeem txheeb xyuas. Cov ntaub ntawv pov thawj zoo li JSON, YAML, XML, .properties tuaj yeem (thiab yuav tsum!) raug kuaj xyuas kom raug. Puas yog nws tsis zoo dua los nrhiav pom tias vim qee cov lus tsis sib xws ntawm JSON tus qauv tau tawg nyob rau theem pib ntawm kev siv tsis siv neeg rub daim ntawv thov kev lees paub dua li thaum ua qhov kev xeem lossis thaum lub sijhawm khiav? Cov cuab yeej tsim nyog muaj: piv txwv li, YAMLint, JSONLint.
  • Muab tso ua ke (los yog parsing rau dynamic programming languages) kuj yog ib hom kev soj ntsuam zoo li qub. Raws li txoj cai, compilers muaj peev xwm tshaj tawm cov lus ceeb toom uas qhia txog teeb meem nrog qhov zoo ntawm qhov chaws, thiab lawv yuav tsum tsis txhob raug ignored.
  • Qee lub sij hawm compilation tsis yog hais txog compiling executable code. Piv txwv li, yog tias koj muaj cov ntaub ntawv hauv hom ntawv AsciiDoctor, tom qab ntawd thaum lub sijhawm nws hloov pauv mus rau HTML / PDF handler AsciiDoctor (Maven plugin ua) tuaj yeem tshaj tawm cov lus ceeb toom, piv txwv li, txog kev sib txuas sab hauv. Thiab qhov no yog ib qho laj thawj zoo tsis lees txais Pull Request nrog cov ntaub ntawv hloov pauv.
  • Spell checking kuj yog ib hom kev soj ntsuam zoo li qub. Kev siv hluav taws xob aspell Nws tuaj yeem tshawb xyuas cov ntawv sau tsis yog hauv cov ntaub ntawv nkaus xwb, tab sis kuj tseem muaj cov lej hauv qhov program (cov lus pom thiab cov ntawv sau) hauv cov lus programming sib txawv, suav nrog C / C ++, Java thiab Python. Kev sau ntawv yuam kev hauv tus neeg siv interface lossis cov ntaub ntawv kuj yog qhov tsis raug!
  • Configuration tests (rau nws yog dab tsi, saib qhov no ΠΈ qhov no cov ntawv ceeb toom), txawm hais tias lawv raug tua nyob rau hauv ib chav tsev sim runtime zoo li pytest, lawv yeej tseem yog ib hom kev soj ntsuam zoo li qub, vim lawv tsis ua cov lej cim thaum lawv ua tiav.

Raws li koj tuaj yeem pom, nrhiav kab hauv cov npe no siv lub luag haujlwm tseem ceeb tshaj plaws, thiab txhua yam muaj nyob hauv kev siv cov cuab yeej qhib dawb.

Yam twg ntawm cov kev txheeb xyuas zoo li qub yuav tsum tau siv hauv koj qhov project? Tau kawg, qhov ntau, qhov zoo dua! Qhov tseem ceeb tshaj plaws yog siv nws kom raug, uas yuav tau tham ntxiv.

Kev xa cov raj xa dej raws li kev lim dej ntau theem thiab kev soj ntsuam zoo li qub raws li nws thawj cascade

Cov lus piv txwv classic rau kev sib koom ua ke tsis tu ncua yog cov raj xa dej (pipeline), los ntawm kev hloov pauv - los ntawm kev hloov cov cai rau kev xa mus rau ntau lawm. Cov txheej txheem ua ntu zus ntawm cov kav dej no zoo li no:

  1. static tsom xam
  2. kомпиляция
  3. chav kuaj
  4. kev sib xyaw ua ke
  5. UI xeem
  6. phau ntawv txheeb xyuas

Cov kev hloov pauv tsis lees paub hauv theem Nth ntawm cov kav dej tsis tau nthuav tawm mus rau theem N + 1.

Vim li cas raws nraim li no thiab tsis yog lwm yam? Hauv qhov kev sim ntawm cov raj xa dej, cov neeg sim yuav paub txog qhov kev sim cov pyramid paub zoo.

Ua raws li kev txheeb xyuas zoo li qub rau hauv cov txheej txheem, tsis yog nrhiav cov kab nrog nws
Test pyramid. Qhov chaw: ib tsab xov xwm Martin Fowler.

Hauv qab ntawm lub pyramid no yog cov kev ntsuam xyuas uas yooj yim sau, khiav nrawm dua, thiab tsis nyiam qhov tsis zoo. Yog li ntawd, yuav tsum muaj ntau ntawm lawv, lawv yuav tsum npog ntau txoj cai thiab raug tua ua ntej. Nyob rau sab saum toj ntawm lub pyramid, qhov rov qab yog qhov tseeb, yog li tus naj npawb ntawm kev sib koom ua ke thiab UI xeem yuav tsum raug txo kom tsawg kawg nkaus. Tus neeg nyob hauv cov saw hlau no yog cov khoom kim tshaj plaws, qeeb tshaj plaws thiab tsis muaj kev ntseeg siab, yog li nws yog qhov kawg thiab tsuas yog ua haujlwm yog tias cov theem dhau los tsis pom muaj qhov tsis xws luag. Txawm li cas los xij, raws li tib lub hauv paus ntsiab lus, cov raj xa dej tau tsim nyob rau hauv qhov chaw uas tsis ncaj qha ntsig txog kev sim!

Kuv xav muab ib qho piv txwv nyob rau hauv daim ntawv ntawm ib tug multi-stage water filtration system. Cov dej qias neeg yog muab rau cov khoom nkag (hloov nrog qhov tsis xws luag), ntawm qhov tso zis peb yuav tsum tau txais cov dej huv, uas txhua yam tsis xav tau raug tshem tawm.

Ua raws li kev txheeb xyuas zoo li qub rau hauv cov txheej txheem, tsis yog nrhiav cov kab nrog nws
Multistage lim. Qhov chaw: Wikimedia Commons

Raws li koj paub, ntxuav cov lim dej yog tsim los ntawm txoj hauv kev uas txhua qhov tom ntej no tuaj yeem lim tawm ib feem me me ntawm cov kab mob. Nyob rau tib lub sijhawm, coarser purification cascades muaj kev nkag siab dua thiab tus nqi qis dua. Hauv peb qhov piv txwv, qhov no txhais tau hais tias cov khoom nkag tau zoo ntawm lub qhov rooj nrawm dua, yuav tsum muaj kev siv zog tsawg dua los pib, thiab lawv tus kheej ntau dua unpretentious hauv kev ua haujlwm - thiab qhov no yog raws nraim qhov lawv tau ua. Lub luag hauj lwm ntawm kev soj ntsuam zoo li qub, uas, raws li peb tam sim no nkag siab, muaj peev xwm ntawm cov nroj tsuag tawm tsuas yog qhov tsis zoo tshaj plaws, yog lub luag haujlwm ntawm grating-" av nkos" thaum pib ntawm lub lim dej cascade.

Kev tsom xam los ntawm nws tus kheej tsis txhim kho qhov zoo ntawm cov khoom kawg, ib yam li "cov av nkos" tsis ua kom dej haus. Thiab tseem, nyob rau hauv kev sib piv nrog rau lwm cov ntsiab lus ntawm lub conveyor, nws qhov tseem ceeb yog pom tseeb. Txawm hais tias nyob rau hauv ntau theem lim, cov theem tso zis muaj peev xwm ntawm kev ntes txhua yam tib yam li cov theem nkag, nws yog qhov tseeb tias qhov kev sim ua kom tau los ntawm tsuas yog cov theem purification zoo, tsis muaj cov theem nkag, yuav ua rau.

Lub hom phiaj ntawm "cov av nkos" yog txhawm rau tshem tawm cov cascades tom ntej los ntawm kev ntes qhov tsis xws luag. Piv txwv li, yam tsawg kawg nkaus, tus kws tshuaj xyuas cov cai yuav tsum tsis txhob cuam tshuam los ntawm cov txheej txheem tsis raug thiab ua txhaum cai ntawm cov qauv tsim coding (xws li cov kab lus ntxiv lossis cov ceg ntoo sib sib zog nqus heev). Kab laum zoo li NPE yuav tsum raug ntes los ntawm kev sim hauv chav tsev, tab sis yog tias txawm tias ua ntej qhov kev ntsuam xyuas tus ntsuas ntsuas qhia rau peb tias cov kab laum yuav tsum tsis txhob tshwm sim, qhov no yuav ua rau nws kho sai.

Kuv xav tias tam sim no paub meej tias vim li cas qhov kev soj ntsuam zoo li qub tsis txhim kho qhov zoo ntawm cov khoom yog tias nws siv qee zaus, thiab yuav tsum tau siv tas li los lim tawm cov kev hloov pauv nrog qhov tsis zoo tag nrho. Nug yog tias siv lub ntsuas ntsuas zoo li qub yuav txhim kho qhov zoo ntawm koj cov khoom yog qhov sib npaug ntawm kev nug "Yuav ua li cas haus dej zoo los ntawm lub pas dej qias neeg puas zoo dua yog tias nws dhau los ntawm lub colander?"

Kev ua tiav hauv qhov project qub txeeg qub teg

Ib lo lus nug tseem ceeb: yuav ua li cas qhia qhov kev txheeb xyuas zoo li qub rau hauv cov txheej txheem ntawm kev sib koom ua ke tas li raws li "qhov rooj zoo"? Nyob rau hauv cov ntaub ntawv ntawm kev ntsuam xyuas tsis siv neeg, txhua yam yog pom tseeb: muaj ib tug txheej ntawm kev xeem, tsis ua hauj lwm ntawm ib tug ntawm lawv yog ib tug txaus vim li cas rau ntseeg hais tias lub rooj sib txoos tsis dhau lub rooj vag zoo. Ib qho kev sim rau nruab ib lub rooj vag nyob rau hauv tib txoj kev raws li cov txiaj ntsig ntawm kev soj ntsuam zoo li qub tsis ua haujlwm: muaj ntau ntau cov lus ceeb toom hauv cov cai qub, koj tsis xav kom tsis quav ntsej tag nrho, tab sis nws tseem tsis tuaj yeem txwv tsis pub xa cov khoom xa tuaj. khoom tsuas yog vim nws muaj cov lus ceeb toom ntsuas.

Thaum siv thawj zaug, tus ntsuas ntsuas tau tsim ntau cov lus ceeb toom ntawm txhua qhov haujlwm, feem ntau ntawm cov khoom tsis cuam tshuam txog kev ua haujlwm raug ntawm cov khoom. Nws tsis tuaj yeem kho tag nrho cov lus no ib zaug, thiab ntau ntawm lawv tsis tsim nyog. Tom qab tag nrho, peb paub tias peb cov khoom ua haujlwm tag nrho, txawm tias ua ntej kev taw qhia txog kev txheeb xyuas zoo li qub!

Raws li qhov tshwm sim, ntau tus neeg txwv lawv tus kheej rau kev siv cov kev tshawb fawb zoo li qub, lossis siv nws tsuas yog hauv kev qhia hom, thaum daim ntawv tshaj tawm kev soj ntsuam tsuas yog muab tawm thaum lub sijhawm tsim. Qhov no sib npaug rau qhov tsis muaj kev tshuaj xyuas, vim tias yog tias peb twb tau ceeb toom ntau, ces qhov tshwm sim ntawm lwm qhov (tsis muaj teeb meem loj npaum li cas) thaum hloov cov cai mus tsis pom.

Cov hauv qab no ntawm kev qhia cov rooj vag zoo yog paub:

  • Teem ib qho kev txwv rau tag nrho cov lus ceeb toom, lossis tus naj npawb ntawm cov lus ceeb toom muab faib los ntawm cov kab ntawm cov lej. Qhov no tsis ua hauj lwm zoo, vim hais tias xws li lub rooj vag ywj pheej hla kev hloov pauv nrog cov tsis xws luag tshiab kom txog rau thaum lawv cov kev txwv dhau lawm.
  • Kho, ntawm qee qhov taw tes, tag nrho cov lus ceeb toom qub hauv cov cai raws li tsis quav ntsej, thiab ua tsis tiav qhov tsim thaum muaj kev ceeb toom tshiab. Qhov kev ua haujlwm no yog muab los ntawm PVS-studio thiab qee qhov kev pabcuam online, xws li Codacy. Kuv tsis muaj sijhawm los ua haujlwm hauv PVS-studio, raws li kuv qhov kev paub dhau los nrog Codacy, lawv qhov teeb meem tseem ceeb yog qhov txhais ntawm qhov "laus" thiab qhov yuam kev "tshiab" yog qhov nyuaj algorithm uas tsis yog. ib txwm ua haujlwm kom raug, tshwj xeeb tshaj yog tias cov ntaub ntawv raug hloov kho lossis hloov npe. Hauv kuv lub cim xeeb, Codacy tuaj yeem hla cov lus ceeb toom tshiab hauv kev thov rub, thiab tib lub sijhawm tsis txhob hla qhov kev thov rub vim cov lus ceeb toom uas tsis cuam tshuam txog kev hloov pauv ntawm cov cai ntawm PR no.
  • Hauv kuv lub tswv yim, qhov kev daws teeb meem zoo tshaj plaws tau piav qhia hauv phau ntawv Kev Xa Xa Mus Ntxiv "ratcheting" method. Lub tswv yim tseem ceeb yog tias ib qho cuab yeej ntawm txhua qhov kev tso tawm yog tus naj npawb ntawm cov lus ceeb toom zoo li qub, thiab tsuas yog kev hloov pauv uas tsis ua rau tag nrho cov lus ceeb toom tau tso cai.

Ratchet

Nws ua haujlwm zoo li no:

  1. Nyob rau theem pib, cov ntaub ntawv nyob rau hauv kev tso tawm metadata ntawm tus naj npawb ntawm cov lus ceeb toom nyob rau hauv code pom los ntawm cov analyzers yog siv. Yog li, thaum koj tsim cov dej ntws, koj tus neeg saib xyuas chaw khaws cia tsis yog "tso tawm 7.0.2", tab sis "tso tawm 7.0.2 muaj 100500 Checkstyle ceeb toom". Yog tias koj siv tus thawj tswj hwm qhov chaw khaws cia siab heev (xws li Artifactory), nws yooj yim khaws cov metadata txog koj qhov kev tso tawm.
  2. Tam sim no txhua qhov kev thov rub tawm ntawm kev tsim sib piv cov xov tooj ceeb toom nws tau txais nrog tus lej hauv kev tso tawm tam sim no. Yog tias PR ua rau muaj qhov nce ntawm tus lej no, ces tus lej tsis dhau lub rooj vag zoo hauv kev tshuaj xyuas zoo li qub. Yog tias tus lej ceeb toom txo qis lossis tsis hloov, ces nws dhau mus.
  3. Ntawm qhov kev tso tawm tom ntej no, cov lus ceeb toom rov qab yuav raug sau rov qab mus rau qhov tso tawm metadata.

Yog li me ntsis los ntawm me ntsis, tab sis tsis tu ncua (raws li nrog ratchet), tus naj npawb ntawm cov lus ceeb toom yuav zoo li xoom. Tau kawg, lub kaw lus tuaj yeem dag los ntawm kev qhia cov lus ceeb toom tshiab, tab sis kho lwm tus. Qhov no yog ib txwm, vim hais tias nyob rau hauv lub sij hawm ntev nws muab qhov tshwm sim: cov lus ceeb toom yog tsau, raws li txoj cai, tsis yog ib tug los ntawm ib tug, tab sis tam sim ntawd los ntawm ib pab pawg neeg ntawm tej yam, thiab tag nrho cov yooj yim tshem tawm cov lus ceeb toom yog tshem tawm sai sai.

Daim duab no qhia tag nrho cov lus ceeb toom Checkstyle rau rau lub hlis ntawm kev ua haujlwm ntawm xws li "ratchet" rau ib qho ntawm peb cov haujlwm qhib. Tus naj npawb ntawm cov lus ceeb toom tau txo qis los ntawm qhov kev txiav txim ntawm qhov loj, thiab qhov no tshwm sim ib txwm muaj, nyob rau tib lub sijhawm nrog kev txhim kho ntawm cov khoom!

Ua raws li kev txheeb xyuas zoo li qub rau hauv cov txheej txheem, tsis yog nrhiav cov kab nrog nws

Kuv siv cov kev hloov kho ntawm txoj kev no, cais suav cov lus ceeb toom los ntawm qhov project module thiab cov cuab yeej tsom xam, ua rau YAML cov ntaub ntawv nrog cov metadata sib dhos uas zoo li no:

celesta-sql:
  checkstyle: 434
  spotbugs: 45
celesta-core:
  checkstyle: 206
  spotbugs: 13
celesta-maven-plugin:
  checkstyle: 19
  spotbugs: 0
celesta-unit:
  checkstyle: 0
  spotbugs: 0

Nyob rau hauv ib qho kev tshaj lij CI, lub ratchet tuaj yeem siv rau txhua yam kev tshuaj ntsuam zoo li qub yam tsis muaj kev vam khom rau plugins thiab cov cuab yeej thib peb. Txhua tus kws tshuaj ntsuam xyuas tsim nws daim ntawv tshaj tawm hauv cov ntawv yooj yim lossis XML hom uas yooj yim rau kev txheeb xyuas. Nws tseem yuav tsum tau sau npe tsuas yog qhov tsim nyog logic hauv CI tsab ntawv. Koj tuaj yeem pom tias qhov no tau siv li cas hauv peb cov haujlwm qhib raws li Jenkins thiab Artifactory, koj tuaj yeem ua tau no los yog no. Ob qho piv txwv yog lub tsev qiv ntawv nyob ntawm ratchetlib: txoj kev countWarnings() suav xml cim npe hauv cov ntaub ntawv tsim los ntawm Checkstyle thiab Spotbugs hauv txoj kev ib txwm muaj, thiab compareWarningMaps() siv tib lub ratchet, pov ib qho yuam kev thaum tus naj npawb ntawm cov lus ceeb toom hauv ib qho ntawm pawg nce.

Kev nthuav dav ratchet yog ua tau rau kev soj ntsuam kev sau cov lus, cov ntawv sau, thiab cov ntaub ntawv siv aspell. Raws li koj paub, thaum kuaj kev sau ntawv, tsis yog txhua lo lus uas tsis paub rau tus qauv phau ntawv txhais lus tsis raug, lawv tuaj yeem muab ntxiv rau cov neeg siv phau ntawv txhais lus. Yog tias koj ua tus neeg siv phau ntawv txhais lus ib feem ntawm qhov project qhov chaws, ces lub rooj vag zoo spelling tuaj yeem tsim raws li hauv qab no: aspell execution nrog tus qauv thiab cov neeg siv phau ntawv txhais lus yuav tsum tsis txhob nrhiav tsis muaj spelling yuam kev.

Hais txog qhov tseem ceeb ntawm kev kho qhov ntsuas ntsuas version

Hauv kev xaus, cov hauv qab no yuav tsum tau muab sau tseg: txawm li cas los xij koj siv qhov kev tshuaj ntsuam rau hauv koj lub raj xa dej, lub tshuab ntsuas ntsuas yuav tsum tau kho. Yog tias koj tso cai rau tus kws tshuaj ntsuam xyuas hloov kho nws tus kheej, tom qab ntawd thaum tsim qhov kev thov rub tom ntej, cov teeb meem tshiab yuav "tawm", uas tsis cuam tshuam nrog cov lej hloov pauv, tab sis cuam tshuam nrog qhov tseeb tias tus ntsuas tshiab tsuas yog tuaj yeem pom ntau qhov tsis xws luag - thiab qhov no yuav rhuav tshem koj cov txheej txheem ntawm kev txais kev thov rub. Txhim kho tus ntsuas ntsuas yuav tsum yog qhov ua kom paub meej. Txawm li cas los xij, nyuaj kho cov qauv ntawm txhua qhov sib dhos yog qhov yuav tsum tau muaj nyob rau hauv dav dav thiab lub ntsiab lus rau kev sib tham sib cais.

tshawb pom

  • Kev soj ntsuam zoo li qub yuav tsis pom kab rau koj thiab yuav tsis txhim kho qhov zoo ntawm koj cov khoom raws li qhov tshwm sim ntawm ib daim ntawv thov. Tsuas yog qhov zoo ntawm qhov zoo yog nws qhov kev siv tas mus li thaum lub sijhawm xa khoom.
  • Nrhiav cov kab tsis yog lub luag haujlwm tseem ceeb ntawm kev tshuaj xyuas txhua, feem ntau ntawm cov haujlwm tseem ceeb muaj nyob hauv cov cuab yeej opensource.
  • Siv cov rooj vag zoo raws li cov txiaj ntsig ntawm kev txheeb xyuas zoo li qub ntawm thawj theem ntawm cov kav xa dej, siv lub ratchet rau txoj cai qub.

ua tim khawv

  1. Kev Xa Xa Mus Ntxiv
  2. A. Kudryavtsev: Kev tsom xam qhov program: yuav ua li cas kom nkag siab tias koj yog ib tus programmer zoo qhia txog cov txheej txheem sib txawv ntawm kev txheeb xyuas cov lej (tsis yog zoo li qub!)

Tau qhov twg los: www.hab.com

Ntxiv ib saib