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

49
Globalcode – Open4education Trilha PHP Testes e Ambiente de Integração Contínua PHP para o Desenvolvimento Ágil Bruno Yukio Tanoue Web Developer UOL BoaCompra

Transcript of TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o Desenvolvimento Ágil...

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

Globalcode – Open4education

Trilha PHP – Testes e Ambiente de

Integração Contínua PHP para o

Desenvolvimento ÁgilBruno Yukio Tanoue

Web Developer – UOL BoaCompra

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

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: [email protected]

LinkedIn: https://br.linkedin.com/in/brunotanoue

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

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

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

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

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

Globalcode – Open4education

Pirâmide de Testes

http://martinfowler.com/bliki/TestPyramid.html

UI

Integração

Unidade

T

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

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.

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

Globalcode – Open4education

Teste de Unidade Isolado

x Colaborativo

Teste de Unidade Isolado

Controller Model Database

Controller Model(Mock)

UNIDADE

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

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.

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

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.

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

Globalcode – Open4education

UNIDADE

Teste de Unidade Isolado

x Colaborativo

Teste de Unidade Colaborativo

Controller Model Database

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

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).

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

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!!!!

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

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.)

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

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.

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

Globalcode – Open4education

Otimizações para

Execução de Testes

Otimizações de Ambiente

BANCO DE STAGING BANCO DE TESTES LOCAL

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

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.

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

Globalcode – Open4education

Otimizações para

Execução de Testes

Without @dataProvider

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

Globalcode – Open4education

Otimizações para

Execução de Testes

With @dataProvider

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

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.

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

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?

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

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)

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

Globalcode – Open4education

Otimizações para

Execução de Testes

Otimizações de Código – Teste de Interface

Resultados – Build #73

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

Globalcode – Open4education

Otimizações para

Execução de Testes

Otimizações de Código – Teste de Interface

Resultados – Build #75

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

Globalcode – Open4education

Otimizações para

Execução de Testes

Otimizações de Código – Teste de Interface

Resultados – Build #75

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

Globalcode – Open4education

Otimizações para

Execução de Testes

Otimizações de Código – Teste de Interface

Resultados – Build #76

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

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.

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

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

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

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

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.

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

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.

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

Vlw kpiaum!!! Então agora eu vou sair instalando

tudo na mão!!!!

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

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.

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

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

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.

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

Outros Plugins de grande utilidade:

Clover PHP

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

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.

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

Outros Plugins de grande utilidade:

HTML Publisher

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

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”.

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

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

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.

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

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).

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

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.

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

Criando e executando um job PHP no Jenkins:

Passo 4: Gerar os pacotes.

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

Criando e executando um job PHP no Jenkins:

Passo 5: Salvar e executar!!!!

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

Log de Execução:

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

Log de Execução:

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

Globalcode – Open4education

Ambiente de Integração

Contínua PHP

Log de Execução:

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

Globalcode – Open4education

FIM

Email: [email protected]

Dúvidas?