SlideShare une entreprise Scribd logo
1  sur  57
Implanter l'AOP...
Comment partir du bon pied?
          Confoo 2012
    Montréal, Québec, Canada


           29 février 2012
Félix-Antoine Bourbonnais
Ing. jr, PSM-I


    Formateur et Coach Agile
    Enseignement et formations
     o TDD, Réusinage, OO avancé,
       AOP, tests, Scrum
    Recherches
     o AOP, agilité, tests et mocks
    Développeur
     o Java et Python (principalement)   @fbourbonnais



                                         2
Objectif de la présentation




Image: jscreationzs / FreeDigitalPhotos.net   3
Réchauffement…

                                         Quelles sont vos attentes?


                                   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?

Image: Nutdanai Apikhomboonwaroot / FreeDigitalPhotos.net           4
Les

PRÉOCCUPATIONS TRANSVERSES


                     5
Préoccupations transverses
Angl.: Crosscutting concerns.




     Certaines préoccupations secondaires sont
      impossibles à regrouper et contaminent
                  plusieurs classes.




                                     6
Préoccupations transverses



                          Enchevêtrement



          Éparpillement




                                           7
Préoccupations transverses
Enchevêtrement (cohésion)


                            Fonctionnalité
                              principale


                             Persistance


                               Sécurité


                             Observation




                                     8
Enchevêtrement (1)
                     9
Enchevêtrement (2)
                     10
Enchevêtrement (3)
                     11
Enchevêtrement (4)
                     12
Enchevêtrement
(principale)
                 13
Enchevêtrement
(récapitulatif)
                  14
Préoccupations transverses
Éparpillement (dispersion)

                Persistance




                              15
Introduction à

L’AOP


                 16
Orientation objet et préoccupations

                         Encapsulation




        Cohésion                               Modularité




                   SRP                   Couplage



                                                     17
Orientation objet et préoccupations




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




                                 18
Orientation aspect
                     C                              A


                         Classe 1        Aspect 1



                                                    A
                     C
                                         Aspect 2

                         Classe 2                   A
                                         Aspect 3




                                    19
Rappel rapide de

LA TERMINOLOGIE ET DU
FONCTIONNEMENT

                        20
Un aspect
 Un module encapsulant une préoccupation
 Peu gérer les préoccupations transverses
 Généralement une classe « évoluée »
 o Capacités supplémentaires afin de permettre
   l’encapsulation de préoccupations transverses




                                            21
Contenu typique d’un aspect



  Code à      Indication
                                Aspect
 exécuter     des cibles




                           22
Aspect en AspectJ
public aspect VisitorAspect {


    /∗ −−−−−−−− Pointcuts −−−−−−−− ∗/
    protected pointcut startMethod() :
        execution( ∗ start∗(..) );


    /∗ −−−−−−−− Advices −−−−−−−− ∗/
    after() : startMethod() {
        printHello();
    }


}




                                         23
Pourquoi est-ce que

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

                       24
Pourquoi est-ce que plusieurs
entreprises délaissent l’AOP?
   Mauvaises raisons et utilisations

     Complexité ajoutée

      Manque de support et d’intégration

     Manque de connaissances et de compétences

   Trop de promesses

                                       25
Aspect != AOP




Image: Danilo Rizzuti / FreeDigitalPhotos.net   26
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éutiliseraient l’AOP mais 62% avec prudence

