SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
Qualidade em Projetos PHP

     Luís Otávio Cobucci Oblonczyk



21 de Agosto de 2011
TDC 2011 Florianópolis
Luís Otávio Cobucci Oblonczyk
●
    Desenvolvedor PHP na Softnex Tecnologia
●
    Orientador no Senac TI
●
    Doido por PHP desde 2003
●
    Perfeccionista ao extremo =P




        Luís Otávio Cobucci Oblonczyk – 21/08/2011
No trabalho, devemos lidar com várias coisas...
Algumas nos deixam felizes...
Outras nem tanto...
Alguns precisam de combustível...
Outros de diversão...
Para trabalhar com bom humor...
Mas tudo tem limite!
Funcionando!!!
Mas será que apenas funcionar é suficiente?
Não!!!

É preciso ter qualidade


  Luís Otávio Cobucci Oblonczyk – 21/08/2011
Qualidade
 “Qualidade é um conceito subjetivo que está
 relacionado diretamente às percepções de cada
 indivíduo.
 Diversos fatores como cultura, modelos
 mentais, tipo de produto ou serviço prestado,
 necessidades e expectativas influenciam
 diretamente nesta definição.”

 http://pt.wikipedia.org/wiki/Qualidade


      Luís Otávio Cobucci Oblonczyk – 21/08/2011
Atributos de qualificação de
software
●
    Funcionalidade
●
    Usabilidade
●
    Confiabilidade
●
    Performance
●
    Suportabilidade




         Luís Otávio Cobucci Oblonczyk – 21/08/2011
A vida de um software sem
qualidade
●
    Devido a um fato sobrenatural seu código para de
    funcionar
●
    A correção dos bugs é simples, o problema é encontrá-
    los
●
    Ao corrigir uma coisa, outras três param de funcionar
●
    “O sistema estava funcionando até você usá-lo”




         Luís Otávio Cobucci Oblonczyk – 21/08/2011
“You can't control what you can't measure”
DeMarco, Tom
Luís Otávio Cobucci Oblonczyk – 21/08/2011
Precisamos utilizar as ferramentas corretas...
PHPUnit
●
    Possibilita a criação de testes de unidade de forma
    simples e precisa
●
    Mostra o local exato dos problemas
●
    Facilita as manutenções (diminui a possibilidade de
    uma correção danificar outras funcionalidades)
●
    Métricas: número de testes (com falha ou não),
    número de métodos testados, cobertura de testes


    http://www.phpunit.de/manual/current/en/index.html


         Luís Otávio Cobucci Oblonczyk – 21/08/2011
Atenção: testes podem mentir...
Atenção: testes podem mentir...
Mutagenesis
●
    Verifica se seus testes estão “falando a verdade”
●
    Basicamente ele “muda” seu código em tempo de
    execução e roda seus testes de unidade, se os testes
    permanecerem funcionando muito provavelmente
    existem testes mal feitos.



    https://github.com/zenovich/runkit
    https://github.com/padraic/mutagenesis


         Luís Otávio Cobucci Oblonczyk – 21/08/2011
PHPLoc
●
    Provê uma visão geral do projeto
●
    Métricas: quanto código existe no projeto (lines of
    code) e como está organizado (número de
    namespaces, classes, métodos, funções, constantes)




    https://github.com/sebastianbergmann/phploc



         Luís Otávio Cobucci Oblonczyk – 21/08/2011
PHP CodeSniffer
●
    Varre seu projeto buscando violações de coding
    standards
●
    Métricas: número de violações encontradas, quais
    partes devem ser corrigidas




    http://pear.php.net/package/PHP_CodeSniffer



         Luís Otávio Cobucci Oblonczyk – 21/08/2011
PHPCPD
●
    Busca duplicações de códigos em seu projeto
●
    Métricas: número e locais das duplicações




    https://github.com/sebastianbergmann/phpcpd




         Luís Otávio Cobucci Oblonczyk – 21/08/2011
