mare de agilidade - bdd e tdd

38
Behaviour and Test Driven Development [BDD | TDD] Desenvolvimento guiado a comportamento e testes Christiano Milfont Maré de Agilidade 2009, Fortaleza Copyleft 2009 Milfont.org

Upload: milfont-consulting

Post on 18-Nov-2014

4.444 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Mare de Agilidade - BDD e TDD

Behaviour and Test Driven Development [BDD | TDD]

Desenvolvimento guiado a comportamento e testes

Christiano MilfontMaré de Agilidade 2009, FortalezaCopyleft 2009 Milfont.org

Page 2: Mare de Agilidade - BDD e TDD

Testes

Page 3: Mare de Agilidade - BDD e TDD

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Waterfall

Page 4: Mare de Agilidade - BDD e TDD

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Waterfall

Page 5: Mare de Agilidade - BDD e TDD

Testes

Page 6: Mare de Agilidade - BDD e TDD

Testes

Page 7: Mare de Agilidade - BDD e TDD

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Waterfall

Page 8: Mare de Agilidade - BDD e TDD

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Test First

Page 9: Mare de Agilidade - BDD e TDD

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Test First

Page 10: Mare de Agilidade - BDD e TDD

Requirements

Design Implementation

Testing

Maintenance

Deployment

Test First

Page 11: Mare de Agilidade - BDD e TDD

Use Case Um caso de uso captura um contrato entre os interessados de um sistema sobre seus comportamentos.

Writing Effective Use Cases

Alistair Cockburn

User Story Uma estoria descreve funcionalmente o que será valioso para os usuários e aos compradores de um software.

User Stories Applied

Mike Cohn

Behaviour Driven Development

Page 12: Mare de Agilidade - BDD e TDD

User Story

• Card [cartão]• Conversation [conversação]• Confirmation [confirmação]

“Ron Jeffries, 2001”

Page 13: Mare de Agilidade - BDD e TDD

User Story• Independente• Negociável• Valioso ao comprador• Estimável• Small [Pequena]• Testável

User Stories Applied

Mike Cohn

Page 14: Mare de Agilidade - BDD e TDD

Story Card

Page 15: Mare de Agilidade - BDD e TDD

Story Card

Page 16: Mare de Agilidade - BDD e TDD

Story Card

Page 17: Mare de Agilidade - BDD e TDD

Linguagem Ubíqua

"A language structured around the domain model and used by all team members to connect all the activities of the team with the software."

Page 18: Mare de Agilidade - BDD e TDD

Um Membro do projeto cadastra uma “Issue” no sistema.

Um Gerente de projetos aceita ou rejeita a entrada de Issues para serem trabalhadas.

Um Funcionário do hospital dar entrada do Paciente na Emergência.

O Cenário de entrada por pacientes depende do Login do usuário com ROLE Admin na Action antes do forward.

Um funcionário atende uma solicitação de saída de medicamento pelo prontuário do paciente com limite do cardápio do médico.

A Tabela TB_ITEMS tem ligação com a Tabela TB_NOTAS

Page 19: Mare de Agilidade - BDD e TDD

Um Membro do projeto cadastra uma “Issue” no sistema.

Um Gerente de projetos aceita ou rejeita a entrada de Issues para serem trabalhadas.

Um Funcionário do hospital dar entrada do Paciente na Emergência.

O Cenário de entrada por pacientes depende do Login do usuário com ROLE Admin na Action antes do forward.

Um funcionário atende uma solicitação de saída de medicamento pelo prontuário do paciente com limite do cardápio do médico.

A Tabela TB_ITEMS tem ligação com a Tabela TB_NOTAS

Page 20: Mare de Agilidade - BDD e TDD

Um Membro do projeto cadastra uma “Issue” no sistema.

Um Gerente de projetos aceita ou rejeita a entrada de Issues para serem trabalhadas.

Um Funcionário do hospital dar entrada do Paciente na Emergência.

O Cenário de entrada por pacientes depende do Login do usuário com ROLE Admin na Action antes do forward.

Um funcionário atende uma solicitação de saída de medicamento pelo prontuário do paciente com limite do cardápio do médico.

A Tabela TB_ITEMS tem ligação com a Tabela TB_NOTAS

Page 21: Mare de Agilidade - BDD e TDD

Story Card• As a… • I want…• so that…

“BDD fornece uma linguagem ubíqua

para análise”Dan North

Page 22: Mare de Agilidade - BDD e TDD

Story Card• As a [X]• I want [Y]• so that [Z]Onde: Y é alguma funcionalidade ou característica, Z é o benefício ou valor dessa funcionalidade e X é a pessoa ou perfil/papel beneficiado

Page 23: Mare de Agilidade - BDD e TDD

Story Card• As a [role]• I want to [activity]• To do [a task]

• In order to [business value]• As a [role]• I want to [activity]

Page 24: Mare de Agilidade - BDD e TDD

Story Card• As a “membro do projeto”• I want “Criar uma issue”• so that “Eu possa acompanhar a resolução”