[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
                                                                                        27
(ESCOT 2010), Rennes, France, 2010.
Enquête auprès de débutants (2009)
Critique de la validité

   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 http://www.comp.lancs.ac.uk/~greenwop/escot10/escot10_submissio
      n_2.pdf
                                                               28
Comment

INTRODUIRE DE L’AOP DANS VOTRE
PROJET

                      29
1. Avoir un but…




Image: renjith krishnan / FreeDigitalPhotos.net   30
2. Choisir sa technologie




Image: Sura Nualpradid / FreeDigitalPhotos.net   31
Choix technologiques
 Tisseur / cadre applicatif (framework)
 o Compilateur spécial
 o Pur java
 Mode de tissage
 o LTW (au chargement des classes)
 o CTW (à la compilation)




                                          32
Choix technologiques
 Syntaxe
 o Java
 o AspectJ Language (.aj)
 o @AspectJ
 o XML
 Intégration
 o Maven
 o AJDT


                            33
3. Considérer la complexité ajoutée

                      Gains




      Complexité

                          34
4. Considérer l’intégration
     Avec d’autres cadres
     applicatifs (framework)
     Le système de
     déploiement
     L’intégrateur continu
     Les technologie de tests
     Etc.


Image: manostphoto / FreeDigitalPhotos.net   35
5. S’assurer de maîtriser les concepts

Rappelez-vous que vous introduisez un nouveau
    paradigme et non pas simplement une
            technologie « cool »!
     Prototyper
     Essayer sur un petit projet
     Bien se documenter
     Bien former son équipe




Image: renjith krishnan / FreeDigitalPhotos.net   36
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!




Image: photostock / FreeDigitalPhotos.net   37
Quelques

    MAUVAISES PRATIQUES

Image: Ambro/ FreeDigitalPhotos.net   38
Trop, c’est comme pas assez…
     Quand 50% du code est
     composé d’aspects…

     Est-ce 50% du code est
     composé de
     préoccupations
     transverses?




Image: farconville / FreeDigitalPhotos.net   39
L’AOP n’est pas un pansement
     Suis-je en train d’utiliser
     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
Le « trip techno »

                L’AOP c’est trop COOL !!
     La chute pourrait être douloureuse!

    • « AspectJ... WOW trop cool ! »
    • « On peut bidouiller plein de trucs avec ça ! »
    •                                  faire... on va faire un aspect qui va
      changer ça puis qui va décider si… »




                                                            41
Quelques

    BONNES PRATIQUES

Image: photostock / FreeDigitalPhotos.net   42
OO encore d’actualité




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




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




                             44
Un aspect? Vraiment?


    Est-ce une préoccupation transverse?


Est-ce que je pourrais réusiner mon design OO
       pour atteindre le même objectif?



                                 45
Utiliser l’aspect comme « lien »
     Déléguer à une classe qui contient la logique liée à cette
     préoccupation
     Utiliser l’aspect pour tisser la logique
     Note: Peut varier en fonction du tisseur (ex.: AspectJ)

pointcut inXorY() :
    execution(* *(..))
                                      X
                                (classe cible)




                                                 Aspect
    && within(X || Y);                                           Persistance
                                                               (classe à tisser)
after() : inXorY {
                                      Y
                                (classe cible)
    persistance.clearCache();
}

                                                          46
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
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]

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.
                                                                                49
In European Interactive Workshop on Aspects in Software (EIWAS), 2004.
Conscience ou inconscience?

 Est-ce que les classes tissées devraient avoir
       conscience ou non des aspects?


                Débat ouvert
     « obliviousness » vs « awareness »


                                    50
Bonnes pratiques de

TESTS D’ASPECTS


                      51
Tests de haut niveau

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


 Rien ne change pour les tests de haut niveau
       (fonctionnels, acceptation, etc.)


                                   52
Tests unitaires




                  53
Tester unitairement un aspect

     La bonne
       chose
       (advice)

                     Test
                   unitaire
      Au bon
                   d’aspect
      moment
      (pointcut)



                         54
Technique du pot de miel


        1           Pot 1
UTest
                    Pot 2   X   Aspect
                2

            3
                    Pot N




                                         55
56
Encore faim?                                  https://joind.in/6005




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




Image: rajcreationzs / FreeDigitalPhotos.ne   57
Période de

QUESTIONS

             58

Contenu connexe

Tendances

AT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillagesAT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillagesJérôme Avoustin
 
AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgile Toulouse
 
Propulsez votre architecture grâce au TDD et aux Mocks (Agile Tour Québec 2012)
Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)
Propulsez votre architecture grâce au TDD et aux Mocks (Agile Tour Québec 2012)Elapse Technologies
 
Innovations Techniques Au Service Du Test De Recette Automatisé
Innovations Techniques Au Service Du Test De Recette AutomatiséInnovations Techniques Au Service Du Test De Recette Automatisé
Innovations Techniques Au Service Du Test De Recette AutomatiséEmmanuel Hugonnet
 
