implanter*l'aop** commentpar2r*du*bon*pied?* · enquête*auprès*de*débutants*(2009)*!...

75
Implanter l'AOP... Comment par2r du bon pied? Confoo 2012 Montréal, Québec, Canada 29 février 2012

Upload: others

Post on 03-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Implanter  l'AOP...    Comment  par2r  du  bon  pied?  

Confoo  2012  

Montréal,  Québec,  Canada  

29  février  2012  

Page 2: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Félix-­‐Antoine  Bourbonnais    Ing.  jr,  PSM-­‐I  

!   Formateur  et  Coach  Agile  

!   Enseignement  et  forma2ons    o  TDD,  Réusinage,  OO  avancé,    AOP,  tests,  Scrum  

!   Recherches    o  AOP,  agilité,  tests  et  mocks  

!  Développeur    o  Java  et  Python  (principalement)  

2

@fbourbonnais

Page 3: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Objec2f  de  la  présenta2on  

3 Image: jscreationzs / FreeDigitalPhotos.net

Page 4: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Réchauffement…  

Quelles  sont  vos  aWentes?  

Qui  fait  ou  a  fait  de  l’AOP  dans  un  projet?  

En  un  mot:  AOP?  

Qui  a  eu  une  mauvaise  expérience  avec  l’AOP?  

4 Image: Nutdanai Apikhomboonwaroot / FreeDigitalPhotos.net

Page 5: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

PRÉOCCUPATIONS  TRANSVERSES  Les  

5

Page 6: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Préoccupa2ons  transverses  

6

Certaines  préoccupa2ons  secondaires  sont  impossibles  à  regrouper  et  contaminent  

plusieurs  classes.  

Angl.: Crosscutting concerns.

Page 7: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Préoccupa2ons  transverses  

Éparpillement  

Enchevêtrement  

7

Page 8: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Préoccupa2ons  transverses  

8

Enchevêtrement  (cohésion)  

Persistance  

Fonc2onnalité  principale  

Sécurité  

Observa2on  

Page 9: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Enchevêtrement  (1)  

9

Page 10: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Enchevêtrement  (2)  

10

Page 11: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Enchevêtrement  (3)  

11

Page 12: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Enchevêtrement  (4)  

12

Page 13: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Enchevêtrement  

(principale)  

13

Page 14: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Enchevêtrement  

(récapitula2f)  

14

Page 15: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Préoccupa2ons  transverses  

15

Éparpillement  (dispersion)  

Persistance  

Page 16: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

L’AOP  Introduc2on  à  

16

Page 17: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Orienta2on  objet  et  préoccupa2ons  

Encapsula2on  

Modularité  

Couplage  SRP  

Cohésion  

17

Page 18: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Orienta2on  objet  et  préoccupa2ons  

18

Théoriquement,  chaque  classe  devrait  représenter  une  seule  préoccupa2on.  

Page 19: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Orienta2on  aspect  

19

Aspect  1  Classe  1  

Aspect  2  

Aspect  3  

Classe  2  

C  

C  

A

A

A

Page 20: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

LA  TERMINOLOGIE  ET  DU  FONCTIONNEMENT  

Rappel  rapide  de  

20

Page 21: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Un  aspect  

!  Un  module  encapsulant  une  préoccupa2on  

!   Peu  gérer  les  préoccupa2ons  transverses  !  Généralement  une  classe  «  évoluée  »  

o  Capacités  supplémentaires  afin  de  permeWre  l’encapsula2on  de  préoccupa2ons  transverses  

21

Page 22: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Contenu  typique  d’un  aspect  

Code  à  exécuter  

Indica2on  des  cibles   Aspect  

22

Page 23: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Aspect  en  AspectJ  

23

public aspect VisitorAspect { !

!

/∗ −−−−−−−− Pointcuts −−−−−−−− ∗/ !

  protected pointcut startMethod() : !

  execution( ∗ start∗(..) ); !

!

  /∗ −−−−−−−− Advices −−−−−−−− ∗/ !

  after() : startMethod() { !

  printHello(); !

}!

!

} !

!

Page 24: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

L’AOP  N’A  PAS  AUTANT  RAYONNÉ  QUE  PRÉVU?  

Pourquoi  est-­‐ce  que  

24

Page 25: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Pourquoi  est-­‐ce  que  plusieurs  entreprises  délaissent  l’AOP?  

Mauvaises  raisons  et  u2lisa2ons  

Complexité  ajoutée  

Manque  de  support  et  d’intégra2on  

Manque  de  connaissances  et  de  compétences  

Trop  de  promesses  

25

Page 26: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Aspect  !=  AOP  

26 Image: Danilo Rizzuti / FreeDigitalPhotos.net

Page 27: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Enquête  auprès  de  débutants  (2009)  

