Resumen: La calidad del software es un aspecto ligado directamente a los costos futuros de mantenimiento y, generalmente, se cuantifica mediante métricas de calidad de los productos de software. Uno de los aspectos a tener en cuenta para evaluar la calidad del software es su mantenibilidad, ya que tiene un alto impacto sobre los costos totales de los proyectos de software. En particular, se estima que el 70% del tiempo de mantenimiento se destina a comprender el código, por lo que resulta importante poder medir la legibilidad de un fragmento de código fuente adecuadamente. La legibilidad se define como la facilidad con la que una persona puede leer y comprender un fragmento de código escrito por otra persona. Esta característica es crucial para facilitar la compresión del código durante las tareas de mantenimiento de software, por lo que resulta necesario poder medir la legibilidad del código fuente. Por lo tanto, a lo largo de los últimos años, los investigadores en el área han propuesto múltiples métricas para medir la legibilidad del código fuente. No obstante, sigue siendo un reto poder evaluar con precisión la legibilidad del código fuente de una forma ampliamente aceptada. Por ello, es indispensable dar continuidad a este tipo de investigaciones y, para esto, es necesario conocer los avances recientes. Este artículo presenta una síntesis y análisis de las métricas de legibilidad de código, mediante una revisión sistemática de literatura, mostrando una recopilación de las características y los métodos utilizados para su medición. Los resultados de este trabajo serán de utilidad para que los investigadores en el área puedan proponer nuevas métricas de legibilidad del código fuente.
Palabras clave:legibilidad de códigolegibilidad de código,código fuentecódigo fuente,calidad de softwarecalidad de software,mantenibilidadmantenibilidad,métricasmétricas,ingeniería de softwareingeniería de software.
Abstract: Software quality is an aspect directly linked to future maintenance costs, and is generally quantified by means of quality metrics of the software products. One of the main aspects to evaluate software quality is its maintainability, since it has a high impact on the total costs of software projects. In particular, it is estimated that 70% of the maintenance time is dedicated to understand the code, so it is important to be able to measure the readability of a source code fragment properly. Readability is defined as the ease with which a person can read and understand a piece of code written by another person, this feature is crucial to facilitate the understanding of the code during software maintenance tasks. In this sense, it is necessary to be able to measure the readability of the source code. Therefore, over the past few years, researchers in the area have proposed multiple metrics to measure the readability of source code. However, it remains a challenge to be able to accurately assess the readability of source code in a widely accepted way. Therefore, it is essential to give continuity to this type of research and, for this, it is necessary to know the most recent advances. This paper presents a synthesis and analysis of code readability metrics, through a systematic review of literature, showing a compilation of the characteristics and methods used for their measurement. Results of this work will be useful for researchers in the area to propose new source code readability metrics.
Keywords: software readability, source code, software quality, maintainability, metrics, software engineering.
Resumo: A qualidade do software é um aspecto ligado diretamente aos custos futuros de manutenção e, geralmente, quantifica-se mediante métricas de qualidade dos produtos de software. Um dos aspectos a ter em conta para avaliar a qualidade do software é sua manutenibilidade, já que tem um alto impacto sobre os custos totais dos projetos de software. Em particular, estima-se que 70% do tempo de manutenção destina-se a compreender o código, pelo que resulta importante poder medir a legibilidade de um fragmento de código fonte adequadamente. A legibilidade define-se como a facilidade com a que uma pessoa pode ler e compreender um fragmento de código escrito por outra pessoa. Esta característica é crucial para facilitar a compreensão do código durante as tarefas de manutenção de software, pelo que resulta necessário poder medir a legibilidade do código fonte. Portanto, ao longo dos últimos anos, os pesquisadores na área têm proposto múltiplas métricas para medir a legibilidade do código fonte. Porém, segue sendo um desafio poder avaliar com precisão a legibilidade do código fonte de uma forma amplamente aceita. Por isso, é indispensável dar continuidade a este tipo de pesquisas e, para isto, é necessário conhecer os avanços recentes. Este artigo apresenta uma síntese e análise das métricas de legibilidade de código, mediante uma revisão sistemática de literatura, mostrando uma recopilação das características e os métodos utilizados para sua medição. Os resultados deste trabalho serão de utilidade para que os pesquisadores na área possam propor novas métricas de legibilidade do código fonte.
Palavras-chave: legibilidade de código, código fonte, qualidade de software, manutenibilidade, métricas, engenharia de software.
Papers
Métricas de legibilidad del código fuente: revisión sistemática de literatura
Software Readability Metrics: A Systematic Literature Review
Métricas de legibilidade do código fonte: revisão sistemática de literatura
Recepción: 30 Junio 2020
Aprobación: 17 Septiembre 2020
Publicación: 18 Septiembre 2020
La calidad en los productos de software es de gran importancia, principalmente, por los altos costos que implica modificar un programa si es de baja calidad [1]. Dentro de la labor de mantenimiento, los desarrolladores gastan aproximadamente 70% de su tiempo tratando de comprender el código fuente, lo cual podría disminuir si el código fuera más legible [2]. La legibilidad se refiere a la facilidad con la que una persona puede leer y comprender un fragmento de código [1, 3]. Si un producto de software es poco legible, su calidad se considera baja y, por consiguiente, el costo de mantenimiento será mayor y los desarrolladores gastarán más tiempo [1, 4]. Por ello, es importante poder identificar cuáles son las métricas para medir la legibilidad del código con el fin de automatizar su medición [1].
Aún no se cuenta con un método definitivo que permita evaluar la legibilidad de un fragmento de código fuente con confianza [2, 5]. Por lo anterior, es necesario identificar este tipo de características mediante un análisis sistemático de los trabajos relacionados con la medición de la legibilidad del código fuente, ofreciendo así una base sólida para futuras investigaciones en el área. En este contexto, este artículo presenta los resultados obtenidos mediante una revisión sistemática de literatura, entregando una recopilación de las características del código fuente que más influyen en la legibilidad, las métricas utilizadas para su medición, los métodos automáticos de medición, los retos actuales y las aplicaciones de interés. En particular, en este artículo se propone dar respuesta a las siguientes preguntas de investigación:
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 código fuente?
El artículo está organizado de la siguiente manera: la Sección II presenta el proceso realizado para llevar a cabo la revisión sistemática de literatura; la Sección III presenta los resultados y discute las respuestas a cada una de las preguntas de investigación. Por último, la Sección IV concluye el trabajo.
La revisión sistemática de literatura, abreviada como RSL (o SLR en inglés), es un método propuesto por Kitchenham, que permite realizar una síntesis de los estudios científicos de calidad sobre un tema específico o pregunta de investigación [6]. El proceso realizado en la RSL se estructuró en cuatro fases: estrategia de búsqueda, recolección de documentos, revisión de resultados de la búsqueda, y análisis y presentación de resultados.
Para la búsqueda se utilizaron las palabras clave: software, source code, metric, model, readability y classification. Las bases de datos bibliográficas utilizadas fueron: WoS - Web of Science, Scopus, Google Scholar, IEEExplore y ACM Digital Library. Los criterios de inclusión utilizados para la selección de documentos fueron: idioma del documento (español o inglés) y fecha de publicación (entre el 1 de enero del año 2015 y el 23 de abril del año 2019). Las cadenas de búsqueda definidas y utilizadas en la búsqueda fueron las descritas en la Tabla 1.
Por otra parte, algunos de los factores de calidad evaluados para los documentos fueron los siguientes: tiene objetivo del estudio; descripción clara del contexto del problema; tiene sección de resultados; es reproducible; describe al menos 1 métrica, 1 método o 1 característica; referencias actualizadas; responde las preguntas de investigación. El formato completo de lista de chequeo utilizado y diligenciado en el proceso de extracción de datos está disponible en el repositorio público de GitHub https://github.com/sofi876/MetricasLegibilidadSW, así como los formatos diseñados y utilizados en el proceso de extracción de datos. Para cada estudio se evaluó si cumplía con los factores de calidad, y fueron rechazados aquellos que no cumplían con el 80%.
En esta fase se realizó el proceso de recolección de documentos, utilizando como guía la estrategia de búsqueda definida anteriormente. Todo el proceso de recolección se documentó de forma rigurosa, indicando la razón de exclusión o inclusión de documentos, usando el gestor de referencias Mendeley.
En la Tabla 2 se muestran los resultados obtenidos al realizar la búsqueda. La columna “Selección 1” se refiere a los documentos seleccionados en un primer filtro. La columna “Selección 2” son los seleccionados después de un segundo filtro más riguroso.
Posteriormente se eliminaron los duplicados y se obtuvieron 33 documentos únicos. Se realizó un tercer filtro más riguroso, obteniendo 24 seleccionados, pero se adicionaron 6 documentos que, pese a no cumplir con el criterio de fecha de publicación, son importantes porque se consideran trabajos seminales en el área, obteniendo así 30 documentos.
La fase final de análisis y presentación de resultados se llevó a cabo con los 30 seleccionados y se discuten en las siguientes secciones, dando respuesta a las preguntas de investigación.
Las características hacen referencia a los aspectos del código fuente que tienen mayor influencia con la percepción de legibilidad. Los autores de los estudios seleccionados evaluaron un grupo de características, y propusieron unas métricas para ellas que permitieran medir la legibilidad del código fuente. En la Tabla 3 se presenta el listado de algunas características encontradas que obtuvieron mejores resultados en relación al juicio de legibilidad. El nivel de relación de la característica con la legibilidad está representado por A (alto), M (medio) y B (bajo). Ese nivel de relación proviene de los resultados obtenidos por los autores en sus estudios, y refleja la importancia de la característica con la legibilidad del código. El listado de características se presenta en orden de relevancia.
Por otra parte, las métricas de legibilidad del software se clasificaron en dos tipos: las simples, que consisten en tomar la medida por un conteo de alguna de las características presentadas; y las compuestas, que requieren de una ecuación más elaborada. Las métricas simples encontradas son: número promedio y máximo de espacios en blanco (identación), número promedio de comentarios, longitud promedio y máxima de línea, número promedio de paréntesis, número promedio de operadores aritméticos, volumen del programa, número promedio de identificadores, número de líneas de comentarios dentro de un método (LCM), número máximo de ciclos anidados, longitud de los comentarios y número promedio de palabras clave. Las métricas compuestas más relevantes se presentan en la Tabla 4.
De acuerdo con la literatura, las métricas simples que mejores resultados han reportado para medir la legibilidad del código fuente han sido: 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. Además, las métricas de tipo compuestas que mejores resultados han obtenido son: 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 [25].
En la Tabla 5 se presentan los métodos utilizados en las investigaciones para diferentes actividades relacionadas, directa o indirectamente, con los procesos que permiten evaluar la legibilidad en el código fuente. En la primera columna se describen los usos de estos métodos identificados en los estudios, en la segunda columna se encuentran los métodos que fueron hallados en los estudios seleccionados en la RSL.
El aprendizaje de máquina supervisado ha permitido obtener métodos para evaluar automáticamente la legibilidad del código fuente, que, a pesar de no ser métodos definitivos aún, han logrado una precisión por encima del 80%. Los investigadores interesados en continuar con los trabajos podrían usar las mismas técnicas utilizadas en la literatura, tales como random forest, redes neuronales o el aprendizaje profundo, aplicándolas de forma individual o combinadas. Se recomienda la exploración de modelos basados en redes neuronales profundas, teniendo en cuenta que el aprendizaje profundo permite el entrenamiento y clasificación sin que sea necesario seleccionar las características del código fuente de antemano. Los resultados recientes más prometedores apuntan en esta dirección. Por otro lado, si lo que se desea es continuar con la búsqueda de las características del código fuente que permiten medir su legibilidad, se pueden utilizar las técnicas de aprendizaje de máquina no supervisado, como el clustering (agrupación), o alguna de las técnicas de regresión para el análisis de la correlación entre la característica y la predicción de legibilidad.
Por otra parte, como resultado adicional de la RSL, a continuación, se listan los repositorios de software identificados que contienen fragmentos de código fuente útiles para nuevos trabajos:
Asimismo, se presentan repositorios de software que contienen herramientas computacionales utilizadas en los estudios:
Los autores de los estudios seleccionados en la RSL presentaron en sus investigaciones algunas aplicaciones de interés para la legibilidad del código fuente, las cuales se encuentran sintetizadas a continuación:
Las más relevantes son el desarrollo de modelos computacionales para medir la legibilidad del código fuente de forma automática y el apoyo a las instituciones de educación superior con la enseñanza de buenas prácticas de legibilidad de software [17, 19, 27].
Por otra parte, algunos autores mencionaron deficiencias en sus propuestas, así como posibles mejoras que pueden realizar ellos u otros investigadores que deseen continuar con los estudios, los cuales serían los retos. A continuación, se presenta una síntesis de los retos.
La revisión sistemática de literatura realizada permitió obtener y seleccionar 30 documentos finales con información relevante de las características del código fuente relacionadas con su legibilidad, las métricas que permiten medirla, y los métodos para su evaluación automática. Adicionalmente, se identificaron los retos y aplicaciones propuestos por investigadores en el área. Las características del software identificadas como más relevantes 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 [1, 7, 10, 12]. Las métricas más relevantes fueron el conteo de espacios en blanco, la métrica de Posnett (PHD) [3], WSCR para el código fuente en lenguaje WSDL (servicios web) y la legibilidad de los comentarios (CR) [25] .
La mayoría de los métodos utilizados para determinar la legibilidad de software utilizaron técnicas de aprendizaje de máquina, entrenando clasificadores de forma supervisada [1, 19, 25]. Otros métodos usaron técnicas de análisis léxico, tomando al código fuente como un texto [18, 28]. No obstante, existen evidencias recientes que señalan el camino a seguir usando métodos automáticos basados en redes neuronales profundas [20], donde no es necesario proponer características. Las aplicaciones más relevantes encontradas fueron los modelos automáticos de legibilidad [20, 25] y el apoyo del aprendizaje de buenas prácticas [17, 27]. Los retos más relevantes fueron: 1) desarrollar un algoritmo que pueda ser incorporado a algún IDE para evaluar la legibilidad del código fuente en tiempo de desarrollo; 2) diversificar los lenguajes de programación usados, aparte de Java, y 3) continuar con las investigaciones, ya que aún no se cuenta con el método, las características y las métricas definitivas. Puede consultar información adicional en el repositorio: https://github.com/sofi876/MetricasLegibilidadSW/tree/master/Tablas
Citación: I.-S. Echavarría-Flórez, F. Restrepo-Calle, “Software Readability Metrics: A Systematic Literature Review,” Revista Facultad de Ingeniería, vol. 29 (54), e11756, 2020. https://doi.org/10.19053/01211129.v29.n54.2020.11756
Felipe Restrepo-Calle: Conceptualización, Metodología, Supervisión, Validación, Redacción – revisión y edición.