implanter l'aop... comment partir du bon pied?

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

Upload: fbourbonnais

Post on 05-Jul-2015

612 views

Category:

Technology


2 download

DESCRIPTION

Présenté au Confoo 2012, Montréal, Québec, Canada le 29 février 2012.----Depuis quelques années, plusieurs entreprises ont introduit de l'AOP dans leurs projets pour les bénéfices architecturaux et techniques offerts. Malheureusement l'AOP vient également avec son lot de pièges. Pour ces raisons, plusieurs délaissent l'AOP à cause de la complexité indue qui pourrait toutefois être réduite en suivant de simples bonnes pratiques et en préparant adéquatement son intégration.Cette présentation a pour but d'aider une équipe à embrasser l'AOP tout en évitant les pièges. On y traitera de diverses bonnes et mauvaises pratiques avec l'AOP (architecture, IDE, refactoring, tests...). L'accent sera placé sur des conseils pratiques comme le choix de frameworks (ex.: AspectJ ou Spring-AOP), du mode de tissage approprié à votre contexte, des conflits avec d'autres technologies Java, etc.

TRANSCRIPT

Page 1: Implanter l'AOP... Comment partir du bon pied?

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

Confoo  2012  

Montréal,  Québec,  Canada  

29  février  2012  

Page 2: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

Objec2f  de  la  présenta2on  

3 Image: jscreationzs / FreeDigitalPhotos.net

Page 4: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

PRÉOCCUPATIONS  TRANSVERSES  Les  

5

Page 6: Implanter l'AOP... Comment partir du bon pied?

Préoccupa2ons  transverses  

6

Certaines  préoccupa2ons  secondaires  sont  impossibles  à  regrouper  et  contaminent  

plusieurs  classes.  

Angl.: Crosscutting concerns.

Page 7: Implanter l'AOP... Comment partir du bon pied?

Préoccupa2ons  transverses  

Éparpillement  

Enchevêtrement  

7

Page 8: Implanter l'AOP... Comment partir du bon pied?

Préoccupa2ons  transverses  

8

Enchevêtrement  (cohésion)  

Persistance  

Fonc2onnalité  principale  

Sécurité  

Observa2on  

Page 9: Implanter l'AOP... Comment partir du bon pied?

Enchevêtrement  (1)  

9

Page 10: Implanter l'AOP... Comment partir du bon pied?

Enchevêtrement  (2)  

10

Page 11: Implanter l'AOP... Comment partir du bon pied?

Enchevêtrement  (3)  

11

Page 12: Implanter l'AOP... Comment partir du bon pied?

Enchevêtrement  (4)  

12

Page 13: Implanter l'AOP... Comment partir du bon pied?

Enchevêtrement  

(principale)  

13

Page 14: Implanter l'AOP... Comment partir du bon pied?

Enchevêtrement  

(récapitula2f)  

14

Page 15: Implanter l'AOP... Comment partir du bon pied?

Préoccupa2ons  transverses  

15

Éparpillement  (dispersion)  

Persistance  

Page 16: Implanter l'AOP... Comment partir du bon pied?

L’AOP  Introduc2on  à  

16

Page 17: Implanter l'AOP... Comment partir du bon pied?

Orienta2on  objet  et  préoccupa2ons  

Encapsula2on  

Modularité  

Couplage  SRP  

Cohésion  

17

Page 18: Implanter l'AOP... Comment partir du bon pied?

Orienta2on  objet  et  préoccupa2ons  

18

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

Page 19: Implanter l'AOP... Comment partir du bon pied?

Orienta2on  aspect  

19

Aspect  1  Classe  1  

Aspect  2  

Aspect  3  

Classe  2  

C  

C  

A

A

A

Page 20: Implanter l'AOP... Comment partir du bon pied?

LA  TERMINOLOGIE  ET  DU  FONCTIONNEMENT  

Rappel  rapide  de  

20

Page 21: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

Contenu  typique  d’un  aspect  

Code  à  exécuter  

Indica2on  des  cibles   Aspect  

22

Page 23: Implanter l'AOP... Comment partir du bon pied?

Aspect  en  AspectJ  

23

public aspect VisitorAspect { !

!

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

  protected pointcut startMethod() : !

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

!

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

  after() : startMethod() { !

  printHello(); !

}!

!

} !

!

Page 24: Implanter l'AOP... Comment partir du bon pied?

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

Pourquoi  est-­‐ce  que  

24

Page 25: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

Aspect  !=  AOP  

26 Image: Danilo Rizzuti / FreeDigitalPhotos.net

Page 27: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

INTRODUIRE  DE  L’AOP  DANS  VOTRE  PROJET  

Comment  

29

Page 30: Implanter l'AOP... Comment partir du bon pied?

1.  Avoir  un  but…  

30 Image: renjith krishnan / FreeDigitalPhotos.net

Page 31: Implanter l'AOP... Comment partir du bon pied?

2.  Choisir  sa  technologie  

31 Image: Sura Nualpradid / FreeDigitalPhotos.net

Page 32: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

3.  Considérer  la  complexité  ajoutée  

Gains  

Complexité  

34

Page 35: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

MAUVAISES  PRATIQUES  Quelques  

Image: Ambro/ FreeDigitalPhotos.net 38

Page 39: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

BONNES  PRATIQUES  Quelques  

42 Image: photostock / FreeDigitalPhotos.net

Page 43: Implanter l'AOP... Comment partir du bon pied?

OO  encore  d’actualité  

43

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

Page 44: Implanter l'AOP... Comment partir du bon pied?

Conseils  de  base  habituels  

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

44

Page 45: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

TESTS  D’ASPECTS  Bonnes  pra2ques  de  

51

Page 52: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

Tests  unitaires  

53

Page 54: Implanter l'AOP... Comment partir du bon pied?

Tester  unitairement  un  aspect  

La  bonne  chose  (advice)  

Au  bon  moment  (pointcut)  

Test  unitaire  d’aspect  

54

Page 55: Implanter l'AOP... Comment partir du bon pied?

Technique  du  pot  de  miel  

55

Aspect  

Pot  1  

Pot  2  

Pot  N  

X UTest  

1

2

3

Page 56: Implanter l'AOP... Comment partir du bon pied?

56

Page 57: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

QUESTIONS  Période  de  

58

Page 59: Implanter l'AOP... Comment partir du bon pied?

CADRE  APPLICATIF  (FRAMEWORK)  Choisir  son  

59

Page 60: Implanter l'AOP... Comment partir du bon pied?

Quelques  cadres  pour  Java  

! AspectJ  

! Spring-­‐AOP  

! Guice-­‐AOP  

!  …  

60

Page 61: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

Spring  supporte  deux  2sseurs  

Spring  

Spring  AJ  

Spring  AOP  

62

Page 63: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

Syntaxe  ou  2sseur?  

Tissage  

Spring-­‐AOP  (proxy)  

AspectJ  

Spring-­‐AJ  

Syntaxe  (langage)  

XML  

@AspectJ  

Langage  AJ  (.aj)  

65

Page 66: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

MODE  DE  TISSAGE  Choisir  son    

67

Page 68: Implanter l'AOP... Comment partir du bon pied?

Deux  grandes  approches  de  2ssage  

À  la  compila2on  (CTW)  

À  l’exécu2on  (LTW)  

68

Page 69: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

L’INTÉGRATION  Considérer  

71

Page 72: Implanter l'AOP... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

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... Comment partir du bon pied?

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