Avaliando Software Orientado a Aspectos:
Um Método Quantitativo Baseado em Regras
Heurísticas
Eduardo Magno Lages Figueiredo
21 de Outubro de 2005
Tópicos da Apresentação
1. Motivação
2. Método de Avaliação
3. Métricas
• Separação de Interesses
• Acoplamento, Coesão e Tamanho
• Exemplo de Aplicação das Métricas
4. Regras Heurísticas
• Exemplo de Aplicação das Regras
5. Trabalhos Futuros
6. Trabalhos Relacionados
7. Conclusões
Laboratório de Engenharia de Software – PUC-Rio
2
Motivação
• Como fazer medições de forma sistemática e
seguindo passos para alcançar os resultados?
• Como interpretar os resultados das medições de
tal forma a refletir a qualidade do projeto?
• Como avaliar sistemas complexos de forma
automatizada?
Laboratório de Engenharia de Software – PUC-Rio
3
Motivação
• Como fazer medições de forma sistemática e
seguindo passos para alcançar os resultados?
– Método de Avaliação
• Como interpretar os resultados das medições de
tal forma a refletir a qualidade do projeto?
– Regras Heurísticas
• Como avaliar sistemas complexos de forma
automatizada?
– Ferramenta de Suporte
Laboratório de Engenharia de Software – PUC-Rio
4
O Método de Avaliação
Aspect-Oriented
Metrics
Single
Artifact
or
Multiple
Alternatives
SoC
Evaluation
Intra-Module
Evaluation
Aspect-Oriented
Rules
Inter-Module
Evaluation
Overall
Analysis
Final Implementation
artifacts
resource
assessment steps
Laboratório de Engenharia de Software – PUC-Rio
5
O Método de Avaliação
Aspect-Oriented
Metrics
Single
Artifact
or
Multiple
Alternatives
artifacts
SoC
Evaluation
Data
Collection
Intra-Module
Evaluation
Application of
Rules
Aspect-Oriented
Rules
Inter-Module
Evaluation
Analysis
Overall
Analysis
Refactoring
activity
resource
assessment steps
Laboratório de Engenharia de Software – PUC-Rio
Final Implementation
6
O Método de Avaliação
Aspect-Oriented
Metrics
Single
Artifact
or
Multiple
Alternatives
artifacts
SoC
Evaluation
Data
Collection
Intra-Module
Evaluation
Application of
Rules
Aspect-Oriented
Rules
Inter-Module
Evaluation
Analysis
Overall
Analysis
Refactoring
activity
resource
assessment steps
Laboratório de Engenharia de Software – PUC-Rio
Final Implementation
7
O Método de Avaliação
Aspect-Oriented
Metrics
Single
Artifact
or
Multiple
Alternatives
artifacts
SoC
Evaluation
Data
Collection
Intra-Module
Evaluation
Application of
Rules
Aspect-Oriented
Rules
Inter-Module
Evaluation
Analysis
Overall
Analysis
Refactoring
activity
resource
assessment steps
Laboratório de Engenharia de Software – PUC-Rio
Final Implementation
8
O Método de Avaliação
Aspect-Oriented
Metrics
Single
Artifact
or
Multiple
Alternatives
artifacts
SoC
Evaluation
Data
Collection
Intra-Module
Evaluation
Application of
Rules
Aspect-Oriented
Rules
Inter-Module
Evaluation
Analysis
Overall
Analysis
Refactoring
activity
resource
assessment steps
Laboratório de Engenharia de Software – PUC-Rio
Final Implementation
9
Métricas
Separação de Interesses
• Concern Diffusion over Components (CDC) [14]
– conta o número de componentes principais de um interesse e os
outros componentes que fazem referência à estes
• Concern Diffusions over Lines of Code (CDLOC) [14]
– conta o número de pontos de transição entre o interesse avaliado
e os outros interesses do sistema através das linhas de código
• NOAconcern
– conta para cada componente o número de atributos do interesse
• NOOconcern
– conta para cada componente o número de operações do interesse
• LOCconcern
– conta para cada componente o número de LOC do interesse

