SlideShare a Scribd company logo
1 of 101
Download to read offline
BDD + =
BDD + =
“Os comportamentos de uma história são
simplesmente seus critérios de aceitação”
Chris Matts & Dan North
Quem vos apresenta BDD:
Eu! :D
Vitor Mattos
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?
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
Ice-cream testing
BDD no PHP
Como faz?
MUITO CÓDIGO
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
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 }
contexts: [ AdminContext ]
# 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
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
Avaliações
Perguntas
vitor.mattos@phprio.org
linkedin.com/in/vitormattos

More Related Content

What's hot

JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptRogério Moraes de Carvalho
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVMWilliam Gouvea
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Maellson Marques
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...George Mendonça
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação PythonCarlos Schults
 
JavaScript for Beginners
JavaScript for BeginnersJavaScript for Beginners
JavaScript for BeginnersSAPO Sessions
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em PythonRodrigo Hübner
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Flávio Ribeiro
 

What's hot (20)

JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação Python
 
JavaScript for Beginners
JavaScript for BeginnersJavaScript for Beginners
JavaScript for Beginners
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Python na Web
Python na WebPython na Web
Python na Web
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 

Viewers also liked

Melhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpMelhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpVitor Mattos
 
Xdebug seus problemas acabaram - TDC - PHPeste
Xdebug   seus problemas acabaram - TDC - PHPesteXdebug   seus problemas acabaram - TDC - PHPeste
Xdebug seus problemas acabaram - TDC - PHPesteVitor Mattos
 
El proceso de desarrollo con herramientas Open Source
El proceso de desarrollo con herramientas Open SourceEl proceso de desarrollo con herramientas Open Source
El proceso de desarrollo con herramientas Open SourceJose Juan R. Zuñiga
 
Phpday - Automated acceptance testing with Behat and Mink
Phpday - Automated acceptance testing with Behat and MinkPhpday - Automated acceptance testing with Behat and Mink
Phpday - Automated acceptance testing with Behat and MinkRichard Tuin
 
Seja subversivo, faça testes
Seja subversivo, faça testesSeja subversivo, faça testes
Seja subversivo, faça testesVitor Mattos
 
Apresentação feedback cool
Apresentação feedback coolApresentação feedback cool
Apresentação feedback coolVitor Mattos
 
Testes automatizados (2)
Testes automatizados (2)Testes automatizados (2)
Testes automatizados (2)cesarvianna
 
Gestión de requisitos y su trazabilidad en la Gestión de Servicios TI
Gestión de requisitos y su trazabilidad en la Gestión de Servicios TIGestión de requisitos y su trazabilidad en la Gestión de Servicios TI
Gestión de requisitos y su trazabilidad en la Gestión de Servicios TIOVERTI
 
Testing and TDD - Laravel and Express Examples
Testing and TDD - Laravel and Express ExamplesTesting and TDD - Laravel and Express Examples
Testing and TDD - Laravel and Express ExamplesDragos Strugar
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Marco Breveglieri
 
M1 tema 1 deteccion de incendios quimica del fuego
M1 tema 1   deteccion de incendios quimica del fuegoM1 tema 1   deteccion de incendios quimica del fuego
M1 tema 1 deteccion de incendios quimica del fuegojmsarmientom
 
SEMINARIO WEB - El ABC del Test Automation: ¿Qué, por qué, cuando y cómo?
SEMINARIO WEB - El ABC del Test Automation: ¿Qué, por qué, cuando y cómo?SEMINARIO WEB - El ABC del Test Automation: ¿Qué, por qué, cuando y cómo?
SEMINARIO WEB - El ABC del Test Automation: ¿Qué, por qué, cuando y cómo?Belatrix Software
 
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...Cyrille Martraire
 
Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Marco Breveglieri
 
Por qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que túPor qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que túJavier Acero
 

Viewers also liked (20)

Melhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpMelhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + php
 
Hackeando Dados públicos com python
Hackeando Dados públicos com pythonHackeando Dados públicos com python
Hackeando Dados públicos com python
 
PHP em Background
PHP em BackgroundPHP em Background
PHP em Background
 
Xdebug seus problemas acabaram - TDC - PHPeste
Xdebug   seus problemas acabaram - TDC - PHPesteXdebug   seus problemas acabaram - TDC - PHPeste
Xdebug seus problemas acabaram - TDC - PHPeste
 
El proceso de desarrollo con herramientas Open Source
El proceso de desarrollo con herramientas Open SourceEl proceso de desarrollo con herramientas Open Source
El proceso de desarrollo con herramientas Open Source
 
