• Like
Uploaded on

Tai paskaita lietuvių kalba apie TDD (test driven development). Ji skirta supažindinti studentus su TDD pagrindais. Subalansuota mažai patyrusiems (buvo skaityta antrakursiams).

Tai paskaita lietuvių kalba apie TDD (test driven development). Ji skirta supažindinti studentus su TDD pagrindais. Subalansuota mažai patyrusiems (buvo skaityta antrakursiams).

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
155
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Apibrezimasnesvarbu – svarbuesmeDideleklaidayra TDD laikytitestavimotechnikaWikipedia kazkodelprilyginaprocesams: waterfall, scrum, kanban, RUP.. Tai netiesaKilo is 1999 metais is XP programavimotechniku, atgime 2003
  • Tai nerabuzzwordas, kuris ateinairpraeina
  • Gal esminis niuansas kad neparodyta pradziaVisu pirma tai yra iteratyvus procesas (ir iteracijos be galo mazos)Parasius programos koda negalima sustoti! Tai viena daznesniu klaidu.Refactorinti reikia ir programos koda, bet daug dazniau – testo koda.Zodynelis: - zalias testas ir “pazaliuoti” - analogiskai raudonas testas ir “paraudonuoti” - assertas - mockas - setupas - refactoringas
  • Programeriai daznaipradeda dometis TDD kai buna per velu. Apie TDD pradedama kalbeti kai klaidu kiekis pasiekes kritine riba.Vat jeigu turetume testu... Dabar tai ju negalime rasyti, nes kodo yra tiesiog per daug.Jie turi didele kauge nevaldomo kodo, kuri vadina legacy. Ji suprogramavo “kazkas”.
  • TDD sumazina klaidu kieki, kodas buna padengtas testais. Tai leidzia daryti didelius pakeitimus saugiau.TDD savaime garantuoja “testuojama” koda. Testuojamas kodas dazniausiai buna gero dizaino.Dirbant TDD mastoma ne tik apie tai kaip, kodas veiks. Bet daug svarbiau kad mastoma kaip kodas bus panaudotas. Tobulas variantas ishgryninant API.
  • Aksioma: programine iranga pastoviai nuverteja: - palaikymas kainuoja - konkurencinis pranasumas mazeja (vejasi konkurentai)Vienintelis budas islaikyti verte – vystyti sistema nauji featurai kaip taisykle brangsta atsiranda neimanomu featuru klaidos erzina (mazas pakeitimas sugriauna visa sistema) blogas dizainas kerta atgal
  • Defacto – tai tampa techniniu standartuLietuvoje – tai pliusas juniorui, regular developeriui neismanymas – minusasArba turi moketi naudoti, arba pateikti gerus argumentus ir tu esi nusipelnes senioro kedesJeigu nekvepuojat TDD i google geriau neiti
  • Jeigu taip nuostabu – tai visi turetu naudoti, taip? Ne.. Is tiesu net rimtos kompanijos kankinasi su testais o tada su TDD
  • Nemoka rasyti testuAtrodo visi raso TDD, bet rasti gerus testus yra issukis. Jie subalansuoti nevisiskai ismintingiems. Reikia genijaus kad sudetinga logika aprasyti paprastu testu. Gimsta frameworkai, kurie netinka testams.Pavizdyje 50 eiluciu kodo, 150 testamsTai kas galima jupiteriui negalima jauciui. Testai nelaikomi rimtu kodu, todel ten galima viskas. Harcodinimas yra viena is pirmuju nuodemiu.
  • Vienas is pagrindiniu TDD pliusu, kad testai tampa “programuotoju” dokumentacija. Ji automatiskai priziurima.Daznai atsakant i klausima “o kaip pas mus veikia sitai” yra tikrinamas arba rasomas testas.Kas sunkiau: rasyti koda ar skaityti?? - Rasyti bloga koda yra lengviau, nei skaityti. - Skaityti gera koda yra lengviau, nei parasyti.Magic numbers, mockinimo pragaras, testai per N puslapiu...
  • Kuo maziau kodo – tuo lengviau ji suprastiKuo maziau kodo – tuo maziau buguNaudingiausi programuotojai yra tie, kurie trina kodaTai dazniausiai daro seniorai
  • Dirbant TDD dirbama leciau. Tai be galo erzina versla. Pagrindine fraze cia “mums neduoda laiko”Reikia kalbetis – ar tikrai nera laiko dirbti kokybiskai? Bet klaidas taisyti laiko yra?Viskas susiveda i kastus. Pagrindine mintis cia: kad TDD pakelia pradine kaina, bet ilgainiui atsiperka. Pateikiami skaiciai yra spekuliatyvus.Didziausia beda kad galima dirbti pseudo TDD, moketi didesnius kastus bet naudos negauti.
  • Zealotai nori TDD taikyti visur ir visada.Egzistuoja sioks toks judejimas, kuris neigia 100% TDD nauda. Beda kad prie ju sliejasi troliai, kurie neigia TDD apskritai.Beda, kad nemazai argumentu ateina is neismanymo.Kai testai rasomi po kodo, tai daromos nuolaidos – ne viska ruosiamasi testuoti, kai kurios kodo atsakos praleidziamos kaip trivialios.TDD atveju testai yra “specifikacija” kodui. Jeigu nera testo – nera poreikio atsirasti testui. Pacio kodo testavimas yra salutinis TDD efektas.Zealotu teigimu vienintelis atvejis, kai nereikia TDD, tai kai turite geniju komanda kurie nedaro klaidu.
  • Mano nuomone!! tiesa yra sudetinga.Vienas is pavyzdziu kur nereikia TDD yra prototipai.Kai kada, del darbo greicio tenka “nukirsti kampus” TDD metodologijoje.Jeigu susiruosite lauzyti taisykles, zinokite kad pvz as nusprendes “kirsti kampa” 80% atveju suklystu :)

