ApspriedÄ«sim, kÄpÄc CI rÄ«ki un CI ir pilnÄ«gi atŔķirÄ«gas lietas.
KÄdas sÄpes ir paredzÄts atrisinÄt CI, no kurienes radÄs ideja, kÄdi ir pÄdÄjie apstiprinÄjumi, ka tas darbojas, kÄ saprast, ka jums ir prakse, nevis vienkÄrÅ”i instalÄja Dženkinsu.
Ideja veidot reportÄžu par NepÄrtraukto integrÄciju radÄs pirms gada, kad gÄju uz intervijÄm un meklÄju darbu. Es runÄju ar 10-15 uzÅÄmumiem, tikai viens no viÅiem spÄja skaidri atbildÄt, kas ir CI, un paskaidrot, kÄ viÅi saprata, ka viÅiem tÄ nav. PÄrÄjie runÄja nesaprotamas muļķības par Dženkinsu :) Nu mums ir Dženkinss, tas taÄu bÅ«vÄ, CI! ZiÅojuma laikÄ es mÄÄ£inÄÅ”u izskaidrot, kas patiesÄ«bÄ ir nepÄrtrauktÄ integrÄcija un kÄpÄc Jenkins un lÄ«dzÄ«giem rÄ«kiem ir ļoti vÄja saistÄ«ba ar to.
TÄtad, kas parasti nÄk prÄtÄ, dzirdot vÄrdu CI? LielÄkÄ daļa cilvÄku domÄs par Dženkinsu, Gitlab CI, Trevisu utt.
Pat ja mÄs to meklÄsim Google, tas mums dos Å”os rÄ«kus.
Ja esat iepazinies ar jautÄÅ”anu, tad uzreiz pÄc rÄ«ku uzskaitÄ«Å”anas viÅi jums pateiks, ka CI ir tad, kad veidojat un palaižat pÄrbaudes saistÄ«bÄ ar piesaistes pieprasÄ«jumu.
NepÄrtrauktÄ integrÄcija nav saistÄ«ta ar instrumentiem, nevis par komplektiem ar testiem filiÄlÄ! NepÄrtrauktÄ integrÄcija ir ļoti bieža jauna koda integrÄcijas prakse, un tÄ izmantoÅ”anai nemaz nav nepiecieÅ”ams norobežot Jenkins, GitLab utt.
Pirms izdomÄjam, kÄ izskatÄs pilnvÄrtÄ«ga KI, vispirms iedziļinÄsimies to cilvÄku kontekstÄ, kuri to izdomÄja, un sajutÄ«sim sÄpes, kuras viÅi mÄÄ£inÄja atrisinÄt.
Un viÅi atrisinÄja sÄpes, strÄdÄjot kopÄ kÄ komandai!
ApskatÄ«sim piemÄrus, ar kÄdÄm grÅ«tÄ«bÄm saskaras izstrÄdÄtÄji, attÄ«stoties komandÄs. Å eit mums ir projekts, git galvenÄ filiÄle un divi izstrÄdÄtÄji.
Un viÅi devÄs uz darbu, kÄ visi jau sen bija pieraduÅ”i. MÄs paÅÄmÄm uzdevumu lielajÄ lietu shÄmÄ, izveidojÄm funkciju zaru un uzrakstÄ«jÄm kodu.
Viens pabeidza funkciju ÄtrÄk un apvienoja to galvenajÄ.
Otrajam vajadzÄja vairÄk laika, tas vÄlÄk saplÅ«da un beidzÄs ar konfliktu. Tagad tÄ vietÄ, lai rakstÄ«tu uzÅÄmumam nepiecieÅ”amÄs funkcijas, izstrÄdÄtÄjs tÄrÄ savu laiku un enerÄ£iju konfliktu risinÄÅ”anai.
Jo grÅ«tÄk ir apvienot savu funkciju ar kopÄ«gu meistaru, jo vairÄk laika mÄs tam veltÄm. Un es to parÄdÄ«ju ar diezgan vienkÄrÅ”u piemÄru. Å is ir piemÄrs, kur izstrÄdÄtÄji ir tikai 2. IedomÄjieties, ja vienÄ repozitorijÄ raksta 10 vai 15 vai 100 cilvÄki uzÅÄmumÄ. JÅ«s kļūsiet traks, lai atrisinÄtu visus Å”os konfliktus.
Ir nedaudz atŔķirÄ«gs gadÄ«jums. Mums ir meistars un daži izstrÄdÄtÄji, kas kaut ko dara.
ViÅi izveidoja zariÅu.
Viens nomira, viss bija kÄrtÄ«bÄ, izturÄja uzdevumu.
TikmÄr otrais izstrÄdÄtÄjs nodeva savu uzdevumu. PieÅemsim, ka viÅÅ” to nosÅ«tÄ«ja pÄrskatÄ«Å”anai. Daudziem uzÅÄmumiem ir prakse, ko sauc par pÄrskatÄ«Å”anu. No vienas puses, Ŕī prakse ir laba un noderÄ«ga, no otras puses, tÄ mÅ«s daudzÄjÄdÄ ziÅÄ bremzÄ. MÄs tajÄ neiedziļinÄsimies, taÄu Å”eit ir lielisks piemÄrs tam, pie kÄ var novest slikts pÄrskats. JÅ«s esat iesniedzis pÄrvilkÅ”anas pieprasÄ«jumu pÄrskatÄ«Å”anai. IzstrÄdÄtÄjam vairs nav ko darÄ«t. Ko viÅÅ” sÄk darÄ«t? ViÅÅ” sÄk uzÅemties citus uzdevumus.
Å ajÄ laikÄ otrais izstrÄdÄtÄjs darÄ«ja kaut ko citu.
Pirmais izpildīja treŔo uzdevumu.
Un pÄc kÄda laika viÅa pÄrskats tika pÄrbaudÄ«ts, un viÅÅ” cenÅ”as samierinÄties. TÄtad, kas notiek? Tas uztver milzÄ«gu skaitu konfliktu. KÄpÄc? Jo, kamÄr viÅa atsaukÅ”anas pieprasÄ«jums karÄjÄs pÄrskatÄ, kodÄ daudzas lietas jau bija mainÄ«juÅ”Äs.
Papildus stÄstam ar konfliktiem ir stÄsts ar komunikÄcijÄm. KamÄr jÅ«su pavediens tiek pÄrskatÄ«ts, kamÄr tas kaut ko gaida, kamÄr jÅ«s ilgu laiku strÄdÄjat pie funkcijas, jÅ«s pÄrtraucat izsekot, kas vÄl mainÄs jÅ«su pakalpojuma kodu bÄzÄ. IespÄjams, tas, ko mÄÄ£inÄt atrisinÄt tagad, jau tika atrisinÄts vakar, un varat izmantot kÄdu metodi un izmantot to atkÄrtoti. Bet jÅ«s to neredzÄsit, jo vienmÄr strÄdÄjat ar novecojuÅ”u filiÄli. Un Ŕī novecojusi filiÄle vienmÄr noved pie tÄ, ka jums ir jÄatrisina apvienoÅ”anas konflikts.
IzrÄdÄs, ja mÄs strÄdÄjam kÄ komanda, t.i., krÄtuvÄ nemanÄs nevis viens cilvÄks, bet 5-10 cilvÄki, tad jo ilgÄk mÄs nepievienojam savu kodu masteram, jo āāvairÄk cieÅ”am, jo āāgalu galÄ mums vajag. kaut ko tad sapludini. Un jo vairÄk mums ir konfliktu un jo vecÄku versiju mÄs strÄdÄjam, jo āāvairÄk problÄmu mums ir.
KopÄ kaut ko darÄ«t ir sÄpÄ«gi! MÄs vienmÄr traucÄjam viens otram.
Å Ä« problÄma tika pamanÄ«ta pirms vairÄk nekÄ 20 gadiem. Es atradu pirmo pieminÄjumu par nepÄrtrauktas integrÄcijas praksi ekstrÄmÄ programmÄÅ”anÄ.
Extreme Programming ir pirmÄ elastÄ«gÄ sistÄma. Lapa parÄdÄ«jÄs 96. gadÄ. Un bija doma izmantot kaut kÄdu programmÄÅ”anas praksi, plÄnoÅ”anu un citas lietas, lai izstrÄde bÅ«tu pÄc iespÄjas elastÄ«gÄka, lai mÄs varÄtu Ätri reaÄ£Ät uz jebkurÄm izmaiÅÄm vai prasÄ«bÄm no mÅ«su klientu puses. Un viÅi sÄka saskarties ar to pirms 24 gadiem, ka, ja tu kaut ko dari ļoti ilgi un malÄ, tad tu tam velti vairÄk laika, jo tev ir konflikti.
Tagad mÄs atseviŔķi analizÄsim frÄzi āNepÄrtraukta integrÄcijaā. Ja mÄs to tulkojam tieÅ”i, mÄs iegÅ«stam nepÄrtrauktu integrÄciju. Bet tas, cik tas ir nepÄrtraukts, nav Ä«sti skaidrs; tas ir ļoti pÄrtraukts. Bet tas, cik liela ir integrÄcija, arÄ« nav ļoti acÄ«mredzams.
Un tÄpÄc es jums tagad piedÄvÄju citÄtus no Extreme Programming. Un mÄs analizÄsim abus vÄrdus atseviŔķi.
IntegrÄcija - KÄ jau teicu, mÄs cenÅ”amies nodroÅ”inÄt, lai katrs inženieris strÄdÄtu ar jaunÄko koda versiju, lai viÅÅ” censtos pÄc iespÄjas biežÄk pievienot savu kodu kopÄjai filiÄlei, lai tie bÅ«tu mazi zari. Jo, ja tie ir lieli, tad mÄs varam viegli iestrÄgt ar saplÅ«Å”anas konfliktiem uz nedÄļu. Tas jo Ä«paÅ”i attiecas uz gadÄ«jumiem, kad mums ir garÅ” izstrÄdes cikls, piemÄram, Å«denskritums, kur izstrÄdÄtÄjs devÄs prom uz mÄnesi, lai izgrieztu kÄdu milzÄ«gu funkciju. Un viÅÅ” ļoti ilgi bÅ«s iestrÄdzis integrÄcijas stadijÄ.
IntegrÄcija ir tad, kad mÄs paÅemam savu filiÄli un integrÄjam to ar meistaru, mÄs to sapludinÄm. Ja mÄs esam transbase izstrÄdÄtÄji, mÄs cenÅ”amies nodroÅ”inÄt, ka mÄs nekavÄjoties rakstÄm meistaram bez papildu atzarojumiem.
KopumÄ integrÄcija nozÄ«mÄ koda paÅemÅ”anu un ievilkÅ”anu galvenajÄ ierÄ«cÄ.
Kas Å”eit ir domÄts ar vÄrdu ānepÄrtrauktsā, ko sauc par nepÄrtrauktÄ«bu? Prakse nozÄ«mÄ, ka izstrÄdÄtÄjs cenÅ”as pÄc iespÄjas ÄtrÄk integrÄt savu kodu. Tas ir viÅa mÄrÄ·is, veicot jebkuru uzdevumu - pÄc iespÄjas ÄtrÄk iegÅ«t savu kodu master. IdeÄlÄ pasaulÄ izstrÄdÄtÄji to darÄ«tu ik pÄc dažÄm stundÄm. Tas ir, jÅ«s Åemat nelielu problÄmu un sapludinÄt to meistarÄ. Viss ir lieliski. Tas ir tas, uz ko jÅ«s tiecaties. Un tas ir jÄdara nepÄrtraukti. TiklÄ«dz tu kaut ko dari, tu to uzreiz ieliec meistarÄ.
Un izstrÄdÄtÄjs, kurÅ” kaut ko ražo, ir atbildÄ«gs par to, ko viÅÅ” darÄ«ja, lai tas izdotos un neko nesabojÄtu. Å eit parasti iznÄk testa stÄsts. MÄs vÄlamies veikt dažus mÅ«su saistÄ«bu un sapludinÄÅ”anas testus, lai pÄrliecinÄtos, ka tas darbojas. Un Å”eit Dženkinss var jums palÄ«dzÄt.
Bet ar stÄstiem: padarÄ«sim izmaiÅas mazas, ļausim uzdevumiem bÅ«t maziem, radÄ«sim problÄmu un nekavÄjoties mÄÄ£inÄsim to kaut kÄ iegult meistarÄ - neviens Dženkinss Å”eit nepalÄ«dzÄs. Jo Dženkinss tikai palÄ«dzÄs jums veikt testus.
JÅ«s varat iztikt bez tiem. Tas jums nemaz nekaitÄs. Jo prakses mÄrÄ·is ir mÄrÄ«t pÄc iespÄjas biežÄk, lai turpmÄk netÄrÄtu milzÄ«gu laiku kÄdiem konfliktiem.
IedomÄsimies, ka nez kÄpÄc esam 2020. gadÄ bez interneta. Un mÄs strÄdÄjam uz vietas. Mums nav Dženkinsa. Tas ir labi. JÅ«s joprojÄm varat doties uz priekÅ”u un izveidot vietÄjo filiÄli. JÅ«s tajÄ ierakstÄ«jÄt kÄdu kodu. Uzdevumu paveicÄm 3-4 stundÄs. MÄs pÄrgÄjÄm uz master, veicÄm git pull un apvienojÄm savu filiÄli tur. Gatavs. Ja jÅ«s to darÄt bieži, apsveicam, jums ir nepÄrtraukta integrÄcija!
KÄdi pierÄdÄ«jumi mÅ«sdienu pasaulÄ ir, ka ir vÄrts tÄrÄt enerÄ£iju? Jo kopumÄ ir grÅ«ti. Ja mÄÄ£inÄsit Å”Ädi strÄdÄt, sapratÄ«sit, ka tagad tiks ietekmÄta kÄda plÄnoÅ”ana, vairÄk laika bÅ«s jÄvelta uzdevumu sadalÄ«Å”anai. Jo, ja tu darÄ«si vÄ«rieti..., tad nespÄsi Ätri samierinÄties un attiecÄ«gi iekulties nepatikÅ”anÄs. Jums vairs nebÅ«s prakses.
Un tas bÅ«s dÄrgi. No rÄ«tdienas nebÅ«s iespÄjams strÄdÄt uzreiz, izmantojot nepÄrtraukto integrÄciju. Jums visiem bÅ«s nepiecieÅ”ams ļoti ilgs laiks, lai pierastu pie tÄ, jums bÅ«s nepiecieÅ”ams ļoti ilgs laiks, lai pierastu pie uzdevumu sadalÄ«Å”anas, bÅ«s nepiecieÅ”ams ļoti ilgs laiks, lai pierastu pie pÄrskatÄ«Å”anas prakses atkÄrtotas veikÅ”anas, ja jums tÄda ir . Jo mÅ«su mÄrÄ·is ir, lai tas Å”odien izkÅ«st. Un, ja veicat pÄrskatÄ«Å”anu trÄ«s dienu laikÄ, jums ir problÄmas un nepÄrtraukta integrÄcija jums nedarbojas.
Bet vai mums Å”obrÄ«d ir kÄdi bÅ«tiski pierÄdÄ«jumi, kas liecina, ka ir jÄga ieguldÄ«t Å”ajÄ praksÄ?
PirmÄ lieta, kas man ienÄca prÄtÄ, bija DevOps stÄvoklis. Å is ir pÄtÄ«jums, ko puiÅ”i veic jau 7 gadus. Tagad viÅi to dara kÄ neatkarÄ«ga organizÄcija, bet zem Google.
Un viÅu 2018. gada pÄtÄ«jums parÄdÄ«ja korelÄciju starp uzÅÄmumiem, kas cenÅ”as izmantot Ä«slaicÄ«gas filiÄles, kas Ätri integrÄjas, bieži integrÄjas un kurÄm ir labÄki IT veiktspÄjas rÄdÄ«tÄji.
KÄdi ir Å”ie rÄdÄ«tÄji? Å ie ir 4 rÄdÄ«tÄji, ko viÅi izmanto no visiem uzÅÄmumiem savÄs anketÄs: izvietoÅ”anas biežums, izmaiÅu izpildes laiks, pakalpojuma atjaunoÅ”anas laiks, izmaiÅu kļūmju lÄ«menis.
Un, pirmkÄrt, pastÄv Ŕī korelÄcija, mÄs zinÄm, ka uzÅÄmumiem, kas veic mÄrÄ«jumus, ir daudz labÄki rÄdÄ«tÄji. Un viÅiem ir uzÅÄmumu iedalÄ«jums vairÄkÄs kategorijÄs: tie ir lÄni uzÅÄmumi, kas ražo kaut ko lÄni, ar vidÄju veiktspÄju, ar augstu veiktspÄju un elite. Elite ir Netflix, Amazon, kas ir super Ätri, dara visu Ätri, skaisti un efektÄ«vi.
Otrs stÄsts, kas notika tikai pirms mÄneÅ”a. TehnoloÄ£iju radaram ir lielisks raksts par Gitflow. Gitflow atŔķiras no visiem citiem ar to, ka tÄ zari ir ilgmūžīgi. Ir izlaiduma zari, kas dzÄ«vo ilgu laiku, un ir zari, kas arÄ« dzÄ«vo ilgu laiku. Å Ä« prakse TehnoloÄ£iju radarÄ ir pÄrcelta uz HOLD. KÄpÄc? Jo cilvÄki saskaras ar integrÄcijas sÄpÄm.
Ja jÅ«su zars dzÄ«vo ļoti ilgu laiku, tas iestrÄgst, sapuvis, un mÄs sÄkam pavadÄ«t vairÄk laika, cenÅ”oties veikt kaut kÄdas izmaiÅas tajÄ.
Un nesen Gitflow autors teica, ka, ja jÅ«su mÄrÄ·is ir nepÄrtraukta integrÄcija, ja jÅ«su mÄrÄ·is ir tas, ka vÄlaties ritinÄt cik bieži vien iespÄjams, tad Gitflow ir slikta ideja. ViÅÅ” rakstam atseviŔķi piebilda, ka, ja tev ir aizmugure, kur uz Å”o var tiekties, tad Gitflow tev ir lieks, jo Gitflow tevi bremzÄs, Gitflow radÄ«s problÄmas ar integrÄciju.
Tas nenozÄ«mÄ, ka Gitflow ir slikta un to nevajadzÄtu izmantot. Tas ir citiem gadÄ«jumiem. PiemÄram, ja jums ir jÄatbalsta vairÄkas pakalpojuma vai lietojumprogrammas versijas, t.i., ja jums ir nepiecieÅ”ams atbalsts ilgu laiku.
Bet, ja jÅ«s runÄjat ar cilvÄkiem, kas atbalsta Å”Ädus pakalpojumus, jÅ«s dzirdÄsiet daudz sÄpju par to, ka Ŕī versija bija 3.2, kas bija pirms 4 mÄneÅ”iem, bet Å”is labojums tajÄ nebija iekļauts un tagad, lai to izveidotu, jums ir jÄveic vairÄkas izmaiÅas. Un tagad viÅi atkal ir iestrÄguÅ”i, un tagad viÅi jau nedÄļu ir nerimstÄ«juÅ”ies, mÄÄ£inot ieviest kÄdu jaunu funkciju.
KÄ tÄrzÄÅ”anÄ pareizi atzÄ«mÄja Aleksandrs Kovaļovs, korelÄcija nav tas pats, kas cÄloÅsakarÄ«ba. TÄ ir patiesÄ«ba. Tas nozÄ«mÄ, ka nav tieÅ”as saiknes, ka, ja jums ir nepÄrtraukta integrÄcija, tad visi rÄdÄ«tÄji bÅ«s lieliski. Bet ir pozitÄ«va korelÄcija, ka, ja viens ir viens, tad visticamÄk arÄ« otrs. Nav fakts, bet visticamÄk. TÄ ir tikai korelÄcija.
Å Ä·iet, ka mÄs jau kaut ko darÄm, Ŕķiet, ka mÄs jau saplÅ«stam, bet kÄ saprast, ka mums joprojÄm ir NepÄrtraukta integrÄcija, ka mÄs diezgan bieži apvienojamies?
Jez Humble ir rokasgrÄmatas, Accelerate, nepÄrtrauktÄs piegÄdes vietnes un grÄmatas Continuous Delivery autors. ViÅÅ” piedÄvÄ Å”o testu:
- Inženiera kods katru dienu nokļūst pie meistara.
- Par katru apÅemÅ”anos jÅ«s veicat vienÄ«bu testus.
- BÅ«ve meistarÄ nokrita, tika salabots apmÄram 10 minÅ«tÄs.
ViÅÅ” iesaka izmantot Å”Ädu testu, lai pÄrliecinÄtos, ka jums ir pietiekami daudz prakses.
PÄdÄjais man Ŕķiet nedaudz pretrunÄ«gs. Tas ir, ja jÅ«s varat to salabot 10 minÅ«tÄs, tad jums ir nepÄrtraukta integrÄcija, tas, manuprÄt, izklausÄs nedaudz dÄ«vaini, bet tam ir jÄga. KÄpÄc? Jo, ja jÅ«s bieži sasalst, tas nozÄ«mÄ, ka jÅ«su izmaiÅas ir nelielas. Ja nelielas izmaiÅas nozÄ«mÄ, ka jÅ«su galvenÄ konstrukcija ir bojÄta, varat Ätri atrast piemÄru, jo izmaiÅas ir nelielas. Å eit jums bija neliela sapludinÄÅ”ana, tajÄ mainÄ«jÄs 20-30 rindiÅas. Un, attiecÄ«gi, jÅ«s varat Ätri saprast, kas bija iemesls, jo izmaiÅas ir niecÄ«gas, jums ir ļoti mazs apgabals, kur meklÄt problÄmu.
Un pat tad, ja mÅ«su produkts pÄc izlaiÅ”anas sabrÅ«k, tad, ja mums ir nepÄrtrauktas integrÄcijas prakse, mums ir daudz vieglÄk rÄ«koties, jo izmaiÅas ir niecÄ«gas. JÄ, tas ietekmÄs plÄnoÅ”anu. Tas sÄpÄs. Un, iespÄjams, visgrÅ«tÄkais Å”ajÄ praksÄ ir pierast pie uzdevumu sadalÄ«Å”anas, tas ir, kÄ to izdarÄ«t tÄ, lai jÅ«s varÄtu kaut ko paÅemt un izdarÄ«t dažu stundu laikÄ un tajÄ paÅ”Ä laikÄ iziet apskatu, ja tev tÄds ir. PÄrskatÄ«Å”ana ir atseviŔķa sÄpe.
VienÄ«bas testi ir tikai palÄ«gs, kas palÄ«dz saprast, vai integrÄcija bija veiksmÄ«ga un vai nekas nav bojÄts. ManuprÄt, tas arÄ« nav pilnÄ«gi obligÄts, jo tas nav prakses jÄga.
Å is ir Ä«ss ievads nepÄrtrauktai integrÄcijai. Tas ir viss, kas attiecas uz Å”o praksi. Esmu gatavs uzdot jautÄjumus.
Es vÄlreiz Ä«si apkopoÅ”u:
- NepÄrtraukta integrÄcija nav Jenkins, tÄ nav Gitlab.
- Tas nav rÄ«ks, tÄ ir prakse, ka mÄs pÄc iespÄjas biežÄk sapludinÄm savu kodu galvenajÄ.
- MÄs to darÄm, lai nÄkotnÄ izvairÄ«tos no milzÄ«gajÄm sÄpÄm, kas rodas saplÅ«Å”anas rezultÄtÄ, tas ir, mÄs piedzÄ«vojam nelielas sÄpes tagad, lai nepiedzÄ«votu vairÄk nÄkotnÄ. TÄ ir visa bÅ«tÄ«ba.
- SÄnos ir saziÅa caur kodu, bet es to redzu ļoti reti, bet arÄ« tas ir paredzÄts tam.
jautÄjumi
Ko darīt ar nesadalītiem uzdevumiem?
SadalÄs. KÄda ir problÄma? Vai varat sniegt piemÄru, ka ir uzdevums un tas nav sadalÄ«ts?
Ir uzdevumi, kurus nevar atdalÄ«t no vÄrda āpilnÄ«giā, piemÄram, tÄdi, kuriem nepiecieÅ”amas ļoti dziļas zinÄÅ”anas un kurus faktiski var atrisinÄt mÄneÅ”a laikÄ, lai sasniegtu kÄdu sagremojamu rezultÄtu.
Ja pareizi saprotu, tad ir kÄds liels un sarežģīts uzdevums, kura rezultÄts bÅ«s redzams tikai pÄc mÄneÅ”a?
JÄ, tieÅ”i tÄ. JÄ, rezultÄtu varÄs novÄrtÄt ne ÄtrÄk kÄ pÄc mÄneÅ”a.
Labi. KopumÄ tÄ nav problÄma. KÄpÄc? Jo Å”ajÄ gadÄ«jumÄ, kad mÄs runÄjam par zariem, mÄs nerunÄjam par zaru ar pazÄ«mi. Funkcijas var bÅ«t lielas un sarežģītas. Tie var ietekmÄt lielu skaitu komponentu. Un, iespÄjams, mÄs nevaram tos veikt pilnÄ«bÄ vienÄ nozarÄ. Tas ir labi. Mums vienkÄrÅ”i jÄizjauc Å”is stÄsts. Ja lÄ«dzeklis nav pilnÄ«bÄ gatavs, tas nenozÄ«mÄ, ka dažas tÄ koda daļas nevar sapludinÄt. JÅ«s pievienojÄt, piemÄram, migrÄciju, un funkcijai ir daži posmi. PieÅemsim, ka jums ir posms ā veiciet migrÄciju, pievienojiet jaunu metodi. Un Ŕīs lietas jau var mÄrÄ«t katru dienu.
Labi. KÄda tad jÄga?
KÄda jÄga katru dienu nogalinÄt mazas lietas?
JÄ.
Ja viÅi kaut ko salauž, jÅ«s to uzreiz redzat. Jums ir mazs gabals, kas kaut ko ir salauzis, jums ir vieglÄk to salabot. Lieta ir tÄda, ka sapludinÄt nelielu gabalu tagad ir daudz vieglÄk nekÄ sapludinÄt kaut ko lielu dažu nedÄļu laikÄ. Un treÅ”ais punkts ir tas, ka citi inženieri strÄdÄs ar paÅ”reizÄjo koda versiju. ViÅi redzÄs, ka Å”eit ir pievienotas dažas migrÄcijas, un pÄc tam ir parÄdÄ«jusies kÄda metode, kuru viÅi arÄ« vÄlas izmantot. Ikviens redzÄs, kas notiek jÅ«su kodÄ. TieÅ”i Ŕīm trim lietÄm tiek veikta prakse.
Paldies, jautÄjums ir slÄgts!
(Oļegs Soroka) Vai drÄ«kstu piebilst? JÅ«s visu pateicÄt pareizi, es tikai vÄlos pievienot vienu frÄzi.
Š¢Š°Šŗ.
Izmantojot nepÄrtraukto integrÄciju, kods tiek sapludinÄts kopÄjÄ atzarÄ nevis tad, kad lÄ«dzeklis ir pilnÄ«bÄ gatavs, bet gan tad, kad bÅ«vÄjums pÄrstÄj bojÄties. Un jÅ«s varat droÅ”i apÅemties apgÅ«t tik reižu dienÄ, cik vÄlaties. Otrs aspekts ir tÄds, ka, ja kaut kÄdu iemeslu dÄļ nevarat sadalÄ«t ikmÄneÅ”a uzdevumu uzdevumos vismaz trÄ«s dienas, es klusÄju apmÄram trÄ«s stundas, tad jums ir milzÄ«ga problÄma. Un fakts, ka jums nav nepÄrtrauktas integrÄcijas, ir mazÄkÄ no Ŕīm problÄmÄm. Tas nozÄ«mÄ, ka jums ir problÄmas ar arhitektÅ«ru un nulles inženiertehnisko praksi. Jo pat ja tas ir pÄtÄ«jums, tad jebkurÄ gadÄ«jumÄ tas ir jÄformulÄ hipotÄžu vai cikla veidÄ.
MÄs runÄjÄm par 4 rÄdÄ«tÄjiem, kas atŔķir veiksmÄ«gus uzÅÄmumus no atpalikuÅ”iem. Mums vÄl ir jÄdzÄ«vo, lai redzÄtu Å”os 4 rÄdÄ«tÄjus. Ja jÅ«su vidÄjÄ uzdevuma izpilde prasa mÄnesi, es vispirms pievÄrsÄ«Å”os Å”im rÄdÄ«tÄjam. Vispirms es to samazinÄtu lÄ«dz 3 dienÄm. Un pÄc tam es sÄku domÄt par Continuous.
Vai es pareizi sapratu, ka jÅ«s domÄjat, ka vispÄr nav jÄgas investÄt inženiertehniskajÄs praksÄs, ja kÄda uzdevuma izpilde prasa mÄnesi?
Jums ir nepÄrtraukta integrÄcija. Un ir tÄda tÄma, ka 10 minÅ«tÄs var vai nu labot labojumu, vai atvilkt. IedomÄjieties, ka esat to izrullÄjis. TurklÄt jums pat ir nepÄrtraukta izvietoÅ”ana, jÅ«s to izlaidÄt uz prod un tikai tad pamanÄ«jÄt, ka kaut kas nogÄja greizi. Un jums tas ir jÄatgriež, bet jÅ«s jau esat migrÄjis savu datu bÄzi. Tev jau ir nÄkamÄs versijas datu bÄzes shÄma, turklÄt tev bija arÄ« kaut kÄds dublÄjums, un tur arÄ« tika ierakstÄ«ti dati.
Un kÄda jums ir alternatÄ«va? Ja atcelsit kodu, tas vairs nevarÄs darboties ar Å”o atjauninÄto datu bÄzi.
BÄze virzÄs tikai uz priekÅ”u, jÄ.
CilvÄki, kuriem ir slikta inženieru prakse, visticamÄk, arÄ« nav lasÄ«juÅ”i biezo grÄmatu par.... Ko darÄ«t ar dublÄjumu? Ja atjaunojat no dublÄjuma, tas nozÄ«mÄ, ka jÅ«s zaudÄjat tajÄ brÄ«dÄ« uzkrÄtos datus. PiemÄram, trÄ«s stundas strÄdÄjÄm ar jauno datu bÄzes versiju, tur reÄ£istrÄjÄs lietotÄji. JÅ«s atsakÄties no vecÄ dublÄjuma, jo shÄma nedarbojas ar jauno versiju, tÄpÄc esat pazaudÄjis Å”os lietotÄjus. Un viÅi ir neapmierinÄti, viÅi zvÄr.
Lai apgÅ«tu visu prakÅ”u klÄstu, kas atbalsta nepÄrtrauktu integrÄciju un nepÄrtrauktu piegÄdi, nepietiek tikai iemÄcÄ«ties rakstÄ«t.... PirmkÄrt, to var bÅ«t daudz, tas bÅ«s nepraktiski. TurklÄt ir virkne citu prakÅ”u, piemÄram, zinÄtniskÄ. Ir tÄda prakse, GitHub to savulaik popularizÄja. Tas ir tad, kad vienlaikus darbojas gan vecais kods, gan jaunais kods. Tas ir tad, kad izveidojat nepabeigtu lÄ«dzekli, bet tas var atgriezt kÄdu vÄrtÄ«bu: vai nu kÄ funkcija, vai kÄ Rest API. JÅ«s izpildÄt gan jauno kodu, gan veco kodu un salÄ«dziniet atŔķirÄ«bu starp tiem. Un, ja ir atŔķirÄ«ba, tad jÅ«s reÄ£istrÄjat Å”o notikumu. TÄdÄ veidÄ jÅ«s zinÄt, ka jums ir jauna funkcija, kas ir gatava izvÄrÅ”anai papildus vecajai, ja noteiktu laiku nav bijuÅ”as atŔķirÄ«bas starp tÄm.
Ir simtiem Å”Ädu prakÅ”u. Es ieteiktu sÄkt ar transbÄzes izstrÄdi. ViÅa nav 100% uz NepÄrtrauktas integrÄcijas, bet prakse ir tÄda pati, viens nevar dzÄ«vot bez otra.
Vai jÅ«s minÄjÄt transbÄzes izstrÄdi kÄ piemÄru, kur var redzÄt praksi, vai arÄ« ieteicÄt cilvÄkiem sÄkt izmantot transbÄzes attÄ«stÄ«bu?
Paskatieties, jo viÅi to nevarÄs izmantot. Lai tos izmantotu, jums ir daudz jÄlasa. Un, kad cilvÄks jautÄ: "Ko darÄ«t ar funkciju, kas aizÅem mÄnesi, tas nozÄ«mÄ, ka viÅÅ” nav lasÄ«jis par transbÄzes izstrÄdi." Es to vÄl neieteiktu. Es ieteiktu koncentrÄties tikai uz tÄmu, kÄ pareizi arhitektoniski sadalÄ«t lielus uzdevumus mazÄkos. TÄda ir sadalÄ«Å”anÄs bÅ«tÄ«ba.
DekompozÄ«cija ir viens no arhitekta instrumentiem. Vispirms veicam analÄ«zi, tad sadalÄ«Å”anu, tad sintÄzi, tad integrÄciju. Un tÄ mums viss izdodas. Un mums joprojÄm ir jÄizaug lÄ«dz nepÄrtrauktai integrÄcijai sadalÄ«Å”anÄs ceļÄ. JautÄjumi rodas pirmajÄ posmÄ, un mÄs jau runÄjam par ceturto posmu, t.i., jo biežÄk mÄs veiksim integrÄciju, jo labÄk. VÄl ir pÄragri to darÄ«t; bÅ«tu jauki vispirms nogriezt savu monolÄ«tu.
Uz kÄdas diagrammas ir jÄuzzÄ«mÄ vairÄkas bultiÅas un kvadrÄti. NevarÄtu teikt, ka tagad es parÄdÄ«Å”u jaunas lietojumprogrammas arhitektÅ«ras shÄmu un parÄdÄ«Å”u vienu kvadrÄtu, kura iekÅ”pusÄ ir zaļa lietojumprogrammas poga. JebkurÄ gadÄ«jumÄ bÅ«s vairÄk kvadrÄtu un bultu. KatrÄ diagrammÄ, ko es redzÄju, bija vairÄk nekÄ viena. Un sadalÄ«Å”anÄs pat grafiskÄ attÄlojuma lÄ«menÄ« jau notiek. TÄpÄc kvadrÄtus var padarÄ«t neatkarÄ«gus. Ja nÄ, tad man ir lieli jautÄjumi arhitektam.
TÄrzÄÅ”anÄ ir jautÄjums: "Ja pÄrskatÄ«Å”ana ir obligÄta un prasa ilgu laiku, varbÅ«t dienu vai vairÄk?"
Jums ir problÄmas ar praksi. PÄrskatÄ«Å”ana nedrÄ«kst ilgt vienu dienu vai ilgÄk. Å is ir tas pats stÄsts par iepriekÅ”Äjo jautÄjumu, tikai nedaudz mÄ«kstÄks. Ja pÄrskatÄ«Å”ana turpinÄs vienu dienu, tad, visticamÄk, Å”ajÄ pÄrskatÄ notiek kÄdas ļoti lielas izmaiÅas. Tas nozÄ«mÄ, ka tas ir jÄsamazina. Transbase izstrÄdÄ, ko Oļegs ieteica, ir stÄsts, ko sauc par nepÄrtrauktu pÄrskatÄ«Å”anu. ViÅas ideja ir tÄda, ka mÄs ar nolÅ«ku izdarÄm tik mazu pievilkÅ”anas pieprasÄ«jumu, jo mÄs cenÅ”amies pastÄvÄ«gi un nedaudz apvienoties. TÄdÄjÄdi izvilkÅ”anas pieprasÄ«jums maina vienu abstrakciju vai 10 rindiÅas. Pateicoties Å”im pÄrskatam, tas aizÅem dažas minÅ«tes.
Ja pÄrskatÄ«Å”ana ilgst dienu vai vairÄk, kaut kas nav kÄrtÄ«bÄ. PirmkÄrt, jums var bÅ«t dažas problÄmas ar arhitektÅ«ru. Vai arÄ« tas ir liels koda fragments, piemÄram, 1 rindiÅas. Vai arÄ« jÅ«su arhitektÅ«ra ir tik sarežģīta, ka cilvÄks to nevar saprast. Å Ä« ir nedaudz sÄnu problÄma, taÄu tÄ arÄ« bÅ«s jÄatrisina. VarbÅ«t pÄrskats vispÄr nav vajadzÄ«gs. Mums arÄ« par to ir jÄdomÄ. PÄrskatÄ«Å”ana ir lieta, kas jÅ«s bremzÄ. KopumÄ tam ir savas priekÅ”rocÄ«bas, taÄu jums ir jÄsaprot, kÄpÄc jÅ«s to darÄt. Vai tas ir veids, kÄ jÅ«s varat Ätri nodot informÄciju, vai tas ir veids, kÄ iekÅ”Äji noteikt dažus standartus vai kÄ? KÄpÄc jums tas ir vajadzÄ«gs? Jo pÄrskatÄ«Å”ana ir jÄveic vai nu ļoti Ätri, vai arÄ« jÄatceļ pavisam. Tas ir kÄ transbase deveploment - stÄsts ir ļoti skaists, bet tikai nobrieduÅ”iem puiÅ”iem.
AttiecÄ«bÄ uz Äetriem rÄdÄ«tÄjiem es tomÄr ieteiktu tos noÅemt, lai saprastu, pie kÄ tas noved. Paskaties uz skaitļiem, paskaties uz bildi, cik viss ir slikti.
(Dmitrijs) Esmu gatavs ar jums uzsÄkt diskusiju par Å”o tÄmu. Skaitļi un rÄdÄ«tÄji ir lieliski, prakse ir lieliska. Bet jums ir jÄsaprot, vai uzÅÄmumam tas ir vajadzÄ«gs. Ir uzÅÄmumi, kuriem Å”Äds pÄrmaiÅu Ätrums nav vajadzÄ«gs. Zinu uzÅÄmumus, kuros izmaiÅas nevar veikt ik pÄc 15 minÅ«tÄm. Un ne tÄpÄc, ka viÅi ir tik slikti. Tas ir tÄds dzÄ«ves cikls. Un, lai izveidotu filiÄļu funkciju, pÄrslÄgÅ”anas funkciju, jums ir nepiecieÅ”amas dziļas zinÄÅ”anas.
Tas ir sarežģīti. Ja vÄlaties sÄ«kÄk izlasÄ«t stÄstu par pÄrslÄgÅ”anas funkciju, es to ļoti iesaku
Un jÅ«s joprojÄm neesat atbildÄjis uz jautÄjumu: "Vai Dženkinss ir vajadzÄ«gs vai nÄ?"
Dženkinss nekÄdÄ gadÄ«jumÄ nav vajadzÄ«gs. TomÄr nopietni, rÄ«ki: Jenkins, Gitlab nodroÅ”inÄs jums ÄrtÄ«bas. JÅ«s redzÄsiet, vai montÄža ir samontÄta vai nav salikta. ViÅi var jums palÄ«dzÄt, bet nedos jums praksi. ViÅi var jums pieŔķirt tikai loku ā Ok, nevis Ok. Un tad, ja raksti arÄ« kontroldarbus, jo ja kontroldarbu nav, tad gandrÄ«z bezjÄdzÄ«gi. TÄpÄc tas ir vajadzÄ«gs, jo tas ir ÄrtÄk, bet kopumÄ jÅ«s varat dzÄ«vot bez tÄ, jÅ«s daudz nezaudÄsit.
Tas ir, ja jums ir prakse, vai tas nozÄ«mÄ, ka jums tas nav vajadzÄ«gs?
Pareizi. Es iesaku Jez Humble testu. Tur man ir ambivalenta attieksme pret pÄdÄjo punktu. Bet kopumÄ, ja jums ir trÄ«s lietas, jÅ«s pastÄvÄ«gi sapludinÄt, izpildÄt commit testus galvenajÄ versijÄ, Ätri salabojat bÅ«vÄjumu galvenajÄ versijÄ, tad, iespÄjams, jums nekas cits nav vajadzÄ«gs.
KamÄr gaidÄm dalÄ«bnieku jautÄjumus, man ir jautÄjums. MÄs tikai runÄjÄm par produkta kodu. Vai esat to izmantojis infrastruktÅ«ras kodam? Vai tas ir viens un tas pats kods, vai tam ir vienÄdi principi un viens un tas pats dzÄ«ves cikls, vai arÄ« pastÄv dažÄdi dzÄ«ves cikli un principi? Parasti, kad visi runÄ par nepÄrtrauktu integrÄciju un attÄ«stÄ«bu, visi aizmirst, ka ir arÄ« infrastruktÅ«ras kods. Un pÄdÄjÄ laikÄ to kļūst arvien vairÄk. Un vai visi Å”ie noteikumi ir jÄnes tur?
Pat ne tÄ vajadzÄtu bÅ«t, tas bÅ«tu lieliski, jo tas tÄpat atvieglotu dzÄ«vi. TiklÄ«dz mÄs strÄdÄjam ar kodu, nevis ar bash skriptiem, bet mums ir normÄls kods.
Stop, stop, bash skripts arī ir kods. Neaiztiec manu veco mīlestību.
Labi, es nemidÄ«Å”u tavas atmiÅas. Man personÄ«gi nepatÄ«k bash. Tas visu laiku saplÄ«st neglÄ«ti un biedÄjoÅ”i. Un tas bieži saplÄ«st neparedzami, tÄpÄc man tas nepatÄ«k. Bet labi, pieÅemsim, ka jums ir bash kods. VarbÅ«t es tieÅ”Äm nesaprotu, un tur ir normÄlas testÄÅ”anas sistÄmas. Es vienkÄrÅ”i nezinu. Un mÄs saÅemam tÄdas paÅ”as priekÅ”rocÄ«bas.
TiklÄ«dz mÄs strÄdÄjam ar infrastruktÅ«ru kÄ kodu, mÄs saÅemam visas tÄs paÅ”as problÄmas kÄ izstrÄdÄtÄji. Pirms dažiem mÄneÅ”iem es saskÄros ar situÄciju, kad kolÄÄ£is man nosÅ«tÄ«ja 1 rindiÅu izvilkÅ”anas pieprasÄ«jumu bash. Un jÅ«s pavadÄt apskatu 000 stundas. Rodas tÄdas paÅ”as problÄmas. Tas joprojÄm ir kods. Un tÄ joprojÄm ir sadarbÄ«ba. MÄs iestrÄgstam ar vilkÅ”anas pieprasÄ«jumu, un mÄs iestrÄgstamies ar to, ka mÄs, piemÄram, risinÄm tos paÅ”us sapludinÄÅ”anas konfliktus vienÄ un tajÄ paÅ”Ä bash.
Es tagad ļoti aktÄ«vi skatos uz Å”o visu par skaistÄko infra programmÄÅ”anu. Pulumi tagad esmu ievedis infrastruktÅ«rÄ. TÄ ir programmÄÅ”ana tÄs tÄ«rÄkajÄ formÄ. Tur tas ir vÄl jaukÄk, jo man ir visas programmÄÅ”anas valodas iespÄjas, t.i., es uztaisÄ«ju skaistu slÄdzi no zila gaisa ar tiem paÅ”iem ifs un viss ir kÄrtÄ«bÄ. Tas ir, mana maiÅa jau ir meistarÄ. ViÅu jau visi var redzÄt. Citi inženieri par to zina. Tas jau tur kaut ko ir ietekmÄjis. TomÄr tas nebija iespÄjots visÄm infrastruktÅ«rÄm. TÄ ieslÄdzÄs, piemÄram, maniem testu stendiem. TÄpÄc, lai vÄlreiz atbildÄtu uz jÅ«su jautÄjumu, tas ir nepiecieÅ”ams. Tas padara dzÄ«vi vieglÄku mums, inženieriem, kas strÄdÄ ar kodu, tÄdÄ paÅ”Ä veidÄ.
Ja vÄl kÄdam ir jautÄjumi?
Man ir jautÄjums. Es gribu turpinÄt diskusiju ar Oļegu. KopumÄ es domÄju, ka jums ir taisnÄ«ba, ka, ja uzdevuma izpilde prasa mÄnesi, tad jums ir problÄmas ar arhitektÅ«ru, jums ir problÄmas ar analÄ«zi, sadalÄ«Å”anu, plÄnoÅ”anu utt. Bet man ir sajÅ«ta, ka, ja jÅ«s sÄkat mÄÄ£inot dzÄ«vot saskaÅÄ ar NepÄrtraukto integrÄciju, tad sÄksi labot sÄpes ar plÄnoÅ”anu, jo nekur citur no tÄs netiksi.
(Oļegs) JÄ, tieÅ”i tÄ. Å Ä« prakse ir salÄ«dzinÄma ar jebkuru citu nopietnu kultÅ«ru mainoÅ”u praksi. VisgrÅ«tÄk ir pÄrvarÄt ieradumus, Ä«paÅ”i sliktos ieradumus. Un, ja Ŕīs prakses Ä«stenoÅ”anai ir nepiecieÅ”amas nopietnas apkÄrtÄjo cilvÄku paradumu maiÅa: izstrÄdÄtÄji, vadÄ«ba, ražoÅ”anas vadÄ«tÄjs, tad jÅ«s gaida pÄrsteigumi.
KÄdi varÄtu bÅ«t pÄrsteigumi? PieÅemsim, ka jÅ«s nolemjat, ka integrÄsities biežÄk. Un jums ir dažas citas lietas, kas saistÄ«tas ar integrÄciju, piemÄram, artefakti. Un jÅ«su uzÅÄmumÄ, piemÄram, ir politika, ka katrs artefakts ir kaut kÄdÄ veidÄ jÄuzskaita kaut kÄdÄ artefaktu glabÄÅ”anas sistÄmÄ. Un tas aizÅem kÄdu laiku. Personai ir jÄatzÄ«mÄ izvÄles rÅ«tiÅa, ka viÅÅ” kÄ izlaiÅ”anas pÄrvaldnieks ir pÄrbaudÄ«jis Å”o artefaktu, lai nodroÅ”inÄtu, ka tas ir gatavs izlaiÅ”anai ražoÅ”anÄ. Ja tas aizÅem 5-10-15 minÅ«tes, bet maketÄÅ”anu veicat reizi nedÄļÄ, tad tÄrÄt pusstundu reizi nedÄÄ¼Ä ir mazs nodoklis.
Ja jÅ«s veicat nepÄrtrauktu integrÄciju 10 reizes dienÄ, tad 10 reizes jÄreizina ar 30 minÅ«tÄm. Un tas pÄrsniedz Ŕī izlaiduma pÄrvaldnieka darba laiku. ViÅam vienkÄrÅ”i apnÄ«k to darÄ«t. DažÄm praksÄm ir fiksÄtas izmaksas. Tas ir viss.
Un jums ir vai nu jÄatceļ Å”is noteikums, lai jÅ«s vairs nedarÄ«tu Å”Ädu atkritumu, t.i., jÅ«s manuÄli nepieŔķirat grÄdu, lai kaut kam atbilstu. JÅ«s pilnÄ«bÄ paļaujaties uz kÄdu automatizÄtu gatavÄ«bas pÄrbaužu komplektu.
Un, ja jums ir nepiecieÅ”ams pierÄdÄ«jums no kÄda, lai priekÅ”nieks to parakstÄ«tu, un jÅ«s neiekļūtu ražoÅ”anÄ, ja Vasja nesaka, ka viÅÅ” to atļauj utt. - visas Ŕīs muļķības traucÄ praktizÄtÄjam. Jo, ja ir kÄdas darbÄ«bas, kas saistÄ«tas ar nodokli, tad viss palielinÄs 100 reizes. TÄpÄc maiÅu nereti visi sagaidÄ«s ar prieku. Jo cilvÄku paradumus ir grÅ«ti mainÄ«t.
Kad cilvÄks dara savu ierasto darbu, viÅÅ” to dara gandrÄ«z nedomÄjot. ViÅas kognitÄ«vÄ slodze ir nulle. ViÅÅ” vienkÄrÅ”i spÄlÄjas ar to, viÅam jau ir kontrolsaraksts galvÄ, viÅÅ” to ir izdarÄ«jis tÅ«kstoÅ” reižu. Un, tiklÄ«dz jÅ«s atnÄkat un sakÄt viÅam: āAtcelsim Å”o praksi un ieviesÄ«sim jaunu, sÄkot no pirmdienasā, viÅam tÄ kļūst par spÄcÄ«gu izziÅas slodzi. Un tas nÄk visiem uzreiz.
TÄpÄc vienkÄrÅ”ÄkÄ lieta, lai gan ne visi var atļauties Å”o greznÄ«bu, bet tas ir tas, ko es vienmÄr daru, tas ir sekojoÅ”s. Ja sÄkas jauns projekts, tad parasti visas nepÄrbaudÄ«tÄs prakses uzreiz tiek saspiestas Å”ajÄ projektÄ. KamÄr projekts ir jauns, mÄs Ä«sti neriskÄjam ar neko. Prod vÄl nav, nav ko iznÄ«cinÄt. TÄpÄc to var izmantot kÄ apmÄcÄ«bu. Å Ä« pieeja darbojas. TaÄu ne visiem uzÅÄmumiem ir iespÄja bieži uzsÄkt Å”Ädus projektus. Lai gan arÄ« tas ir nedaudz dÄ«vaini, jo tagad notiek pilnÄ«ga digitÄlÄ transformÄcija, ikvienam ir jÄuzsÄk eksperimenti, lai neatpaliktu no konkurentiem.
Å eit jÅ«s nonÄkat pie secinÄjuma, ka vispirms ir jÄsaprot, kas jums jÄdara. Pasaule nav ideÄla, un prod arÄ« nav ideÄls.
JÄ, Ŕīs lietas ir savstarpÄji saistÄ«tas.
ArÄ« uzÅÄmumi ne vienmÄr saprot, ka viÅiem tas ir jÄiet.
Ir situÄcija, kurÄ izmaiÅas vispÄr nav iespÄjamas. Å Ä« ir situÄcija, kad uz komandu ir lielÄks spiediens. Komanda jau ir diezgan izdegusi. ViÅai nav brÄ«va laika nekÄdiem eksperimentiem. ViÅi strÄdÄ pie funkcijÄm no rÄ«ta lÄ«dz vakaram. Un pÄrvaldÄ«bai ir arvien mazÄk funkciju. NepiecieÅ”ams arvien vairÄk. Å ÄdÄ situÄcijÄ nekÄdas izmaiÅas vispÄr nav iespÄjamas. Komandai var pateikt tikai to, ka rÄ«t darÄ«sim to paÅ”u, ko vakar, tikai vajag uztaisÄ«t nedaudz vairÄk funkciju. Å ajÄ ziÅÄ pÄreja uz jebkuru praksi nav iespÄjama. Å Ä« ir klasiska situÄcija, kad nav laika asinÄt cirvi, koki jÄcÄrt, tÄpÄc cirta ar blÄvu cirvi. Å eit nav vienkÄrÅ”u padomu.
(Dmitrijs) Es nolasÄ«Å”u paskaidrojumu no tÄrzÄÅ”anas: āBet mums ir nepiecieÅ”ams daudz testu dažÄdos lÄ«meÅos. Cik daudz laika tiek atvÄlÄts testiem? Tas ir nedaudz dÄrgi un aizÅem daudz laika. ā
(Oļegs) Tas ir klasisks nepareizs priekÅ”stats. PÄrbaudÄm vajadzÄtu bÅ«t pietiekami daudz, lai jÅ«s bÅ«tu pÄrliecinÄti. NepÄrtraukta integrÄcija nav tÄda lieta, kur vispirms tiek veikti 100% testu un tikai tad sÄc pielietot Å”o praksi. NepÄrtraukta integrÄcija samazina jÅ«su kognitÄ«vo slodzi, jo katra no izmaiÅÄm, ko redzat ar acÄ«m, ir tik acÄ«mredzama, ka pat bez pÄrbaudÄm jÅ«s saprotat, vai tÄ kaut ko sabojÄs vai nÄ. To var Ätri pÄrbaudÄ«t savÄ galvÄ, jo izmaiÅas ir nelielas. Pat ja jums ir tikai manuÄli testÄtÄji, arÄ« viÅiem tas ir vieglÄk. JÅ«s izskrÄjÄt un teicÄt: "Redzi, vai kaut kas ir salÅ«zis?" ViÅi pÄrbaudÄ«ja un teica: "NÄ, nekas nav salauzts." Jo testÄtÄjs zina, kur meklÄt. Jums ir viena apÅemÅ”anÄs, kas saistÄ«ta ar vienu koda daļu. Un to izmanto Ä«paÅ”a uzvedÄ«ba.
Šeit jūs, protams, izpuŔķojat.
(Dmitrijs) Es Å”eit nepiekrÄ«tu. PastÄv prakse - testu vadÄ«ta izstrÄde, kas jÅ«s no tÄ pasargÄs.
(Oļegs) Nu, es vÄl neesmu sasniedzis to punktu. PirmÄ ilÅ«zija ir tÄda, ka jums ir jÄraksta 100% testu vai arÄ« jums vispÄr nav jÄveic nepÄrtraukta integrÄcija. TÄ nav patiesÄ«ba. TÄs ir divas paralÄlas prakses. Un tie nav tieÅ”i atkarÄ«gi. JÅ«su testa pÄrklÄjumam jÄbÅ«t optimÄlam. OptimÄli - tas nozÄ«mÄ, ka jÅ«s pats esat pÄrliecinÄts, ka meistara kvalitÄte, kurÄ jÅ«su meistars palika pÄc apÅemÅ”anÄs, ļauj pÄrliecinoÅ”i nospiest pogu āIzvietotā dzÄrumÄ piektdienas vakarÄ. KÄ jÅ«s to panÄkat? Izmantojot pÄrskatÄ«Å”anu, pÄrklÄjumu, labu uzraudzÄ«bu.
Labu uzraudzÄ«bu nevar atŔķirt no testiem. Ja vienreiz palaižat testus ar preprod, tie vienreiz pÄrbauda visus jÅ«su lietotÄja skriptus, un viss. Un, ja jÅ«s tos palaižat bezgalÄ«gÄ cilpÄ, tad Ŕī ir jÅ«su izvietotÄ uzraudzÄ«bas sistÄma, kas bezgalÄ«gi pÄrbauda visu ā vai tÄ ir avarÄjusi vai nÄ. Å ajÄ gadÄ«jumÄ vienÄ«gÄ atŔķirÄ«ba ir, vai tas tiek darÄ«ts vienu vai divas reizes. Ä»oti labs testu komplekts... darbojas bezgalÄ«gi, tÄ ir uzraudzÄ«ba. Un pareizai uzraudzÄ«bai vajadzÄtu bÅ«t Å”Ädai.
Un tÄpÄc, kÄ tieÅ”i tu sasniegsi Å”o stÄvokli, kad piektdienas vakarÄ sataisÄ«sies un dosies mÄjÄs, ir cits jautÄjums. VarbÅ«t jÅ«s vienkÄrÅ”i esat drosmÄ«gs Å”vacis.
Nedaudz atgriezÄ«simies pie nepÄrtrauktas integrÄcijas. MÄs aizbÄgÄm uz nedaudz atŔķirÄ«gu sarežģītu praksi.
Un otra ilÅ«zija ir tÄda, ka MVP, viÅi saka, ir jÄdara Ätri, tÄpÄc testi tur nemaz nav vajadzÄ«gi. Noteikti ne tÄdÄ veidÄ. Fakts ir tÄds, ka, rakstot lietotÄja stÄstu MVP, varat to izstrÄdÄt uz bumbas, tas ir, jÅ«s dzirdÄjÄt, ka ir kÄds lietotÄja stÄsts, un nekavÄjoties skrÄjÄt to kodÄt, vai arÄ« varat strÄdÄt, izmantojot TDD. Un saskaÅÄ ar TDD, kÄ liecina prakse, tas neaizÅem vairÄk laika, t.i., testi ir blakusparÄdÄ«ba. TDD prakse nav saistÄ«ta ar testÄÅ”anu. Neraugoties uz to, ko sauc par testu virzÄ«tu attÄ«stÄ«bu, tas vispÄr nav par testiem. TÄ arÄ« drÄ«zÄk ir arhitektoniska pieeja. Å Ä« ir pieeja rakstÄ«t tieÅ”i to, kas ir vajadzÄ«gs, un nerakstÄ«t to, kas nav vajadzÄ«gs. Å Ä« ir prakse koncentrÄties uz nÄkamo jÅ«su domÄÅ”anas atkÄrtojumu saistÄ«bÄ ar lietojumprogrammas arhitektÅ«ras izveidi.
TÄpÄc atbrÄ«voties no Ŕīm ilÅ«zijÄm nav tik vienkÄrÅ”i. MVP un testi nav pretrunÄ viens otram. Pat, drÄ«zÄk, tieÅ”i otrÄdi, ja jÅ«s veicat MVP, izmantojot TDD praksi, tad jÅ«s to izdarÄ«sit labÄk un ÄtrÄk nekÄ tad, ja darÄ«sit to vispÄr bez prakses, bet uz bumbas.
Å Ä« ir ļoti nepÄrprotama un sarežģīta ideja. Kad dzirdi, ka tagad rakstÄ«Å”u vairÄk kontroldarbus un pie reizes kaut ko izdarÄ«Å”u ÄtrÄk, izklausÄs absolÅ«ti neadekvÄti.
(Dmitrijs) Daudzi Å”eit, kad viÅi sauc par MVP, ir pÄrÄk slinki, lai uzrakstÄ«tu kaut ko normÄlu. Un tÄs joprojÄm ir dažÄdas lietas. Nav nepiecieÅ”ams pÄrvÄrst MVP par sliktu lietu, kas nedarbojas.
JÄ, jÄ, tev taisnÄ«ba.
Un tad pÄkÅ”Åi MVP prod.
Uz visiem laikiem.
Un TDD izklausÄs ļoti neparasti, kad dzirdat, ka rakstÄt testus un, Ŕķiet, darÄt vairÄk darba. IzklausÄs ļoti dÄ«vaini, bet patiesÄ«bÄ Å”Ädi sanÄk ÄtrÄk un glÄ«tÄk. Rakstot testu, tu jau savÄ galvÄ daudz domÄ par to, kÄds kods tiks izsaukts un kÄ, kÄ arÄ« kÄdu uzvedÄ«bu no tÄ sagaidÄm. JÅ«s vienkÄrÅ”i nesakiet, ka es uzrakstÄ«ju kÄdu funkciju, un tÄ kaut ko dara. SÄkumÄ tu domÄji, ka viÅai ir tÄdi un tÄdi nosacÄ«jumi, viÅa tiks aicinÄta tÄ un tÄ. JÅ«s to pÄrklÄjat ar testiem, un no tÄ jÅ«s saprotat, kÄ saskarnes izskatÄ«sies jÅ«su kodÄ. Tam ir milzÄ«ga ietekme uz arhitektÅ«ru. JÅ«su kods automÄtiski kļūst modulÄrÄks, jo vispirms mÄÄ£inÄt saprast, kÄ jÅ«s to pÄrbaudÄ«sit, un tikai pÄc tam rakstÄ«t.
Ar TDD ar mani notika tas, ka kÄdÄ brÄ«dÄ« es nolÄ«gu Ruby mentoru, kad vÄl biju Ruby programmÄtÄjs. Un viÅÅ” saka: "DarÄ«sim to saskaÅÄ ar TDD." Es domÄju: "SasodÄ«ts, tagad man ir jÄuzraksta kaut kas papildus." Un mÄs vienojÄmies, ka divu nedÄļu laikÄ es uzrakstÄ«Å”u visu darba kodu Python, izmantojot TDD. PÄc divÄm nedÄļÄm es sapratu, ka nevÄlos atgriezties. PÄc divÄm nedÄļÄm, mÄÄ£inot to pielietot visur, jÅ«s saprotat, cik daudz vieglÄk jums ir kļuvis pat vienkÄrÅ”i domÄt. Bet tas nav acÄ«mredzami, tÄpÄc iesaku ikvienam, ja jums ir sajÅ«ta, ka TDD ir grÅ«ts, laikietilpÄ«gs un nevajadzÄ«gs, mÄÄ£iniet to pieturÄties tikai divas nedÄļas. Man pietika ar diviem.
(Dmitrijs) MÄs varam paplaÅ”inÄt Å”o ideju no infrastruktÅ«ras darbÄ«bas viedokļa. Pirms sÄkam kaut ko jaunu, mÄs veicam pÄrraudzÄ«bu un pÄc tam palaižam. Å ajÄ gadÄ«jumÄ uzraudzÄ«ba mums kļūst par parastu pÄrbaudi. Un ar monitoringu notiek attÄ«stÄ«ba. Bet gandrÄ«z visi saka, ka tas ir garÅ”, es esmu slinks, es izveidoju pagaidu melnrakstu. Ja esam veikuÅ”i normÄlu uzraudzÄ«bu, mÄs saprotam CI sistÄmas stÄvokli. Un CI sistÄmai ir daudz uzraudzÄ«bas. MÄs saprotam sistÄmas stÄvokli, saprotam, kas tajÄ atrodas. Un izstrÄdes laikÄ mÄs tikai veidojam sistÄmu, lai tÄ sasniegtu vÄlamo stÄvokli.
Å Ä«s metodes ir zinÄmas jau ilgu laiku. MÄs to apspriedÄm apmÄram pirms 4 gadiem. Bet 4 gadu laikÄ praktiski nekas nav mainÄ«jies.
Bet Å”ajÄ sakarÄ es ierosinu beigt oficiÄlo diskusiju.
Video (ievietots kÄ multivides elements, bet kaut kÄdu iemeslu dÄļ nedarbojas):