Aula 31 Desenvolvimento Agil. Metodologias Ageis. BDD
Aula 31 Desenvolvimento Agil. Metodologias Ageis. BDD
Aula 31 Desenvolvimento Agil. Metodologias Ageis. BDD
Ágeis(BDD)
Prof. Washington Almeida, MSC, ISF 27002
Behavior Driven Development - BDD
• Desenvolvimento Orientado ao Comportamento.
• Técnica de desenvolvimento de software ágil que surge
através de uma crítica de Dan North ao TDD.
• Onde ele visava otimizar o conceito de ‘verificação e
validação’ já aplicado, e tornar mais eficiente a construção de
cenários a serem testados e/ou desenvolvidos.
• Para Kent Beck, criador do TDD, os testes devem ser escritos
antes do código do software, assim irão falhar.
3
BDD
• Logo após, os desenvolvedores irão se basear nestes cenários
falhos, irão implementar a aplicação de maneira a fazer os
testes passar, e refatorar seu código até que fique mais limpo.
“Red-Green-Refactor”.
• E está correto, porém a grande vantagem desta prática não é
gerar testes, e sim pensar no design e nas regras negócios
antes de escrever qualquer linha de código
4
BDD
• Assim surge o BDD, como uma prática que levaria o time de
desenvolvimento a pensar no comportamento do usuário
para entender o que deve ser feito.
• E atualmente através de conceitos e ferramentas, ele já pode
ser aplicado por todos os membros do time, e não apenas
pelos desenvolvedores.
5
BDD
• Apresenta um framework baseado em três princípios:
– A área de negócios e o time de desenvolvimento precisam se referir
a mesma parte do sistema da mesma forma;
– Toda parte do sistema precisa ter um valor identificável e verificável
para o negócio;
– Analisar, projetar e planejar tudo de cima a baixo tem retorno
decrescente;
6
Práticas de BDD
• Envolver as partes interessadas no processo através de Outside-in
Development (Desenvolvimento de Fora para Dentro).
• Usar exemplos para descrever o comportamento de uma aplicação ou
unidades de código.
• Automatizar os exemplos para prover um feedback rápido e testes de
regressão.
• Usar deve (should em inglês) na hora de descrever o comportamento de
software para ajudar esclarecer responsabilidades e permitir que
funcionalidades do software sejam questionadas.
• Usar simuladores de teste (mocks, stubs, fakes, dummies, spies) para
auxiliar na colaboração entre módulos e códigos que ainda não foram
escritos.
7
BDD
• BDD é guiado pelos valores de negócios; que é o benefício trazido para o
negócio no qual a aplicação está sendo produzida.
• A única maneira na qual o benefício pode ser percebido é através de
interfaces de usuário para a aplicação, comumente (mas nem sempre) a
interface gráfica de usuário.
• Da mesma maneira, cada trecho de código, começando com a interface de
usuário, pode ser considerado como sendo um cliente de outros módulos de
código no qual a interface é utilizada.
• Cada elemento de código provê algum comportamento, o qual em
colaboração com outros elementos provê o comportamento da aplicação.
• A primeira parte de código de produção que os desenvolvedores que usam
BDD implementam é a interface de usuário, pois dessa maneira os
desenvolvedores podem se beneficiar com um feedback.
8
BDD
• Através de código, e usando princípios de design e
refatoração, desenvolvedores descobrem colaboradores para
a interface de usuário, e posteriormente para cada unidade
de código.
• Isso os ajuda a aderirem o princípio de YAGNI (You Ain't
Gonna Need It), desde que cada trecho de código de produção
é requerido pelos negócios ou por outro trecho de código já
escrito.
9
BDD
• O foco em BDD é a linguagem e as interações usadas no
processo de desenvolvimento de software. Desenvolvedores
que se beneficiam destas técnicas escrevem os testes em sua
língua nativa em combinação com a linguagem
ubíqua (Ubiquitous Language).
• Isso permite que eles foquem em por que o código deve ser
criado, ao invés de detalhes técnicos, e ainda possibilita uma
comunicação eficiente entre as equipes de desenvolvimento e
testes.
10
BDD x TDD
BDD - trabalha para definir como uma demanda chega ao desenvolvedor,
integrar diferentes áreas da empresa e pensar a partir do ponto de
vista do comportamento esperado de uma funcionalidade pelo
usuário. Por consequência, ele acaba influenciando em como os testes
são planejados e escritos.
TDD - busca garantir a qualidade do código, sempre pensando em 100%
de cobertura de testes, melhorar o que acabou de ser feito e nunca
escrever uma linha de código sem antes pensar em como garantir que
aquilo irá funcionar.
ATDD – Adaptação do TDD para testes de aceitação (validação).
11
Questão 1
Ano: 2015 Banca: IESES Órgão: TRE-MA Prova: IESES - 2015 - TRE-MA - Técnico Judiciário - Programação de
Sistemas
Qual a alternativa correta a respeito do BDD?
a) Utiliza o conceito de Ubiquitous Language de modo a facilitar o entendimento de todos os fazendo
com que os integrantes falem a mesma língua.
b) É uma técnica de desenvolvimento de testes que funciona exclusivamente se utilizada alguma
metodologia ágil de desenvolvimento.
c) Técnica de testes onde somente os programadores participam, deixando analistas e testadores
cuidando das demais atividades.
d) Maneira de testar os sistemas de acordo com o comportamento esperado, portando só pode ser
feito quando o software estiver concluído.
LETRA A
12
Questão 2
Ano: 2014 Banca: FCC Órgão: TRT - 2ª REGIÃO (SP) Prova: FCC - 2014 - TRT - 2ª REGIÃO III. Objetiva capturar os critérios de aceitação para as funcionalidades em
(SP) - Analista Judiciário - Tecnologia da Informação desenvolvimento. Trabalha com as seguintes etapas:
Há diversos processos e práticas ágeis de desenvolvimento de software.
Considere: - Discutir (Discuss): discussão colaborativa com a equipe visando elicitar os critérios
de aceitação.
- Refinar (Distill): refinamento dos critérios de aceitação em um conjunto concreto
I. Seu objetivo é criar um “código limpo que funcione”. Trabalha com a de cenários/exemplos de uso descrevendo o comportamento esperado da
estratégia Red - Green - Refactor: aplicação em uma linguagem comum a todos os membros da equipe.
- Desenvolver (Develop): transformação dos testes de aceitação (descrevendo o
- Codifique o teste; comportamento esperado do software) em testes/especificação automatizados.
- Faça-o compilar e executar. O teste não deve passar (Red).
- Implemente o requisito e faça o teste passar (Green). IV. Suas práticas incluem:
- Refatore o código (Refactor).
- Envolver as partes interessadas no processo através de Outside-in Development.
II. Suas práticas, regras e valores garantem um agradável ambiente de - Usar exemplos para descrever o comportamento de uma aplicação ou unidades
desenvolvimento de software para os seus seguidores, que são de código.
conduzidos pelos princípios básicos: - Automatizar os exemplos para prover um feedback rápido e testes de regressão.
- Usar o verbo deve (should) ao descrever o comportamento de software para
ajudar a esclarecer responsabilidades e permitir que funcionalidades sejam
- Comunicação - manter o melhor relacionamento possível entre clientes e questionadas.
desenvolvedores, preferindo conversas pessoais a outros meios de - Usar dublês de teste (mocks, stubs, fakes, dummies, spies) para auxiliar na
comunicação; colaboração entre módulos e códigos que ainda não foram escritos.
- Simplicidade - implementar apenas requisitos atuais, evitando adicionar
funcionalidades que podem ser importantes somente no futuro;
- Feedback - o desenvolvedor terá informações constantes do cliente e do
código, em que testes constantes indicam os erros tanto individuais quanto Os processos ágeis I, II, III e IV são, correta e respectivamente,
do software integrado; denominados:
- Coragem - encorajar as pessoas que não possuem facilidade de a) BDD - DDD - ATDD – XP
comunicação e bom relacionamento interpessoal, encorajar a equipe a
experimentar e buscar novas soluções, além de encorajar a obtenção b) TDD - BDD - DDD – XP
de feedback do cliente. c) ATDD - XP - DDD – BDD
d) ATDD - BDD - TDD – DDD
e) TDD - XP - ATDD - BDD
LETRA E
13
Gabarito
Questão Resposta
1 LETRA A
2 LETRA E
14
Continua...
• Kanban
• Outros Tópicos Relevantes
15
Referências
• PRESSMAN, Roger S. ; Bruce R. Maxim. Engenharia de Software, Uma Abordagem Profissional, 8° ed.
Porto Alegre: AMGH, 2016. ISBN 978-85-8055- 533-2.
• SOMMERVILLE, Ian. Engenharia de Software, 9. ed. São Paulo: Pearson Prentice Hall, 2011. ISBN 978-
85-7936-108-1.
16