← PHPStan et ingénierie logicielle sécurisée

Module 6 / 8 · 90 min

06. Baseline et retrait de dette

Adopter progressivement sans ouvrir une exclusion générale.

Lessons, exercises and questions in this path are in French. The interface follows the site language.

Your progress will appear here when JavaScript is active.

Progress and best score are stored only in this browser. No account is needed; clearing browser data removes them. Module times are estimates including exercises.

Comprendre le mécanisme

Une baseline enregistre des erreurs existantes pour permettre une adoption progressive à un niveau donné. Elle ne corrige pas les défauts et ne doit pas devenir une règle d’ignorance universelle. Son périmètre doit être versionné et relu comme de la dette : catégories, chemins, quantités et plan de retrait. Les erreurs nouvelles doivent rester visibles.

Raisonner et vérifier

Évitez de régénérer automatiquement la baseline à chaque exécution de CI, car une régression pourrait être absorbée. Une suppression doit être justifiée par un faux positif ou une dette connue, avec un périmètre étroit. Après correction, retirez l’entrée devenue inutile et gardez les mécanismes qui signalent les exceptions non pertinentes. La revue doit distinguer amélioration réelle et simple déplacement des diagnostics.

Inventaire de diagnostics

Une baseline décrit des diagnostics existants. Elle ne réécrit pas les comportements du code. Une baseline enregistre des écarts déjà connus sans corriger leur cause. Associez les entrées sensibles à un travail de résolution et conservez la possibilité de retrouver pourquoi elles ont été admises temporairement.

Understand this common mistake

Une baseline corrige les bugs à l’exécution.

Elle ne réécrit pas les comportements du code.

Nouveaux défauts visibles

Les nouvelles erreurs doivent rester visibles. Elle doit distinguer dette connue et nouvel écart. La CI doit comparer le code à la dette révisée, pas recréer cette dette avant chaque analyse. Introduisez un défaut de laboratoire pour confirmer qu’un diagnostic nouveau fait effectivement échouer le pipeline.

Understand this common mistake

La baseline doit absorber toute régression nouvelle en CI.

Elle doit distinguer dette connue et nouvel écart.

Régénération encadrée

La régénération doit être revue. Cette pratique peut normaliser chaque nouveau défaut. Une mise à jour d’outil peut modifier les diagnostics et nécessiter une régénération. Examinez le diff et ses raisons ; une hausse silencieuse du nombre d’erreurs masquées demande une explication.

Understand this common mistake

Régénérer aveuglément avant chaque analyse protège les régressions.

Cette pratique peut normaliser chaque nouveau défaut.

Suppression ciblée

Une suppression doit être étroite et justifiée. Une suppression globale masque la couverture. Préférez un identifiant de diagnostic, un chemin et une justification précis à une expression globale. Une règle très large peut masquer demain une nouvelle erreur dans une zone jusque-là correcte.

Understand this common mistake

Ignorer tout message est une stratégie de précision.

Une suppression globale masque la couverture.

Exception devenue inutile

La correction doit retirer l’exception devenue inutile. La dette doit diminuer avec les corrections. Quand le code est corrigé, retirez l’entrée associée. Vérifiez le signal d’erreur ignorée non retrouvée si configuré ; il aide à éviter que des suppressions obsolètes restent actives sans propriétaire.

Understand this common mistake

Une exception ancienne doit être conservée pour toujours.

La dette doit diminuer avec les corrections.

Revue du diff

Le diff de baseline doit être relu. Des motifs élargis peuvent cacher davantage d’erreurs. Lisez les messages, chemins et nombres d’occurrences modifiés. Une petite variation textuelle peut cacher un élargissement important du périmètre ; le nombre total seul ne décrit pas le risque ajouté.

Understand this common mistake

Un nombre de lignes réduit prouve forcément moins de dette.

Des motifs élargis peuvent cacher davantage d’erreurs.

Exclusions

Les chemins exclus doivent être compris. La propriété du code n’a pas changé. Exclure tout un dossier supprime aussi les futurs diagnostics de ce dossier. Documentez pourquoi le code est hors périmètre et quelle autre vérification couvre ses points d’entrée réels.

Understand this common mistake

Déplacer un défaut vers un dossier exclu est une correction.

La propriété du code n’a pas changé.

Adoption progressive

Une baseline peut faciliter une montée progressive. Elle peut servir à planifier la réduction de dette. Vous pouvez viser un niveau plus strict en acceptant une dette initiale limitée. Empêchez les ajouts et retirez les entrées à mesure des corrections afin que cette stratégie produise une progression mesurable.

Understand this common mistake

La baseline impose de ne jamais augmenter le niveau.

Elle peut servir à planifier la réduction de dette.

Faux positif démontré

Le faux positif doit être démontré. Le diagnostic peut révéler un défaut réel. Un diagnostic gênant n’est pas automatiquement faux. Réduisez le cas, vérifiez le contrat de la dépendance et fournissez une fixture prouvant pourquoi le code est sûr avant d’ajouter une suppression.

Understand this common mistake

Toute erreur gênante est automatiquement un faux positif.

Le diagnostic peut révéler un défaut réel.

Après correction

Les tests restent nécessaires après suppression d’un diagnostic. La suppression ne prouve aucune correction runtime. Une modification de type peut changer un chemin d’erreur ou une conversion. Gardez les tests de comportement concernés ; la disparition du diagnostic ne démontre pas que les sorties métier restent conformes.

Understand this common mistake

Un ignore dispense de vérifier le comportement.

La suppression ne prouve aucune correction runtime.

Atelier guidé : lire, expliquer et vérifier le code

vendor/bin/phpstan analyse --generate-baseline
vendor/bin/phpstan analyse

La séquence proposée génère une baseline à partir du code courant avant de l’analyser. Elle risque donc d’admettre le défaut même qu’elle devait détecter. Réorganisez la CI pour utiliser la baseline révisée du dépôt et gardez la génération comme opération de maintenance dont le diff est relu.

La baseline n’édite pas le code pour le corriger. Rien ne prouve une réduction du périmètre ignoré. L’analyse statique n’exécute pas toute la suite. Une régénération aveugle peut normaliser de nouveaux écarts.

Travail pratique : Générez une baseline de laboratoire puis introduisez une nouvelle erreur et corrigez une ancienne.

Critères de correction : La nouvelle erreur fait échouer la CI ; l’ancienne exception est supprimée après correction. Comparez le diff de baseline et refusez les motifs globaux ajoutés sans justification.

Worked example

Dette existante documentée → baseline revue
Nouvelle erreur → échec de CI
Correction → retrait de l’exception correspondante

Le cycle protège la progression plutôt qu’un compteur artificiellement toujours vert.

Practical exercise

Générez une baseline de laboratoire puis introduisez une nouvelle erreur et corrigez une ancienne.

View a suggested solution

La nouvelle erreur fait échouer la CI ; l’ancienne exception est supprimée après correction. Comparez le diff de baseline et refusez les motifs globaux ajoutés sans justification.

Verification checklist

  • Baseline revue.
  • Pas de régénération aveugle en CI.
  • Exceptions retirées après correction.

Knowledge check

Related lesson: 06. Baseline et retrait de dette ↗
Une baseline corrige-t-elle les bugs enregistrés ?

Reference documentation ↗

Module validation

101 questions, local practice target of 75%. Suggested duration of 150 minutes, with no enforced deadline. Questions and choices are shuffled; corrections appear after submission. The quick lesson check and the final course exam remain separate exercises.

Start or resume the 101 questions →