Behaviour Driven Development  [BDD] Desenvolvimento guiado a comportamento Christiano Milfont XPCE 2009, Fortaleza Copyleft 2009 Milfont.org
Use Case   Um caso de uso captura um contrato entre os interessados de um sistema sobre seus comportamentos . Writing Effective Use Cases Alistair Cockburn Behaviour Driven Development 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
User Story Card  [cartão] Conversation  [conversação] Confirmation  [confirmação] “ Ron Jeffries, 2001” Behaviour Driven Development
User Story I ndependente N egociável V alioso ao comprador E stimável S mall [Pequena] T estável User Stories Applied  Mike Cohn Behaviour Driven Development
Behaviour Driven Development Story Card
Behaviour Driven Development Story Card
Behaviour Driven Development Story Card
Behaviour Driven Development Story Card As a…   I want… so that… “ BDD fornece uma linguagem ubíqua para análise” Dan North
Behaviour Driven Development 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
Behaviour Driven Development Story Card As a   [role] I want to  [activity] To do  [a task]
Behaviour Driven Development 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 Criteria Given  [dado] When  [quando] Then  [então]
Behaviour Driven Development Acceptance Criteria Given   uma issue preenchida e um projeto informado When   um membro requisitar o cadastro Then   garantir que ela seja armazenada no sistema  And  uma mensagem seja informada And  a issue esteja na lista de não-confirmadas
Behaviour Driven Development Acceptance Criteria Given  uma issue preenchida  And  um projeto informado  And  um membro autorizado When  um membro requisitar o cadastro Then  garantir que ela seja armazenada no sistema  And  uma mensagem seja informada And  a issue esteja na lista de "novas issues" a serem resolvidas
Behaviour Driven Development Titulo: Cadastrar Issues As a   membro do projeto I want  criar uma issue So that  eu possa acompanhar a resolução do mesmo. Cenário 1 Given  uma issue preenchida e um projeto informado When  um membro requisitar o cadastro Then  garantir que ela seja armazenada no sistema  And  uma mensagem seja informada   And  a issue esteja na lista de não-confirmadas Cenário 2 Given  um nome e um tipo e um nivel e um sumario a um projeto When  o membro requisitar o cadastro Then  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
Behaviour Driven Development Given  um nome e um tipo e um nivel e um sumario a um projeto When  o membro requisitar o cadastro Then  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"); }
Behaviour Driven Development Given  um nome e um tipo e um nivel e um sumario a um projeto When  o membro requisitar o cadastro Then  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 )); … }
Behaviour Driven Development Reference http://groups.google.com.br/group/xpce

Behaviour Driven Development

  • 1.
    Behaviour Driven Development [BDD] Desenvolvimento guiado a comportamento Christiano Milfont XPCE 2009, Fortaleza Copyleft 2009 Milfont.org
  • 2.
    Use Case Um caso de uso captura um contrato entre os interessados de um sistema sobre seus comportamentos . Writing Effective Use Cases Alistair Cockburn Behaviour Driven Development 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
  • 3.
    User Story Card [cartão] Conversation [conversação] Confirmation [confirmação] “ Ron Jeffries, 2001” Behaviour Driven Development
  • 4.
    User Story Independente N egociável V alioso ao comprador E stimável S mall [Pequena] T estável User Stories Applied Mike Cohn Behaviour Driven Development
  • 5.
  • 6.
  • 7.
  • 8.
    Behaviour Driven DevelopmentStory Card As a… I want… so that… “ BDD fornece uma linguagem ubíqua para análise” Dan North
  • 9.
    Behaviour Driven DevelopmentStory 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
  • 10.
    Behaviour Driven DevelopmentStory Card As a [role] I want to [activity] To do [a task]
  • 11.
    Behaviour Driven DevelopmentStory 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 ”
  • 12.
    Behaviour Driven DevelopmentAcceptance Criteria Given [dado] When [quando] Then [então]
  • 13.
    Behaviour Driven DevelopmentAcceptance Criteria Given uma issue preenchida e um projeto informado When um membro requisitar o cadastro Then garantir que ela seja armazenada no sistema And uma mensagem seja informada And a issue esteja na lista de não-confirmadas
  • 14.
    Behaviour Driven DevelopmentAcceptance Criteria Given uma issue preenchida And um projeto informado And um membro autorizado When um membro requisitar o cadastro Then garantir que ela seja armazenada no sistema And uma mensagem seja informada And a issue esteja na lista de "novas issues" a serem resolvidas
  • 15.
    Behaviour Driven DevelopmentTitulo: Cadastrar Issues As a membro do projeto I want criar uma issue So that eu possa acompanhar a resolução do mesmo. Cenário 1 Given uma issue preenchida e um projeto informado When um membro requisitar o cadastro Then garantir que ela seja armazenada no sistema And uma mensagem seja informada And a issue esteja na lista de não-confirmadas Cenário 2 Given um nome e um tipo e um nivel e um sumario a um projeto When o membro requisitar o cadastro Then 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
  • 16.
    Behaviour Driven DevelopmentGiven um nome e um tipo e um nivel e um sumario a um projeto When o membro requisitar o cadastro Then 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"); }
  • 17.
    Behaviour Driven DevelopmentGiven um nome e um tipo e um nivel e um sumario a um projeto When o membro requisitar o cadastro Then 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 )); … }
  • 18.
    Behaviour Driven DevelopmentReference http://groups.google.com.br/group/xpce

Notas do Editor

  • #2 Falar da industria de softwares, modelo enterprisey, dizer que isso tudo é velharia. Craftmanship manifesto, Agile manifesto Requirements are behaviour,too BDD provides a “ubiquitous language” for analysis Lembrar que tudo não passa de dicas para modelar o domínio do coração do sistema durante o jogo do planejamento e desenvolvimento diário. BDD é uma forma de levar TDD adiante, ir além dos testes e ajudar na modelagem da aplicação se concentrando nas funcionalidades e não permitindo que se saia do estritamente necessário. Test se tornou Behaviou, Fixture se tornou context, assert se tornou should Testes como especificação Design não é subset deRefactoring e sim o refactoring faz parte do design