<style> .reveal { font-family: Roboto, Source Sans Pro, Helvetica, sans-serif; font-size: 42px; font-weight: 300; } .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 { margin: 0 0 20px 0; font-family: Roboto, Source Sans Pro, Helvetica, sans-serif; font-weight: 500; line-height: 1.2; letter-spacing: normal; text-transform: uppercase; text-shadow: none; word-wrap: break-word; } .reveal section img { margin: initial !important; background: initial !important; border: initial !important; box-shadow: initial !important; } </style> ## Introduction aux bonnes pratiques et méthodologies de développement --- ## Marc Gavanier Efrei promotion 2014 Ingénieur Full Stack chez Fit Lab [linkedin.com/in/marc-gavanier](https://www.linkedin.com/in/marc-gavanier/) --- ## Couplage faible et cohésion forte --- Le **couplage** désigne le degré d'interdépendance entre les briques qui constituent un logiciel. La **cohésion** désigne le degré de coopération dans une brique logiciel pour adresser une tache définie. --- Un faible couplage donne la capacité de **changer** un élément en limitant les effets de bord. Une forte cohésion donne la capacité de **séparer** les éléments en unités distinctes. --- Couplage et cohésion s'opposent : un faible couplage induit une cohésion élevée <img src="https://i.imgflip.com/5s1k2h.jpg"> --- ## Merci de votre attention --- ## À propos de la présentation Vous **DEVEZ** m'interrompre quand vous avez des questions vous voulez plus d'explications --- ## Cycle en V / Waterfall --- Inspiré des industries existantes avant l'apparition de l'industrie du logiciel Beaucoup de planification Imperméable au changement Effet tunnel Déconnecté des utilisateurs --- ## Recherche de méthodes plus itératives --- années 40 - 看板 (Kanban) 1991 - RAD (rapid application development) 1995 - Scrum 1996 - XP (extreme programming) --- ## Manifeste pour le développement Agile de logiciels (2001) --- Nous découvrons comment mieux développer des logiciels par la pratique et en aidant les autres à le faire. Ces expériences nous ont amenés à valoriser : --- Les individus et leurs interactions plus que les processus et les outils --- Des logiciels opérationnels plus qu’une documentation exhaustive --- La collaboration avec les clients plus que la négociation contractuelle --- L’adaptation au changement plus que le suivi d’un plan --- Nous reconnaissons la valeur des seconds éléments, mais privilégions les premiers. <small>Il existe 12 principes sous-jacents au manifeste que vous pourrez découvrir sur [agilemanifesto.org](https://agilemanifesto.org/)</small> --- ## Software craftsmanship (2009) Mettre la barre plus haut --- S'inscrit dans la continuité de l'agilité --- Non seulement un logiciel fonctionnel, mais aussi un logiciel bien conçu --- Non seulement répondre au changement, mais aussi une valeur ajoutée constante --- Non seulement les individus et les interactions, mais aussi une communauté de professionnels --- Non seulement la collaboration client, mais aussi des partenariats productifs --- Dans la poursuite des éléments de gauche, nous avons trouvé les éléments de droite indispensables. <small>[manifesto.softwarecraftsmanship.org](https://manifesto.softwarecraftsmanship.org/)</small> --- ## Clean code --- Pourquoi faire du code "propre" ? Un code sale ça coûte cher à tout le monde Vélocité de plus en plus mauvaise puis abandon et on recommence (éternellement) --- ## Plusieurs manières de procéder Automatique : par exemple linter Manuel : par exemple revue de code En continue : par exemple pair programming --- ### En général "Boy scout rule" : on repart plus propre qu'à l'arrivé. Eviter "l'effet Wikipédia" : ne pas se laisser déborder par le périmètre --- ### Nommage Pas de désinformation Pas d'encodage pour "faire moins long" Un mot par concept Contexte métier orienté domaine --- ### Fonctions Tonton codeur raconte moi une histoire Un niveau d'abstraction par fonction Limitez vos paramètres Ne vous répétez pas --- <img src="https://i.imgur.com/GtfkfGF.png"> [Clean code](https://www.goodreads.com/book/show/3735293-clean-code) --- ## SOLID Principles --- ### S Single Responsibility Principle Principe de responsabilité unique --- ### O Open/Closed Principle Principe ouvert/fermé --- ### L Liskov Substitution Principle Principe de substitution de Liskov --- ### I Interface Segregation Principle Principe de ségrégation de l’interface --- ### D Dependency Inversion Principle Principe d'inversion de dépendance --- ## Design patterns --- Les design patterns sont des solutions typiques aux problèmes courants dans la conception de logiciels. Il en existe plusieurs sortes --- ### Patrons de création Mécanismes de création d'objets --- ### Patrons structurels Intégrer des éléments les uns avec les autres sans induire de couplage --- ### Patrons comportementaux Répartition des responsabilités --- ### Pour une liste complète [refactoring.guru/design-patterns](https://refactoring.guru/fr/design-patterns/catalog) --- ## Pyramide des tests --- <img src="https://i.ibb.co/D1Kzc1T/software-testing-fr.png"> --- ## TDD --- <img width="600px" src="https://i.imgur.com/Lw8h0Hl.png"> --- ## BDD --- Une discussion entre [3 amigos](https://latavernedutesteur.fr/2020/03/16/lassemblee-des-amigos/) pour définir la fonctionnalité à développer et ses limites --- [Gherkin](https://cucumber.io/docs/gherkin/reference/) [Cucumber](https://cucumber.io/docs/installation/) [ATDD](https://blog.codeinsider.fr/l-acceptance-test-driven-development-ou-atdd/) <img src="https://leanpub.com/site_images1/mastering-tdd-with-react/images----atdd-cycle.png "> <small>Double loop feedback</small> --- ## Clean Architecture --- <img style="background-color: white !important" src="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1600%2F1*0R0r00uF1RyRFxkxo3HVDg.png&f=1&nofb=1"> --- Ne devenez pas cette personne <img width="400" src="http://img2.reactor.cc/pics/post/full/Warhammer-40000-Wh-%D0%9F%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0-%D1%84%D1%8D%D0%BD%D0%B4%D0%BE%D0%BC%D1%8B-Theis-M%C3%B8ller-Jakobsen-5281553.jpeg"> --- (Gardez ça pour la promotion de Arch Linux) <img width="200" src="https://www.shareicon.net/data/2015/09/16/101867_archlinux_512x512.png"> --- Si vous voulez vraiment convaincre : <img src="https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1544393992l/43184988._SY475_.jpg"> [Ne coupez jamais la poire en deux](https://www.goodreads.com/book/show/43184988-ne-coupez-jamais-la-poire-en-deux) --- ## Merci de votre attention \+ [ROTI](https://blog.myagilepartner.fr/index.php/2017/06/14/roti-agile-return-on-time-invested/) --- ## Bonus [DDD](https://lesdieuxducode.com/blog/2019/7/introduction-au-domain-driven-design) [12 factor app](https://12factor.net/) [DevOps](https://aws.amazon.com/fr/devops/what-is-devops/) [Microservices VS Monolith](https://medium.com/transparent-data-eng/monoliths-vs-microservices-benefits-and-drawbacks-a-comparision-9e7a462b8e3a)
{"metaMigratedAt":"2023-06-16T13:22:15.226Z","metaMigratedFrom":"YAML","title":"Introduction aux bonnes pratiques et méthodologies de développement","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"controls\":false,\"progress\":true,\"slideNumber\":false}","contributors":"[{\"id\":\"01d6a5d9-edd0-4d27-b734-061799130618\",\"add\":10480,\"del\":3393},{\"id\":\"5d87520c-c463-4068-a514-5e0d85b2a660\",\"add\":1389,\"del\":897}]"}
    269 views
   Owned this note