SlideShare uma empresa Scribd logo
Qualidade em Projetos PHP

     Luís Otávio Cobucci Oblonczyk



22 de Outubro de 2011
       6° SoLiSC
Luís Otávio Cobucci Oblonczyk
●
    Desenvolvedor PHP na Softnex Tecnologia
●
    Orientador no Senac TI
●
    Doido por PHP desde 2003
●
    Perfeccionista ao extremo =P



    @lcobucci
    http://about.me/lcobucci
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
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
Atributos de qualificação de
software
●
    Funcionalidade (oferece funcionalidades necessárias)
●
    Usabilidade (é fácil de utilizar)
●
    Confiabilidade (informações geradas são confiáveis)
●
    Performance (tempo de resposta de gente)
●
    Suportabilidade (é fácil de dar manutenção no código)
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”
Qualidade em projetos PHP - SoLiSC 2011
“You can't control what you can't measure”
DeMarco, Tom
Qualidade em projetos PHP - SoLiSC 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
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
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
Qualidade em projetos PHP - SoLiSC 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
Qualidade em projetos PHP - SoLiSC 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
Qualidade em projetos PHP - SoLiSC 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
●
  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
●
    Criação incremental
●
    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/
Qualidade em projetos PHP - SoLiSC 2011
Como juntar isso tudo?
Automatizando
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
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
Porque usar o Phing?
●
    Simples de configurar
●
    Possui tarefas para as principais ferramentas
●
    É extensível
●
    É feito em PHP
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
<?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>
Qualidade em projetos PHP - SoLiSC 2011
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/
Socorro, por onde começo?
Prepare-se psicologicamente!
Próximos passos?
●
    Crie testes de unidade aos poucos sem mudar o
    código
●
    Utilizando o PMD verifique os pontos mais
    críticos de otimização
●
    Comece a refatoração!
●
    Para as novas funcionalidades SEMPRE crie
    testes, de preferencia seguindo as premissas do
    TDD
●
    Instale um servidor de Integração Contínua
Integração Continua
●
    De forma bem rudimentar é a “automatização da
    automatização”
●
    Executa seu script de build automaticamente
    logo após todo commit realizado no servidor de
    controle de versionamento (ideal)
●
    Mantém registrados os builds passados para
    comparação de informação
●
    Possui visualização em gráfico para execução de
    testes de unidade, violações PMD, CPD e de Code
    Standards
Dúvidas???
Obrigado!

Eu por aí: http://about.me/lcobucci
Slides: http://slideshare.net/lcobucci


Avalie essa palestra: http://joind.in/3963

Mais conteúdo relacionado

PDF
Qualidade em projetos PHP - PHPSC Conf 2011
PDF
Qualidade em projetos PHP - TDC 2011
PDF
Be React. Do Tests!
PDF
Revisão de Código - Uma prática que depende da cultura
PDF
Dicas para sua carreira de Desenvolvedor PHP
PDF
PHP: Como não programar em POG
PDF
Frameworks PHP
PPTX
Jenkins com SonarQube
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - TDC 2011
Be React. Do Tests!
Revisão de Código - Uma prática que depende da cultura
Dicas para sua carreira de Desenvolvedor PHP
PHP: Como não programar em POG
Frameworks PHP
Jenkins com SonarQube

Mais procurados (19)

PPTX
Unit Test JavaScript
PDF
Testando Aplicações com PHPT
PDF
Por quê você deve utilizar TDD?
PPTX
Sobre TDD - Tech Friday da Everis Uberlândia
PPTX
Vamos falar de DevOps?
PDF
Escalando apps com React e Type Script e SOLID
PPTX
Palestra TDD - TDC - 2016
ODP
Revolução Go TDC 2016
PDF
Dojo com Processing
PPT
Desenvolvimento web: PHP orientado a objetos
PDF
Linguagem c
PDF
Tdd com Node.js
PDF
Facilitando o desenvolvimento orientado a testes em aplicações PHP
PDF
Boas práticas no desenvolvimento de software através do uso de TDD
PPTX
Bdd com spec flow
PDF
Refatorar é preciso. Palestra TDC 2014
PDF
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
PPTX
Service virtualization floripa
PDF
Introdução ao Github actions - TDC Connections
Unit Test JavaScript
Testando Aplicações com PHPT
Por quê você deve utilizar TDD?
Sobre TDD - Tech Friday da Everis Uberlândia
Vamos falar de DevOps?
Escalando apps com React e Type Script e SOLID
Palestra TDD - TDC - 2016
Revolução Go TDC 2016
Dojo com Processing
Desenvolvimento web: PHP orientado a objetos
Linguagem c
Tdd com Node.js
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Boas práticas no desenvolvimento de software através do uso de TDD
Bdd com spec flow
Refatorar é preciso. Palestra TDC 2014
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Service virtualization floripa
Introdução ao Github actions - TDC Connections
Anúncio

Destaque (20)

DOC
如果你的股票在一年时间里涨了三倍,这一定是让你非常高兴的事,但现在这样一件...
PDF
Organisation fête du collège
PDF
Corpus Christi-Rebecca Ryan Presentation March 10, 2011
PPT
Emma olson
PDF
A New Approach for Design of Model Matching Controllers for Time Delay System...
PPT
Palkkatasa-arvo
 
PDF
WoM: Influencing the Influencers - How Marketers can use Online Media and Adv...
PDF
mod bolobsruulah
PPTX
Fibra nerviosa neuroanatomia
PPSX
016
PPTX
Factores Predictivos para invasion Ganglionar en Cancer Gastrico Temprano
PDF
Propuesta
PDF
14 16 cc53
PPTX
Fuson Exit Presentation
PPT
If Products Could Speak Feb 2 2009
PPTX
January 9, 2014
PPTX
Introduction to Blog Funders Crowd Funding Platform
DOCX
ajustes del proyecto
如果你的股票在一年时间里涨了三倍,这一定是让你非常高兴的事,但现在这样一件...
Organisation fête du collège
Corpus Christi-Rebecca Ryan Presentation March 10, 2011
Emma olson
A New Approach for Design of Model Matching Controllers for Time Delay System...
Palkkatasa-arvo
 
WoM: Influencing the Influencers - How Marketers can use Online Media and Adv...
mod bolobsruulah
Fibra nerviosa neuroanatomia
016
Factores Predictivos para invasion Ganglionar en Cancer Gastrico Temprano
Propuesta
14 16 cc53
Fuson Exit Presentation
If Products Could Speak Feb 2 2009
January 9, 2014
Introduction to Blog Funders Crowd Funding Platform
ajustes del proyecto
Anúncio

Semelhante a Qualidade em projetos PHP - SoLiSC 2011 (20)

PDF
Integracao continua-e-php
PDF
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
PDF
Integração Contínua com CruiseControl e phpUnderControl
PPTX
PDF
Integração Contínua com CruiseControl e phpUnderControl
PDF
Integracao Contínua com CruiseControl e phpUnderControl
PDF
PHP, Mercado e Certificações
ODP
PHPUnit e teste de software
PDF
PHP Jedi - Boas Práticas e Alta Performance
PDF
Phpjedi 090307090434-phpapp01 2
PDF
PHP para aplicações Web de grande porte
ODP
Qualidade no desenvolvimento de software com PHPUnit
PDF
Integração Contínua com Cruise Control e phpUnderControl
PDF
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PDF
Serversidephp pptx2-120418140114-phpapp01
PDF
PHP - Programação para seres humanos
PPTX
PHP Tools for Fast coding
PDF
Integração contínua em PHP com Jenkins
PPSX
5 Maneiras de melhorar seu código PHP
PDF
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL
Integracao continua-e-php
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
PHP, Mercado e Certificações
PHPUnit e teste de software
PHP Jedi - Boas Práticas e Alta Performance
Phpjedi 090307090434-phpapp01 2
PHP para aplicações Web de grande porte
Qualidade no desenvolvimento de software com PHPUnit
Integração Contínua com Cruise Control e phpUnderControl
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
Serversidephp pptx2-120418140114-phpapp01
PHP - Programação para seres humanos
PHP Tools for Fast coding
Integração contínua em PHP com Jenkins
5 Maneiras de melhorar seu código PHP
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL

Último (19)

PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Aula 18 - Manipulacao De Arquivos python
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Aula04-Academia Heri- Tecnologia Geral 2025
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Apple Pippin Uma breve introdução. - David Glotz
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Custos e liquidação no SAP Transportation Management, TM130 Col18
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
COBITxITIL-Entenda as diferença em uso governança TI
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Processos na gestão de transportes, TM100 Col18
Aula 18 - Manipulacao De Arquivos python

Qualidade em projetos PHP - SoLiSC 2011

  • 1. Qualidade em Projetos PHP Luís Otávio Cobucci Oblonczyk 22 de Outubro de 2011 6° SoLiSC
  • 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 @lcobucci http://about.me/lcobucci
  • 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?
  • 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
  • 14. Atributos de qualificação de software ● Funcionalidade (oferece funcionalidades necessárias) ● Usabilidade (é fácil de utilizar) ● Confiabilidade (informações geradas são confiáveis) ● Performance (tempo de resposta de gente) ● Suportabilidade (é fácil de dar manutenção no código)
  • 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”
  • 17. “You can't control what you can't measure” DeMarco, Tom
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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 ● Criação incremental ● 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/
  • 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
  • 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
  • 39. Porque usar o Phing? ● Simples de configurar ● Possui tarefas para as principais ferramentas ● É extensível ● É feito em PHP
  • 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
  • 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>
  • 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/
  • 47. Socorro, por onde começo?
  • 49. Próximos passos? ● Crie testes de unidade aos poucos sem mudar o código ● Utilizando o PMD verifique os pontos mais críticos de otimização ● Comece a refatoração! ● Para as novas funcionalidades SEMPRE crie testes, de preferencia seguindo as premissas do TDD ● Instale um servidor de Integração Contínua
  • 50. Integração Continua ● De forma bem rudimentar é a “automatização da automatização” ● Executa seu script de build automaticamente logo após todo commit realizado no servidor de controle de versionamento (ideal) ● Mantém registrados os builds passados para comparação de informação ● Possui visualização em gráfico para execução de testes de unidade, violações PMD, CPD e de Code Standards
  • 52. Obrigado! Eu por aí: http://about.me/lcobucci Slides: http://slideshare.net/lcobucci Avalie essa palestra: http://joind.in/3963