SlideShare a Scribd company logo
© 2015 Marcio Marchini
BDD Minimalista no
NamoroOn.com :
um Exemplo Pragmático de
API First
Marcio Marchini
www.BetterDeveloper.net
2015/11/02
© 2015 Marcio Marchini
O Poblema: Ajudando em www.NamoroOn.com
Implementar o “Gosta ou
Não?” (tipo Tinder)
Servidor existente
(“legado” sem BDD/TDD)
© 2015 Marcio Marchini
Passo 1: API First
Preciso de camadas (MVC)
Preciso de APIs
API First (Jim des Rivieres)
Insight: Um teste é uma
spec executável de uma
use case da API (mindset
diferente!)
© 2015 Marcio Marchini
Passo 2: Pensando na camada Modelo
Tenho que ter a nova
funcionalidade na camada
Modelo
Tenho que poder usar de uma
GUI ou até mesmo de uma UI de
texto se for o caso
Insight: Testes podem ser
vistos como uma “UI de texto”
© 2015 Marcio Marchini
Passo 3: Modelando camada Modelo
Rankeamento de pessoas
Engine independente de GUI
(Camadas!)
 Descoberta a abstração:
“RankingEngine” (nome da
classe com a fachada da API –
service API)
© 2015 Marcio Marchini
Passo 4: Modelando a API
Idealmente como User Stories
Idealmente polimórficas (multi
camada se possível)
Idealmente de validação
executável
© 2015 Marcio Marchini
Passo 4: Modelando as Use Cases da API
1. Rankeados como Gostados São
Listados como Gostados
2. Rankeados como Não Gostados São
Listados como Não Gostados
3. Deve Ser Possível Rankear um
grupo de uma só vez (perf)
4. Deve Ser Possível obter quem me
Gostou tambem(Nos Gostamos)
5. ...
© 2015 Marcio Marchini
Passo 4: Modelando as Use Cases da API
5. Voto Duplicado Deve Ser Ignorado
6. Deve ser possível ser notificado
quando alguém gosta
unilateralmente de mim (Observer
Pattern!!!)
7. Deve ser possível ser notificado
quando alguém gosta mutuamente
de mim (Observer Pattern!!!)
© 2015 Marcio Marchini
Passo 5: Modelando as Use Cases da API com Testes
Por pragmatismo: usar framework
de teste unitário
Cada teste instancia a engine
Note: Pensar em serviços não quer dizer se prender a REST!!!
© 2015 Marcio Marchini
Passo 5: Modelando as Use Cases da API com Testes
Cada teste exercita uma ou mais
das APIs para completar toda
uma Use Case da API:
rank_as_liked ... ranked_as_liked?
© 2015 Marcio Marchini
Passo 5: Modelando as Use Cases da API com Testes
Vários testes da API (use cases):
© 2015 Marcio Marchini
Parênteses: Note o padrão nos nomes
1. Canônico:
As a <role> I should be able to <action>
in order to <value>
2. Pro Infinitivo:
<role> can <action>…
3. Nome do teste/spec:
test_[role]_can_<action>
4. Alternativa: Deve ser possível…
test_it_is_possible_to_<action>
© 2015 Marcio Marchini
Passo 6: Implementando a Camada Modelo
A API da Engine:
© 2015 Marcio Marchini
Passo 7: Rodar Testes, Verificar Cobertura etc
Rodar da IDE
Rodar do cmd-line, etc. Varia de
IDE pra IDE, de runtime pra
runtime, de linguagem pra
linguagem (uso Paver)
© 2015 Marcio Marchini
Passo 8: Repetir a dose pra camada Controller - testes
Mesma coisa na camada
Controller
Tentar preservar mesmas use
cases e mesma APIs, se possível
(API polimórfica de camada)
© 2015 Marcio Marchini
Passo 8: Modelando as Use Cases da API [REST] com Testes
Cada teste exercita uma ou mais
das APIs para completar toda a
Use Case da API:
(.../rank/group, .../rank/liked)
© 2015 Marcio Marchini
Passo 8: Repetir a dose pra camada Controller - impl
Mesma coisa na camada
Controller
Tentar preservar mesmas APIs, se
possível (API polimórfica de
camada)
Parâmetros e APIs extra são o
valor agregado da camada (auth)
© 2015 Marcio Marchini
Passo 8: Repetir a dose pra camada Controller - impl
Thin Controllers (fat Models)
• Adicionam auth, param sanity, usam Engine.
• Adaptam de REST p/ sua linguagem
• Single Responsibility Principle!
© 2015 Marcio Marchini
Passo 9: Rodar Testes, Verificar Cobertura etc
Rodar da IDE
Rodar do cmd-line, etc. Varia de
IDE pra IDE, de runtime pra
runtime, etc (uso Paver)
© 2015 Marcio Marchini
ALERTA: Quão Bem Está Seu Grupo? Joel On Software
 The Joel Test: 12 Stepsto Better Code, By Joel Spolsky
 Wednesday, August 09, 2000
 http://www.joelonsoftware.com/articles/fog0000000043.html
