SlideShare ist ein Scribd-Unternehmen logo
1 von 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
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
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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
[object Object],[object Object],[object Object],[object Object],“ BDD fornece uma linguagem ubíqua para análise” Dan North
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Behaviour Driven Development Acceptance Criteria Given  [dado] When  [quando] Then  [então]
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
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
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
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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 cadastro Entã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 adequadamente Quando  o cliente requisitar o cadastro Entã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 Development Standup Meeting @ 9h Pair Up Test First [Prática] Code Refactor Integrar ou Disponibilizar Ir para casa @ 17h
Test Driven Development ,[object Object],[object Object],[object Object],[object Object],[object Object]
Test Driven Development ,[object Object],[object Object],[object Object],RED - GREEN - REFACTOR
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],@Before public 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?

Weitere ähnliche Inhalte

Ähnlich wie Mare de Agilidade - BDD e TDD

[ServiceNow] Governança das Instâncias (4ª edição)
[ServiceNow] Governança das Instâncias (4ª edição)[ServiceNow] Governança das Instâncias (4ª edição)
[ServiceNow] Governança das Instâncias (4ª edição)Alessandro Almeida
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilElias Nogueira
 
Documento de requisitos_-_especificacoes 01
Documento de requisitos_-_especificacoes 01Documento de requisitos_-_especificacoes 01
Documento de requisitos_-_especificacoes 01gtiprotec
 
[ServiceNow] Governança da Plataforma (5ª edição)
[ServiceNow] Governança da Plataforma (5ª edição)[ServiceNow] Governança da Plataforma (5ª edição)
[ServiceNow] Governança da Plataforma (5ª edição)Alessandro Almeida
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeisQualister
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Ciclo de vida processo
Ciclo de vida processoCiclo de vida processo
Ciclo de vida processoPatrícia Melo
 
ITIL na prática - Gerenciamento de Incidentes, Problemas e Mudanças
ITIL na prática - Gerenciamento de Incidentes, Problemas e MudançasITIL na prática - Gerenciamento de Incidentes, Problemas e Mudanças
ITIL na prática - Gerenciamento de Incidentes, Problemas e MudançasWise Systems
 
QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoQArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoJosé Correia
 
Fluxograma processo - desenvolvimento de software
Fluxograma   processo - desenvolvimento de softwareFluxograma   processo - desenvolvimento de software
Fluxograma processo - desenvolvimento de softwareAragon Vieira
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2Bruno Catão
 
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021Mauricio Bitencourt, CBPP
 
Processo de desenvolvimento de software
Processo de desenvolvimento de softwareProcesso de desenvolvimento de software
Processo de desenvolvimento de softwareJeoás Alves
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaGiovanni Bassi
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanLucas Amaral
 

Ähnlich wie Mare de Agilidade - BDD e TDD (20)

Criando um aplicativo composto com net beans
Criando um aplicativo composto com net beansCriando um aplicativo composto com net beans
Criando um aplicativo composto com net beans
 
[ServiceNow] Governança das Instâncias (4ª edição)
[ServiceNow] Governança das Instâncias (4ª edição)[ServiceNow] Governança das Instâncias (4ª edição)
[ServiceNow] Governança das Instâncias (4ª edição)
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágil
 
Documento de requisitos_-_especificacoes 01
Documento de requisitos_-_especificacoes 01Documento de requisitos_-_especificacoes 01
Documento de requisitos_-_especificacoes 01
 
[ServiceNow] Governança da Plataforma (5ª edição)
[ServiceNow] Governança da Plataforma (5ª edição)[ServiceNow] Governança da Plataforma (5ª edição)
[ServiceNow] Governança da Plataforma (5ª edição)
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeis
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Ciclo de vida processo
Ciclo de vida processoCiclo de vida processo
Ciclo de vida processo
 
ITIL na prática - Gerenciamento de Incidentes, Problemas e Mudanças
ITIL na prática - Gerenciamento de Incidentes, Problemas e MudançasITIL na prática - Gerenciamento de Incidentes, Problemas e Mudanças
ITIL na prática - Gerenciamento de Incidentes, Problemas e Mudanças
 
QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoQArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio Araújo
 
Daw slide 06
Daw slide 06Daw slide 06
Daw slide 06
 
Fluxograma processo - desenvolvimento de software
Fluxograma   processo - desenvolvimento de softwareFluxograma   processo - desenvolvimento de software
Fluxograma processo - desenvolvimento de software
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2
 
Alats Seminario V03 3
Alats Seminario V03 3Alats Seminario V03 3
Alats Seminario V03 3
 
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
 
Processo de desenvolvimento de software
Processo de desenvolvimento de softwareProcesso de desenvolvimento de software
Processo de desenvolvimento de software
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variância
 
Metodologia
MetodologiaMetodologia
Metodologia
 
Ns tutorial so
Ns tutorial soNs tutorial so
Ns tutorial so
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando Postman
 

Mehr von Milfont Consulting (20)

Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!
 
Beagajs
BeagajsBeagajs
Beagajs
 
Engine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML SpritesEngine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML Sprites
 
MVC Model 3
MVC Model 3MVC Model 3
MVC Model 3
 
Dar caos à ordem
Dar caos à ordemDar caos à ordem
Dar caos à ordem
 
I TDD my jQuery code without Browser
I TDD my jQuery code without BrowserI TDD my jQuery code without Browser
I TDD my jQuery code without Browser
 
Oxente BDD
Oxente BDDOxente BDD
Oxente BDD
 
Construindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e SenchaConstruindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e Sencha
 
Dar Ordem ao Caos
Dar Ordem ao CaosDar Ordem ao Caos
Dar Ordem ao Caos
 
Primeiro Dia Livre Opensocial
Primeiro Dia Livre OpensocialPrimeiro Dia Livre Opensocial
Primeiro Dia Livre Opensocial
 
Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01
 
Course Hibernate 2008
Course Hibernate 2008Course Hibernate 2008
Course Hibernate 2008
 
Opensocial
OpensocialOpensocial
Opensocial
 
Frameworks Ajax
Frameworks AjaxFrameworks Ajax
Frameworks Ajax
 
OpenSocial CCT
OpenSocial CCTOpenSocial CCT
OpenSocial CCT
 
Cct Dsl
Cct DslCct Dsl
Cct Dsl
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Ajaxificando
AjaxificandoAjaxificando
Ajaxificando
 
Integração Contínua 3FCSL
Integração Contínua 3FCSLIntegração Contínua 3FCSL
Integração Contínua 3FCSL
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 

Mare de Agilidade - BDD e TDD

  • 1. Behaviour and Test Driven Development [BDD | TDD] Desenvolvimento guiado a comportamento e testes Christiano Milfont Maré de Agilidade 2009, Fortaleza Copyleft 2009 Milfont.org
  • 3. Requirements Design Implementation Testing Maintenance Deployment Waterfall
  • 4. Requirements Design Implementation Testing Maintenance Deployment Waterfall
  • 7. Requirements Design Implementation Testing Maintenance Deployment Waterfall
  • 8. Requirements Design Implementation Testing Maintenance Deployment Test First
  • 9. Requirements Design Implementation Testing Maintenance Deployment Test First
  • 10. Requirements Design Implementation Testing Maintenance Deployment Test First
  • 11. 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
  • 12.
  • 13.
  • 17. 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 ."
  • 18. 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
  • 19. 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
  • 20. 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
  • 21.
  • 22.
  • 23.
  • 24.
  • 25. Behaviour Driven Development Acceptance Criteria Given [dado] When [quando] Then [então]
  • 26. 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
  • 27. 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
  • 28. 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
  • 29.
  • 30.
  • 31. 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 cadastro Entã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 adequadamente Quando o cliente requisitar o cadastro Entã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
  • 32. Test Driven Development “ Desenvolvimento guiado por testes é um caminho de gerenciamento do medo durante a programação.” Kent Beck - Test Driven Development by Example
  • 33. Test Driven Development Standup Meeting @ 9h Pair Up Test First [Prática] Code Refactor Integrar ou Disponibilizar Ir para casa @ 17h
  • 34.
  • 35.
  • 36.
  • 37.

Hinweis der Redaktion

  1. 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
  2. Use Case Hell: Tentar centralizar todas as visões Use Case é o detalhamento da interação entre o usuário e o sistema em uma sequência de passos para capturar os requisitos funcionais do sistema antes da implementação Caso de uso é baseado no sistema enxergando o usuario, o user story é o usuario enxergando o sistema. Inverte a lógica de observação. Uma estória representa um ator do caso de uso dentro de um caso de uso e como o sistema o beneficiará independente de como funciona o caso de uso. Caso de uso é escrito pelo tecnico, story pelo cliente. A use case captures a contract between the stakeholders of a system about its behavior. A user story describes functionality that will be valuable to either a user or purchaser of a system or software.
  3. Contar história do analista pedreiro Critérios de aceitação devem ser executáveis UML fracassou em ser uma linguagem de modelagem por provocar um gap entre o modelo e a execução.
  4. Ideally, stories are independent from one another. This isn't always possible but to the extent it is, stories should be written so that they can be developed in any order. The details of a story are negotiated between the user and the developers. Stories should be written so that their value to users or the customer is clear. The best way to achieve this is to have the customer write the stories. Stories may be annotated with details, but too much detail obscures the meaning of the story and can give the impression that no conversation is necessary between the developers and the customer. One of the best ways to annotate a story is to write test cases for the story. If they are too big, compound and complex stories may be split into multiple smaller stories. If they are too small, multiple tiny stories may be combined into one bigger story. Stories need to be testable. Contar história do analista pedreiro Critérios de aceitação devem ser executáveis UML fracassou em ser uma linguagem de modelagem por provocar um gap entre o modelo e a execução.
  5. A story card with notes providing additional detail.
  6. A story card with notes providing additional detail.
  7. A story card with notes providing additional detail.
  8. To create a supple, knowledge-rich design calls for a versatile, shared team language, and a lively experimentation with language that seldom happens on software projects.
  9. where Y is some feature, Z is the benefit or value of the feature, and X is the person (or role) who will benefit. Its strength is that it forces you to identify the value of delivering a story when you first define it. When there is no real business value for a story, it often comes down to something like ” . . . I want [some feature] so that [I just do, ok?].” This can make it easier to descope some of the more esoteric requirements. Template para Story Card como saída inicial
  10. where Y is some feature, Z is the benefit or value of the feature, and X is the person (or role) who will benefit. Its strength is that it forces you to identify the value of delivering a story when you first define it. When there is no real business value for a story, it often comes down to something like ” . . . I want [some feature] so that [I just do, ok?].” This can make it easier to descope some of the more esoteric requirements. Template para Story Card como saída inicial
  11. Podemos customizar o Variações do Template para Story Card template de story de acordo com a necessidade
  12. Story Card e Scenarios
  13. Story Card e Scenarios
  14. Story Card e Scenarios