Seguindo padrões: Codificando
profissionalmente com PHP Sniffer
Vinicius Warto Camposwww.facebook.com/wartoca
Vinicius Warto Campos
○ Desenvolvedor de Software na empresa Ci&T, atuando exclusivamente no desenvolvimento de aplicações Web, utilizando PHP, Java e .Net.
○ Larga experiência em desenvolvimento de projetos PHP.
○ Atua há 5 anos com desenvolvimento em PHP.
○ Músico nas horas vagas○ Video-game sempre é uma boa
pedida
Agenda
○ Público Alvo○ O que são standards?○ Por que utilizar standards?○ O que é PHP Sniffer?○ Utilizando PHP Sniffer○ Aplicações Práticas○ Configurando o PHP Sniffer○ Configurando sua IDE
○ Ambiente○ Arquiteto○ Analista de Suporte
○ Modelagem de Sistemas○ Arquiteto de Sistemas○ Arquiteto de Software
○ Liderança Técnica○ Líder Técnico○ Líder de Desenvolvimento
Público Alvo
○ Implementação○ Analista Programador○ Programador○ Desenvolvedor○ Implementador○ Webdesigner○ Webdeveloper
Público Alvo
O que são standards?
○ Convenção de código
○ Conjunto de boas práticas no momento de codificação
○ Visam validar um padrão de implementação, independentemente de qual parte de um código está sendo implementada○ DAO○ DTO○ Controller○ Generic Class
○ Não definem Padrões de Projetos○ Singleton○ Factory○ MVC○ ORM○ Active Record○ Data Persistence
○ Não definem utilização de frameworks○ Zend○ Symfony○ CakePHP○ Code Igniter
O que são standards?
○ Definem:○ Indentação do Código○ Padrão de comentários○ Padrão de documentação○ Declarações○ Statements○ Convenções de nomenclatura○ Práticas de programação○ Princípios de programação○ White spaces○ Atribuição e comparação de valores
O que são standards?
○ Adicionalmente podem validar○ Performance do código○ Segurança do código○ Delimitador de quebra de linha○ Código duplicado○ Sugestão de refatoração de código
O que são standards?
Por que utilizar standards?
○ Garantir a qualidade do software
○ Garantir a legibilidade do código
○ Reduzir o custo da manutenção
○ Definir um código seguro
○ Definir um código confiável
○ Definir um código eficiente
○ Definir a utilização de boas práticas
○ Evitar problemas de padronização de código em Code Review
Por que utilizar standards?
Por que utilizar standards?
○ Você colabora para projetos Open Source?
○ Você submete códigos para aprovação?
○ Sabia que esses códigos devem ser padronizados?
○ Drupal○ Contribute to development○ Standards, security and best practices○ Coding standards
Por que utilizar standards?
O que é PHP Sniffer?
○ É a ferramente sobre a qual você testará um Coding Standard em seu projeto
○ É um módulo da biblioteca PEAR, que possui um script que detecta violações de códigos que utilizam um Standard definido
○ Também detecta erros comuns de semântica
○ É necessário possui o módulo PEAR para instalá-lo e utilizá-lo
Utilizando PHP Sniffer
○ Para utilizar o PHP Code Sniffer, executamos o camando phpcs na tela do terminal
○ phpcs {lista de parâmetros}○ phpcs --help○ phpcs -i○ phpcs /path/to/my/project/my-file.php○ phpcs /path/to/my/project/○ phpcs -n /path/to/my/project/○ phpcs --standard=PEAR /path/to/my/project○ phpcs --standard=/path/to/MyStandard
/path/to/my/project/my-file.php
$ phpcs --help
Usage: phpcs [-nwlsapvi] [-d key[=value]] [--report=<report>] [--report-file=<reportfile>] [--report-<report>=<reportfile>] ... [--report-width=<reportWidth>] [--generator=<generator>] [--tab-width=<tabWidth>] [--severity=<severity>] [--error-severity=<severity>] [--warning-severity=<severity>] [--config-set key value] [--config-delete key] [--config-show] [--standard=<standard>] [--sniffs=<sniffs>] [--encoding=<encoding>] [--extensions=<extensions>] [--ignore=<patterns>] <file> ...
-n Do not print warnings (shortcut for --warning-severity=0) -w Print both warnings and errors (on by default) -l Local directory only, no recursion -s Show sniff codes in all reports -a Run interactively -p Show progress of the run-v[v][v] Print verbose output -i Show a list of installed coding standards-d Set the [key] php.ini value to [value] or [true] if value is omitted --help Print this help message
Utilizando PHP Sniffer
$ phpcs -i
The installed coding standards are Zend, PEAR, PHPCS, Squiz and MySource
$ phpcs /path/to/my/project/my-file.php
FILE: /path/to/my/project/my-file.php--------------------------------------------------------------------------------FOUND 5 ERROR(S) AFFECTING 2 LINE(S)-------------------------------------------------------------------------------- 2 | ERROR | Missing file doc comment 20 | ERROR | PHP keywords must be lowercase; expected "false" but found "FALSE" 47 | ERROR | Line not indented correctly; expected 4 spaces but found 1 51 | ERROR | Missing function doc comment 88 | ERROR | Line not indented correctly; expected 9 spaces but found 6--------------------------------------------------------------------------------
Utilizando PHP Sniffer
$ phpcs /path/to/my/project/
FILE: /path/to/my/project/my-file.php--------------------------------------------------------------------------------FOUND 5 ERROR(S) AFFECTING 5 LINE(S)-------------------------------------------------------------------------------- 2 | ERROR | Missing file doc comment 20 | ERROR | PHP keywords must be lowercase; expected "false" but found "FALSE" 47 | ERROR | Line not indented correctly; expected 4 spaces but found 1 51 | ERROR | Missing function doc comment 88 | ERROR | Line not indented correctly; expected 9 spaces but found 6--------------------------------------------------------------------------------
FILE: /path/to/my/project/your-file.php--------------------------------------------------------------------------------FOUND 1 ERROR(S) AND 1 WARNING(S) AFFECTING 1 LINE(S)-------------------------------------------------------------------------------- 21 | ERROR | PHP keywords must be lowercase; expected "false" but found | | "FALSE" 21 | WARNING | Equals sign not aligned with surrounding assignments--------------------------------------------------------------------------------
Utilizando PHP Sniffer
Aplicações Práticas
○ IDE○ Eclipse○ Netbeans
○ Code Review
○ Continuous Integration Software○ Hudson○ Jenkins
○ Code Analysis Software○ Sonar
○ Sugestão de processo "Build and Deploy"○ Criar um projeto Hudson / Jenkins○ Atualizar repositório (CVS / SVN / GIT)○ Executar Sonar○ Executar PHP Sniffer○ Build○ Deploy
Aplicações Práticas
○ Instalação do módulo PEAR
○ Habilitação do PEAR para proxy, se necessário
○ Instalação do pacote PHP Code Sniffer
○ Definição do "channel" PHPMD
○ Definição do "channel" PDEPEND
○ Instalação do pacote PHPMD
Configurando o PHP Sniffer
○ Seguem abaixo os comandos que devem ser executados em terminal, um após o outro, para executar os passos definidos no slide anterior
$ wget http://pear.php.net/go-pear.phar$ php go-pear.phar$ pear config-set http_proxy <username>:<password>@<proxy-url-address>:<port-number>$ pear install --alldeps PHP_CodeSniffer-1.3.0$ pear channel-discover pear.phpmd.org$ pear channel-discover pear.pdepend.org$ pear install --alldeps phpmd/PHP_PMD$ phpcs -i
Configurando o PHP Sniffer
Configurando o PHP Sniffer
○ Para adicionar um novo standard○ Abrir a pasta de Standards "/pear-
path/PHP/CodeSniffer/Standards"○ Adicione sua pasta de Standard○ Execute phpcs -i para confirmar seu standard
Configurando sua IDE
○ As configurações a seguir foram feitas nas seguintes versões de IDE○ Netbeans 6.9+○ Eclipse Helios
Configurando sua IDENetbeans
○ Baixar o plugin phpMD○ http://sourceforge.
net/projects/phpmdnb/files/nbm/NetBeans-6.9.1/○ nb-phpmd-20110516-nb6.9.1.201011082200.nbm
○ Instalar o plugin○ Abrir Netbeans○ Abrir Ferramentas => Plug-ins○ Selecionar aba "Baixados"○ Clicar em "Adicionar plug-ins"○ Selecionar o arquivo baixado○ Clicar em Continuar○ Após a instalação, reiniciar o Netbeans
○ Habilitar plugin○ Abrir Netbeans○ Abrir Ferramentas => Plug-ins○ Selecionar aba "Instalado"○ Selecionar plugin "phpCS-MD Plugin"○ Clicar em Ativar○ Clicar em Habilitar○ Clicar em Finalizar○ Fechar janela de Plug-ins
Configurando sua IDENetbeans
○ Configurar plugin○ Abrir Ferramentas => Opções => PHP○ Selecionar aba "phpMD"○ No campo "phpMD batch file", adicionar executável
phpMD■ /php-path/phpmd.bat || /php-path/phpmd
○ No campo "includes", colocar a expressão■ ^.*\.inc[5]?$|^.*\.module[5]?$|^.*\.php[5]?$|^.*\.css
[5]?$|^.*\.install?$|^.*\.js?$|^.*\.theme?$|^.*\.engine?$|^.*\.test?$|^.*\.info?$|^.*\.po?$
○ Clicar em "test settings"○ Clicar em OK
Configurando sua IDENetbeans
○ Configurar plugin○ Abrir Ferramentas => Opções => PHP○ Selecionar aba "phpCodeSniffer"○ No campo "phpCodeSniffer batch file", adicionar
executável phpCodeSniffer■ /php-path/phpcs.bat || /php-path/phpcs
○ No campo "Standard", informe o standard○ No campo "includes", colocar a expressão
■ ^.*\.inc[5]?$|^.*\.module[5]?$|^.*\.php[5]?$|^.*\.css[5]?$|^.*\.install?$|^.*\.js?$|^.*\.theme?$|^.*\.engine?$|^.*\.test?$|^.*\.info?$|^.*\.po?$
○ Clicar em "test settings"○ Clicar em OK
Configurando sua IDENetbeans
○ Abrir a Janela de Tarefas○ [Ctrl] + [6]○ No ícone folha em branco
■ Clicar em "Exibir tarefas somente para arquivos editados atualmente."
○ Clicar na seta que aponta para baixo no ícone do funil■ Clicar em Editar
Configurando sua IDENetbeans
○ Marcar as configurações conforme a imagem abaixo:
Configurando sua IDENetbeans
○ Conforme um arquivo for aberto, alterado e salvo, o Sniffer será executado automaticamente e a janela tarefas exibirá os erros de standard.
Configurando sua IDENetbeans
Configurando sua IDEEclipse
○ Adicionar plugin○ Abrir Eclipse○ Clicar em Help => Install new Software○ Clicar em Add○ Ao abrir janela "Add Repository"
■ Name: PHP Tool Integration (PTI)■ Location: http://www.phpsrc.org/eclipse/pti
○ Após confirmar os dados, selecionar o Plugin○ Clicar em Next○ Aceitar termos e clicar em Finish○ Confirmar Security Warning○ Reiniciar Eclipse
○ Configurar PHP no Eclipse○ Abrir Windows => Preferences○ Abrir opção PHP => PHP Executables○ Clicar em Add○ Defina o nome de acordo com a versão local do PHP○ No campo Executable Path, informe o executavel
■ /php-path/bin/php.exe || /php-path/bin/php.exe ○ SAPI Type, marque a opção CLI○ Clicar em Finish○ Fechar a janela Preferences
Configurando sua IDEEclipse
○ Configurar plugin○ Abrir a pasta de Standards do plugin
■ /eclipse-path/plugins/org.phpsrc.eclipse.pti.library.pear_1.2.2.R2011062700000/php/library/PEAR/PHP/CodeSniffer/Standards
○ Adicione sua pasta de Standard nesse local○ Abrir Windows => Preferences○ Abrir opção PHP Tools => PHP CodeSniffer○ Preencher opções conforme a próxima imagem, mas
informe o PHP Executable e Standard apropriados
Configurando sua IDEEclipse
Configurando sua IDEEclipse
Configurando sua IDEEclipse
○ Configurar plugin○ Clicar em Window => Show View => Problems○ Na janela Problems, clicar em View Menu○ Clicar em Configure Contents○ Clicar em New
■ Adicionar o nome do Standard○ Scope
■ ‘On selected element only’○ Types
■ Deselect All■ PHP Code Sniffer■ Problem
○ Clicar em OK
Configurando sua IDEEclipse
○ Para executar o Sniffer○ Clicar com o botão direito no arquivo
■ Clicar em PHP Tools => PHP Code Sniffer○ A janela Problems será atualizada com os erros de
Standard
Configurando sua IDEEclipse
○ PHP Conference Brazil 2012
○ Participantes do evento
○ Comunidade PHP
○ Aos amigos Thomas Bryan e Rafael Nica pelo suporte e revisão do conteúdo
Agradecimentos
Dúvidas
Referências Bibliográficas
http://blogs.funiber.org/direcao-empresarial-rsc/2012/10/04/definicao-do-publico-alvo/http://en.wikipedia.org/wiki/Software_qualityhttp://msdn.microsoft.com/en-us/library/aa291591%28v=vs.71%29.aspxhttp://en.wikipedia.org/wiki/Coding_conventionshttp://drupal.org/contribute/development#page-subtitlehttp://drupal.org/node/360052http://drupal.org/coding-standardshttp://pear.php.net/manual/en/package.php.php-codesniffer.intro.phphttp://pear.php.net/manual/en/package.php.php-codesniffer.coding-standard-tutorial.phphttp://en.wikipedia.org/wiki/Hudson_%28software%29http://en.wikipedia.org/wiki/Jenkins_%28software%29http://en.wikipedia.org/wiki/Sonar_%28software_quality%29