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

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

description

Bien que l'AOP apporte plusieurs bénéfices architecturaux et techniques aux équipes qui en font usage, 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, refactorisation, 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 of Implanter l'AOP... Comment partir du bon pied?

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

Implanter l'AOP... Comment partir 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 formations 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?

Objectif de la présentation

3Image: jscreationzs / FreeDigitalPhotos.net

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

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?

4Image: Nutdanai Apikhomboonwaroot / FreeDigitalPhotos.net

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

PRÉOCCUPATIONS TRANSVERSESLes

5

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

Préoccupations transverses

6

Certaines préoccupations secondaires sont impossibles à regrouper et contaminent

plusieurs classes.

Angl.: Crosscutting concerns.

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

Préoccupations transverses

Éparpillement

Enchevêtrement

7

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

Préoccupations transverses

8

Enchevêtrement (cohésion)

Persistance

Fonctionnalité principale

Sécurité

Observation

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écapitulatif)

14

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

Préoccupations transverses

15

Éparpillement (dispersion)

Persistance

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

L’AOPIntroduction à

16

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

Orientation objet et préoccupations

Encapsulation

Modularité

CouplageSRP

Cohésion

17

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

Orientation objet et préoccupations

18

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

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

Orientation aspect

19

Aspect 1Classe 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é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

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

Contenu typique d’un aspect

Code à exécuter

Indication 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 utilisations

Complexité ajoutée

Manque de support et d’intégration

Manque de connaissances et de compétences

Trop de promesses

25

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

Aspect != AOP

26Image: 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éutiliseraient 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 contexteo É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 StudyESCOT 2012, Renne, France, 20120.

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

28

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

30Image: renjith krishnan / FreeDigitalPhotos.net

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

2. Choisir sa technologie

31Image: Sura Nualpradid / FreeDigitalPhotos.net

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

Choix technologiques

Tisseur / cadre applicatif (framework)o Compilateur spécialo Pur java

Mode de tissageo LTW (au chargement des classes)o CTW (à la compilation)

32

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

Choix technologiques

Syntaxeo Javao AspectJ Language (.aj)o @AspectJo XML

Intégrationo Maveno 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égration

Avec d’autres cadres applicatifs (framework)

Le système de déploiement

L’intégrateur continu

Les technologie de tests

Etc.

35Image: 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 petit 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!

37Image: photostock / FreeDigitalPhotos.net

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

MAUVAISES PRATIQUESQuelques

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éoccupations 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’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

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 ca ! »• « Tsé le truc qu’on arrivait pas à faire... on va faire un aspect qui va

changer ca puis qui va décider si… »

YAGNI!

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

BONNES PRATIQUESQuelques

42Image: 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éoccupation transverse?

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

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

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)

46

pointcut inXorY() :

execution(* *(..))

&& within(X || Y);

after() : inXorY {

persistance.clearCache();

}

X(classe cible)

Y(classe cible)

Aspect

Persistance(classe à tisser)

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?

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 49: Implanter l'AOP... Comment partir du bon pied?

Conscience ou inconscience?

50

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

Débat ouvert « obliviousness » vs « awareness »

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

TESTS D’ASPECTSBonnes pratiques de

51

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

Tests de haut niveau

52

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

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

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

Tests unitaires

53

Page 53: 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 54: Implanter l'AOP... Comment partir du bon pied?

Technique du pot de miel

55

Aspect

Pot 1

Pot 2

Pot N

XUTest

1

2

3

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

56

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

Encore faim?

Image: rajcreationzs / FreeDigitalPhotos.ne 57

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

https://joind.in/6005

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

QUESTIONSPériode de

58