Introdução Flashcards
Qual o problema que o BDD resolve?
Problemas de entrega de valor.
Softwares entregues sem as features requisitadas
Softwares com entrega atrasadas ou que são cancelados
Processo de desenvolvimento comum
- Aquele que têm a lógica de negócio fala para o analista de negócios o que ele quer
- O analista de negócios escreve um documento de requisitos
- O desenvolvedor transforma os requisitos em software
- O testador transfoma os requisos em casos de teste
5a. O produto finalizado é entregue ao cliente.
5b. O escritor técnico escreve a documentação
Processo de desenvolvimento proposto pelo BDD
- Aquele que têm a lógica de negócio e o analista de negócios discutem sobre o que o négocio precisa
- O analista de negócios, o desenvolvedor e testador escrevem os requisitos do software juntos. Eles estruturam os requisitos em uma linguagem natural e ubíqua
- O desenvolvedor transforma os requisitos em software
- O testador transfoma os requisos em casos de teste
5a. O produto finalizado é entregue ao cliente.
5b. O escritor técnico escreve a documentação
Processo de desenvolvimento proposto pelo BDD
- Aquele que têm a lógica de negócio e o analista de negócios discutem sobre o que o négocio precisa
- O analista de negócios, o desenvolvedor e testador escrevem os requisitos do software juntos. Eles estruturam os requisitos em cenários com uma linguagem natural e ubíqua
- O desenvolvedor transforma os cenários em software com a ajuda dos testes automatizados
- O testador usa os cenários como base para os testes
- Os testes automatiados provêem feedback do progresso e ajudam a documentar a aplicação
Qual as duas principais razões de falha de um processo de desenvolvimento?
Não construir o software direito
Não construir o software certo
O que é construir o software direito?
Se concentrar em como fazer o software
O que é construir o software certo?
É construir o software que atenda a necessidade do negócio
O que acontece se se concentrar somente em construir software direito?
Um software que não satisfaz o cliente
O que acontece se se concentrar somente em construir o software certo?
Um software difícil de manter e extender
O que é o BDD?
Um conjunto de prinpícios baseados em metodologias ágeis e de engenharia, principalmente DDD e TDD para processos de desenvolvimento.
Quem criou o BDD e por que?
Dan North como um jeito fácil de ensinar TDD
Quem criou o TDD e basicamente como funciona?
Kent Beck. Basicamente é criar um teste para uma feature, criar um código básico para que o teste passe, refatorar o código para conseguir um bom design.
Quais os problemas do TDD?
Desenvolvedores muitas vezes têm dificuldade em saber onde começar a testar ou o que testar em seguida.
As vezes TDD faz com o que o desenvolvedor fique focado em detalhes e esquecer a visão ampla do que o projeto precisa.
Grandes números de testes unitários acabam ficando difíceis de manter.
Os testes focam em funções e não em termos de negócio.
Como BDD melhora o TDD?
Ele foca no comportamento das classes e não em métodos.
Uma forma é por assinar o método de teste com ‘should’ e a descrição do que a classe deve fazer.
Como BDD melhora a análise de software?
Usando uma linguagem ubíqua e estruturada, o Gherkin
Outras nomes que significam o mesmo que o BDD
Acceptance-Test-Driven-Development(ATDD)
Accept-Test-Driven Planning
Specification By Example
workflow BDD
Comece por identificar os OBJETICOS DE NEGÓCIO.
OBJETIVOS DE NEGÓCIO são constituídos por FEATURES.
FEATURES são ilustradas por EXEMPLOS
ESPECIFICAÇÕES EXECUTAVEIS guiam o desenvolvimento e os testes
Como se subdivide as ESPECIFCAÇÕES EXECUTÁVEIS
Documentação viva: Ajuda testadores, analistas de negócios e usuários a saber o que está sendo feito.
Relatórios em tempo real: Quanto foi feito, quanto precisa ser feito
Documentação técnica: Faz o código fácil de manter e atualizar
Validação automática: Regressão automática e testes automáticas vêm como consequência
Features funcionais: O código em funcionamento
Princípios BDD
Foco em features que entregam valor
Especifique features em grupo
Abrace incertezas
Ilustre features com exemplos
Não escreva testes automatizados, escreva especificações executáveis
Não escreva testes unitários, escreva especificações de baixo nível
Entregue documentação viva
Use documentação viva para apoiar trabalho de manutenção em progresso
O que envolve o princípio:
Foco em features que entregam valor
Feature é uma peça de funcionalidae que ajuda o negócio a atingir o seu objetivo.
Ao invés de levantar todos os requisitos de uma vez, conversar com stakeholders e usuários finais pogressivamente que funcionalidade precisam.
Ao invés de receber uma lista de funcionalidades do cliente e não questionar nada, procurar entender o real motivo de negócio e sugerir funcionalidades que sejam realmente úteis.
O que envolve o princípio:
Especifique features em grupo
Testadores e desenvolvedores têm a oportunidade de fornecer seu know-how, além de ficarem mais engajados e responsáveis pelo produto.
O que envolve o princípio:
Abrace incertezas
As especificações do que deve ser desenvolvido nunca são entendidas no início, por isso entregue features com valor o quanto antes para receber o feedback ao invés de esperar ficar tudo pronto para saber se era realmente ncessário
O que envolve o princípio:
Ilustre fatures com exemplo
Quebre as features em User Stories com Gherkin.
Crie exemplos para casos perfeitos e casos alternativos
O que envolve o princípio:
Não escreva testes automatizados, escreva especificações executáveis
Ao escrever features você pode utilizar ferramentas que permiter executar essas especificações e gerar a documentação, deixando o processo de verificação ágil.
O que envolve o princípio:
Não escreva testes unitários, escreva especificações de baixo nível
BDD não possui testes unitários, possui especificações de baixo nível.
Visto ter uma perspectiva top-down cada especificação define a próxima especificação necessária.
Normalmente é escrita como uma ferramenta de teste unitário
O que envolve o princípio:
Entrega documentação viva
Ferramentas de automatização de features também devem gerar documentação atualizada com a versão mais recente do software, permitindo ser entregue até o cliente para que ele possa ver de forma clara as features e o progresso de desenvolvimento.
O que envolve o princípio:
Use documentação viva para apoiar trabalho de manutenção em progresso
Quando uma manutenção precisa ser feita em um código (o que representa de 40 a 80% do custo) muitas vezes são outros desenvolvedores que precisam fazer, tendo uma documentação das features eles podem entender as regras de negócio da aplicação, tend especificações em baixo nível ele pode entender as especificações da classe.
Beneficios do BDD
Reduz desperdício: somente o que é realmente necessário
Reduz custo: Por evitar funcionalidades de pouco valor, e por focar em código bem feito
Mudanças fáceis e seguras: Devido a documentação viva stakeholders e desenvolvedores podem entender o que o código realmente faz.
Entregas rápidas: Testadores não precisam mais executar longos testes manuais e verificações antes de entregar o software
Desvantagens do BDD
BDD requer muita colaboração e participação dos que possuem entendimento de negócio
BDD funciona melhor em ambientes ágeis ou contexto iterativos
BDD não funciona bem em empresas muito grandes que trabalham com projetos muito definidos em que um setor aguarda o artefato do anterior e envia para próximo
Testes automatizados não bem projetados, quando se tornam muitos, ficam muito difíceis de manter aumento o custo
Projetos de sucesso precisam construir software com …
confiabilidade e livre de bugs, com features que entregam valor real
Praticantes de BDD procuram entender o que precisam fazer por meio de …
conversas sobre exemplos concretos
Exemplos concretos são base para o desnenvolvimento de …
testes de aceitações (especificações), para saber quando a feature está pronta
Critérios de aceitação podem ser automatizados com … que produzem …
ferramentas como Cucumber, JBehave
testes de regressão, documentação e relatórios
praticantes de BDD criam features em uma abordagem …
top-down usando especificações como alvo e descrevendo o comportamento de cada componente com testes unitários
Os principais benefícios do BDD são
focar o esforço em entregas de valor, reduzir desperdício de esforço e custo, fazer as mudanças e manutenções ficarem mais fáceis e acelerar o processo de entrega