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.
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:
También lo aplicamos al instalador del agente de eHorus y al repositorio de PandoraFMS en GitHub:
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:
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!
Programador desde 1993 en KS7000.net.ve (desde 2014 soluciones en software libre para farmacias comerciales en Venezuela). Escribe regularmente para Pandora FMS y ofrece consejos en el foro. También colaborador entusiasta en Wikipedia y Wikidata. Machacador de hierros en gimnasios y cuando puede se ejercita en ciclismo también. Fanático de la ciencia ficción. Programmer since 1993 in KS7000.net.ve (since 2014 free software solutions for commercial pharmacies in Venezuela). He writes regularly for Pandora FMS and offers advice in the forum. Also an enthusiastic contributor to Wikipedia and Wikidata. Crusher of irons in gyms and when he can he exercises in cycling as well. Science fiction fan.