SlideShare uma empresa Scribd logo
Globalcode – Open4education
Trilha PHP – Testes e Ambiente de
Integração Contínua PHP para o
Desenvolvimento Ágil
Bruno Yukio Tanoue
Web Developer – UOL BoaCompra
Globalcode – Open4education
Bruno Tanoue
Web Developer @ UOL BoaCompra ( 3 anos e 5
meses)
Checkout e Gateway de Pagamento BoaCompra.
Sistema Financeiro BoaCompra.
Bacharel em Ciência da Computação pela UEM
(Universidade Estadual de Maringá)
Email: brunotanoue@hotmail.com
LinkedIn: https://br.linkedin.com/in/brunotanoue
Globalcode – Open4education
Agenda
Pirâmide de Testes
Teste de Unidade Isolado x Colaborativo
Otimizações para Execução de Testes
Ambiente de Integração Contínua PHP
Globalcode – Open4education
Pirâmide de Testes
Objetivo: Promover uma proporção adequada de
testes para uma execução e um feedback rápido.
Testes de Unidade: Verificar a qualidade em pequenos
trechos de código (unidades).
Ex: PHPUnit
Testes de Integração: Testar a integração das unidades.
Ex: PHPUnit + DBUnit
Testes de Interface: Validar fluxos e informações
exibidas à nível de usuário.
Ex: Selenium Webdriver
Globalcode – Open4education
Pirâmide de Testes
http://martinfowler.com/bliki/TestPyramid.html
UI
Integração
Unidade
T
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Afinal o que é um teste de unidade?
Conceito mais utilizado e defendido:
Teste de Unidade Isolado: Método testado isoladamente
de outros métodos internos e comunicações externas
utilizando mocks.
Mock: Troca de uma estrutura real por uma estrutura
simulada para prosseguimento de um teste.
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Teste de Unidade Isolado
Controller Model Database
Controller Model(Mock)
UNIDADE
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Teste de Unidade Isolado
Pontos Positivos:
Execução rápida.
Localização mais rápida do erro no código.
Simulação de Exception.
Pontos Negativos:
Possível mock desatualizado.
Falso positivo nos testes.
Possível bug em produção.
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Afinal o que é um teste de unidade?
Outra definição:
Teste de Unidade Colaborativo: Método testado em
colaboração com seus métodos internos e comunicações
externas.
Mas o que é uma unidade neste caso?
Isso depende da profundidade do seu teste.
Globalcode – Open4education
UNIDADE
Teste de Unidade Isolado
x Colaborativo
Teste de Unidade Colaborativo
Controller Model Database
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Teste de Unidade Colaborativo
Pontos Positivos:
Execução dos testes com a estrutura real.
Cenário mais completamente testado (colaboração das
unidades).
Pontos negativos:
Tempo de execução mais lento.
Alta dependência entre componentes ou sistemas.
Falso negativo nos testes ( ex: comunicações externas).
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Qual tipo de teste de unidade é melhor?
É necessário avaliar cada caso e dependendo
da necessidade utilizar um dos dois tipos de teste.
E como fica a pirâmide de testes com o teste de
unidade colaborativo?
http://martinfowler.com/bliki/UnitTest.html
MUITO CONFUSA!!!!
Globalcode – Open4education
Otimizações para
Execução de Testes
O que é importante para uma execução de testes?
Devem passar confiança de que está tudo bem com o
código.
Devem ser de fácil compreensão.
A execução da suíte deve ser a mais rápida possível,
para que seja executada o quanto antes e o maior
número de vezes seja necessário. (Ex: a cada commit
do desenvolvedor.)
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Ambiente
Problemas que podem atrasar a execução de testes:
Concorrência de rede.
Concorrência de banco.
Possível solução: centralizar o ambiente de testes em
uma única máquina, seja virtual ou real com um banco
de dados próprio para testes.
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Ambiente
BANCO DE STAGING BANCO DE TESTES LOCAL
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Unidade
@dataProvider : criar um provedor de dados para
produzir entradas para um teste.
Globalcode – Open4education
Otimizações para
Execução de Testes
Without @dataProvider
Globalcode – Open4education
Otimizações para
Execução de Testes
With @dataProvider
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
setUp e tearDown
Na execução da suíte, evita que vários navegadores fiquem
abertos se vários testes falharem.
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
setUpBeforeClass e tearDownAfterClass
E se ao invés disso, o navegador fosse aberto e fechado uma
vez à cada classe de teste?
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Surefire Plugin (Execução de testes em paralelo)
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Resultados – Build #73
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Resultados – Build #75
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Resultados – Build #75
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Resultados – Build #76
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
O que é um ambiente de integração contínua?
Integração Contínua
Processo Ágil
Defende a entrega contínua de código em um repositório central
em curtos espaços de tempo.
O código a ser integrado não pode produzir defeitos no código
já existente. (testes)
O ambiente de integração contínua tem como objetivo
automatizar tarefas do processo de integração contínua.
A automatização é importante para diminuir os erros de
natureza humana.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Como criar um servidor de Integração Contínua
(CI) básico voltado para PHP?
Verificação
e
Atualização
de Cópia do
Repositório
Execução
dos Testes
Geração de
Pacote
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Como criar um servidor de Integração Contínua
(CI) básico voltado para PHP?
Ferramenta de CI (Jenkins, Hudson, etc..)
É o coração do servidor de integração contínua, onde todo o
processo de integração de código, teste e geração de pacotes é
feito.
Controle de Versionamento (GIT, SVN, etc...)
O servidor de CI vai bater no repositório central de tempos em
tempos verificando se houve alteração. Caso haja alteração,
uma construção será disparada e a cópia local é atualizada.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Como criar um servidor de Integração Contínua
(CI) básico voltado para PHP?
PHP/PHPUnit
Execução de testes para validação do código integrado.
Servidor Web (Apache) e Banco de Dados (MySQL,
SQLite, etc...)
Suporte para testes unitários colaborativos, testes de integração
e testes de interface.
Ferramenta de Building(Maven, Ant, etc...)
Geração de pacotes.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Vlw kpiaum!!! Então agora eu vou sair instalando
tudo na mão!!!!
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
O Jenkins pode gerenciar a instalação da maioria
dos componentes através de PLUGINS.
Pode gerenciar várias versões de determinado
componente.
Fácil instalação, remoção ou atualização.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Outros Plugins de grande utilidade:
Clover PHP
Gráfico de cobertura de código para cada construção.
Avisos quando a cobertura de código diminuir.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Outros Plugins de grande utilidade:
Clover PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Outros Plugins de grande utilidade:
HTML Publisher
Log PHPUnit: Fornece gráficos de cobertura de código de cada
pasta, classe ou método.
Informações de linhas cobertas, descobertas, dead code.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Outros Plugins de grande utilidade:
HTML Publisher
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
O processo de integração contínua dentro do
Jenkins é representado pelo job.
Um job pode ser configurado de uma maneira bastante
variada, podendo representar tanto uma etapa dentro da
integração contínua, como todo o processo de
integração contínua.
É possível alterar a ordem de execução dos passos
dentro de um job através de um simples “clica e arrasta”.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 1: Configurar o gerenciamento do código fonte.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 2: Configurar o método de verificação do
repositório (trigger).
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 3: Configurar a execução dos testes.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 4: Gerar os pacotes.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 5: Salvar e executar!!!!
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Log de Execução:
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Log de Execução:
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Log de Execução:
Globalcode – Open4education
FIM
Email: brunotanoue@hotmail.com
Dúvidas?