Modélisation par Objets - Introduction - De Merise à UML
Modélisation par Objets - Introduction - De Merise à UMLModélisation par Objets - Introduction - De Merise à UML
Modélisation par Objets - Introduction - De Merise à UMLMireille Blay-Fornarino
 
Implanter l'AOP... Comment partir du bon pied?
Implanter l'AOP... Comment partir du bon pied?Implanter l'AOP... Comment partir du bon pied?
Implanter l'AOP... Comment partir du bon pied?fbourbonnais
 
Agilité, Tests Et Industrialisation
Agilité, Tests Et IndustrialisationAgilité, Tests Et Industrialisation
Agilité, Tests Et IndustrialisationPHPPRO
 
Industrialisation des développements Java
Industrialisation des développements JavaIndustrialisation des développements Java
Industrialisation des développements JavaChristian Blavier
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1vangogue
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyGuillaume Laforge
 
201001 TDD
201001 TDD201001 TDD
201001 TDDlyonjug
 
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogène
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogèneMise en œuvre de TFS 2010 dans un environnement technologique hétérogène
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogèneMicrosoft Technet France
 
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogène
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogèneMise en œuvre de TFS 2010 dans un environnement technologique hétérogène
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogèneGrégory Ott
 
Coding Dojo - Kata sur le pilotage par les tests d'acceptances (ATDD)
Coding Dojo - Kata sur le pilotage par les tests d'acceptances (ATDD)Coding Dojo - Kata sur le pilotage par les tests d'acceptances (ATDD)
Coding Dojo - Kata sur le pilotage par les tests d'acceptances (ATDD)Agile Tour Genève
 
Introduction rapide à 'objet et à UML
Introduction rapide à 'objet et  à UML Introduction rapide à 'objet et  à UML
Introduction rapide à 'objet et à UML Mireille Blay-Fornarino
 
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureGuillaume Laforge
 

Tendances (20)

AT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillagesAT Marseille 2011 - Réduisons les gaspillages
AT Marseille 2011 - Réduisons les gaspillages
 
AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratique
 
Propulsez votre architecture grâce au TDD et aux Mocks (Agile Tour Québec 2012)
Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)Propulsez votre architecture grâce au TDD et aux Mocks  (Agile Tour Québec 2012)
Propulsez votre architecture grâce au TDD et aux Mocks (Agile Tour Québec 2012)
 
Soigner Sa Schizophrénie
Soigner Sa SchizophrénieSoigner Sa Schizophrénie
Soigner Sa Schizophrénie
 
Innovations Techniques Au Service Du Test De Recette Automatisé
Innovations Techniques Au Service Du Test De Recette AutomatiséInnovations Techniques Au Service Du Test De Recette Automatisé
Innovations Techniques Au Service Du Test De Recette Automatisé
 
Modélisation par Objets - Introduction - De Merise à UML
Modélisation par Objets - Introduction - De Merise à UMLModélisation par Objets - Introduction - De Merise à UML
Modélisation par Objets - Introduction - De Merise à UML
 
Introduction à Uml
Introduction à UmlIntroduction à Uml
Introduction à Uml
 
Implanter l'AOP... Comment partir du bon pied?
Implanter l'AOP... Comment partir du bon pied?Implanter l'AOP... Comment partir du bon pied?
Implanter l'AOP... Comment partir du bon pied?
 
Agilité, Tests Et Industrialisation
Agilité, Tests Et IndustrialisationAgilité, Tests Et Industrialisation
Agilité, Tests Et Industrialisation
 
Clean code en pratique
Clean code en pratiqueClean code en pratique
Clean code en pratique
 
Industrialisation des développements Java
Industrialisation des développements JavaIndustrialisation des développements Java
Industrialisation des développements Java
 
Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014 Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec Groovy
 
201001 TDD
201001 TDD201001 TDD
201001 TDD
 
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogène
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogèneMise en œuvre de TFS 2010 dans un environnement technologique hétérogène
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogène
 
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogène
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogèneMise en œuvre de TFS 2010 dans un environnement technologique hétérogène
Mise en œuvre de TFS 2010 dans un environnement technologique hétérogène
 