[14] Sant’Anna, C. et al. On the Reuse and Maintenance of Aspect-Oriented Software: An Assessment
Framework. Proc. of Brazilian Symposium on Software Engineering, Brazil, (2003), pp. 19-34.
Laboratório de Engenharia de Software – PUC-Rio
10
Exemplo de Métricas SoC
Interesse Sombreado: Papel Observer (Observer)
interface
interface
C ha ng eS ubj ect
Ma i n
C ha ng eO bs erv er
+main:void
+addObserver:void
+removeObserver:void
+notifyObservers:void
+refresh:void
P oint
S creen
-observers:HashSet
-observers:HashSet
-name:String
+Point
+addObserver:void
+removeObserver:void
+notifyObservers:void
x:int
y:int
color:Color
+Screen
+display:void
+addObserver:void
+removeObserver:void
+notifyObservers:void
+refresh:void
CDC = 2
CDLOC = 4
NOAconcern = 0
NOOconcern = 1 + 1
LOCconcern = 3 + 4
public interface Observer {
public void update(Subject s);
}
public class Screen implements Subject,
Observer {
private HashSet observers;
private String name;
...
public void update(Subject s) {
display(“Update received!");
}
}
Laboratório de Engenharia de Software – PUC-Rio
11
Métricas
Acoplamento, Coesão e Tamanho
• Acoplamento
– Coupling Between Components (CBC)[14]
– Depth Inheritance Tree (DIT)[14]
– Number of Children (NOC)
• Coesão
– Lack of Cohesion in Operations (LCOO)[14]
• Tamanho
– Vocabulary Size (VS)[14]
– Number of Operations (NOO)
– Number of Attributes (NOA)[14]
– Lines of Code (LOC)[14]

[14] Sant’Anna, C. et al. On the Reuse and Maintenance of Aspect-Oriented Software: An Assessment
Framework. Proc. of Brazilian Symposium on Software Engineering, Brazil, (2003), pp. 19-34.
Laboratório de Engenharia de Software – PUC-Rio
12
Exemplo de Métricas
Interesse Sombreado: Papel Observer (Observer)
interface
interface
C ha ng eS ubj ect
Ma i n
C ha ng eO bs erv er
+main:void
+addObserver:void
+removeObserver:void
+notifyObservers:void
+refresh:void
P oint
S creen
-observers:HashSet
-observers:HashSet
-name:String
+Point
+addObserver:void
+removeObserver:void
+notifyObservers:void
x:int
y:int
color:Color
+Screen
+display:void
+addObserver:void
+removeObserver:void
+notifyObservers:void
+refresh:void
Laboratório de Engenharia de Software – PUC-Rio
CDC = 2
CDLOC = 4
NOAconcern = 0
NOOconcern = 1 + 1
LOCconcern = 3 + 4
CBC = 13 (soma)
DIT = 2 (máximo)
NOC = 2 + 1
LCOO = 16 (soma)
VS = 5
NOO = 21 (soma)
NOA = 6 (soma)
LOC = 111 (soma)
13
Exemplo de Métricas
Interesse Sombreado: Papel Observer (Observer)
CDC = 2
C ha ng eS ubj ect
C ha ng eO bs erv er
CDLOC = 4
+main:void
NOAconcern = 0
+addObserver:void
+refresh:void
+removeObserver:void
NOOconcern = 1 + 1
+notifyObservers:void
LOCconcern = 3 + 4
CBC = 13 (soma)
DIT = 2 (máximo)
• O Pque
podemos
dizer
sobre
o
sistema
a partir
oint
S creen
NOC = 2 + 1
dos valores
medidos?
-observers:HashSet
-observers:HashSet
LCOO
= “Observer”
16 (soma)
-name:String
–
E
sobre
o
código
que
implementa
o
papel
+Point
VS = 5
+addObserver:void
+Screen
do padrão
“Observer”?
+removeObserver:void +display:void
NOO = 21 (soma)
+notifyObservers:void +addObserver:void
+removeObserver:void
NOA = 6 (soma)
x:int
+notifyObservers:void
•y:intQual é o raciocínio
em relação aos valores
+refresh:void
LOC = 111 (soma)
color:Color
interface
interface
Ma i n
medidos?
Laboratório de Engenharia de Software – PUC-Rio
14
Regras Heurísticas
R01:
if CDLOC is 2 then MODULAR CONCERN
R02:
if CDLOC is bigger than 2 then (POSSIBLE) TANGLED CONCERN
Concern
R01
Modular
Concern
Laboratório de Engenharia de Software – PUC-Rio
R02
(Possible)
Tangled
Concern
15
Regras Heurísticas
R01:
if CDLOC is 2 then MODULAR CONCERN
R02:
if CDLOC is bigger than 2 then (POSSIBLE) TANGLED CONCERN
Exemplo: Padrão Façade [HK, 2002]
Outp utF a ca d e
+printNormal:void
+printFancy:void
+printDecoration:void
R eg ula rS creen
+print:void
+newline:void
Decora ti on
decoration:String
S tring T ra ns form er
+transformToUpper:String
+transformToLower:String
CDLOC = 2
• Pela regra R01, o padrão “Façade” é Modular
Laboratório de Engenharia de Software – PUC-Rio
16
Regras Heurísticas
R03:
if CDC / VS of (POSSIBLE) TANGLED CONCERN is high then
HIGHLY SCATTERED CONCERN
R04:
if CDC / VS of (POSSIBLE) TANGLED CONCERN is not high
then LOW SCATTERED CONCERN
(Possible)
Tangled
Concern
R03
Highly
Scattered
Concern
Laboratório de Engenharia de Software – PUC-Rio
R04
Low
Scattered
Concern
17
Regras Heurísticas
R03:
if CDC / VS of (POSSIVEL) TANGLED CONCERN is high then
HIGHLY SCATTERED CONCERN
R04:
if CDC / VS of (POSSIVEL) TANGLED CONCERN is not high then
LOW SCATTERED CONCERN
G UIC omp onentC rea tor
Ma i n
-lastFrameLocation:Point
+createComponent:JComponent
Exemplo: Papel Creator
(Factory Method) [HK, 2002]
+main:void
+showFrame:void
CDLOC = 6
CDC / VS = 4 / 4 = 1
title:String
La b el C rea tor
+createComponent:JComponent
title:String
ButtonC rea tor
+createComponent:JComponent
title:String
Laboratório de Engenharia de Software – PUC-Rio
• Pela regra R03:
Papel “Creator” é
High Scattered
18
Regras Heurísticas
R05:
if (NOAconcern / NOA is high) and (NOOconcern / NOO is high) for all
components of HIGHLY SCATTERED CONCERN then POSSIBLE PRIMARY CONCERN
R06:
if (NOAconcern / NOA is not high) and (NOOconcern / NOO is not high)
for one or more components of HIGHLY SCATTERED CONCERN then POSSIBLE
SECONDARY CONCERN
R07:
if (NOAconcern / NOA is high) and (NOOconcern / NOO is high) for all
components of LOW SCATTERED CONCERN then POSSIBLE PRIMARY CONCERN
R08:
if (NOAconcern / NOA is not high) and (NOOconcern / NOO is not high)
for one or more components of LOW SCATTERED CONCERN then POSSIBLE
SECONDARY CONCERN
Possible
Highly
R05
Primary
Scattered
Concern
Concern
R06
Low
Scattered
Concern
Laboratório de Engenharia de Software – PUC-Rio
R07
R08
Possible
Secondary
Concern
19
Regras Heurísticas
R05:
if (NOAconcern / NOA is high) and (NOOconcern / NOO is high) for all components
of HIGHLY SCATTERED CONCERN then POSSIBLE PRIMARY CONCERN
R06:
if (NOAconcern / NOA is not high) and (NOOconcern / NOO is not high) for one or
more components of HIGHLY SCATTERED CONCERN then POSSIBLE SECONDARY CONCERN
R07:
if (NOAconcern / NOA is high) and (NOOconcern / NOO is high) for all components
of LOW SCATTERED CONCERN then POSSIBLE PRIMARY CONCERN
R08:
if (NOAconcern / NOA is not high) and (NOOconcern / NOO is not high) for one or
more components of LOW SCATTERED CONCERN then POSSIBLE SECONDARY CONCERN
Exemplo: Papel “Observer” (Observer) [HK, 2002]
CDLOC = 4 (Regra 02: Possible Tangled)
CDC / VS = 2 / 5 = 0,4 (Regra 04: Low Scattered)
Component
Screen
Observer
• Pela regra R08:
Laboratório de Engenharia de Software – PUC-Rio
NOAconcern / NOA
NOOconcern / NOO
0,00
0,17
-
1,00
Papel “Observer” é Possible Secondary
20
Regras Heurísticas
R09:
if (LOCconcern / LOC is high) for all components of
POSSIVEL PRIMARY CONCERN then PRIMARY CONCERN
R10:
if (LOCconcern / LOC é baixo) for one or more components
of POSSIVEL SECONDARY CONCERN then SECONDARY CONCERN
Possible
Primary
Concern
R09
Possible
Secondary
Concern
R10
Laboratório de Engenharia de Software – PUC-Rio
Primary
Concern
Secondary
Concern
21
Regras Heurísticas
R09:
if (LOCconcern / LOC is high) for all components of
POSSIVEL PRIMARY CONCERN then PRIMARY CONCERN
R10:
if (LOCconcern / LOC é baixo) for one or more components
of POSSIVEL SECONDARY CONCERN then SECONDARY CONCERN
Exemplo: Papel “Observer” (Observer) [HK, 2002]
CDLOC = 4 (Regra 02: Possible Tangled)
CDC / VS = 2 / 5 = 0,4 (Regra 04: Low Scattered)
Component
NOAconcern / NOA
NOOconcern / NOO
LOCconcern / LOC
0,00
0,17
0,14
-
1,00
1,00
Screen
Observer
Regra R08: Possible Secondary
• Regra R10: Papel “Observer” é Secondary Concern
Laboratório de Engenharia de Software – PUC-Rio
22
R01: if CDLOC is 2 then MODULAR CONCERN
R01
Modular
Concern
Concern
R02: if CDLOC is bigger than 2 then (POSSIBLE) TANGLED
CONCERN
R03: if CDC / VS of (POSSIBLE) TANGLED CONCERN is high
then HIGHLY SCATTERED CONCERN
R02
R04: if CDC / VS of (POSSIBLE) TANGLED CONCERN is not
high then LOW SCATTERED CONCERN
(Possible)
Tangled
Concern
R03
R04
Highly
Scattered
Concern
R05
Low
Scattered
Concern
R06
Possible
Primary
Concern
R07
R08
Possible
Secondary
Concern
R09
Primary
Concern
R05: if (NOAconcern / NOA is high) and (NOOconcern / NOO is
high) for all components of HIGHLY SCATTERED CONCERN
then POSSIBLE PRIMARY CONCERN
R10
Secondary
Concern
Laboratório de Engenharia de Software – PUC-Rio
R06: if (NOAconcern / NOA is not high) and (NOOconcern /
NOO is not high) for one or more components of HIGHLY
SCATTERED CONCERN then POSSIBLE SECONDARY
CONCERN
R07: if (NOAconcern / NOA is high) and (NOOconcern / NOO is
high) for all components of LOW SCATTERED CONCERN then
POSSIBLE PRIMARY CONCERN
R08: if (NOAconcern / NOA is not high) and (NOOconcern /
NOO is not high) for one more components of LOW
SCATTERED CONCERN then POSSIBLE SECONDARY
CONCERN
R09: if (LOCconcern / LOC is high) for all components of
POSSIBLE PRIMARY CONCERN then PRIMARY CONCERN
R10: if (LOCconcern / LOC is not high) for one or more
components of POSSIBLE SECONDARY CONCERN then
SECONDARY CONCERN
23
Trabalhos Futuros
• Aplicar as regras heurísticas em outros sistemas (e
diferentes interesses)
– Portalware (Colaboração, Adaptação, Mobilidade)
– Health Watcher (Persistência, Distribuição)
• Propor regras heurísticas envolvendo tamanho,
acoplamento e coesão (em andamento)
– Aplicar tais regras em estudos de caso.
• Implementar uma ferramenta de suporte ao método
(medição e regras heurísticas) (em andamento)
Laboratório de Engenharia de Software – PUC-Rio
24
Trabalhos Relacionados
• Tekinerdogan propôs um método de análise
orientado a aspecto
– Seu objetivo é avaliar arquitetura de software em
relação a cobertura de cenários
• Sant’Anna et al. define um framework de
avaliação para DSOA em termos de
“reusabilidade” e “manutenibilidade”
– Este framework não inclui um conjunto explícito de
passos, nem regras heurísticas
Laboratório de Engenharia de Software – PUC-Rio
25
Trabalhos Relacionados
• Alencar et al. apresenta uma abordagem para
análise e medição de software orientado a
aspecto utilizando uma linguagem de consulta
– Esta abordagem não apresenta um método definido por
passos, nem regras heurísticas
• Ceccato e Tonella propõe uma ferramenta de
medição de software orientado a aspectos
– Sua ferramenta não é baseado em nenhum método de
avaliação
Laboratório de Engenharia de Software – PUC-Rio
26
Conclusões
• Apenas medições podem não ser suficientes para
revelar qualidades e problemas em um sistema
– Métodos de avaliação (e regras heurísticas) podem ajudar,
especialmente em sistemas complexos
• O método proposto (em especial, as regras
heurísticas) podem encontrar bad smells e
consequentemente, oportunidades para
refactoring
Laboratório de Engenharia de Software – PUC-Rio
27
Bibliografia Principal
[1] Alencar, P. et. al.: A Query-Based Approach for Aspect
Understanding, Measurement and Analysis. Technical Report CS2004-13, School of Computer Science, University of Waterloo, Canada,
(2004).
[2] Cacho, N. et al.: Composing Design Patterns: A Scalability Study of
Aspect-Oriented Programming. Submitted to AOSD’06, Bonn,
Germany, (2006).
[3] Ceccato, M. and Tonella P. Measuring the Effects of Software
Aspectization. In Proceedings of the 1st Workshop on Aspect Reverse
Engineering (CD-ROM), The Netherlands, (2004).
[4] Chidamber, S., Kemerer, C.: A Metrics Suite for Object Oriented
Design. IEEE Transactions on Software Engineering, (1994), pp. 476493.
[5] Fenton, N., Pfleeger, S.: Software Metrics: A Rigorous Practical
Approach. London: PWS, (1997).
[6] Figueiredo, E. et. al.: Assessing Aspect-Oriented Artifacts: Towards
a Tool-Supported Quantitative Method. In Proceedings of the ECOOP
Workshop on Quantitative Approaches in Object-Oriented Software
Engineering (QAOOSE'05), 2005.
[7] Figueiredo, E., Staa, A.: Avaliação de um Modelo de Qualidade para
Implementações Orientadas a Objetos e Orientadas a Aspectos.
Technical Report nº 14/05, 29 pages. Informatic Department, PUC-Rio,
2005.
Laboratório de Engenharia de Software – PUC-Rio
28
Bibliografia Principal
[8] Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns:
Elements of Reusable Object-Oriented Software. AddisonWesley, (1995).
[9] Garcia, A. et al.: Modularizing Design Patterns with Aspects: A
Quantitative Study. In Proceedings of the AOSD’05, Chicago, USA,
(2005), pp. 3-14.
[10] Garcia, A. et al.: Separation of Concerns in Multi-Agent
Systems: An Empirical Study. In Software Engineering for MultiAgent Systems II, Springer, LNCS 2940, (2004).
[11] Hannemann, J., Kiczales, G.: Design Pattern Implementation in
Java and AspectJ. In Proceedings of the OOPSLA’02, (2002), pp.
161-173.
[12] Kiczales, G. et al.: Aspect-Oriented Programming. In Proceedings
of the ECOOP’97, LNCS 1241, Springer, Finland, (1997), pp. 220242.
[13]Kulesza et. al.: Aspectization of Distribution and Persistence:
Quantifying the Effects of AOP. Submitted to IEEE Software
(Special issue on AOSD), 2005.
[14]Sant’Anna, C. et al.: On the Reuse and Maintenance of AspectOriented Software: An Assessment Framework. In Proceedings
of the Brazilian Symposium on Software Engineering, Brazil, (2003),
pp. 19-34.
Laboratório de Engenharia de Software – PUC-Rio
29
Arquitetura da Ferramenta
Laboratório de Engenharia de Software – PUC-Rio
30
R01: Se ( CBC / VS é alto ) e (( DIT / VS é alto ) ou ( NOC / VS é alto )) para o SYSTEM
então HIGHLY COUPLING SYSTEM
R02: Se ( CBC / VS é baixo ) e (( DIT / VS é baixo) ou ( NOC / VS é baixo)) para o SYSTEM
então LOW COUPLING SYSTEM
R03: Se ( LCOO / VS é alto ) para o HIGHLY COUPLING SYSTEM
então HIGHLY COUPLING AND LOW COHESIVE SYSTEM
R04: Se ( LCOO / VS é baixo ) para o HIGHLY COUPLING SYSTEM
então HIGHLY COUPLING AND HIGHLY COHESIVE SYSTEM
R05: Se ( LCOO / VS é alto ) para o LOW COUPLING SYSTEM
então LOW COUPLING AND LOW COHESIVE SYSTEM
R06: Se ( LCOO / VS é baixo ) para o LOW COUPLING SYSTEM
então LOW COUPLING AND HIGHLY COHESIVE SYSTEM
System
R01
R02
Highly
Coupling
R03
Low
Coupling
R04
R05
R06
Highly Coupling
Highly Coupling
Low Coupling
Low Coupling
Low Cohesion
Highly Cohesion
Low Cohesion
Highly Cohesion
Laboratório de Engenharia de Software – PUC-Rio
31
Download

Media:eMagno - (LES) da PUC-Rio