PHPMD
●
    Varre seu código buscando possíveis falhas
●
    Mostra os locais que deveriam ser refatorados devido
    à: variáveis que não são utilizadas, classes/métodos
    muito complexos ou muito grandes, nomenclaturas
    confusas em variáveis e métodos




    http://phpmd.org


         Luís Otávio Cobucci Oblonczyk – 21/08/2011
●
  Avoid short names
●
  Class has too many methods
●
  Avoid unused local variables
●
  Overall complexity
●
  Number of dependencies
DocBlox
●
    Gera documentação de API a partir dos comentários
    no código
●
    Compatível com PHP 5.3
●
    Gera diagrama com as classes (precisa do graphviz)
●
    Mais rápido e mais leve que o PHP Documentor



    http://www.docblox-project.org/


         Luís Otávio Cobucci Oblonczyk – 21/08/2011
Luís Otávio Cobucci Oblonczyk – 21/08/2011
Luís Otávio Cobucci Oblonczyk – 21/08/2011
Como juntar isso tudo?
Phing
●
    “PHing Is Not GNU make; it's a PHP project build
    system or build tool based on Apache Ant. “
●
    Ferramenta de automatização de tarefas
●
    Com o Phing é possível definir o processo de
    build dos projetos



    http://www.phing.info

        Luís Otávio Cobucci Oblonczyk – 21/08/2011
Build?
Software build
●
    “In the field of computer software, the term
    software build refers either to the process of
    converting source code files into standalone
    software artifact(s) that can be run on a
    computer, or the result of doing so.”
●
    Processo de converter o código-fonte em um ou
    mais artefatos, ou o resultado deste processo


    http://en.wikipedia.org/wiki/Software_build

        Luís Otávio Cobucci Oblonczyk – 21/08/2011
Porque usar o Phing?
●
    Simples de configurar
●
    Possui tarefas para as principais ferramentas
●
    É extensível
●
    É feito em PHP




        Luís Otávio Cobucci Oblonczyk – 21/08/2011
Então é uma lista de tarefas?
Phing
●
    Em cada projeto você define as etapas do build
    em um arquivo XML
●
    As etapas podem depender ou executar outras
    etapas
●
    Podem ser definidas propriedades no arquivo
    XML ou em um arquivo externo




        Luís Otávio Cobucci Oblonczyk – 21/08/2011
<?xml version="1.0" encoding="UTF-8"?>
<project name="ProjectName" default="build" basedir="." />
<?xml version="1.0" encoding="UTF-8"?>
<project name="ProjectName" default="build" basedir="." >
    <target name="build" />
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project name="ProjectName" default="build" basedir="." >
    <property name="buildDir" value="${project.basedir}/build" />
    <property name="reportsDir" value="${buildDir}/reports" />
    <property name="docDir" value="${buildDir}/doc" />

    <target name="clean">
        <delete dir="${buildDir}" includeemptydirs="true" failonerror="true" />
        <mkdir dir="${buildDir}" />
        <mkdir dir="${reportsDir}" />
        <mkdir dir="${docDir}" />
        <exec command="chmod -R 777 ${buildDir}" />
    </target>

    <target name="phpunit"><echo msg="Testes de unidade"/></target>
    <target name="phpmd" ><echo msg="Verificação de erros"/></target>

    <target name="build" depends="clean">
        <phingcall target="phpunit" />
        <phingcall target="phpmd" />
    </target>
</project>
Phing
●
    É possível ainda:
    ●
        SSH/SCP
    ●
        Phar/Tar/Zip
    ●
        Pear/Pear2
    ●
        SVN/Git
    ●
        Patch
    ●
        Ftp (upload)


        E mais: http://www.phing.info/docs/guide/stable/

          Luís Otávio Cobucci Oblonczyk – 21/08/2011
Próximos passos?
●
    Refatoração
●
    Integração Contínua




        Luís Otávio Cobucci Oblonczyk – 21/08/2011
Perguntas??
Obrigado!
●
    @lcobucci
