webleads-tracker

Qualité du code

 

par Emeric Darne et Hugo Abraham

Pourquoi miser sur un code de qualité ?

Echangons sur vos projets

En quelques mots

Quand on remplace un projet de développement informatique dans la globalité du business model d’une entreprise, il apparaît que la qualité du code est un impératif comptable.

C’est en effet la qualité du code qui garantit la rentabilité à long terme de l’investissement.

La qualité de conception du code informatique assure à l’entreprise une indépendance par rapport à ses fournisseurs, une sérénité quant au fonctionnement de l’application et une maîtrise de son développement.

Liberté

L’informatique est maintenant au cœur des entreprises, dans un sens quasi littéral. C’est par son système informatique qu'une entreprise produit sa valeur ; c’est un point vital, qui peut tout autant terrasser une société que la propulser. Dans un contexte si sensible, il est indispensable de conserver une indépendance vis-à-vis de son fournisseur. Or, de nombreuses ESN profitent de ce levier en vendant des projets de mauvaise qualité au rabais. L’application qu’elles livrent aura été développée si rapidement que le code est illisible, même par un expert. Les erreurs ne sont pas décrites ; tout ne tient que par des bouts de ficelles que seuls les créateurs comprennent… et encore ! Le coût du transfert du projet à une autre ESN, ou même aux équipes internes du client, devient prohibitif. Bien souvent, il est moins cher de repartir de zéro. L’entreprise est alors piégée. Elle se voit régulièrement contrainte d’acheter de coûteux services de maintenance.

On comprendra pourquoi les dirigeants rechignent à se lancer dans les projets informatiques. Mais rien n’oblige à tomber dans ce piège. Un code de qualité est justement construit pour être intelligible. Il est aisé d’en transférer la maintenance à une autre ESN, en interne ou même simplement à un nouveau collaborateur. Le code est pensé pour offrir le plus de liberté et d’indépendance à l’entreprise.

Sérénité

Un service informatique efficace devient bien souvent indispensable. Tant mieux, dans ce cas, c’est qu’il a atteint son but : servir l’entreprise en baissant ses coûts de production, en augmentant ces rendements, en densifiant le travail effectué par les collaborateurs, en simplifiant l’acquisition de nouveaux clients, etc.

En bref, un système informatique réussi se rendra partout utile.

Malheureusement, comme tout outil, il est improbable que le système informatique ne connaisse aucune faille. C’est certain, il y aura de la casse. Et la casse, comme le temps passé à la réparer peuvent devenir très douloureux quand l’outil s'est infiltré partout.

On pensera aux bateaux anciens dont la coque n’était qu’un ventre ; la moindre fuite emplissait le navire entier, le rendant impossible à manœuvrer alors même qu’il coulait.

Aujourd’hui, les bateaux ont des coques segmentées.

La fuite n’inonde qu’une partition, ce qui limite le danger mais aussi la rend plus facile à régler : on sait où elle se trouve, dans le segment inondé. Un code médiocre fonctionne comme une coque médiévale : les bugs y sont plus dangereux et leur réparation plus lente.

Au contraire, un code de qualité réduit les downtimes d’une application. Non seulement les bugs y sont moins fréquents, mais, à la manière des coques modernes, il est aussi aisé de repérer la cause, de l’isoler et de régler le bug.

De plus, du fait de la complexité d’un programme informatique, il est facile d’introduire de nouveaux bugs en essayant de rectifier le code. Là encore, un code de qualité vérifiera automatiquement si les réparations sont compatibles avec les travaux précédents (c.f. plus bas : “Les projets sont soumis à des tests automatisés”).

On voit bien comment il est difficile de faire l’économie de la qualité si on désire la réussite d’un projet. Au-delà même de la livraison, la qualité du code permet à l’entreprise de se concentrer sereinement sur son expertise, son business model, bref; ses règles métiers. Elle peut se reposer en confiance sur son outil informatique pour croître.

Maîtrise

Le marché évoluant constamment, une entreprise parfait son business model en permanence. Continuellement, elle améliore sa compréhension de ses clients. C’est pourquoi on attend une certaine flexibilité des collaborateurs, leur montée graduelle en compétence. Une même exigence devrait être appliquée au service informatique. Chaque projet, chaque investissement doit être placé dans la roadmap de l’entreprise, à court, moyen et long terme. En une phrase : une entreprise doit avoir la maîtrise sur ses investissements informatiques.

Or, un projet cheap, brouille ses contours, intentionnellement ou non.

Premièrement en introduisant un flou dans les devis.

Bien souvent l’expression du besoin et sa traduction en fonctionnalités informatiques sont laissées à l’entreprise.

Il est de fait probable que des incompréhensions soient introduites.

De plus, si aucun vocabulaire commun n’est établi, les remontées d’informations des développeurs vers les dirigeants sont quasiment impossibles. Souvent, ces derniers se désintéressent alors du projet. Il s’agit d’une des causes principales de l’échec des projets d’après le Chaos Report du Standish Group.

Deuxièmement, les projets cheaps sont difficiles à améliorer.

Ceci est dû à la mauvaise explicabilité du code, c’est à dire qu’il est difficile pour un nouveau venu de comprendre comment fonctionne le code, ou même à l’auteur de s’en souvenir !

Résultat, il est souvent impossible de faire évoluer le code rapidement. Voulu source de croissance, le système informatique devient un boulet pour l’entreprise.

Au contraire, un code de qualité permet de dépasser tous ces défauts pour mettre le projet au service de la création de valeur.

