Академический Документы
Профессиональный Документы
Культура Документы
Trabajo final de maestría presentado como requisito para optar al título de:
Magíster en Ingeniería - Ingeniería de Sistemas y Computación
Director:
Felipe Restrepo Calle, PhD.
Línea de Investigación:
Ingeniería de Software
Grupo de Investigación:
PLaS - Programming Languages and Systems
Dedicatoria
Agradecimientos
Hago un especial agradecimiento a mi director del trabajo de grado, el ingeniero PhD Felipe
Restrepo, docente de la Universidad Nacional de Colombia, quien me acompañó y guio en
todo el proceso de desarrollo de la propuesta y el trabajo final.
A mis compañeros de curso y los docentes, con los cuales, no sólo compartí estos dos años
de estudio, sino de quienes aprendí muchas cosas, que me servirán en mi vida profesional
y personal.
Resumen 5
Resumen
La calidad del software es un aspecto importante, principalmente por su relación con los
costos futuros asociados al mantenimiento del producto. Para poder cuantificar la calidad,
se utilizan las métricas de calidad de software, las cuales son un conjunto de medidas
utilizadas para estimar la calidad de un proyecto de software. Teniendo en cuenta que la
calidad del software debe evaluar varios aspectos, y que debe ser medida de la misma
forma para todos, se han creado normas que brindan una guía del proceso a realizar. Al
año 2019, la norma que se encuentra en vigencia es la familia de normas ISO/IEC 25000,
cuyo objetivo es crear un marco de trabajo común para evaluar la calidad de un producto
de software teniendo en cuenta 8 características: adecuación funcional, rendimiento,
compatibilidad, usabilidad, fiabilidad, seguridad, mantenibilidad y portabilidad. La
característica de mantenibilidad, tiene un alto impacto sobre los costos totales de los
proyectos de software, consumiendo entre 40% y 80% del costo total del ciclo de vida de
un producto de software. Adicionalmente, dentro de la labor de mantenimiento, los
desarrolladores gastan aproximadamente 70% del tiempo tratando de comprender el código
fuente, por lo que poder medir la legibilidad de un fragmento de código, podría ayudar a
estimar el esfuerzo requerido para una actividad de mantenimiento. La legibilidad
(readability en inglés) del software, es definida como el grado de facilidad con la que una
persona puede leer y comprender un fragmento de código fuente, escrito por otra persona.
aplicaciones que tienen en el área del software y los retos que deben afrontar los futuros
investigadores.
Este trabajo final de maestría presenta una síntesis y análisis de las métricas de legibilidad
de software. Para esto, se realizó una revisión sistemática de la literatura de trabajos
relacionados con la legibilidad del código fuente, presentando una recopilación de las
características principales y los métodos utilizados para su medición. El resultado de este
trabajo pretende servir como base para que otros investigadores puedan proponer nuevas
métricas de legibilidad, y posteriormente, puedan desarrollar estrategias que sean
integradas a los entornos integrados de desarrollo (IDEs) para medir y alertar sobre la
legibilidad del código fuente en tiempo de desarrollo.
Abstract
The quality of the software is an important aspect, mainly due to its relation to the future
costs associated with the maintenance of the product. In order to quantify the quality,
software quality metrics are used, which are a set of measures used to estimate the quality
of a software project. Taking into account that the quality of the software must evaluate
several aspects, and that it must be measured in the same way for all, standards have been
created that provide a guide to the process to be carried out. As of 2019, the standard that
is the family of ISO/IEC 25000 standards, whose objective is to create a common framework
to assess the quality of a software product considering 8 characteristics: functional
adequacy, performance, compatibility, usability, reliability, security, maintainability, and
portability. The maintainability feature has a high impact on the total costs of software
projects, consuming between 40% and 80% of the total cost of the life cycle of a software
product. Additionally, within the Maintenance work, developers spend approximately 70% of
the time trying to understand the source code, so being able to measure the readability of a
code snippet could help estimate the effort required for a maintenance activity. The
readability of software is defined as the degree of ease with which a person can read and
understand a piece of source code, written by another person.
Despite the efforts and research in the area of readability of the software, there is still no
definitive model to assess the level of readability of a fragment of source code in real time.
Therefore, it is essential to continue research in the area, but for this, it is necessary to know
the studies that exist to date on the legibility of software, identifying the characteristics and
metrics proposed to measure it, the models that allow automatic evaluation, the applications
they have in the area of software and the challenges that future researchers must face.
This final master's work presents a synthesis and analysis of software readability metrics.
For this, a systematic review of the literature of works related to the readability of the source
code was carried out, presenting a compilation of the main characteristics and the methods
used for its measurement. The result of this work aims to serve as a basis for other
researchers to propose new readability metrics, and subsequently, to develop strategies that
8 Métricas de legibilidad del software: una revisión sistemática de literatura
are integrated into integrated development environments (IDEs) to measure and alert on the
readability of the source code in time developmental.
Keywords:
Metric; Readability; Source code; Software; Quality; Classification; Systematic review of
literature.
Contenido 9
Contenido
Pág.
1. Capítulo 1. Introducción............................................................................................ 15
1.1. Motivación .......................................................................................................... 15
1.2. Definición del problema ...................................................................................... 17
1.3. Pregunta de investigación .................................................................................. 18
1.4. Objetivos ............................................................................................................ 18
1.4.1. Objetivo general............................................................................................. 18
1.4.2. Objetivos específicos ..................................................................................... 19
1.5. Metodología ....................................................................................................... 19
1.5.1. Tipo de investigación ..................................................................................... 19
1.5.2. Estrategia de investigación ............................................................................ 19
1.5.3. Diseño de investigación ................................................................................. 20
1.5.4. Métodos de investigación .............................................................................. 20
1.6. Alcance del trabajo ............................................................................................. 20
1.7. Estructura del trabajo final .................................................................................. 21
Referencias 128
12 Métricas de legibilidad del software: una revisión sistemática de literatura
Lista de figuras
Pág.
Figura 3. Pasos para realizar la medición de una métrica de calidad de software. .......... 27
Figura 8. Hoja de cálculo utilizada para la extracción de datos de todos los documentos.49
Figura 9. Archivo de texto utilizado para la extracción de datos de cada documento. ..... 52
Figura 11. Nube de palabras representando la frecuencia de los autores en los estudios
seleccionados. Fuente: Herramienta SASR..................................................................... 60
Figura 12. Nube que representa la frecuencia de las palabras clave en los estudios
seleccionados. Fuente: herramienta SASR. .................................................................... 61
Figura 14. Descripción del proceso realizado para desarrollar un modelo de legibilidad
enfocado a las características. ........................................................................................ 95
Figura 15. Descripción del proceso realizado en el modelo de legibilidad de Choi et al... 96
Figura 16. Descripción del proceso realizado en el modelo de legibilidad DeepCRM con
ConvNets de Mi et al. ...................................................................................................... 97
Lista de tablas
Pág.
Tabla 14. Listado general ordenado de características de legibilidad del software. ......... 67
Tabla 19. Aportes a los estudios de legibilidad del software en el tiempo. ....................... 85
Tabla 22. Detalle de los fragmentos de código fuente utilizados en los modelos de
legibilidad del software. ................................................................................................. 101
14 Métricas de legibilidad del software: una revisión sistemática de literatura
Tabla 25. Características que permiten medir la legibilidad del software. ...................... 105
Tabla 26. Repositorios que contienen fragmentos de código fuente. ............................. 108
Tabla 27. Repositorios que contienen herramientas libres o propias utilizadas en los
estudios. ................................................................................................................. 108
Tabla 29. Aplicaciones identificadas en la literatura para la legibilidad del software. ..... 113
Tabla 30. Lista compilada de buenas prácticas en la escritura de código fuente. Fuente
principal: Sampaio y Barbosa (2016) [43]. ..................................................................... 118
Tabla 31. Buenas prácticas para el lenguaje WSDL. Obtenido de la fuente [29]. .......... 120
Tabla 32. Lista compilada de malas prácticas en la escritura de código fuente. Fuente
principal: Sampaio y Barbosa (2016) [43]. ..................................................................... 120
Tabla 33. Guía de estilo recomendada para los identificadores. Obtenida de la fuente [20].
................................................................................................................. 121
Tabla 34. Retos identificados para los trabajos futuros de legibilidad del software. ....... 122
Capítulo 1. Introducción 15
1. Capítulo 1. Introducción
En este capítulo se presenta la motivación general del proyecto. Posteriormente, se expone
el problema identificado en el área de métricas de legibilidad del código fuente, lo que llevó
a realizar una revisión sistemática de literatura. También, se presentan los objetivos del
proyecto y las preguntas de investigación planteadas en la propuesta. Por último, se
presenta la descripción de la metodología utilizada en la investigación.
1.1. Motivación
La calidad en los productos de software es de gran importancia para los desarrolladores y
empresarios de esa industria, principalmente por los altos costos que implica modificar un
programa si es de baja calidad [1]. Pese a que algunos programadores desarrollan software
mediante un método ordenado y eficiente conseguido gracias a años de experiencia,
muchos otros desarrollan malos hábitos que dan como resultado una pobre calidad y
mantenibilidad del software [2].
La legibilidad puede cuantificarse mediante las métricas de legibilidad, las cuales están bien
establecidas en el dominio del lenguaje natural, mientras que, en el dominio del software,
están bien establecidas en dominios particulares como el hipertexto [6]. Resulta importante
poder identificar con precisión las métricas determinantes en la legibilidad del software para
poder automatizar el proceso de medición [1]. Para los gerentes de proyectos de software,
conocer estas métricas les ayudaría a monitorear y mantener la legibilidad, contribuyendo
así a que el producto final sea de alta calidad [1]. Asimismo, los programadores podrían
Capítulo 1. Introducción 17
tener una cuantificación de la legibilidad del código fuente en tiempo real, de la misma
forma, como hoy en día los IDE1 informan los errores de sintaxis [10], lo que les permitiría
realizar los ajustes de forma temprana. No obstante, la legibilidad es una propiedad
subjetiva [10], y aunque se han logrado avances significativos, aún no se tiene un modelo
definitivo que permita una medida 100% precisa. Adicionalmente, algunos autores como
Mannan et al. (2018), argumentan que los modelos de legibilidad propuestos presentan
deficiencias y por ello es necesario continuar con las investigaciones para identificar
mejores métricas para evaluar la legibilidad del software [11].
Este trabajo final de maestría consistió en realizar una revisión sistemática de literatura
sobre los trabajos relacionados con métricas de legibilidad de código fuente, con el objetivo
de presentar una recopilación de los modelos, métricas y algoritmos existentes. El resultado
de este trabajo pretende servir de base para otros trabajos de investigación en el área, y
así, posteriormente se puedan proponer estrategias y desarrollar herramientas que
permitan medir la legibilidad del código fuente de forma automática y efectiva durante la
etapa del desarrollo del software. Esto permitiría que los programadores puedan tomar
correctivos a tiempo, lo que en el futuro permitirá la reducción de los costos asociados al
ciclo de vida del software.
1IDE significa entorno de desarrollo integrado, por sus siglas en inglés IDE de Integrated
Development Environment.
18 Métricas de legibilidad del software: una revisión sistemática de literatura
Por otra parte, hasta donde sabemos, no existe una única fuente que recopile los estudios
asociados a las métricas de legibilidad del software, abarcando los conceptos
fundamentales, los modelos automatizados propuestos para su medición, las
características y las métricas. Por lo anterior, es necesario identificar este tipo de
características mediante un análisis detallado y sistemático de los trabajos relacionados
con la medición de la legibilidad en el software, brindando así un documento que sirva como
base para futuras investigaciones sobre el tema.
RQ1. ¿Cuáles son las características que permiten medir la legibilidad del código fuente de
un software?
RQ2. ¿Qué métodos son utilizados para obtener el valor de medida de cada una de esas
métricas de forma automática?
RQ3. ¿Cuáles son los principales retos y aplicaciones de interés en las investigaciones
relacionadas con la legibilidad del software?
1.4. Objetivos
1.5. Metodología
1. Los requisitos funcionales del software son la base de las medidas de la calidad y por
ello deben estar reflejados en el producto [2].
2. Los estándares especificados definen un conjunto de criterios de desarrollo que guían
la forma en que se aplica la ingeniería de software. Si no se siguen esos criterios, casi
siempre habrá falta de calidad [2].
3. Existe un conjunto de requisitos implícitos que a menudo no se mencionan (por
ejemplo, el deseo de un buen mantenimiento). Si el software se ajusta a sus requisitos
explícitos, pero falla en alcanzar los requisitos implícitos, su calidad queda en duda [2].
La calidad de un producto de software se puede ver afectada por algunos factores, los
cuales fueron clasificados en 1977 por McCall [2] teniendo en cuenta tres aspectos
Capítulo 2. Contexto 23
1) Factores que pueden ser medidos directamente: como los errores, LOC (Líneas de
código) y las unidades de tiempo.
2) Factores que sólo pueden ser medidos indirectamente: como la facilidad de uso o de
mantenimiento.
En el 2014, Ming-Chang investigó los factores de la calidad del software y las métricas de
calidad del software que permiten mejorar la calidad del software [14]. Su trabajo demostró
que la legibilidad del software, la cual es un factor importante de la mantenibilidad,
desempeña un papel crucial en el aumento de la calidad del software [14].
3
https://iso25000.com/index.php/normas-iso-25000
24 Métricas de legibilidad del software: una revisión sistemática de literatura
2) Adaptación: Con el paso del tiempo es probable que cambie el entorno original
(por ejemplo, los requisitos de la aplicación, el CPU, el sistema operativo, los
periféricos) para el cual se desarrolló el software. El mantenimiento adaptativo
consiste en modificar el software para acomodarlo a los cambios de su entorno
externo [2][3].
De acuerdo con Martínez [2], las métricas de software se pueden clasificar en dos
dimensiones, como se ilustra en la Figura 1.
Las métricas de calidad se clasifican a su vez en dos tipos: cualitativas y cuantitativas [2].
En la Figura 2 se presenta una breve descripción de las métricas cualitativas y las métricas
cuantitativas, las cuales hacen parte de las métricas de calidad.
Una vez comprendido el tipo de métricas de calidad que existen para los productos de
software, se puede proceder a realizar la medición. Para esto se sugiere seguir los pasos
ilustrados en la Figura 3 [16]:
Capítulo 2. Contexto 27
A continuación, se explica en detalle en qué consiste cada uno de los pasos que aparecen
en la Figura 3:
DuBay (2004) definió a la legibilidad (readability en inglés) como lo que hace más fácil leer
un texto que otros. Se confunde con legibilidad (legibility en inglés), que se refiere al tipo
de letra y diseño [18]. Hargis (2000) indicó que “la legibilidad depende de las cosas que
afectan los ojos y la mente del lector. Tamaño, estilo y la guía afectan al ojo. La estructura
y longitud de las oraciones, el vocabulario y la organización afectan la mente" [18].
La legibilidad del software es comparada como una barrera para comprender lo que el
programador sintió cuando lo construyó, así entre más legible es un fragmento de código
fuente, más débil es esa barrera [10]. En este sentido, la legibilidad del código fuente es
muy subjetiva [14], y las medidas de percepción subjetivas son difíciles de realizar porque
requieren de estudios humanos, los cuales involucran muchos factores [10]. Los niveles
de los lectores dependen principalmente de su capacidad cognitiva para procesar
información textual [14]. La rapidez también contribuye a esta subjetividad, ya que cuando
una persona trata de leer un programa, el código debe escribirse de tal manera que le tome
menos tiempo leer y entender las líneas [14]. Sin embargo, en el año 2010 Buse y Weimer
[10] mediante su trabajo de investigación titulado “Learning a Metric for Code Readability”
realizaron una gran contribución en el área de la medición de la legibilidad de software,
creando el primer modelo de clasificación automática para predecir este aspecto subjetivo,
el cual consistía en un clasificador entrenado con juicios humanos, abriendo así las puertas
a nuevas investigaciones y avances en el tema.
Son aquellos documentos Son aquellos que permiten Los modelos y estándares
que integran la mayor parte definir un conjunto de permiten que las empresas
de las mejores prácticas, criterios de desarrollo que de software realicen sus
proponen temas de guían la forma en que se tareas y funciones teniendo
administración en los que aplica la ingeniería del en cuenta la calidad. La
cada organización debe software. Los estándares calidad desempeña un rol
hacer énfasis, integran suministran los medios para determinante para la
diferentes prácticas que todos los procesos se competitividad de la
dirigidas a los procesos realicen de la misma forma empresa [19].
clave y permiten medir los y son una guía para lograr la
avances en calidad [19]. productividad y la calidad
[19].
Cuando una empresa está funcionando y decide implantar un modelo o estándar de calidad
del software, es señal que la empresa tiene el propósito de permanecer y crecer en el
mercado, ser competitiva, proteger los intereses de los accionistas, cuidar la fuente de
trabajo y mejorar la calidad de vida de su personal [20]. La calidad es algo que debe
inyectarse en un proyecto desde el inicio, desde su construcción y para esa tarea las
personas y empresas se apoyan en los modelos y estándares de calidad del software [15].
presenta una línea de tiempo con algunos de los modelos y estándares de Calidad
aplicados a los productos de software, que tienen en cuenta el concepto de la
mantenibilidad del producto [15].
1996 Modelo Dromey El modelo tiene el propósito de trabajar con una [19]
estructura que permite construir y utilizar un modelo
de calidad práctico para evaluar las etapas de
Determinación de los requerimientos, Diseño e
Implementación. Plantea la calidad del producto por
medio de la definición de subcaracterísticas que
pueden ser medidas y evaluadas como
características.
2001 Normas ISO/IEC 9126 Está conformada por cuatro partes: Modelo de calidad, [19]
(2001) métricas externas, métricas internas y calidad en uso.
Capítulo 2. Contexto 33
2005 Normas ISO/IEC 25000 Se basa y sustituye a las normas ISO/IEC 9126 e [19]
ISO/IEC 14598 y es conocida también con el nombre
(Norma Vigente) SQuaRE. Uno de los principales objetivos de la serie
SQuaRE es la coordinación y armonización del
contenido de ISO 9126 y de ISO 15939:2002.
25010: define varios modelos de calidad y determina las características de calidad del
producto que se pueden evaluar. Son 8: adecuación funcional, rendimiento,
compatibilidad, usabilidad, fiabilidad, seguridad, mantenibilidad (modularidad,
analizabilidad, capacidad de reusado, capacidad de ser modificado, capacidad de ser
probado), portabilidad [8].
34 Métricas de legibilidad del software: una revisión sistemática de literatura
Una de las características de calidad del producto en la división 25010 del estándar
ISO/IEC 25000, está enfocada en la “Mantenibilidad”, la cual describe la capacidad que
tiene un producto de software para ser modificado efectiva y eficientemente, debido a
necesidades evolutivas, correctivas o perfectivas [3]. La norma ISO/IEC 25010 enuncia
que la característica de mantenibilidad, se divide a su vez en las sub características:
modularidad, reusabilidad, capacidad para analizarse, capacidad para modificarse y
capacidad de probarse [3].
Una métrica en la calidad del software es un indicador que permite dar una medida para
determinar el nivel de cumplimiento de una característica operativa, de la capacidad de
soportar cambios o de la adaptabilidad a un nuevo entorno [2]. Las métricas de calidad de
software se clasifican a su vez en dos tipos: cualitativas y cuantitativas. Las métricas
correspondientes a la legibilidad del software están ubicadas dentro del grupo de las
métricas cualitativas, por ser un aspecto subjetivo [2].
Siguiendo los pasos para llevar a cabo una RSL [13][22][23], este trabajo se organizó en
cinco fases. Las cuatro primeras corresponden a las actividades misionales de la
propuesta, mientras la quinta fase corresponde al proceso transversal de monitoreo y
revisión de las actividades. Las fases se presentan en la Figura 5.
Capítulo 3. Revisión sistemática de literatura de métricas de legibilidad del 37
software
4
https://www.mendeley.com/
38 Métricas de legibilidad del software: una revisión sistemática de literatura
Documentar la búsqueda: teniendo en cuenta que una RSL debe ser transparente y
replicable, se documentó la estrategia de búsqueda para que otros investigadores
puedan evaluar su rigor, exhaustividad y puedan incluso realizar una repetición del
proceso. Se incluyeron datos como la fuente bibliográfica en la que se realizó la
búsqueda, la ecuación usada, la estrategia para cada base de datos, la fecha de la
búsqueda y los años contemplados.
Criterios de inclusión y exclusión explícitos, que se usaron para evaluar la pertinencia
de los estudios primarios y cómo fueron aplicados. Por ejemplo, uno de los criterios de
exclusión fue que, al encontrar múltiples publicaciones de un mismo autor sobre un
mismo estudio, es decir, con los mismos datos, se tomó el estudio más reciente.
Diseño y aplicación de la lista de chequeo con la cual se evaluó la calidad de cada
estudio primario recolectado.
Diseño y aplicación de los formularios de extracción de datos, que permitieron registrar
la información de los estudios primarios que daba respuesta a las preguntas de
investigación. En el formulario se incluyeron campos como la fecha de la extracción,
título del estudio, autores del estudio, revista o institución que lo publicó, otros detalles
de la publicación y un espacio para notas adicionales.
Definición del plan de revisión del proyecto.
Con la lectura completa de cada documento se realizó también la extracción de los datos
de interés, guiada por las preguntas y los objetivos de la RSL, registrando algunos datos
de todos los documentos en una hoja de cálculo, para posteriormente realizar la tarea de
comparación, y en un archivo de texto por cada documento para la toma detallada de
información. La calidad de cada documento fue evaluada usando la lista de chequeo de
calidad, y de acuerdo al puntaje el estudio fue incluido o excluido en el trabajo final.
Los mecanismos de comunicación utilizados fueron: correo electrónico, video llamada por
Hangouts5, carpetas de archivos compartidas en Google Drive, reuniones personales y
llamadas telefónicas.
5
https://hangouts.google.com/
Capítulo 3. Revisión sistemática de literatura de métricas de legibilidad del 41
software
Las fuentes WoS, Scopus, fueron seleccionadas porque se consideran fuentes confiables
e importantes para obtener artículos de revistas y conferencias científicas, y además
porque la Universidad Nacional tiene subscripción a las mismas. Además, se incluyeron
IEEExplore y ACM Digital Library porque los artículos recientemente publicados por IEEE
42 Métricas de legibilidad del software: una revisión sistemática de literatura
y ACM son indexados primero en estas bases de datos, antes que en WoS o Scopus. Por
último, se utilizó también el buscador Google Scholar ya que al ser una base de datos no
estructurada permitía obtener documentos de investigaciones que aún están en proceso,
y no sólo los finalizados y publicados, lo cual permitió obtener un número mayor de
resultados.
6
https://www.mendeley.com/
Capítulo 3. Revisión sistemática de literatura de métricas de legibilidad del 45
software
# Factor evaluado
1 Plantea un objetivo de estudio
2 Es clara la descripción del contexto del problema
3 Tiene sección de resultados
4 La metodología de investigación utilizada en el estudio es clara
5 El estudio es reproducible
46 Métricas de legibilidad del software: una revisión sistemática de literatura
En el listado anterior no se tuvo en cuenta el número de citaciones por año, porque debido
a lo reciente de las investigaciones, teniendo en cuenta que la búsqueda se limitó a las
publicaciones desde 2015, algunos de los artículos tienen 0 o máximo 2 citaciones. Lo que
si se observó en común con los artículos, es que en su bibliografía mencionaban el trabajo
de Buse y Weimer [1], el cual fue el que abrió las puertas a los demás al encontrar una
forma para medir algo tan subjetivo como lo es la legibilidad del software.
La carpeta principal está compuesta por dos carpetas, que corresponden a la fase 2 de
recolección, denominada “F2- Recolección”, y a la fase 3, denominada “F3- Filtrado
completo”. La carpeta de la fase 2 contiene a su vez 6 carpetas; cada una corresponde a
una fuente bibliográfica y dentro de ella contiene a su vez otras dos carpetas denominadas
Capítulo 3. Revisión sistemática de literatura de métricas de legibilidad del 47
software
Al terminar la lectura completa de los documentos, los que no cumplieron con los criterios
de inclusión o la calidad mínima requerida, fueron excluidos y pasaron a la “F3-2 -
Excluidos”. Los demás documentos que, si cumplieron, pasaron a la carpeta final
denominada “F3-3 Cumplen criterios Inc, Exc y Cal”. En la Figura 7, se muestra una imagen
que corresponde a la vista de la herramienta Mendeley.
RQ1. ¿Cuáles son las características que permiten medir la legibilidad del código fuente
de un software?
RQ2. ¿Qué métodos son utilizados para obtener el valor de medida de cada una de esas
métricas de forma automática?
RQ3. ¿Cuáles son los principales retos y aplicaciones de interés en las investigaciones
relacionadas con la legibilidad del software?
Figura 8. Hoja de cálculo utilizada para la extracción de datos de todos los documentos.
En la Figura 8 se puede observar una parte del formato de extracción de datos, donde la
fila 2 tiene los nombres de los grupos en las cuales se clasifican los datos solicitados. Los
grupos en los cuales se clasifican los datos son: Documento, Extracción de datos, Chequeo
de calidad, Preguntas de investigación, Objetivos y TAGS. A continuación, en la Tabla 6
se explica en detalle los datos que se solicitan en cada una de las categorías.
Nota 1: Para los factores evaluados en el chequeo de calidad los valores posibles son:
Puntaje 2 si lo cumple, 1 si lo cumple parcialmente, 0 si no lo cumple, y NA si el factor no
puede ser evaluado en el documento.
Nota 2: Para las preguntas de investigación, la forma de diligenciarlos fue ingresar los
datos que daban respuesta a esa pregunta (si aplica). Para los objetivos se realizó el
mismo procedimiento.
El campo “Inician F3” de la Tabla 10, corresponde a la suma de los estudios que resultaron
seleccionados en el filtro 2 (F2). La segunda columna de la Tabla 10, corresponde a los 33
documentos únicos, sin repetir, a los cuales se les realizó la lectura completa, y se
evaluaron con los criterios y la evaluación de calidad. Los documentos que cumplieron
satisfactoriamente con la evaluación de criterios y de calidad, fueron utilizados para la
extracción de datos, mediante el uso de los formatos diseñados para ello, que fueron
explicados anteriormente en la sección 3.10.
Como lo indicó la Tabla 11, adicionando los 6 documentos que se tenían desde la
propuesta, se logró un total de 30 estudios que permitieron dar respuesta a las preguntas
de investigación. Su discusión se presenta en los capítulos 4, 5 y 6.
1 [14] 2016 Akour, Mohammed; Application domain 2016 7th Conference Jordania;
Falah, Bouchaib and programming International proceedings Marruecos
language readability Conference on
yardsticks Computer Science
and Information
Technology (CSIT)
11 [31] 2018 Fakhoury, Sarah; The effect of poor 2018 ACM/IEEE 26th Conference Estados
Ma, Yuzhan; source code lexicon International proceedings Unidos
Arnaoudova, and readability on Conference on
Venera; Adesope, developers' Program
Olusola; cognitive load Comprehension
12 [32] 2018 Frunzio, Luigi; Lin, RETICULA: Real- 2018 IEEE 25th Suiza
Bin; Lanza, Michele; time code quality International
Bavota, Gabriele; assessment Conference on
Software Analysis,
Evolution and
Reengineering
(SANER)
13 [33] 2015 Liu, Yangchao; Sun, Analyzing program Proceedings of the Conference China
Xiaobing; Duan, readability based on 19th International Proceedings
Yucong; WordNet Conference on
Evaluation and
Assessment in
Software Engineering
- EASE '15
15 [34] 2018 Mi, Qing; Keung, A Gamification 2018 International Conference Hong Kong
Jacky; Mei, Xiupei; Technique for Symposium on Proceedings
Xiao, Yan; Chan, W. Motivating Students Educational
K; to Learn Code Technology
Readability in
Software
Engineering
16 [35] 2018 Mi, Qing; Keung, Improving code Information and Journal Hong Kong;
Jacky; Xiao, Yan; readability Software Technology Article China
Mensah, Solomon; classification using
Gao, Yujin; convolutional neural
networks
17 [36] 2018 Mi, Qing; Keung, An Inception Proceedings of the Conference Hong Kong
Jacky; Xiao, Yan; Architecture-Based 22nd International Proceedings
Mensah, Solomon; Model for Improving Conference on
Mei, Xiupei; Code Readability Evaluation and
Classification Assessment in
Software Engineering
2018 - EASE'18
18 [37] 2016 Mi, Qing; Keung, Measuring the Proceedings of the Conference Hong Kong;
Jacky; Yu, Yang; Stylistic The 12th Proceedings China
Inconsistency in International
Software Projects Conference on
using Hierarchical Predictive Models
Agglomerative and Data Analytics in
Clustering Software Engineering
- PROMISE 2016
58 Métricas de legibilidad del software: una revisión sistemática de literatura
19 [12] 2017 Novais, Daniel José Program analysis for Proceedings of the Conference Portugal
Ferreira; Pereira, Clustering Federated Proceedings
Maria João Programmers' Conference on
Varanda; Profile Computer Science
Henriques, Pedro and Information
Rangel; Systems
20 [38] 2017 Pahal, Ankit; Chillar, Code Readability: A International Journal Journal India
Rajender S; Review of Metrics for of Computer Trends Article
Software Quality and Technology
23 [41] 2019 Wulff-Jensen, Gaze Strategies Can Springer International Working Dinamarca
Andreas; Ruder, Reveal the Impact of Publishing AG, part of Paper
Kevin; Triantafyllou, Source Code Springer Nature 2019
Evangelia; Bruni, Features on the
Luis Emilio; Cognitive Load of
Novice
Programmers
24 [42] 2017 Xu, Weifeng; Xu, Measurement of 2017 IEEE 41st Conference Estados
Dianxiang; Deng, Source Code Annual Computer Proceedings Unidos
Lin; Readability Using Software and
Word Concreteness Applications
and Memory Conference
Retention of (COMPSAC)
Variable Names
25 [1] 2010 Buse, Raymond P Learning a Metric for 558 IEEE Journal Estados
L; Weimer, Westley Code Readability TRANSACTIONS Article Unidos
R; ON SOFTWARE
ENGINEERING,
VOL. 36, NO. 4
26 [20] 2010 Butler, S; Exploring the 2010 14th European Conference Reino
Wermelinger, M; Influence of Identifier Conference on Proceedings Unido
Yijun Yu; Sharp, H; Names on Code Software
Quality: An Empirical Maintenance and
Study Reengineering
27 [6] 2012 Dorn, Jonathan A General Software Working Estados
Readability Model Paper Unidos
En la Tabla 12, se presentan los 24 documentos que fueron seleccionados con la RSL,
junto con los 6 documentos que se tenían de la propuesta, que se presentan al final de la
tabla, desde el documento número 25 hasta el 30, en color gris. En la tabla, se detallan los
nombres de los autores, título del estudio, la revista o conferencia que lo publicó, el tipo de
estudio y el país al que corresponden las instituciones a las que pertenecieron los autores
que participaron en el estudio.
En la Figura 10, se presentan los 24 estudios seleccionados en la RSL, más los 6 estudios
obtenidos en la propuesta, clasificados por año de publicación, donde se puede apreciar
que los estudios sobre el tema han venido aumentando considerablemente, teniendo el
mayor número de publicaciones en el año 2018.
En la Figura 10, se puede observar que entre los estudios seleccionados 3 corresponden
al año 2015, 5 al año 2016, 3 al año 2017, 12 al año 2018 y 1 al año 2019. Para este último
60 Métricas de legibilidad del software: una revisión sistemática de literatura
año, cabe recordar que el proceso de recolección finalizó el 23 de abril del año 2019, por
lo que los estudios publicados después de esa fecha no estarían incluidos. En la Figura
10, también se puede apreciar que, de los estudios seleccionados, el 56.67% corresponde
a informes de conferencias, el 30% a artículos de revista científica, 9.99% a hojas de
trabajo, y sólo un 3.34% a secciones de libros.
En la Figura 11 se presenta una nube de palabras con los nombres de los autores de los
estudios seleccionados, en los cuales los nombres con mayor tamaño representan a los
autores con mayor cantidad de investigaciones en el tema de legibilidad del software.
Figura 11. Nube de palabras representando la frecuencia de los autores en los estudios
seleccionados. Fuente: Herramienta SASR7
En la Figura 11, se observa en mayor tamaño y de color verde, los nombres de los autores
con mayor número de investigaciones asociadas a las métricas de legibilidad del software,
encontrando hasta 3 estudios, demostrando un gran interés de su parte por el tema.
En la Figura 12, se presentan una nube que representa la frecuencia de las palabras clave,
denominadas TAGS, asignados en Mendeley de acuerdo al aporte encontrado en cada
estudio, para responder las preguntas de investigación del presente trabajo. Las palabras
7
Herramienta SASR: http://eiscapp.univalle.edu.co/uncode/
Capítulo 3. Revisión sistemática de literatura de métricas de legibilidad del 61
software
en español, corresponden a los TAGS asignados, mientras que las palabras en inglés, son
las asignadas por el autor de cada estudio.
Figura 12. Nube que representa la frecuencia de las palabras clave en los estudios
seleccionados. Fuente: herramienta SASR.
En la Figura 12, se encuentran mezcladas las palabras clave asignadas por los autores a
cada uno de sus estudios y las palabras clave asignadas en este trabajo, de acuerdo al
aporte que el documento realizó para responder a las preguntas de investigación
planteadas en esta RSL.
En la extracción de datos se identificaron los aportes de cada uno de los documentos, los
cuales fueron clasificados como se presenta en la Tabla 13.
de las referencias, lo cual permitió dar respuesta a las preguntas orientadoras planteadas
al inicio de la RSL. A continuación, se describen los capítulos o secciones que dan
respuesta a cada una de las preguntas de orientación.
Pregunta 1: ¿Cuáles son las características que permiten medir la legibilidad del código
fuente de un software?
Esta pregunta se responde con el capítulo 4.
Pregunta 2: ¿Qué métodos son utilizados para obtener el valor de medida de cada una
de esas métricas de forma automática?
Esta pregunta se responde con el capítulo 5.
propuesta del trabajo, logrando un total de 30 documentos que fueron utilizados para
responder las 3 preguntas de investigación en los capítulos 4, 5 y 6.
66 Métricas de legibilidad del software: una revisión sistemática de literatura
Autores
Buse et Alawad Posnett Dorn Scalabrino Aman Borstler Choi Liu et Mi et Novais
Característica al. et al. et al. (2012) et al. et al. et al. et al. al. al. et al.
(2010) (2018) (2011) [6] [45] (2016- (2015) (2016) (2018) (2015) (2016) (2017)
[1] [5] [10][45] 2018) [25] [18] [27] [33] [37] [12]
[7] [45]
Java Java Java Java Java Java Java Java Java Cy --
C++
# Promedio de M A B A A
Espacios en
blanco
(identación)
# promedio de M A M A
Comentarios
# Máximo de B A B A
Espacios en
blanco
(identación)
Líneas de A A
código (LOC)
Longitud A M M
promedio de
línea (# de
caracteres)
Longitud A M M
máxima de
línea
(caracteres)
Legibilidad de M A
los
comentarios -
CR
# promedio de A M
Paréntesis
# promedio de B B A
operadores
aritméticos
Entropía8 B A
Volumen del A
programa9
# promedio de A
Identificadores
# Líneas de A
comentarios
dentro de un
método - LCM
nombres A
significativos
Control A
anidado
máximo
Longitud de A
los
comentarios
# promedio de M M
palabras clave
8 Entropía, es una medida de desorden que refleja la complejidad para mantener un software.
9 Volumen del programa, hace referencia a la cantidad de líneas y caracteres de un algoritmo.
68 Métricas de legibilidad del software: una revisión sistemática de literatura
Autores
Buse et Alawad Posnett Dorn Scalabrino Aman Borstler Choi Liu et Mi et Novais
Característica al. et al. et al. (2012) et al. et al. et al. et al. al. al. et al.
(2010) (2018) (2011) [6] [45] (2016- (2015) (2016) (2018) (2015) (2016) (2017)
[1] [5] [10][45] 2018) [25] [18] [27] [33] [37] [12]
[7] [45]
Java Java Java Java Java Java Java Java Java Cy --
C++
# promedio de M B
Comas
# promedio de B M
líneas en
blanco
# promedio de B M
bifurcaciones
(if)
# máximo de B M
palabras clave
Longitud M B
máxima del
identificador
# máximo de M
Identificadores
# máximo de M
ocurrencias de
algún
identificador
Preferencia de M
nombres
Estilo de M
comentarios
# de LOCom M
% de LOCom M
# máximo de M
ocurrencias de
algún caracter
# de métodos M
# de clases M
# de M
declaraciones
# de LOC M
% de LOC M
# de M
expresiones
relevantes de
legibilidad
# líneas en M
blanco
% líneas en M
blanco
Longitud de M
identación
Ciclos10 M
Longitud B B
promedio del
identificador
# promedio de B B
números11
10Un ciclo es un bloque de líneas de código que se repiten, mientras se cumpla una condición.
11# promedio de números, es la cantidad promedio de literares numéricos que se encuentran en
una sección de código.
Capítulo 4. Características y métricas de legibilidad del software 69
Autores
Buse et Alawad Posnett Dorn Scalabrino Aman Borstler Choi Liu et Mi et Novais
Característica al. et al. et al. (2012) et al. et al. et al. et al. al. al. et al.
(2010) (2018) (2011) [6] [45] (2016- (2015) (2016) (2018) (2015) (2016) (2017)
[1] [5] [10][45] 2018) [25] [18] [27] [33] [37] [12]
[7] [45]
Java Java Java Java Java Java Java Java Java Cy --
C++
# máximo de B B
números
# promedio de B B
operadores de
comparación
# promedio de B B
bucles (for,
while)
# promedio de B B
asignaciones
Consistencia B
de los
comentarios e
identificadores
- CIC
Términos de B
identificadores
en diccionario
- ITID
Identificadores B
de significado
restringido -
NMI
Número de B
significados -
NM: Cuantos
significados
tiene una
misma
palabra.
Coherencia B
textual - TC:
Mide la
cohesión de
las clases
dentro del
código.
Número de B
conceptos -
NOC
Métodos de B
cadena12
Métrica de B
volumen de
Halstead
Cadena de B
palabras
(Strings)
Constantes B
Expresiones B
# promedio de B
puntos
12
El Método de cadena es un estilo de programación orientado a objetos, que consiste en que un
método que retorna un objeto puede ser usado como fuente para llamar a otro método.
70 Métricas de legibilidad del software: una revisión sistemática de literatura
En la Tabla 14, se observa que las características del software que obtuvieron mejores
resultados de correlación con el juicio de legibilidad, de mayor a menor, fueron las
relacionadas con espacios en blanco (identación), comentarios, LOC, número de
paréntesis, número de operadores aritméticos, entropía, volumen del programa, número y
nombre de los identificadores, estructuras de control y número de palabras clave.
Los comentarios son importantes porque reflejan lo que el programador quiso realizar en
el código y generalmente son usados para mejorar la comprensión de los programas [25].
Sin embargo, a veces pueden ser usados para disimular la falta de legibilidad en el
software, y por ello un comentario bien escrito es considerado como un “desodorante para
disimular los malos olores” [25]. Debe tenerse en cuenta, que la programación es una
actividad que depende de la mente y la experiencia de cada desarrollador, por lo cual
diferentes programadores pueden escribir diferentes programas para la misma
especificación, y por ello es importante ir evaluando y controlando la calidad del programa
[25].
Capítulo 4. Características y métricas de legibilidad del software 71
Aman et al. (2015) [25] analizaron los métodos en lenguaje Java de 4 proyectos de código
abierto y encontraron que los métodos mejor comentados son 1.6 a 2.8 más propensos a
fallos que los que no. Con mejor comentados, se refirieron sólo a la cantidad de líneas de
comentarios, no a la calidad del contenido, ni a la longitud de las mismas [25]. Un año más
tarde, en el 2016, Borstler et al. [18] realizaron un experimento con 104 estudiantes en una
universidad de Alemania, que cursaban asignaturas de programación, para evaluar la
relación entre las características personales de los participantes y la legibilidad del
software, así como la importancia de los métodos de cadena13 y los comentarios en la
legibilidad de los fragmentos de código fuente escritos en los lenguajes C++ y Java. Los
resultados del experimento, fueron que la presencia de los métodos de cadena no influyó
en el juicio de legibilidad, mientras que la presencia de los comentarios, sin importar si eran
buenos o malos, si influyó [18]. Adicionalmente, al evaluar la relación de las características
de los participantes con los juicios entregados, se encontró que los hombres tuvieron
mayor percepción de legibilidad que las mujeres [18].
Por otra parte, Fakhoury et al. (2018) [31] exploraron el efecto de un pobre léxico en el
código fuente y la legibilidad sobre la carga cognitiva, medido por una técnica de imagen
cerebral funcional de vanguardia y mínimamente invasiva llamada espectroscopía de
infrarrojo cercano funcional (fNIRS). En los resultados de la investigación, evidenciaron un
incremento significativo en la carga cognitiva de los participantes [31]. Cuando al código
fuente se le introdujeron anti patrones lingüísticos e inconsistencias estructurales, no
incrementó la carga cognitiva, pero sí incrementó en un 60% el porcentaje de participantes
que no pudieron completar las tareas [31]. Usando el rastreador ocular EyeTribe, los
participantes miraron el código en el IDE Eclipse, conectado al Plugin iTrace, lo que
permitió determinar los elementos del código fuente que estaban viendo, mediante el uso
de gafas bifocales y trifocales [31].
13
El método de cadena es un estilo de programación orientado a objetos, que consiste en que un
método que retorna un objeto puede ser usado como fuente para llamar a otro método.
72 Métricas de legibilidad del software: una revisión sistemática de literatura
Por otra parte, Akour et al. (2016) [14] indicaron que los modelos de medición de la
legibilidad del software deben ser especializados, teniendo en cuenta el dominio de la
aplicación y el lenguaje de programación en el cual está desarrollado [14]. Los autores
explicaron que las características evaluadas para determinar la legibilidad del software no
pueden medirse de la misma forma en una aplicación A y en una aplicación B de un
dominio diferente, porque hay unos lenguajes de programación que facilitan más la
legibilidad que otros, debido a la naturaleza misma de su sintaxis, o de acuerdo a su
paradigma, que puede ser procedimental, funcional, imperativo, orientado a objetos, lógico
o simbólico [14]. De acuerdo a lo anterior, las métricas propuestas por los diferentes
autores deberían tener la posibilidad de tener factores de legibilidad variables, que se
adapten a un código fuente teniendo en cuenta su dominio y su lenguaje de programación
[14].
En la Tabla 16, se exponen las métricas simples encontradas para el lenguaje Java, y en
la Tabla 17 las métricas simples para el lenguaje C y C++.
En la Tabla 16, se presentaron las métricas simples encontradas en la literatura, las cuales
consisten en un conteo sencillo de las ocurrencias de una característica en el código, o en
medir su tamaño. En la columna referencia, se indica la fuente de literatura en la cual se
encontró. Continuando con las métricas simples, se presenta la Tabla 17, que
corresponden a las métricas de legibilidad del lenguaje C y C++.
Ecuación:
ARI = 4.71 (caracteres) + 0.5 (palabras) - 21.43
Ecuación:
SMOG = 3 + Raíz cuadrada de recuento
polisillable (conteo de palabras)
FKI: Índice de Ecuación: Legibilidad del [5] [29] [38]
legibilidad de FKI = 206.835 – (1.015 * (palabras totales / texto
sentencias totales)) - 84.6 * (silabas totales /
Flesch-Kincaid. palabras totales)
donde,
ASL = longitud promedio de la oración y
PHW = porcentaje de palabras difíciles.
donde,
L = número promedio de letras
S = número promedio de sentencias
Dónde,
Z = 8.87 – 0.033 V + 0.40 LOC -1.5 H
V = N log2 n
17 WSDL, significa lenguaje de descripción de servicios web, por sus siglas en inglés, y es un
programa con una interfaz bien definida que puede ser publicada, localizada e invocada usando un
protocolo de estándar web [29].
18 https://wordnet.princeton.edu/
78 Métricas de legibilidad del software: una revisión sistemática de literatura
donde, m es el método.
CIC(m)sin = |comentarios(m) ∩
identificadores(m) U sinónimos(m)|/
|comentarios(m) U identificadores(m) U
Sinónimos(m)|
donde,
sinónimos: es el conjunto de todos los sinónimos
de los términos que están en los identificadores.
ITID: Términos Autor: Scalabrino et al. (2018). Legibilidad del [45]
del identificador código fuente
Fue inspirado por las características de lenguaje
en diccionario. natural (lingüísticas) introducidas por Dorn.
donde,
Términos: es el conjunto de términos extraídos
de una línea I de un método.
Diccionario: es un conjunto de palabras en un
diccionario.
NMI: Autor: Scalabrino et al. (2018) Legibilidad del [45]
Identificadores código fuente
Capítulo 4. Características y métricas de legibilidad del software 79
NMI(I) = ∑t ∈I particularidad(t)
donde,
t: es un término extraído de la línea de código I.
particularidad(t): es calculado como el número
de saltos desde el nodo t que lo contiene hasta
el nodo raíz del árbol hypernym19 de t. Usan el
árbol hypernym/hyponym20 del lenguaje inglés
definido para WordNet.
CR: Legibilidad Autor: Scalabrino et al. (2018). Legibilidad del [45]
de los código fuente
Calcula la legibilidad de los comentarios (CR)
comentarios. usando el índice Flesch-Kincaid comúnmente
utilizado para evaluar la legibilidad de textos en
lenguaje natural. El índice considera 3 tipos de
elementos: palabras, sílabas y frases.
Ecuación:
FK(S) = 206.835 - 1.015*(palabras(S)/frases(S))
- 84.600*(sílabas(S)/Palabras(S))
donde,
S: es el fragmento de código fuente.
NOC(m) = |Clusters(m)|
Normalizando NOC:
Como se observó en la Tabla 18, este tipo de métricas requieren un mayor esfuerzo para
ser medidas, debido a la complejidad de sus ecuaciones. Las fuentes bibliográficas que
Capítulo 4. Características y métricas de legibilidad del software 81
De igual forma, las métricas relacionadas con las características anteriormente expuestas,
que mejor funcionaron en los estudios realizados por los autores para medir la legibilidad
del software fueron: la cantidad de espacios en blanco, la cantidad de comentarios, la
longitud de la línea de código y la cantidad de paréntesis. Adicionalmente, las métricas de
tipo compuestas que también presentaron buenos resultados fueron: la métrica de Posnett
abreviada como PHD, la métrica WSCR para el código fuente en lenguaje WSDL (servicios
web) y la legibilidad de los comentarios (CR) propuesta por Scalabrino et al.
82 Métricas de legibilidad del software: una revisión sistemática de literatura
Los comentarios son importantes porque reflejan lo que el programador quiso realizar en
el código y generalmente son usados para mejorar la comprensión de los programas [25].
Borstler et al., encontraron que la presencia de los comentarios, sin importar si son buenos
o malos, influye en la percepción de legibilidad [18]. Sin embargo, a veces pueden ser
usados para disimular la falta de legibilidad en el software, como lo demostró Aman et al.
(2015) [25], quienes analizaron los métodos en lenguaje Java de 4 proyectos de código
abierto y encontraron que los métodos mejor comentados son 1.6 a 2.8 más propensos a
fallos que los que no.
Otros autores, como Fakhoury et al. (2018) [31], exploraron el efecto de un pobre léxico en
el código fuente y la legibilidad sobre la carga cognitiva, medido por una técnica de imagen
cerebral funcional de vanguardia y mínimamente invasiva llamada espectroscopía de
infrarrojo cercano funcional (fNIRS), encontrando que dificulta que los participantes puedan
completar las tareas [31]. Por otro lado, Wulff-Jensen et al. [41], encontraron que la
ausencia de elementos estructurales provocó que 1) la mirada del lector fuera más rápida
y caótica, 2) causó una mayor carga cognitiva en el lector, y 3) incrementó la duración
promedio de la fijación [41].
Para poder medir cuantitativamente las características propuestas para la legibilidad del
software, se utilizan las métricas. Para este trabajo final, se clasifican las métricas de
Capítulo 4. Características y métricas de legibilidad del software 83
legibilidad del software en dos tipos: las simples, que consisten en tomar la medida por un
conteo, y las compuestas, donde la forma de medir es más compleja y requiere de una
ecuación para relacionar 2 o más métricas simples. Las métricas simples consisten en un
conteo sencillo de las ocurrencias de una característica en el código, o en medir su tamaño,
mientras que, las compuestas, son más elaboradas e involucran a 2 o más características
en una misma ecuación. Algunos de los modelos de legibilidad propuestos, incorporaron
alguna de estas métricas en su algoritmo, permitiendo tomar la medida automáticamente.
21 https://wordnet.princeton.edu/
Capítulo 5. Modelos de legibilidad del software 87
Como se presentó en la Tabla 19, han sido varios los autores que han realizado
importantes aportes a la legibilidad del software, encontrando registros desde 1990. La
tabla que se encuentra ordenada por el año, presenta la descripción breve del aporte
realizado y los autores del mismo. Al analizar los datos encontrados, se observa que los
primeros aportes correspondieron a las primeras métricas propuestas para la legibilidad
del software. A partir del año 2002, se realizaron estudios para evaluar el impacto que tiene
la legibilidad del software en los costos asociados a su mantenimiento, y propusieron
nuevas características para tener en cuenta al medir la legibilidad del software, como los
nombres de los identificadores. En 2006 Collar y Valerdi [14] indicaron que debía tenerse
en cuenta la estructura del código para evaluar su legibilidad, y años después, en el 2010,
Buse y Weimer propusieron el primer modelo para evaluar la legibilidad del software, el
cual tenía en cuenta un conjunto de características de tipo estructurales, propuestas por
los autores. Los años siguientes, continuaron apareciendo nuevos modelos propuestos por
otros autores, pero aún no se considera alguno de ellos como el definitivo. Otro tipo de
aporte que apareció por primera vez en el 2012, consistió en una herramienta para mejorar
automáticamente la legibilidad de un fragmento de código fuente, la cual insertaba
espacios en blanco, lo cual significa que los investigadores no sólo quieren medir la
legibilidad en el software, sino que una vez identificadas las falencias, poderlas corregir de
forma automática. Los primeros modelos de legibilidad, estuvieron enfocados a un
conjunto de características propuestas por los autores, pero en el año 2018, aparecieron
2 nuevos modelos que utilizaron el aprendizaje profundo para evaluar la legibilidad, sin un
conjunto previo de características. Como se pudo apreciar, todos los aportes encontrados,
permitieron obtener un avance considerable en el tema de la legibilidad del software, y
aunque aún no se ha dicho la última palabra, las herramientas, métricas y características
encontradas, permiten tener una base sólida para continuar con los estudios.
88 Métricas de legibilidad del software: una revisión sistemática de literatura
Como se observa en la Figura 13, el primer modelo de legibilidad del software fue
propuesto por Buse y Weimer en el año 2010, el cual consistía de un clasificador binario,
implementado con la técnica de aprendizaje de máquina (machine learning en inglés). Los
otros modelos que le sucedieron y que también aplicaron las mismas técnicas, pero con
características diferentes, fueron el de Posnett et al. [10], Dorn [6] y Scalabrino [45]. El
modelo de Choi et al. [27], no propusieron ninguna característica, sino que presentaron
una ecuación optimizada, que utilizó un conjunto mínimo de las características ya
propuestas por los modelos anteriores de Buse et al. [1], Posnett et al. [10] y Dorn [6]. Los
modelos de Liu et al. [33] y Xu et al. [42], no usaron técnicas de aprendizaje de máquina,
sino técnicas de análisis léxico del texto. Los modelos de Mi et al. [35] [36], utilizaron el
aprendizaje profundo y evaluaron todo el código de los fragmentos, sin sesgar los
resultados a un conjunto limitado de características.
90 Métricas de legibilidad del software: una revisión sistemática de literatura
Los modelos para la predicción de la legibilidad en el software desarrollados por Buse [1],
Posnett [10], Dorn [6] y Scalabrino [45], consistieron en desarrollar y entrenar un
clasificador de legibilidad del software a través de estudios empíricos. Seleccionaron
fragmentos de código fuente de un lenguaje de programación y convocaron a un número
de participantes. Cada participante calificaba de forma individual cada fragmento con un
puntaje de 1 a 5, de acuerdo con su percepción de legibilidad en el mismo; dando 5 cuando
lo consideraba muy legible y 1 cuando era poco legible. Luego los investigadores
analizaron los datos y mediante el uso de fórmulas estadísticas y matemáticas, lograron
desarrollar una herramienta que evalúa fragmentos de código y los clasifica. Para concluir
estos trabajos, compararon los resultados del software con los de los participantes,
evaluando los aspectos y métricas más influyentes en la predicción de legibilidad [1] [7]
[10] [6] [45]. En la Tabla 20, se describen las características más relevantes que tuvo cada
uno de los trabajos de investigación, para proponer los modelos de predicción de la
legibilidad en el software, así como los resultados obtenidos, lo cual complementa la
información mostrada anteriormente en la Figura 13 [1] [7] [10] [6] [14][20] [27] [33] [35]
[36] [42][43] [45].
Buse y Pionero en demostrar que un 81% de precisión con el [1] [14] [45]
Weimer aspecto subjetivo como la legibilidad podía conjunto de datos de Buse y
(2010) ser capturado y medido de forma automática. Weimer.
Consideró únicamente el aspecto 78.6% de precisión con el
estructural del código fuente: 25 conjunto de datos de Dorn.
características. 72.5% de precisión con el
Los fragmentos de código fuente conjunto de datos de Scalabrino.
evaluados, corresponden al lenguaje Java. 77.1% de precisión con
Gwm22
77.4% de precisión con
Gam23
Posnett, Presentó un enfoque teóricamente Fue más fácil de medir y [10] [45]
Hindle y mejor fundado, más robusto y más simple que rápido de ejecutar.
Devanbu el de Buse y Weimer.
(2011)
22 Gwm: se calcula como la media ponderada de los valores de precisión para cada conjunto de
datos, donde los pesos son el número de fragmentos en cada conjunto de datos.
23 Gam: se calcula como la media aritmética de los valores de precisión para cada conjunto de
datos.
Capítulo 5. Modelos de legibilidad del software 91
24 La concreción evalúa el grado en que el concepto denotado por una palabra se refiere a una
entidad perceptible. Una palabra concreta es más fácil de aprender, recordar y procesar que una
palabra abstracta.
25 La retención de memoria mide la habilidad de la mente humana para retener información.
26 WCMR: significa concreción de palabras y retención de memoria de nombres de variable, por sus
siglas en inglés.
Capítulo 5. Modelos de legibilidad del software 93
27Las redes neuronales convolucionales son tipos especiales de redes neuronales con estructuras
inspiradas en la biología.
94 Métricas de legibilidad del software: una revisión sistemática de literatura
Los modelos de Buse et al, Dorn, Posnett et al. y Scalabrino realizaron los siguientes pasos
descritos en la Figura 14 para lograr desarrollar sus modelos [1] [7] [10][6] [45].
Capítulo 5. Modelos de legibilidad del software 95
Figura 14. Descripción del proceso realizado para desarrollar un modelo de legibilidad
enfocado a las características.
En la Figura 14, se observan los pasos realizados por algunos de los investigadores, en
los que se realizaron encuestas con la participación de estudiantes o profesionales del
área del software, para recolectar datos anotados, que permitieron entrenar los modelos.
En la encuesta, cada participante evalúo cada fragmento, asignándole un valor de 1 a 5,
donde 1 era poco legible y 5 era muy legible. La correlación fue evaluada con el coeficiente
de Spearman y la validación cruzada de k iteraciones, con k=10.
El modelo propuesto por Choi et al. (2018) [27], realizó un proceso diferente, el cual constó
de los pasos explicados en la Figura 15:
96 Métricas de legibilidad del software: una revisión sistemática de literatura
Figura 15. Descripción del proceso realizado en el modelo de legibilidad de Choi et al.
Como se pudo observar en la Figura 15, el proceso en el modelo de Choi fue similar al de
los modelos anteriores, pero con la variación de que no se realizó entrenamiento de un
clasificador binario, sino que se optimizaron los pesos para tener en cuenta en una nueva
versión de la ecuación de legibilidad, que permitiera lograr una alta precisión, pero con un
número reducido de características [27]. Para el análisis de regresión lineal se aplicaron
las técnicas regresión lineal múltiple y el análisis de regresión no lineal.
Los autores Mi et al. (2018) [35], identificaron algunas deficiencias en los modelos de
legibilidad anteriormente descritos, los cuales se basaban en el enfoque de características.
Las deficiencias identificadas fueron:
Es inefectivo, porque capturaron información parcial sobre el código fuente, que puede
no ser adecuada. Las características que se pueden usar para un conjunto de datos
pueden no serlo para otro; y pueden existir redundancias y superposiciones entre las
características diseñadas manualmente, lo que probablemente limitará el rendimiento
del modelo [35].
Capítulo 5. Modelos de legibilidad del software 97
Figura 16. Descripción del proceso realizado en el modelo de legibilidad DeepCRM28 con
ConvNets29 de Mi et al.
En la Figura 16, se pueden apreciar los pasos del proceso para desarrollar el modelo de
legibilidad del software DeepCRM con ConvNets, donde el primer paso fue convertir los
fragmentos de código fuente a una matriz de enteros, la cual fue utilizada después como
insumo para el entrenamiento de cada una de las 3 redes convolucionales (ConvNet) [35].
Se crearon 3 redes convolucionales, cada una para representar un tipo de granularidad: a
nivel de carácter; a nivel de token, como palabras clave y operadores, realizando análisis
léxico; y a nivel de nodo, como declaraciones y definiciones, representadas en un árbol de
sintaxis abstracta [35]. Cada uno de los ConvNets fue implementado en Python usando
TensorFlow, y entrenado de manera supervisada usando el algoritmo Adam [35].
28 DeepCRM, es la abreviación de modelo de legibilidad del software con aprendizaje profundo, por
sus siglas en inglés.
29 ConvNets, es la abreviación de redes neuronales convolucionales, por sus siglas en inglés.
98 Métricas de legibilidad del software: una revisión sistemática de literatura
Adicionalmente, se encontró otro modelo que, pese a que no sirve para evaluar la
legibilidad en el software, permite mejorar una característica de la legibilidad, relacionada
con los nombres de los identificadores. El modelo para sugerencias automáticas de
nombres, fue desarrollado por Allamanis et al. (2015) [24], quienes utilizaron el lenguaje
neuronal log-bilineal, para capturar el contexto de la estructura del algoritmo, junto con un
modelo de subtoken para realizar una división del token que analiza las relaciones entre
palabras, lo que les permitió predecir neologismos, nombres nuevos que no habían
aparecido antes. El modelo incrusta cada token (palabra) dentro de un espacio continuo
de alta dimensión, como un vector [24]. Luego, para nombrar un método o una clase,
selecciona el nombre que es más similar en este espacio de inclusión a aquellos en el
cuerpo de la función [24]. De esta manera, el modelo se da cuenta de la famosa frase de
Firth: "Sabrás una palabra por la compañía que esta guarda" [24]. Este eslogan, encapsula
la hipótesis distributiva de que palabras semánticamente similares, tienden a coexistir con
las mismas palabras [24]. Las incorporaciones continuas de identificadores tienen muchas
otras aplicaciones potenciales en la ingeniería de software, tales como rechazar commits
en donde haya identificadores que violen las convenciones de codificación del proyecto;
exploración de anti patrones lingüísticos, tales como un getter que comienza con set; y
localización de características [24].
El modelo de Allamanis et al., demostró sugerir nombres con precisión, tanto para el
problema de denominación de variables simples, como para nombrar clases y métodos,
logrando puntajes F1-score del 60% en nombres de métodos y 55% en nombres de clase,
cuando sea necesario para predecir nombres para el 20% de las declaraciones de método
y clase [24].
Capítulo 5. Modelos de legibilidad del software 99
Tabla 21. Técnicas utilizadas en las investigaciones para medir la legibilidad en el software.
Tabla 22. Detalle de los fragmentos de código fuente utilizados en los modelos de
legibilidad del software.
o
7 LOC
Número de 120 Los 5468 120 de -- -- --
Participantes mismos Buse
de Buse + 5468 de
Dorn
+ 9 propios
102 Métricas de legibilidad del software: una revisión sistemática de literatura
En la Tabla 22, se mostró que el número de fragmentos de código fuente utilizados fue
muy variado, de acuerdo al modelo propuesto, encontrando cantidades desde 60 hasta
25000. Teniendo en cuenta que los modelos han tratado de replicar los anteriores, para
dar continuidad, el lenguaje común evaluado fue Java, con tamaños desde 7 LOC hasta
100 LOC. Las personas que participaron en la anotación de los datos, fueron estudiantes
universitarios que cursaban diferentes años y profesionales del área de software con
variada experiencia. Los autores seleccionaron participantes cercanos a su ubicación
geográfica, y por eso se encontró que las personas eran de estados unidos y corea del
sur.
Además de los modelos de legibilidad, se encontraron otros estudios en los cuales los
autores desarrollaron experimentos relacionados con la legibilidad del software, utilizando
fragmentos de código fuente, y, a veces, la participación de personas. En la Tabla 23, se
describen los lenguajes de programación, mencionados en los otros estudios.
32
Cantidad total de juicios: Son los datos anotados, es decir, los que tienen la etiqueta de legible o
no legible. En algunos casos es el producto obtenido al multiplicar el número de participantes por el
número de fragmentos.
Capítulo 5. Modelos de legibilidad del software 103
Como se mostró en la Tabla 23, donde se presentan los otros estudios, a parte de los
modelos de legibilidad, donde se realizaron experimentos con fragmentos de código
fuente, casi todos corresponden al lenguaje de programación Java, lo que demuestra que
falta diversificar los estudios a otros lenguajes de programación. Adicionalmente, en dos
de los estudios donde participaron personas, se observó que los autores, quizás por
cuestiones prácticas, seleccionaron personas cercanas a su entorno, como estudiantes de
una misma institución o profesionales de la ciudad.
Representación
Categoría Descripción NA Alta Media Baja
Estructurales Conteo simple de caracteres. X A M B
Textuales Para los nombres de los identificadores tiene X A M B
en cuenta los estándares de nomenclatura
de las variables, que generalmente están en
idioma inglés y el análisis léxico del código
fuente, como nociones de lenguaje natural.
Visuales Se considera la pantalla donde el X A M B
programador ve el código, como una matriz
de caracteres de color y espacios en blanco.
Y si utiliza un IDE, el resaltado de la sintaxis
con colores.
Espaciales Hace referencia a la longitud, volumen y X A M B
anidación presente en una línea de código,
lo que la hace más o menos densa.
Alineación Alineación de operadores y espacios en X A M B
blanco que permiten una estructura limpia.
Capítulo 5. Modelos de legibilidad del software 105
Característica Modelo
Posnett Scalabrino et Choi et
Buse et Dorn
Métrica et al. al. (2016- al.
Categoría Nombre al. (2010) (2012)
(2011) 2018) (2018)
[1] [6] [45]
[10] [45] [7] [45] [27]
Estructural y LOC Longitud AA MM
Visual promedio de línea
(# de caracteres)
Estructural y LOC Longitud máxima AA MM
Visual de línea
(caracteres)
Estructural LOC Líneas de código A A
(LOC)
Estructural, Identificadores # promedio de AA A
Visual, textual y Identificadores
espacial
A
Estructural, Identificadores # máximo de MM M
Visual, textual y Identificadores
espacial
M
Estructural, Identificadores Longitud BB B BBB
Visual, textual y promedio del
espacial identificador
B B
Estructural, Identificadores Longitud máxima MM BBB
Visual, textual y del identificador
espacial
MM B
Estructural Identificadores # máximo de M
ocurrencias de
algún identificador
Estructural, Palabras clave # promedio de MM M MMM
Visual y espacial palabras clave
Estructural, Palabras clave # máximo de BBB MMM
Visual y espacial palabras clave
Estructural, Comentarios # promedio de MM MMM AA
Visual y espacial Comentarios
M A
Estructural y Puntos # promedio de BB
visual puntos
Estructural y Comas # promedio de MM BB
visual Comas
Estructural y Espacios en # Promedio de MM BB AA
visual blanco Espacios en blanco
(identación)
Estructural y Espacios en # Máximo de BB BB
visual blanco Espacios en blanco
(identación)
Visual Espacios en Longitud de M
blanco identación
Estructural y Paréntesis # promedio de AA MM
visual Paréntesis
Estructural, Números # promedio de BBB BBB
visual, espacial números
Estructural, Números # máximo de BBB BBB
visual, espacial números
Estructural y Líneas en blanco # promedio de BB MM
visual líneas en blanco
Estructural y Asignaciones # promedio de BB BB
visual asignaciones
Estructural y Estructura de # promedio de BB
visual control bifurcaciones (if)
Estructural y Estructura de # promedio de BB BB
visual control bucles (for, while)
106 Métricas de legibilidad del software: una revisión sistemática de literatura
Característica Modelo
Posnett Scalabrino et Choi et
Buse et Dorn
Métrica et al. al. (2016- al.
Categoría Nombre al. (2010) (2012)
(2011) 2018) (2018)
[1] [6] [45]
[10] [45] [7] [45] [27]
Estructural Estructura de Control anidado A
control máximo
Visual Estructuras de Ciclos M
control
Estructural, Operadores # promedio de BBB BBB AA
espacial, visual y operadores
alineación aritméticos
B B AA
Estructural, Operadores # promedio de BBB BBB
espacial, visual y operadores de
alineación comparación
B B
Estructurales Operadores # máximo de M
ocurrencias de
algún caracter
Estructurales Entropía Entropía B A
Estructurales Halstead Métrica de B
volumen de
Halstead
Espacial Cadena de palabras Cadena de B
palabras (Strings)
Espacial Cadena de palabras Constantes B
Alineación Cadena de palabras Expresiones B
Textuales Consistencia de B
los comentarios e
identificadores -
CIC
Textuales Términos de B
identificadores en
diccionario - ITID
Textuales Identificadores de B
significado
restringido - NMI
Textuales Legibilidad de los M
comentarios - CR
Textuales Número de B
significados - NM:
Cuantos
significados tiene
una misma
palabra.
Textuales Coherencia textual B
- TC: Mide la
cohesión de las
clases dentro del
código.
Textuales Número de B
conceptos - NOC
Estructurales volumen Volumen del A
programa
En la Tabla 25, se organizaron las características y sus métricas, por categorías, entre las
que se encuentran: estructurales, visuales, alineación, espaciales y textuales, que fueron
explicadas en la Tabla 24. El primer modelo de legibilidad, el cual fue el de Buse et al.
(2010) [1], propuso las de tipo estructural, que consistía en simples conteos de los
Capítulo 5. Modelos de legibilidad del software 107
caracteres presentes en el código fuente. Años más tarde, Dorn (2012) [6] propuso para
su modelo, la introducción de las características de tipo visuales, de alineación y
espaciales, al considerar importante la forma en la que un programador ve en pantalla el
código fuente que está leyendo, y las características de tipo textual, al considerar que los
nombres de las variables, y demás identificadores, utilizan lenguaje natural que en su
mayoría se encuentra en idioma inglés. Años más tarde Scalabrino et al. (2016) [45],
propuso características de tipo textual, que se basan en el análisis léxico del código fuente,
tales como, la consistencia entre los comentarios y el código fuente, la especificidad de los
identificadores, la coherencia textual y la legibilidad de los comentarios. En el año 2018,
Choi propuso un modelo cuantitativo para medir la legibilidad del software, que consistió
en una ecuación matemática que tiene en cuenta varias características del código fuente,
presentadas en años anteriores por otros autores, y le asignaba diferentes pesos a cada
una, hasta lograr el resultado más óptimo, es decir, un valor alto de legibilidad con el menor
número de características posibles. Las características seleccionadas en la ecuación final
de Choi fueron: número de comentarios, número de líneas en blanco, número de
operadores bit a bit, control anidado máximo, volumen de programa y la entropía.
En la Tabla 25, también se puede apreciar que las características que tuvieron mejores
resultados en los estudios, es decir, tuvieron una mayor correlación con la predicción de
legibilidad, fueron: la longitud promedio de línea, la longitud máxima de línea, las líneas de
código (LOC), el número promedio de identificadores, el número promedio de comentarios,
el número promedio de espacios en blanco y el número promedio de paréntesis.
Lenguaje de
No. Vínculo Referencia
programación
1 Java https://github.com/zibranm/dataset [5]
2 Java http://groups.inf.ed.ac.uk/cup/naturalize/#evaldata [24]
3 C https://github.com/roncoleman125/Pretty [28]
4 Java https://github.com/CityU- [35]
QingMi/DeepCRM/tree/master/Code%20Snippet%20Repository
5 Java https://dibt.unimol.it/report/readability/ [45]
5.6.2 Herramientas
En algunos de los estudios seleccionados en la RSL, se utilizaron herramientas que
facilitaron el desarrollo de algunas de las actividades. Entre las herramientas, se
encuentran programas de uso libre, así como algoritmos propios desarrollados por los
autores de los estudios. A continuación, en la Tabla 27, se relacionan las herramientas
encontradas en los documentos, con el vínculo del repositorio en el cual se pueden
descargar.
Tabla 27. Repositorios que contienen herramientas libres o propias utilizadas en los
estudios.
5.6.3 Documentación
Además de encontrar herramientas y conjuntos de datos en los estudios seleccionados de
la RSL, también se encontraron vínculos de documentos, cuyo contenido se relaciona con
las propuestas para medir la legibilidad en el software. A continuación, en la Tabla 28, se
110 Métricas de legibilidad del software: una revisión sistemática de literatura
relacionan los documentos encontrados en los estudios, con el vínculo del repositorio en
el cual se pueden descargar.
En el año 2010, Buse y Weimer [1] crearon el primer modelo de clasificación automática
para evaluar la legibilidad de un fragmento de código fuente, logrando así cuantificar algo
tan subjetivo. El modelo consistió en un clasificador binario, entrenado con datos anotados
por humanos [1], utilizando técnicas de aprendizaje de máquina (machine learning en
inglés), lo que abrió las puertas para que otros investigadores se interesaran en el tema,
brindando nuevos aportes, tales como, métricas de legibilidad, características del código
que influyen, impacto de la legibilidad en los costos de mantenimiento, modelos
automáticos para evaluarla, y algoritmos para sugerir o mejorar automáticamente alguna
característica del código que impacte la legibilidad del código.
Capítulo 5. Modelos de legibilidad del software 111
Después del modelo de Buse et al. [1], propuesto en el año 2010, donde evaluaron
características estructurales del software, llegaron nuevas propuestas de modelos de
legibilidad del software, tales como: el modelo de Posnett et al. en el año 2011 [10], que
redujo el conjunto de características de Buse et al., pero adicionó el token de entropía y la
métrica del volumen de Halstead; el modelo de Dorn en el año 2012 [6], propuso
características de tipo visual, espacial, de alineación y lingüísticas; el modelo de Liu et al.
en el año 2015 [33], evaluó sólo la correlación de la semántica entre el código y los
comentarios, usando la herramienta WordNet. En el año 2016 Scalabrino et al. [7],
adicionaron 7 características de tipo textual y crearon un modelo que las usaba; En 2017,
el modelo de Xu et al. [42], propusieron no enfocarse en las características, sino en la
concreción de palabras y la retención de memoria (WCRM). En el año 2018, Scalabrino et
al. [45] propusieron 2 nuevos modelos de legibilidad: el combinado de características
estructurales y visuales, y el integral de características estructurales, visuales y textuales,
cuya precisión usando todos los conjuntos de datos fue del 85%. En el año 2018 Choi et
al. [27], presentaron el modelo cuantitativo de legibilidad, que consistió en una ecuación
optimizada que usaba sólo 7 características; en el mismo año, Mi et al. [35] [36] proponen
2 nuevos modelos de legibilidad, usando la técnica de aprendizaje profundo, sin limitar el
conjunto de características del software a evaluar, los cuales son DeepCRM [35] que usa
redes neuronales convolucionales, y el modelo IncepCRM [36] con arquitectura de inicio
(inception en inglés).
En algunos estudios se hallaron las direcciones de los sitios web, donde se pueden obtener
los fragmentos de código fuente utilizados en los experimentos, así como herramientas
disponibles para la descarga y documentación relacionada, que pueden ser utilizados por
112 Métricas de legibilidad del software: una revisión sistemática de literatura
otros investigadores para realizar una replicación de los estudios o realizar uno nuevo. La
mayoría de fragmentos corresponden al lenguaje de programación Java.
Con este quinto capítulo, se termina de responder al objetivo número 2 establecido en este
trabajo final, el cual era "Sintetizar los resultados en términos de la evolución de las
métricas de legibilidad del software, las características utilizadas para su medición y los
métodos automáticos de medición".
Capítulo 6. Retos y aplicaciones de la legibilidad del software 113
La aplicación número 1 de la Tabla 29, hace referencia a los modelos automáticos que
permiten evaluar la legibilidad de un fragmento de código fuente, y que fueron presentados
en el Capítulo 5, así como la aplicación número 6 que fue presentada en la sección 5.2. La
aplicación número 3, del impacto de la legibilidad en la carga cognitiva del lector, se explicó
en el Capítulo 4, sección 4.1. La aplicación número 7, se refiere a la relación que tiene la
legibilidad con la propensión a fallas, lo que permite que las métricas de legibilidad puedan
utilizarse en las herramientas de detección a fallas, para mejorarlas.
Para la aplicación número 5 de la Tabla 29, Novais et al. (2017) [12], diseñaron la
herramienta “Perfil del programador”, abreviada como PP, para identificar los perfiles de
los programadores, mediante la extracción automática de las métricas en los programas
desarrollados por ellos en lenguaje Java, utilizando técnicas de procesamiento de
lenguaje. Los resultados clasifican a los programadores de acuerdo a su nivel de habilidad
en el lenguaje y nivel de legibilidad en el código fuente [12]. La herramienta PP fue usada
junto a la herramienta PMD, que es un analizador de código fuente, para capturar
información sobre el uso de las buenas prácticas de Java [12].
Legibilidad del lenguaje (readability en inglés): definido como la estética, claridad y todo
lo relacionado con la comprensión del código escrito [12].
Capítulo 6. Retos y aplicaciones de la legibilidad del software 115
Los perfiles fueron clasificados en 5 categorías: Novato (baja habilidad y baja legibilidad),
iniciante avanzado (baja a media habilidad y legibilidad), competente (baja a media
habilidad y alta legibilidad), experto (alta habilidad y media a baja legibilidad) y maestro
(alta habilidad y alta legibilidad) [12].
Para las aplicaciones número 2 y 4 de la Tabla 29, relacionadas con la adopción de buenas
prácticas de legibilidad y con la enseñanza de las mismas desde las instituciones de
educación superior, se dedican las siguientes secciones 6.1.1 y 6.1.2.
Por otra parte, Sedano (2016) [40], realizó un estudio para evaluar la legibilidad del código
con 21 estudiantes de maestría en ingeniería de software, del curso “Craft of Software
Development” de la Universidad Carnegie Mellon, Estados Unidos, en 2013. La prueba
consistió en 4 sesiones donde se reunió un programador, denominado el autor, y un lector,
donde el primero dio una breve descripción de la funcionalidad y el lector luego leía y
comprendía por sí sólo cómo el código realizaba los procesos [40]. Al finalizar, el lector
daba la retroalimentación correspondiente y el programador realizaba los ajustes para la
33 La motivación intrínseca, se refiere a hacer una actividad por satisfacción propia, donde una
persona disfruta la actividad [34].
34 La motivación extrínseca, se refiere a hacer una actividad por alguna recompensa adicional, como
siguiente sesión [40]. Los resultados de la investigación mostraron que la capacidad de los
programadores para escribir código legible mejoró, así como la identificación de las
soluciones frecuentes para mejorar la legibilidad del código [40]. Las sugerencias más
frecuentes que se obtuvieron al finalizar las pruebas fueron: mejorar los nombres de las
variables, mejorar los nombres de los métodos, crear nuevos métodos para reducir la
duplicación del código, simplificar las condiciones y estructuras, y simplificar las
condiciones del bucle [40].
Otro concepto relacionado con la legibilidad del software, son las convenciones de código,
las cuales son un conjunto de reglas de codificación que adoptan algunos desarrolladores
de software para escribir código fuente [26]. El beneficio de aplicarlo es que facilitará la
lectura y comprensión del mismo en las tareas de mantenimiento [26]. Esas reglas se
dividen en las siguientes categorías: estructura del archivo, identación, comentarios,
espacios en blanco, nombre de identificadores, declaraciones y prácticas específicas para
lenguajes de programación [26], las cuales coinciden con las características que permiten
evaluar la legibilidad en el software, presentadas en el Capítulo 4. Por lo anterior, Chen et
al. (2018) [26], desarrollaron la herramienta web ProgEdu, con el objetivo de apoyar el
aprendizaje en los cursos de programación en lenguaje Java, evaluando el cumplimiento
de las convenciones en el código fuente. El experimento, que consistió en el proceso de
aprendizaje iterativo, expuesto en la Figura 17, fue realizado con estudiantes universitarios,
en una institución educativa de Taiwán [26].
Capítulo 6. Retos y aplicaciones de la legibilidad del software 117
Los instructores y los estudiantes podían ingresar a ProgEdu, donde podían consultar su
asignación y ver de forma amigable los resultados de la revisión del código y la evolución
en el trabajo [26]. Al finalizar el experimento, se encontró que las violaciones de
codificación más comunes fueron de identación y espacios en blanco para los programas
en lenguaje Java; y la identación, espacios en blanco y nombre de identificadores para las
aplicaciones móviles en Java [26].
del trabajo, realizaron una RSL de los trabajos relacionados con la legibilidad del software
y al final, obtuvieron un listado con las mejores prácticas para escribir código fuente legible,
la cual denominaron la “lista compilada de buenas prácticas de la legibilidad del software”
[43]. La lista se muestra a continuación, dividida en dos tablas: la primera tabla,
denominada Tabla 30, contiene las especificaciones que son consideradas como buenas
prácticas de legibilidad en el código fuente, mientras que la segunda tabla, denominada
Tabla 32, contiene las que representan las malas prácticas de legibilidad al escribir código
fuente. La lista de prácticas fue complementada con aportes de los autores Dos Santos et
al. (2018) [30], Alawad et al. (2018) [5] y Chen et al. (2018) [26].
Tabla 30. Lista compilada de buenas prácticas en la escritura de código fuente. Fuente
principal: Sampaio y Barbosa (2016) [43].
BUENAS PRÁCTICAS
10 El operador de asignación igual (=), debe incluir un espacio en blanco antes y [43]
después.
11 Espacios en blanco entre los argumentos y/o parámetros de funciones. [26][43]
BUENAS PRÁCTICAS
31 Evite escribir varias declaraciones separadas por un ";" en una sola línea. Cada [30]
declaración debe estar en una línea propia;
32 Evite, siempre que sea posible, el uso de nombres completos para hacer referencia [30]
a los nombres de clase en el código; use cláusulas de importación en su lugar.
33 Las llamadas frecuentes a las subpropiedades de las propiedades de los miembros [30]
de la clase deben hacerse almacenando una referencia a esa subpropiedad,
evitando múltiples declaraciones que contengan largas cadenas de objetos y
subpropiedades
34 Los nombres de los identificadores deben usar palabras del diccionario [30]
La Tabla 30, está compuesta por tres campos: el primero es una numeración de la lista,
que solo es utilizada para mostrar orden, pero no representa ningún tipo de relevancia. La
segunda columna es la descripción de la práctica, y la tercera columna, denominada
referencia, indica la fuente de la literatura en la cual se encontró mención de la práctica.
Algunas de las prácticas mencionadas, corresponden a características que debe tener el
código fuente para ser considerado legible [43]. En la revisión de literatura desarrollada por
Sampaio y Barbosa [43], encontraron que las prácticas con mayor número de referencias
fueron: longitud máxima de línea, identación de líneas, líneas en blanco, nombres
apropiados para los identificadores, longitud máxima del identificador, cohesión de los
120 Métricas de legibilidad del software: una revisión sistemática de literatura
Para el lenguaje de servicios web WSDL, De Renzis et al. (2016) [29], propusieron las
buenas prácticas expuestas en la Tabla 31.
Tabla 31. Buenas prácticas para el lenguaje WSDL. Obtenido de la fuente [29].
No. Práctica
1 Convenciones de nomenclatura adecuadas.
2 Identificadores descriptivos para las operaciones, mensajes y los parámetros, que representan
la funcionalidad de una operación.
3 Conceptos específicos para reducir la ambigüedad.
4 Nombres de parámetros no crípticos, que describen el uso.
5 Nombres de mensajes relacionados a sus operaciones.
6 Acrónimos y abreviaturas familiares, que se auto describen.
Continuando con el listado, se presenta la Tabla 32, que corresponde a las malas prácticas
de legibilidad del software, las cuales indican lo que no debe tener un código fuente para
que sea considerado como legible.
Tabla 32. Lista compilada de malas prácticas en la escritura de código fuente. Fuente
principal: Sampaio y Barbosa (2016) [43].
MALAS PRÁCTICAS
No. Descripción Referencia
1 Método largo. [43]
2 Lista larga de parámetros. [43]
3 Código idéntico o muy similar en más de una ubicación. [43]
4 Nombres de identificadores en nombres de métodos. [43]
5 Nombres de métodos que no describen lo que hace el método. [43]
Por otra parte, en el 2010 Butler et al. [20], realizaron un estudio que evaluó la importancia
de los nombres de los identificadores en el código fuente, los cuales son creados por
diseñadores y programadores, y reflejan su comprensión, cognición e idiosincrasia sobre
el software [20]. También indicaron que, una pobre calidad en los nombres de los
identificadores es una barrera para la comprensión del programa, lo que indica falta de
entendimiento del problema o la solución dada en el código fuente, lo que se traduce
finalmente en una pobre calidad del software [20]. Con el fin de poder identificar nombres
de calidad, Butler et al. se enfocaron en el uso de los elementos del lenguaje natural,
ignorando el tema de contenido semántico y el uso de la gramática [20]. Como resultado
lograron obtener una guía de estilo con recomendaciones para aplicar a los nombres de
los identificadores, las cuales se listan a continuación en la Tabla 33.
Tabla 33. Guía de estilo recomendada para los identificadores. Obtenida de la fuente [20].
No. Recomendación
1 Palabras excesivas: recomiendan que un nombre compuesto tenga máximo 4 palabras.
2 Longitud del nombre.
3 Anomalía de la convención del nombre.
4 Palabras que no están en el diccionario: de acuerdo al idioma natal del programador será un
diccionario de palabras en inglés u otro idioma.
5 Número de palabras: un nombre compuesto debe crearse con 2 a 4 palabras.
6 Nombre numérico para un identificador: El nombre de un identificador no debe tener exclusivamente
palabras que indiquen un valor, por ejemplo, forty_one.
7 Nombres cortos: no deberían tener menos de 8 caracteres a excepción de una lista de nombres
personalizados.
8 Tipo de codificación: no debería usarse notación húngara o similar.
6.2 Retos
En la literatura revisada, algunos autores mencionaron deficiencias en sus propuestas, así
como posibles mejoras que pueden realizar ellos u otros investigadores que deseen
continuar con los estudios. Por ello, en la Tabla 34, se presenta una síntesis de los retos
que deben afrontar los autores que deseen continuar con los estudios relacionados a la
legibilidad del software.
122 Métricas de legibilidad del software: una revisión sistemática de literatura
Tabla 34. Retos identificados para los trabajos futuros de legibilidad del software.
En la Tabla 34, se presentan los retos ordenados por número de menciones, presentando
desde el más relevante, hasta el menos relevante. En primer lugar, se encuentra el reto de
desarrollar una herramienta, algoritmo o Plugin que, pueda ser incorporado a algún IDE de
desarrollo, para evaluar la legibilidad del software en tiempo de desarrollo, lo cual, sería la
solución definitiva a la problemática identificada con la legibilidad del software. El reto
número 2, indica que es necesario que se sigan realizando estudios de investigación
asociados a la predicción de la legibilidad del software, ya que aún no se cuenta con un
modelo definitivo. El reto número 3, hace referencia a que los modelos de predicción de
legibilidad propuestos hasta la fecha, han estado principalmente enfocados al lenguaje de
programación Java, y aunque Dorn [6], incorporó en su modelo los lenguajes Python y
CUDA, quedan muchos lenguajes de programación ampliamente utilizados por fuera de
estos estudios. Para el reto 7, se presenta la necesidad de diversificar más el grupo de
participantes que ayudan con la anotación de los datos, pues, a pesar de que los
investigadores intentaron hacerlo, eligiendo a estudiantes universitarios del área de
Capítulo 6. Retos y aplicaciones de la legibilidad del software 123
Las aplicaciones, hacen referencia a los usos que algunos autores realizaron con el tema
de legibilidad del software, para apoyar o solucionar alguna problemática de la industria
del software o la academia.
Las aplicaciones más relevantes encontradas fueron: la creación de modelos para medir
la legibilidad del software de forma automática [1] [7] [10] [6] [14] [25] [27] [33] [35] [36][42]
[45]; y el apoyo a las instituciones de educación superior, con el aprendizaje de buenas
prácticas de legibilidad [26] [28] [34] [40] [43].
Los retos más importantes fueron: 1) desarrollar una herramienta, algoritmo o Plugin que,
pueda ser incorporado a algún IDE de desarrollo, para evaluar la legibilidad del software
en tiempo de desarrollo, lo cual, sería la solución definitiva a la problemática identificada
con la legibilidad del software [5][1] [7] [10] [6] [27] [32] [35] [36] [45]; 2) Continuar las
investigaciones y proponer mejores métricas para evaluar la legibilidad del software [5][1]
[7] [10] [6] [11] [25] [36] [45]; y 3) Diversificar los lenguajes de programación de los
conjuntos de datos utilizados en los estudios, teniendo en cuenta que casi todos los
fragmentos corresponden al lenguaje Java [5] [25] [26] [27] [28][31] [35] [45].
124 Métricas de legibilidad del software: una revisión sistemática de literatura
7 Capítulo 7. Conclusiones y
recomendaciones
7.1 Conclusiones
Este trabajo final de maestría, realizó una revisión sistemática de literatura sobre las
métricas de legibilidad del software, para lo cual se diseñó e implementó una estrategia de
búsqueda, la cual, luego de ser ejecutada en 5 bases de datos bibliográficas, permitió
obtener y seleccionar 30 documentos finales, con información relevante de las
características del código fuente que permiten evaluar la legibilidad del mismo, las
métricas, los modelos para la evaluación automática, así como determinar la evolución que
han tenido las investigaciones sobre el tema. Adicionalmente, se identificaron los retos y
aplicaciones propuestos por investigadores de varios lugares del mundo.
Las características del software utilizadas para medir la legibilidad del código fuente, son
los espacios en blanco (identación), comentarios, LOC, número de paréntesis, número de
operadores aritméticos, entropía, volumen del programa, número y nombre de los
identificadores, estructuras de control y número de palabras clave.
Xu et al. (2017) [42], Choi et al. (2018) y Mi et al. (2018) [35] [36]. Los modelos utilizaron
técnicas de aprendizaje de máquina, entrenando clasificadores de forma supervisada
como red de Bayes y aprendizaje profundo. Otros modelos, usaron técnicas de análisis
léxico, tomando al código fuente como un texto. Para evaluar la relación de las
características propuestas con la percepción final de legibilidad, se usaron técnicas de
análisis de correlación.
Las aplicaciones que se le está dando a la legibilidad del software, según la literatura
encontrada, fueron los modelos automáticos de legibilidad, al apoyo del aprendizaje de
buenas prácticas y estilos de embellecimiento en las instituciones de educación superior
[32] [34] [41], el impacto de las características de legibilidad en la carga cognitiva del lector
[31] [32], y el uso para identificar los perfiles de los programadores en un proceso de
reclutamiento [12].
Los retos identificados son, desarrollar una herramienta, algoritmo o Plugin que, pueda ser
incorporado a algún IDE de desarrollo, para evaluar la legibilidad del software en tiempo
de desarrollo, lo cual, sería la solución definitiva a la problemática identificada con la
legibilidad del software. Es necesario continuar con los estudios de investigación asociados
a la predicción de la legibilidad del software, ya que aún no se cuenta con el modelo, las
características y las métricas definitivas. Teniendo en cuenta, que los modelos de
predicción de legibilidad propuestos hasta la fecha, han estado principalmente enfocados
al lenguaje de programación Java, es necesario incorporar otros lenguajes de
programación.
Los resultados presentados en este documento, brindan a los futuros investigadores una
fuente útil de información, reuniendo los datos y los estudios realizados hasta la fecha,
sobre las métricas de legibilidad del software, para que puedan dar continuidad a las
investigaciones.
7.2 Recomendaciones
Los investigadores que deseen continuar con los estudios, pueden realizar una replicación
de los mismos, pero utilizando nuevos conjuntos de datos que correspondan a lenguajes
Capítulo 7. Conclusiones y recomendaciones 127
Referencias
[1] R. P. L. Buse and W. R. Weimer, “Learning a Metric for Code Readability,” IEEE
Trans. Softw. Eng., vol. 36, no. 4, pp. 546–558, Jul. 2010.
[2] Jose Luis Martinez Flores, “Metricas de software en lenguajes de cuarta generacion,”
universidad autonoma de nuevo leon, 1994.
[4] E. Irrazábal and J. Garzás, “Revista española de innovación, calidad e ingeniería del
software.,” Rev. española innovación, Calid. e Ing. del Softw., vol. 6, no. 3, 2010.
[5] D. Alawad, M. Panta, M. Zibran, and R. Islam, “An Empirical Study of the
Relationships between Code Readability and Software Complexity,” 2018.
[11] U. A. Mannan, I. Ahmed, and A. Sarma, “Towards understanding code readability and
Referencias 129
its impact on design quality,” in Proceedings of the 4th ACM SIGSOFT International
Workshop on NLP for Software Engineering - NL4SE 2018, 2018, pp. 18–21.
[14] M. Akour and B. Falah, “Application domain and programming language readability
yardsticks,” in 2016 7th International Conference on Computer Science and
Information Technology (CSIT), 2016, pp. 1–6.
[16] G. Mena Mendoza, “ISO 9126-3: Métricas Internas de la Calidad del Producto de
Software,” 2006. [Online]. Available:
http://mena.com.mx/gonzalo/maestria/calidad/presenta/iso_9126-3/. [Accessed: 01-
Apr-2018].
[18] J. Borstler and B. Paech, “The Role of Method Chains and Comments in Software
Readability and Comprehension—An Experiment,” IEEE Trans. Softw. Eng., vol. 42,
no. 9, pp. 886–898, Sep. 2016.
[20] S. Butler, M. Wermelinger, Yijun Yu, and H. Sharp, “Exploring the Influence of
Identifier Names on Code Quality: An Empirical Study,” in 2010 14th European
Conference on Software Maintenance and Reengineering, 2010, pp. 156–165.
[22] B. Kitchenham, “Procedures for performing systematic reviews,” Br. J. Manag., vol.
14, no. 0, pp. 207–222, 2004.
[24] M. Allamanis, E. T. Barr, C. Bird, and C. Sutton, “Suggesting accurate method and
class names,” in Proceedings of the 2015 10th Joint Meeting on Foundations of
Software Engineering - ESEC/FSE 2015, 2015, pp. 38–49.
[26] H. M. Chen, W. H. Chen, and C. C. Lee, “An automated assessment system for
analysis of coding convention violations in Java programming assignments*,” J. Inf.
Sci. Eng., vol. 34, no. 5, pp. 1203–1221, 2018.
[27] S. Choi, S. Kim, J.-H. Lee, J. Kim, and J.-Y. Choi, “Measuring the Extent of Source
Code Readability Using Regression Analysis,” Springer, Cham, 2018, pp. 410–421.
[28] R. Coleman, “Aesthetics Versus Readability of Source Code,” Int. J. Adv. Comput.
Sci. Appl., vol. 9, no. 9, pp. 12–18, 2018.
[31] S. Fakhoury, Y. Ma, V. Arnaoudova, and O. Adesope, “The effect of poor source code
lexicon and readability on developers’ cognitive load,” in Proceedings of the 26th
Conference on Program Comprehension - ICPC ’18, 2018, pp. 286–296.
[32] L. Frunzio, B. Lin, M. Lanza, and G. Bavota, “RETICULA: Real-time code quality
assessment,” in 2018 IEEE 25th International Conference on Software Analysis,
Evolution and Reengineering (SANER), 2018, pp. 542–546.
[33] Y. Liu, X. Sun, and Y. Duan, “Analyzing program readability based on WordNet,” in
Proceedings of the 19th International Conference on Evaluation and Assessment in
Software Engineering - EASE ’15, 2015, pp. 1–2.
[34] Q. Mi, J. Keung, X. Mei, Y. Xiao, and W. K. Chan, “A Gamification Technique for
Motivating Students to Learn Code Readability in Software Engineering,” in 2018
International Symposium on Educational Technology (ISET), 2018, pp. 250–254.
[35] Q. Mi, J. Keung, Y. Xiao, S. Mensah, and Y. Gao, “Improving code readability
classification using convolutional neural networks,” Inf. Softw. Technol., vol. 104, pp.
60–71, Dec. 2018.
[36] Q. Mi, J. Keung, Y. Xiao, S. Mensah, and X. Mei, “An Inception Architecture-Based
Model for Improving Code Readability Classification,” in Proceedings of the 22nd
International Conference on Evaluation and Assessment in Software Engineering
2018 - EASE’18, 2018, pp. 139–144.
[37] Q. Mi, J. Keung, and Y. Yu, “Measuring the Stylistic Inconsistency in Software
Projects using Hierarchical Agglomerative Clustering,” in Proceedings of the The 12th
International Conference on Predictive Models and Data Analytics in Software
Engineering - PROMISE 2016, 2016, pp. 1–10.
[38] A. Pahal and R. S. Chillar, “Code Readability: A Review of Metrics for Software
Referencias 131
[40] T. Sedano, “Code Readability Testing, an Empirical Study,” in 2016 IEEE 29th
International Conference on Software Engineering Education and Training (CSEET),
2016, pp. 111–117.
[42] W. Xu, D. Xu, and L. Deng, “Measurement of Source Code Readability Using Word
Concreteness and Memory Retention of Variable Names,” in 2017 IEEE 41st Annual
Computer Software and Applications Conference (COMPSAC), 2017, pp. 33–38.
[43] I. B. Sampaio and L. Barbosa, “Software readability practices and the importance of
their teaching,” in 2016 7th International Conference on Information and
Communication Systems (ICICS), 2016, pp. 304–309.