Please enable JavaScript.
Coggle requires JavaScript to display documents.
Tema 3: Análisis Estático de Código - Coggle Diagram
Tema 3: Análisis Estático de Código
Introducción
Se evalúa el código sin ejecutarlo
Motivación
Si se detecta antes el coste es menor
Codigo más limpio mantenible y seguro
¿Qué es?
Lectura estructurada del código fuente
Encontrar errores
Bad smells y design smells
Mejorar mantenibilidad
Ámbitos del análisis estático
Bugs
Coding standards
Code smells
Métodos largos
Código duplicado o muerto.
Design smells
Clases con múltiples responsabilidades
Acoplamiento excesivo
Métricas de diseño
Abstractness
% de clases abstractas
nivel de abstracción y extensibilidad
Coupling
Responsability: Numero de clases externas que dependen del paquete
Dependence: Clases del paquete que dependen de lcases externas
Inestability:
(d/ r+d)
0, estable, depende poco y muy usado
1, inestable muy dependiente poco dependido
Número de parámetros por método
Muchos parámetros indican complejidad excesiva
LCOM (Lack of Cohesion of Methods)
Mide la cohesión entre métodos
Medidas de código
Complejidad ciclomática
Número de caminos lógicos independientes.
Indica complejidad estructural
Halstead complexity
Métrica basada en operadores y operandos del código.
Estima esfuerzo de comprensión y mantenimiento.
Cantidad de lineas de código
3.5. Modos de análisis
Automático
Integrado en IDEs o CI/CD.
Rápido, repetible, objetiva errores comunes y malas prácticas.
Métodos manuales
Inspecciones
Walktroughs
Participan: programador, moderador, diseñador, tester.
Usan checklists y estándares para guiar la revisión.
Ámbitos de defectos frecuentes en java (Checklist)
Declaración e inicialización de atributos, variables, constantes
Definición e invocación de métodos.
Definición de clases.
Referencias a datos, arrays.
Operaciones
Excepciones
Entrada/Salida.
Code smells y estándares
Code smell:
Indicio de problema estructural
No tiene porque ser un bug pero puede ser indicio de uno
Checklists y coding standards ayudan a sistematizar la revisión.
Inspecciones de código
Objetivo
Detectar errores y áreas de mejora en legibilidad, eficiencia y diseño.
Promover buenas prácticas y mejorar la calidad global del software.
Roles en una inspección
Moderador
Experto técnico, planifica y dirige la sesión
Programador
Autor del código que será analizado
Diseñador
Conoce el diseño general del sistema
Tester
Aporta visión desde la verificación y validación
Preparación
El moderador distribuye:
Especificaciones del diseño.
Listado del programa (código impreso o digital).
Todos los participantes
Estudian el código antes de la sesión.
Ejecución de la inspección
Actividades de la sesión
Presentación de código sentencia a sentencia
Análisis sobre la checklist de errores y malas prácticas
El mod debe garantizar que la sesion es productva y se trabaja en la detección no en la corrección de errores
Después de la sesión
El programador corrige los errores
Actitudes y prácticas recomendadas
Actitud egoless (sin ego)
Confidencialidad
Beneficios colaterales
Feedback directo
Aprendizaje colectivo
Mejora la calidad técnica
Fomenta una cultura de calidad
Análisis estático en la industria y beneficios
Software médico, Centrales nucleares, Aviación…
Beneficios para el código en desarrollo
Detección temprana de errores, bugs y malas prácticas.
Depuración más barata
Capacidad de detectar lotes de errores con un solo análisis.
Eficiencia: puede detectar entre el 30% y 70% de los errores que surgirían en ejecución.
Complementa a las pruebas dinámicas
Especialmente útil en código modificado.
Proceso menos exigente que ejecutar pruebas automatizadas
Beneficios para el proyecto
Mejora la calidad del código fuente.
Optimiza la estrategia de pruebas (foco en áreas críticas).
Reduce costes de desarrollo.
Acorta el time-to-market (salida del producto).
Disminuye los costes de mantenimiento a lo largo del ciclo de vida del software.