Implanter l'AOP... Comment partir du bon pied?
-
Upload
elapse-technologies -
Category
Technology
-
view
2.078 -
download
2
description
Transcript of 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
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
Objectif de la présentation
3Image: jscreationzs / FreeDigitalPhotos.net
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
PRÉOCCUPATIONS TRANSVERSESLes
5
Préoccupations transverses
6
Certaines préoccupations secondaires sont impossibles à regrouper et contaminent
plusieurs classes.
Angl.: Crosscutting concerns.
Préoccupations transverses
Éparpillement
Enchevêtrement
7
Préoccupations transverses
8
Enchevêtrement (cohésion)
Persistance
Fonctionnalité principale
Sécurité
Observation
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
15
Éparpillement (dispersion)
Persistance
L’AOPIntroduction à
16
Orientation objet et préoccupations
Encapsulation
Modularité
CouplageSRP
Cohésion
17
Orientation objet et préoccupations
18
Théoriquement, chaque classe devrait représenter une seule préoccupation.
Orientation aspect
19
Aspect 1Classe 1
Aspect 2
Aspect 3
Classe 2
C
C
A
A
A
LA TERMINOLOGIE ET DU FONCTIONNEMENT
Rappel rapide de
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 à exécuter
Indication des cibles Aspect
22
Aspect en AspectJ
23
public aspect VisitorAspect {
/ ∗ −−−−−−−− Pointcuts −−−−−−−− / ∗
protected pointcut startMethod() :
execution( start (..) ); ∗ ∗
/ ∗ −−−−−−−− Advices −−−−−−−− / ∗
after() : startMethod() {
printHello();
}
}
L’AOP N’A PAS AUTANT RAYONNÉ QUE PRÉVU?
Pourquoi est-ce que
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
26Image: Danilo Rizzuti / FreeDigitalPhotos.net
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.
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é
INTRODUIRE DE L’AOP DANS VOTRE PROJET
Comment
29
1. Avoir un but…
30Image: renjith krishnan / FreeDigitalPhotos.net
2. Choisir sa technologie
31Image: Sura Nualpradid / FreeDigitalPhotos.net
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
Choix technologiques
Syntaxeo Javao AspectJ Language (.aj)o @AspectJo XML
Intégrationo Maveno 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.
35Image: manostphoto / FreeDigitalPhotos.net
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
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
MAUVAISES PRATIQUESQuelques
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 »
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!
BONNES PRATIQUESQuelques
42Image: photostock / FreeDigitalPhotos.net
OO encore d’actualité
43
Ce qui était vrai en OO l’est encore en AO
Conseils de base habituels
Code propre
Cohésion dans l’aspect
Couplage de l’aspect
44
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?
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)
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]
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.
Conscience ou inconscience?
50
Est-ce que les classes tissées devraient avoir conscience ou non des aspects?
Débat ouvert « obliviousness » vs « awareness »
TESTS D’ASPECTSBonnes pratiques de
51
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.)
Tests unitaires
53
Tester unitairement un aspect
La bonne chose(advice)
Au bon moment(pointcut)
Test unitaire d’aspect
54
Technique du pot de miel
55
Aspect
Pot 1
Pot 2
Pot N
XUTest
1
2
3
56
Encore faim?
Image: rajcreationzs / FreeDigitalPhotos.ne 57
Téléchargez les diapositives complètes sur developpementagile.com
https://joind.in/6005
QUESTIONSPériode de
58