Métricas de Coesão Baseado na Orientação a Objeto – Parte 1

Pessoal, como esse é o meu primeiro post no blog, gostaria de começar a falar um pouco sobre a tão falada Programação Orientada a Objeto.

Quando comecei a minha jornada na área de programação como estagiário há alguns anos atrás, e não tinha conhecimentos sólidos em Orientação a Objeto, mas estava encarregado de codificar algumas partes de um sistema de grande porte para um cliente chave em uma fábrica de software.

Ao final da minha tarefa, meu código foi revisto por um analista mais experiente e ouvi ele dizer que meu código estava com baixa coesão e alto acoplamento, e pela minha falta de experiência na época, fiquei sem entender o que ele quis dizer.

Atualmente, meu maior foco é deixar o código de acordo com os paradigmas da Orientação a Objeto.

Mas como saber se meu código está coeso e desacoplado ?

E é aí que entram as métricas que verificarão a coesão e acoplamento do nosso código. Sabemos que, métricas são quantitativas, portanto o resultado da análise será um valor, que veremos logo abaixo o que ele significará para nós.

Como são várias as métricas existentes e cada uma com suas particularidades, nesse primeiro post vou tratar de falar apenas da métrica chamada Lack Coehsion of Methods (LCOM), mas falarei nos posts seguintes de outras métricas muito utilizadas no mercado (por esse motivo esse post está classificado como ‘Parte 1’).

A métrica LCOM é definida por ser uma contagem dos pares de métodos na qual a similaridade é 0 (zero).¹

Como calcular a coesão do meu código de acordo com a métrica LCOM ?

A fórmula do cálculo é

LCOM = P = NP – Q

Onde:
P é o número de métodos que não compartilham atributos
Q é o número de métodos que compartilham atributos

NP é dado pela função
M! / 2! . (M – 2)!

sendo M o número de métodos existentes na classe

Exemplo de classes

Exemplo de classes

Podemos ver nessa imagem 4 métodos que são representados pelos quadrados, e 4 atributos que são representados pelos círculos, sendo que o atributo a1 é compartilhado pois o método m1 e m2 o acessam.

LCOM = (M! / 2! . (M – 2)) – 1
LCOM = (4.3.2.1 / 2.1 . (4-2)) – 1
LCOM = (24 / 4) – 1
LCOM = 6 – 1
LCOM = 5

Quanto maior o valor encontrado, menor a coesão, e isso indica um design mal elaborado.

Referências
¹ http://www.computing.dcu.ie/~renaat/ca421/LCOM.html
² http://www.ece.rutgers.edu/~marsic/books/SE/instructor/slides/lec-16%20Metrics-Cohesion.ppt

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: