← Últimos artículos
💻 computer science

Detecting Object-Oriented Code Smells through Social Network Analysis

Este artículo propone un enfoque novedoso para detectar olores de código orientados a objetos mediante el modelado de los componentes de software y sus interacciones como redes sociales y la aplicación de métricas de Análisis de Redes Sociales (SNA) a cuatro proyectos de código abierto en Java para descubrir fallos de diseño ocultos.

Autores originales: Mohamed Maddeh

Publicado 2026-09-29
📖 5 min de lectura🧠 Análisis profundo

Autores originales: Mohamed Maddeh

Artículo original bajo licencia CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). ✨ Esta es una explicación generada por IA del artículo a continuación. No ha sido escrita ni avalada por los autores. Para mayor precisión técnica, consulte el artículo original. Leer descargo de responsabilidad completo

El software se construye a partir de innumerables pequeñas instrucciones que trabajan juntas, de forma muy parecida a como una ciudad se construye a partir de edificios individuales y las carreteras que los conectan. Cuando una ciudad está bien planificada, el tráfico fluye sin problemas y se pueden añadir nuevos vecindarios sin caos. En el mundo de la programación informática, esta organización se denomina "diseño orientado a objetos", donde el código se agrupa en unidades autónomas que interactúan entre sí. Sin embargo, así como una ciudad puede sufrir de intersecciones congestionadas o edificios abandonados, el software puede desarrollar fallos estructurales conocidos como "olores de código" (code smells). Estos no son errores que causen que un programa se bloquee, sino más bien señales de que el diseño se está volviendo desordenado, difícil de entender o difícil de reparar. Si no se controlan, estos olores hacen que el software sea frágil y costoso de mantener, obligando a los desarrolladores a pasar más tiempo desenredando nudos que construyendo nuevas funciones.

Durante décadas, investigadores han intentado encontrar estos fallos automáticamente, a menudo contando líneas de código o midiendo cuántas variables utiliza una sección individual. Aunque útiles, estos métodos tradicionales a veces pasan por alto el panorama general, al no ser capaces de ver cómo diferentes partes del sistema dependen unas de otras de formas complejas. Un nuevo enfoque, detallado en un estudio reciente de Mohamed Maddeh, de la Universidad de King Saud, sugiere observar el software no solo como una colección de archivos, sino como una red social. En esta visión, cada clase de código es una persona, y cada vez que una pieza de código utiliza a otra, es una interacción social. Al aplicar las mismas herramientas matemáticas utilizadas para mapear amistades e influencia en las comunidades humanas, el investigador desarrolló una forma de detectar estas debilidades estructurales con mayor claridad.

El estudio se centró en cuatro proyectos de software de código abierto bien conocidos escritos en el lenguaje Java: JUnit, Spring, Apache Commons BCEL y Guava. Estos proyectos varían significamente en tamaño, desde unos pocos cientos hasta más de cuatro mil unidades de código distintas. Para analizarlos, el investigador primero extrajo cada clase dentro de estos proyectos y mapeó exactamente cómo interactuaban. Si una clase necesitaba datos o una función de otra, se trazaba una línea entre ellas, creando una enorme red de conexiones. Esta red fue luego importada en una herramienta de visualización especializada llamada Gephi, que le permitió al investigador ver la estructura completa del software como un único mapa interconectado.

Una vez que el software fue modelado como una red, el investigador aplicó mediciones específicas para identificar los "olores". En una red social, una persona que conoce a todos los demás y se sienta en el centro de muchas conversaciones es altamente conectada. En el software, una clase que interactúa con demasiadas otras clases suele indicar una "Clase Dios" (God Class), una unidad que ha asumido demasiadas responsabilidades y está tratando de hacerlo todo. Por el contrario, una persona que no conoce a nadie y se sienta sola en el borde del mapa representa "Código Muerto" (Dead Code), una pieza de software que ya no se utiliza. Otros patrones, como un grupo de personas que solo hablan entre sí pero nunca con el mundo exterior, o una sola persona que actúa como el único puente entre dos grupos separados, revelaron fallos como "Clases de Datos" (Data Classes) que contienen información sin hacer nada, o "Cirugía de Escopeta" (Shotgun Surgery), donde un solo cambio requiere modificaciones en muchos lugares diferentes.

Los resultados mostraron que este método basado en redes podía filtrar eficazmente la gran mayoría del código que era saludable, dejando a los desarrolladores con una lista mucho más pequeña de sospechosos para inspeccionar. En el proyecto más grande estudiado, que contenía más de cuatro mil clases, el método señaló aproximadamente el 17 por ciento como potencialmente problemático. En otro proyecto con casi mil clases, identificó alrededor del 35 por ciento que necesitaba atención. Las herramientas de visualización hicieron que estos hallazgos fueran inmediatos e intuitivos; las "Clases Dios" aparecían como grandes centros brillantes en el centro del mapa, mientras que el "Código Muerto" y las "clases no utilizadas" aparecían como nodos pequeños y tenues desplazados hacia los bordes mismos, a menudo aislados en sus propias islas desconectadas.

Este enfoque no pretende reemplazar el juicio humano ni identificar perfectamente cada uno de los fallos sin error. En su lugar, sirve como una poderosa herramienta de triaje, una forma de reducir la abrumadora tarea de revisar todo un código base a una lista manejable de las partes estructuralmente más inusuales. Al centrarse en las relaciones entre las piezas de código en lugar de solo en su contenido interno, el método ofrece una perspectiva fresca sobre un problema antiguo. Sugiere que la salud de un sistema de software es a menudo visible en el patrón de sus conexiones, y que al mapear estos patrones, los desarrolladores pueden encontrar las debilidades ocultas que amenazan la estabilidad de sus creaciones digitales antes de que se vuelvan inmanejables.

¿Ahogado en artículos de tu campo?

Recibe resúmenes diarios de los artículos más novedosos que coincidan con tus palabras clave de investigación — con resúmenes técnicos, en tu idioma.

Probar Digest →