Pourquoi un petit changement casse tout
Le couplage mesure à quel point les parties d'un logiciel dépendent les unes des autres. La cohésion mesure à quel point ce qu'une partie contient va ensemble. Un bon logiciel a peu de couplage et beaucoup de cohésion.
Une salle change de nom, et six écrans cessent de marcher. Voyons pourquoi, et comment le voir avant que cela arrive.
À la fin de cette leçon
Remarque
Je peux juger une conception avec le couplage et la cohésion.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Module | une partie du logiciel qui a un rôle à elle | Réservations |
| Dépendance | un lien : un module en utilise un autre | |
| Couplage | le degré de dépendance entre des modules | |
| Cohésion | le degré auquel le contenu d'un module va ensemble | |
| Interface | la partie d'un module que les autres ont le droit d'utiliser | |
| Raison de changer | un besoin qui oblige à modifier le module |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un module est une partie du logiciel
On découpe un logiciel en modules : l'écran, les réservations, les comptes, les rapports. Chacun a un rôle. Quand un module en utilise un autre, on dit qu'il en dépend.
Chaque dépendance est un lien. Plus il y a de liens, plus un changement peut se propager.
Exemple : compter les liens de chaque module
| Module | Il utilise | Il est utilisé par |
|---|---|---|
| Écran | Réservations, Utilisateurs | Personne |
| Réservations | Base | Écran, Rapports |
| Utilisateurs | Base | Écran |
| Rapports | Réservations, Base | Personne |
| Base | Personne | Réservations, Utilisateurs, Rapports |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un module cohérent change pour une raison
Un module est cohérent quand tout ce qu'il contient sert le même rôle. Une bonne question : combien de raisons y a-t-il de le modifier ?
Si on le change pour un tarif, pour un courriel et pour un fichier, il fait trop de choses. Il vaut mieux le couper en trois.
Exemple : juger la cohésion
| Module | Contenu | Raisons de changer | Cohésion |
|---|---|---|---|
| Réservations | Créer, annuler, lister | Une règle de réservation | Forte |
| Divers | Courriels, tarifs, fichiers | Trois besoins sans rapport | Faible |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent qu'un bon logiciel n'a aucune dépendance. C'est impossible : les modules doivent se parler. Le but est d'avoir peu de liens, simples, et qui passent par une interface connue.
Le laboratoire rend le couplage visible
L'API du laboratoire montre les noms de colonnes tels quels. Un client qui demande la colonne creneau dépend donc de ce nom.
Vous allez demander la colonne, la renommer dans la base, puis redemander. Préparez la table avec les cinq premiers Runs.
Donner le mot de passe à psql
export PGPASSWORD=shopAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Repartir de zéro
psql -h db -U shop -c "drop table if exists reservations"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Créer la table reservations
psql -h db -U shop -c "create table reservations (id serial primary key, salle text not null, demandeur text not null, creneau text not null, statut text not null default 'demandee')"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ajouter trois réservations
psql -h db -U shop -c "insert into reservations (salle, demandeur, creneau) values ('B102', 'Claire Dupuis', 'lundi 10h'), ('A201', 'Marc Lefebvre', 'lundi 10h'), ('B102', 'Sophie Martin', 'mardi 14h')"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Dire à l'API de relire la base
psql -h db -U shop -c "notify pgrst, 'reload schema'"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Demander la colonne creneau
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/reservations?select=creneau&limit=1"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Renommer la colonne en horaire
psql -h db -U shop -c "alter table reservations rename column creneau to horaire"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Dire à l'API de relire la base
psql -h db -U shop -c "notify pgrst, 'reload schema'"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Redemander la même colonne
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/reservations?select=creneau&limit=1"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un changement interne a cassé le client
La base a changé un nom, et la demande du client a échoué. Le client et la base étaient fortement couplés : le client connaissait un détail interne.
Pour réduire ce couplage, on place une interface stable entre eux. Elle garde l'ancien nom pour le client, même quand la base change.