Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. MARCO TEORICO
2. BIBLIOGRAFIA 6
A) Métricas de tamaño 16
1) PIM 16
2) NIM 16
3) NIV 16
4) NCM 16
5) NVV 16
B) Métricas de herencia 16
1) NMO 16
2) NMI 17
3) NMA 17
4) SIX 17
1) APPM 17
2) LOC 18
3) NOM 18
a) NAssoc 19
b) NAgg 19
c) NDep 19
d) NGen 19
e) NGenH 20
f) NAggH 20
g) MaxDIT 20
h) MaxHAgg 20
3. CONCLUCIONES 23
4. REFERENCIAS 26
1. MARCO TEORICO
Medir software no es una actividad sencilla. Se puede decir que toda magnitud
física se puede medir, pero el software es, sobre todo, el resultado de una actividad
básicamente intelectual, tanto en el origen como en el resultado final.
Aunque medida, medición y métrica son términos que suelen usarse de manera
intercambiable, es primordial observar claramente sus diferencias:
Métrica: Podemos definir a una métrica como una medida cuantitativa del grado
en que un sistema, componente o proceso posee un atributo dado. Incluye el método
de medición. Ejemplo, la productividad de un proyecto determinado fue de 800 líneas
(LDC/ persona-mes).
Las métricas nos ayudan a entender tanto el proceso técnico que se utiliza para
desarrollar un producto, como el propio producto. El proceso para intentar mejorarlo
y el producto para intentar aumentar su calidad.
1
1.2 Características de las métricas orientadas a objetos
Abstracción
Encapsulamiento
2
La encapsulación influye en las métricas, cambiando el enfoque de las mediciones
de un método simple, a un paquete de datos (atributos) y módulos de proceso
(operaciones).
Resumiendo, la encapsulación eleva la medición a un nivel de abstracción más
alto. Ejemplo métricas asociadas con el número de operaciones por clase. Contrasta
este nivel de abstracción con las métricas que se centran en contar condiciones
booleanas (complejidad ciclomàtica) o en contar líneas de código.
Ocultamiento de la información
Herencia
Cohesión
Acoplamiento
Las conexiones físicas entre los elementos del diseño orientado a objetos, por
ejemplo el número de colaboraciones entre clases o el número de mensajes
intercambiados entre objetos, representan el acoplamiento dentro de un sistema
orientado a objetos.
3
Complejidad
Polimorfismo
El polimorfismo se refiere a la posibilidad de enviar un mensaje a un grupo de
objetos cuya naturaleza puede ser heterogénea. El único requisito que deben cumplir
los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se
les envía.
Composición
Comunicación
4
1.3 Métricas Orientadas a Objetos
Aunque las métricas clásicas usadas para medir software tradicional pueden ser
usadas para medir sistemas orientados a objetos (por ejemplo, el número de líneas de
un programa escrito en Java), como el software desarrollado siguiendo el paradigma
orientado a objetos difiere del desarrollado siguiendo enfoques tradicionales se
necesita utilizar métricas adaptadas a las características particulares de este paradigma
de las cuales se presentan a continuación las propuestas más significativas.
Métricas MOOD
Este conjunto de métricas fue propuesto por Brito e Abreu y Carapuca (1994) y su
objetivo es medir los principales mecanismos del paradigma orientado a objetos.
Dado que el diagrama de clases es el más utilizado, las propuestas de métricas que
se podrían adaptar son alguna de las mencionadas con anterioridad, (Chidamber y
Kemerer), (métricas de Brito e Abreu y Carapuca (1994)), (Lorenz y Kidd (1994)).
Una propuesta de métrica definida específicamente para diagramas de clase UML y
que ha sido validada empíricamente es la siguiente:
Métricas de Genero
Genero et al. (2000) propusieron un conjunto de métricas para medir la
complejidad estructural de los modelos de clases.
5
2. Bibliografía
2.1 Métricas MOOSE O CK
Propuestas por Chidamber y Kemerer (1994). Son las más difundidas a nivel de
orientación a objetos. De hecho existen numerosos trabajos empíricos sobre la
relación de estas métricas y por ejemplo, la propensión a errores, o la mantenibilidad
de las clases, está compuesto por las siguientes seis métricas:
Mide la complejidad de una clase. Si todos los métodos son igualmente complejos,
entonces WMC es igual al número de métodos definidos en una clase. Sea la clase Ci
que tiene los métodos M1,….,Mn siendo su complejidad respectiva c1,…..,cn es posible
definir la formula:
WMC =
6
Persona
nombre: String
dni: String
dirección: String
teléfono: String
getNombre(): String
getDni(): String
getDireccion(): String
getTelefono(): String
setNombre(nombre: String)
setDni(dni: String)
setDereccion(direccion: String)
setTelefono(telefono: String)
Cliente Empleado
codigoCliente: String numeroEmpleado: String
numeroSegSocial: Sting
getCodigoCliente(): String sueldo: String
setCodigoCliente(código: String)
altaCliente(dni: String) getNumeroSS(): String
bajaCliente(dni: String) setNumeroSS(numeroSS: String)
getFechaCom(): Date
setFechaCom(fecha: Date)
altaEmpleado(dni: String)
bajaEmpleado(dni: String)
setSueldo(base: double)
EmpleadoFijo EmpleadoTemporal
sueldoEmpFijo sueldoEmpTemp
7
Considerando el diagrama de la Figura 1, considerando que todos los métodos
tienen complejidad 1, entonces podemos calcular:
WMC(Persona)= 8,
WMC(Cliente)= 4, no considerando los métodos heredados.
WMC(Empleado)= 10, no considerando los métodos heredados.
La métrica CBO, indica para una clase el número de otras clases con las que está
acoplada. Se considera que un objeto esta acoplado a otro cuando actúa sobre este
otro objeto, por ejemplo cuando un método de un objeto utiliza un método de otro
objeto. Esta métrica se considera útil para predecir el esfuerzo necesario para el
mantenimiento y las pruebas. Para mostrar el cálculo de la métrica considérese este
ejemplo:
asociada
TarjetaCredito
numeroTarjeta: string
8
e) RFC (Respuesta de una Clase) (Response For a Class)
RFC indica el número de métodos que pueden ser ejecutados potencialmente como
respuesta a un mensaje recibido por un objeto de esa clase. RFC por lo tanto se
calcula contando las ocurrencias de llamadas a otras clases de una clase en particular.
La fórmula para calcular esta métrica es la siguiente:
RFC =|RS|, donde RS es el conjunto respuesta para la clase. El conjunto respuesta
para la clase se puede expresar de la siguiente manera:
RS= {M} Ui {Ri}, donde {Ri}es el conjunto de métodos llamados por el método i y
{M} es el conjunto de todos los métodos de la clase.
Para una mejor comprensión del modo de cálculo de RFC considérese un sistema
formado por tres clases A, B y C. La clase A tiene 4 métodos f1,f2,f3,f4, la clase B
tiene 4 métodos f1,f2,f3,f4y la clase C tiene 5 métodos f1,f2,f3,f4,f5.
Las invocaciones de los métodos de A son las que figuran en el siguiente esquema:
Entonces
RS = { A:: f1, A:: f2, A:: f3, A:: f4}U { B:: f1, B:: f2, C:: f3}U{ B:: f1}
U{ A:: f4, B:: f3, C:: f1, C:: f2}
----------------------------------------------------------------------------------------
= { A:: f1, A:: f2, A:: f3, A:: f4, B:: f1, B:: f2, B:: f3, C:: f1, C:: f2, C:: f3}
Resultando RFC(A)= 10
Se calculo la métrica RFC para la clase A, la cual tiene 4 métodos locales y llama
desde esos métodos a 6 métodos remotos (B:: f1, B:: f2, B:: f3, C:: f1, C:: f2, C:: f3).
La métrica RFC (Respuesta para una clase) se considera por tanto como la suma de
los métodos locales a una clase, mas los métodos remotos (métodos invocados de
otras clases desde los métodos locales a la clase).
LCOM establece en qué medida los métodos hacen referencia a los atributos. Se
calcula como el número de pares de funciones sin variables compartidas de instancia
menos el número de pares de funciones con variables de instancia compartidas.
LCOM es una métrica de la cohesión de una clase en base al número de atributos
comunes usados por diferentes métodos. Un valor alto en LCOM implica falta de
cohesión, es decir, escasa similitud entre los métodos siendo siempre deseable un alto
grado de cohesión en los métodos de una clase.
9
Mediante la figura 2 vamos a mostrar el cálculo de LCOM, donde los óvalos
representan los métodos de una clase y los puntos representan los atributos de la clase.
Un punto estará dentro de un ovalo perteneciente a un método, si en el mismo se hace
referencia al atributo representado por el punto.
Caso 1: LCOM = 2 – 1 = 1
Caso 2: LCOM = 4 – 2 = 2
10
Figura 3. Incremento de LCOM
MHF mide la proporción entre los métodos definidos como protegidos o privados y
le número total de métodos. MHF se propone como una medida de encapsulación,
cantidad relativa de información oculta.
11
es el porcentaje del total de clases desde las cuales los atributos son invisibles.AHF se
definió como una medida de encapsulación.
Class FormaGeometrica{
Protected:
Double posicionX;
Double posicionY;
Void Dibujar ();
Public:
Void Cortar ();
Void Borrar ();
Void Mover (double DesplazX, double DesplazY);
Void Desagrupar ();
Virtual void Posicionar (double posX, double posY); // constr
Virtual void Escribir (int color); // llama a dibujar
Virtual double Area ();
}
12
Class cuadro: public FormaGeometrica{
Protected:
Double anchura;
Double altura;
Double DameAnchura ();
Double DameAltura ();
Public:
Void EstablecerDimensiones (double altura, double anchura);
Void Posicionar (double posX, double posY);
Void Escribir (int color);
Double Area ();
}
Clase MO MV MD
FormaGeometrica 1 7 8
Cuadrado 2 4 6
Circulo 0 4 4
MO= métodos protegidos
MO: FormaGeometrica = 1(Dibujar); Cuadro= 2 (DameAnchura, DameAltura);
Circulo= 0.
MV = métodos visibles
MV: FormaGeometrica = 7 (Cortar, Borrar, Mover, Desagrupar, Posicionar,
Escribir, Area);
Cuadro = 4 (EstablecerDimensiones, Posicionar, Escribir, Area);
Circulo = 4 (EstablecerRadio, Posicionar, Escribir, Area).
MD= MO + MV = (1 + 2 )+(7 + 4 + 4) = 18
13
MHF = 3 / 18 = 0,166666…
Clase MO MV MD
FormaGeometrica 2 0 2
Cuadrado 2 0 2
Circulo 1 0 1
AO = Atributos protegidos
MO: FormaGeometrica = 2 (PosicionX, PosicionY); Cuadro= 2 (Anchura,
Altura); Circulo= 1(Radio).
AV = Atributos visibles
AV: FormaGeometrica = 0 ; Cuadro = 0; Circulo = 0
MHF = 5 / 5 = 1
Clase MN MO MI MD MA
FormaGeometrica 8 0 0 8 8
Cuadrado 3 3 5 6 11
Circulo 1 3 5 4 9
MN = Métodos nuevos
MN: FormaGeometrica = 8 (Todos los métodos)
Cuadro = 3 (DameAnchura, DameAltura, EstablecerDimensiones)
Circulo = 1 (EstablecerRadio)
MO = Métodos redefinidos
MO: FormaGeometrica = 0
Cuadro = 3 (Posicionar, Escribir, Area)
Circulo = 3 (Posicionar, Escribir, Area)
MI = Métodos heredados
MI: FormaGeometrica = 0
Cuadro = 5 (Cortar, Borrar, Mover, Desagrupar, Dibujar)
Circulo = 5 (Cortar, Borrar, Mover, Desagrupar, Dibujar)
14
MD =MN + MO = (8 + 3 + 1) + (0 + 3 + 3) = 18
MIF = 10 / 28 = 1
Calculo de la métrica AIF
Clase AN AO AI AD AA
FormaGeometrica 2 0 0 2 2
Cuadrado 2 0 2 2 4
Circulo 1 0 2 1 3
AN = Atributos nuevos
AN: FormaGeometrica = 2 (PosicionX, PosicionY)
Cuadro = 2 (Altura, Anchura)
Circulo = 1 (Radio)
AO = Atributos redefinidos
AO: FormaGeometrica = 0; Cuadro = 0; Circulo = 0
AI = Atributos heredados
AI: FormaGeometrica = 0
Cuadro = 2 (PosicionX, PosicionY)
Circulo = 2 (PosicionX, PosicionY)
AD =AN + AO = (2 + 2 + 1) + (0) = 5
AIF = 4/ 9 = 0,444444….
Cálculo de la métrica PF
Clase MO MN DC
FormaGeometrica 0 8 2
Cuadrado 3 3 0
Circulo 3 1 0
PF = 6/ 16 = 0,375
15
2.3 Métricas de Lorenz y Kidd
A - Métricas de tamaño
a) PIM
b) NIM
c) NIV
d) NCM
e) NVV
B – Métricas de herencia
a) NMO
16
b) NMI
c) NMA
d) SIX
NumeroDeMetodosSobrecargados * NivelDeAnidamientoEnLaJerarquia
NumeroTotalDeMetodos
Esta métrica mide hasta qué punto una subclase redefine el comportamiento de una
superclase.
a) APPM
NumeroTotalDeParametrosPorMetodo
NumeroTotalDeMetodos
17
b) LOC
c) NOM
NIM(Persona)=8
18
NMO(EmpleadoTemporal) = 1(redefine el método setSueldo).
NMI(Cliente) = 8.
NMA(Cliente) = 4.
a) NAssoc
b) NAgg
c) NDep
d) NGen
19
e) NGenH
f) NAggH
g) MaxDIT
La métrica Máximo DIT se define como el máximo entre los valores DIT
obtenidos de cada clase del modelo de clases. El valor de DIT para una clase dentro
de una jerarquía de generalización es la longitud de la ruta más larga partiendo de la
clase raíz de la jerarquía.
h) MaxHAgg
20
2.4.2 Cálculo de las métricas de Genero et al (2000)
1 0...*
0...*
Especificación Existencia 0...* Catalogo
1
Cliente
0...*
Nacional Importado Servicio
Empresa Personal
0...*
Tipo I Tipo II
Empleado
Figura. 4. Diagrama de clases utilizado para calcular las métricas de Genero et al.
(2000)
Notación:
Clase
21
NAssoc = 4
NAgg = 3
NDep = 1
NGen = 6
NAggH = 1
Existe una única jerarquía de agregación que tiene como parte “todo” la clase
Catálogo.
NGneH = 2
Existen dos jerarquías de generalización, una cuya clase raíz es Cliente y la otra
Producto.
MaxHAgg = 2
MaxDIT = 2
22
3. Conclusiones
Clases con un gran número de métodos requieren más tiempo y esfuerzo para
desarrollarlas y mantenerlas, ya que influirán en las subclases heredando todos sus
métodos. Además, estas clases tienden a ser específicas de la aplicación, limitando su
posibilidad de reusó.
En WMC se aprecian los siguientes problemas [Harrison et al. 1996]:
WMC mide presuntamente la complejidad, pero no da ninguna definición de
complejidad.
WMC no puede verse como un indicador de esfuerzo necesario para
desarrollar una clase, ya que es fácil imaginar clases con pocos métodos
complicados y clases con un gran número de métodos pero muy simples.
Por lo tanto, esta métrica debería de ser considerada simplemente como una
medida del tamaño de una clase.
23
Mayor dificultad para modificar una clase ya que afecta a todos los hijos que
tienen dependencia con la clase.
Se requieren mayor número de recursos para testear.
Es un potencial indicador de la influencia que una clase puede tener sobre el diseño
del sistema. Si el diseño tiene una alta dependencia en la reusabilidad a través de la
herencia, puede ser mejor dividir la funcionalidad en varias clases.
Cuanto más acoplamiento se da en una clase, más difícil será reutilizarla. Además,
las clases con excesivo acoplamiento dificultan la complejidad y hacen más difícil el
mantenimiento por lo que será necesario un mayor esfuerzo y riguroso testeo.
Las clases deberían ser lo más independientes posible, y aunque siempre es
necesaria una dependencia entre clases, cuando está es grande, la reutilización puede
ser más cara que la reescritura. Al reducir el acoplamiento se reduce la complejidad,
se mejora la modularidad y se promueve la encapsulación.
Un valor alto de LCOM implica falta de cohesión, es decir, escasa similitud de los
métodos. Esto puede indicar que la clase está compuesta de elementos no
relacionados, incrementando la complejidad y la probabilidad de errores durante el
desarrollo. Es deseable una alta cohesión en los métodos dentro de una clase ya que
está no puede ser dividida fomentando la encapsulación.
24
Idealmente, el valor de la métrica AHF seria 100%, por ejemplo todos los
atributos estarían ocultos sólo podrían ser accedidos desde los métodos de
las clases correspondientes.
A primera vista podría resultar tentador pensar que la herencia debería ser
usada extensivamente. Sin embargo, la excesiva reusabilidad a través de
la herencia hace a los sistemas difíciles de comprender y mantener.
En relación con la métrica PF, en algunos casos los métodos redefinidos
pueden contribuir a reducir la complejidad e incluso a hacer el sistema
más comprensible y fácil de mantener.
25
3.4 Conclusiones sobre las métricas de Genero et al. (2000)
Los autores de esta propuesta señalaron que para obtener resultados definitivos es
necesario replicar los experimentos realizados, así como constatar si las métricas son
validas utilizando diagramas de clases obtenidos en proyectos reales.
4. Referencias
26