Maurício LinharesBehaviourdrivendevelopment  e automação com Rspec e Cucumber
Quem?Maurício LinharesConsultor da Hoodiny (Miami, FL)JUG Leader do PBJUGAtualmente RubyZealotEx Java ZealotInstrutor na LinuxFiEx vocalista de banda de Heavy MetalJogador de RPG de mesa e boardgames nas horas vagas
ReferênciasDavid Chelimskyet al. TheRSpec Book: BehaviourDrivenDevelopmentwithRSpec, CucumberandFriends. Pragmatic Bookshelf, 2010.Tom Poppendieck, Mary Poppendieck. Lean Software Development: AnAgile Toolkit. Addisson-Wesley Professional, 2003.
O que?O que está na moda em testes?O que é TDD/BDD e especificações executáveis?Estado da arte em BDD: Ruby, Rspec e CucumberPra onde nós vamos?
WhyRuby?Está na moda HOJE (mesmo sendo mais velha do que o Java);Puramente OO, com raízes em Smalltalk;Easilyhacked – metaprogramação is a breeze;Baixo nível de ruído sintático;
Automação de testesPor que automatizar?Quanto custa automatizar?O que as ferramentas de automatização fazem?Até onde a automação resolve o problema?
TestDrivenDevelopmentRedescoberta por Kent Beck;Cíclica:TestCodeRefactorKeep It Simple, Stupid
Lean Software Development: An Agile Toolkit   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.
Colocando os chapéusDesignerDesenvolvedorRefatoradorTestador
Problemas?TestDrivenDevelopmentFoco no que os objetos são e não no que eles fazem;Design começa a perder importância pra dar lugar a testes;E no final...
A sua suíte de testes vira...
Die, Zombies! Die!
BehaviourDrivenDevelopmentIniciado por Dan North, com os primeiros trabalhos sobre JBehave;É visto como o próximo passo natural para as práticas de TestDrivenDevelopment;A ferramenta de prova de conceito “não pegou” (Jbehave);
BehaviourDrivenDevelopmentVolta do foco no que o objeto faz;Não importa muito quem ele é;Você normalmente não se preocupa com o que o objeto é, mas sim com as mensagens que ele recebe;RSpec e Cucumber viram principais exemplos;
It’sallabout designRemovendo o “test” para que não se perca o foco do trabalho;Reforço da idéia de especificações executáveis no lugar de documentação estática;Colocar o cliente como “produtor” e validador das especificações;
Conhecendo o RSpecFerramenta de BDD mais comum na comunidade Ruby;Representa a primeira fuga sintática das amarras de ferramentas baseadas no Xunit framework;Exemplos contém descrições em linguagem natural;
Exemplo de uso do RSpecdescribeBowlingdo  it "shouldscore 0 for gutter game"dobowling = Bowling.new    20.times { bowling.hit(0) }bowling.score.should == 0endend
O mesmo código em JUnitpublicclassBowlingTest {publicvoidtestScoreZeroForGutterGame() {Bowlingbowling = newBowling();        for ( int x = 0; x < 20 ) {bowling.hit( 0 );    }Assert.assertEquals( 0, bowling.getScore());             }}
Implementando uma lista encadeada seguindo as premissas do BDD com RSpecComo fazer?
Cucumber e testes de browserTestes escritos em linguagem natural;O texto funciona como documentação da funcionalidade e pode ser inicialmente montado junto com o cliente;Define o escopo da funcionalidade de forma clara para todos os envolvidos;
Testes de aceitação com CucumberComo fazer?
Nem tudo são floresTestes, specs, exemplos não garantem que a sua aplicação está livre de bugs;Não garantem que você fez o que o cliente queria (ou o que gera mais valor pra ele);O objetivo principal é ter confiança que o código funciona e que a aplicação pode evoluir sem maiores preocupações;
Essa é a hora que todo mundo fica calado e vai pra casa mais cedoDúvidas?

