Back-End

1 fev, 2017

PHP Mess detector – Analisando o código em busca de problemas

Publicidade

O PHP Mess Detector é uma ferramenta de análise estática de código que permite encontrar diversos tipos de problemas e analisar a qualidade do código da aplicação. Veja algumas das análises possíveis de serem executadas com o PHP Mess Detector:

  • Localização de possíveis bugs;
  • Localização de métodos, propriedades e parâmetros não utilizados;
  • Verificar a qualidade, complexidade a legibilidade do código.

Instalando o PHP Mess Detector

Para instalar o PHP Mess Detector, 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 'phpmd/phpmd=@stable'

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:

phpmd . text unusedcode

Esse comando deverá executar a leitura de todos os arquivos e diretórios do projeto, por isso, foi passado o parâmetro ‘.’ (ponto), imprimindo o resultado no terminal em texto plano. A análise a ser executada é a de código não utilizado.

Caso apareça a mensagem “The program ‘phpmd’ 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 phpmd ou alguma variação dependendo do tipo de sistema operacional que estiver utilizando.

Analisando uma aplicação com PHP Mess Detector

Com o PHP Mess Detector 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 ‘phpmd . text unusedcode’ e aguarde alguns instantes para poder ver o resultado na tela do terminal.

/home/jlamim/Downloads/CodeIgniter-3.1.3/system/core/Exceptions.php:157    Avoid unused parameters such as '$heading'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/core/Exceptions.php:236    Avoid unused parameters such as '$message'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/core/Exceptions.php:236    Avoid unused parameters such as '$line'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/core/Input.php:775    Avoid unused local variables such as '$val'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/core/Loader.php:921    Avoid unused local variables such as '$_ci_var'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/core/Loader.php:968    Avoid unused local variables such as '$_ci_return'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/core/Loader.php:1381    Avoid unused local variables such as '$object'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/core/Output.php:421    Avoid unused local variables such as '$CFG'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/DB_forge.php:826    Avoid unused parameters such as '$attributes'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/DB_query_builder.php:1952    Avoid unused local variables such as '$key'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/DB_query_builder.php:1999    Avoid unused local variables such as '$k'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/DB_result.php:628    Avoid unused parameters such as '$n'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/DB_utility.php:347    Avoid unused local variables such as '$val'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/cubrid/cubrid_utility.php:72    Avoid unused parameters such as '$params'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/mssql/mssql_utility.php:71    Avoid unused parameters such as '$params'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/mysql/mysql_utility.php:97    Avoid unused local variables such as '$tables'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/mysql/mysql_utility.php:100    Avoid unused local variables such as '$ignore'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/mysql/mysql_utility.php:117    Avoid unused local variables such as '$add_drop'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/mysql/mysql_utility.php:133    Avoid unused local variables such as '$add_insert'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/mysqli/mysqli_utility.php:99    Avoid unused local variables such as '$tables'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/mysqli/mysqli_utility.php:102    Avoid unused local variables such as '$ignore'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/mysqli/mysqli_utility.php:119    Avoid unused local variables such as '$add_drop'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/mysqli/mysqli_utility.php:135    Avoid unused local variables such as '$add_insert'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/oci8/oci8_utility.php:62    Avoid unused parameters such as '$params'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/odbc/odbc_utility.php:57    Avoid unused parameters such as '$params'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/pdo/pdo_utility.php:57    Avoid unused parameters such as '$params'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/pdo/subdrivers/pdo_pgsql_driver.php:327    Avoid unused local variables such as '$key'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/postgre/postgre_driver.php:551    Avoid unused local variables such as '$key'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/postgre/postgre_utility.php:73    Avoid unused parameters such as '$params'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/sqlite/sqlite_driver.php:225    Avoid unused parameters such as '$table'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/sqlite/sqlite_utility.php:55    Avoid unused parameters such as '$params'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/sqlite3/sqlite3_utility.php:55    Avoid unused parameters such as '$params'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/sqlsrv/sqlsrv_result.php:117    Avoid unused local variables such as '$offset'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/database/drivers/sqlsrv/sqlsrv_utility.php:71    Avoid unused parameters such as '$params'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/helpers/captcha_helper.php:114    Avoid unused local variables such as '$expiration'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/helpers/date_helper.php:588    Avoid unused local variables such as '$val'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/helpers/form_helper.php:280    Avoid unused parameters such as '$value'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/helpers/smiley_helper.php:165    Avoid unused local variables such as '$val'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/helpers/smiley_helper.php:208    Avoid unused local variables such as '$val'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:59    Avoid unused parameters such as '$id'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:75    Avoid unused parameters such as '$id'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:75    Avoid unused parameters such as '$data'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:75    Avoid unused parameters such as '$ttl'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:75    Avoid unused parameters such as '$raw'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:88    Avoid unused parameters such as '$id'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:102    Avoid unused parameters such as '$id'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:102    Avoid unused parameters such as '$offset'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:116    Avoid unused parameters such as '$id'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:116    Avoid unused parameters such as '$offset'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:141    Avoid unused parameters such as '$type'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_dummy.php:154    Avoid unused parameters such as '$id'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_file.php:96    Avoid unused parameters such as '$raw'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_file.php:204    Avoid unused parameters such as '$type'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_redis.php:175    Avoid unused parameters such as '$raw'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_redis.php:272    Avoid unused parameters such as '$type'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Cache/drivers/Cache_wincache.php:101    Avoid unused parameters such as '$raw'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Image_lib.php:888    Avoid unused local variables such as '$output'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Image_lib.php:971    Avoid unused local variables such as '$output'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Javascript.php:71    Avoid unused local variables such as '$val'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Javascript.php:84    Avoid unused local variables such as '$autoload'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Javascript/Jquery.php:113    Avoid unused local variables such as '$autoload'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Javascript/Jquery.php:800    Avoid unused local variables such as '$corner_location'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Pagination.php:367    Avoid unused local variables such as '$attributes'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Parser.php:190    Avoid unused parameters such as '$string'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Session/Session_driver.php:148    Avoid unused parameters such as '$session_id'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Session/drivers/Session_database_driver.php:129    Avoid unused parameters such as '$save_path'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Session/drivers/Session_database_driver.php:129    Avoid unused parameters such as '$name'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Session/drivers/Session_memcached_driver.php:106    Avoid unused parameters such as '$save_path'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Session/drivers/Session_memcached_driver.php:106    Avoid unused parameters such as '$name'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Session/drivers/Session_memcached_driver.php:287    Avoid unused parameters such as '$maxlifetime'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Session/drivers/Session_redis_driver.php:130    Avoid unused parameters such as '$save_path'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Session/drivers/Session_redis_driver.php:130    Avoid unused parameters such as '$name'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Session/drivers/Session_redis_driver.php:307    Avoid unused parameters such as '$maxlifetime'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Trackback.php:160    Avoid unused local variables such as '$title'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Trackback.php:160    Avoid unused local variables such as '$blog_name'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Trackback.php:161    Avoid unused local variables such as '$excerpt'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Xmlrpc.php:1392    Avoid unused local variables such as '$curr_elem'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Xmlrpcs.php:424    Avoid unused parameters such as '$m'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Xmlrpcs.php:529    Avoid unused local variables such as '$plist'.
/home/jlamim/Downloads/CodeIgniter-3.1.3/system/libraries/Xmlrpcs.php:607    Avoid unused local variables such as '$a'.

