Quer apostar?
2 nasceram no mesmo dia!
Monday, November 12, 12
Slide 4
Slide 4 text
Quais as chances
disso acontecer?
Monday, November 12, 12
Slide 5
Slide 5 text
Quantos dias tem 1 ano?
Monday, November 12, 12
Slide 6
Slide 6 text
Monday, November 12, 12
Slide 7
Slide 7 text
365.26
?
Monday, November 12, 12
Slide 8
Slide 8 text
Vamos arrendondar...
366 dias
(considerando 29/02)
Monday, November 12, 12
Slide 9
Slide 9 text
100% de chance ==
367 pessoas.
Monday, November 12, 12
Slide 10
Slide 10 text
The birthday
paradox
The birthday
paradox
Monday, November 12, 12
Slide 11
Slide 11 text
Monday, November 12, 12
Slide 12
Slide 12 text
Bizarro? Combinatorics.
Nosso cérebro não tem o hardware...
Monday, November 12, 12
Slide 13
Slide 13 text
Não conseguimos pensar
no todo o tempo todo.
Monday, November 12, 12
Slide 14
Slide 14 text
Um dos motivos para o
BDUF ser ineficiente?
Monday, November 12, 12
Slide 15
Slide 15 text
Qual a pergunta certa?
Monday, November 12, 12
Slide 16
Slide 16 text
Qual a melhor forma de
encarar o problema?
Monday, November 12, 12
Slide 17
Slide 17 text
Um teste de unidade
pode ajudar a mostrar o
real problema.
Monday, November 12, 12
Slide 18
Slide 18 text
Teste de Unidade
Isolado do restante do sistema
Foco no detalhe
Monday, November 12, 12
Slide 19
Slide 19 text
Unit Test ajuda a
quebrar a inércia.
Monday, November 12, 12
Slide 20
Slide 20 text
Mas testar ANTES?
Testar o que?
Monday, November 12, 12
Slide 21
Slide 21 text
Precisa estabelecer o
problema.
Monday, November 12, 12
Slide 22
Slide 22 text
Problema: invocar métodos
dinamicamente.
Monday, November 12, 12
Slide 23
Slide 23 text
Conhecimento sobre o que
realmente quero.
Monday, November 12, 12
Slide 24
Slide 24 text
Teste == confiança?
Monday, November 12, 12
Slide 25
Slide 25 text
Teste == prova que funciona?
Monday, November 12, 12
Slide 26
Slide 26 text
Meio polêmico...
mas teste é auto-defesa.
confiança++ && proteção++
Monday, November 12, 12
Slide 27
Slide 27 text
O “teste antes“
cria uma fronteira.
Monday, November 12, 12
Slide 28
Slide 28 text
Semelhanças com
metalidade ágil...
Monday, November 12, 12
Slide 29
Slide 29 text
Dentro dessa fronteira a
arquitetura pode emergir.
Monday, November 12, 12
Slide 30
Slide 30 text
Maurício
Aniche
Monday, November 12, 12
Slide 31
Slide 31 text
Maurício
Aniche
Monday, November 12, 12
Slide 32
Slide 32 text
TDD no
Mundo Real
Monday, November 12, 12
Slide 33
Slide 33 text
xUnit é ferramenta
Monday, November 12, 12
Slide 34
Slide 34 text
Kent Beck
JUnit
(xUnit)
public void testSomething() {
Robot mandy = new Robot();
String said = mand.say();
assertEquals("Hello World, blip", said);
}
Monday, November 12, 12
Slide 35
Slide 35 text
Um ótimo jeito de aprender
uma nova linguagem:
escrever um framework
xUnit nessa linguagem.
Monday, November 12, 12
Slide 36
Slide 36 text
Ruby?
Monday, November 12, 12
Slide 37
Slide 37 text
Ruby!
# comentario
def hello
"hello world"
end
puts hello # mostra hello
Monday, November 12, 12
Slide 38
Slide 38 text
Ruby
class Robot
def say(to_someone)
"hello #{to_someone}"
end
end
# parenteses (quase sempre) opcionais
puts mandy.say "Valeriano"
mandy = Robot.new
said = mandy.say("Ricardo")
puts said # mostra 'hello Ricardo'
Monday, November 12, 12
Slide 39
Slide 39 text
Ruby
class Robot
def initialize(name)
@name = name
end
end
robot = Robot.new("mandy")
def whoami
@name
end
puts robot.whoami # exibe 'mandy'
Monday, November 12, 12
Slide 40
Slide 40 text
Ruby
class Robot
def is_active?
true
end
end
mandy = Robot.new
if mandy.is_active?
puts "Mandy is active! :D"
end
# exibe Mandy is active! :D
Monday, November 12, 12
Slide 41
Slide 41 text
Ruby
begin
rescue => e
puts e.message
end
raise "OMG! Y U NO WORK!?"
# "OMG! Y U NO WORK!?"
Monday, November 12, 12
Slide 42
Slide 42 text
Mas testar ANTES?
Testar o que?
Monday, November 12, 12
Slide 43
Slide 43 text
Problema: invocar métodos
dinamicamente.
Monday, November 12, 12
Slide 44
Slide 44 text
Já tinha esquecido?
Eu também...
Monday, November 12, 12
Slide 45
Slide 45 text
teste = InvocadorDeMetodos("meu_metodo")
Definindo uma interface
Como eu gostaria que fosse?
puts teste.invocou? # false!
teste.invoca
puts teste.invocou? # true!
Monday, November 12, 12
Slide 46
Slide 46 text
Monday, November 12, 12
Slide 47
Slide 47 text
red green refactor
escreva um
teste que
falha
faça o teste
passar
refatore
Monday, November 12, 12
Slide 48
Slide 48 text
Baby Steps
Baby Steps
Monday, November 12, 12
Slide 49
Slide 49 text
Free NOD* Protection
* Nostradamus Oriented Development
a.k.a. “e se?”
Monday, November 12, 12
Slide 50
Slide 50 text
Uma classe.
Dois comportamentos.
Monday, November 12, 12
Slide 51
Slide 51 text
xprogramming.com
Test everything; eliminate duplication; express all ideas;
minimize entities:These few simple rules, applied locally,
can help a high quality global design to emerge.
Monday, November 12, 12
Slide 52
Slide 52 text
Uma classe.
Duas responsabilidades.
Monday, November 12, 12
Slide 53
Slide 53 text
Testes == Confiança.
Vamos refatorar.
Sem dó! XD
Monday, November 12, 12
TRUE || FALSE
Qual dos dois é melhor?
Monday, November 12, 12
Slide 62
Slide 62 text
assert(something)
Monday, November 12, 12
Slide 63
Slide 63 text
Monday, November 12, 12
Slide 64
Slide 64 text
red green refactor
escreva um
teste que
falha
faça o teste
passar
refatore
Monday, November 12, 12
Slide 65
Slide 65 text
xprogramming.com
Test everything; eliminate duplication; express all ideas;
minimize entities:These few simple rules, applied locally,
can help a high quality global design to emerge.
Monday, November 12, 12
Slide 66
Slide 66 text
Classe para rodar testes?
TestCase!
Monday, November 12, 12
Slide 67
Slide 67 text
Monday, November 12, 12
Slide 68
Slide 68 text
Monday, November 12, 12
Slide 69
Slide 69 text
Testar TUDO?
E aquele ‘puts “...”’ maroto
ali?
Monday, November 12, 12
Slide 70
Slide 70 text
Monday, November 12, 12
Slide 71
Slide 71 text
Todo código de produção
Monday, November 12, 12
Slide 72
Slide 72 text
Teste == confiança! =)
Monday, November 12, 12
Slide 73
Slide 73 text
Arrange
Act
Assert
Monday, November 12, 12
Slide 74
Slide 74 text
teste = TesteRodou.new "meu_metodo"
teste.run
assert(teste.rodou?)
Arrange
Act
Assert
Monday, November 12, 12
Slide 75
Slide 75 text
Arrange? xUnit: setup
class TestClassForTestCase < TestCase
def setup
@teste = TesteRodou.new "meu_metodo"
end
def test_run
assert([email protected]?)
@teste.run
assert(@teste.rodou?)
end
end
Monday, November 12, 12
Slide 76
Slide 76 text
Monday, November 12, 12
Slide 77
Slide 77 text
red green refactor
escreva um
teste que
falha
faça o teste
passar
refatore
refatore os
testes
Monday, November 12, 12
Slide 78
Slide 78 text
Os testes estão me dizendo
algo importante?
Monday, November 12, 12
Slide 79
Slide 79 text
Código de teste deve
comunicar objetivo.
Monday, November 12, 12
Slide 80
Slide 80 text
Ritmo
Monday, November 12, 12
Slide 81
Slide 81 text
Quero comunicar isso
no código do teste.
Monday, November 12, 12
Slide 82
Slide 82 text
Monday, November 12, 12
Slide 83
Slide 83 text
Arrange
Act
Assert
Monday, November 12, 12
Slide 84
Slide 84 text
Sempre testar um estado
conhecido/previsível.
Monday, November 12, 12
Slide 85
Slide 85 text
Monday, November 12, 12
Slide 86
Slide 86 text
“rollback” :: xUnit ::
tearDown
Monday, November 12, 12
Slide 87
Slide 87 text
Monday, November 12, 12
Slide 88
Slide 88 text
O teste tem que dar
feedback.
Monday, November 12, 12
Slide 89
Slide 89 text
Monday, November 12, 12
Slide 90
Slide 90 text
Monday, November 12, 12
Slide 91
Slide 91 text
Monday, November 12, 12
Slide 92
Slide 92 text
Monday, November 12, 12
Slide 93
Slide 93 text
Todos os testes rodaram?
E quantos falharam?
Monday, November 12, 12
Slide 94
Slide 94 text
Monday, November 12, 12
Slide 95
Slide 95 text
E se o código testado
der problema?
Monday, November 12, 12
Slide 96
Slide 96 text
A TestCase só invoca.
Não controla o método.
Monday, November 12, 12
Slide 97
Slide 97 text
Se sou eu que invoco,
o problema é meu!
Monday, November 12, 12
Slide 98
Slide 98 text
Monday, November 12, 12
Slide 99
Slide 99 text
A classe TestCase
já sabe gerar feedback.
Monday, November 12, 12
Slide 100
Slide 100 text
Mas os meus testes não
estão gerando nenhum. =/
Monday, November 12, 12