Wednesday, May 23, 2012

Conhecendo a métrica de software LCOM4 (Lack Of Cohesion Methods)


Quando se estuda os conceitos de orientação à objetos, os conceitos que andam de mãos dadas e que são dificilmente compreendidos: o acoplamento e a coesão;
O primeiro conceito informa quanto um elemento depende ou conhece de outro. Quando uma classe é altamente acoplada, qualquer mudança que você fizer nessa classe impacta direta ou indiretamente na outra classe. Já a coesão é o quanto as tarefas que uma classe realiza estão relacionadas com um mesmo conceito. Um exemplo de baixa coesão seria uma classe que, por exemplo, lê dados do teclado e imprime os dados lidos em uma impressora.
Para identificar se nossas classes estão coesas e com baixo acoplamento podemos utilizar métricas de software para encontrar os métodos das classes estão relacionados um com os outros. Uma das métricas relacionadas à coesão/acoplamento é a LCOM4 (Lack Of Cohesion Methods). Observe a situação abaixo:

O diagrama de classes consiste dos métodos A até E e as variáveis de instância x e y. O método A chama B e B acessa a variável x. Já os métodos C e D acessam y. D chama E, mas E não acessa nenhuma variável de instância. Neste exemplo é possível visualizar que a classe consiste de dois componentes não relacionados (já que uma parte utiliza-se da instância x e outra da y), podendo ser separado em um componente com o método A,B e a variável x, e o outro componente com os métodos C,D,E e y. Nesse caso, o valor da métrica LCOM4 será igual à 2.
Uma situação semelhante que não apresenta quebra de coesão é se fizermos com que o método C acesse a variável x. Desse modo, nossa classe consiste de um único componente e o valor da LCOM4 será 1.

Agora, temos um componente coeso. É fácil perceber que iremos sempre buscar um baixo acoplamento e alta coesão dos componentes. Para acompanhar as mudanças no projeto e tentar garantir uma certa qualidade no produto desenvolvido, podemos automatizar a inspesão através de um mecanismo de construção automática e contínuo. Uma possíbilidade é a utilização do Sonar 2.0+ que já exibe em seus resultados a métrica LCOM4.
Na ferramenta, a interpretação desta métrica é simples; O valor 1 significa que a classe tem apenas uma única responsabilidade (ótimo) e um valor >2 significa que a classe tem provavelmente >2 responsabilidades (ruim) e deve ser refatorada/separada. Um widget no dashboard do projeto que apresenta informações como percentagem de classes que apresentam LCOM4 > 1, de lá é possível clicar em “drill down” para visualizar detalhes da classe suspeita de violar o LCOM4.

No comments: