Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Objec2f  de  la  présenta2on   3 Image: jscreationzs / FreeDigitalPhotos.net

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

PRÉOCCUPATIONS  TRANSVERSES   Les   5

Slide 6

Slide 6 text

Préoccupa2ons  transverses   6 Certaines  préoccupa2ons  secondaires  sont   impossibles  à  regrouper  et  contaminent   plusieurs  classes.   Angl.: Crosscutting concerns.

Slide 7

Slide 7 text

Préoccupa2ons  transverses   Éparpillement   Enchevêtrement   7

Slide 8

Slide 8 text

Préoccupa2ons  transverses   8 Enchevêtrement  (cohésion)   Persistance   Fonc2onnalité   principale   Sécurité   Observa2on  

Slide 9

Slide 9 text

Enchevêtrement  (1)   9                                                                                                                                                   

Slide 10

Slide 10 text

Enchevêtrement  (2)   10

Slide 11

Slide 11 text

Enchevêtrement  (3)   11

Slide 12

Slide 12 text

Enchevêtrement  (4)   12

Slide 13

Slide 13 text

Enchevêtrement   (principale)   13

Slide 14

Slide 14 text

Enchevêtrement   (récapitula2f)   14

Slide 15

Slide 15 text

Préoccupa2ons  transverses   15 Éparpillement  (dispersion)   Persistance  

Slide 16

Slide 16 text

L’AOP   Introduc2on  à   16

Slide 17

Slide 17 text

Orienta2on  objet  et  préoccupa2ons   Encapsula2on   Modularité   Couplage   SRP   Cohésion   17

Slide 18

Slide 18 text

Orienta2on  objet  et  préoccupa2ons   18 Théoriquement,  chaque  classe  devrait   représenter  une  seule  préoccupa2on.  

Slide 19

Slide 19 text

Orienta2on  aspect   19 Aspect  1   Classe  1   Aspect  2   Aspect  3   Classe  2   C   C   A A A

Slide 20

Slide 20 text

LA  TERMINOLOGIE  ET  DU   FONCTIONNEMENT   Rappel  rapide  de   20

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Contenu  typique  d’un  aspect   Code  à   exécuter   Indica2on   des  cibles   Aspect   22

Slide 23

Slide 23 text

Aspect  en  AspectJ   23 public aspect VisitorAspect { ! ! /∗ −−−−−−−− Pointcuts −−−−−−−− ∗/ ! protected pointcut startMethod() : ! execution( ∗ start∗(..) ); ! ! /∗ −−−−−−−− Advices −−−−−−−− ∗/ ! after() : startMethod() { ! printHello(); ! }! ! } ! !

Slide 24

Slide 24 text

L’AOP  N’A  PAS  AUTANT  RAYONNÉ   QUE  PRÉVU?   Pourquoi  est-­‐ce  que   24

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Aspect  !=  AOP   26 Image: Danilo Rizzuti / FreeDigitalPhotos.net

Slide 27

Slide 27 text

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.

Slide 28

Slide 28 text

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é  

Slide 29

Slide 29 text

INTRODUIRE  DE  L’AOP  DANS   VOTRE  PROJET   Comment   29

Slide 30

Slide 30 text

1.  Avoir  un  but…   30 Image: renjith krishnan / FreeDigitalPhotos.net

Slide 31

Slide 31 text

2.  Choisir  sa  technologie   31 Image: Sura Nualpradid / FreeDigitalPhotos.net

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

Choix  technologiques   !   Syntaxe   o  Java   o  AspectJ  Language  (.aj)   o  @AspectJ   o  XML   !   Intégra2on   o  Maven   o  AJDT   33

Slide 34

Slide 34 text

3.  Considérer  la  complexité  ajoutée   Gains   Complexité   34

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

MAUVAISES  PRATIQUES   Quelques   Image: Ambro/ FreeDigitalPhotos.net 38

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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…  »    

Slide 42

Slide 42 text

BONNES  PRATIQUES   Quelques   42 Image: photostock / FreeDigitalPhotos.net

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

Conseils  de  base  habituels   !   Code  propre   !   Cohésion  dans  l’aspect   !   Couplage  de  l’aspect   44

Slide 45

Slide 45 text

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?  

Slide 46

Slide 46 text

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)  

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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.

Slide 49

Slide 49 text

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.

Slide 50

Slide 50 text

Conscience  ou  inconscience?   50 Est-­‐ce  que  les  classes  2ssées  devraient  avoir   conscience  ou  non  des  aspects?     Débat  ouvert     «  obliviousness  »  vs  «  awareness  »  

Slide 51

Slide 51 text

TESTS  D’ASPECTS   Bonnes  pra2ques  de   51

Slide 52

Slide 52 text

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.)  

Slide 53

Slide 53 text

Tests  unitaires   53

Slide 54

Slide 54 text

Tester  unitairement  un  aspect   La  bonne   chose   (advice)   Au  bon   moment   (pointcut)   Test   unitaire   d’aspect   54

Slide 55

Slide 55 text

Technique  du  pot  de  miel   55 Aspect   Pot  1   Pot  2   Pot  N   X UTest   1 2 3                     

Slide 56

Slide 56 text

56                                      

Slide 57

Slide 57 text

Encore  faim?   Image: rajcreationzs / FreeDigitalPhotos.ne 57 Téléchargez  les  diaposi2ves  complètes  sur   developpementagile.com   hWps://joind.in/6005  

Slide 58

Slide 58 text

QUESTIONS   Période  de   58

Slide 59

Slide 59 text

CADRE  APPLICATIF  (FRAMEWORK)   Choisir  son   59

Slide 60

Slide 60 text

Quelques  cadres  pour  Java   ! AspectJ   ! Spring-­‐AOP   ! Guice-­‐AOP   !   …   60

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

Spring  supporte  deux  2sseurs   Spring   Spring   AJ   Spring   AOP   62

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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  

Slide 65

Slide 65 text

Syntaxe  ou  2sseur?   Tissage   Spring-­‐AOP  (proxy)   AspectJ   Spring-­‐AJ   Syntaxe  (langage)   XML   @AspectJ   Langage  AJ  (.aj)   65

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

MODE  DE  TISSAGE   Choisir  son     67

Slide 68

Slide 68 text

Deux  grandes  approches  de  2ssage   À  la  compila2on  (CTW)   À  l’exécu2on  (LTW)   68

Slide 69

Slide 69 text

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é  

Slide 70

Slide 70 text

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  

Slide 71

Slide 71 text

L’INTÉGRATION   Considérer   71

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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