MAURÍCIO LINHARES
Behaviour driven development e
automação com Rspec e Cucumber
Quem?
Maurício Linhares Consultor da Hoodiny (Miami, FL) JUG Leader do PBJUG Atualmente Ruby Zealot Ex Java Zealot Instrutor na LinuxFi Ex vocalista de banda de Heavy Metal Jogador de RPG de mesa e boardgames nas horas
vagas
Referências
David Chelimsky et al. The RSpec Book: Behaviour Driven Development with RSpec, Cucumber and Friends. Pragmatic Bookshelf, 2010.
Tom Poppendieck, Mary Poppendieck. Lean Software Development: An Agile 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?
Why Ruby?
Está na moda HOJE (mesmo sendo mais velha do que o Java);
Puramente OO, com raízes em Smalltalk;
Easily hacked – metaprogramação is a breeze;
Baixo nível de ruído sintático;
Automação de testes
Por que automatizar?
Quanto custa automatizar?
O que as ferramentas de automatização fazem?
Até onde a automação resolve o problema?
Test Driven Development
Redescoberta por Kent Beck;
Cíclica: Test Code Refactor
Keep 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éus
Designer
Desenvolvedor
Refatorador
Testador
Problemas?
Test Driven Development
Foco 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!
Behaviour Driven Development
Iniciado por Dan North, com os primeiros trabalhos sobre JBehave;
É visto como o próximo passo natural para as práticas de Test Driven Development;
A ferramenta de prova de conceito “não pegou” (Jbehave);
Behaviour Driven Development
Volta 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’s all about design
Removendo 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 RSpec
Ferramenta 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 RSpec
describe Bowling do it "should score 0 for gutter game" do bowling = Bowling.new 20.times { bowling.hit(0) } bowling.score.should == 0 endend
O mesmo código em JUnit
public class BowlingTest {
public void testScoreZeroForGutterGame() { Bowling bowling = new Bowling(); for ( int x = 0; x < 20 ) { bowling.hit( 0 );
} Assert.assertEquals( 0, bowling.getScore()); }
}
IMPLEMENTANDO UMA LISTA ENCADEADA SEGUINDO AS PREMISSAS DO BDD COM
RSPEC
Como fazer?
Cucumber e testes de browser
Testes 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 CUCUMBER
Como fazer?
Nem tudo são flores
Testes, 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 CEDO
Dúvidas?