●
    http://lcobucci.wordpress.com
●
    http://github.com/lcobucci




        Luís Otávio Cobucci Oblonczyk – 21/08/2011

Contenu connexe

Tendances

Desmistificando Testes de Software
Desmistificando Testes de SoftwareDesmistificando Testes de Software
Desmistificando Testes de SoftwareRodrigo Dumont
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com pythonBruno Rocha
 
Testes de integração em microservices
Testes de integração em microservicesTestes de integração em microservices
Testes de integração em microservicesClaudenir Freitas
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Felipe Queiroz
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaLeandro Parazito
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScriptDan Vitoriano
 

Tendances (13)

Desmistificando Testes de Software
Desmistificando Testes de SoftwareDesmistificando Testes de Software
Desmistificando Testes de Software
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com python
 
Hack Thursday - NodeJS
Hack Thursday - NodeJSHack Thursday - NodeJS
Hack Thursday - NodeJS
 
Testes de integração em microservices
Testes de integração em microservicesTestes de integração em microservices
Testes de integração em microservices
 
PHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHPPHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHP
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
 
Bdd com spec flow
Bdd com spec flowBdd com spec flow
Bdd com spec flow
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da cultura
 
PhpUnit + Yii Framework
PhpUnit + Yii FrameworkPhpUnit + Yii Framework
PhpUnit + Yii Framework
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScript
 
Aula10 -PHP
Aula10 -PHPAula10 -PHP
Aula10 -PHP
 

En vedette

JWT - To authentication and beyond!
JWT - To authentication and beyond!JWT - To authentication and beyond!
JWT - To authentication and beyond!Luís Cobucci
 
Enough suffering, fix your architecture!
Enough suffering, fix your architecture!Enough suffering, fix your architecture!
Enough suffering, fix your architecture!Luís Cobucci
 
I Left My JWT in San JOSE
I Left My JWT in San JOSEI Left My JWT in San JOSE
I Left My JWT in San JOSEBrian Campbell
 
Json web token api authorization
Json web token api authorizationJson web token api authorization
Json web token api authorizationGiulio De Donato
 
Authentication: Cookies vs JWTs and why you’re doing it wrong
Authentication: Cookies vs JWTs and why you’re doing it wrongAuthentication: Cookies vs JWTs and why you’re doing it wrong
Authentication: Cookies vs JWTs and why you’re doing it wrongDerek Perkins
 

En vedette (6)

JWT - To authentication and beyond!
JWT - To authentication and beyond!JWT - To authentication and beyond!
JWT - To authentication and beyond!
 
Enough suffering, fix your architecture!
Enough suffering, fix your architecture!Enough suffering, fix your architecture!
Enough suffering, fix your architecture!
 
I Left My JWT in San JOSE
I Left My JWT in San JOSEI Left My JWT in San JOSE
I Left My JWT in San JOSE
 
Json web token api authorization
Json web token api authorizationJson web token api authorization
Json web token api authorization
 
JSON Web Tokens (JWT)
JSON Web Tokens (JWT)JSON Web Tokens (JWT)
JSON Web Tokens (JWT)
 
Authentication: Cookies vs JWTs and why you’re doing it wrong
Authentication: Cookies vs JWTs and why you’re doing it wrongAuthentication: Cookies vs JWTs and why you’re doing it wrong
Authentication: Cookies vs JWTs and why you’re doing it wrong
 

Similaire à Qualidade em Projetos PHP com Ferramentas

Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Denis Santos
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
 
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 - TDC2014Jonathan Prates
 
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...Alex Piaz
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Frameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHPFrameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHPElton Minetto
 
Desenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosDesenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosLucas Vegi
 
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedorGit e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedorFelipe Pedroso
 
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 JenkinsGilmar Pupo
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwarePablo Dall'Oglio
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSThiago Rodrigues
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com PloneRamiro Luz
 
