Qualidade em projetos PHP - TDC 2011

49
Qualidade em Projetos PHP Qualidade em Projetos PHP Luís Otávio Cobucci Oblonczyk 21 de Agosto de 2011 TDC 2011 Florianópolis

description

Abordamos aqui as principais ferramentas que nos dão uma visão realista do nosso projeto e nos ajudam a encontrar os pontos que podem ser melhorados/corrigidos

Transcript of Qualidade em projetos PHP - TDC 2011

Page 1: Qualidade em projetos PHP - TDC 2011

Qualidade em Projetos PHPQualidade em Projetos PHP

Luís Otávio Cobucci Oblonczyk

21 de Agosto de 2011TDC 2011 Florianópolis

Page 2: Qualidade em projetos PHP - TDC 2011

Luís Otávio Cobucci OblonczykLuí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

Page 3: Qualidade em projetos PHP - TDC 2011

No trabalho, devemos lidar com várias coisas...

Page 4: Qualidade em projetos PHP - TDC 2011

Algumas nos deixam felizes...

Page 5: Qualidade em projetos PHP - TDC 2011

Outras nem tanto...

Page 6: Qualidade em projetos PHP - TDC 2011

Alguns precisam de combustível...

Page 7: Qualidade em projetos PHP - TDC 2011

Outros de diversão...

Page 8: Qualidade em projetos PHP - TDC 2011

Para trabalhar com bom humor...

Page 9: Qualidade em projetos PHP - TDC 2011

Mas tudo tem limite!

Page 10: Qualidade em projetos PHP - TDC 2011

Funcionando!!!

Page 11: Qualidade em projetos PHP - TDC 2011

Mas será que apenas funcionar é suficiente?

Page 12: Qualidade em projetos PHP - TDC 2011

Não!!!

É preciso ter qualidade

Não!!!

É preciso ter qualidade

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

Page 13: Qualidade em projetos PHP - TDC 2011

QualidadeQualidade

“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

Page 14: Qualidade em projetos PHP - TDC 2011

Atributos de qualificação de softwareAtributos de qualificação de software● Funcionalidade● Usabilidade● Confiabilidade● Performance● Suportabilidade

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

Page 15: Qualidade em projetos PHP - TDC 2011

A vida de um software sem qualidadeA 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

Page 16: Qualidade em projetos PHP - TDC 2011
Page 17: Qualidade em projetos PHP - TDC 2011

“You can't control what you can't measure”DeMarco, Tom

Page 18: Qualidade em projetos PHP - TDC 2011

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

Page 19: Qualidade em projetos PHP - TDC 2011

Precisamos utilizar as ferramentas corretas...

Page 20: Qualidade em projetos PHP - TDC 2011

PHPUnitPHPUnit

● 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

Page 21: Qualidade em projetos PHP - TDC 2011

Atenção: testes podem mentir...

Page 22: Qualidade em projetos PHP - TDC 2011

Atenção: testes podem mentir...

Page 23: Qualidade em projetos PHP - TDC 2011

MutagenesisMutagenesis

● 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

Page 24: Qualidade em projetos PHP - TDC 2011

PHPLocPHPLoc

● 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

Page 25: Qualidade em projetos PHP - TDC 2011
Page 26: Qualidade em projetos PHP - TDC 2011

PHP CodeSnifferPHP 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

Page 27: Qualidade em projetos PHP - TDC 2011
Page 28: Qualidade em projetos PHP - TDC 2011

PHPCPDPHPCPD

● 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

Page 29: Qualidade em projetos PHP - TDC 2011
Page 30: Qualidade em projetos PHP - TDC 2011

PHPMDPHPMD

● 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

Page 31: Qualidade em projetos PHP - TDC 2011

● Avoid short names● Class has too many methods● Avoid unused local variables● Overall complexity● Number of dependencies

Page 32: Qualidade em projetos PHP - TDC 2011

DocBloxDocBlox

● 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

Page 33: Qualidade em projetos PHP - TDC 2011

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

Page 34: Qualidade em projetos PHP - TDC 2011

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

Page 35: Qualidade em projetos PHP - TDC 2011

Como juntar isso tudo?

Page 36: Qualidade em projetos PHP - TDC 2011

PhingPhing

● “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

Page 37: Qualidade em projetos PHP - TDC 2011

Build?

Page 38: Qualidade em projetos PHP - TDC 2011

Software buildSoftware 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

Page 39: Qualidade em projetos PHP - TDC 2011

Porque usar o Phing?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

Page 40: Qualidade em projetos PHP - TDC 2011

Então é uma lista de tarefas?

Page 41: Qualidade em projetos PHP - TDC 2011

PhingPhing

● 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

Page 42: Qualidade em projetos PHP - TDC 2011

<?xml version="1.0" encoding="UTF-8"?><project name="ProjectName" default="build" basedir="." />

Page 43: Qualidade em projetos PHP - TDC 2011

<?xml version="1.0" encoding="UTF-8"?><project name="ProjectName" default="build" basedir="." > <target name="build" /></project>

Page 44: Qualidade em projetos PHP - TDC 2011

<?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>

Page 45: Qualidade em projetos PHP - TDC 2011
Page 46: Qualidade em projetos PHP - TDC 2011

PhingPhing

● É 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

Page 47: Qualidade em projetos PHP - TDC 2011

Próximos passos?Próximos passos?

● Refatoração● Integração Contínua

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

Page 48: Qualidade em projetos PHP - TDC 2011

Perguntas??

Page 49: Qualidade em projetos PHP - TDC 2011

Obrigado!Obrigado!

● @lcobucci● http://lcobucci.wordpress.com● http://github.com/lcobucci

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