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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Integração Contínua com CruiseControl e phpUnderControl

2,140

Published on

Palestra apresentada no Latinoware 2008

Palestra apresentada no Latinoware 2008

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,140
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
40
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. Latinoware 2008
  • 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 colaphp /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 | |-- colaphp | | |-- 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 | |-- colaphp Arquivo monitorado pelo loop | `-- project-abc | `-- project-xyz principal do CruiseControl |-- projects |-- colaphp | |-- 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;colaphpquot; 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;colaphpquot; 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;colaphpquot; 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/

×