patterns et maintenabilité dans lindustrie : un cas concret christophe saint-marcel silicomp...

23
Patterns et maintenabilité dans l’industrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

Upload: hamon-teixeira

Post on 04-Apr-2015

106 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

Patterns et maintenabilitédans l’industrie : un cas concret

Christophe Saint-MarcelSilicomp Ingénierie

Page 2: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 2

Plan de la présentationPlan de la présentation

Contexte du projet Utilisation des patrons : objectifs Une solution Le cas concret Résultats

Page 3: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 3

ContexteContexte

Pour le client Trois ans de développement pour le client Développement d’un produit lié à plusieurs affaires Projet sous-traité à Silicomp

Pour Silicomp 1 an de développement (plusieurs itérations) Une équipe de 5 personnes Processus de développement agile

Page 4: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 4

ObjectifsObjectifs

Améliorer la maintenabilité des applications dans l’industrie

Capitaliser le savoir-faire acquis sur le projet

Limiter les risques d’érosion du logiciel

Problème

Page 5: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 5

Comprendre les problèmes avant de proposer des solutions : méthode problem-driven.

Tracer les rapports de causalité problème / solutions.

Apprendre à connaître l’application par la description des activités de développement plutôt que par leur résultat.

Comment ?Comment ?

Solution

Page 6: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 6

Motivation

Le cas concretLe cas concret

Gérer les clients du client Limiter le couplage entre le produit et les affaires Normaliser les fonctions du produit Homogénéiser le traitement des données

Page 7: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 7

Gérer les clients du client=> Optimiser la réutilisation=> Prendre en compte la sous-traitance

Affaire n° 1

Affaire n° 2

Affaire n° i

OrganisationProblème : clients multiplesProblème : clients multiples

Client n°1

Client n°2

Client n°i

Page 8: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 8

Développer un produit basé sur des composantsmétier réutilisables par les différentes affaires

SolutionSolution

Client

Silicomp

Produit

Affaire n° 1

Affaire n° 2

Affaire n° i

Client n°1Client n°2

Client n°i

Page 9: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 9

Limiter le couplage entre le produit et les affaires

Affaire n° 1Affaire n° 2

Affaire n° iProduit

Problème : réutiliserProblème : réutiliser

Architecture

Page 10: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 10

Homogénéiser les interfaces en proposant une façadecommune [Gamma95]

A1

A2An

Produit

A1

A2An

Produit

SolutionSolution

Page 11: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 11

• Gestion des composants : librairies UNIX

Solution : composantsSolution : composants

Business1 Business2

Product

Product_Int

Page 12: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 12

Assurer la communication bi-directionnelle entrel’affaire et le produit

Affaire n° 1

Produit

L’affaire veut savoir quand leproduit change d’états.

Problème : communicationProblème : communication Architecture

Page 13: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 13

Utiliser les mécanismes d’écoute proposés par Gammadans le patron Observer.

1

Product_Controller

state : E_State = E_UNK

Product_Listener_Int(from ProductInterface)

<<Interface>>

Product_Controller_Notify

onOpeningSession()onClosingSession()onStartingSession()onPurgingData()TEVR_Product_Controller_Notify()isListener()

1

#notifier

1

+listener1

UNKNOWN

INIT

READY

purgeData

openSession( sessionNumber )[ 1 <= sessionNumber <= 5 ]

closeSession

startSession( sessionNumber )[ sessionNumber == sessionNumber of openSession ]

closeSession( sessionNumber )[ sessionNumber == sessionNumber of openSession ]

purgeData

Implémentation des machines à états[Idiome C++]

Solution (1)Solution (1)

Page 14: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 14

• Gestion des composants : librairies UNIX

Solution (2)Solution (2)

Business1 Business2

Product

Product_Int Product_Listener_Int

<<réalise>> <<fournit>>

Le composant avec ses interfaces

Page 15: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 15

Arrêt sur image : traçabilité des problèmes (1)Arrêt sur image : traçabilité des problèmes (1)

Affaire/Produit

Façade

Intégrer le produit avec les affairesProduit + Affaires

Produit indépendant

Produit communicant Etats de

Gamma

Idiome C++

Observer

Gérer les affaires multiples

Assurer la communication produit / affaires

Analyse domaine

Gérer les notificationsGérer les données échangées

Modéliser et implémenter les états

Organisation

Architecture produit