Phpday - Automated acceptance testing with Behat and Mink
Phpday - Automated acceptance testing with Behat and MinkPhpday - Automated acceptance testing with Behat and Mink
Phpday - Automated acceptance testing with Behat and Mink
 
Documentación
DocumentaciónDocumentación
Documentación
 
Seja subversivo, faça testes
Seja subversivo, faça testesSeja subversivo, faça testes
Seja subversivo, faça testes
 
Apresentação feedback cool
Apresentação feedback coolApresentação feedback cool
Apresentação feedback cool
 
Testes automatizados (2)
Testes automatizados (2)Testes automatizados (2)
Testes automatizados (2)
 
Gestión de requisitos y su trazabilidad en la Gestión de Servicios TI
Gestión de requisitos y su trazabilidad en la Gestión de Servicios TIGestión de requisitos y su trazabilidad en la Gestión de Servicios TI
Gestión de requisitos y su trazabilidad en la Gestión de Servicios TI
 
Introducción a Groovy
Introducción a GroovyIntroducción a Groovy
Introducción a Groovy
 
Testing and TDD - Laravel and Express Examples
Testing and TDD - Laravel and Express ExamplesTesting and TDD - Laravel and Express Examples
Testing and TDD - Laravel and Express Examples
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
 
M1 tema 1 deteccion de incendios quimica del fuego
M1 tema 1   deteccion de incendios quimica del fuegoM1 tema 1   deteccion de incendios quimica del fuego
M1 tema 1 deteccion de incendios quimica del fuego
 
Especificación medianteejemplos
Especificación medianteejemplosEspecificación medianteejemplos
Especificación medianteejemplos
 
SEMINARIO WEB - El ABC del Test Automation: ¿Qué, por qué, cuando y cómo?
SEMINARIO WEB - El ABC del Test Automation: ¿Qué, por qué, cuando y cómo?SEMINARIO WEB - El ABC del Test Automation: ¿Qué, por qué, cuando y cómo?
SEMINARIO WEB - El ABC del Test Automation: ¿Qué, por qué, cuando y cómo?
 
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
 
Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016
 
Por qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que túPor qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que tú
 

Similar to BDD + PHP = behat!

Ruby, Rails e Diversão
Ruby, Rails e DiversãoRuby, Rails e Diversão
Ruby, Rails e DiversãoJulio Monteiro
 
Aspectos profissionais 3pontos
Aspectos profissionais 3pontosAspectos profissionais 3pontos
Aspectos profissionais 3pontosMiguel Alho
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novoGiovanni Bassi
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehaveMarcelo Zeferino
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorDickson S. Guedes
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsVinicius Reis
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao SwingArthur Emanuel
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Engenharia de Software - Unimep/Pronatec - Aula 14
Engenharia de Software - Unimep/Pronatec - Aula 14Engenharia de Software - Unimep/Pronatec - Aula 14
Engenharia de Software - Unimep/Pronatec - Aula 14André Phillip Bertoletti
 

Similar to BDD + PHP = behat! (20)

Ruby, Rails e Diversão
Ruby, Rails e DiversãoRuby, Rails e Diversão
Ruby, Rails e Diversão
 
Aspectos profissionais 3pontos
Aspectos profissionais 3pontosAspectos profissionais 3pontos
Aspectos profissionais 3pontos
 
DDD - Step by Step
DDD - Step by StepDDD - Step by Step
DDD - Step by Step
 
O mundo visto de dentro do Ruby
O mundo visto de dentro do RubyO mundo visto de dentro do Ruby
O mundo visto de dentro do Ruby
 
ptt
pttptt
ptt
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Ecossistema Python
Ecossistema PythonEcossistema Python
Ecossistema Python
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novo
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehave
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Engenharia de Software - Unimep/Pronatec - Aula 14
Engenharia de Software - Unimep/Pronatec - Aula 14Engenharia de Software - Unimep/Pronatec - Aula 14
Engenharia de Software - Unimep/Pronatec - Aula 14
 
Aula 2
Aula 2Aula 2
Aula 2
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 

More from Vitor Mattos

Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017Vitor Mattos
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency managerVitor Mattos
 
Contribuindo e criando software livre
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livreVitor Mattos
 
Que oportunidades me encontrem!
Que oportunidades me encontrem!Que oportunidades me encontrem!
Que oportunidades me encontrem!Vitor Mattos
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Vitor Mattos
 

More from Vitor Mattos (6)

Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency manager
 
Contribuindo e criando software livre
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livre
 
Que oportunidades me encontrem!
Que oportunidades me encontrem!Que oportunidades me encontrem!
Que oportunidades me encontrem!
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!
 
JasperReports
JasperReportsJasperReports
JasperReports
 

BDD + PHP = behat!