JavaRush /Java Blog /Random-TK /TDD we birlik synagy näme [terjime]
Dr-John Zoidberg
Dereje
Марс

TDD we birlik synagy näme [terjime]

Toparda çap edildi
Bu makala, programma üpjünçiliginiň doly gollanmasy atly kitabyň bir bölüminiň uýgunlaşmasydyr. Authorazyjy Jon Sonmez muny ýazýar we web sahypasynda käbir bölümleri ýerleşdirýär.
TDD we birlik synagy näme [terjime] - 1

Täze başlanlar üçin gysga sözlügi

Bölüm synagy ýa-da birlik synagy, programmanyň deslapky kodunyň aýry-aýry modullaryny dogrulygyny barlamaga mümkinçilik berýän programmirleme prosesi. Bu pikir, ähmiýetsiz her bir funksiýa ýa-da usul üçin synag ýazmakdyr. Regressiýa synagy, deslapky koduň eýýäm synagdan geçen ýerlerinde ýalňyşlyklary ýüze çykarmaga gönükdirilen programma üpjünçiliginiň ähli görnüşleri üçin umumy at. Şeýle ýalňyşlyklar - programma üýtgetme girizensoň, işlemegini dowam etdirmeli bir zat işlemegini bes edeninde regressiýa ýalňyşlyklary diýilýär. Gyzyl netije, şowsuzlyk - synagyň şowsuzlygy. Garaşylýan netije bilen hakyky netijäniň arasyndaky tapawut. Greenaşyl netije, geçiş - oňyn synag netijesi. Hakyky netije alnanlardan tapawudy ýok. ***
TDD we birlik synagy näme [terjime] - 2
Test Driven Development (TDD) we birlik synagy bilen gaty garyşyk gatnaşygym bar, söýgüden ýigrenç we ýene-de yza gaýdyp barýaryn. Men höwes bilen janköýer boldum we şol bir wagtyň özünde munuň we beýleki “iň oňat tejribeleriň” ulanylmagyna şübheli şübheli garadym. Meniň garaýşymyň sebäbi, programma üpjünçiligini işläp düzmek prosesinde çynlakaý meseläniň ýüze çykmagyna esaslanýar: işläp düzüjiler we käwagt dolandyryjylar käbir gurallary we usulyýetleri diňe “öňdebaryjy tejribä” degişlidigi sebäpli ulanýarlar. Ulanylmagynyň asyl sebäbi entek belli däl. Bir gün belli bir taslamanyň üstünde işläp başladym we bu prosesde köp sanly synag synaglary bilen gurşalan kody üýtgedjekdigimizi habar berdiler. Degişme ýok, olardan 3000 töweregi bardy. Bu, adatça gowy alamat, işläp düzüjileriň ösen metodologiýalary ulanýandygynyň alamaty. Bu çemeleşme bilen kod köplenç gurluşly bolup, oýlanyşykly arhitektura esaslanýar. Bir söz bilen aýdylanda, synaglaryň bolmagy meni begendirdi, sebäbi diňe programmistleriň halypasy hökmünde işimi aňsatlaşdyrýan bolsa. Bizde eýýäm birlik synaglary bolansoň, etmeli zadym, olary goldamak we öz kodumyzy ýazyp başlamak üçin ösüş toparyny birikdirmekdi. IDE (integrirlenen ösüş gurşawy) açdym we taslama ýükledim.
TDD we birlik synagy näme [terjime] - 3
Bu uly taslama! "Bölüm synaglary" diýen bukjany tapdym. “Ajaýyp” diýip pikir etdim. - Geliň, nämäniň bolup geçýändigini göreliň. Diňe birnäçe minut gerek boldy we geň galdym, synaglaryň hemmesi geçdi, hemme zat ýaşyl boldy ( "ýaşyl" synagyň oňyn netijesi. Koduň garaşylşy ýaly işleýändigini görkezýär. Gyzyl "şowsuzlygy" ýa-da şowsuzlygy görkezýär, soň kody dogry işlemeýän bir ýagdaý bar - terjimeçiniň belligi ). Olaryň hemmesi synagdan geçdiler. Şol pursat içimdäki şübheli oýandy. Üç müň birlik synagy nädip geldi we hemmesini birbada aldylar - we oňyn netije berdiler? Uzak tejribämde, kodda ýekeje negatiw birlik synagy bolmazdan bir taslama üstünde işlän wagtym ýadyma düşenok. Näme etmeli? El bilen barlaň! ChY iň bir açyk däl-de, bir tötänleýin synagy saýlady, ýöne näme barlaýandygy derrew belli boldy. Itöne üstünde işläp ýörkäm, manysyz bir zady gördüm: synagda garaşylýan netije (tassyklamalar) bilen deňeşdirme ýokdy! Realityagny, aslynda hiç zat barlanmady ! Synagda käbir ädimler boldy, olar geçirildi, ýöne synagyň ahyrynda hakyky we garaşylýan netijeleri deňeşdirmeli ýerinde hiç hili barlag bolmady. "Synag" hiç zady synamady. Başga synag açdym. Has gowusy: netije bilen deňeşdirme operatory teswir edildi. Ajaýyp! Synag synagyny geçirmegiň ajaýyp usuly, diňe şowsuz bolmagyna sebäp bolýan kody düşündiriň. Başga synagy barladym, soň başga bir ... Olaryň hiç biri-de hiç zady barlamady. Üç müň synag, bularyň hemmesi düýbünden peýdasyz. Unitazuw bölüminiň synaglary bilen birlik synagyna we synag bilen dolandyrylýan ösüşe (TDD) düşünmegiň arasynda uly tapawut bar.

