tdc 2015 - trilha php - testes e ambiente de integração contínua php para o desenvolvimento Ágil...

Post on 10-Aug-2015

272 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Globalcode – Open4education

Trilha PHP – Testes e Ambiente de

Integração Contínua PHP para o

Desenvolvimento ÁgilBruno 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?

top related