Un audit technique web est une analyse approfondie d'une application existante. Il évalue la qualité du code, l'architecture, la sécurité, la performance et la maintenabilité. C'est un diagnostic objectif indispensable à tout plan d'action.
Périmètre d'Analyse
L'audit couvre la structure du code source, la couverture de tests, les vulnérabilités, l'architecture de données et les pratiques de déploiement. Chaque point est évalué et priorisé par niveau de risque.
Livrables et Décision
Le rapport détaillé fournit des recommandations concrètes classées par priorité et effort. Il permet aux décideurs de planifier les investissements nécessaires en toute connaissance de cause.
Quand un audit se justifie
- Avant une décision structurante — refonte ou migration progressive, recrutement d'une équipe, choix d'un nouveau prestataire. Sans diagnostic, chacune de ces décisions est un pari.
- À la reprise d'une application laissée par un prestataire parti, quand plus personne ne sait ce qui tourne ni comment.
- Quand les symptômes s'accumulent — régressions à chaque livraison, lenteurs, incidents de production, délais qui s'allongent sans explication.
- Avant une échéance à risque — mise en ligne d'un lot important, montée en charge attendue, levée de fonds ou rachat où l'acquéreur examine la technique.
Comment je mène un audit
Je pars du code et de la production tels qu'ils sont, pas de la documentation, qui décrit souvent ce qui était prévu plutôt que ce qui existe. Concrètement :
- Inventaire — hébergement, dépôt, base de données, dépendances et leurs versions, services tiers, sauvegardes, qui détient quels accès.
- Mesure — analyse statique, dépendances vulnérables ou hors support, couverture de tests, temps de réponse, consommation de ressources. Des chiffres plutôt que des impressions.
- Lecture ciblée — les zones qui bougent le plus selon l'historique Git, les parcours critiques pour le métier, les points d'entrée exposés à la sécurité.
- Restitution — chaque constat avec sa criticité, son impact métier et une recommandation actionnable, dans un plan d'action priorisé. Le rapport doit être lisible par un dirigeant comme par un développeur.
Je traite les failles par classes plutôt qu'une par une : une injection trouvée à un endroit a souvent un jumeau copié-collé ailleurs. Corriger le point de passage commun protège tout le code, là où corriger la ligne signalée ne protège que cette ligne.
Un exemple : la mesure avant la solution
Sur Qezako, avant la mise en ligne d'un lot d'évolutions, la question posée était d'ajouter Redis et une file de messages pour tenir la charge, sur un serveur à 1 vCPU et 1,9 Go de RAM. L'audit de charge a montré que la charge venait de défauts, pas d'un traitement qui devait devenir asynchrone : un rendu d'image par ImageMagick qui consommait 10 secondes de CPU et 514 Mo de mémoire par image, remplacé par rsvg-convert en 0,06 seconde ; un appel à un modèle de langage de 16 à 60 secondes exécuté dans la requête HTTP ; une tâche planifiée qui se chevauchait avec elle-même.
Corriger ces défauts a réglé le problème posé sans ajouter de brique d'infrastructure. C'est le rôle d'un audit : répondre à la question réelle, qui n'est pas toujours celle qu'on pose au départ.
Les pièges
- Le rapport-catalogue de trois cents constats sans priorité : personne ne sait par où commencer, rien ne se passe.
- L'audit à charge contre le prestataire précédent : il crispe les échanges et ne dit pas quoi faire ensuite.
- L'outil automatique pris pour un audit — un score de qualité ne dit rien de l'adéquation au métier, des sauvegardes jamais restaurées ou des accès détenus par un tiers.
- Le diagnostic qui conclut à une solution décidée d'avance : un audit honnête doit pouvoir recommander de ne rien réécrire.
L'audit technique n'est pas une critique, c'est une feuille de route pour transformer un héritage fragile en un actif numérique solide et évolutif.
Le périmètre et les livrables sont détaillés sur la page de mon audit technique d'application web. Pour le volet sécurité, voir audit de sécurité applicatif : quand et comment.