Upload
luis-cobucci
View
1.425
Download
1
Embed Size (px)
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
Citation preview
Qualidade em Projetos PHPQualidade em Projetos PHP
Luís Otávio Cobucci Oblonczyk
21 de Agosto de 2011TDC 2011 Florianópolis
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
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
Não!!!
É preciso ter qualidade
Luís Otávio Cobucci Oblonczyk – 21/08/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
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
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
“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...
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
Atenção: testes podem mentir...
Atenção: testes podem mentir...
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
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
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
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
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
● Avoid short names● Class has too many methods● Avoid unused local variables● Overall complexity● Number of dependencies
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
Luís Otávio Cobucci Oblonczyk – 21/08/2011
Luís Otávio Cobucci Oblonczyk – 21/08/2011
Como juntar isso tudo?
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
Build?
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
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
Então é uma lista de tarefas?
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
<?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>
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
Próximos passos?Próximos passos?
● Refatoração● Integração Contínua
Luís Otávio Cobucci Oblonczyk – 21/08/2011
Perguntas??
Obrigado!Obrigado!
● @lcobucci● http://lcobucci.wordpress.com● http://github.com/lcobucci
Luís Otávio Cobucci Oblonczyk – 21/08/2011