Quentin LAFFONT
Full Stack JS Developer
ou comment bien développer ?
L'objectif du Software Craftmanship est de répondre aux problèmes récurrent des projets informatiques que ce soit en interne ou avec des équipes externalisées.
"Ce mouvement prône le côté artisanal du développement logiciel, autrement dit, d'après le manifeste de l'artisanat du logiciel, il ne suffit pas qu'un logiciel soit fonctionnel, mais il faut qu'il soit bien conçu !"
Exemple problèmes : Manque de Documentation, bugs, complexité de développement, etc.
- Individu over process -> Les personnes avant tout !
- Working software -> Logiciel fonctionnel
- Product collaboration -> Travail en étroite collaboration avec les parties prenantes
- Adapt to change -> Délivrer de la valeur constante
Les compétences techniques
Connaissance des frameworks, libs, etc.
- Intelligence sociale (peering)
- partage
- communication
- etc.
- Focus sur la qualité UX/UI
- Focus sur le clean code
- Focus sur le produit
- Focus sur le pixel perfect
- Design Pattern (Singleton, Interface, etc.)
- Principes de développement SOLID
- KISS
- YAGNI
- Etc.
Voir au delà du développement
Ecriture d'un Readme.MD ou d'un wiki contenant :
Code :
Architecture du projet :
Coding Convention :
- Eslint (Code Style Convention)
- Stylelint (CSS Style Convention)
- Prettier (Code Convention - format)
- Naming des commits (commitlint)
- Generation Changelog automatique (conventional-changelog-cli)
Ecriture de tests qui vont tester une et une seule fonction / bout de code.
Tests testant l'intégration du composant avec d'autres composants.
Tests testant de bout en bout
- Tests de performance (stress tests, test de charge)
- Tests d'acceptance
- Tests de non régression
- Tests de vulnérabilité
- Tests de sécurité des containers Docker (snyk.io)
- etc.
- White Box : Test en disposant de la totalité des informations
- Grey Box : Test en disposant d’un nombre limité d’informations
- Black Box : Test sans avoir la moindre information
Recommandation : Black Box
Fonction
Composant Front (via data-testid)
Sélecteur à utiliser :
Des outils nous permettent de développer ces tests
- UNITS : Jest / Mocha + Chai
- INT : Jest + Enzyme ou React-Testing-Library / Karma
- E2E : Jest + Puppeteer / Cypress
Recommandation : Utiliser Jest car il peut être utilisé dans n'importe quel type de test
Recommandation Bis: AAA (Arrange Act Assert) + 3 layer system of description
Pour des développeurs, nous pouvons rester sur de l'écriture de tests classique.
Cependant, si les POs doivent pouvoir lire les tests, une syntaxe a été créé
GHERKIN
TDD (Test Driven Development)
- Rest-API -> Ecriture d'un Swagger
- WebComponent -> Ecriture de Storybook
- Ecriture de diagramme d'activité, ou de diagramme représentant des parcours utilisateurs.
- Commentaire conventionné (JSDOC)
- YAGNI (you ain't gonna need it) -> Code ce que tu as besoin actuellement
- KISS (Keep it simple, stupid) -> Fonction simple, 1 objectif
- DRY (Don't repeat, yourself) -> Eviter la redondance de code
- ACID (atomicité, cohérence, isolation et durabilité)
- etc.
LES PLUS CONNUS
Singleton
Tight Coupling
Untestability
Premature Optimizations
Indescriptive Naming
Duplication
Mise en place de CI/CD/CD
Continuous Integration (CI)
Tests Units / Tests Int / Code Scan / Sec Scan / Quality Gate
Continuous Delivery (CD)
Package / Tests E2E / Génération de la Doc
Continuous Deploy (CD)
Agile Scrum
- PO -> Créé des US
- Dev -> Traduit les US en code
- Testeur / PO -> traduit en tests Gherkin
Mise en place de feature toggling (le produit active ou pas les fonctionnalités sur la plateforme à la volée). Ex: Unleash
Qualification des US par les Devs (Evaluation technique avant réalisation / Refinement)
Mise en place de veille technologique
- Daily 2.0
- RSS / Twitter / Medium
- Feedly
- Sites internet spécialisés (hacker news, korben, codrops, etc.)
Méthodologie SCRUM, Méthode DDD, Méthode BDD, Méthodologie KANBAN, Différentes architectures (Multi Layers, Event Driven, SOA, DDA, COA, Microservice, etc.),
By Quentin LAFFONT