Mais conteúdo relacionado

Mais procurados

Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
Renato Groff
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011
Luís Cobucci
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
Gilmar Pupo
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
Eduardo Carvalho
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
João Carlos Ottobboni
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
tdc-globalcode
 
Colaboração em Projetos FLOSS: CakePHP
Colaboração em Projetos FLOSS: CakePHPColaboração em Projetos FLOSS: CakePHP
Colaboração em Projetos FLOSS: CakePHP
Thiago Colares
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Adam Victor Brandizzi
 
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Renato Groff
 
Introdução ao Maven
Introdução ao MavenIntrodução ao Maven
Introdução ao Maven
Henrique Smoco
 
Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Jenkins integrando e estendendo.
Jenkins integrando e estendendo.
Leonardo Kobus
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
Bernardo Fontes
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
André Justi
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
Luís Cobucci
 
JUnit Sample
JUnit SampleJUnit Sample
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
tdc-globalcode
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de código
Felipe
 
Dev ops integração contínua com jenkins
Dev ops integração contínua com jenkinsDev ops integração contínua com jenkins
Dev ops integração contínua com jenkins
Michel Cordeiro
 
Test driven development
Test driven developmentTest driven development
Test driven development
Carlos Eduardo Miranda
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
Luís Cobucci
 

Mais procurados (20)

Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Colaboração em Projetos FLOSS: CakePHP
Colaboração em Projetos FLOSS: CakePHPColaboração em Projetos FLOSS: CakePHP
Colaboração em Projetos FLOSS: CakePHP
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
 
