Behaviour Driven Development

1.098 visualizações

Publicada em

Apresentação sobre automação de testes, rspec e cucumbe feita para alunos da UFPB.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.098
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
15
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Behaviour Driven Development

  1. 1. Maurício Linhares<br />Behaviourdrivendevelopment e automação com Rspec e Cucumber<br />
  2. 2. Quem?<br />Maurício Linhares<br />Consultor da Hoodiny (Miami, FL)<br />JUG Leader do PBJUG<br />Atualmente RubyZealot<br />Ex Java Zealot<br />Instrutor na LinuxFi<br />Ex vocalista de banda de Heavy Metal<br />Jogador de RPG de mesa e boardgames nas horas vagas<br />
  3. 3. Referências<br />David Chelimskyet al. TheRSpec Book: BehaviourDrivenDevelopmentwithRSpec, CucumberandFriends. Pragmatic Bookshelf, 2010.<br />Tom Poppendieck, Mary Poppendieck. Lean Software Development: AnAgile Toolkit. Addisson-Wesley Professional, 2003.<br />
  4. 4. O que?<br />O que está na moda em testes?<br />O que é TDD/BDD e especificações executáveis?<br />Estado da arte em BDD: Ruby, Rspec e Cucumber<br />Pra onde nós vamos?<br />
  5. 5. WhyRuby?<br />Está na moda HOJE (mesmo sendo mais velha do que o Java);<br />Puramente OO, com raízes em Smalltalk;<br />Easilyhacked – metaprogramação is a breeze;<br />Baixo nível de ruído sintático;<br />
  6. 6. Automação de testes<br />Por que automatizar?<br />Quanto custa automatizar?<br />O que as ferramentas de automatização fazem?<br />Até onde a automação resolve o problema?<br />
  7. 7. TestDrivenDevelopment<br />Redescoberta por Kent Beck;<br />Cíclica:<br />Test<br />Code<br />Refactor<br />Keep It Simple, Stupid<br />
  8. 8. Lean Software Development: An Agile Toolkit<br /> Concurrent software development means starting development when only partial requirements are known and developing in short iterations that provide the feedback that causes the system to emerge. Concurrent development makes it possible to delay commitment until the last responsible moment, that is, the moment at which failing to make a decision eliminates an important alternative.<br />
  9. 9. Colocando os chapéus<br />Designer<br />Desenvolvedor<br />Refatorador<br />Testador<br />
  10. 10. Problemas?<br />TestDrivenDevelopment<br />Foco no que os objetos são e não no que eles fazem;<br />Design começa a perder importância pra dar lugar a testes;<br />E no final...<br />
  11. 11. A sua suíte de testes vira...<br />
  12. 12. Die, Zombies! Die!<br />
  13. 13. BehaviourDrivenDevelopment<br />Iniciado por Dan North, com os primeiros trabalhos sobre JBehave;<br />É visto como o próximo passo natural para as práticas de TestDrivenDevelopment;<br />A ferramenta de prova de conceito “não pegou” (Jbehave);<br />
  14. 14. BehaviourDrivenDevelopment<br />Volta do foco no que o objeto faz;<br />Não importa muito quem ele é;<br />Você normalmente não se preocupa com o que o objeto é, mas sim com as mensagens que ele recebe;<br />RSpec e Cucumber viram principais exemplos;<br />
  15. 15. It’sallabout design<br />Removendo o “test” para que não se perca o foco do trabalho;<br />Reforço da idéia de especificações executáveis no lugar de documentação estática;<br />Colocar o cliente como “produtor” e validador das especificações;<br />
  16. 16. Conhecendo o RSpec<br />Ferramenta de BDD mais comum na comunidade Ruby;<br />Representa a primeira fuga sintática das amarras de ferramentas baseadas no Xunit framework;<br />Exemplos contém descrições em linguagem natural;<br />
  17. 17. Exemplo de uso do RSpec<br />describeBowlingdo<br /> it &quot;shouldscore 0 for gutter game&quot;do<br />bowling = Bowling.new<br /> 20.times { bowling.hit(0) }<br />bowling.score.should == 0<br />end<br />end<br />
  18. 18. O mesmo código em JUnit<br />publicclassBowlingTest {<br />publicvoidtestScoreZeroForGutterGame() {<br />Bowlingbowling = newBowling();<br /> for ( int x = 0; x &lt; 20 ) {<br />bowling.hit( 0 ); }<br />Assert.assertEquals( 0, bowling.getScore()); <br /> }<br />}<br />
  19. 19. Implementando uma lista encadeada seguindo as premissas do BDD com RSpec<br />Como fazer?<br />
  20. 20. Cucumber e testes de browser<br />Testes escritos em linguagem natural;<br />O texto funciona como documentação da funcionalidade e pode ser inicialmente montado junto com o cliente;<br />Define o escopo da funcionalidade de forma clara para todos os envolvidos;<br />
  21. 21. Testes de aceitação com Cucumber<br />Como fazer?<br />
  22. 22. Nem tudo são flores<br />Testes, specs, exemplos não garantem que a sua aplicação está livre de bugs;<br />Não garantem que você fez o que o cliente queria (ou o que gera mais valor pra ele);<br />O objetivo principal é ter confiança que o código funciona e que a aplicação pode evoluir sem maiores preocupações;<br />
  23. 23. Essa é a hora que todo mundo fica calado e vai pra casa mais cedo<br />Dúvidas?<br />

×