SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
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”
“You can't control what you can't measure”
DeMarco, Tom
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
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
PHPCPD
●
    Busca duplicações de códigos em seu projeto
●
    Métricas: número e locais das duplicações




    https://github.com/sebastianbergmann/phpcpd
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/
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>
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

Mais procurados

Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScriptDan Vitoriano
 
Testando Aplicações com PHPT
Testando Aplicações com PHPTTestando Aplicações com PHPT
Testando Aplicações com PHPTSidney Souza
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Wellington Moreira
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Bruno Maomeh
 
Desenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosDesenvolvimento web: PHP orientado a objetos
Desenvolvimento web: PHP orientado a objetosLucas Vegi
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPPedro Chaves
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDJony Ferreira dos Santos
 
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimentoDevops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimentoThiago Ferreira
 
Service virtualization floripa
Service virtualization floripaService virtualization floripa
Service virtualization floripaErnesto Barbosa
 
Introdução ao Github actions - TDC Connections
Introdução ao Github actions - TDC ConnectionsIntrodução ao Github actions - TDC Connections
Introdução ao Github actions - TDC ConnectionsGuillaume Falourd
 

Mais procurados (19)

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

Destaque

如果你的股票在一年时间里涨了三倍,这一定是让你非常高兴的事,但现在这样一件...
如果你的股票在一年时间里涨了三倍,这一定是让你非常高兴的事,但现在这样一件...如果你的股票在一年时间里涨了三倍,这一定是让你非常高兴的事,但现在这样一件...
如果你的股票在一年时间里涨了三倍,这一定是让你非常高兴的事,但现在这样一件...大璋 王
 
Organisation fête du collège
Organisation fête du collègeOrganisation fête du collège
Organisation fête du collègeInfosCollège
 
Corpus Christi-Rebecca Ryan Presentation March 10, 2011
Corpus Christi-Rebecca Ryan Presentation March 10, 2011Corpus Christi-Rebecca Ryan Presentation March 10, 2011
Corpus Christi-Rebecca Ryan Presentation March 10, 2011Rebecca Ryan
 
A New Approach for Design of Model Matching Controllers for Time Delay System...
A New Approach for Design of Model Matching Controllers for Time Delay System...A New Approach for Design of Model Matching Controllers for Time Delay System...
A New Approach for Design of Model Matching Controllers for Time Delay System...IJERA Editor
 
Palkkatasa-arvo
Palkkatasa-arvoPalkkatasa-arvo
Palkkatasa-arvoSDP
 
WoM: Influencing the Influencers - How Marketers can use Online Media and Adv...
WoM: Influencing the Influencers - How Marketers can use Online Media and Adv...WoM: Influencing the Influencers - How Marketers can use Online Media and Adv...
WoM: Influencing the Influencers - How Marketers can use Online Media and Adv...Uri Levanon
 
mod bolobsruulah
mod bolobsruulahmod bolobsruulah
mod bolobsruulahtumennasan
 
Fibra nerviosa neuroanatomia
Fibra nerviosa neuroanatomiaFibra nerviosa neuroanatomia
Fibra nerviosa neuroanatomiaAlejandra Cuñas
 
Factores Predictivos para invasion Ganglionar en Cancer Gastrico Temprano
Factores Predictivos para invasion Ganglionar en Cancer Gastrico TempranoFactores Predictivos para invasion Ganglionar en Cancer Gastrico Temprano
Factores Predictivos para invasion Ganglionar en Cancer Gastrico TempranoHospital Universitario de Maracaibo
 
Fuson Exit Presentation
Fuson Exit PresentationFuson Exit Presentation
Fuson Exit PresentationCourtney F
 
January 9, 2014
January 9, 2014January 9, 2014
January 9, 2014khyps13
 
Introduction to Blog Funders Crowd Funding Platform
Introduction to Blog Funders Crowd Funding PlatformIntroduction to Blog Funders Crowd Funding Platform
Introduction to Blog Funders Crowd Funding PlatformSafelink Internet Services
 
ajustes del proyecto
ajustes del proyectoajustes del proyecto
ajustes del proyectodayana jaime
 

Destaque (20)

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

Semelhante a Qualidade PHP Projetos

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
 
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
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
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
 
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
 
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
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
Zend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutençãoZend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutençãoFlávio Lisboa
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net CoreWordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net CoreVanessa Valle
 
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
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsJosé Alexandre Macedo
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareFábio Nogueira de Lucena
 

Semelhante a Qualidade PHP Projetos (20)

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
 
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
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Django
DjangoDjango
Django
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
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
 
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...
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversa
 
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...
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
Zend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutençãoZend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutenção
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net CoreWordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
 
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
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de software
 
A Linguagem Php
A Linguagem PhpA Linguagem Php
A Linguagem Php
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 

Qualidade PHP Projetos

  • 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”
  • 16.
  • 17. “You can't control what you can't measure” DeMarco, Tom
  • 18.
  • 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
  • 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
  • 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
  • 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
  • 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/
  • 33.
  • 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>
  • 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/
  • 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