Introdução ao Maven
Introdução ao MavenIntrodução ao Maven
Introdução ao Maven
 
Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Jenkins integrando e estendendo.
Jenkins integrando e estendendo.
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de código
 
Dev ops integração contínua com jenkins
Dev ops integração contínua com jenkinsDev ops integração contínua com jenkins
Dev ops integração contínua com jenkins
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 

Semelhante a TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o Desenvolvimento Ágil : de um desenvolvedor para desenvolvedores.

TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes AutomatizadosTDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
Stefan Teixeira
 
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração ContínuaAutomação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
Gabriela Patuci
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Jonathan Prates
 
Automação de testes em projetos ágeis
Automação de testes em projetos ágeisAutomação de testes em projetos ágeis
Automação de testes em projetos ágeis
Cristiano Caetano
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
Samanta Cicilia
 
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
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Edlaine Zamora
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
Walmyr Lima e Silva Filho
 
[DevOps Carioca] Continuous Delivery
[DevOps Carioca]  Continuous Delivery[DevOps Carioca]  Continuous Delivery
[DevOps Carioca] Continuous Delivery
Samanta Cicilia
 
Apresentação TDC2015
Apresentação TDC2015Apresentação TDC2015
Apresentação TDC2015
Bruno Murawski
 
Automacao de testes em .NET? Keep Calm and Just do It
Automacao de testes em .NET? Keep Calm and Just do ItAutomacao de testes em .NET? Keep Calm and Just do It
Automacao de testes em .NET? Keep Calm and Just do It
tdc-globalcode
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
Mayara Fernandes
 
Testes Funcionais em um ALM Open Source - TDC 2012 SP
Testes Funcionais em um ALM Open Source - TDC 2012 SPTestes Funcionais em um ALM Open Source - TDC 2012 SP
Testes Funcionais em um ALM Open Source - TDC 2012 SP
Elias Nogueira
 
Metralhando sua API
Metralhando sua APIMetralhando sua API
Metralhando sua API
Thalita Pinheiro
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua API
Edlaine Zamora
 
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
tdc-globalcode
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Samanta Cicilia
 
Do regresso ao progresso: automação de testes em aplicativos mobile
Do regresso ao progresso: automação de testes em aplicativos mobileDo regresso ao progresso: automação de testes em aplicativos mobile
Do regresso ao progresso: automação de testes em aplicativos mobile
Lucas Carvalho
 
Testes para Android de ponta a ponta
Testes para Android de ponta a pontaTestes para Android de ponta a ponta
Testes para Android de ponta a ponta
Elias Nogueira
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
Cleber Dantas
 

Semelhante a TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o Desenvolvimento Ágil : de um desenvolvedor para desenvolvedores. (20)

TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes AutomatizadosTDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
 
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração ContínuaAutomação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
 
Automação de testes em projetos ágeis
Automação de testes em projetos ágeisAutomação de testes em projetos ágeis
Automação de testes em projetos ágeis
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
 
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
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
 
[DevOps Carioca] Continuous Delivery
[DevOps Carioca]  Continuous Delivery[DevOps Carioca]  Continuous Delivery
[DevOps Carioca] Continuous Delivery
 
Apresentação TDC2015
Apresentação TDC2015Apresentação TDC2015
Apresentação TDC2015
 
Automacao de testes em .NET? Keep Calm and Just do It
Automacao de testes em .NET? Keep Calm and Just do ItAutomacao de testes em .NET? Keep Calm and Just do It
Automacao de testes em .NET? Keep Calm and Just do It
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
 
Testes Funcionais em um ALM Open Source - TDC 2012 SP
Testes Funcionais em um ALM Open Source - TDC 2012 SPTestes Funcionais em um ALM Open Source - TDC 2012 SP
Testes Funcionais em um ALM Open Source - TDC 2012 SP
 
Metralhando sua API
Metralhando sua APIMetralhando sua API
Metralhando sua API
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua API
 
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
TDC 2013 SP | Trilha ALM: Construindo uma solução de ponta a ponta com ferram...
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
 
Do regresso ao progresso: automação de testes em aplicativos mobile
Do regresso ao progresso: automação de testes em aplicativos mobileDo regresso ao progresso: automação de testes em aplicativos mobile
Do regresso ao progresso: automação de testes em aplicativos mobile
 
Testes para Android de ponta a ponta
Testes para Android de ponta a pontaTestes para Android de ponta a ponta
Testes para Android de ponta a ponta
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 

TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o Desenvolvimento Ágil : de um desenvolvedor para desenvolvedores.

  • 1. Globalcode – Open4education Trilha PHP – Testes e Ambiente de Integração Contínua PHP para o Desenvolvimento Ágil Bruno Yukio Tanoue Web Developer – UOL BoaCompra
  • 2. Globalcode – Open4education Bruno Tanoue Web Developer @ UOL BoaCompra ( 3 anos e 5 meses) Checkout e Gateway de Pagamento BoaCompra. Sistema Financeiro BoaCompra. Bacharel em Ciência da Computação pela UEM (Universidade Estadual de Maringá) Email: brunotanoue@hotmail.com LinkedIn: https://br.linkedin.com/in/brunotanoue
  • 3. Globalcode – Open4education Agenda Pirâmide de Testes Teste de Unidade Isolado x Colaborativo Otimizações para Execução de Testes Ambiente de Integração Contínua PHP
  • 4. Globalcode – Open4education Pirâmide de Testes Objetivo: Promover uma proporção adequada de testes para uma execução e um feedback rápido. Testes de Unidade: Verificar a qualidade em pequenos trechos de código (unidades). Ex: PHPUnit Testes de Integração: Testar a integração das unidades. Ex: PHPUnit + DBUnit Testes de Interface: Validar fluxos e informações exibidas à nível de usuário. Ex: Selenium Webdriver
  • 5. Globalcode – Open4education Pirâmide de Testes http://martinfowler.com/bliki/TestPyramid.html UI Integração Unidade T
  • 6. Globalcode – Open4education Teste de Unidade Isolado x Colaborativo Afinal o que é um teste de unidade? Conceito mais utilizado e defendido: Teste de Unidade Isolado: Método testado isoladamente de outros métodos internos e comunicações externas utilizando mocks. Mock: Troca de uma estrutura real por uma estrutura simulada para prosseguimento de um teste.
  • 7. Globalcode – Open4education Teste de Unidade Isolado x Colaborativo Teste de Unidade Isolado Controller Model Database Controller Model(Mock) UNIDADE
  • 8. Globalcode – Open4education Teste de Unidade Isolado x Colaborativo Teste de Unidade Isolado Pontos Positivos: Execução rápida. Localização mais rápida do erro no código. Simulação de Exception. Pontos Negativos: Possível mock desatualizado. Falso positivo nos testes. Possível bug em produção.
  • 9. Globalcode – Open4education Teste de Unidade Isolado x Colaborativo Afinal o que é um teste de unidade? Outra definição: Teste de Unidade Colaborativo: Método testado em colaboração com seus métodos internos e comunicações externas. Mas o que é uma unidade neste caso? Isso depende da profundidade do seu teste.
  • 10. Globalcode – Open4education UNIDADE Teste de Unidade Isolado x Colaborativo Teste de Unidade Colaborativo Controller Model Database
  • 11. Globalcode – Open4education Teste de Unidade Isolado x Colaborativo Teste de Unidade Colaborativo Pontos Positivos: Execução dos testes com a estrutura real. Cenário mais completamente testado (colaboração das unidades). Pontos negativos: Tempo de execução mais lento. Alta dependência entre componentes ou sistemas. Falso negativo nos testes ( ex: comunicações externas).
  • 12. Globalcode – Open4education Teste de Unidade Isolado x Colaborativo Qual tipo de teste de unidade é melhor? É necessário avaliar cada caso e dependendo da necessidade utilizar um dos dois tipos de teste. E como fica a pirâmide de testes com o teste de unidade colaborativo? http://martinfowler.com/bliki/UnitTest.html MUITO CONFUSA!!!!
  • 13. Globalcode – Open4education Otimizações para Execução de Testes O que é importante para uma execução de testes? Devem passar confiança de que está tudo bem com o código. Devem ser de fácil compreensão. A execução da suíte deve ser a mais rápida possível, para que seja executada o quanto antes e o maior número de vezes seja necessário. (Ex: a cada commit do desenvolvedor.)
  • 14. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Ambiente Problemas que podem atrasar a execução de testes: Concorrência de rede. Concorrência de banco. Possível solução: centralizar o ambiente de testes em uma única máquina, seja virtual ou real com um banco de dados próprio para testes.
  • 15. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Ambiente BANCO DE STAGING BANCO DE TESTES LOCAL
  • 16. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Código – Teste de Unidade @dataProvider : criar um provedor de dados para produzir entradas para um teste.
  • 17. Globalcode – Open4education Otimizações para Execução de Testes Without @dataProvider
  • 18. Globalcode – Open4education Otimizações para Execução de Testes With @dataProvider
  • 19. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Código – Teste de Interface setUp e tearDown Na execução da suíte, evita que vários navegadores fiquem abertos se vários testes falharem.
  • 20. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Código – Teste de Interface setUpBeforeClass e tearDownAfterClass E se ao invés disso, o navegador fosse aberto e fechado uma vez à cada classe de teste?
  • 21. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Código – Teste de Interface Surefire Plugin (Execução de testes em paralelo)
  • 22. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Código – Teste de Interface Resultados – Build #73
  • 23. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Código – Teste de Interface Resultados – Build #75
  • 24. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Código – Teste de Interface Resultados – Build #75
  • 25. Globalcode – Open4education Otimizações para Execução de Testes Otimizações de Código – Teste de Interface Resultados – Build #76
  • 26. Globalcode – Open4education Ambiente de Integração Contínua PHP O que é um ambiente de integração contínua? Integração Contínua Processo Ágil Defende a entrega contínua de código em um repositório central em curtos espaços de tempo. O código a ser integrado não pode produzir defeitos no código já existente. (testes) O ambiente de integração contínua tem como objetivo automatizar tarefas do processo de integração contínua. A automatização é importante para diminuir os erros de natureza humana.
  • 27. Globalcode – Open4education Ambiente de Integração Contínua PHP
  • 28. Globalcode – Open4education Ambiente de Integração Contínua PHP Como criar um servidor de Integração Contínua (CI) básico voltado para PHP? Verificação e Atualização de Cópia do Repositório Execução dos Testes Geração de Pacote
  • 29. Globalcode – Open4education Ambiente de Integração Contínua PHP Como criar um servidor de Integração Contínua (CI) básico voltado para PHP? Ferramenta de CI (Jenkins, Hudson, etc..) É o coração do servidor de integração contínua, onde todo o processo de integração de código, teste e geração de pacotes é feito. Controle de Versionamento (GIT, SVN, etc...) O servidor de CI vai bater no repositório central de tempos em tempos verificando se houve alteração. Caso haja alteração, uma construção será disparada e a cópia local é atualizada.
  • 30. Globalcode – Open4education Ambiente de Integração Contínua PHP Como criar um servidor de Integração Contínua (CI) básico voltado para PHP? PHP/PHPUnit Execução de testes para validação do código integrado. Servidor Web (Apache) e Banco de Dados (MySQL, SQLite, etc...) Suporte para testes unitários colaborativos, testes de integração e testes de interface. Ferramenta de Building(Maven, Ant, etc...) Geração de pacotes.
  • 31. Globalcode – Open4education Ambiente de Integração Contínua PHP Vlw kpiaum!!! Então agora eu vou sair instalando tudo na mão!!!!
  • 32. Globalcode – Open4education Ambiente de Integração Contínua PHP O Jenkins pode gerenciar a instalação da maioria dos componentes através de PLUGINS. Pode gerenciar várias versões de determinado componente. Fácil instalação, remoção ou atualização.
  • 33. Globalcode – Open4education Ambiente de Integração Contínua PHP
  • 34. Globalcode – Open4education Ambiente de Integração Contínua PHP
  • 35. Globalcode – Open4education Ambiente de Integração Contínua PHP Outros Plugins de grande utilidade: Clover PHP Gráfico de cobertura de código para cada construção. Avisos quando a cobertura de código diminuir.
  • 36. Globalcode – Open4education Ambiente de Integração Contínua PHP Outros Plugins de grande utilidade: Clover PHP
  • 37. Globalcode – Open4education Ambiente de Integração Contínua PHP Outros Plugins de grande utilidade: HTML Publisher Log PHPUnit: Fornece gráficos de cobertura de código de cada pasta, classe ou método. Informações de linhas cobertas, descobertas, dead code.
  • 38. Globalcode – Open4education Ambiente de Integração Contínua PHP Outros Plugins de grande utilidade: HTML Publisher
  • 39. Globalcode – Open4education Ambiente de Integração Contínua PHP O processo de integração contínua dentro do Jenkins é representado pelo job. Um job pode ser configurado de uma maneira bastante variada, podendo representar tanto uma etapa dentro da integração contínua, como todo o processo de integração contínua. É possível alterar a ordem de execução dos passos dentro de um job através de um simples “clica e arrasta”.
  • 40. Globalcode – Open4education Ambiente de Integração Contínua PHP
  • 41. Globalcode – Open4education Ambiente de Integração Contínua PHP Criando e executando um job PHP no Jenkins: Passo 1: Configurar o gerenciamento do código fonte.
  • 42. Globalcode – Open4education Ambiente de Integração Contínua PHP Criando e executando um job PHP no Jenkins: Passo 2: Configurar o método de verificação do repositório (trigger).
  • 43. Globalcode – Open4education Ambiente de Integração Contínua PHP Criando e executando um job PHP no Jenkins: Passo 3: Configurar a execução dos testes.
  • 44. Globalcode – Open4education Ambiente de Integração Contínua PHP Criando e executando um job PHP no Jenkins: Passo 4: Gerar os pacotes.
  • 45. Globalcode – Open4education Ambiente de Integração Contínua PHP Criando e executando um job PHP no Jenkins: Passo 5: Salvar e executar!!!!
  • 46. Globalcode – Open4education Ambiente de Integração Contínua PHP Log de Execução:
  • 47. Globalcode – Open4education Ambiente de Integração Contínua PHP Log de Execução:
  • 48. Globalcode – Open4education Ambiente de Integração Contínua PHP Log de Execução:
  • 49. Globalcode – Open4education FIM Email: brunotanoue@hotmail.com Dúvidas?