As informações exibidas acima são o resultado da análise de código feita pelo PHP Mess Detector. Ele apresenta informações de métodos, propriedades e parâmetros não utilizados.

Esse resultado é bastante útil para que possamos ver o que não está sendo utilizado na aplicação e então verificar se é código que deve permanecer, pois poderá ser utilizado no futuro ou se é código que pode ser removido por não estar mais em utilização.

Analisando a aplicação

O PHP Mess Detector possui alguns parâmetros que permitem adicionar filtros ao processo de análise e definir o formato de saída do resultado do teste.

Os formatos de saída disponíveis são: text, xml e html.

Os parâmetros para análise do código são: cleancode, codesize, controversial, design, naming, unusedcode.

Você encontra mais detalhes sobre esses parâmetros na documentação oficial.

A base para execução dos comandos é a seguinte:

phpmd <diretorio> <formato-da-saida> <tipo-de-analise>

Para executar uma análise em busca de informações para saber se o código está legível, você pode utilizar o comando a seguir:

phpmd . text cleancode

Se quiser exibir, por exemplo, que a saída seja em formato html, use o seguinte:

phpmd . html cleancode

Você também pode executar múltiplas verificações com um único comando:

phpmd . text cleancode,unusedcode

Uma opção muito útil é fazer com que o resultado da análise seja inserido em um arquivo, seja ela txt, xml ou html.

phpmd . html cleancode --reportfile phpmd-test.html

O arquivo será gerado dentro do diretório em que você estiver executando o teste, no caso do exemplo, no diretório do próprio CodeIgniter.

Conclusão

Fazer uso do PHP Mess Detector para analisar a aplicação é muito importante, pois você terá informações que permitirão melhorar o código, otimizá-lo e ter uma aplicação com melhor performance.

Existem muitos outros testes que podem e devem ser realizados, principalmente os testes unitários, para que você possa obter informações sobre sua aplicação e, então, melhorá-la. Fique atento às publicações aqui do portal, pois estaremos publicando outros conteúdos sobre testes e análise de código.

Até a próxima e bons estudos!

***

Artigo publicado originalmente em: http://www.universidadecodeigniter.com.br/phpmessdetector-analisando-o-codigo-em-busca-de-problemas/