• No results found

Alternative solutions

5  REVIEW

5.2  Review of concept

5.3.2  Alternative solutions

A m´etrica CBO conta a quantidade de outras entidades a que uma entidade est´a acoplada atrav´es de invoca¸c˜oes a opera¸c˜oes ou referˆencia a atributos. Para o caso de uso deste trabalho, o OiL, classes s˜ao agrupadas em m´odulos. As classes que pertencem a um mesmo m´odulo tˆem um objeto e funcionalidade em comum, sendo compat´ıvel com a defini¸c˜ao de categorias de classes. O acoplamento entre classes de uma mesma categoria n˜ao ´e um fator negativo, mas algo esperado. Logo, o acoplamento que interessa ser avaliado ´e o acoplamento entre as classes de uma categoria e classes de outras categorias. O mesmo se aplica a aspectos.

Por enquanto, o script para coleta de m´etricas de acoplamento apresentam somente a granularidade de categoria de classes, por ser essa a granularidade escolhida para a coleta do caso de uso. A granularidade a n´ıvel de classe ´e igualmente importante e ser´a implementada em trabalhos futuros. A granularidade para m´etricas de acoplamento ´e descrita com mais detalhes na subse¸c˜ao 4.2.1.

Para o OiL e o AO-OiL, CBO ser´a a quantidade de m´odulos a que um m´odulo est´a acoplado. Apenas ser´a considerado acoplamento a outros m´odulos da aplica¸c˜ao. Acopla- mento a m´odulos de bibliotecas de Lua ser˜ao desconsiderados.

O funcionamento do script para coleta da m´etrica CBO ´e detalhado no algoritmo 7. Esse algoritmo pode ser aplicado tanto a c´odigo-base quanto a c´odigo de aspectos. Em Lua, para manter uma referˆencia a um m´odulo externo usa-se o comando:

<referencia> = require "<nome_modulo>"

O primeiro passo do script ´e ent˜ao armazenar as referˆencias a outros m´odulos da aplica¸c˜ao a ser avaliada. Uma vez obtidas as referˆencias, procura-se por chamadas a ope- ra¸c˜oes ou referˆencia a atributos atrav´es delas. No ´ınicio do algoritmo, declara-se o vetor associativo ref CBO para armazenar informa¸c˜oes relevantes para o c´alculo de CBO (linha 1). Enquanto fim de arquivo n˜ao for encontrado, procura-se por 3 elementos:

(i) defini¸c˜ao de referˆencia a m´odulo externo: essa defini¸c˜ao ´e feita atrav´es do comando <referencia> = require “<nome modulo>”. Se encontrado, instancia-se uma posi¸c˜ao de Ref CBO com o nome da referˆencia como ´ındice e recebe valor booleano “false” para indi- car que ainda n˜ao foi encontrada nenhuma referˆencia a atributo ou invoca¸c˜ao a opera¸c˜ao atrav´es dela (linhas 4-6);

5.1 Ferramenta COMETA-Lua 96

na forma <referencia>.<nome atributo>, com <referencia> sendo uma referˆencia j´a de- clarada atrav´es do comando “require”. Se encontrada, a posi¸c˜ao de ref CBO que tenha como ´ındice a referˆencia recebe valor booleano “true”, sinalizando que foi encontrado aco- plamento atrav´es dessa referˆencia (linhas 7-9);

(iii) invoca¸c˜ao a opera¸c˜ao atrav´es de referˆencia j´a armazenada: procura-se por co- mando na forma <referencia>:<nome operacao>, com <referencia> sendo uma referˆen- cia j´a declarada atrav´es do comando “require”. Se encontrada, a posi¸c˜ao de ref CBO que tenha como ´ındice a referˆencia recebe valor booleano “true”, sinalizando que foi encon- trado acoplamento atrav´es dessa referˆencia (linhas 10-12).