Code Igniter - O Framework php mais fácil e ágil
Code Igniter - O Framework php mais fácil e ágilCode Igniter - O Framework php mais fácil e ágil
Code Igniter - O Framework php mais fácil e ágilRafael Pinheiro
 
Trabalho individual 5 semestre Analise de Sistemas
Trabalho individual 5 semestre Analise de SistemasTrabalho individual 5 semestre Analise de Sistemas
Trabalho individual 5 semestre Analise de SistemasWANDERSON JONER
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!Marcos Marcolin
 

Similaire à Qualidade em Projetos PHP com Ferramentas (20)

Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversa
 
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
 
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
PHP: Como não programar em POG
PHP: Como não programar em POGPHP: Como não programar em POG
PHP: Como não programar em POG
 
Vamos falar de DevOps?
Vamos falar de DevOps?Vamos falar de DevOps?
Vamos falar de DevOps?
 
Frameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHPFrameworks de Desenvolvimento Web com PHP
Frameworks de Desenvolvimento Web com PHP
 
Desenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosDesenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetos
 
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedorGit e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
 
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
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um Software
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSS
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com Plone
 
Code Igniter - O Framework php mais fácil e ágil
Code Igniter - O Framework php mais fácil e ágilCode Igniter - O Framework php mais fácil e ágil
Code Igniter - O Framework php mais fácil e ágil
 
Busca Textual com Elasticsearch
Busca Textual com ElasticsearchBusca Textual com Elasticsearch
Busca Textual com Elasticsearch
 
Trabalho individual 5 semestre Analise de Sistemas
Trabalho individual 5 semestre Analise de SistemasTrabalho individual 5 semestre Analise de Sistemas
Trabalho individual 5 semestre Analise de Sistemas
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!
 

