gwift-book/source/part-1-workspace/_main.adoc

68 lines
4.4 KiB
Plaintext
Raw Normal View History

= Environnement et méthodes de travail
2020-12-13 21:30:00 +01:00
2021-07-28 21:38:45 +02:00
"Make it work, make it right, make it fast"
-- Kent Beck
En fonction de vos connaissances et compétences, la création dune nouvelle application est uneé tape relativement
facile à mettre en place.
Le code qui permet de faire tourner cette application peut ne pas être élégant, voire buggé jusqu'à la moëlle,
il pourra fonctionner et faire "preuve de concept".
Les problèmes arriveront lorsqu'une nouvelle demande sera introduite, lorsqu'un bug sera découvert et devra être corrigé
ou lorsqu'une dépendance cessera de fonctionner ou d'être disponible.
Or, une application qui névolue pas, meurt.
Tout application est donc destinée, soit à être modifiée, corrigée et suivie, soit à déperrir et à être délaissée
par ses utilisateurs.
Et cest juste cette maintenance qui est difficile.
Lapplication des principes présentés et agrégés ci-dessous permet surtout de préparer correctement tout ce qui pourra arriver,
sans aller jusquau « *You Ain't Gonna Need It* » (ou *YAGNI*), qui consiste à surcharger tout développement avec des fonctionnalités non demandées, juste « au cas ou ».
Pour paraphraser une partie de lintroduction du livre _Clean Architecture_ cite:[clean_architecture]:
2022-03-10 18:36:01 +01:00
[quote,Robert C. Martin, Clean Architecture, cite:[clean_architecture]]
Getting software right is hard: it takes knowledge and skills that most young programmers dont take the time to develop.
It requires a level of discipline and dedication that most programmers never dreamed theyd need.
Mostly, it takes a passion for the craft and the desire to be a professional.
2022-03-10 18:36:01 +01:00
Le développement d'un logiciel nécessite une rigueur d'exécution et des connaissances précises dans des domaines extrêmement variés.
Il nécessite également des intentions, des (bonnes) décisions et énormément d'attention.
2022-03-10 18:36:01 +01:00
Indépendamment de l'architecture que vous aurez choisie, des technologies que vous aurez patiemment évaluées et mises en place, une architecture et une solution peuvent être cassées en un instant, en même temps que tout ce que vous aurez construit, dès que vous en aurez détourné le regard.
2022-03-10 18:36:01 +01:00
Un des objectifs ici est de placer les barrières et les gardes-fous (ou plutôt, les "*garde-vous*"), afin de péréniser au maximum les acquis, stabiliser les bases de tous les environnements (du développement à la production) qui accueilliront notre application et fiabiliser ainsi chaque étape de communication.
2022-03-10 18:36:01 +01:00
Dans cette partie-ci, nous parlerons de *méthodes de travail*, avec comme objectif d'éviter que l'application ne tourne que sur notre machine et que chaque déploiement ne soit une plaie à gérer.
Chaque mise à jour doit être réalisable de la manière la plus simple possible, et chaque étape doit être rendue la plus automatisée/automatisable possible.
Dans son plus simple élément, une application pourrait être mise à jour simplement en envoyant son code sur un dépôt centralisé: ce déclencheur doit démarrer une chaîne de vérification d'utilisabilité/fonctionnalités/débuggabilité/sécurité, pour immédiatement la mettre à disposition de nouveaux utilisateurs si toute la chaîne indique que tout est OK.
2022-03-10 18:36:01 +01:00
D'autres mécanismes fonctionnent également, mais au plus les actions nécessitent d'actions humaines, voire d'intervenants humains, au plus la probabilité qu'un problème survienne est grande.
2020-12-13 21:30:00 +01:00
Dans une version plus manuelle, cela pourrait se résumer à ces trois étapes (la dernière étant formellement facultative):
. Démarrer un script,
. Prévoir un rollback si cela plante (et si cela a planté, préparer un post-mortem de l'incident pour qu'il ne se produise plus)
. Se préparer une tisane en regardant nos flux RSS (pour peu que cette technologie existe encore...).
2020-12-13 21:30:00 +01:00
2022-03-10 18:36:01 +01:00
include::clean_code.adoc[]
2020-12-13 21:30:00 +01:00
2022-03-10 18:36:01 +01:00
include::mccabe.adoc[]
2020-12-13 21:30:00 +01:00
2022-03-10 18:36:01 +01:00
== Fiabilité, évolutivité et maintenabilité
2020-12-13 21:30:00 +01:00
2022-03-10 18:36:01 +01:00
include::12-factors.adoc[]
include::solid.adoc[]
== Architecture
include::clean_architecture.adoc[]
== Tests et intégration
[quote, Robert C. Martin, Clean Architecture, page 203, Inner circle are policies, page 250, Chapitre 28 - The Boundaries]
Tests are part of the system.
You can think of tests as the outermost circle in the architecture.
Nothing within in the system depends on the tests, and the tests always depend inward on the components of the system ».
include::python.adoc[]
include::start-new-django-project.adoc[]