Transcript

  • 1. TDD Test Driven DevelopmentVISIT OUR BLOG: adform.comTWITTER: adforminsider
  • 2. TDDKas tai yra? 3
  • 3. TDD nėra buzzword’asSveiki, aš jūsų teta. Aš pas jus gyvensiu... TDD cloud 4
  • 4. TDDVisa paskaita vienoje skaidrėje 5
  • 5. pridarė klaidų gavo velnių atrodo negražiaibaisu! 6
  • 6. jaustis saugiairašyti elegantišką kodąbūti specialistu smagu! 7
  • 7. laikas 8
  • 8. Google? 9
  • 9. Kodėl TDD nenaudojamas? test Programuotojai  Įgūdžių trūkumas  Prasti pavyzdžiai code refactor  Daugiau kodo  Kodo standartai
  • 10. 12
  • 11. Primityviai blogas testas TOO ABSTRACT MAGIC NUMBERS[Test]public void AssertThat_DividesProperly(){ var calc = new DecimalCalculator(16, 8, false); Assert.That(calc.Divide(2,3), Is.EqualTo(0.666666m) );}[Test]public void WhenConfigured_DoesNotRoundLastDigit(){ var calc = new DecimalCalculator( digits: 16, precision: 8, round: false); Assert.That(calc.Divide(2,3), Is.EqualTo(0.666666m) );}
  • 12. (ne) Įkvepiantys TDD pavyzdžiai [Test] public void Given_2_and_3_Returns_5() { Assert.That(Math.Sum(2, 3), Is.EqualTo(5)); } [Test] public static int Sum(int a, int b) void Given_0_and_0_Returns_0() { Assert.That(Math.Sum(0, 0), Is.EqualTo(0)); return 5; } [Test] public void Given_2_and_minus3_Returns_minus1() { Assert.That(Math.Sum(2, -3), Is.EqualTo(-1)); }
  • 13. 15
  • 14. Kodėl TDD nenaudojamas? test Programuotojai  Įgūdžių trūkumas  Prasti pavyzdžiai code refactor  Daugiau kodo  Kodo standartai Biznis  Time to Market Studentai  A ką aš žinau?
  • 15. RadikalaiMy life for TDD! 17
  • 16. Programavimo demoVisual Studio 2010 + ReSharper + NUnit 19
  • 17. Programavimo demoGreg Young ir jo “stop loss” kata Prekyba biržoje Akcijų kaina šokinėja  Kainos pokyčio kryptis  Nuostabu kai kyla  Parduoti kai stabiliai krenta Tai nėra tikroji Grego kata! 20
  • 18. 21