PG04_Entidades con defecto - DAAS26-P-C/poolobject GitHub Wiki
En este apartado se presentan un conjunto de entidades de código con defectos identificadas. Para la identificación de defectos se utilizan herramientas específicas (InCode y PMD), herramientas de medición y valores umbrales (SourceMeter y RefactorIT) e inspecciones de código manual.
Por cada instancia del defecto identificada se debe crear una fila con la siguiente información:
C1: Nombre del defecto.
C2: Tipo de la entidad [subsistema|clase|método].
C3: Nombre único (cualificado) de la entidad anómala. Un mismo defecto puede involucrar varias entidades, una fila por cada una.
C4: Rango de líneas de código donde aparece e hiperenlace al código fuente de la entidad del repositorio público
C5: Conjunto de métricas e intervalos utilizados para su identificación si existen.
C6: Otras consultas aplicadas para la detección.
| C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|
| Alta concentración de defectos | Subsistema | org.freeplane.view | Paquete completo | 458 clases, 3302 métodos | InCode |
| Complejidad Estructural | Subsistema | org.freeplane.core | Paquete completo | 511 clases, 2844 métodos | InCode |
| Problemas de diseño en extensiones | Subsistema | org.freeplane.plugins | Paquete completo | 248 clases, 1753 métodos | InCode |
Defectos dentro de clases- Medibles
| C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|
| Clase demasiado grande (Large Class) | Clase | org.freeplane.view.swing.map.cloud.CloudView | Clase completa | Severity = 6, número de métodos elevado | Incode + PMD Rule: TooManyMethod (line 42) |
| Clase demasiado grande (Large Class) | Clase | org.freeplane.core.util.TextUtils | Clase completa, a partir de la línea 20 | Alto número de metodos utilitarios y baja cohesion La clase posee una gran cantidad de metodos, es considerado para su refactorización | Eclipse PMD |
| Clase demasiado larga (Large Class) | Clase | org.freeplane.plugin.script.ScriptEditor | Clase completa | Acumulación de responsabilidades (UI y lógica) y elevado número de métodos | Eclipse PMD + Inspeccion manual |
Defectos dentro de clases- Complejidad innecesaria
| C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|
| Speculative Generality | Clase | org.freeplane.view.swing.map.NodeViewFactory | Clase completa | Presencia de abstracciones innecesarias que no aportan funcionalidad real | Inspección Manual |
| Speculative Generality | Clase | org.freeplane.core.extension.ExtensionController | Clase completa | Diseño excesivamente generalizado para posibles usos futuros no implementados | Inspección Manual |
| Speculative Generality | Clase | org.freeplane.plugin.script.ScriptCondition | Clase completa | Código preparado para extensiones futuras sin uso claro actual | Inspección Manual |
Defectos dentro de clases - Duplicación
| C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|
| Magic Number | Método | org.freeplane.view.swing.map.MapView | Linea 2875 aproximadamente | Uso de valores literales en condiciones | Analisis de PMD (AvoidLiteralsInIfCondition) |
| Magic Number | Método | org.freeplane.core.util.TextUtils | Lineas: 284,286 y 288 | Uso de los valores literales en las condiciones (handle Unicode) | Análisis de PMD en Eclipse (AvoidLiteralsInIfCondition) |
| Magic Number | Método | org.freeplane.plugin.script.ScriptEditor | Linea: 13 | Uso de valores literales directamente en el código. | Análisis de PMD en Eclipse (AvoidLiteralsInIfCondition) |
Defectos dentro de clases - Lógica condicional
| C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|
| Switch Statement | Método | org.freeplane.view.swing.features.menu.FilterMenuBuilder | Varias líneas | Uso de estructuras condicionales complejas que aumentan la complejidad ciclomática | PMD + inspección manual |
| Switch Statement | Método | org.freeplane.core.util.MenuUtils | Varias líneas | Uso de múltiples condiciones que podrían reemplazarse por polimorfismo | PMD + Inspección manual |
| Switch Statement | Método | org.freeplane.plugin.script.ScriptEditor | Varias líneas | Lógica condicional extensa que dificulta la extensibilidad del código | PMD + Inspección manual |
Defectos entre clases - Datos
| C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|
| Data Class | Clase | org.freeplane.view.swing.TextPainter | Empieza en la línea 32 | Baja encapsulación y acceso a muchos datos a través de métodos de acceso de getters/Setters | InCode + Análisis de PMD |
| Data Class | Clase | org.freeplane.core.util.IndexPair | Líneas aproximadas: De la 52-87 | NOA bajo, lo que implica baja encapsulación debido a alto número de atributos públicos y una alta cohesión. Uso intensivo de atributos con lógica limitada | InCode + Análisis de PMD |
| Data Class | Clase | org.freeplane.plugin.scripts.addons.AddOnProperties | Lineas: 17-58 | La clase presenta una baja encapsulación al centrarse en el almacenamiento de datos mediante atributos y métodos de acceso (getters/setters) | InCode + Análisis de PMD |
Defectos entre clases – Responsabilidad
| C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|
| Feature Envy | Método | org.freeplane.view.swing.features.time.mindmapmode.nodelist.NodeListWithReplacement.getNodeHoldersAt(int row) | Método completo | Alto acoplamiento y uso intensivo de datos externos | InCode + inspección manual |
| C1 | C2 | C3 | C4 | C5 | C6 |
|---|---|---|---|---|---|
| Método con exceso de responsabilidad (Feature Envy) | Método | org.freeplane.view.swing.features.time.mindmapmode.nodelist.NodeListWithReplacement.getNodeHoldersAt(int row) | Varias líneas | Uso intensivo de datos externos | InCode |
| Método con demasiados parámetros (Data Clumps) | Método |
org.freeplane.view.swing.map.cloud.CloudView.paintDecoration |
Varias líneas | Presencia de número elevado de parámetros relacionados | InCode |
| Método con valores literales | Método | org.freeplane.view.swing.map.NodeView.getTableCellRendererComponent | Varias líneas | Uso de valores numéricos constantes | PMD |
| Método con lógica condicional completa | Método | org.freeplane.view.swing.map.MapView | Varias líneas | Uso de estructuras condicionales complejas | Inspección manual |