• As a “gerente do projeto”• I want “aceitar a entrada de uma issue”• so that “seja descartada ou resolvida apenas

com minha permissão”

Page 25: Mare de Agilidade - BDD e TDD

Behaviour Driven Development

Acceptance CriteriaGiven [dado]When [quando]Then [então]

Page 26: Mare de Agilidade - BDD e TDD

Acceptance CriteriaGiven uma issue preenchida e um projeto

informadoWhen um membro requisitar o cadastroThen garantir que ela seja armazenada no

sistema And uma mensagem seja informadaAnd a issue esteja na lista de não-confirmadas

Page 27: Mare de Agilidade - BDD e TDD

Acceptance CriteriaGiven uma issue preenchida

And um projeto informado And um membro autorizado

When um membro requisitar o cadastroThen garantir que ela seja armazenada no sistema

And uma mensagem seja informadaAnd a issue esteja na lista de "novas issues" a serem resolvidas

Page 28: Mare de Agilidade - BDD e TDD

Titulo: Cadastrar IssuesAs a membro do projetoI want criar uma issueSo that eu possa acompanhar a resolução do mesmo.Cenário 1Given uma issue preenchida e um projeto informadoWhen um membro requisitar o cadastroThen garantir que ela seja armazenada no sistema

And uma mensagem seja informada And a issue esteja na lista de não-confirmadas

Cenário 2Given um nome e um tipo e um nivel e um sumario a um projetoWhen o membro requisitar o cadastroThen garantir que seja criada uma issue

And armazenada no sistema And uma mensagem seja informada And a issue esteja na lista de não-confirmadas

Page 29: Mare de Agilidade - BDD e TDD

Given um nome e um tipo e um nivel e um sumario a um projetoWhen o membro requisitar o cadastroThen garantir que seja criada uma issue

And armazenada no sistema And uma mensagem seja informada And a issue esteja na lista de não-confirmadas

@Given("a $name and a $type and a $level and a $summary and a $project")public void relatar(String name…) throws IllegalArgumentIssueException {

throw new IllegalArgumentIssueException("erro");}

Page 30: Mare de Agilidade - BDD e TDD

Given um nome e um tipo e um nivel e um sumario a um projetoWhen o membro requisitar o cadastroThen garantir que seja criada uma issue

And armazenada no sistema And uma mensagem seja informada And a issue esteja na lista de não-confirmadas

@Given("a $name and a $type and a $level and a $summary and a $project")

public void relatar(String name…) throws IllegalArgumentIssueException {Issue issue = member

.createIssue(name)

.withType(type)

.withLevel(level)

.withSummary(summary)

.toProject(project);ensureThat(issue.getStatus(), equalTo(Status.UNCONFIRMED));…

}

Page 31: Mare de Agilidade - BDD e TDD

Declarativo vs Imperativo

Dado um nome preenchido com “Erro tal”E um sumário preenchido com “bla bla bla”E um nível selecionado como “PENDENTE”E um projeto selecionado com o nome “Projeto Novo”

Quando o cliente requisitar o cadastroEntão garantir que seja criada uma issue

E armazenada no sistema E uma mensagem seja informada E a issue esteja na lista de não-confirmadas

Dado uma Issue preenchida adequadamenteQuando o cliente requisitar o cadastroEntão garantir que seja criada uma issue

E armazenada no sistema E uma mensagem seja informada E a issue esteja na lista de não-confirmadas

Page 32: Mare de Agilidade - BDD e TDD

Test Driven Development

“Desenvolvimento guiado por testes é um caminho de gerenciamento

do medo durante a programação.”Kent Beck - Test Driven

Development by Example

Page 33: Mare de Agilidade - BDD e TDD

Test Driven DevelopmentStandup Meeting @ 9h

Pair Up

Test First [Prática]

Code Refactor

Integrar ou Disponibilizar

Ir para casa @ 17h

Page 34: Mare de Agilidade - BDD e TDD

Test Driven Development

O ritmo em 3 A’s• Arrange [Criar um objeto]• Act [Invocar um método]• Assert [Verificar o resultado]

Refactoring Workbook, Bill Wake

Page 35: Mare de Agilidade - BDD e TDD

Test Driven Development

1.Escreva um teste que não funciona.2.Escreva o código e faço-o funcionar.3.Refatore e elimine o código repetitivo.

RED-GREEN-REFACTOR

Page 36: Mare de Agilidade - BDD e TDD

Test Double• Dummy• Fake• Stubs• Spies• Mocks

Page 37: Mare de Agilidade - BDD e TDD

Fixture Setup• Setup• Tear Down

@Beforepublic void setUp() throws Exception {

Connection conn;try {

... IDatabaseConnection connection =

new DatabaseConnection(conn); DatabaseOperation.INSERT.execute(connection,

new FlatXmlDataSet(new FileInputStream( “issuetrackr.xml")));

conn.close();} catch (Exception exc) { ... }

}

Page 38: Mare de Agilidade - BDD e TDD

http://en.wikipedia.org/wiki/Dexter_Morgan

Perguntas?