!   Pas  plus  difficile  à  apprendre  que  l’OO  (74%)  

!   Il  est  difficile  de  tester  un  aspect  (100%)  o  N’avaient  pas  une  grande  expérience  avec  les  tests.  

!   Les  tests  sont  simplifiés  grâce  à  l’AOP  (67%)  

!   Plusieurs  autres  difficultés  sont  causées  par  un  manque  d’expérience  

!   100%  réu2liseraient  l’AOP  mais  62%  avec  prudence  

27

[1] Félix-Antoine Bourbonnais and Luc Lamontagne, Using AOP for an Academic Agile Project: A Pilot Study, 1st International Workshop on Empirical Evaluation of Software Composition Techniques (ESCOT 2010), Rennes, France, 2010.

Page 28: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Enquête  auprès  de  débutants  (2009)  

!   Le  contexte  o  Étudiants  de  bacc.  (3e/4e  année)  o  Projet  de  session  (3  mois)  o  Portail  financier  web  avec  GWT  ou  Spring  

!   Pour  les  autres  données  et  le  contexte  détaillé:  o  Félix-­‐Antoine  Bourbonnais  and  Luc  Lamontagne,    

Using  AOP  for  an  Academic  Agile  Project:  A  Pilot  Study  ESCOT  2012,  Renne,  France,  20120.  

o  hWp://www.comp.lancs.ac.uk/~greenwop/escot10/escot10_submission_2.pdf  

28

Cri2que  de  la  validité  

Page 29: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

INTRODUIRE  DE  L’AOP  DANS  VOTRE  PROJET  

Comment  

29

Page 30: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

1.  Avoir  un  but…  

30 Image: renjith krishnan / FreeDigitalPhotos.net

Page 31: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

2.  Choisir  sa  technologie  

31 Image: Sura Nualpradid / FreeDigitalPhotos.net

Page 32: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Choix  technologiques  

!   Tisseur  /  cadre  applica2f  (framework)  o  Compilateur  spécial  o  Pur  java  

!  Mode  de  2ssage  o  LTW  (au  chargement  des  classes)  o  CTW  (à  la  compila2on)  

32

Page 33: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Choix  technologiques  

!   Syntaxe  o  Java  o  AspectJ  Language  (.aj)  o @AspectJ  o  XML  

!   Intégra2on  o Maven  o  AJDT  

33

Page 34: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

3.  Considérer  la  complexité  ajoutée  

Gains  

Complexité  

34

Page 35: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

4.  Considérer  l’intégra2on  

!  Avec  d’autres  cadres  applica2fs  (framework)  

!   Le  système  de  déploiement    

!   L’intégrateur  con2nu  !   Les  technologie  de  tests  !   Etc.  

35 Image: manostphoto / FreeDigitalPhotos.net

Page 36: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

5.  S’assurer  de  maîtriser  les  concepts  

36

Rappelez-­‐vous  que  vous  introduisez  un  nouveau  paradigme  et  non  pas  simplement  une  

technologie  «  cool  »!  

!   Prototyper  !   Essayer  sur  un  pe2t  projet  

!   Bien  se  documenter  

!   Bien  former  son  équipe  

Image: renjith krishnan / FreeDigitalPhotos.net

Page 37: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

6.  Se  discipliner  

!   Résistez  au  «  canon    pour  tuer  une  mouche  »  

!   L’AO  tourne  généralement  mal  entre    les  mains  de  cowboys  

!   Balancez  toujours  la  complexité    versus  le  gain  

!   Tester!  

37 Image: photostock / FreeDigitalPhotos.net

Page 38: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

MAUVAISES  PRATIQUES  Quelques  

Image: Ambro/ FreeDigitalPhotos.net 38

Page 39: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Trop,  c’est  comme  pas  assez…  

!  Quand  50%  du  code  est  composé  d’aspects…    

!   Est-­‐ce  50%  du  code  est  composé  de  préoccupa2ons  transverses?  

Image: farconville / FreeDigitalPhotos.net 39

Page 40: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

L’AOP  n’est  pas  un  pansement  

!   Suis-­‐je  en  train  d’u2liser  l’AOP  pour  corriger  un  problème  de  design?    

!  Ne  vous  servez  pas  de  l’AOP  comme  parfum  afin  de  masquer  les  mauvaises  odeurs…  

Image: digitalart / FreeDigitalPhotos.net 40

Page 41: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Le  «  trip  techno  »  

41

L’AOP  c’est  trop  COOL  !!  

La  chute  pourrait  être  douloureuse!  

•  «  AspectJ...  WOW  trop  cool  !  »  •  «  On  peut  bidouiller  plein  de  trucs  avec  ça  !  »  •  «  Tsé  le  truc  qu’on  arrivait  pas  à  faire...  on  va  faire  un  aspect  qui  va  