Bölüm synagy näme?

TDD we birlik synagy näme [terjime] - 4
Bölüm synagynyň esasy pikiri, koduň iň kiçi “birligini” barlaýan synaglary ýazmakdyr. Bölüm synaglary, adatça programmanyň deslapky kody bilen birmeňzeş programma dilinde ýazylýar. Bu kody barlamak üçin gönüden-göni döredilýär. Unitagny, birlik synaglary beýleki kodlaryň dogrulygyny barlaýan koddyr. “Synag” sözüni kontekstde has liberal ulanýaryn, sebäbi haýsydyr bir manyda birlik synaglary synag däl. Olar hiç zady başdan geçirmeýärler. Diýjek bolýan zadym, birlik synagyny geçireniňizde, adatça käbir kodlaryň işlemeýändigini görmersiňiz. Synag ýazylanda muny açarsyňyz, sebäbi synag ýaşyl bolýança kody üýtgedersiňiz. Hawa, kod soň üýtgäp biler we synagyňyz şowsuz bolup biler. Bu nukdaýnazardan, birlik synagy regressiýa synagydyr. Bölüm synagy adaty synaga meňzemeýär, bu ýerde birnäçe ädim ätmeli we programma üpjünçiliginiň dogry işleýändigini ýa-da işlemeýändigini görýärsiňiz. Bölüm synagyny ýazmagyň barşynda, koduň edilmeli ýa-da edilmeýändigini bilýärsiňiz we synag geçýänçä kody üýtgedersiňiz.
TDD we birlik synagy näme [terjime] - 5
Näme üçin birlik synagyny ýazyp, geçendigini barlamaly däl? Bu hakda pikir etseňiz, birlik synaglary gaty pes derejede belli bir kod modullary üçin haýsydyr bir mutlak talaplara öwrülýär. Bölüm synagyny mutlak spesifikasiýa diýip pikir edip bilersiňiz . Bölüm synagy, bu şertlerde, aýratyn girişler toplumy bilen, bu kod birliginden almaly netijäňiziň bardygyny kesgitleýär. Hakyky birlik synagy, programmirleme dilleriniň köpüsinde - iň bolmanda obýekte gönükdirilen - synp bolan iň kiçi sazlaşykly birligi kesgitleýär.

Käwagt birlik synagy näme diýilýär?

TDD we birlik synagy näme [terjime] - 6
Bölüm synagy köplenç integrasiýa synagy bilen bulaşýar. Käbir "birlik synaglary" birden köp synpy ýa-da uly kod birliklerini synagdan geçirýär. Öndürijileriň köpüsi, pes derejeli ak guty synaglaryny ýazanlarynda birlik synaglaryny ýazýandyklaryny öňe sürýärler. Bu ýigitler bilen jedel etme. Aslynda integrasiýa synaglaryny ýazýandyklaryny biliň we hakyky bölüm synaglary beýleki böleklerden üzňelikde iň kiçi kod birligini barlaýar. Köplenç birlik synagy diýilýän başga bir zat, garaşylýan bahany barlamazdan birlik synaglarydyr. Başgaça aýdylanda, aslynda hiç zady synamaýan birlik synaglary. Islendik synag, birleşdirilen ýa-da ýok, haýsydyr bir barlagy öz içine almalydyr - garaşylýan netijä garşy hakyky netijäni barlamak diýýäris. Hut şu barlyşyk synagyň geçýändigini ýa-da şowsuzdygyny kesgitleýär. Elmydama geçýän synag peýdasyz. Elmydama şowsuz bolan synag peýdasyz.