Behaviour Driven Development

  • 1.
    Maurício LinharesBehaviourdrivendevelopment e automação com Rspec e Cucumber
  • 2.
    Quem?Maurício LinharesConsultor daHoodiny (Miami, FL)JUG Leader do PBJUGAtualmente RubyZealotEx Java ZealotInstrutor na LinuxFiEx vocalista de banda de Heavy MetalJogador de RPG de mesa e boardgames nas horas vagas
  • 3.
    ReferênciasDavid Chelimskyet al.TheRSpec Book: BehaviourDrivenDevelopmentwithRSpec, CucumberandFriends. Pragmatic Bookshelf, 2010.Tom Poppendieck, Mary Poppendieck. Lean Software Development: AnAgile Toolkit. Addisson-Wesley Professional, 2003.
  • 4.
    O que?O queestá na moda em testes?O que é TDD/BDD e especificações executáveis?Estado da arte em BDD: Ruby, Rspec e CucumberPra onde nós vamos?
  • 5.
    WhyRuby?Está na modaHOJE (mesmo sendo mais velha do que o Java);Puramente OO, com raízes em Smalltalk;Easilyhacked – metaprogramação is a breeze;Baixo nível de ruído sintático;
  • 6.
    Automação de testesPorque automatizar?Quanto custa automatizar?O que as ferramentas de automatização fazem?Até onde a automação resolve o problema?
  • 7.
    TestDrivenDevelopmentRedescoberta por KentBeck;Cíclica:TestCodeRefactorKeep It Simple, Stupid
  • 8.
    Lean Software Development:An Agile Toolkit 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.
  • 9.
  • 10.
    Problemas?TestDrivenDevelopmentFoco no queos objetos são e não no que eles fazem;Design começa a perder importância pra dar lugar a testes;E no final...
  • 11.
    A sua suítede testes vira...
  • 12.
  • 13.
    BehaviourDrivenDevelopmentIniciado por DanNorth, com os primeiros trabalhos sobre JBehave;É visto como o próximo passo natural para as práticas de TestDrivenDevelopment;A ferramenta de prova de conceito “não pegou” (Jbehave);
  • 14.
    BehaviourDrivenDevelopmentVolta do focono que o objeto faz;Não importa muito quem ele é;Você normalmente não se preocupa com o que o objeto é, mas sim com as mensagens que ele recebe;RSpec e Cucumber viram principais exemplos;
  • 15.
    It’sallabout designRemovendo o“test” para que não se perca o foco do trabalho;Reforço da idéia de especificações executáveis no lugar de documentação estática;Colocar o cliente como “produtor” e validador das especificações;
  • 16.
    Conhecendo o RSpecFerramentade BDD mais comum na comunidade Ruby;Representa a primeira fuga sintática das amarras de ferramentas baseadas no Xunit framework;Exemplos contém descrições em linguagem natural;
  • 17.
    Exemplo de usodo RSpecdescribeBowlingdo it "shouldscore 0 for gutter game"dobowling = Bowling.new 20.times { bowling.hit(0) }bowling.score.should == 0endend
  • 18.
    O mesmo códigoem JUnitpublicclassBowlingTest {publicvoidtestScoreZeroForGutterGame() {Bowlingbowling = newBowling(); for ( int x = 0; x < 20 ) {bowling.hit( 0 ); }Assert.assertEquals( 0, bowling.getScore()); }}
  • 19.
    Implementando uma listaencadeada seguindo as premissas do BDD com RSpecComo fazer?
  • 20.
    Cucumber e testesde browserTestes escritos em linguagem natural;O texto funciona como documentação da funcionalidade e pode ser inicialmente montado junto com o cliente;Define o escopo da funcionalidade de forma clara para todos os envolvidos;
  • 21.
    Testes de aceitaçãocom CucumberComo fazer?
  • 22.
    Nem tudo sãofloresTestes, specs, exemplos não garantem que a sua aplicação está livre de bugs;Não garantem que você fez o que o cliente queria (ou o que gera mais valor pra ele);O objetivo principal é ter confiança que o código funciona e que a aplicação pode evoluir sem maiores preocupações;
  • 23.
    Essa é ahora que todo mundo fica calado e vai pra casa mais cedoDúvidas?