changer  ça  puis  qui  va  décider  si…  »    

Page 42: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

BONNES  PRATIQUES  Quelques  

42 Image: photostock / FreeDigitalPhotos.net

Page 43: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

OO  encore  d’actualité  

43

Ce  qui  était  vrai  en  OO  l’est  encore  en  AO  

Page 44: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Conseils  de  base  habituels  

!   Code  propre  !   Cohésion  dans  l’aspect  !   Couplage  de  l’aspect  

44

Page 45: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Un  aspect?  Vraiment?  

45

Est-­‐ce  une  préoccupa2on  transverse?  

 

Est-­‐ce  que  je  pourrais  réusiner  mon  design  OO  pour  aWeindre  le  même  objec2f?  

Page 46: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

U2liser  l’aspect  comme  «  lien  »  

!   Déléguer  à  une  classe  qui  con2ent  la  logique  liée  à  ceWe  préoccupa2on  

!   U2liser  l’aspect  pour  2sser  la  logique  !   Note:  Peut  varier  en  fonc2on  du  2sseur  (ex.:  AspectJ)  

46

pointcut inXorY() :

execution(* *(..))

&& within(X || Y);

after() : inXorY {

persistance.clearCache();

}

X  (classe  cible)  

Y  (classe  cible)  

Aspect  

Persistance  (classe  à  2sser)  

Page 47: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Dépendances  et  couplage  

!  N’oubliez  pas  que  l’aspect  est  couplé  à  toutes  les  classes  où  il  s’injecte*.      *  Où  un  point  de  coupure  apparie  

Image: Salvatore Vuono / FreeDigitalPhotos.net 47

Page 48: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Limiter  le  couplage  

48

Un  aspect  trop  fortement  couplé  et  ayant  des  dépendances  éloignées  augmente  la  complexité́  

et  le  rend  vulnérable  aux  changements.  

«  AOSD-­‐Evolu2on  Paradox  »  [1]    

 

[1] Dean Wampler, Aspect-Oriented programming and design for java and AspectJ, 2007. http://polyglotprogramming.com/papers/AOPIntroAndPrinciplesTalk.pdf.

Page 49: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Précision  du  point  de  coupure  

!   Un  PC  précis  est  plus  à  risque  d’être  impacté  par  un  changement  

!   Un  PC  très  générique  risque  d’apparier  trop  de  PJ  !   On  appelle  cela  le  «  Fragile  Pointcut  Problem  »  [1]    

49

pointcut pcPrecis() : execution(void C.doX());

pointcut pcGenerique() : execution(* C.doX*(..));

pointcut pcPourEtreCertainAvoirProbleme : execution(* *(..));

-  Si C.doX() est renommé pour C.doXInContext() … -  Si on ajoute C.doXPasRapportAvecAspect() …

[1] C. Koppen et M. Störzer. PCDiff : attacking the fragile pointcut problem. In European Interactive Workshop on Aspects in Software (EIWAS), 2004.

Page 50: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Conscience  ou  inconscience?  

50

Est-­‐ce  que  les  classes  2ssées  devraient  avoir  conscience  ou  non  des  aspects?  

 

Débat  ouvert    «  obliviousness  »  vs  «  awareness  »  

Page 51: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

TESTS  D’ASPECTS  Bonnes  pra2ques  de  

51

Page 52: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Tests  de  haut  niveau  

52

Les  aspects  contribuent  aux  fonc2onnalités  globales  du  système  

 

Rien  ne  change  pour  les  tests  de  haut  niveau  (fonc2onnels,  accepta2on,  etc.)  

Page 53: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Tests  unitaires  

53

Page 54: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Tester  unitairement  un  aspect  

La  bonne  chose  (advice)  

Au  bon  moment  (pointcut)  

Test  unitaire  d’aspect  

54

Page 55: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Technique  du  pot  de  miel  

55

Aspect  

Pot  1  

Pot  2  

Pot  N  

X UTest  

1

2

3

Page 56: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

56

Page 57: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Encore  faim?  

Image: rajcreationzs / FreeDigitalPhotos.ne 57

Téléchargez  les  diaposi2ves  complètes  sur  developpementagile.com  

hWps://joind.in/6005  

Page 58: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

QUESTIONS  Période  de  

58

Page 59: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

CADRE  APPLICATIF  (FRAMEWORK)  Choisir  son  

59

Page 60: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Quelques  cadres  pour  Java  

! AspectJ  

! Spring-­‐AOP  

! Guice-­‐AOP  

!  …  

60

Page 61: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

AspectJ  

!   Le  plus  complet  o  Plusieurs  primi2ves  o  Plusieurs  PJ  possibles  

!   Extension  à  Java  o  Requiert  un  compilateur  d’Aspects  o Ou  de  remplacer  le  chargement  des  classes    (CL  ou  Java  Agent)  

