Mare de Agilidade - BDD e TDD

Post on 18-Nov-2014

4438 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

Transcript

Behaviour and Test Driven Development [BDD | TDD]

Desenvolvimento guiado a comportamento e testes

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

Testes

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Waterfall

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Waterfall

Testes

Testes

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Waterfall

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Test First

Requirements

Design

Implementation

Testing

Maintenance

Deployment

Test First

Requirements

Design Implementation

Testing

Maintenance

Deployment

Test First

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

User Story

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

“Ron Jeffries, 2001”

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

User Stories Applied

Mike Cohn

Story Card

Story Card

Story Card

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

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

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

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

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

“BDD fornece uma linguagem ubíqua

para análise”Dan North

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

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]

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”

Behaviour Driven Development

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

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

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

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

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

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

}

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

Test Driven Development

“Desenvolvimento guiado por testes é um caminho de gerenciamento

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

Development by Example

Test Driven DevelopmentStandup Meeting @ 9h

Pair Up

Test First [Prática]

Code Refactor

Integrar ou Disponibilizar

Ir para casa @ 17h

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

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

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

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) { ... }

}

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

Perguntas?

top related