Bölüm synagynyň gymmaty

Näme üçin men birligi synamak höwesjeňi? Näme üçin beýleki kodlardan izolirlenen iň kiçi blok däl-de, has uly kod bölegi “birlik synagy” bar bolan umumylaşdyrylan synagy çagyrmak zyýanly? Käbir synaglarym alnan we garaşylýan netijeleri deňeşdirmese näme problema bar? Iň bolmanda kody ýerine ýetirýärler. Düşündirjek bolaryn.
TDD we birlik synagy näme [terjime] - 7
Bölüm synagyny geçirmegiň iki esasy sebäbi bar. Birinjisi, kod dizaýnyny gowulandyrmak. Bölüm synagy hakykatdanam synag däl diýendigimi ýadyňyzdamy? Dogry birlik synaglaryny ýazanyňyzda, koduň iň kiçi birligini izolirlemäge mejbur edýärsiňiz. Bu synanyşyklar, koduň gurluşynda kynçylyklary ýüze çykarmaga sebäp bolar. Synag synpyny izolirlemek we oňa baglylyklary goşmazlyk gaty kyn bolup biler we bu koduňyzyň gaty berk birikdirilendigine düşünip biler. Birnäçe modulda aralyklary barlamaga synanyşýan esasy funksiýaňyz, koduňyzyň ýeterlik derejede gabat gelmeýändigine ynanmaga sebäp bolup bilersiňiz. Bölüm synagyny ýazmak üçin oturanyňyzda, birden koduň näme etmelidigini bilmeýänligiňizi duýup bilersiňiz (we maňa ynanyň, şeýle bolýar!). Şoňa görä-de, munuň üçin birlik synagyny ýazyp bilmersiňiz. Elbetde, koduň ýerine ýetirilmeginde hakyky bir näsazlyk tapyp bilersiňiz, sebäbi bölüm synagy sizi gutynyň daşynda pikirlenmäge we göz öňünde tutmadyk dürli giriş toplumlaryny synamaga mejbur edýär.
TDD we birlik synagy näme [terjime] - 8
Bölüm synaglary döredilende “iň kiçi kod birligini beýlekilerden üzňe synap görüň” düzgünini berk berjaý etseňiz, şol kod we şol modullaryň dizaýny bilen baglanyşykly her dürli kynçylyk tapmaly bolarsyňyz. Programma üpjünçiligini işläp düzmek ömri siklinde, birlik synagy synag işine garanyňda baha beriş işidir. Bölüm synagynyň ikinji esasy maksady, programma üpjünçiliginiň özüni alyp barşynyň pes derejeli spesifikasiýasy hökmünde hereket edip biljek regress synaglarynyň awtomatiki toplumyny döretmekdir. Bu näme many berýär? Hamyry ýuganyňyzda, ony döwmersiňiz. Şu nukdaýnazardan, bölüm synaglary, has takygy regress synaglarydyr. Şeýle-de bolsa, birlik synagynyň maksady diňe regress synaglaryny gurmak däl. Iş ýüzünde, birlik synaglary regressiýalary seýrek tutýar, sebäbi barlaýan kod birligiňiziň üýtgemegi, hemişe diýen ýaly birlik synagynyň üýtgemelerini öz içine alýar. Regressiýa synagy has ýokary derejede, kod "gara guty" hökmünde synag edilende has täsirli bolýar, sebäbi bu derejede koduň içki gurluşy üýtgedilip bilner, daşarky hereketleriň üýtgemegine garaşylýar. Bölüm synaglary, öz gezeginde, gurluş üýtgese, birlik synaglary şowsuz bolmaz ýaly içerki gurluşy barlaýar. Olar ulanyp bolmaýar we indi üýtgedilmeli, taşlanmaly ýa-da täzeden ýazylmaly. Indi weteran programma üpjünçiligini döredijilere garanyňda birlik synagynyň hakyky maksady barada has köp bilýärsiňiz.

Synag bilen dolandyrylýan ösüş (TDD) näme?