Analyse domaine

Design

Implémentation

Page 16: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 16

Factory

Produit communicant

Container

Nommage

Assurer la traçabilité des produits

Gérer de multiples produits

Découpler l'affaire des produits

Coopération (Rose)

Partager les modèles

Produit partageable

Produit réutilisable

Produit traçable

Architecture?

Homogénéiser le traitement des données

Normaliser les fonctions

Client

Affaire

1..n

1

commande

1..n

1

Produit

1..n1..n 1..n1..n

utilise

Domaine

1

1..n

instancie

1

1..n

Design

Design

Organisation

Design

Architecture

Arrêt sur image : traçabilité des problèmes (2)Arrêt sur image : traçabilité des problèmes (2)

Page 17: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 17

Normaliser les fonctions du produit

Solution

Séparation en fonction du type de données(MetaData)

IdentityPotato_Xcg

Donnée contextuelleDonnée d’échange

Potato

Objet métier

Méta-niveau

Objet métier

0..n0..n

connaît

Donnée d'échange

1 +image10..n0..n

connaît

Donnée contextuelle

1..n+données 1..n

utilise

1

+image

1

ArchitectureProblème : normalisationProblème : normalisation

Page 18: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 18

Homogénéiser le traitement des données

Solution

Gestionnaires de données, le pattern Container pourgérer les fonctions secondaires du produit

Produit

Créer un objet métier à partir d’une donnée d’échange

Supprimer un objet métier (une donnée contextuelle)

Modifier un objet métier (une donnée contextuelle)

Affaire

Obtenir toutes les données d’échange correspondant à un objet métier (…)

Problème : homogénéisationProblème : homogénéisation

Conception

Page 19: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 19

T_KeyT_DataT_ObjectT_Context

Objectdata_Xcg : T_Datakey : T_Key

Create()getData()readData_Xcg()setData_key()

T_KeyT_DataT_ObjectT_ContextT_StringConverter

Container

create()getAllData_Xcg()getAllObjectPointers()getData_Xcg()getObject()getObjects()insertObject()isPresent()modify()purge()remove()

0..n

key : T_Key#objects

0..n

key : T_Key

ObjectExistException

ObjectExistException()which()

(from Exceptions)ObjectNoExistException

ObjectNoExistException()which()

(from Exceptions)

BadParametersException

BadParametersException()which()

(from Exceptions)

Anonymous : Container

obj : Object

modify(key : const T_Key&, exchangeData : const T_Data&, context : T_Context*)

obj = getObject(key : T_Key)

readData_Xcg(data : const T_Data&, key : const T_Key&)

Modifier un objet métier (une donnée contextuelle)

Anonymous : Container

obj : Object

getData_Xcg(key : T_Key)

obj = objects_.find(key)

data_Xcg

data_Xcg = getData_Xcg()

TEVR_ObjectNoExistException

If obj != null

Else

End If

Créer un objet métier à partir d’une donné d ’échange

- Instanciation générique du pattern en C++

- Génération et paramétrage à l’aide de scripts Rose

SolutionSolution

Page 20: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 20

Améliorer la maintenabilité des applications dans l’industriegrâce à un langage de patrons  projet qui:

RésultatRésultat

Limite les risques d’érosion lors de la venue de nouveaux membres dans l’équipe.

Complète les générations automatiques de modèles utilisées pour la correction des bugs.

Permet de contrôler que l’on reste dans le canevas (outils?).

Page 21: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 21

Solution? :Approche par méta-modèle pour normaliser les solutions

Variante 1 Variante 2

Objet métier

0..n0..n

connaît

Donnée d'échange

1 +image10..n0..n

connaît

Donnée contextuelle

1..n+données 1..n

utilise

1

+image

1

Pistes (1)Pistes (1)

Problème :

Pas d’outillage qui contrôle que l’on reste dans le canevas.

Page 22: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 22

Pistes (2)Pistes (2)

Approche descendante et remontante

Notion de distance entre le problème et la solution

Utiliser les anti-patterns pour décrire la démarche de développement (voir les mauvaises solutions)

Page 23: Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie

©Copyright Silicomp - 23

Comprendre les problèmes avant de proposer des solutions : méthode problem-driven.

Tracer les rapports de causalité problème / solutions.

Apprendre à connaître l’application par la description des activités de développement plutôt que par leur résultat.

FinFin

Solution