1. Do you use source control?
2. Can you make a build in one step?
3. Do you make daily builds?
4. Do you have a bug database?
5. Do you fix bugsbefore writing new code?
6. Do you have an up-to-date schedule?
7. Do you have a spec?
8. Do programmershave quiet working conditions?
9. Do you use the best toolsmoney can buy?
10.Do you have testers?
11.Do new candidateswrite code during their interview?
12.Do you do hallway usability testing?
© 2015 Marcio Marchini
Especificação Ágil Executável: K.I.S.S.
Resumo: No NamoroOn, Regras de Negócio são Executáveis
Pinocchio com spectest
© 2015 Marcio Marchini
• No seu projeto, você tem um macarrão (caro de manter $$$) ou
algo bem arquitetado (e maleável $)?
• Coisasóbviasajudam: Injeção de Dependência no constructor:
RankingController(ranking_engine = RankingEngine())
• Camadas:
API First = Camadas Independentes e Boas Métricas
Na www.Nexxera.com estamosusando ferramental para
projetar & garantir camadase métricas, em Python!
© 2015 Marcio Marchini
• “Faça 2 UIs” – Vai dificultar você seguir o caminho do mal (da
massaroca)
• Ou: Consigo fazer um app console (sem GUI) usando somente
sua camada modelo, sem sua camada REST?
• Ou: Consigo fazer um app de GUI (Python+Qt?) usando somente
sua camada modelo, sem sua camada REST?
• Ou: você pensa/modela em camadas/componentesbottom-up
SRP, ou “fazer um sistema”?
• Ou: consigo dar um “pip install” da sua camada modelo sem
trazer a capa RESTjunto?
Heurística do Marchini
© 2015 Marcio Marchini
Resumo da Mensagem
APIs, BDD, Camadas  ROI:
“Pay me now ($) or pay me later ($$$)”
Because, one way or another, you will pay…
“If you think it's expensive to hire a
professional to do the job, wait until you
hire an amateur.”
© 2015 Marcio Marchini
FIM : Resumindo. Perguntas/Comentários?
BDD é TDD do jeito certo.
BDD sozinho não garante boas APIs!
Use BDD de componentes/APIs (API First)
para arquitetura LEGO
Use BDD polimórfico multi-camada MVC
Verbos e Substativos do Domínio do
Problema (legibilidade, DDD)
Não esqueça do apêndice! (próximo slide)
© 2015 Marcio Marchini
Apêndice: Alguns Links e Comentários Úteis
• API First
http://www.eclipsecon.org/2005/presentations/EclipseCon2005_12.2APIFirst.pd
f
• How to Design a Good API and Why it Matters
http://lcsd05.cs.tamu.edu/slides/keynote.pdf ,
https://www.youtube.com/watch?v=aAb7hSCtvGw
• Web API Design
http://blog.apigee.com/detail/announcement_new_ebook_on_web_api_design/
• Python Pinocchio e SpecTest: https://github.com/mkwiatkowski/pinocchio
• Python Behave http://pythonhosted.org/behave/
• Python Lettuce http://lettuce.it
• Robot Framework (ATDD): http://robotframework.org
• Investigue o modelo canônico de User Stories: “As a <role> I should be able to
<action> so that <business value>”
• Investigue o modelo canônico de Acceptance Criteria: “Given <pre-condition(s)>
When <action(s)> Then <post-condition(s)>”
• Curso Better Developer  : http://www.betterdeveloper.net/cursos.html
”Quem Lê Sabe Mais…” – Sabedoria repassada pelo papa Marchini

