SlideShare uma empresa Scribd logo
BDD: torne viva a
documentação de seus
sistemas
“Os comportamentos de uma história são
simplesmente seus critérios de aceitação”
Chris Matts & Dan North
Fotografem, comentem,
Twittem!
@VitorMattosRJ
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
https://t.me/ElePHPants
Desenvolvedor PHP desde 2003
Amante de opensource
Evangelista PHP
PHP Zend Certified Engineer ( ZEND024235 )
PHPRio ( https://telegram.me/phprio )
Redes sociais: ( procure por vitormattos )
Quem sou eu?
Ide, e anunciai que o
@PHPeste está próximo.
Deixai o PHP falar por tua
boca, e alertai aos nativos do
Rio Grande do Sul que a
chegada de Rasmus Lerdorf é
esperada, e fale ao povo de
Java que ainda é tempo de
conversão. Fazei isso em
memória da comunidade.
Alessandro Feitoza
Evangelista PHP
O culpado...
Testes
Por que fazê-los se eu já
posso começar
desenvolvendo?
“Se alguma coisa tem a mais remota chance
de dar errado, certamente dará.”
Edward A. Murphy
Lei de Murphy
Escrevendo testes
"É de conhecimento geral entre os
analistas de softwares que nunca se
elimina o último bug de um programa.
Os bugs são aceitos como uma triste
realidade. Esperamos eliminá-los
todos, um por um, mas nunca
conseguiremos nos livrar deles."
Tom DeMarco
Teste unitário
O que é isso?
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
Um exemplo de TDD
com PHPUnit
Test Driven Development
Test Driven Development
Como testar se não tem nem código escrito?
Test Driven Development
Behavior
© 2003, Dan North
O que é BDD?
Tá bom…. BDD pode me ajudar
mas...
Definição de BDD por Dan North
“BDD is a second-generation, outside–in,
pull-based, multiple-stakeholder, multiple-scale,
high-automation, agile methodology.
It describes a cycle of interactions with
well-defined outputs, resulting in the delivery of
working, tested software that matters.”
Testes...
Podem ser
escritos
manualmente
Testes automatizados
“A preguiça é a mãe do
progresso. Se o homem não
tivesse preguiça de caminhar,
não teria inventado a roda”
Mário Quintana
Pirâmide de testes
Pirâmide de testes
Ice-cream testing
BDD no PHP
Como faz?
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
MUITO CÓDIGO
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
TEM CÓDIGO PHP
Melhorando os testes
“I have a
dream”
Martin Luther King
O centro do problema
‫דרישות‬
потребностей
‫اﻟﻣﺗطﻠﺑﺎت‬
skenario
需求 Tələblər
Programadores conversam usando jargões técnicos
( design patterns, abreviações, termos técnicos )
Especialistas do Domínio usam terminologias
específicas de suas áreas de conhecimento
(economia, hotelaria, telecom, …)
Softwares são escritos em diversas linguagens
Alguém tem que ceder!
O acordo
Agile prega que
programadores devem usar a
linguagem de domínio como
nomenclaturas no código
fonte
(“ubiquitous language”,
“system metaphor” na XP)
u. bí .qu:o
A language structured around the
domain model and used by all team
members to connect all the activities
of the team with the software.
(Excerpted from Domain-Driven Design by Eric Evans).
We understand each other.
(Excerpted from The Art of Agile Development
by James Shore and Shane Warden,
published by O'Reilly.
© 2008 the authors.)
Gherkin
Escreva histórias e cenários de testes
com linguagem ubiqua
Escrevendo histórias
com linguagem ubiqua
Como [X]
eu quero [Y]
para que [Z]
“Os comportamentos de
uma história são
simplesmente seus
critérios de aceitação”
Chris Matts & Dan North
Escrevendo histórias
com linguagem ubiqua
Feature: Feature description
In order to …
As a …
I need …
Escrevendo histórias
com linguagem ubiqua
Feature: Feature description
In order to …
As a …
I need …
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Escrevendo histórias
com linguagem ubiqua
Feature: Feature description
In order to …
As a …
I need …
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Escrevendo histórias
com linguagem ubiqua
Feature: Feature description
In order to …
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Escrevendo histórias
com linguagem ubiqua
Feature: Feature description
In order to …
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Feature
Funcionaldiade
Escrevendo histórias
com linguagem ubiqua
Feature: Feature description
In order to …
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Feature
Funcionaldiade
Scenario
Cenário
Escrevendo histórias
com linguagem ubiqua
Feature: Feature description
In order to …
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Feature
Funcionaldiade
Scenario
Cenário
Step
Passo
BDD: Torne viva a documentação de seus sistemas
Escrevendo uma Feature
Feature: Feature description
In order to …
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Escrevendo uma Feature
Feature: Feature description
In order to …
As a …
I need …
Scenario: 1st scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Scenario: 2nd scenario title
Given some initial context (the givens),
When an event occurs,
Then ensure some outcomes.
Escrevendo uma história!
#language: pt
Funcionalidade: Descrição da feature
Com o objetivo de …
Como …
Eu preciso …
Cenário: título do primeiro cenário
Dado algum contexto inicial,
Quando ocorre um evento,
Então verifique alguns resultados.
Cenário: título do segundo cenário
Dado algum contexto inicial,
Quando ocorre um evneto,
Então verifique alguns resultados.
Escrevendo uma história!
#language: ja
フィーチャ: Descrição da feature
Com o objetivo de …
Como …
Eu preciso …
シナリオ: título do primeiro cenário
前提< algum contexto inicial,
もし< ocorre um evento,
ならば< verifique alguns resultados.
シナリオ: título do segundo cenário
前提< algum contexto inicial,
もし< ocorre um evneto,
ならば< verifique alguns resultados.
Escrevendo uma história!
#language: fr
Fonctionnalité: Descrição da feature
Com o objetivo de …
Como …
Eu preciso …
Scénario: título do primeiro cenário
Étant donnée algum contexto inicial,
Lorsque ocorre um evento,
Alors verifique alguns resultados.
Scénario: título do segundo cenário
Étant donnée algum contexto inicial,
Lorsque ocorre um evneto,
Alors verifique alguns resultados.
Escrevendo uma história!
#language: el
Δυνατότητα: Descrição da feature
Com o objetivo de …
Como …
Eu preciso …
Σενάριο: título do primeiro cenário
Δεδομένου algum contexto inicial,
Όταν ocorre um evento,
Τότε verifique alguns resultados.
Σενάριο: título do segundo cenário
Δεδομένου algum contexto inicial,
Όταν ocorre um evneto,
Τότε verifique alguns resultados.
Instalando o behat
Instalando o behat
O que é
Composer?
mas...
Socorro! Ele já está falando
coisas que não entendo
novamente!
Como utilizar o Composer?
getcomposer.org
Como utilizar o Composer?
Baixe o instalador do composer
Como utilizar o Composer?
O que é um phar?
Como utilizar o Composer?
O que é um phar?
Php ARchive
Como utilizar o Composer?
Cirando arquivo de dependências .json
Como utilizar o Composer?
Como utilizar o Composer?
4.926.844 instalações
desde v2.2 (2011-12-14)
Como utilizar o Composer?
Executando o composer
e instalando o behat
Como utilizar o Composer?
Executando o composer
e instalando o behat
Iniciar o projeto com
Behat
Um teste local simples
Arquivo: features/ls.feature
Feature: ls
In order to see the directory structure
As a UNIX user
I need to be able to list the current directory's contents
Scenario:
Given I am in a directory "test"
And I have a file named "foo"
And I have a file named "bar"
When I run "ls"
Then I should get:
"""
bar
foo
"""
Vamos ver como funciona?
Talk is cheap. Show me the code.
(Linus Torvalds)
Annotations
@nnotations
@Given
@When
@Then
Annotations
@nnotations
@Given
@When
@Then
@And
@But
Annotations
@nnotations
@Given
@When
@Then
@And
@But
Profile
Suítes de teste v3.x
Suítes de teste v3.x
Profile
suite #1
suite #1
Profile
suite #1
.feature #1
.feature #2
Classe de contexto
suite #1
.feature #1
.feature #2
Classe de contexto
Suítes de teste v3.x
Suítes de teste v3.x
# behat.yml
default:
suites:
core_features:
paths: [ %paths.base%/features/core ]
contexts: [ CoreDomainContext ]
user_features:
paths: [ %paths.base%/features/web ]
filters: { tags: @user }
contexts: [ UserContext ]
admin_features:
paths: [ %paths.base%/features/web ]
filters: { tags: @admin }
# behat.yml
default:
suites:
core_features:
paths: [ %paths.base%/features/core ]
contexts:
- FeatureContext:
args:
base_url: http://meusite.dev
parameter1: value1
parameter2:
usuario: vitor
senha: whiskassache
Suítes de teste v3.x
Mas… quais palavras
posso usar?
Sintaxe da história
Sintaxe da história
Dicionário de dados
Usando PHPUnit no
Behat
Resultado dos testes
passed => passou
failed => falhou
pending => pendente
undefined => indefinido
skipped => omitido
Hooks para Behat
Uma maneira limpa e simples
de customizar o behat
@BeforeFeature, @AfterFeature
@BeforeScenario, @AfterScenario
@BeforeStep, @AfterStep
Hooks para Behat
Melhorando os testes
“I have a
dream”
Martin Luther King
Evoluindo para a web
Múltiplos navegadores
Headless browser
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
Um breve exemplo...
# language: pt
Funcionalidade: Busca na Wikipedia
Vamos buscar na Wikipedia por Ada Lovelace
e precisamos ver se retorna isto mesmo.
@javascript
Cenário: Busca por Ada Lovelace
Dado estou na página de entrada
E preencho "search" com "Ada Lovelace"
E pressiono "go"
Então devo ver "Ada Augusta King"
Vamos ver como funciona?
Conclusão
“Eu cheguei a seguinte conclusão:
não adianta consertar o resto,
conserta a gente ajuda pra
caramba”
Renato Russo
Que país é esse?
Transparência na escrita
dos testes
# language: pt
Funcionalidade: Busca na Wikipedia
Vamos buscar na Wikipedia por Ada Lovelace
e precisamos ver se retorna isto mesmo.
@javascript
Cenário: Busca por Ada Lovelace
Dado estou na página de entrada
E preencho "search" com "Ada Lovelace"
E pressiono "go"
Então devo ver "Ada Augusta Byron King"
Integra não desenvolvedores
na escrita dos testes
TDD não resolve tudo
BDD também não
Possibilidade de
automatização de testes
Velocidade para implementar
algo em produção
Deploys automatizados
Baixo custo para
implementar testes
Referências
https://github.com/vitormattos/palestra-behat/
https://dannorth.net
http://www.seleniumhq.org/
http://behat.org/
https://cucumber.io/
BDD: Torne viva a documentação de seus sistemas
Perguntas
avalie.se/phprs
Redes sociais ( vitormattos )

Mais conteúdo relacionado

PDF
Xdebug seus problemas acabaram - tdc floripa 2017
PDF
BDD + PHP = behat!
PDF
BDD: torne viva a documentação de seus sistemas
PDF
Python na Web
KEY
Django - Desenvolvimento web ágil com Python
PDF
Criando sua própria linguagem de programação
PDF
Contribuindo e criando software livre
PDF
Python WTFAQ?
Xdebug seus problemas acabaram - tdc floripa 2017
BDD + PHP = behat!
BDD: torne viva a documentação de seus sistemas
Python na Web
Django - Desenvolvimento web ágil com Python
Criando sua própria linguagem de programação
Contribuindo e criando software livre
Python WTFAQ?

Mais procurados (20)

PDF
Frameworks PHP
PDF
Desenvolvimento web com python e django
PDF
Comsolid2011 Introdução Python
PDF
Django: desenvolvendo aplicações web de maneira simples e rápida!
ODP
Python para Programadores
PDF
PDF
Criando Webservice REST com NodeJS, NoSQL & Docker
ODP
ODP
Matando o Java e Mostrando o Python
PPT
Aula2
PDF
Node.JS - Campus Party Brasil 2011
PDF
Como Construir um Compilador cap-1
PDF
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
PDF
Xdebug seus problemas acabaram - TDC - PHPeste
PPTX
TypeScript - Campus party 2013
PDF
Canivete python
ODP
Linguagens Dinamicas na JVM
PPTX
Visão geral type script
ODP
Mini Curso Python
PDF
Introdução à Programação em Python
Frameworks PHP
Desenvolvimento web com python e django
Comsolid2011 Introdução Python
Django: desenvolvendo aplicações web de maneira simples e rápida!
Python para Programadores
Criando Webservice REST com NodeJS, NoSQL & Docker
Matando o Java e Mostrando o Python
Aula2
Node.JS - Campus Party Brasil 2011
Como Construir um Compilador cap-1
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
Xdebug seus problemas acabaram - TDC - PHPeste
TypeScript - Campus party 2013
Canivete python
Linguagens Dinamicas na JVM
Visão geral type script
Mini Curso Python
Introdução à Programação em Python
Anúncio

Semelhante a BDD: Torne viva a documentação de seus sistemas (20)

PPT
Ruby, Rails e Diversão
ODP
Processamento Automático da Língua Portuguesa - Campus Party Br 6
PDF
Behaviour-Driven Development com Ruby
PPTX
DDD - Step by Step
PDF
Ecossistema Python
PPTX
Isc aula 7
PDF
O mundo visto de dentro do Ruby
PPTX
Domain-Driven Design
PDF
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
ODP
PDF
Palestra Ruby
PDF
Dicas para sua carreira de Desenvolvedor PHP
PDF
Heroku escalabilidade
PDF
Curso python
PPTX
Slide curso metasploit
ODP
Linux Conceitos Design
PDF
Composer dependency manager
PDF
TDC2018SP | Trilha Serveless - Pra que SERVErless?
PDF
Arquitectura De Um Linux
Ruby, Rails e Diversão
Processamento Automático da Língua Portuguesa - Campus Party Br 6
Behaviour-Driven Development com Ruby
DDD - Step by Step
Ecossistema Python
Isc aula 7
O mundo visto de dentro do Ruby
Domain-Driven Design
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
Palestra Ruby
Dicas para sua carreira de Desenvolvedor PHP
Heroku escalabilidade
Curso python
Slide curso metasploit
Linux Conceitos Design
Composer dependency manager
TDC2018SP | Trilha Serveless - Pra que SERVErless?
Arquitectura De Um Linux
Anúncio

Mais de Vitor Mattos (8)

PDF
Composer dependency manager - TDC - POA 2017
PDF
Que oportunidades me encontrem!
PPTX
Seja subversivo, faça testes
PDF
Apresentação feedback cool
PDF
Melhor que whatsapp: telegram + php
PDF
PHP em Background
PDF
Xdebug: Seus problemas acabaram!
PDF
JasperReports
Composer dependency manager - TDC - POA 2017
Que oportunidades me encontrem!
Seja subversivo, faça testes
Apresentação feedback cool
Melhor que whatsapp: telegram + php
PHP em Background
Xdebug: Seus problemas acabaram!
JasperReports

Último (9)

PPTX
Classifirrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrcação_IPAQ.pptx
PDF
Apostila_de_Laboratorio_de_Quimica_Inorg.pdf
PDF
Metodologias ágeis - Slides - aulas 1 a 5.pdf
PDF
Agosto-Lilas-Conscientizacao-e-Combate-a-Violencia-contra-a-Mulher.pdf
PPTX
TURMA modelo de modelo apresentação 4DE.pptx
PPTX
Fundamentos do Desenvolvimento Web. Fundamentos do Desenvolvimento Web.Fundam...
PDF
Certificado de Conclusão Jornada Inteligência Artificial
PDF
A sua pontuação aumenta ao escolher uma categoria, preencher uma descrição lo...
PPTX
AULA DE HTML E CSS PARA INICIANTES EM INFORMÁTICA
Classifirrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrcação_IPAQ.pptx
Apostila_de_Laboratorio_de_Quimica_Inorg.pdf
Metodologias ágeis - Slides - aulas 1 a 5.pdf
Agosto-Lilas-Conscientizacao-e-Combate-a-Violencia-contra-a-Mulher.pdf
TURMA modelo de modelo apresentação 4DE.pptx
Fundamentos do Desenvolvimento Web. Fundamentos do Desenvolvimento Web.Fundam...
Certificado de Conclusão Jornada Inteligência Artificial
A sua pontuação aumenta ao escolher uma categoria, preencher uma descrição lo...
AULA DE HTML E CSS PARA INICIANTES EM INFORMÁTICA

BDD: Torne viva a documentação de seus sistemas