Coding Dojo - Kata sur le pilotage par les tests d'acceptances (ATDD)
Coding Dojo - Kata sur le pilotage par les tests d'acceptances (ATDD)Coding Dojo - Kata sur le pilotage par les tests d'acceptances (ATDD)
Coding Dojo - Kata sur le pilotage par les tests d'acceptances (ATDD)
 
Introduction rapide à 'objet et à UML
Introduction rapide à 'objet et  à UML Introduction rapide à 'objet et  à UML
Introduction rapide à 'objet et à UML
 
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans rupture
 

Similaire à Implanter l'AOP... Comment partir du bon pied?

Pascal Morenton PLM March 2009
Pascal Morenton PLM March 2009Pascal Morenton PLM March 2009
Pascal Morenton PLM March 2009guest24d837
 
eXtreme Programming [fr]
eXtreme Programming [fr]eXtreme Programming [fr]
eXtreme Programming [fr]Rémy Coutable
 
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013Xavier NOPRE
 
Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns JavaVINOT Bernard
 
Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011agnes_crepet
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Laurent BUNIET
 
Développez le management visuel
Développez le management visuelDéveloppez le management visuel
Développez le management visuelThomas Lissajoux
 
Architecture Agile durable (v 2.0)
 Architecture Agile durable (v 2.0) Architecture Agile durable (v 2.0)
Architecture Agile durable (v 2.0)Elapse Technologies
 
RTC Tontons Flexeurs slideshare 1
RTC Tontons Flexeurs slideshare 1RTC Tontons Flexeurs slideshare 1
RTC Tontons Flexeurs slideshare 1RTconsultants
 
m103-resume-cours-theorique-6156f136c407b.pdf
m103-resume-cours-theorique-6156f136c407b.pdfm103-resume-cours-theorique-6156f136c407b.pdf
m103-resume-cours-theorique-6156f136c407b.pdfFootballLovers9
 
Résolution de problèmes de classification par algorithmes évolutionnaires grâ...
Résolution de problèmes de classification par algorithmes évolutionnaires grâ...Résolution de problèmes de classification par algorithmes évolutionnaires grâ...
Résolution de problèmes de classification par algorithmes évolutionnaires grâ...Stéphane Legrand
 
201001 Agilité
201001 Agilité201001 Agilité
201001 Agilitélyonjug
 
Design Patterns (2003)
Design Patterns (2003)Design Patterns (2003)
Design Patterns (2003)Pascal Roques
 
Mercredi 31 aout 2011 xxl3
Mercredi 31 aout 2011 xxl3Mercredi 31 aout 2011 xxl3
Mercredi 31 aout 2011 xxl3sergedicredico
 

Similaire à Implanter l'AOP... Comment partir du bon pied? (20)

Novencia agile
Novencia agileNovencia agile
Novencia agile
 
Pascal Morenton PLM March 2009
Pascal Morenton PLM March 2009Pascal Morenton PLM March 2009
Pascal Morenton PLM March 2009
 
eXtreme Programming [fr]
eXtreme Programming [fr]eXtreme Programming [fr]
eXtreme Programming [fr]
 
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
Mix-IT 2013 - Agilistes : n'oubliez pas la technique - mix-it 2013
 
Ph.D Defence
Ph.D DefencePh.D Defence
Ph.D Defence
 
Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns Java
 
Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011Introduction a l_agilite_iut_lyon_1_decembre2011
Introduction a l_agilite_iut_lyon_1_decembre2011
 
Intro ihm
Intro ihmIntro ihm
Intro ihm
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
 
Développez le management visuel
Développez le management visuelDéveloppez le management visuel
Développez le management visuel
 
Architecture Agile durable (v 2.0)
 Architecture Agile durable (v 2.0) Architecture Agile durable (v 2.0)
Architecture Agile durable (v 2.0)
 
RTC Tontons Flexeurs slideshare 1
RTC Tontons Flexeurs slideshare 1RTC Tontons Flexeurs slideshare 1
RTC Tontons Flexeurs slideshare 1
 