Qualidade em Projetos PHP com Ferramentas

  • 1. Qualidade em Projetos PHP Luís Otávio Cobucci Oblonczyk 21 de Agosto de 2011 TDC 2011 Florianópolis
  • 2. Luís Otávio Cobucci Oblonczyk ● Desenvolvedor PHP na Softnex Tecnologia ● Orientador no Senac TI ● Doido por PHP desde 2003 ● Perfeccionista ao extremo =P Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 3. No trabalho, devemos lidar com várias coisas...
  • 4. Algumas nos deixam felizes...
  • 6. Alguns precisam de combustível...
  • 8. Para trabalhar com bom humor...
  • 9. Mas tudo tem limite!
  • 11. Mas será que apenas funcionar é suficiente?
  • 12. Não!!! É preciso ter qualidade Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 13. Qualidade “Qualidade é um conceito subjetivo que está relacionado diretamente às percepções de cada indivíduo. Diversos fatores como cultura, modelos mentais, tipo de produto ou serviço prestado, necessidades e expectativas influenciam diretamente nesta definição.” http://pt.wikipedia.org/wiki/Qualidade Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 14. Atributos de qualificação de software ● Funcionalidade ● Usabilidade ● Confiabilidade ● Performance ● Suportabilidade Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 15. A vida de um software sem qualidade ● Devido a um fato sobrenatural seu código para de funcionar ● A correção dos bugs é simples, o problema é encontrá- los ● Ao corrigir uma coisa, outras três param de funcionar ● “O sistema estava funcionando até você usá-lo” Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 16.
  • 17. “You can't control what you can't measure” DeMarco, Tom
  • 18. Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 19. Precisamos utilizar as ferramentas corretas...
  • 20. PHPUnit ● Possibilita a criação de testes de unidade de forma simples e precisa ● Mostra o local exato dos problemas ● Facilita as manutenções (diminui a possibilidade de uma correção danificar outras funcionalidades) ● Métricas: número de testes (com falha ou não), número de métodos testados, cobertura de testes http://www.phpunit.de/manual/current/en/index.html Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 23. Mutagenesis ● Verifica se seus testes estão “falando a verdade” ● Basicamente ele “muda” seu código em tempo de execução e roda seus testes de unidade, se os testes permanecerem funcionando muito provavelmente existem testes mal feitos. https://github.com/zenovich/runkit https://github.com/padraic/mutagenesis Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 24. PHPLoc ● Provê uma visão geral do projeto ● Métricas: quanto código existe no projeto (lines of code) e como está organizado (número de namespaces, classes, métodos, funções, constantes) https://github.com/sebastianbergmann/phploc Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 25.
  • 26. PHP CodeSniffer ● Varre seu projeto buscando violações de coding standards ● Métricas: número de violações encontradas, quais partes devem ser corrigidas http://pear.php.net/package/PHP_CodeSniffer Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 27.
  • 28. PHPCPD ● Busca duplicações de códigos em seu projeto ● Métricas: número e locais das duplicações https://github.com/sebastianbergmann/phpcpd Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 29.
  • 30. PHPMD ● Varre seu código buscando possíveis falhas ● Mostra os locais que deveriam ser refatorados devido à: variáveis que não são utilizadas, classes/métodos muito complexos ou muito grandes, nomenclaturas confusas em variáveis e métodos http://phpmd.org Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 31. ● Avoid short names ● Class has too many methods ● Avoid unused local variables ● Overall complexity ● Number of dependencies
  • 32. DocBlox ● Gera documentação de API a partir dos comentários no código ● Compatível com PHP 5.3 ● Gera diagrama com as classes (precisa do graphviz) ● Mais rápido e mais leve que o PHP Documentor http://www.docblox-project.org/ Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 33. Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 34. Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 36. Phing ● “PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant. “ ● Ferramenta de automatização de tarefas ● Com o Phing é possível definir o processo de build dos projetos http://www.phing.info Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 38. Software build ● “In the field of computer software, the term software build refers either to the process of converting source code files into standalone software artifact(s) that can be run on a computer, or the result of doing so.” ● Processo de converter o código-fonte em um ou mais artefatos, ou o resultado deste processo http://en.wikipedia.org/wiki/Software_build Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 39. Porque usar o Phing? ● Simples de configurar ● Possui tarefas para as principais ferramentas ● É extensível ● É feito em PHP Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 40. Então é uma lista de tarefas?
  • 41. Phing ● Em cada projeto você define as etapas do build em um arquivo XML ● As etapas podem depender ou executar outras etapas ● Podem ser definidas propriedades no arquivo XML ou em um arquivo externo Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 42. <?xml version="1.0" encoding="UTF-8"?> <project name="ProjectName" default="build" basedir="." />
  • 43. <?xml version="1.0" encoding="UTF-8"?> <project name="ProjectName" default="build" basedir="." > <target name="build" /> </project>
  • 44. <?xml version="1.0" encoding="UTF-8"?> <project name="ProjectName" default="build" basedir="." > <property name="buildDir" value="${project.basedir}/build" /> <property name="reportsDir" value="${buildDir}/reports" /> <property name="docDir" value="${buildDir}/doc" /> <target name="clean"> <delete dir="${buildDir}" includeemptydirs="true" failonerror="true" /> <mkdir dir="${buildDir}" /> <mkdir dir="${reportsDir}" /> <mkdir dir="${docDir}" /> <exec command="chmod -R 777 ${buildDir}" /> </target> <target name="phpunit"><echo msg="Testes de unidade"/></target> <target name="phpmd" ><echo msg="Verificação de erros"/></target> <target name="build" depends="clean"> <phingcall target="phpunit" /> <phingcall target="phpmd" /> </target> </project>
  • 45.
  • 46. Phing ● É possível ainda: ● SSH/SCP ● Phar/Tar/Zip ● Pear/Pear2 ● SVN/Git ● Patch ● Ftp (upload) E mais: http://www.phing.info/docs/guide/stable/ Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 47. Próximos passos? ● Refatoração ● Integração Contínua Luís Otávio Cobucci Oblonczyk – 21/08/2011
  • 49. Obrigado! ● @lcobucci ● http://lcobucci.wordpress.com ● http://github.com/lcobucci Luís Otávio Cobucci Oblonczyk – 21/08/2011