SlideShare uma empresa Scribd logo
1 de 48
Renato Groffe
Maio/2015
 Mais de 15 anos de experiência na área de Tecnologia
 Pós-graduação em Engenharia de Software – ênfase em
SOA
 Cursando MBA em Business Intelligence (FIAP)
 Graduação em Sistemas de Informação
 Técnico em Processamento de Dados
 MTAC (Microsoft Technical Audience Contributor), MCP,
Microsoft Specialist, MCTS, OCA, ITIL, COBIT
 Página no Facebook
https://www.facebook.com/RenatoGroffeSW
 Perfil no Facebook
https://www.facebook.com/renatogroff
 LinkedIn
http://br.linkedin.com/in/renatogroffe
 Visual Studio 2013 (preferencialmente com o
Update 4)
 SpecFlow
 Visual Studio Unit Testing Framework
(também conhecido como MS Test)
 Cenários comuns dentro do desenvolvimento de
software
 Test-Driven Development (TDD): uma visão geral
 Testes Unitários no Visual Studio: um exemplo
simples
 Behavior-Driven Development (BDD)
 BDD na plataforma .NET
 Para efetuar o download das soluções aqui apresentadas acesse:
https://gallery.technet.microsoft.com/Exemplo-de-aplicaes-7dd7cbf1
 Pressões por rápida entrega
 Prazos muito curtos
 Equipes reduzidas
 Mudanças frequentes em requisitos
 Áreas de Negócio e Técnica não falam mesma língua
 Testes não são levados tão a sério como se deveria
 Conciliar tempo reduzido com mudanças frequentes ao
longo do projeto
 Busca de equilíbrio entre qualidade e produtividade
 Melhoria na comunicação entre os envolvidos em um
projeto
 XP (Extreme Programming) e Scrum são os exemplos mais
famosos
 Testes unitários são uma forma rápida e flexível de se
validar classes e métodos → trata-se de uma proposta em
conformidade com o conceito ágil
 XP foi um dos primeiros métodos ágeis a incentivar o uso
de testes unitários automatizados
 Testes unitários foram a base para o surgimento da
metodologia conhecida como TDD (Test-Driven
Development)
 Rapidez na execução
 Implementados com facilidade, normalmente a partir de um
framework pré-existente
◦ Alternativas na plataforma .NET:
 Visual Studio Unit Testing Framework (MS Test)
 NUnit (http://www.nunit.org/)
 xUnit.net (https://github.com/xunit)
 Automatizados e repetíveis
 Possibilitam reuso em ações futuras
 Testes unitários codificados antes mesmo da implementação das
partes que serão submetidas a análises → evita-se assim a
elaboração de testes “viciados”
 Prioriza-se uma melhor organização do código, favorecendo
práticas como separação de responsabilidades, alta coesão e baixo
acoplamento
 A implementação de uma funcionalidade segue um ciclo
chamado Red-Green-Refactor (os testes unitários são
executados em todos os estágios)
 Cálculo do Fatorial – Casos de Teste:
 Classe estática a ser implementada:
 Estrutura esperada para a solução (Class Library + Unit Test Project):
 Metodologia para desenvolvimento de softwares proposta por Dan North
em 2006 (este especialista também criou o framework JBehave, primeira
implementação de BDD voltada à plataforma Java)
 Surgiu da experiência de North ministrando treinamentos sobre TDD, com
o mesmo se deparando com a dificuldade de desenvolvedores em aplicar
esta abordagem:
◦ Por onde começar com os testes unitários?
◦ O que testar ou não?
◦ Quando e quanto testar?
◦ Que nomenclatura utilizar nos testes?
◦ Por quais razões um teste falhou?
 Foco errado na adoção de testes → verificar aspectos e
pontos isolados de uma aplicação muitas vezes não é
suficiente
 Depender apenas de testes unitários não é garantia
nenhuma de sucesso
 É comum que surjam problemas durante a verificação da
integração de diferentes partes de um sistema
 Desenvolvedores experientes realizam testes enfatizando
o comportamento das funcionalidades
 Testes de aceitação → permitem a usuários finais simular
operações cotidianas, analisando se as expectativas foram
atendidas
 Testes unitários como documentação → não são
compreendidos por usuários de negócio (sem background
técnico)
 Metodologia baseada em user stories (histórias):
◦ Histórias descrevem os comportamentos esperados para funcionalidades
◦ Uso de uma linguagem ubíqua (em inglês “ubiquitous language”) →
vocabulário comum baseado em elementos de negócio e dominado por
todos os envolvidos no projeto
◦ Uma user story contém sentenças que seguem algumas regras de
sintaxe de fácil compreensão
◦ Algumas sentenças representam cenários → simulações de
comportamento em diferentes situações
◦ Frameworks permitem que as user stories sejam executadas como testes
automatizados
 Teste de aceitação → User story que serve de base para a
implementação de uma funcionalidade e posterior validação da
mesma
 Melhor comunicação entre os profissionais envolvidos em um
projeto → padronização através de uma linguagem comum
 Documentação simples e gerada de forma dinâmica
 Facilita o compartilhamento de conhecimentos a respeito de um
projeto
 User stories apresentam objetivos mais claros e bem definidos →
desenvolvedores trabalham de forma mais direcionada
 Instrumento de grande valia em equipes que seguem metodologias
ágeis (como em Scrum, no qual também se empregam user stories)
 O SpecFlow é talvez hoje a principal solução para a adoção das
práticas de BDD em projetos no Visual Studio
◦ Site: http://www.specflow.org/
◦ Baseado em um framework chamado Cucumber, o qual foi concebido
inicialmente para a linguagem Ruby
◦ Empregado em conjunto com frameworks de testes unitários (MS Test,
NUnit)
◦ Faz uso de um mecanismo conhecido como Gherkin
 Parser que se baseia na utilização de uma linguagem estruturada
 Sintaxe simples e não-técnica, capaz de ser entendida por pessoas da área de
negócios
 Possui suporte à internacionalização
 Instalação de extensão para uso do SpecFlow → menu Tools
 Extensão que integra o SpecFlow ao Visual Studio
 Classe a ser criada:
 Conversão de temperatura em graus Fahrenheit (F) para o equivalente nas
escalas Celsius (C) e Kelvin (K):
 Estrutura esperada para a solução (Class Library + Unit Test Project):
 Adicionar o SpecFlow ao projeto de testes via NuGet:
 Alterar o app.config do projeto de testes, de forma que a user story
possa ser escrita em português (além de utilizar o framework MS
Test):
 Adicionar uma “Feature” ao projeto de testes:
 Embora o conteúdo inicial do arquivo ConvTemperatura.feature esteja
em inglês, o Visual Studio já exibirá como opções palavras-chaves em
português:
 A user story/especificação a ser criada deverá levar em
conta os seguintes casos de teste:
 A seguir está um possível conteúdo para a user story:
 O próximo passo será a criação de uma classe baseada no template
“SpecFlow Step Definition” → esta estrutura fará a conexão entre a user
story e a classe ConversorTemperatura:
 Em termos práticos, este novo arquivo conterá uma classe responsável
por validar os diferentes cenários especificados anteriormente:
 Expressões regulares serão utilizadas como “placeholders”, a fim de possibilitar
a correta leitura dos parâmetros
 Cada método definido em ConvTemperaturaStepDefinition corresponde ao
mapeamento de uma sentença definida na user story (os atributos equivalem às
palavras-chaves em inglês):
 Uma possível implementação para ConvTemperaturaStepDefinition (utilizando a classe Assert do
framework MS Test) seria:
 É possível tanto a execução, quanto o “debug” de uma user story:
 Num primeiro momento a execução da user story resultará em falhas em todos os cenários:
 Regras para a implementação da classe ConversorTemperatura:
C = (F – 32) / 1,8
K = C + 273,15
 Uma possível implementação da classe ConversorTemperatura:
 Uma nova execução da user story indicará então sucesso em todos os cenários:
 Uma possível refatoração da classe ConversorTemperatura:
 Após a refatoração:
Dúvidas, sugestões???
 Behavior Driven Development (BDD) com Specflow
http://www.devmedia.com.br/behavior-driven-development-bdd-
com-specflow/29405
 Introducing BDD
http://dannorth.net/introducing-bdd/
 Testes Unitários no Visual Studio
http://www.devmedia.com.br/testes-unitarios-no-visual-studio-
2012/27215
 TDD - Test-Driven Development
http://pt.slideshare.net/renatogroff1/tdd-renato-groffe
Obrigado!!!

Mais conteúdo relacionado

Mais procurados

CVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoCVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - Introdução
Marden Neubert
 
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitos
elliando dias
 
Aula 1 requisitos
Aula 1   requisitosAula 1   requisitos
Aula 1 requisitos
licardino
 

Mais procurados (20)

Aula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileAula 1 - Introdução ao Mobile
Aula 1 - Introdução ao Mobile
 
Apresentação BDD
Apresentação BDDApresentação BDD
Apresentação BDD
 
Aula UML - Unified Modeling Language
Aula UML - Unified Modeling LanguageAula UML - Unified Modeling Language
Aula UML - Unified Modeling Language
 
Tutorial Planning Poker Para Times Remotos
Tutorial Planning Poker Para Times RemotosTutorial Planning Poker Para Times Remotos
Tutorial Planning Poker Para Times Remotos
 
Aula 2 - Modelos de processos
Aula 2 -  Modelos de processosAula 2 -  Modelos de processos
Aula 2 - Modelos de processos
 
Modelo V - Desenvolvimento de Software
Modelo V - Desenvolvimento de SoftwareModelo V - Desenvolvimento de Software
Modelo V - Desenvolvimento de Software
 
CVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoCVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - Introdução
 
Use a Cabeça! Python_Português.pdf
Use a Cabeça! Python_Português.pdfUse a Cabeça! Python_Português.pdf
Use a Cabeça! Python_Português.pdf
 
Eng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validaçãoEng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validação
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Aula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptxAula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptx
 
Escrevendo Estórias do Usuário Eficazes
Escrevendo Estórias do Usuário EficazesEscrevendo Estórias do Usuário Eficazes
Escrevendo Estórias do Usuário Eficazes
 
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitos
 
Metodologias ágeis de desenvolvimento de software por Givanaldo Rocha
Metodologias ágeis de desenvolvimento de software por Givanaldo RochaMetodologias ágeis de desenvolvimento de software por Givanaldo Rocha
Metodologias ágeis de desenvolvimento de software por Givanaldo Rocha
 
Testes de contrato
Testes de contratoTestes de contrato
Testes de contrato
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Carreira de QA
Carreira de QA Carreira de QA
Carreira de QA
 
Prototipação
PrototipaçãoPrototipação
Prototipação
 
Aula 1 requisitos
Aula 1   requisitosAula 1   requisitos
Aula 1 requisitos
 
Aula 6 - Qualidade de Software
Aula 6 - Qualidade de SoftwareAula 6 - Qualidade de Software
Aula 6 - Qualidade de Software
 

Destaque

Testes automatizados (2)
Testes automatizados (2)Testes automatizados (2)
Testes automatizados (2)
cesarvianna
 
BDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world applicationBDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world application
John Ferguson Smart Limited
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testing
dversaci
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de Testes
Paulo César M Jeveaux
 

Destaque (18)

Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
 
Introdução à BDD (Behavior-driven Development)
Introdução à BDD (Behavior-driven Development)Introdução à BDD (Behavior-driven Development)
Introdução à BDD (Behavior-driven Development)
 
BDD
BDDBDD
BDD
 
BDD JBehave
BDD JBehaveBDD JBehave
BDD JBehave
 
BDD - aula
BDD - aulaBDD - aula
BDD - aula
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Testes automatizados (2)
Testes automatizados (2)Testes automatizados (2)
Testes automatizados (2)
 
BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015
 
BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012
 
Demoiselle Behave - Parte 1
Demoiselle Behave - Parte 1Demoiselle Behave - Parte 1
Demoiselle Behave - Parte 1
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015
 
BDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + JavaBDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + Java
 
Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Behavior Driven Development (BDD)
Behavior Driven Development (BDD)
 
[GUTS-RS] Tendências de Teste de Software para 2016
[GUTS-RS] Tendências de Teste de Software para 2016[GUTS-RS] Tendências de Teste de Software para 2016
[GUTS-RS] Tendências de Teste de Software para 2016
 
BDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world applicationBDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world application
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testing
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de Testes
 

Semelhante a BDD (Behavior-Driven Development)

Semelhante a BDD (Behavior-Driven Development) (20)

BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Hertz - Janeiro-2018
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
 
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
 
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
Mocking Test
Mocking TestMocking Test
Mocking Test
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015
 
TDD e BDD - Developers-SP - Abril/2017
TDD e BDD - Developers-SP - Abril/2017TDD e BDD - Developers-SP - Abril/2017
TDD e BDD - Developers-SP - Abril/2017
 
Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017
 
BDD com SpecFlow
BDD com SpecFlowBDD com SpecFlow
BDD com SpecFlow
 
Bdd com spec flow
Bdd com spec flowBdd com spec flow
Bdd com spec flow
 
Test-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding Day
 
Mocking Test - GDG-SP - Setembro/2016
Mocking Test - GDG-SP - Setembro/2016Mocking Test - GDG-SP - Setembro/2016
Mocking Test - GDG-SP - Setembro/2016
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 

Mais de Renato Groff

Mais de Renato Groff (20)

Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...
Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...
Microsoft Azure role-based certifications valem a pena? | Interop Day Edição ...
 
Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020
Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020
Kubernetes: dicas e truques para o dia a dia | Azure Experts - Novembro-2020
 
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
 
Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...
Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...
Como avançar na Power Platform com Azure Functions e Logic Apps | MVPConf Lat...
 
GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...
GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...
GitHub Actions: descomplicando o build/deployment automatizados | MVPConf Lat...
 
A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...
A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...
A evolução da plataforma .NET: passado, presente e futuro | Baixada NERD - No...
 
Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...
Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...
Polly: aplicações .NET resilientes e um melhor tratamento de falhas | MVPConf...
 
Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...
Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...
Containers no Azure: Docker, Kubernetes e suas diferentes possibilidades | MV...
 
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
 
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
 
.NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |...
.NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |....NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |...
.NET Core + Serverless: Desenvolvimento Multiplataforma com Azure Functions |...
 
Aplicações Distribuídas com .NET | TDC Recife Online 2020
Aplicações Distribuídas com .NET | TDC Recife Online 2020Aplicações Distribuídas com .NET | TDC Recife Online 2020
Aplicações Distribuídas com .NET | TDC Recife Online 2020
 
Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020
Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020
Novidades do .NET 5 e ASP.NET 5 | Visual Studio Summit 2020
 
Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...
Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...
Serverless + Integrações com BDs: Azure Functions e Logic Apps - SQLSaturday ...
 
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
 
.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie
.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie
.NET: passado, presente e futuro | Semana FCI 2020 - Mackenzie
 
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
 
Kubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na PráticaKubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
 
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
 

BDD (Behavior-Driven Development)

  • 2.  Mais de 15 anos de experiência na área de Tecnologia  Pós-graduação em Engenharia de Software – ênfase em SOA  Cursando MBA em Business Intelligence (FIAP)  Graduação em Sistemas de Informação  Técnico em Processamento de Dados  MTAC (Microsoft Technical Audience Contributor), MCP, Microsoft Specialist, MCTS, OCA, ITIL, COBIT
  • 3.  Página no Facebook https://www.facebook.com/RenatoGroffeSW  Perfil no Facebook https://www.facebook.com/renatogroff  LinkedIn http://br.linkedin.com/in/renatogroffe
  • 4.  Visual Studio 2013 (preferencialmente com o Update 4)  SpecFlow  Visual Studio Unit Testing Framework (também conhecido como MS Test)
  • 5.  Cenários comuns dentro do desenvolvimento de software  Test-Driven Development (TDD): uma visão geral  Testes Unitários no Visual Studio: um exemplo simples  Behavior-Driven Development (BDD)  BDD na plataforma .NET
  • 6.  Para efetuar o download das soluções aqui apresentadas acesse: https://gallery.technet.microsoft.com/Exemplo-de-aplicaes-7dd7cbf1
  • 7.
  • 8.
  • 9.
  • 10.  Pressões por rápida entrega  Prazos muito curtos  Equipes reduzidas  Mudanças frequentes em requisitos  Áreas de Negócio e Técnica não falam mesma língua  Testes não são levados tão a sério como se deveria
  • 11.
  • 12.  Conciliar tempo reduzido com mudanças frequentes ao longo do projeto  Busca de equilíbrio entre qualidade e produtividade  Melhoria na comunicação entre os envolvidos em um projeto  XP (Extreme Programming) e Scrum são os exemplos mais famosos
  • 13.  Testes unitários são uma forma rápida e flexível de se validar classes e métodos → trata-se de uma proposta em conformidade com o conceito ágil  XP foi um dos primeiros métodos ágeis a incentivar o uso de testes unitários automatizados  Testes unitários foram a base para o surgimento da metodologia conhecida como TDD (Test-Driven Development)
  • 14.  Rapidez na execução  Implementados com facilidade, normalmente a partir de um framework pré-existente ◦ Alternativas na plataforma .NET:  Visual Studio Unit Testing Framework (MS Test)  NUnit (http://www.nunit.org/)  xUnit.net (https://github.com/xunit)  Automatizados e repetíveis  Possibilitam reuso em ações futuras
  • 15.  Testes unitários codificados antes mesmo da implementação das partes que serão submetidas a análises → evita-se assim a elaboração de testes “viciados”  Prioriza-se uma melhor organização do código, favorecendo práticas como separação de responsabilidades, alta coesão e baixo acoplamento
  • 16.  A implementação de uma funcionalidade segue um ciclo chamado Red-Green-Refactor (os testes unitários são executados em todos os estágios)
  • 17.  Cálculo do Fatorial – Casos de Teste:  Classe estática a ser implementada:  Estrutura esperada para a solução (Class Library + Unit Test Project):
  • 18.  Metodologia para desenvolvimento de softwares proposta por Dan North em 2006 (este especialista também criou o framework JBehave, primeira implementação de BDD voltada à plataforma Java)  Surgiu da experiência de North ministrando treinamentos sobre TDD, com o mesmo se deparando com a dificuldade de desenvolvedores em aplicar esta abordagem: ◦ Por onde começar com os testes unitários? ◦ O que testar ou não? ◦ Quando e quanto testar? ◦ Que nomenclatura utilizar nos testes? ◦ Por quais razões um teste falhou?
  • 19.  Foco errado na adoção de testes → verificar aspectos e pontos isolados de uma aplicação muitas vezes não é suficiente  Depender apenas de testes unitários não é garantia nenhuma de sucesso  É comum que surjam problemas durante a verificação da integração de diferentes partes de um sistema
  • 20.  Desenvolvedores experientes realizam testes enfatizando o comportamento das funcionalidades  Testes de aceitação → permitem a usuários finais simular operações cotidianas, analisando se as expectativas foram atendidas  Testes unitários como documentação → não são compreendidos por usuários de negócio (sem background técnico)
  • 21.  Metodologia baseada em user stories (histórias): ◦ Histórias descrevem os comportamentos esperados para funcionalidades ◦ Uso de uma linguagem ubíqua (em inglês “ubiquitous language”) → vocabulário comum baseado em elementos de negócio e dominado por todos os envolvidos no projeto ◦ Uma user story contém sentenças que seguem algumas regras de sintaxe de fácil compreensão ◦ Algumas sentenças representam cenários → simulações de comportamento em diferentes situações ◦ Frameworks permitem que as user stories sejam executadas como testes automatizados
  • 22.
  • 23.  Teste de aceitação → User story que serve de base para a implementação de uma funcionalidade e posterior validação da mesma
  • 24.  Melhor comunicação entre os profissionais envolvidos em um projeto → padronização através de uma linguagem comum  Documentação simples e gerada de forma dinâmica  Facilita o compartilhamento de conhecimentos a respeito de um projeto  User stories apresentam objetivos mais claros e bem definidos → desenvolvedores trabalham de forma mais direcionada  Instrumento de grande valia em equipes que seguem metodologias ágeis (como em Scrum, no qual também se empregam user stories)
  • 25.  O SpecFlow é talvez hoje a principal solução para a adoção das práticas de BDD em projetos no Visual Studio ◦ Site: http://www.specflow.org/ ◦ Baseado em um framework chamado Cucumber, o qual foi concebido inicialmente para a linguagem Ruby ◦ Empregado em conjunto com frameworks de testes unitários (MS Test, NUnit) ◦ Faz uso de um mecanismo conhecido como Gherkin  Parser que se baseia na utilização de uma linguagem estruturada  Sintaxe simples e não-técnica, capaz de ser entendida por pessoas da área de negócios  Possui suporte à internacionalização
  • 26.  Instalação de extensão para uso do SpecFlow → menu Tools
  • 27.  Extensão que integra o SpecFlow ao Visual Studio
  • 28.  Classe a ser criada:  Conversão de temperatura em graus Fahrenheit (F) para o equivalente nas escalas Celsius (C) e Kelvin (K):  Estrutura esperada para a solução (Class Library + Unit Test Project):
  • 29.  Adicionar o SpecFlow ao projeto de testes via NuGet:
  • 30.  Alterar o app.config do projeto de testes, de forma que a user story possa ser escrita em português (além de utilizar o framework MS Test):
  • 31.  Adicionar uma “Feature” ao projeto de testes:
  • 32.  Embora o conteúdo inicial do arquivo ConvTemperatura.feature esteja em inglês, o Visual Studio já exibirá como opções palavras-chaves em português:
  • 33.  A user story/especificação a ser criada deverá levar em conta os seguintes casos de teste:
  • 34.  A seguir está um possível conteúdo para a user story:
  • 35.  O próximo passo será a criação de uma classe baseada no template “SpecFlow Step Definition” → esta estrutura fará a conexão entre a user story e a classe ConversorTemperatura:
  • 36.  Em termos práticos, este novo arquivo conterá uma classe responsável por validar os diferentes cenários especificados anteriormente:
  • 37.  Expressões regulares serão utilizadas como “placeholders”, a fim de possibilitar a correta leitura dos parâmetros  Cada método definido em ConvTemperaturaStepDefinition corresponde ao mapeamento de uma sentença definida na user story (os atributos equivalem às palavras-chaves em inglês):
  • 38.  Uma possível implementação para ConvTemperaturaStepDefinition (utilizando a classe Assert do framework MS Test) seria:
  • 39.  É possível tanto a execução, quanto o “debug” de uma user story:
  • 40.  Num primeiro momento a execução da user story resultará em falhas em todos os cenários:
  • 41.  Regras para a implementação da classe ConversorTemperatura: C = (F – 32) / 1,8 K = C + 273,15
  • 42.  Uma possível implementação da classe ConversorTemperatura:
  • 43.  Uma nova execução da user story indicará então sucesso em todos os cenários:
  • 44.  Uma possível refatoração da classe ConversorTemperatura:
  • 45.  Após a refatoração:
  • 47.  Behavior Driven Development (BDD) com Specflow http://www.devmedia.com.br/behavior-driven-development-bdd- com-specflow/29405  Introducing BDD http://dannorth.net/introducing-bdd/  Testes Unitários no Visual Studio http://www.devmedia.com.br/testes-unitarios-no-visual-studio- 2012/27215  TDD - Test-Driven Development http://pt.slideshare.net/renatogroff1/tdd-renato-groffe