$30 off During Our Annual Pro Sale. View Details »

Développer un projet fonctionnellement complexe

Développer un projet fonctionnellement complexe

Les projets fonctionnels les plus riches sont aussi les plus coûteux : coûteux à maintenir, souvent décourageants face au changement, long à stabiliser... Ces retours d'expériences présentent quelques solutions à mettre en place pour faciliter le développement de projets informatiques riches et complexes, tant sur la méthodologie de travail (agilité...), la démarche de communication (développement piloté par le comportement) ou l'approche générale (Domain driven design) d'un projet. Seront présentés également les implémentations techniques et les outils Open Source à mettre en œuvre pour implémenter ces solutions, en précisant leurs avantages et leurs limites dans des cas pratiques.

Jean-François Lépine

October 04, 2013
Tweet

More Decks by Jean-François Lépine

Other Decks in Programming

Transcript

  1. Développer un projet
    fonctionnellement complexe

    View Slide

  2. En face de vous

    Jean-François Lépine

    Consultant technique chez Alter Way

    @Halleck45

    http://blog.lepine.pro

    View Slide

  3. Jeu concours : qui a déjà entendu ...
    “Techniquement et fonctionnellement, c'est super !
    On est même largement en avance...”
    “Génial ! C'est une chance que vous soyez
    télépathe ; c'est exactement ce à quoi je pensais,
    il n'y a rien à reprendre.
    “Ah oui, je me souviens bien : c'est en page 28 de
    l'annexe 2 des spécifications fonctionnelles
    détaillées”

    View Slide

  4. Il était une fois...

    “J'ai besoin d'une voiture pour des petits trajets, aller au travail et transporter
    ma famille”

    View Slide

  5. Il était une fois...

    “J'ai besoin d'une voiture pour des petits trajets, aller au travail et
    transporter ma famille”

    Et en plus il a perdu de l'argent

    Le client n'a pas eu ce qu'il voulait

    View Slide

  6. Communiquez

    View Slide

  7. Une langue commune

    Éviter les ambiguïtés

    Est élaborée en commun

    Est parlée par tous

    Glossaire du projet
    UBIQUITOUS
    LANGAGE

    View Slide

  8. Une grammaire commune
    Fonctionnalité: acheter un chiot
    En tant que client du magasin
    Je peux acheter un chiot
    Afin de avoir un compagnon
    tout mignon (ou pas ^^)

    View Slide

  9. Gherkin
    Fonctionnalité: acheter un chiot
    (…)
    Scénario: acheter un chiot trop jeune
    Etant donné qu'un chiot est trop jeune pour être vendu
    Quand j'essaye de l'acheter
    Alors je suis informé que c'est impossible

    View Slide

  10. Développement piloté par le comportement

    Exercice agile quotidien

    Les scénarios sont établis en commun

    Tests automatisés ! (Behat, Cucumber, Jbehave...)

    Suivi en temps réel de l'avancée des scénarios

    View Slide

  11. Accepter le changement

    View Slide

  12. Domain Driven Design

    Le code source est le reflet du besoin fonctionnel

    Le code source adopte le vocabulaire fonctionnel

    Le code source facilite :
    – Le changement
    – La gestion des règles métiers
    – La maintenabilité
    – La testabilité

    Appliquer à la lettre les principes de la programmation orientée objets

    View Slide

  13. Isolation

    View Slide

  14. Spécialisation

    View Slide

  15. Testabilité

    View Slide

  16. Testabilité

    View Slide

  17. Keep It Simple and Stupid !

    Un objet simple par règle métier

    La complexité se fait par
    l'assemblage de composants
    simples et réutilisables

    View Slide

  18. Complexité vs
    performance

    View Slide

  19. Web = Schizophrène

    Effectuer un traitement métier

    Complexe

    Lent

    Intégrité et cohérence

    A intégrer dans un système global

    Fournir une information

    Immédiat

    Spécifique

    View Slide

  20. Commands / Query

    Séparer la logique de traitement
    (Commands) de la logique de lecture
    (Query)

    Command Query Responsibility
    Segregation (CQRS)

    View Slide

  21. Performance

    Alléger la lecture

    View Slide

  22. Consolidation

    Les données sont consolidées

    La consolidation est asynchrone

    Event sourcing

    View Slide

  23. Conclusion

    View Slide

  24. Bilan

    Les solutions pour gérer de la complexité métier dans un projet existent :

    Communication (agile)

    Développement piloté par le comportement

    Domain Driven Design

    Command query responsibility segregation

    Certaines pratiques peuvent mises en place facilement, même si elles ne sont
    pas des recettes miracles

    View Slide

  25. Questions ?

    Twitter : @Halleck45

    http://communiquez.lepine.pro

    Merci !

    View Slide