Para se calcular o valor de CBO, ref CBO ´e percorrido em busca das posi¸c˜oes que tenham valor “true”. Para cada valor desse encontrado, h´a um m´odulo externo para o qual h´a acoplamento atrav´es de acesso a atributos e invoca¸c˜oes a opera¸c˜oes (linhas 16-21). Logo, CBO ´e incrementado. Ao fim do algoritmo, o c´alculo de CBO est´a finalizado (linha 22). Algoritmo 7 Algoritmo para coleta da m´etrica CBO

MetricaCBO (arquivo Programa Lua) 1: ref CBO ← {}

2: linha ← le linha(Programa Lua) 3: while linha n˜ao for nula do

4: if linha cont´em comando na forma <referencia> = require “<nome modulo>” then

5: ref CBO{<referencia>} ← false

6: end if

7: if linha cont´em referˆencia a atributo na forma <referencia>.<atributo> then 8: ref CBO{<referencia>} ← true

9: end if

10: if linha cont´em invoca¸c˜ao a operacao na forma <referencia>:<nome operacao> then

11: ref CBO{<referencia>} ← true

12: end if

13: linha ← le linha(Programa Lua) 14: end while

15:

16: CBO ← 0

17: for cada posi¸c˜ao de ref CBO do 18: if ref CBO{posi¸c˜ao} = true then

19: CBO++

20: end if

21: end for 22: print CBO

Em alguns casos, a referˆencia para m´odulo externo ´e utilizada para a declara¸c˜ao de um atributo com tipo do m´odulo da referˆencia. A partir desse atributo, s˜ao ent˜ao acessados

atributos e opera¸c˜oes n˜ao implementados no m´odulo em avalia¸c˜ao. Esses casos tamb´em s˜ao considerados para o c´alculo de CBO, embora n˜ao tenha sido detalhado no algoritmo por motivo de simplifica¸c˜ao.

´

E da defini¸c˜ao de CBO considerar acoplamento por heran¸ca. Em Lua, os atributos implementados externamente ao m´odulo sendo avaliado, sejam eles herdados ou n˜ao, precisam ser acessados atrav´es da mesma sintaxe. O mesmo ocorre para as invoca¸c˜oes a opera¸c˜oes. Assim, o acoplamento por heran¸ca ser´a contabilizado como o caso geral.

5.1.6

M´etrica de Acoplamento DAC - Acoplamento por Abstra-

¸

c˜ao de Dados

A m´etrica DAC conta o n´umero de atributos n˜ao herdados que tˆem como um com- ponente como seu tipo. Assim como para a m´etrica CBO, a granularidade para a coleta dessa m´etrica ´e categoria de classes e s´o ser´a considerado acoplamento a outros m´odulos da aplica¸c˜ao.

O funcionamento do script para coleta da m´etrica DAC em c´odigos OO e OA ´e detalhado no algoritmo 8. Em Lua, para manter uma referˆencia a um m´odulo externo usa-se o comando:

<referencia> = require "<nome_modulo>".

O primeiro passo do script ´e ent˜ao armazenar as referˆencias a outros m´odulos da aplica¸c˜ao a ser avaliada. Uma vez obtidas as referˆencias, procura-se por declara¸c˜ao de atributos que recebem o retorno da chamada de construtores atrav´es das referˆencias armazenadas.

Na linha (1), ´e definido o vetor associativo ref DAC. Para cada posi¸c˜ao desse vetor, o ´ındice ser´a a referˆencia a um m´odulo externo e o seu valor ser´a a quantidade de atributos com tipo desse m´odulo. Para se ter o valor de DAC para o m´odulo avaliado, ao final do algoritmo, soma-se os valores de todas as posi¸c˜oes de ref DAC (linhas 13-17).

Enquanto n˜ao for encontrado o fim do arquivo, busca-se por referˆencias a m´odulos externos. Cada referˆencia encontrada ser´a ´ındice de uma posi¸c˜ao de ref DAC. Essa posi¸c˜ao ser´a depois preenchida com o n´umero de atributos encontrados daquele m´odulo (linhas 4-6).

No segundo passo do algoritmo, procura-se por atributo declarado a partir de chamada a construtor de referˆencia a m´odulo externo. Uma vez encontrado, a posi¸c˜ao de ref DAC da referˆencia correspondente ´e incrementada (linhas 7-9).