More Related Content

What's hot

Automatizando uma app Híbrida
Automatizando uma app HíbridaAutomatizando uma app Híbrida
Automatizando uma app Híbrida
Elias Nogueira
 
Coders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingCoders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile Testing
Samanta Cicilia
 
Uma Sprint na Vida do Tester
Uma Sprint na Vida do TesterUma Sprint na Vida do Tester
Uma Sprint na Vida do Tester
Vitor Pelizza
 
Acelerando o feedback e deploy com Automação de Testes!
Acelerando o feedback e deploy com Automação de Testes! Acelerando o feedback e deploy com Automação de Testes!
Acelerando o feedback e deploy com Automação de Testes!
Elias Nogueira
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores Efetivos
Diego Santos
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
Samanta Cicilia
 
DevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile TestingDevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile Testing
Samanta Cicilia
 
O Testador Técnico
O Testador TécnicoO Testador Técnico
O Testador Técnico
Elias Nogueira
 
Apenas um script de teste para iOS e Android
Apenas um script de teste para iOS e AndroidApenas um script de teste para iOS e Android
Apenas um script de teste para iOS e Android
Elias Nogueira
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
Elias Nogueira
 
#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
Fernanda Ferreira
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
Elias Nogueira
 
Automação de Teste - BRATESTE 2010
Automação de Teste - BRATESTE 2010Automação de Teste - BRATESTE 2010
Automação de Teste - BRATESTE 2010
Elias Nogueira
 
Lottie API Para Animações no Android
Lottie API Para Animações no AndroidLottie API Para Animações no Android
Lottie API Para Animações no Android
Vinícius Thiengo
 
[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery
Samanta Cicilia
 
Testes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e BlazemeterTestes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e Blazemeter
Elias Nogueira
 
Feedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionaisFeedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionais
Elias Nogueira
 
Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...
Elias Nogueira
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
Elias Nogueira
 
Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014
Elias Nogueira
 

What's hot (20)

Automatizando uma app Híbrida
Automatizando uma app HíbridaAutomatizando uma app Híbrida
Automatizando uma app Híbrida
 
Coders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingCoders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile Testing
 
Uma Sprint na Vida do Tester
Uma Sprint na Vida do TesterUma Sprint na Vida do Tester
Uma Sprint na Vida do Tester
 
Acelerando o feedback e deploy com Automação de Testes!
Acelerando o feedback e deploy com Automação de Testes! Acelerando o feedback e deploy com Automação de Testes!
Acelerando o feedback e deploy com Automação de Testes!
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores Efetivos
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
DevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile TestingDevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile Testing
 
O Testador Técnico
O Testador TécnicoO Testador Técnico
O Testador Técnico
 
Apenas um script de teste para iOS e Android
Apenas um script de teste para iOS e AndroidApenas um script de teste para iOS e Android
Apenas um script de teste para iOS e Android
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
 
Automação de Teste - BRATESTE 2010
Automação de Teste - BRATESTE 2010Automação de Teste - BRATESTE 2010
Automação de Teste - BRATESTE 2010
 
Lottie API Para Animações no Android
Lottie API Para Animações no AndroidLottie API Para Animações no Android
Lottie API Para Animações no Android
 
[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery
 
Testes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e BlazemeterTestes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e Blazemeter
 
Feedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionaisFeedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionais
 
Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
 
Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014
 

Similar to BDD-NamoroOn

[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
iMasters
 
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTPPalestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Priscila Coelho S. Blauth
 
Xamarin UI Test + BDD Specflow
Xamarin UI Test + BDD SpecflowXamarin UI Test + BDD Specflow
Xamarin UI Test + BDD Specflow
Cleiton Felipe Moraes
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio Nas
WordCamp Floripa
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
Isaac de Souza
 
TesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdfTesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdf
Bruno Zolotareff dos Santos
 
Artigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle BehaveArtigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle Behave
Julian Cesar
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
José Alexandre Macedo
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
Ruben Marcus Luz Paschoarelli
 
MTC 2017 pirâmide de automação mobile de testes
MTC 2017   pirâmide de automação mobile de testesMTC 2017   pirâmide de automação mobile de testes
MTC 2017 pirâmide de automação mobile de testes
Wellington Avelino dos Santos
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
Kleitor Franklint Correa Araujo
 
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
tdc-globalcode
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
Alexandre Tarifa
 
Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016
Ramon Durães
 
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu SoftwareDevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
André Dias
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
Dextra Sistemas / Etec Itu
 
Talk testes em flutter
Talk testes em flutterTalk testes em flutter
Talk testes em flutter
Jhonatas Matos
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
Carlos Wagner Costa
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
Rodrigo Branas
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
Adriano Bertucci
 

Similar to BDD-NamoroOn (20)

[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTPPalestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
 
Xamarin UI Test + BDD Specflow
Xamarin UI Test + BDD SpecflowXamarin UI Test + BDD Specflow
Xamarin UI Test + BDD Specflow
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio Nas
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
TesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdfTesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdf
 
Artigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle BehaveArtigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle Behave
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
MTC 2017 pirâmide de automação mobile de testes
MTC 2017   pirâmide de automação mobile de testesMTC 2017   pirâmide de automação mobile de testes
MTC 2017 pirâmide de automação mobile de testes
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
 
Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016
 
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu SoftwareDevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
 
Talk testes em flutter
Talk testes em flutterTalk testes em flutter
Talk testes em flutter
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
 

More from Marcio Marchini

Critérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou TerceirizadosCritérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou Terceirizados
Marcio Marchini
 
É Pythonico, mas... é macarrônico
É Pythonico, mas... é macarrônicoÉ Pythonico, mas... é macarrônico
É Pythonico, mas... é macarrônico
Marcio Marchini
 
Whitepaper-Custos
Whitepaper-CustosWhitepaper-Custos
Whitepaper-Custos
Marcio Marchini
 
01-a-Intro-BetterDev
01-a-Intro-BetterDev01-a-Intro-BetterDev
01-a-Intro-BetterDev
Marcio Marchini
 
OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014
Marcio Marchini
 
gae
gaegae
mqm-Agile
mqm-Agilemqm-Agile
mqm-Agile
Marcio Marchini
 
Branches-Intro
Branches-IntroBranches-Intro
Branches-Intro
Marcio Marchini
 

More from Marcio Marchini (8)

Critérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou TerceirizadosCritérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou Terceirizados
 
É Pythonico, mas... é macarrônico
É Pythonico, mas... é macarrônicoÉ Pythonico, mas... é macarrônico
É Pythonico, mas... é macarrônico
 
Whitepaper-Custos
Whitepaper-CustosWhitepaper-Custos
Whitepaper-Custos
 
01-a-Intro-BetterDev
01-a-Intro-BetterDev01-a-Intro-BetterDev
01-a-Intro-BetterDev
 
OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014
 
gae
gaegae
gae
 
mqm-Agile
mqm-Agilemqm-Agile
mqm-Agile
 
Branches-Intro
Branches-IntroBranches-Intro
Branches-Intro
 

BDD-NamoroOn

  • 1. © 2015 Marcio Marchini BDD Minimalista no NamoroOn.com : um Exemplo Pragmático de API First Marcio Marchini www.BetterDeveloper.net 2015/11/02
  • 2. © 2015 Marcio Marchini O Poblema: Ajudando em www.NamoroOn.com Implementar o “Gosta ou Não?” (tipo Tinder) Servidor existente (“legado” sem BDD/TDD)
  • 3. © 2015 Marcio Marchini Passo 1: API First Preciso de camadas (MVC) Preciso de APIs API First (Jim des Rivieres) Insight: Um teste é uma spec executável de uma use case da API (mindset diferente!)
  • 4. © 2015 Marcio Marchini Passo 2: Pensando na camada Modelo Tenho que ter a nova funcionalidade na camada Modelo Tenho que poder usar de uma GUI ou até mesmo de uma UI de texto se for o caso Insight: Testes podem ser vistos como uma “UI de texto”
  • 5. © 2015 Marcio Marchini Passo 3: Modelando camada Modelo Rankeamento de pessoas Engine independente de GUI (Camadas!)  Descoberta a abstração: “RankingEngine” (nome da classe com a fachada da API – service API)
  • 6. © 2015 Marcio Marchini Passo 4: Modelando a API Idealmente como User Stories Idealmente polimórficas (multi camada se possível) Idealmente de validação executável
  • 7. © 2015 Marcio Marchini Passo 4: Modelando as Use Cases da API 1. Rankeados como Gostados São Listados como Gostados 2. Rankeados como Não Gostados São Listados como Não Gostados 3. Deve Ser Possível Rankear um grupo de uma só vez (perf) 4. Deve Ser Possível obter quem me Gostou tambem(Nos Gostamos) 5. ...
  • 8. © 2015 Marcio Marchini Passo 4: Modelando as Use Cases da API 5. Voto Duplicado Deve Ser Ignorado 6. Deve ser possível ser notificado quando alguém gosta unilateralmente de mim (Observer Pattern!!!) 7. Deve ser possível ser notificado quando alguém gosta mutuamente de mim (Observer Pattern!!!)
  • 9. © 2015 Marcio Marchini Passo 5: Modelando as Use Cases da API com Testes Por pragmatismo: usar framework de teste unitário Cada teste instancia a engine Note: Pensar em serviços não quer dizer se prender a REST!!!
  • 10. © 2015 Marcio Marchini Passo 5: Modelando as Use Cases da API com Testes Cada teste exercita uma ou mais das APIs para completar toda uma Use Case da API: rank_as_liked ... ranked_as_liked?
  • 11. © 2015 Marcio Marchini Passo 5: Modelando as Use Cases da API com Testes Vários testes da API (use cases):
  • 12. © 2015 Marcio Marchini Parênteses: Note o padrão nos nomes 1. Canônico: As a <role> I should be able to <action> in order to <value> 2. Pro Infinitivo: <role> can <action>… 3. Nome do teste/spec: test_[role]_can_<action> 4. Alternativa: Deve ser possível… test_it_is_possible_to_<action>
  • 13. © 2015 Marcio Marchini Passo 6: Implementando a Camada Modelo A API da Engine:
  • 14. © 2015 Marcio Marchini Passo 7: Rodar Testes, Verificar Cobertura etc Rodar da IDE Rodar do cmd-line, etc. Varia de IDE pra IDE, de runtime pra runtime, de linguagem pra linguagem (uso Paver)
  • 15. © 2015 Marcio Marchini Passo 8: Repetir a dose pra camada Controller - testes Mesma coisa na camada Controller Tentar preservar mesmas use cases e mesma APIs, se possível (API polimórfica de camada)
  • 16. © 2015 Marcio Marchini Passo 8: Modelando as Use Cases da API [REST] com Testes Cada teste exercita uma ou mais das APIs para completar toda a Use Case da API: (.../rank/group, .../rank/liked)
  • 17. © 2015 Marcio Marchini Passo 8: Repetir a dose pra camada Controller - impl Mesma coisa na camada Controller Tentar preservar mesmas APIs, se possível (API polimórfica de camada) Parâmetros e APIs extra são o valor agregado da camada (auth)
  • 18. © 2015 Marcio Marchini Passo 8: Repetir a dose pra camada Controller - impl Thin Controllers (fat Models) • Adicionam auth, param sanity, usam Engine. • Adaptam de REST p/ sua linguagem • Single Responsibility Principle!
  • 19. © 2015 Marcio Marchini Passo 9: Rodar Testes, Verificar Cobertura etc Rodar da IDE Rodar do cmd-line, etc. Varia de IDE pra IDE, de runtime pra runtime, etc (uso Paver)
  • 20. © 2015 Marcio Marchini ALERTA: Quão Bem Está Seu Grupo? Joel On Software  The Joel Test: 12 Stepsto Better Code, By Joel Spolsky  Wednesday, August 09, 2000  http://www.joelonsoftware.com/articles/fog0000000043.html 1. Do you use source control? 2. Can you make a build in one step? 3. Do you make daily builds? 4. Do you have a bug database? 5. Do you fix bugsbefore writing new code? 6. Do you have an up-to-date schedule? 7. Do you have a spec? 8. Do programmershave quiet working conditions? 9. Do you use the best toolsmoney can buy? 10.Do you have testers? 11.Do new candidateswrite code during their interview? 12.Do you do hallway usability testing?
  • 21. © 2015 Marcio Marchini Especificação Ágil Executável: K.I.S.S. Resumo: No NamoroOn, Regras de Negócio são Executáveis Pinocchio com spectest
  • 22. © 2015 Marcio Marchini • No seu projeto, você tem um macarrão (caro de manter $$$) ou algo bem arquitetado (e maleável $)? • Coisasóbviasajudam: Injeção de Dependência no constructor: RankingController(ranking_engine = RankingEngine()) • Camadas: API First = Camadas Independentes e Boas Métricas Na www.Nexxera.com estamosusando ferramental para projetar & garantir camadase métricas, em Python!
  • 23. © 2015 Marcio Marchini • “Faça 2 UIs” – Vai dificultar você seguir o caminho do mal (da massaroca) • Ou: Consigo fazer um app console (sem GUI) usando somente sua camada modelo, sem sua camada REST? • Ou: Consigo fazer um app de GUI (Python+Qt?) usando somente sua camada modelo, sem sua camada REST? • Ou: você pensa/modela em camadas/componentesbottom-up SRP, ou “fazer um sistema”? • Ou: consigo dar um “pip install” da sua camada modelo sem trazer a capa RESTjunto? Heurística do Marchini
  • 24. © 2015 Marcio Marchini Resumo da Mensagem APIs, BDD, Camadas  ROI: “Pay me now ($) or pay me later ($$$)” Because, one way or another, you will pay… “If you think it's expensive to hire a professional to do the job, wait until you hire an amateur.”
  • 25. © 2015 Marcio Marchini FIM : Resumindo. Perguntas/Comentários? BDD é TDD do jeito certo. BDD sozinho não garante boas APIs! Use BDD de componentes/APIs (API First) para arquitetura LEGO Use BDD polimórfico multi-camada MVC Verbos e Substativos do Domínio do Problema (legibilidade, DDD) Não esqueça do apêndice! (próximo slide)
  • 26. © 2015 Marcio Marchini Apêndice: Alguns Links e Comentários Úteis • API First http://www.eclipsecon.org/2005/presentations/EclipseCon2005_12.2APIFirst.pd f • How to Design a Good API and Why it Matters http://lcsd05.cs.tamu.edu/slides/keynote.pdf , https://www.youtube.com/watch?v=aAb7hSCtvGw • Web API Design http://blog.apigee.com/detail/announcement_new_ebook_on_web_api_design/ • Python Pinocchio e SpecTest: https://github.com/mkwiatkowski/pinocchio • Python Behave http://pythonhosted.org/behave/ • Python Lettuce http://lettuce.it • Robot Framework (ATDD): http://robotframework.org • Investigue o modelo canônico de User Stories: “As a <role> I should be able to <action> so that <business value>” • Investigue o modelo canônico de Acceptance Criteria: “Given <pre-condition(s)> When <action(s)> Then <post-condition(s)>” • Curso Better Developer  : http://www.betterdeveloper.net/cursos.html ”Quem Lê Sabe Mais…” – Sabedoria repassada pelo papa Marchini

Editor's Notes

  1. Marchini entra e mostra a Agenda, começa a apresentar.
  2. Marchini entra e mostra a Agenda, começa a apresentar.
  3. Marchini entra e mostra a Agenda, começa a apresentar.