La calidad del software es un concepto muy controvertido y que genera debates muy encendidos dentro del ámbito informático. Según la definición de la Wikipedia, la calidad del software se asocia a dos conceptos diferentes pero muy relacionados:
- Calidad funcional: el grado hasta el que la aplicación satisface los requerimientos funcionales que se acordaron antes de comenzar su desarrollo.
- Calidad estructural: el grado hasta el que el propio código de la aplicación satisface los requerimientos necesarios para conseguir la calidad funcional. Esta calidad se relaciona por ejemplo con conceptos como la robustez y la flexibilidad de la arquitectura de la aplicación, la facilidad de mantenimiento del código, etc.
Medir automáticamente la calidad funcional no siempre resulta sencillo, ya que depende en gran medida del funcionamiento de la propia aplicación. Por el contrario, resulta sencillo medir de forma automática y objetiva la calidad estructural del código. Por este motivo, en los últimos años se han desarrollado numerosas herramientas que miden este tipo de calidad.
Como no podía ser de otra manera, en el ámbito de la programación PHP también existen muchas herramientas para controlar y mejorar la calidad del código: PHP Copy/Paste Detector, que detecta fragmentos de código repetidos, PHP Mess Detector, que detecta errores y código no optimizado, PHP-CS-Fixer, que detecta y corrige los errores en el estilo de tu código, etc.
El principal problema de estas herramientas es que cada una analiza un aspecto aislado de tu código y no es fácil combinar los resultados de todas ellas en un único resultado que te indique si tu código es bueno o malo. El otro problema es que sus resultados siempre son absolutos (por ejemplo: "tienes 5 trozos de código repetido"), por lo que es difícil interpretarlos. En general, es más útil que las herramientas te muestren los progresos que has hecho (por ejemplo: "gracias a los últimos cambios, has reducido un 20% el código repetido").
El servicio SensioLabs Insight
Para solucionar los problemas más habituales de las herramientas de control de calidad del código, la empresa francesa SensioLabs, responsable entre otros del famoso framework Symfony, ha desarrollado un servicio llamado SensioLabs Insight.
Se trata de un servicio que se ejecuta en la nube y que comprueba automáticamente la calidad de tu código PHP realizando decenas de verificaciones de todo tipo. De esta forma, y sin necesidad de instalar ninguna herramienta, podrás saber si tu código es seguro, flexible, fácil de mantener y si sigue las buenas prácticas del desarrollo de aplicaciones profesionales.
SensioLabs Insight todavía se encuentra en fase de beta privada, por lo que antes de empezar a analizar tus aplicaciones, deberás solicitar el acceso al servicio y esperar a que te lo concedan. El servicio es completamente gratuito si el código de tu aplicación es abierto y también existen planes de pago para que puedas probar tus proyectos privados (existe incluso un plan de pago para ejecutar SensioLabs Insight en los servidores de tu propia empresa).
Analizando proyectos públicos o de software libre
Antes de empezar a analizar tus proyectos, crea gratis una cuenta de usuario en el sitio SensioLabs Connect. Este proceso sólo es necesario la primera vez y no te costará más de 1 minuto. Después, entra en la portada de SensioLabs Insight y solicita tu acceso pulsando el botón Join the private beta.
Una vez dentro del servicio, pulsa en enlace Add project y rellena el formulario con la información específica de tu aplicación o proyecto. La siguiente imagen muestra la información que he utilizado para analizar el proyecto easybook, que es la aplicación de software libre que utilizo para generar toda la documentación que puedes leer en librosweb.es:
La información que debes proporcionar para analizar tu proyecto es muy básica:
- Git Repository URL: la ruta en la que se encuentra alojado el código de tu aplicación, como por ejemplo la URL del repositorio de GitHub o Bitbucket. Por el momento, este servicio sólo soporta los repositorios de tipo Git.
- Name: el nombre con el que identificarás esta aplicación dentro de SensioLabs Insight.
- Type: este es el dato más importante, ya que indica el tipo de código que se está analizando. Con esta información, SensioLabs Insight adapta la configuración de las reglas de validación antes de realizar cada análisis. Por el momento, el servicio está adaptado a Symfony 1, Symfony2, Silex, Drupal y Laravel. Como easybook no encaja en ninguno de los tipos anteriores, he elegido la opción genérica PHP Library.
- Project Configuration: la opción que siempre debes activar al analizar proyectos públicos es el checkbox llamado Public project. Esto hace que el análisis del proyecto sea público y cualquier usuario de SensioLabs Insight pueda ver el resultado.
Una vez configurado, pulsa el botón Create y ya tendrás todo listo para realizar el primer análisis. Para ello, pulsa el botón que se encuentra al lado del nombre del proyecto y en unos instantes obtendrás el resultado del análisis:
El resultado del análisis siempre se muestra de forma resumida a través de una de las siguientes medallas:
Además, SensioLabs Insight también realiza una estimación del tiempo que te costaría mejorar el código de tu aplicación para conseguir la medalla del siguiente nivel. En el caso concreto del análisis del proyecto easybook, el resultado es una medalla de plata y un trabajo aproximado de tres semanas hasta conseguir la medalla de oro.
Para poder mejorar la calidad de tu código, pulsa sobre el enlace que se encuentra encima de la medalla, para ver los detalles del análisis realizado y los errores concretos que debes corregir:
Lo mejor es que cada regla de validación viene acompañada de una completa ayuda que te explica por qué es importante corregir ese error, en qué afecta a tu aplicación (seguridad, rendimiento, mantenimiento, etc.) y cuáles pueden ser las consecuencias de no corregirlo.
SensioLabs Insight es capaz de analizar proyectos PHP de cualquier complejidad. Para ponerlo a prueba, he analizado el código del proyecto Drupal 8, que está formado por casi medio millón de líneas de código. Después de 26 minutos de análisis, el resultado es que con dos semanas de trabajo, Drupal 8 conseguiría la medalla de bronce. Actualmente Drupal 8 tiene 25 errores críticos, más de 800 errores graves y varios miles de otros errores menos importantes.
Analizando proyectos privados
Analizar un proyecto privado es un proceso muy similar al análisis de proyectos públicos. En primer lugar, debes actualizar tu cuenta a uno de los planes de pago que permiten los análisis privados. En segundo lugar, debes configurar el acceso para que SensioLabs Insight pueda acceder al código privado de tu proyecto:
Paso 1. Accede a las opciones de configuración de tu cuenta de SensioLabs Connect y entra en la sección SSH Keys (acceso directo a esta sección: connect.sensiolabs.com/#!ssh).
En la parte inferior de esa página verás la sección "Manage your private SSH key". Si es la primera vez que accedes, no tendrás ninguna clave privada. En ese caso, pulsa el botón para crear tu clave SSH privada y verás algo como lo siguiente:
Paso 2. Accede al servidor donde guardas el código privado de tu aplicación y añade la anterior clave SSH para que SensioLabs Insight pueda acceder a tu código. Si alojas por ejemplo tu código en el sitio Bitbucket, sólo tienes que acceder a las opciones de configuración de tu cuenta, ir a la sección SSH keys y pulsar el botón Add key. En la nueva ventana que se muestra, pega el contenido de la clave que generaste en el paso 1 anterior, tal y como muestra la siguiente imagen:
¡Y ya está! Ahora ya puedes añadir tu proyecto privado en SensioLabs Insight como se explicó en la sección anterior y tu código será analizado.
Referencias útiles
- Listado de herramientas para controlar la calidad del código PHP
- Scrutinizer CI, servicio similar a SensioLabs Insight y que también analiza la calidad de los proyectos PHP.
- Calidad al estilo francés: presentación en la que Fabien Potencier, cofundador de SensioLabs y creador del framework Symfony, explica el servicio SensioLabs Insight y los motivos que le llevaron a crearlo.