<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}]"}