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/