TDD we birlik synagy näme [terjime] - 9
Programma üpjünçiligini işläp düzmekde, gowy spesifikasiýa altyn bilen agramyna deňdir. TDD çemeleşmesi, haýsydyr bir kod ýazmazdan ozal, spesifikasiýa bolup hyzmat etjek synag ýazmagyňyzdyr, ýagny koduň näme etmelidigini kesgitläň. Bu gaty güýçli programma üpjünçiligini ösdürmek düşünjesi, ýöne köplenç nädogry ulanylýar. Adatça, synagdan geçýän ösüş programma koduny döretmek üçin birlik synaglaryny ulanmagy aňladýar. Emma aslynda bu çemeleşme islendik derejede ulanylyp bilner. Şeýle-de bolsa, bu makalada amalymyz üçin birlik synagyny ulanýarys diýip çaklaýarys. TDD çemeleşmesi hemme zady kellesine öwürýär we ilki kod ýazmagyň ýerine, şol kody barlamak üçin birlik synaglaryny ýazmagyň ýerine ilki birlik synagyny ýazýarsyňyz, soň bolsa synagy ýaşyl etmek üçin kod ýazýarsyňyz. Şeýlelik bilen, kody işläp düzmek “sürüjileri” birlik synagy. Bu amal gaýtalanýar. Koduň näme etmelidiginiň has köp işleýşini kesgitleýän başga bir synag ýazýarsyňyz. Soňra synagyň üstünlikli tamamlanmagyny üpjün etmek üçin kod ýazýarsyňyz we üýtgedersiňiz. Greenaşyl netijä geleniňizden soň, kody gaýtadan üýtgedip başlaýarsyňyz, ýagny has gysga bolmagy üçin gaýtadan işledip ýa-da arassalap başlaýarsyňyz. Bu prosesler zynjyryna köplenç "Gyzyl-Greenaşyl-gaýtadan işleýji" diýilýär, sebäbi ilki birlik synagy şowsuz (gyzyl), soň bolsa kody synaga uýgunlaşmak üçin ýazylýar, üstünlikli (ýaşyl) we ahyrynda kod optimallaşdyrylýar ( gaýtadan işlemek).

TDD-iň maksady näme?

TDD we birlik synagy näme [terjime] - 10
Synag bilen dolandyrylýan ösüş (TDD), birlik synagy ýaly, nädogry ulanylyp bilner. Edýän zatlaryňyzy "TDD" diýip atlandyrmak we hatda näme üçin beýle edýändigiňize düşünmän praktikany ýerine ýetirmek gaty aňsat. TDD-iň iň uly gymmaty, hil aýratynlyklaryny öndürmek üçin synaglaryň geçirilmegi. TDD, aslynda kodlaşdyrma ýazylmazdan ozal awtomatiki barlap boljak takyk spesifikasiýalary ýazmak praktikasydyr. Synaglar iň gowy spesifikasiýa, sebäbi ýalan sözlemeýär. Iki hepde azapdan soň "asla meniň diýjek bolýan zadym däl" kody bilen size habar bermezler. Synaglar, dogry ýazylanda ýa geçýär ýa-da şowsuz bolýar. Synaglar belli bir şertlerde nämeleriň bolmalydygyny anyk görkezýär. Şeýlelik bilen, TDD-iň maksady, durmuşa geçirip başlamazdan ozal nämäni durmuşa geçirmelidigimize doly düşünmekdir. TDD-den başlasaňyz we synagyň nämäni synamalydygyny bilip bilmeseňiz, has köp sorag bermeli. TDD-iň başga bir möhüm roly, kod saklamak we optimizirlemekdir. Kod hyzmaty gaty gymmat. Iň gowy programmistiň haýsydyr bir meseläni çözýän iň gysga kod ýazýan adamdygyna köplenç degişýärin. Ora-da hatda bu meseläniň çözülmeginiň zerur däldigini subut edýän we şonuň bilen kody doly aýyrýan adam, sebäbi ýalňyşlyklaryň sanyny azaltmagyň we programmany goldamak üçin çykdajylary azaltmagyň dogry ýoluny tapan hut şu programmist. TDD ulanyp, zerur däl kod ýazmaýandygyňyza doly göz ýetirip bilersiňiz, sebäbi diňe synaglardan geçmek üçin kod ýazarsyňyz. YAGNI atly programma üpjünçiligini ösdürmek ýörelgesi bar (size gerek bolmaz). TDD YAGNI-iň öňüni alýar.

Adaty synag bilen dolandyrylýan ösüş (TDD) iş prosesi

