Workshop presented on November 30th, 2012, by Vinicius Warto at PHP Conference Brazil. This work explains how to perform a professional software development using PHP Code Sniffer with some pratical issues.
2. 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
3. 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
4. Público Alvo
○ 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
6. 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
7. O que são standards?
○ 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
8. 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
9. 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
10. 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
11. Por que utilizar standards?
○ Definir a utilização de boas práticas
○ Evitar problemas de padronização de
código em Code Review
13. 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
14. 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
15. 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
16. Utilizando PHP Sniffer
$ 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
17. 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
--------------------------------------------------------------------------------
18. 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
--------------------------------------------------------------------------------
20. Aplicações Práticas
○ 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
21. Configurando o PHP Sniffer
○ 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
22. 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
23. 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
24. Configurando sua IDE
○ As configurações a seguir foram feitas nas seguintes
versões de IDE
○ Netbeans 6.9+
○ Eclipse Helios
25. Configurando sua IDE
Netbeans
○ 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
26. Configurando sua IDE
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
27. Configurando sua IDE
Netbeans
○ 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
28. Configurando sua IDE
Netbeans
○ 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
29. Configurando sua IDE
Netbeans
○ 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
30. Configurando sua IDE
Netbeans
○ Marcar as configurações conforme a imagem abaixo:
31. Configurando sua IDE
Netbeans
○ Conforme um arquivo for aberto, alterado e salvo, o
Sniffer será executado automaticamente e a janela
tarefas exibirá os erros de standard.
32. Configurando sua IDE
Eclipse
○ 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
33. Configurando sua IDE
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
34. Configurando sua IDE
Eclipse
○ 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/CodeSnif
fer/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
36. Configurando sua IDE
Eclipse
○ 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
38. Configurando sua IDE
Eclipse
○ 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
39. Agradecimentos
○ PHP Conference Brazil 2012
○ Participantes do evento
○ Comunidade PHP
○ Aos amigos Thomas Bryan e Rafael Nica pelo suporte
e revisão do conteúdo