3 Trabalhos Relacionados
3.1 Um Framework Unificado para Medidas de Aco plamento em Sistemas Orientados a Objetos
O trabalho de Briand et al (BRIAND; DALY; WUEST, 1999) prop˜oe um framework de avalia¸c˜ao de acoplamento para sistemas de software orientado a objetos. Os autores fazem um apanhado das m´etricas sobre acoplamento para sistemas OO dispon´ıveis na literatura e prop˜oem um framework que engloba todas as propostas. Eles apresentam uma abordagem rigorosa, com defini¸c˜oes formais e propriedades para as m´etricas.
As abordagens s˜ao comparadas quanto a: (i) o tipo de acoplamento; (ii) a for¸ca do acoplamento; (iii) se o acoplamento ´e importado ou exportado; (iv) se o acoplamento ´e direto ou indireto; (v) estabilidade da classe servidora; (vi) se o acoplamento ´e a n´ıvel de classe ou de objeto.
O tipo de acoplamento refere-se `a forma de intera¸c˜ao que origina o acoplamento. Os tipos mais considerados s˜ao acoplamento por invoca¸c˜ao a m´etodos e referˆencias a atributos.
A for¸ca do acoplamento entre duas classes ´e determinado por dois aspectos: a freq¨uˆen- cia de conex˜oes entre classes e os tipos de conex˜oes (tabela 3.1) entre classes. A m´etrica para o primeiro aspecto define como contar a freq¨uˆencia das conex˜oes entre classes. O se- gundo justifica-se porque diferentes tipos de acoplamento tˆem for¸cas diferentes. A maioria das abordagens define uma ordem de for¸ca para tipos de acoplamento diferentes.
3.1 Um Framework Unificado para Medidas de Acoplamento em Sistemas Orientados a Objetos30
A dire¸c˜ao do acoplamento separa acoplamento entre importado e exportado, intro- duzindo uma rela¸c˜ao de cliente-servidor entre as classes. A classe cliente usa (importa servi¸co) e a classe servidora est´a sendo usada (exporta servi¸co). A classe que principal- mente importa servi¸cos pode ser dif´ıcil de reusar em outro contexto porque ela depende de outras classes. A classe que exporta servi¸cos ´e cr´ıtica. Se ela contiver falhas vai propag´a-las para o restante do sistema mais facilmente.
O acoplamento direto e indireto leva em considera¸c˜ao a transitividade da rela¸c˜ao de intera¸c˜ao. Se uma classe c1 usa uma classe c2, que por sua vez usa uma classe c3, c1 indi- retamente usa c3. Um defeito ou modifica¸c˜ao em c3, afeta diretamente c2 e indiretamente c3. Esse acoplamento pode produzir uma grande cadeia de conex˜oes indiretas.
A estabilidade da classe servidora refere-se a classes que n˜ao s˜ao propensas a sofrer modifica¸c˜oes: uma classe que usa uma classe est´avel ´e melhor que usar uma inst´avel, uma vez que se modifica a classe servidora, provavelmente ser´a necess´ario modificar a classe cliente. Esse item ´e pouco explorado devido a dificuldade de se definir se uma possui estabilidade ou n˜ao. ´E um conceito bastante subjetivo.
O acoplamento pode ser analisado a n´ıvel de classe e a n´ıvel de objeto. O acoplamento a n´ıvel de classe pode ser avaliado a partir de uma an´alise est´atica dos documentos de design ou do c´odigo fonte. O acoplamento a n´ıvel de objeto depende tamb´em da estrutura concreta do objeto em tempo de execu¸c˜ao, que ´e influenciada pelos dados de entrada do sistema. Assim, o acoplamento a n´ıvel de objeto ´e determinado pelo design, c´odigo fonte e ainda dados de entrada em tempo de execu¸c˜ao.
Uma vez definidos os crit´erios de compara¸c˜ao das abordagens dispon´ıveis na literatura, os autores definem o framework, com o objetivo de comparar e selecionar m´etricas para um determinado objetivo de medi¸c˜ao. Os crit´erios definidos para o framework ser˜ao apresentados a seguir.
• Tipos de conex˜ao: os tipos de conex˜ao s˜ao mostrados na tabela 3.1. A segunda e a terceira colunas definem os elementos que participam do acoplamento. A quarta define os mecanismos que constituem acoplamento.
• Local de Impacto: nesse ponto, decide-se entre distinguir ou n˜ao acoplamento expor- tado e importado. Esse item ´e interessante quando se tratar de reuso de aspectos. • Granularidade: a granularidade consiste em determinar o n´ıvel de detalhe de sua
Tabela 3.1: Tipos de conex˜ao de acoplamento.
Elemento 1 Elemento 2 Mecanismo de acoplamento 1 atributo a de uma classe c classe d, com c 6= d classe d ´e do tipo de c 2 m´etodo m de uma classe c classe d, com c 6= d classe d ´e do tipo de um parˆametro
de m ou tipo de retorno de m 3 m´etodo m de classe c classe d, com c 6= d classe d ´e o tipo de uma
vari´avel local de m
4 m´etodo m de uma classe c classe d, com c 6= d classe d ´e do tipo de um parˆametro de um m´etodo invocado por m 5 m´etodo m de uma classe c atributo a de uma m referencia a
classe d, com c 6= d
6 m´etodo m de uma classe c m´etodo m’ de uma m invoca m’ classe d, com c 6= d
7 classe c classe d, com c 6= d relacionamentos de alto-n´ıvel entre classes, tais como “usa” e “consiste em”
Tabela 3.2: Contagem de conex˜oes a n´ıvel de atributo e m´etodo.
Descri¸c˜ao Exemplo de acoplamento Exemplo de acoplamento de importa¸c˜ao de exporta¸c˜ao
A contagem de conex˜oes para cada m´etodo, o n´umero para cada atributo, o n´umero individuais de referˆencias para atributos de referˆencias a ele. B contagem do n´umero para cada m´etodo, o n´umero para caca atributo, o n´umero
de itens distintos que de atributos referenciados de m´etodos que o referenciam estabelecem conex˜oes
ou seja, quais componentes ser˜ao medidos, e como as conex˜oes ser˜ao contadas. As tabelas 3.2 e 3.3 apresentam op¸c˜oes de como contar conex˜oes para dois n´ıveis de granularidade. A tabela 3.2 define a forma de contagem de conex˜oes a n´ıvel de atributo e m´etodo. A tabela 3.3, a n´ıvel de classe.
• Estabilidade do Servidor: duas categorias sobre estabilidade de classes s˜ao defini- das: classes est´aveis e classe inst´aveis. As classes inst´aveis s˜ao classes sujeitas `a modifica¸c˜ao. Classes est´aveis s˜ao as que n˜ao est˜ao sujeitas `as mudan¸cas. S˜ao clas- ses importadas de bibliotecas ou usadas sem modifica¸c˜oes de outros sistemas. A estabilidade de classes ainda n˜ao foi endere¸cada na defini¸c˜ao de nenhuma m´etrica.
Para cada item do framework, h´a um s´erie de parˆametros a serem considerados. As- sociado a cada parˆametro, os autores associam m´etricas dispon´ıveis na literatura. O trabalho tamb´em apresenta um caso de uso simples de aplica¸c˜ao de seu framework.
3.2 Um Conjunto de M´etricas para Design Orientado a Objetos 32
Tabela 3.3: Contagem de conex˜oes a n´ıvel de classe.
Descri¸c˜ao Exemplo de acoplamento Exemplo de acoplamento de importa¸c˜ao de exporta¸c˜ao
C somar o n´umero de o n´umero total de referˆencias o n´umero total de referˆencias conex˜oes contadas como a atributos por m´etodos a atributos da classe
em A da tabela 3.2 na classe o n´umero total de referˆencias D somar o n´umero de somar o n´umero de somar o n´umero de
conex˜oes contadas como atributos referenciados m´etodos que referenciam em B da tabela 3.2 por cada m´etodo da classe cada atributo da classe E contar o n´umero de o n´umero de atributos o n´umero de m´etodos
itens distintos de referenciados por cada referenciando atributos conex˜oes come¸cando ou m´etodo da classe da classe
terminando em m´etodos ou atributos da classe
F para uma classe c, o n´umero de classes o n´umero de classes contar o n´umero de que tˆem um atributo que tˆem um m´etodo que outras classes com a qual que ´e referenciado por referencia um atributo h´a pelo menos uma conex˜ao um m´etodo da classe c da classe c