Contador de Líneas de Código: estadísticas de lenguajes

En este blog ya os hemos comentado anteriormente acerca de las cualidades que debe tener un programador de aplicaciones, pero… ¿Qué tal acerca del código que escribimos? Hablando de manera cualitativa: ¿Tenemos alguna herramienta que arroje alguna luz al respecto? Pues de esto hablaremos hoy, un contador de líneas de código. Veamos.

En el campo de la química existe el análisis cualitativo, así como el análisis cuantitativo: el primero nos indica cuántos elementos o compuestos tiene una muestra y el segundo cuánto tiene de cada uno de ellos. En el campo de la informática automatizada, campo de trabajo de Pandora FMS, los lenguajes de programación vienen a ser como los compuestos, así que nos faltaría saber o conocer cuántos de ellos conforman un proyecto.

Contador de líneas de código

Lenguajes de programación

Una mirada al pasado

Que va a ser muy corta: ya Steve Ballmer (Microsoft®) en los años 1990 habló sobre la empresa IBM® y el aliento a sus empleados sobre vanagloriarse de proyectos con grandes cantidades de líneas de código, en algunos casos cantidades monstruosas (empleó la unidad de medida K-LOC, miles de líneas de código, en inglés). Debemos comprender que los sistemas operativos de IBM® están diseñados para correr al cien por cien de uso de cada procesador -sí, el 100%, todo el tiempo, todos los días, cada segundo- así que estaban preparados, al menos en cuanto al hardware respecta, para tener ese modelo de trabajo para el desarrollo de software.

Además estamos hablando en esa época de muy pocos lenguajes de programación, Cobol principalmente, así que no era mayor el estudio a realizar. Pero va a ser que este siglo XXI tenemos multitud, no solo de lenguajes sino de la aparición de entornos de trabajo (frameworks, en inglés), así que comencemos el tema desde este punto de partida.

¿Independiente o instalado?

Vamos a hilar muy fino: cualquier sistema operativo moderno provee a una aplicación de todas las capacidades (explorar los directorios y ficheros, por ejemplo), así que un proyecto solo necesita unas cuantas centenas de líneas para estas tareas; ya por ahí hay un ahorro de tiempo y esfuerzo. Pero esto no siempre fue así. En los años 90 tuvimos que lidiar con llamadas y comunicaciones directas al hardware, y los sistemas operativos reconocían sus limitaciones y por ello lo permitían.

Para los que por primera vez visitáis nuestro blog, la herramienta incrustada en Pandora FMS para conectar de manera remota a los ordenadores es eHorus. Dicha tecnología permite instalar un agente de software y así tener comunicación directa en labores de monitorización, pero también la podemos utilizar sin Pandora FMS. Es gratuita hasta 5 dispositivos.

En la máquina remota la podemos instalar de manera permanente o en su otra opción de manera independiente (standalone, en inglés). Por supuesto, en el segundo tipo de descarga será mayor la cantidad de ficheros y datos porque todo debe estar en una sola carpeta; al terminar de utilizarlo borramos dicho directorio y listo. En cambio, en la instalación permanente tendrá muy en cuenta la versión del sistema operativo destino para las bibliotecas o librerías necesarias para interactuar con el mismo. Debido a esto el Contador de Líneas de Código que utilicemos debe ser capaz -o poder ser configurado- para que detecte si nuestro proyecto utiliza alguna colección de utilidades (librerías o bibliotecas) a fin de no sumarlo ni analizarlo como parte del proyecto.

Por ejemplo, si está escrito en lenguaje C o C++ los ficheros de cabecera se deben considerar aparte, así como en el caso particular de Microsoft Visual C++ los ficheros “.cs”, los cuales son precompilados antes de correr el código fuente y tampoco deberían considerados en el conteo (nota: el lenguaje Smalltalk también tiene la misma extensión de fichero y la situación cambia en ese caso).

Contador de Líneas de Código

Ya definimos la tarea a realizar. Ahora pasaremos a la elección de la herramienta. Para comenzar, muy probablemente el lenguaje o lenguajes de programación tienen sus propias opciones para tales tareas, pero siempre de manera muy básica. También podríamos utilizar Ohcount, el cual está escrito bajo licencia de software libre y en lenguaje C. Otras opciones son:

  • SLOCCount.
  • Unified Code Count.
  • loc.
  • scc.
  • gocloc.
  • Sonar.
  • vsclc.
  • tokei.

Pero en esta ocasión nos llamó la atención cloc, un “antiguo” software lanzado en 2006 y actualizado en octubre de 2018, también con licencia GNU v2 y escrito en lenguaje Perl… Sí, lo sabemos, es un lenguaje rudo para los principiantes, pero una vez que uno lo utiliza notaremos su gran poder y, sinceramente, es mejor que el lenguaje C.

Otro detalle interesante es que cloc también está disponible para la plataforma Windows® y hasta tiene una extensión para Visual Studio Team Services® (VSTS, lo que ahora es conocido como Azure DevOps®). Es capaz de analizar un simple fichero, un directorio o subdirectorio, o si es necesario un archivo comprimido o un instalador en formato .deb de un navegador web minimalista y así entregarnos un resumen como el siguiente:

Contador de líneas de código

Contador de líneas de código aplicado al instalador del navegador web Min

También lo aplicamos al instalador del agente de eHorus y al repositorio de PandoraFMS en GitHub:

Contador de líneas de código

Contador de Líneas de Código aplicado al instalador del agente eHorus

Contador de líneas de código

Contador de Líneas de Código alicado a Pandora FMS 7.0 NG 731

Lo que estamos viendo es la descarga en formato comprimido zip de Pandora FMS 7.0 NG 731, alojada en GitHub. Observamos que lidera PHP seguido de JavaScript y Perl (los ficheros .PO son traducciones de las instrucciones, por ser lenguaje de alto nivel ocupan valores altos). El Contador de Líneas de Código también es capaz de resumir una acometida, como por ejemplo la versión 5.0, cuando el orden era primero JavaScript, PHP y luego Perl:

Contador de líneas de código

Contador de Líneas de Código para extraer el “commit” de la versión Pandora FMS 5.0

Ahora bien, cloc tiene mucho más que ofrecer:

  • Puede comparar dos ficheros comprimidos de diferentes estados o versiones de un proyecto y mostrar consistentemente por lenguaje de programación cuántas líneas de código, líneas en blanco y comentarios fueron agregados y/o quitados (opción –diff-aligment=nombre_fichero.txt).
  • Estos ficheros de texto resultantes, a su vez, cloc los puede fusionar y totalizar de nuevo. Puede exportar, como vimos, los resultados a un archivo de texto, en formato separado por comas, JSON, YAML, etc, pero lo más importante en SQL: esto da la oportunidad de tener instrucciones para inyectar valores en una base de datos cualquiera y poder monitorizar a grandes rasgos por medio de un agente y gráficos. ¿Iba a ser que en esta oportunidad no hablásemos sobre monitorización, acaso?
    Con la opción –strip-comments y una cadena de caracteres que suministremos copia todos los ficheros quitando los comentarios y luego analiza el código resultante, el cual debe ser igual al aplicado sin la opción; posiblemente podremos reutilizar los archivos copiados sin comentarios con la extensión que aportamos.
  • Si un lenguaje no está soportado podremos hacer nuestras propias definiciones del mismo con la opción –write-lang-def=misDefiniciones.txt

Flexibilidad

Pandora FMS permite extendernos incluso al área de análisis de código fuente y podemos ayudaros en infinidad de tareas informáticas, por disímiles que parezcan. ¡Sin duda podéis contactarnos!

Shares