18 de outubro de 2016

Assunto abordado por Myers (1978), a coesão de um módulo é medida pelo relacionamento entre seus elementos internos. Quando um módulo possui atributos pouco ou nada utilizados por seus métodos, dizemos que ele é pouco coeso. Nesse caso, é necessário revisar os módulos para verificar onde os atributos/módulos deveriam ser realocados para aumentar a coesão dos módulos examinados. Por outro lado, se um módulo possui atributos que estão sendo devidamente utilizado por seus métodos, quanto maior for a intensidade desse relacionamento métodos/atributos, maior será a coesão daquele módulo.

Existem algumas métricas para o cálculo de coesão de um módulo, uma delas é a LCOM (lack of cohesion in methods) proposta por Chidamber and Kemerer (1994). Essa métrica mede o uso dos atributos de uma classe por seus próprios métodos para verificar se os métodos estão fazendo uso dos atributos e quantos métodos estão utilizando aqueles atributos.


Exemplo do uso de LCOM. Fonte: Figueiredo.  

A Figura mostra a medição de coesão de três classes com o uso de LCOM. Na figura podemos verificar o uso que os métodos representados pelos números fazem dos atributos, representados pelas letras. Cada quadrado é uma classe, e a classe mais coesa é a primeira começando pela esquerda. Ela tem todos os seus métodos utilizando seus atributos e cada atributo é acessado por pelo menos dois métodos. A segunda classe tem uma coesão intermediária, pois ela possui todos os métodos acessando atributos internos, mas, o atributo B poderia ser acessado por mais algum método. A terceira classe é a menos coesa das três. Os dois atributos da terceira classe são acessados por um método cada um, isso em uma classe que contém três métodos. Essa classe ainda possui um método que não acessa nenhum de seus atributos, mostrando que esse método pode estar localizado na classe errada.

Coesão é um fator a ser observado para preservar a manutenibilidade do código. Caso uma classe não seja coesa, ela deve ser refatorada para que possua os atributos e métodos corretos e realoque em outras classes os que não devem estar ali. Enfim, módulos devem ser organizados de forma a facilitar o reúso e a manutenção, além de manter o equilíbrio da coesão. Um módulo funcionando de forma ideal possui alta coesão.


Referências:

CHIDAMBER, S. R. and KEMERER, C. F. (1994).  A metrics suite for object oriented design. IEEE Trans. Softw. Eng., 20:476–493.

FIGUEIREDO, E. Metrics for Object-Oriented Programss. Disponível em
< http://homepages.dcc.ufmg.br/~figueiredo/disciplinas/lectures/oo-metrics_v01.pdf >. Acesso em: 15 nov 2015.

MYERS, G. J. Composite/Structured Design. 1. ed. New York: Van Nostrand Reinhold, 1978.

0 comentários:

Postar um comentário

Comentários:

Perfil

Formada em Sistemas de Informação e pós-graduada em Engenharia de Software.

Facebook

Views