Artículo: Enfoque Multiobjetivo de Programación Lineal Entera para la Reducción Automática de la Complejidad Cognitiva del Software
Archivos
Fecha
Editor
Publicado en
Licencia Creative Commons
Resumen
El código de un proyecto de software debe ser claro y conciso para asegurar su mantenibilidad, por lo que es crucial que sea lo más simple posible de entender, para evitar errores y, sobre todo, vulnerabilidades. Una de las métricas de calidad del software es la complejidad cognitiva, que mide el esfuerzo relativo que un desarrollador debe emplear para comprender un código. En este trabajo se utilizará la medida de complejidad cognitiva definida por SonarSource, que considera las sentencias de control de flujo y su nivel de anidamiento. La refactorización de extracción de código a otros métodos se puede plantear como un problema de optimización combinatoria para reducir la complejidad cognitiva del software automáticamente. La principal dificultad radica en que existen distintos criterios para evaluar las soluciones obtenidas, por lo que en este trabajo se modela el problema de reducción de complejidad cognitiva a través de programación lineal entera multiobjetivo. Este planteamiento permite obtener un conjunto de soluciones que reducen la complejidad cognitiva de un fragmento de código dado por debajo de un límite establecido. Además, se equilibran otras características del código, como la propia complejidad cognitiva y el número de líneas existentes entre los diferentes métodos resultantes de las operaciones de refactorización. Por último, se ha desarrollado un algoritmo para resolver el modelo y se ha evaluado sobre un proyecto software de empresa y tres proyectos de código abierto populares. La evaluación experimental muestra que se encuentran soluciones óptimas para el 65,46% de las instancias estudiadas, resolviendo a su vez el 75% de ellas en menos de 52 segundos.