TDD we birlik synagy näme [terjime] - 11
TDD-iň manysyna diňe akademiki nukdaýnazardan düşünmek kyn. Geliň, TDD sessiýasynyň mysalyna seredeliň. Stoluňyzda oturyp, ulanyja haýsydyr bir programma girmäge we ýatdan çykarsa parolyny üýtgetmäge mümkinçilik berýän aýratynlyk üçin ýokary derejeli dizaýn bolar öýdýän zadyňyzy çalt çyzyp görüň. Giriş funksiýasynyň ilkinji ýerine ýetirilişinden, giriş prosesi üçin ähli logikany dolandyrjak synp döredip başlarsyňyz. Halaýan redaktoryňyzy açýarsyňyz we "Boş giriş ulanyjynyň girmeginiň öňüni alýar" atly birlik synagyny döredýärsiňiz. Ilki bilen Giriş synpynyň mysalyny döredýän birlik synag koduny ýazýarsyňyz (entek döretmediňiz). Soňra Giriş synpynda boş ulanyjy adyny we parolyny geçirýän usula jaň etmek üçin kod ýazýarsyňyz. Netijede, garaşylýan netijä garşy çek ýazýarsyňyz, boş girişli ulanyjynyň hakykatdanam sessiýa açmandygyny barlaýarsyňyz. Synag geçirjek bolýarsyňyz, emma giriş synpyňyz ýoklygy sebäpli hatda düzülmeýär. Bu ýagdaýy düzedýärsiňiz we şol synpdaky giriş usuly we ulanyjynyň ýagdaýyny barlamak üçin giriş synpyny döredýärsiňiz. Şu wagta çenli bu synpyň işleýşini we bize zerur usuly durmuşa geçirmediňiz. Synagy şu wagt geçirýärsiňiz. Indi düzýär, ýöne derrew şowsuz bolýar.
TDD we birlik synagy näme [terjime] - 12
Indi koda gaýdyp, synagdan geçmek üçin funksiýany ýerine ýetirýärsiňiz. Biziň ýagdaýymyzda, bu netijäni almalydygymyzy aňladýar: "ulanyjy sessiýa açmady". Synagy täzeden geçirýärsiňiz, indi geçýär. Indiki synaga geçeliň. Indi "Ulanyjy dogry ulanyjy adyny we parolyny girizen bolsa, ulanyjy girýär" atly synag ýazmalydygyny göz öňüne getireliň. Giriş synpyny çaltlaşdyrýan we ulanyjy ady we paroly bilen girmäge synanyşýan birlik synagyny ýazýarsyňyz. Bölüm synagynda, Giriş synpynyň ulanyjynyň sessiýa açandygy ýa-da ýokdugy baradaky soraga “Hawa” jogap bermelidigi barada jümle ýazýarsyňyz. Bu täze synagy geçirýärsiňiz we elbetde şowsuz bolýar, sebäbi Giriş synpyňyz elmydama ulanyjynyň girmändigini görkezýär. Giriş synpyňyza gaýdyp gelýärsiňiz we ulanyjynyň girendigini barlamak üçin käbir kodlary ýerine ýetirýärsiňiz. Bu ýagdaýda bu moduly nädip izolirlemelidigini anyklamaly bolarsyňyz. Häzirlikçe muny amala aşyrmagyň iň aňsat usuly, synagyňyzda ulanan ulanyjy adyňyzy we parolyňyzy gaty kodlamakdyr we gabat gelýän bolsa "ulanyjy sessiýa açdy" netijesini yzyna gaýtaryň. Bu üýtgeşmäni edýärsiňiz, synaglaryň ikisini hem geçirýärsiňiz we ikisi hem geçýär. Iň soňky ädime geçeliň: döredilen koda seredýärsiňiz we üýtgedip gurmagyň we ýönekeýleşdirmegiň ýoluny gözleýärsiňiz. Şonuň üçin TDD algoritmi:
  1. Synag döretdi.
  2. Bu synag üçin kod ýazdyk.
  3. Kod üýtgedildi

Netijeler

TDD we birlik synagy näme [terjime] - 13
Bu etapda birlik synagy we TDD hakda size aýtmak islän zadym. Aslynda, kod modullaryny izolirlemäge synanyşmak bilen baglanyşykly köp kynçylyk bar, sebäbi kod gaty çylşyrymly we bulaşyk bolup biler. Doly izolýasiýada gaty az synp bar. Muňa derek, olaryň garaşlylygy bar, şol baglylyklaryň garaşlylygy bar we ş.m. Şeýle ýagdaýlary çözmek üçin TDD weterany, garaşly modullarda obýektleri çalyşmak bilen aýratyn synplary izolirlemäge kömek edýän masgaralary ulanýar. Bu makala diňe syn we TDD-ni synlamak we birneme ýönekeýleşdirilen giriş, aç-açan modullar we beýleki TDD usullary barada jikme-jik maglumat bermeris. Bu pikir, size häzir bar diýip umyt edýän TDD-iň esasy düşünjelerini we prinsiplerini bermek. Asyl - https://simpleprogrammer.com/2017/01/30/tdd-unit-testing/
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION