seguindo padrões: codificando profissionalmente com php sniffer

42
Seguindo padrões: Codificando profissionalmente com PHP Sniffer Vinicius Warto Campos www.facebook.com/wartoca

Upload: vinicius-warto-campos

Post on 21-Jun-2015

2.741 views

Category:

Technology


0 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

Seguindo padrões: Codificando

profissionalmente com PHP Sniffer

Vinicius Warto Camposwww.facebook.com/wartoca

Page 2: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 3: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 4: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 5: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ Implementação○ Analista Programador○ Programador○ Desenvolvedor○ Implementador○ Webdesigner○ Webdeveloper

Público Alvo

Page 6: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 7: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 8: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 9: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 10: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 11: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ Definir a utilização de boas práticas

○ Evitar problemas de padronização de código em Code Review

Por que utilizar standards?

Page 12: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

Por que utilizar standards?

Page 13: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 14: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 15: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 16: Seguindo padrões: Codificando profissionalmente com 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

Utilizando PHP Sniffer

Page 17: Seguindo padrões: Codificando profissionalmente com 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

Page 18: Seguindo padrões: Codificando profissionalmente com 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

Page 19: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

Aplicações Práticas

○ IDE○ Eclipse○ Netbeans

○ Code Review

○ Continuous Integration Software○ Hudson○ Jenkins

○ Code Analysis Software○ Sonar

Page 20: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 21: Seguindo padrões: Codificando profissionalmente com 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

Configurando o PHP Sniffer

Page 22: Seguindo padrões: Codificando profissionalmente com 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

Page 23: Seguindo padrões: Codificando profissionalmente com 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

Page 24: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

Configurando sua IDE

○ As configurações a seguir foram feitas nas seguintes versões de IDE○ Netbeans 6.9+○ Eclipse Helios

Page 25: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 26: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 27: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 28: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 29: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 30: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ Marcar as configurações conforme a imagem abaixo:

Configurando sua IDENetbeans

Page 31: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 32: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 33: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 34: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 35: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

Configurando sua IDEEclipse

Page 36: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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

Page 37: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

Configurando sua IDEEclipse

Page 38: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 39: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ 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

Page 40: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

Dúvidas

Page 41: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

○ E-mail○ [email protected][email protected]

○ Facebook○ www.facebook.com/wartoca

Contato

Page 42: Seguindo padrões: Codificando profissionalmente com PHP Sniffer

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