SlideShare a Scribd company logo
1 of 105
Download to read offline
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
https://t.me/ElePHPants
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
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 }
# 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
Referências
https://github.com/vitormattos/palestra-behat/
https://dannorth.net
http://www.seleniumhq.org/
http://behat.org/
https://cucumber.io/
Perguntas
vitor.mattos@phprio.org
linkedin.com/in/vitormattos
t.me/VitorMattos

More Related Content

What's hot

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
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
RSpec - Desenvolvimento Baseado em Teste
RSpec - Desenvolvimento Baseado em TesteRSpec - Desenvolvimento Baseado em Teste
RSpec - Desenvolvimento Baseado em TesteEduardo Mendes
 
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
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Leonardo Melo Santos
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVACristiano Almeida
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVMWilliam Gouvea
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETphilipsoares
 
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
 
Padrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyPadrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyEduardo Nicola F. Zagari
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonGiancarlo Silva
 
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
 

What's hot (20)

7194099-Manual-de-Java
7194099-Manual-de-Java7194099-Manual-de-Java
7194099-Manual-de-Java
 
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
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
RSpec - Desenvolvimento Baseado em Teste
RSpec - Desenvolvimento Baseado em TesteRSpec - Desenvolvimento Baseado em Teste
RSpec - Desenvolvimento Baseado em Teste
 
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 ...
 
Unidade04
Unidade04Unidade04
Unidade04
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NET
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
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
 
Padrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyPadrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - Proxy
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Reflections
ReflectionsReflections
Reflections
 
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
 
Curso ruby on rails
Curso ruby on railsCurso ruby on rails
Curso ruby on rails
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 

Similar to 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 sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasVitor Mattos
 
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
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpecguest49d83b2
 
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
 
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
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao SwingArthur Emanuel
 
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e WebdriverJúlio de Lima
 
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
 

Similar to BDD: torne viva a documentação de seus sistemas (20)

BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
 
Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
Ruby, Rails e Diversão
Ruby, Rails e DiversãoRuby, Rails e Diversão
Ruby, Rails e Diversão
 
ptt
pttptt
ptt
 
DDD - Step by Step
DDD - Step by StepDDD - Step by Step
DDD - Step by Step
 
Aspectos profissionais 3pontos
Aspectos profissionais 3pontosAspectos profissionais 3pontos
Aspectos profissionais 3pontos
 
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
 
Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpec
 
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
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
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
 
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
 
Ecossistema Python
Ecossistema PythonEcossistema Python
Ecossistema Python
 
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
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
 
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
 

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 - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor 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
 
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
 
Melhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpMelhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpVitor Mattos
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Vitor Mattos
 

More from Vitor Mattos (12)

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 - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
Xdebug seus problemas acabaram - TDC - PHPeste
Xdebug   seus problemas acabaram - TDC - PHPesteXdebug   seus problemas acabaram - TDC - PHPeste
Xdebug seus problemas acabaram - TDC - PHPeste
 
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
 
Melhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpMelhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + php
 
PHP em Background
PHP em BackgroundPHP em Background
PHP em Background
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!
 
JasperReports
JasperReportsJasperReports
JasperReports
 

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