Análise de Código

PHPLOC – Medindo e analisando a estrutura do código

O PHPLOC é uma ferramenta que possibilita medir rapidamente o tamanho e analisar a estrutura de um projeto. Com ele você conseguirá obter informações importantes como:

  • Quantidade de diretórios
  • Quantidade de arquivos
  • Quantidade de linhas de código
  • Quantidade de linhas de comentários
  • Quantidade de classes e funções
  • Entre outras

Instalando o PHPLOC

Para instalar o PHPLOC você utilizará o Composer, procedendo a instalação a nível global. Execute o comando a seguir no terminal para iniciar a instalação:


composer global require 'phploc/phploc=*'

Concluída a instalação via Composer, faça um teste para verificar o funcionamento. Via terminal, acesse uma pasta onde você tenha um projeto em PHP e execute o comando a seguir:


phploc .

Esse comando deverá executar a leitura de todos os arquivos e diretórios do projeto, por isso foi passado o parâmetro ‘.’ (ponto).

Caso apareça a mensagem “The program ‘phploc’ is currently not installed.” no terminal, execute a instalação do phploc conforme instrução informada após a mensagem, que geralmente é um sudo apt install phploc ou alguma variação dependendo do tipo de sistema operacional que estiver utilizando.

Analisando uma aplicação com PHPLOC

Com o PHPLOC instalado vamos fazer uma análise do código do próprio CodeIgniter.

Se ainda não tiver o código-fonte do CodeIgniter 3.1.3 em sua máquina, faça o download, descompacte e em seguida acesse o diretório via terminal para poder executar a análise.

Execute o comando ‘phploc .’ e aguarde alguns instantes para poder ver o resultado na tela do terminal.

phploc 3.0.1 by Sebastian Bergmann.

Directories                                         29
Files                                              199

Size
  Lines of Code (LOC)                            68213
  Comment Lines of Code (CLOC)                   29932 (43.88%)
  Non-Comment Lines of Code (NCLOC)              38281 (56.12%)
  Logical Lines of Code (LLOC)                   10074 (14.77%)
    Classes                                       8266 (82.05%)
      Average Class Length                          59
        Minimum Class Length                         0
        Maximum Class Length                       479
      Average Method Length                          4
        Minimum Method Length                        0
        Maximum Method Length                       60
    Functions                                     1072 (10.64%)
      Average Function Length                        6
    Not in classes or functions                    736 (7.31%)

Cyclomatic Complexity
  Average Complexity per LLOC                     0.55
  Average Complexity per Class                   32.20
    Minimum Class Complexity                      1.00
    Maximum Class Complexity                    257.00
  Average Complexity per Method                   3.82
    Minimum Method Complexity                     1.00
    Maximum Method Complexity                    47.00

Dependencies
  Global Accesses                                  379
    Global Constants                               200 (52.77%)
    Global Variables                                 2 (0.53%)
    Super-Global Variables                         177 (46.70%)
  Attribute Accesses                              5785
    Non-Static                                    5755 (99.48%)
    Static                                          30 (0.52%)
  Method Calls                                    2326
    Non-Static                                    2147 (92.30%)
    Static                                         179 (7.70%)

Structure
  Namespaces                                         0
  Interfaces                                         1
  Traits                                             0
  Classes                                          138
    Abstract Classes                                 5 (3.62%)
    Concrete Classes                               133 (96.38%)
  Methods                                         1545
    Scope
      Non-Static Methods                          1533 (99.22%)
      Static Methods                                12 (0.78%)
    Visibility
      Public Methods                               975 (63.11%)
      Non-Public Methods                           570 (36.89%)
  Functions                                        164
    Named Functions                                164 (100.00%)
    Anonymous Functions                              0 (0.00%)
  Constants                                         39
    Global Constants                                38 (97.44%)
    Class Constants                                  1 (2.56%)

As informações exibidas acima são o resultado da análise de código feita pelo PHPLOC. Ele apresenta informações de tamanho, complexidade, dependências e estrutura.

Esse resultado é bastante útil para que possamos ter uma noção real da quantidade de linhas de código escritas, linhas de comentário, classes, métodos e tantas outras informações que fica difícil analisar manualmente ao final do projeto.

Melhorando a análise da aplicação

O PHPLOC possui alguns parâmetros que permitem adicionar filtros ao processo de análise. Para acessar essas informações você pode verificar pelo próprio terminal executando o comando ‘phploc -h’.

phploc 3.0.1 by Sebastian Bergmann.

Usage:
  phploc [options] [--] [<values>]...

Arguments:
  values                               

Options:
      --names=NAMES                    A comma-separated list of file names to check [default: ["*.php"]]
      --names-exclude=NAMES-EXCLUDE    A comma-separated list of file names to exclude
      --count-tests                    Count PHPUnit test case classes and test methods
      --git-repository=GIT-REPOSITORY  Collect metrics over the history of a Git repository
      --exclude=EXCLUDE                Exclude a directory from code analysis (multiple values allowed)
      --log-csv=LOG-CSV                Write result in CSV format to file
      --log-xml=LOG-XML                Write result in XML format to file
      --progress                       Show progress bar
  -h, --help                           Display this help message
  -q, --quiet                          Do not output any message
  -V, --version                        Display this application version
      --ansi                           Force ANSI output
      --no-ansi                        Disable ANSI output
  -n, --no-interaction                 Do not ask any interactive question
  -v|vv|vvv, --verbose                 Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Se por um acaso você quiser executar a análise ignorando algum diretório, basta usar ‘–exclude=’. Por exemplo, para executar a análise do CodeIgniter ignorando o diretório application você utilizará o seguinte comando:


phploc . --exclude=application

Se quiser exibir por exemplo uma barra de progresso da análise, execute:


phploc . --progress

Caso queira gerar esse um arquivo CSV com os dados da análise, basta usar o seguinte comando:


phploc . --log-csv nome-do-arquivo.csv

Conclusão

O PHPLOC é uma ferramenta muito útil para fazer a análise de código, mesmo ela não dando tantos detalhes técnicos sobre erros, PSRs entre outros, ela retorna informações importantes para o desenvolvimento de um código de qualidade.

Existem diversas outras ferramentas para análise de código PHP, dos mais diversos tipos e complexidade, e veremos algumas delas aqui no portal, fique ligado.

Até a próxima e bons estudos!