TDD drogą do oświecenia w Scali

39
TDD drogą do oświecenia w Scali Tomasz Borek Konrad Malawski SFI 2013

description

Tomek i Konrad w przeciągu tych 45 minut pokażą "o co tak na prawdę w tym TDD chodzi?" a przy okazji, spojrzą na język Scala. Okazuje się bowiem, iż cykl znany jako Red-Green-Refactor znany z Test Driven Design nie tylko pomaga tworzyć dobry kod, ale również jest niezwykle pomocy podczas nauki języków - wystarczy spojrzeć na popularne serie ćwiczeń o nazwie Koans, dostępne dla wielu języków programowania. Sesja ta powinna być najcenniejsza dla osób które nie doświadczyły jeszcze ćwiczeń programistycznych w formie Kata bądź Code Retreat lub nie parujących się na co-dzień w pracy.

Transcript of TDD drogą do oświecenia w Scali

Page 1: TDD drogą do oświecenia w Scali

TDDdrogą do oświecenia w

Scali

Tomasz BorekKonrad Malawski

SFI 2013

Page 2: TDD drogą do oświecenia w Scali
Page 3: TDD drogą do oświecenia w Scali

@gmail.com

Tomasz Borek

LAFK => lafkblogs.wordpress.com

Page 4: TDD drogą do oświecenia w Scali

Java?Python?Scala?APL?

Testing?

TDD?REAL TDD?

ADHD?

Show of Hands

Page 5: TDD drogą do oświecenia w Scali

testach,

Scali,

poznawanie przez testy,

narzędziach.

Dziś będzie o:

Page 6: TDD drogą do oświecenia w Scali

Scala - język

ScalaTest - DSL

SBT - Simple Build Tool

Mózga nawet dwa!

Narzędzia:

Page 7: TDD drogą do oświecenia w Scali

Droga do TDD

Brak Manualne "PO" "PRZED" TDD

Page 8: TDD drogą do oświecenia w Scali

Błąd kompilacji ma znaczenie.

tak, zdarza się, a czasem nawet jest potrzebne!

PRAWDZIWY cykl TDD

minimum koduby przeszło

Page 9: TDD drogą do oświecenia w Scali

AcceptanceTDD

TDDevelopment vs TDDesign

Żywa, krzycząca dokumentacja

Page 10: TDD drogą do oświecenia w Scali

ATDD, dla UFO

it should "..." in pending

it should "do things" in { // ...}

Page 11: TDD drogą do oświecenia w Scali

ATDD, dla UFO

Tests!

Page 12: TDD drogą do oświecenia w Scali

ATDD, dla Anime

Tests!

Page 13: TDD drogą do oświecenia w Scali

nie "gada z bazą"nie potrzeba mu Internetu,

szybki,odpowiednio nazwany,

jasny, przejrzysty, klarowny,testuje jedną rzecz, nie dwie, nie tysiąc

Test jednostkowy

Page 14: TDD drogą do oświecenia w Scali

Struktura testubehaviour of "Something" it should "have expressive name" in { // given val anObject : UnderTest = new UnderTest();

// when val result = anObject.testedMethod();

// then result should be ("expressive");}

Page 15: TDD drogą do oświecenia w Scali

Struktura testubehaviour of "Something" it should "have expressive name" in { // given val anObject = new UnderTest

// when val result = anObject.testedMethod()

// then result should be ("expressive")}

Page 16: TDD drogą do oświecenia w Scali

The stairway to Scala...

Page 17: TDD drogą do oświecenia w Scali

... or highway to hell?

Page 18: TDD drogą do oświecenia w Scali

Scala is...

Simple,but

Hard.

Page 19: TDD drogą do oświecenia w Scali

Scala to język...

Funkcyjny,Obiektowy,

Statycznie typowany,idealny dla DSLi,

na JVMie,by Martin Odersky

Page 20: TDD drogą do oświecenia w Scali

Scala Collections

Page 21: TDD drogą do oświecenia w Scali

Scala Basics & Collections

def greet(p: Person) = println(s"Hello ${p.name}")

val people = List(tomek, konrad)

people foreach { person => greet(person)}

Page 22: TDD drogą do oświecenia w Scali

Scala Basics & Collections

val people: List[Person]def greet(p: Person)

people foreach { greet }

people foreach greet

Page 23: TDD drogą do oświecenia w Scali

Scala REPL

ReadEvaluate

PrintLoop

Eksplorowanie uzupełnia Testowanie

Page 24: TDD drogą do oświecenia w Scali

Scala Basics & Collections

Tests!

Page 25: TDD drogą do oświecenia w Scali

Cechy = Traits

object with wizard traits

object with nerd and wizard traits

object with ranger traits

Page 26: TDD drogą do oświecenia w Scali

Damage? Dice!

Page 27: TDD drogą do oświecenia w Scali

Cechy = Traits

class D6Dice extends RealDice(maxRoll = 6)

object D6 extends D6Dice

object P6 extends D6Dice with PredictableDice

Page 28: TDD drogą do oświecenia w Scali

Cechy = Traits

behavior of "Weapon"

it should "hit to cause damage"

behavior of "SimpleSword"

it should "cause D6 damage"

Page 29: TDD drogą do oświecenia w Scali

Cechy = Traits

Tests!

Page 30: TDD drogą do oświecenia w Scali

Cechy = Traits

behavior of "SimpleAxe"

it should "cause D6 damage"

// Axe, Sword... behave like Weapon

Page 31: TDD drogą do oświecenia w Scali

Cechy = Traits

Tests!

Page 32: TDD drogą do oświecenia w Scali

Cechy = Traits

behavior of "+10 DMG Axe"

it should "always cause > 10 damage"

Page 33: TDD drogą do oświecenia w Scali

Cechy = Traits

Tests!

Page 34: TDD drogą do oświecenia w Scali

Cechy = Traits

behavior of "Sword of Nyarlathotep"

it should "roll DMG using D20"it should "have base damage +10 DMG"it should "add 'panic' magic effect"

Page 35: TDD drogą do oświecenia w Scali

● DSLs,

● Collections,

● Pattern Matching,

● Traits

Podsumowanie - Scala

Page 36: TDD drogą do oświecenia w Scali

behaviour of "scala"

it should "ask them politely" in pending

it should "ask them loudly" in pending

it should "go eat" in pending

● SBT,

● REPL,

● ScalaTest,

● FlatSpec,

● Should Matchers,

● Live Templates

Podsumowanie - Narzędzia

Page 37: TDD drogą do oświecenia w Scali

● Droga do TDD● Testy przed != TDD● Cykl

● Błąd kompilacji == Pierwszy Red● Testy jednostkowe, nie integracyjne

● Testy jako Dokumentacja

● Given When Then

Podsumowanie - Testy

Page 38: TDD drogą do oświecenia w Scali

● SCKRK / Code Kata / Kraków Scala

● Tomasz Kaczanowski - practicalunittesting.com

● ScalaTest docs

● Scala docs

● Martin Odersky - Programming in Scala● Cay Horstmann - Scala for The Impatient● "Bruce Eckel's Atomic Scala" in pending ...

Podsumowanie - Linki

Page 39: TDD drogą do oświecenia w Scali

THANKS!

// todo implement thisbehaviour of "those who ask questions"

they should "ask them politely" in pending

they should "ask them loudly" in pending

they should "go eat" in pending

Konrad Malawski - twitter: @ktosoplTomasz Borek - @gmail.com

SFI 2013