Transcript
Page 1: Behaviour Driven Development

MAURÍCIO LINHARES

Behaviour driven development e

automação com Rspec e Cucumber

Page 2: Behaviour Driven Development

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

Page 3: Behaviour Driven Development

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.

Page 4: Behaviour Driven Development

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?

Page 5: Behaviour Driven Development

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;

Page 6: Behaviour Driven Development

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?

Page 7: Behaviour Driven Development

Test Driven Development

Redescoberta por Kent Beck;

Cíclica: Test Code Refactor

Keep It Simple, Stupid

Page 8: Behaviour Driven Development

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.

Page 9: Behaviour Driven Development

Colocando os chapéus

Designer

Desenvolvedor

Refatorador

Testador

Page 10: Behaviour Driven Development

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...

Page 11: Behaviour Driven Development

A sua suíte de testes vira...

Page 12: Behaviour Driven Development

Die, Zombies! Die!

Page 13: Behaviour Driven Development

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);

Page 14: Behaviour Driven Development

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;

Page 15: Behaviour Driven Development

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;

Page 16: Behaviour Driven Development

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;

Page 17: Behaviour Driven Development

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

Page 18: Behaviour Driven Development

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()); }

}

Page 19: Behaviour Driven Development

IMPLEMENTANDO UMA LISTA ENCADEADA SEGUINDO AS PREMISSAS DO BDD COM

RSPEC

Como fazer?

Page 20: Behaviour Driven Development

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;

Page 21: Behaviour Driven Development

TESTES DE ACEITAÇÃO COM CUCUMBER

Como fazer?

Page 22: Behaviour Driven Development

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;

Page 23: Behaviour Driven Development

ESSA É A HORA QUE TODO MUNDO FICA CALADO E VAI PRA CASA MAIS CEDO

Dúvidas?


Recommended