SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Seguindo padrões:
      Codificando
profissionalmente com
      PHP Sniffer
   Vinicius Warto Campos
  www.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
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
Público Alvo

○ Implementação
  ○   Analista Programador
  ○   Programador
  ○   Desenvolvedor
  ○   Implementador
  ○   Webdesigner
  ○   Webdeveloper
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
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
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
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
Por que utilizar standards?

○ 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
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
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
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
--------------------------------------------------------------------------------
Aplicações Práticas

○ IDE
   ○ Eclipse
   ○ Netbeans

○ Code Review

○ Continuous Integration Software
   ○ Hudson
   ○ Jenkins


○ Code Analysis Software
   ○ Sonar
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
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
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

○ 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 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
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
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
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
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
Configurando sua IDE
                 Netbeans
○ Marcar as configurações conforme a imagem abaixo:
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.
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
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
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
Configurando sua IDE
       Eclipse
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
Configurando sua IDE
       Eclipse
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
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
Dúvidas
Contato

○ E-mail
   ○ wartocampos@hotmaill.com
   ○ wartocampos@gmail.com

○ Facebook
   ○ www.facebook.com/wartoca
Referências Bibliográficas

http://blogs.funiber.org/direcao-empresarial-rsc/2012/10/04/definicao-do-publico-alvo/
http://en.wikipedia.org/wiki/Software_quality
http://msdn.microsoft.com/en-us/library/aa291591%28v=vs.71%29.aspx
http://en.wikipedia.org/wiki/Coding_conventions
http://drupal.org/contribute/development#page-subtitle
http://drupal.org/node/360052
http://drupal.org/coding-standards
http://pear.php.net/manual/en/package.php.php-codesniffer.intro.php
http://pear.php.net/manual/en/package.php.php-codesniffer.coding-standard-tutorial.php
http://en.wikipedia.org/wiki/Hudson_%28software%29
http://en.wikipedia.org/wiki/Jenkins_%28software%29
http://en.wikipedia.org/wiki/Sonar_%28software_quality%29

Contenu connexe

Tendances

PHPSP TestFest 2010
PHPSP TestFest 2010PHPSP TestFest 2010
PHPSP TestFest 2010Rafael Dohms
 
Continious Delivery in practice - POA Meetup
Continious Delivery in practice - POA MeetupContinious Delivery in practice - POA Meetup
Continious Delivery in practice - POA MeetupPamela Canchanya
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosFlávio Lisboa
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comandoTales Andrade
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBMario Guedes
 
Dia Debian 2007 - Desenvolvendo aplicações no Linux
Dia Debian 2007 - Desenvolvendo aplicações no LinuxDia Debian 2007 - Desenvolvendo aplicações no Linux
Dia Debian 2007 - Desenvolvendo aplicações no LinuxJorge Pereira
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 Gabriel Machado
 
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyComo melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyLeonardo Galani
 
Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!Marcos Marcolin
 
Tdc2014 - Guia do Tester Técnico das Galáxias
Tdc2014 - Guia do Tester Técnico das GaláxiasTdc2014 - Guia do Tester Técnico das Galáxias
Tdc2014 - Guia do Tester Técnico das GaláxiasLeonardo Galani
 

Tendances (16)

PHPSP TestFest 2010
PHPSP TestFest 2010PHPSP TestFest 2010
PHPSP TestFest 2010
 
Continious Delivery in practice - POA Meetup
Continious Delivery in practice - POA MeetupContinious Delivery in practice - POA Meetup
Continious Delivery in practice - POA Meetup
 
EVOLUÇÃO DA LINGUAGEM DELPHI - ARTIGO
EVOLUÇÃO DA LINGUAGEM DELPHI - ARTIGOEVOLUÇÃO DA LINGUAGEM DELPHI - ARTIGO
EVOLUÇÃO DA LINGUAGEM DELPHI - ARTIGO
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviços
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Certificação Delphi
Certificação DelphiCertificação Delphi
Certificação Delphi
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comando
 
PHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHPPHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHP
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
 
Dia Debian 2007 - Desenvolvendo aplicações no Linux
Dia Debian 2007 - Desenvolvendo aplicações no LinuxDia Debian 2007 - Desenvolvendo aplicações no Linux
Dia Debian 2007 - Desenvolvendo aplicações no Linux
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
 
PHP Além da universidade
PHP Além da universidadePHP Além da universidade
PHP Além da universidade
 
Desenvolvimento de aplicativo utilizando o framework ionic
Desenvolvimento de aplicativo utilizando o framework ionicDesenvolvimento de aplicativo utilizando o framework ionic
Desenvolvimento de aplicativo utilizando o framework ionic
 
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyComo melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
 
Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!Novidades PHP 7.4 e 8.0!
Novidades PHP 7.4 e 8.0!
 
Tdc2014 - Guia do Tester Técnico das Galáxias
Tdc2014 - Guia do Tester Técnico das GaláxiasTdc2014 - Guia do Tester Técnico das Galáxias
Tdc2014 - Guia do Tester Técnico das Galáxias
 

Similaire à Codificando profissionalmente com PHP Sniffer

Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
 
Laravel + Vue: Como começar
Laravel + Vue: Como começarLaravel + Vue: Como começar
Laravel + Vue: Como começarLeandro Ferreira
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014Giovanni Bassi
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourcetdc-globalcode
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPRodrigo Dos Santos
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingRhuan Karlus Silva
 
ASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureGiovanni Bassi
 
Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)Manoel Campos da Silva Filho
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebIsrael Messias
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
Praticas DevOps Com ZendServer
Praticas DevOps Com ZendServerPraticas DevOps Com ZendServer
Praticas DevOps Com ZendServerWilliam Felipe
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsGilmar Pupo
 

Similaire à Codificando profissionalmente com PHP Sniffer (20)

Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
Laravel + Vue: Como começar
Laravel + Vue: Como começarLaravel + Vue: Como começar
Laravel + Vue: Como começar
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSource
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
 
ASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e Azure
 
Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente Web
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Praticas DevOps Com ZendServer
Praticas DevOps Com ZendServerPraticas DevOps Com ZendServer
Praticas DevOps Com ZendServer
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 

Codificando profissionalmente com PHP Sniffer

  • 1. Seguindo padrões: Codificando profissionalmente com PHP Sniffer Vinicius Warto Campos www.facebook.com/wartoca
  • 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
  • 5. Público Alvo ○ Implementação ○ Analista Programador ○ Programador ○ Desenvolvedor ○ Implementador ○ Webdesigner ○ Webdeveloper
  • 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
  • 12. Por que utilizar standards?
  • 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 --------------------------------------------------------------------------------
  • 19. Aplicações Práticas ○ IDE ○ Eclipse ○ Netbeans ○ Code Review ○ Continuous Integration Software ○ Hudson ○ Jenkins ○ Code Analysis Software ○ Sonar
  • 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
  • 41. Contato ○ E-mail ○ wartocampos@hotmaill.com ○ wartocampos@gmail.com ○ Facebook ○ www.facebook.com/wartoca