5.3 Fase de Coleta de Dados do Processo de Avaliação GQM
5.3.2 Meta-modelo de Java
Nesta subseção, é avaliada a aplicabilidade das diretrizes no meta-modelo de Java, uma linguagem de programação orientada a objetos. Este meta-modelo foi retirado de um repositório de meta-modelos disponibilizado por um grupo de pesquisas chamado AtlanMod
[AtlanMod, 1990]. A seguir, a Tabela 6 apresenta alguns elementos que quantificamos no meta-modelo de Java, os quais foram alvo para a aplicação das diretrizes.
Tabela 6: Quantitativo de elementos do meta-modelo de Java.
Elemento Quantidade
Meta-classes 95
Atributos 46
Enumerations 4
Associações 150
A seguir, a Tabela 7 relaciona cada diretriz com o número de vezes que ela pode ser aplicada no meta-modelo de Java. Ao final desta tabela, é informado o número total de aplicações de todas as diretrizes neste meta-modelo, bem como o número de diretrizes que foram aplicadas.
Tabela 7: Quantitativo de aplicações das diretrizes no meta-modelo de Java.
Diretriz Núm. Aplicações D1 1 D2 18 D5 1 D9 29 D11 103 D12 29
Número de Aplicações Total 181
Número de Diretrizes Aplicadas: 6
Como podemos observar, a diretriz D6 não foi aplicada, pois o meta-modelo de Java já possui um pacote chamado PrimitiveTypes, o qual contém todos os tipos primitivos do projeto. Da mesma forma, a diretriz D7 não foi aplicada, uma vez que Java já possui um pacote principal chamado JavaAbstractSyntax. As demais diretrizes – D3, D4, D8, D10 e D13 – não foram aplicadas devido ao fato de o meta-modelo de Java já se apresentar em conformidade com todas elas.
D1 - Abstracting Common Attributes (Java)
A diretriz D1 tem apenas uma aplicação no meta-modelo de Java. Como ilustra a Figura 57,
as meta-classes chamadas MethodRefParameter, MethodDeclaration e
SingleVariableDeclaration possuem uma característica em comum: o atributo
Figura 57: Meta-classes do meta-modelo de Java com um atributo em comum.
Para aplicarmos a diretriz D1, criamos uma meta-classe abstrata chamada
VarargsElement com o atributo varargs. A diretriz sugere que esta meta-classe abstrata seja definida em um pacote chamado Abstractions do meta-modelo. Por fim, as
três meta-classes que possuem o atributo varargs em comum estendem de
VarargsElement para ter acesso ao atributo, como podemos ver na Figura 58.
Figura 58: Meta-modelo de Java com a aplicação da diretriz D1.
D2 - Abstracting Common Associations (Java)
Esta diretriz tem 18 aplicações no meta-modelo de Java. Como exemplo, a Figura 59 apresenta um trecho do meta-modelo em que as meta-classes ThisExpression, MethodRef, SuperFieldAccess, MemberRef, SuperMethodInvocation e QualifiedName possuem uma associação de composição com a meta-classe Name, todas com a mesma multiplicidade e o mesmo papel.
Figura 59: Trecho do meta-modelo de Java com associações em comum.
Podemos verificar a aplicação da diretriz na Figura 60. Foi necessário criarmos uma meta-classe abstrata (no pacote Abstractions), chamada OwnerQualifier, para generalizar as meta-classes que especificam a associação de composição com a meta-classe Name. O nome desta meta-classe é apenas uma convenção que adotamos, o desenvolvedor pode defini-lo de acordo com a semântica do meta-modelo. Logo, as seis meta-classes estendem a meta-classe criada, assim, herdando a associação.
Figura 60: Meta-modelo de Java com a aplicação da diretriz D2.
Outra aplicação da diretriz D2 no meta-modelo de Java pode ser conferida na subseção D.2.3 do Apêndice D.
D5 - Adding Abstractions Package (Java)
O meta-modelo de Java não possui nenhum pacote que contenha todas as meta-classes reutilizáveis do projeto. Portanto, ao aplicarmos esta diretriz temos um pacote chamado Abstractions, como ilustrado na Figura 61.
Figura 61: Pacote Abstractions para o meta-modelo de Java.
Abstractions contém as meta-classes que podem ser reutilizadas em todo o meta- modelo de Java, como por exemplo, VarargsElement e OwnerQualifier, as quais foram oriundas da aplicação das diretrizes D1 e D2, respectivamente.
D9 - Defining Boolean Attributes Default Value (Java)
Nenhum dos atributos booleanos do meta-modelo de Java possui valor default. Portanto, vejamos na Figura 62 alguns exemplos de atributos que devemos definir valores default ao aplicarmos esta diretriz.
Figura 62: Atributos do meta-modelo de Java sem valores default.
Outras aplicações da diretriz D9 no meta-modelo de Java podem ser conferidas na subseção D.4.2 do Apêndice D.
D11 - Defining Association Member Ends Features (Java)
Esta diretriz pode ser aplicada em 103 associações de composição do meta-modelo de Java. Contudo, vale observar que antes de aplicarmos esta diretriz nestas associações, devemos analisar a semântica em cada caso para, de fato, sabermos se a diretriz é ou não aplicável. Temos que verificar se a associação realmente exige que a parte não pertença a mais de um todo ao mesmo tempo. Como exemplo, vejamos a sua aplicação nas associações de
composição entre as meta-classes SynchronizedStatement-Block e
Figura 63: Trecho do meta-modelo de Java com duas associações de composição.
Como podemos observar, o limite mínimo de multiplicidade da meta-classe Block nas duas associações não é 0, como sugere a diretriz. Além disso, as multiplicidades das meta-classes que representam o todo destas associações estão definidas como 1. Isto significa dizer que um mesmo Block pertence tanto a um SynchronizedStatement quanto a um TryStatement ao mesmo tempo. Para deixarmos as associações em conformidade com a diretriz D11: (i) definimos a multiplicidade de SynchronizedStatement e TryStatement como 0..1; e (ii) definimos o limite mínimo de multiplicidade igual a 0 para as duas associações de Block. Embora não seja muito comum, vale ressaltar que é sintaticamente correto termos um statement Syncrhonized ou Try com o corpo vazio. Podemos conferir o resultado na Figura 64.
Figura 64: Meta-modelo de Java com a aplicação da diretriz D11.
Outras aplicações da diretriz D11 no meta-modelo de Java podem ser conferidas na subseção D.5.3 do Apêndice D.
D12 - Redefining Boolean Attribute Names (Java)
Podemos aplicar a diretriz D12 em todos os atributos booleanos presentes no meta-modelo de Java. Vejamos na Figura 65 alguns destes atributos pertencentes às meta-classes Modifier
e ImportDeclaration. Após a aplicação desta diretriz, os nomes dos atributos passam a
ser (i) isAbstract, isFinal, isNative, isNone, isPrivate, isProtected,
isPublic, isStatic, isStrictfp, isSynchronized, isTransient e
isVolatile para a meta-classe Modifier; e (ii) isOnDemand e isStatic para a
Figura 65: Meta-classes do meta-modelo de Java com atributos booleanos.
Outras aplicações da diretriz D12 no meta-modelo de Java podem ser conferidas na subseção D.6.2 do Apêndice D.