Your SlideShare is downloading. ×
  • Like
Integração Contínua com CruiseControl e phpUnderControl
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Integração Contínua com CruiseControl e phpUnderControl

  • 1,461 views
Published

Palestra dada por Diego Tremper no CONAPHP 2008 - Congresso Nacional de PHP que ocorreu em São Paulo nos dias 18 e 19 de Outubro dentro do CONISLI 2008

Palestra dada por Diego Tremper no CONAPHP 2008 - Congresso Nacional de PHP que ocorreu em São Paulo nos dias 18 e 19 de Outubro dentro do CONISLI 2008

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,461
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
25
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. CONAPHP
  • 2.  Diego Tremper  Zend Certified Engineer  Entusiasta PHP  Palestrante  Estudante
  • 3.  Integração Contínua  Cenário  Vantagens  CruiseControl  Instalação  Arquitetura  phpUnderControl  Instalação  Funcionamento  Ambiente ▪ Estatísticas ▪ Execução de Testes ▪ Documentação ▪ Violação de Padrões ▪ Code Coverage ▪ Métricas  Prática
  • 4. “Integração Contínua é uma prática de desenvolvimento de software em que membros de um time integram seu trabalho frequentemente, normalmente cada membro faz integrações diariamente, conduzindo a multiplas integrações diárias. Cada integração é verificada por um build automático (incluindo testes) para detectar erros o mais rápido possível.” Martin Fowler
  • 5. Cotidiano de um time de desenvolvimento: Dev A Dev C Repositório (CVS, SVN, etc) Dev B Dev D
  • 6.  Como detectar problemas de integração de maneira mais rápida?  Como descobrir se a alteração na tela X não causou problemas na telaY?  Quanto maior o projeto…  Maior a complexidade…  Maior o reaproveitamento…  Maior a probabilidade de ocorrerem problemas na integração!
  • 7. Script Servidor de Repositório Integração Contínua (CVS, SVN, etc) Feedback Dev B Dev C Dev D
  • 8.  Desenvolvedor publica suas modificações em qualquer sistema de controle de versão (SVN, CVS, etc)  A partir de uma definição, o CruiseControl periodicamente procura por modificações no código (config.xml)  Dispara um novo build (build.xml)  Captura e armazena os logs e artefatos gerados a partir do build  Publica o resultado do build e os artefatos gerados (web, email, etc)
  • 9.  Acelera a detecção de bugs  Reduz os riscos  Reduz o tempo de integração  Aumenta a confiança do time  Agiliza o feedback  Facilita o refactoring
  • 10. O CruiseControl é um framework para a automatização do processo de build  Inclue plugins de integração com diversas ferramentas de controle de código  Prove interface web para visualização de relatórios sobre os builds realizados  É gratuíto e de código aberto (BSD license)
  • 11.  Arquitetura
  • 12. O phpUnderControl é uma customização do CruiseControl que permite a fácil integração de ferramentas de controle de códigos PHP  phpDocumentor  PHPUnit  xDebug  PMD  PHP_CodeSniffer
  • 13.  Modifica mecanismos de publicação do CruiseControl para que sejam mais focados a projetos PHP  A partir dos logs gerados no build, gera os gráficos para visualização das métricas  Provê interface (linha de comando) para o setup de novos projetos a serem monitorados
  • 14.  Provê feedback  Documentação do código  Execução de testes  Cobertura dos testes (code coverage)  Métricas ▪ Complexidade ▪ Risco ▪ ...  Violação de padrões
  • 15. Instalação CruiseControl $ unzip cruisecontrol-bin-2.7.3.zip -d /opt $ ln -s /opt/cruisecontrol-bin-2.7.3 /opt/cruisecontrol $ /opt/cruisecontrol/cruisecontrol.sh Algumas configurações de startup podem ser configuradas neste arquivo (JAVA_HOME, porta, etc)
  • 16. Instalação phpUnderControl $ pear config-set preferred_stable beta $ pear channel-discover components.ez.co $ pear channel-discover pear.phpunit.de $ pear install –alldeps phpunit/phpUnderControl Aplica o patch na instalação do Cruise Control. Não esquecer de adicionar os executáveis do PHP_CodeSniffer, PHPUnit, phpDocumentor no PATH!!! Todos disponíveis no diretório de binários do PHP (phpcs, phpunit, phpdoc)
  • 17. Instalação phpUnderControl $ /usr/local/php5/bin/phpuc install /opt/cruisecontrol
  • 18. Lista de projetos monitorados
  • 19. Estatísticas de build
  • 20. Execução de testes (PHPUnit)
  • 21. Documentação (phpDocumentor)
  • 22. Violação de padrões (PHP_CodeSniffer)
  • 23. Violação de padrões (PHP_CodeSniffer)  Possibilita ao desenvolvedor visualizar possíveis violações no padrão de código adotado para a escrita do projeto (PHP e JavaScript).  Suporta alguns padrões de escrita conhecidos (PEAR, Zend, etc), mas existe a possibilidade de extensão  Integra com Zend Code Analyzer
  • 24. Code Coverage (PHPUnit + xDebug)
  • 25. Métricas (PHPUnit + PMD)
  • 26. Complexidade Ciclomática  Mede o número de caminhos independentes de um método  Considera contruções if, for, &&, case, while, etc.  Interpretação  Maior complexidade leva a mais erros  Maior complexidade faz o teste mais difícil
  • 27. CRAP (Change Risk Analysis and Predictions )  Estima o esforço/tempo para a alteração de uma unidade de código  Considera a cobertura dos testes e a complexidade ▪ Menor cobertura => Maior risco ▪ Maior cobertura => Risco similar à complexidade
  • 28. Criando um projeto de exemplo $ /usr/local/php5/bin/phpuc example --project-name conaphp /opt/cruisecontrol Opção para criação de um projeto de Nome do novo projeto exemplo e uma sub-opção para o nome do projeto Diretório de instação do CruiseControl
  • 29. Estrutura de diretórios /opt/cruisecontrol |-- artifacts | |-- conaphp | | |-- 20081008002858 Os artefatos gerados em cada build | | | |-- api | | | |-- coverage ficam arquivados para visualização | | | `-- graph | `-- project-abc futura | `-- project-xyz |-- config.xml |-- cruisecontrol.sh |-- logs | |-- conaphp Arquivo monitorado pelo loop | `-- project-abc | `-- project-xyz principal do CruiseControl |-- projects |-- conaphp | |-- build | | |-- api | | |-- coverage | | | `-- logs |-- build.xml Arquivo de configuração do build do | | `-- source |-- src projeto define as tarefas a serem | | | `-- Math.php `-- tests executadas | `-- MathTest.php `-- project-abc `-- project-xyz
  • 30.  Configuração do CruiseControl (config.xml) <cruisecontrol> … Nome projeto <project name=quot;conaphpquot; buildafterfailed=quot;falsequot;> <schedule interval=quot;300quot;> Agendamento <ant anthome=quot;apache-ant-1.7.0“ buildfile=quot;projects/${project.name}/build.xmlquot;/> </schedule> … <publishers> <currentbuildstatuspublisher file=quot;logs/${project.name}/buildstatus.txtquot;/> <artifactspublisher dir=quot;projects/${project.name}/build/api” dest=quot;artifacts/${project.name}quot; subdirectory=quot;apiquot;/> <artifactspublisher dir=quot;projects/${project.name}/build/coverage“ dest=quot;artifacts/${project.name}quot; subdirectory=quot;coveragequot;/> <execute command=quot;/usr/local/php5/bin/phpuc graph logs/${project.name} artifacts/${project.name}quot;/> </publishers> </project> … </cruisecontrol> Gera os gráficos
  • 31.  Configuração do Ant (build.xml)  Organização ▪ Project: é a tag raiz do build.xml, ele representa todo o projeto e só pode existir um por buildfile. ▪ Target: é uma coleção de tarefas que desejamos aplicar em determinado momento e encadeando junto com outras tarefas. ▪ Task: é uma tarefa que desejamos que seja feita dentro do target, o Ant já disponibiliza tarefas prontas, porém é possível criar novas. ▪ Property: é um parâmetro em forma de nome-valor necessário para configurar nossa aplicação.
  • 32.  Configuração do Ant (build.xml) <project name=quot;conaphpquot; default=quot;buildquot; basedir=quot;.quot;> <property name=“src” value=“${basedir}/src” /> <property /> <property /> <target name=“build” depends=“checkout”> <task /> <task /> </target> <target name=“checkout” > <echo>Baixando código do repositório…</echo> <task /> </target> </project>
  • 33.  Configuração do Ant (build.xml) <project name=quot;conaphpquot; default=quot;buildquot; basedir=quot;.quot;> <target name=quot;buildquot; depends=quot;php-documentor,php-codesniffer,phpunitquot;/> <target name=quot;php-documentorquot;> <exec executable=quot;phpdocquot; dir=quot;${basedir}/sourcequot; logerror=quot;onquot;> <arg line=quot;--title '${ant.project.name}' -ue on -t ${basedir}/build/api -d src -tb '/usr/local/php5/lib/php/data/phpUnderControl/data/phpdoc' -o HTML:Phpuc:phpucquot;/> </exec> </target> <target name=quot;php-codesnifferquot;> <exec executable=quot;phpcsquot; dir=quot;${basedir}/source“ output=quot;${basedir}/build/logs/checkstyle.xml“ error=quot;/tmp/checkstyle.error.logquot;> <arg line=quot;--report=checkstyle --standard=PEAR srcquot;/> </exec> </target> …
  • 34.  Configuração do Ant (build.xml) .. <target name=quot;phpunitquot;> <exec executable=quot;phpunitquot; dir=quot;${basedir}/sourcequot; failonerror=quot;onquot;> <arg line=quot; --log-xml ${basedir}/build/logs/phpunit.xml --log-pmd ${basedir}/build/logs/phpunit.pmd.xml --log-metrics ${basedir}/build/logs/phpunit.metrics.xml --coverage-xml ${basedir}/build/logs/phpunit.coverage.xml --coverage-html ${basedir}/build/coverage PhpUnderControl_Example_MathTest tests/MathTest.phpquot;/> </exec> </target> </project>
  • 35. Perguntas?
  • 36. Obrigado!!! Contato: diegotremper@gmail.com LinkedIn: http://www.linkedin.com/in/diegotremper Blog: http://www.diegotremper.com
  • 37.  http://www.diegotremper.com  http://cruisecontrol.sourceforge.net/  http://ant.apache.org/  http://www.phpundercontrol.org/  http://www.phpunit.de/  http://pear.php.net/package/PHP_CodeSniffe r  http://www.phpdoc.org/