Siguiendo con las herramientas para mejorar la calidad de los códigos fuentes en PHP, llegamos al detector de copia y pega de PHP. Esta herramienta revisa automáticamente los códigos fuentes, en busca del serio problema de repetición del código fuente.
Uno de los principios del desarrollo de software, es el llamado principio DRY. Las siglas vienen del Don’t Repeat Yourself. El principal problema de no aplicar el principio DRY, es que aumenta la deuda técnica de las aplicaciones, haciendo que sea muy costoso seguir construyendo o modificando.
Este post es continuación de estos otros sobre mediciones de la calidad en fuentes PHP:
https://jnjsite.com/phploc-una-alternativa-a-php-depend-para-medir-la-calidad-del-codigo-fuente/
https://jnjsite.com/analizando-la-calidad-del-codigo-fuente-con-php-depend/
Instalando el detector de copia y pega de PHP
Si disponemos de un terminal GNU/Linux podemos lanzar algo como lo siguiente dentro del proyecto:
wget https://phar.phpunit.de/phpcpd.phar -O phpcpd
Si no, simplemente podemos ir con el navegador a la URL indicada https://phar.phpunit.de/phpcpd.phar descargando manualmente el fichero al directorio que queramos. Hay costumbre en proyectos como por ejemplo Magento, Prestashop o Symfony en los que se suelen poner en un directorio bin/. Entonces si pusiésemos el ejecutable de PHPCPD en bin/ podríamos lanzarlo tal que así:
php bin/phpcpd directorio/
Ejecutando el detector
Podemos lanzar el binario de PHP con el parámetro –help para ver todas las opciones:
Por ejemplo, una ejecución con un proyecto de algoritmos de búsqueda en grafos podría ser como la imagen del principio del post. Al reducir las restricciones de mínimo de líneas y tokens para considerar duplicados, parece que tenemos bastante código fuente que se puede refactorizar, un 28%.
Aplicando las mejoras
Ya sólo queda finalmente guiarnos de los reportes para ir simplificando el código fuente. Se podrán agrupar los fuentes en ficheros, funciones, clases, proyectos o sub-proyectos. Ya aquí es todo suma y sigue, pero la primera información de por donde se podría empezar a simplificar ya la tenemos.
Página oficial del proyecto: https://github.com/sebastianbergmann/phpcpd