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

Por acá 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 vamos hoy, un Contador de Líneas de Código, veamos.

En en el campo de la química existe el análisis cualitativo así también el análisis cuantitativo: el primero nos indica cuántos elementos o compuestos tiene una muestra y el segundo nos indica 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ánto de ellos conforman un proyecto.

Lenguajes d eprogramación (Wikipedia https://commons.wikimedia.org/wiki/File:Prog-languages.png )
Lenguajes de programación (Wikipedia https://commons.wikimedia.org/wiki/File:Prog-languages.png )

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 lineas de código, en idioma 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, el 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 idioma 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 1990 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.

En la máquina remota le podemos instalar de manera permanente o en su otra opción de manera independiente (standalone, en idioma inglés). Por supuesto 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 pues 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 lenguaje C++ los ficheros de cabecera se deben considerar apartes, así como 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).

Por favor, lea también   "Suficiente con la estupidez de la seguridad en GNU/Linux®"

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 mu 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ó al 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.

Nuestra opinión no es reflejo ni vincula al grupo de programadoras y programadores de Pandora FMS.

Otra 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 subdirectorios 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 aplicado al instalador del navegador web Min
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 faltaba más, faltaba menos, al repositorio de PandoraFMS:

Contador de Líneas de Código aplicado al instalador del agente eHorus
Contador de Líneas de Código aplicado al instalador del agente eHorus
Contador de Líneas de Código alicado a Pandora FMS 7.0 NG 731
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, alojado 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 (castellano en desuso: emprendimiento, intento para la palabra inglesa commit) 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 para extraer el "commit" de la versión Pandora FMS 5.0
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 debéis contactarnos!

Títuloenlace(s) web
cloc en GitHubhttps://github.com/AlDanial/cloc
CLOC la herramienta para contar líneas de códigohttps://www.somosbinarios.es/cloc-herramienta-contar-lineas-codigo/
Install Min Web Browser For Linux Ubuntuhttps://unix-tech.in/install-min-web-browser-for-linux-ubuntu/
cloc – Count Lines of Code in Many Programming Languageshttps://www.tecmint.com/cloc-count-lines-of-code-in-linux/
cloc is now being developed at https://github.com/AlDanial/clochttp://cloc.sourceforge.net/index.html
Count Lines of Code Build Taskhttps://marketplace.visualstudio.com/items?itemName=Dealogic.cloc-vsts-extension
Cloc – Count The Lines Of Source Code In Many Programming Languageshttps://marketplace.visualstudio.com/items?itemName=Dealogic.cloc-vsts-extension
Cloc – Count The Lines Of Source Code In Many Programming Languageshttps://www.ostechnix.com/cloc-count-the-lines-of-source-code-in-many-programming-languages/
Saving Code class as a .cs format in visual studio c++https://social.msdn.microsoft.com/Forums/vstudio/en-US/e545887e-4c3a-4d77-b667-014f9cc51371/saving-code-class-as-a-cs-format-in-visual-studio-c