m103-resume-cours-theorique-6156f136c407b.pdf
m103-resume-cours-theorique-6156f136c407b.pdfm103-resume-cours-theorique-6156f136c407b.pdf
m103-resume-cours-theorique-6156f136c407b.pdf
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Apprentissage du java
Apprentissage du javaApprentissage du java
Apprentissage du java
 
Résolution de problèmes de classification par algorithmes évolutionnaires grâ...
Résolution de problèmes de classification par algorithmes évolutionnaires grâ...Résolution de problèmes de classification par algorithmes évolutionnaires grâ...
Résolution de problèmes de classification par algorithmes évolutionnaires grâ...
 
Plasticitérecherche2015 2
Plasticitérecherche2015 2Plasticitérecherche2015 2
Plasticitérecherche2015 2
 
201001 Agilité
201001 Agilité201001 Agilité
201001 Agilité
 
Design Patterns (2003)
Design Patterns (2003)Design Patterns (2003)
Design Patterns (2003)
 
Mercredi 31 aout 2011 xxl3
Mercredi 31 aout 2011 xxl3Mercredi 31 aout 2011 xxl3
Mercredi 31 aout 2011 xxl3
 

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

  • 1. Implanter l'AOP... Comment partir du bon pied? Confoo 2012 Montréal, Québec, Canada 29 février 2012
  • 2. Félix-Antoine Bourbonnais Ing. jr, PSM-I Formateur et Coach Agile Enseignement et formations o TDD, Réusinage, OO avancé, AOP, tests, Scrum Recherches o AOP, agilité, tests et mocks Développeur o Java et Python (principalement) @fbourbonnais 2
  • 3. Objectif de la présentation Image: jscreationzs / FreeDigitalPhotos.net 3
  • 4. Réchauffement… Quelles sont vos attentes? 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? Image: Nutdanai Apikhomboonwaroot / FreeDigitalPhotos.net 4
  • 6. Préoccupations transverses Angl.: Crosscutting concerns. Certaines préoccupations secondaires sont impossibles à regrouper et contaminent plusieurs classes. 6
  • 7. Préoccupations transverses Enchevêtrement Éparpillement 7
  • 8. Préoccupations transverses Enchevêtrement (cohésion) Fonctionnalité principale Persistance Sécurité Observation 8
  • 17. Orientation objet et préoccupations Encapsulation Cohésion Modularité SRP Couplage 17
  • 18. Orientation objet et préoccupations Théoriquement, chaque classe devrait représenter une seule préoccupation. 18
  • 19. Orientation aspect C A Classe 1 Aspect 1 A C Aspect 2 Classe 2 A Aspect 3 19
  • 20. Rappel rapide de LA TERMINOLOGIE ET DU FONCTIONNEMENT 20
  • 21. Un aspect Un module encapsulant une préoccupation Peu gérer les préoccupations transverses Généralement une classe « évoluée » o Capacités supplémentaires afin de permettre l’encapsulation de préoccupations transverses 21
  • 22. Contenu typique d’un aspect Code à Indication Aspect exécuter des cibles 22
  • 23. Aspect en AspectJ public aspect VisitorAspect { /∗ −−−−−−−− Pointcuts −−−−−−−− ∗/ protected pointcut startMethod() : execution( ∗ start∗(..) ); /∗ −−−−−−−− Advices −−−−−−−− ∗/ after() : startMethod() { printHello(); } } 23
  • 24. Pourquoi est-ce que L’AOP N’A PAS AUTANT RAYONNÉ QUE PRÉVU? 24
  • 25. Pourquoi est-ce que plusieurs entreprises délaissent l’AOP? Mauvaises raisons et utilisations Complexité ajoutée Manque de support et d’intégration Manque de connaissances et de compétences Trop de promesses 25
  • 26. Aspect != AOP Image: Danilo Rizzuti / FreeDigitalPhotos.net 26
  • 27. 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éutiliseraient l’AOP mais 62% avec prudence [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 27 (ESCOT 2010), Rennes, France, 2010.
  • 28. Enquête auprès de débutants (2009) Critique de la validité 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 http://www.comp.lancs.ac.uk/~greenwop/escot10/escot10_submissio n_2.pdf 28
  • 29. Comment INTRODUIRE DE L’AOP DANS VOTRE PROJET 29
  • 30. 1. Avoir un but… Image: renjith krishnan / FreeDigitalPhotos.net 30
  • 31. 2. Choisir sa technologie Image: Sura Nualpradid / FreeDigitalPhotos.net 31
  • 32. Choix technologiques Tisseur / cadre applicatif (framework) o Compilateur spécial o Pur java Mode de tissage o LTW (au chargement des classes) o CTW (à la compilation) 32
  • 33. Choix technologiques Syntaxe o Java o AspectJ Language (.aj) o @AspectJ o XML Intégration o Maven o AJDT 33
  • 34. 3. Considérer la complexité ajoutée Gains Complexité 34
  • 35. 4. Considérer l’intégration Avec d’autres cadres applicatifs (framework) Le système de déploiement L’intégrateur continu Les technologie de tests Etc. Image: manostphoto / FreeDigitalPhotos.net 35
  • 36. 5. S’assurer de maîtriser les concepts Rappelez-vous que vous introduisez un nouveau paradigme et non pas simplement une technologie « cool »! Prototyper Essayer sur un petit projet Bien se documenter Bien former son équipe Image: renjith krishnan / FreeDigitalPhotos.net 36
  • 37. 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! Image: photostock / FreeDigitalPhotos.net 37
  • 38. Quelques MAUVAISES PRATIQUES Image: Ambro/ FreeDigitalPhotos.net 38
  • 39. Trop, c’est comme pas assez… Quand 50% du code est composé d’aspects… Est-ce 50% du code est composé de préoccupations transverses? Image: farconville / FreeDigitalPhotos.net 39
  • 40. L’AOP n’est pas un pansement Suis-je en train d’utiliser 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
  • 41. Le « trip techno » L’AOP c’est trop COOL !! La chute pourrait être douloureuse! • « AspectJ... WOW trop cool ! » • « On peut bidouiller plein de trucs avec ça ! » • faire... on va faire un aspect qui va changer ça puis qui va décider si… » 41
  • 42. Quelques BONNES PRATIQUES Image: photostock / FreeDigitalPhotos.net 42
  • 43. OO encore d’actualité Ce qui était vrai en OO l’est encore en AO 43
  • 44. Conseils de base habituels Code propre Cohésion dans l’aspect Couplage de l’aspect 44
  • 45. Un aspect? Vraiment? Est-ce une préoccupation transverse? Est-ce que je pourrais réusiner mon design OO pour atteindre le même objectif? 45
  • 46. Utiliser l’aspect comme « lien » Déléguer à une classe qui contient la logique liée à cette préoccupation Utiliser l’aspect pour tisser la logique Note: Peut varier en fonction du tisseur (ex.: AspectJ) pointcut inXorY() : execution(* *(..)) X (classe cible) Aspect && within(X || Y); Persistance (classe à tisser) after() : inXorY { Y (classe cible) persistance.clearCache(); } 46
  • 47. 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
  • 48. 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] 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. 49 In European Interactive Workshop on Aspects in Software (EIWAS), 2004.
  • 49. Conscience ou inconscience? Est-ce que les classes tissées devraient avoir conscience ou non des aspects? Débat ouvert « obliviousness » vs « awareness » 50
  • 50. Bonnes pratiques de TESTS D’ASPECTS 51
  • 51. Tests de haut niveau Les aspects contribuent aux fonctionnalités globales du système Rien ne change pour les tests de haut niveau (fonctionnels, acceptation, etc.) 52
  • 53. Tester unitairement un aspect La bonne chose (advice) Test unitaire Au bon d’aspect moment (pointcut) 54
  • 54. Technique du pot de miel 1 Pot 1 UTest Pot 2 X Aspect 2 3 Pot N 55
  • 55. 56
  • 56. Encore faim? https://joind.in/6005 Téléchargez les diapositives complètes sur developpementagile.com Image: rajcreationzs / FreeDigitalPhotos.ne 57