Dès l’expression du besoin, un vocabulaire commun est établi.

C’est ce qu’on appelle le domain driven design. Les développeurs traduisent le besoin en problématiques informatiques en utilisant une nomenclature qui permet aux décideurs de comprendre la logique de l’application. Le directeur technique peut alors exercer pleinement et simplement sa surveillance avant même le début des travaux. Cette étape permet aussi d’assurer la maîtrise financière du projet en limitant les mauvaises surprises. On sait ce qu’on paye et surtout on peut prioriser les fonctionnalités.

Ensuite, comme mentionné plus haut, le code de qualité est conçu pour être explicable. Il est donc facile de l'améliorer au vu de nouvelles informations, ou d’étendre son périmètre d’action. On voit comment la qualité de conception assure à l’entreprise la maîtrise et l’évolutivité de son projet.

Comment reconnaître un code de qualité ?

On trouvera ici les caractéristiques d’un code de qualité. Il est recommandé de se renseigner sur ces points lors des négociations avec un fournisseur, ou lors de l’évaluation des travaux du service informatique.

Les projets sont soumis à des tests automatisés

Les tests automatiques permettent de capitaliser sur la construction de l’application et la résolution des bugs. Toutes les fonctionnalités sont vérifiées automatiquement et on ne risque pas de rencontrer la même erreur deux fois !

Grâce au framework PHPUnit, il est possible de mettre en place des tests unitaires mais également des tests de non-régression. Ceci assure que les fonctionnalités implémentées correspondent aux comportements souhaités. De plus, il est recommandé de faire des tests de comportement, par exemple avec Behat. Cet autre framework permet d’écrire des tests dans un langage compréhensible et permet de naviguer comme un utilisateur dans l’application et de vérifier le fonctionnement.

Les projets subissent de l’analyse statique

L’objectif de l’analyse statique est de garantir la meilleure maintenance possible du code en détectant automatiquement les erreurs d’implémentations.

Ceci se fait en utilisant des outils de scanning des projets.Le code est alors propre et fonctionnel. Des outils tels que PHPStan ou encore Psalm permettent ce type d’analyse.

Le code est relu

La relecture du code par un autre développeur garantit une qualité de code optimale. Cette “revue de code" permet une utilisation rapide des compétences de tous les développeurs. Les bonnes pratiques se répandent plus rapidement et les erreurs d'inattention sont évitées. Faire relire le code par un/plusieurs collègues permet d’avoir la certitude que le code ajouté correspond au standard de qualité de l’entreprise et qu’il répond aux besoins demandés. S’il ne correspond pas, le code devra être mis à jour puis à nouveau soumis à la revue. C’est aussi ainsi qu’on s’assure que le code est explicable et facilement transférable. Des outils comme Github ou Gitlab permettent de réaliser de la revue de code (avec les Pull Request notamment).

Le déploiement est automatique

Pour la mise en ligne des applications, l’automatisation est de mise afin d’éviter toute erreur humaine. Capistrano permet la mise en ligne du code de manière automatisée. Combiné à toutes les étapes supérieures, il assure un processus robuste : si les tests s’effectuent avec succès, que le code passe l’analyse statique puis qu’il est validé par la revue de code, alors il sera mis en ligne automatiquement sur le serveur.

Les serveurs sont surveillés

Une fois l’application en ligne sur un serveur, il faut mettre en place la surveillance des machines hébergeant vos applications afin de pouvoir réagir très rapidement en cas d’anomalie. Pour cela, des outils tels que Grafana permettent de créer des tableaux de bords organisant les données collectées sur vos serveurs (tel que la mémoire utilisée, l’utilisation du disque, l’utilisation des processeurs…) via OpenTSDB et distribué via Telegraf. Les équipes pourront surveiller les graphiques et ajouter des alertes si ces données dépassent certains seuils définis. Combiné à cela, PagerDuty pourra contrôler le statut des services sur le serveur. Si un dysfonctionnement ou une surcharge est détecté, une alerte est envoyée à l’équipe de développement, il ne reste plus qu’à trouver la source et de résoudre cette anomalie.

Les applications sont surveillées

Afin de compléter la surveillance des serveurs, il faut s’assurer du bon comportement des applications grâce à des outils tels que Sentry ou Monolog. Si une application dysfonctionne les erreurs sont enregistrées dans des fichiers de logs et une alerte est immédiatement envoyée afin que l’équipe de développement puisse intervenir sur le champ.

Les développeurs ont pensé au cache

Pour avoir des performances plus importantes sur vos applications, pensez à vérifier l’ajout du cache. Notamment sur 2 niveaux: la base de données avec doctrine ainsi que symfony. Ce processus permet d’augmenter le débit et de réduire considérablement le temps de récupération des données. Au lieu d’aller demander des informations, l'application délivre celles déjà stockées.

Les développeurs font de la veille technique

Des évolutions des langages informatiques, de nouvelles approches de développements ou bien de nouveaux outils apparaissent en permanence. Dans l'optique de maintenir les connaissances à jour, il est indispensable que les développeurs se renseignent sur les nouvelles tendances et les meilleures pratiques. Cette veille technique passe par la lecture d’articles et la participation à des conférences pour les développeurs tels que le forum PHP.

Télécharger ce livre blanc au format PDF

Contact

Vous avez un projet ? Réalisons le ensemble !

Vous avez un projet et cherchez une équipe pour le mettre en œuvre ?
Dites-nous de quoi il s’agit, et nous vous dirons ce que nous pouvons faire ensemble.