61

Page 62: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Spring  supporte  deux  2sseurs  

Spring  

Spring  AJ  

Spring  AOP  

62

Page 63: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Sprint-­‐AOP  

!   Java  100%  pur  o  Ne  requiert  pas  de  compilateur  spécial  o  Ne  requiert  pas  de  Java  Agent  o  U2lise  des  «  Proxies  »  dynamiques  

!   Limita2ons  o  Tissage  possible  uniquement  dans  des  Beans  Spring  o  Peu  de  primi2ves  et  limitées  (ex.:  exécu2on  de  méthodes)  o  Ne  peut  intercepter  des  appels  à  «  this  »  

63

Page 64: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Spring-­‐Aj  

! Spring  peut  se  servir  d’aspects  de  Spring  pour  élargir  ses  fonc2onnalités  

! Spring  se  sert  d’AspectJ  pour  lui-­‐même  

!  @Configurable  permet  d’injecter  des  dépendances  dans  des  objets  qui  ne  sont  pas  des  Beans  

64

Souvent  une  mauvaise  odeur  concernant  le  design…  Spring  

FW++  AspectJ  Spring  

AJ  

Page 65: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Syntaxe  ou  2sseur?  

Tissage  

Spring-­‐AOP  (proxy)  

AspectJ  

Spring-­‐AJ  

Syntaxe  (langage)  

XML  

@AspectJ  

Langage  AJ  (.aj)  

65

Page 66: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Google  Guice  

!   Limita2ons  similaires  à  Spring-­‐AOP  (par  «  proxies  »)  

!   Syntaxe  propre  o  Java  o  Pas  de  syntaxe  cachée  dans  les  chaînes  de  caractères  des  annota2ons  (comme  @AspectJ)  

66

Page 67: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

MODE  DE  TISSAGE  Choisir  son    

67

Page 68: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Deux  grandes  approches  de  2ssage  

À  la  compila2on  (CTW)  

À  l’exécu2on  (LTW)  

68

Page 69: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

CTW  (Compile-­‐Time  Weaving)  

69

!   Tissage  à  la  compila2on  

!   Remplace  généralement  le  compilateur  de  Java  

!   Peut  2sser  uniquement  dans  le  code  compilé  (pas  dans  une  lib.  externe)  

!   Produit  du  Bytecode  standard  2ssé  

Page 70: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

LTW  (Load-­‐Time  Weaving)  

70

!   Tissage  lors  du  chargement  de  la  classe  

!   Remplace  (assiste)  le  chargeur  de  classes  de  Java  (ClassLoader)  

!   Requiert  généralement  le  démarrage  de  la  JVM  avec  un  JavaAgent  

!   Peut  être  probléma2que  avec  des  JEE  Container  ou  entrer  en  conflit  avec  d’autres  instrumenta2ons  

Page 71: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

L’INTÉGRATION  Considérer  

71

Page 72: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

AJDT  

!   Plugin  Eclipse  pour  AspectJ  !  Désagrément  sub2le:  

o  Force  le  CTW  sur  le  projet  dans  Eclipse  quand  la  nature  «  AspectJ  »  est  ac2vée  

!  Offre  de  l’assistance  o  Complé2on  (limitée)  o  Réusinage  (limité)  o  Colora2on  syntaxique  et  validateur  

72

Page 73: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Maven  

!   Plugin  pour  AspectJ  !   Si  combiné  avec  AJDT  

o  Compile  avec  AJC  versus  JDT-­‐AJ  pour  Eclipse  o  Toujours  faire  «  mvn  clean  »  pour  éviter  les  problèmes  

!   Pour  du  LTW  u2lisez  le  Exec  Mabven  Plugin  (ou  autre)  et  passez  le  JavaAgent  

73

Page 74: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Spring  +  AJ  

!  U2liser  le  Java  Agent  de  Spring  plutôt  que  celui  par  défaut  d’AspectJ  

!  AWen2on  à  la  combinaison  Spring-­‐AOP  (proxy)  et  AJDT  

74

Page 75: Implanter*l'AOP** Commentpar2r*du*bon*pied?* · Enquête*auprès*de*débutants*(2009)*! Pas*plus*difficile*àapprendre*que*l’OO*(74%)*! Il*estdifficile*de*tester*un*aspect(100%)*

Autres  considéra2ons  

! Maven  o  Il  est  possible  que  les  métriques  soient  comptées  en  double  en  CTW.  

o  Ex.:  couverture  des  tests  

!   JEE  Container  et  Spring  o  Des  chargeurs  de  classes  spécifiques  sont  disponibles  pour  plusieurs  JEE  Container.  

o  Sinon,  il  faut  se  rabaWre  sur  u  Java  Agent  de  la  JVM  

75