Comment améliorer la qualité de code ?

A l'heure où l'IA, avec un soutien marketing considérable, nous promet du code écrit dans les règles de l'art par des robots infaillibles, formés sur l'ensemble du code produit par l'humanité, plusieurs questions se posent :
Philippe.jpg
Philippe AUBERTIN, Javaman aigriMis à jour le 9 Juil 2024
Comment améliorer la qualité de code ?

C'est un peu le rêve du moment : un système d'information écrit automatiquement par des machines, se rapprochant de plus en plus des enjeux métiers tout en réduisant les coûts. Le Saint Graal, dirait-on !

Ce rêve technologique tant convoité est-il réellement sur le point de se réaliser ? Et si oui, est-ce pour bientôt ?

Qu'est-ce que la qualité code ?

C'est assez difficile de donner une définition précise au terme "qualité de code". Il s'agit d'une notion assez générique, qui englobe différents aspects :

  • Aucun bug : Pour beaucoup de personnes, un code de qualité est un code qui fonctionne et qui ne possède simplement aucun bug.
  • Un code élégant : Pour d'autres, la qualité de code se trouve dans la "beauté" de celui-ci. Il est clair et concis.
  • L'accessibilité : Certains jugent la qualité d'un code à sa capacité à être utilisé, compris et modifiable facilement par différentes personnes.
  • La maintenabilité : La capacité d'un code à pouvoir être maintenu dans le temps est également un critère important.
  • Les performances : Pour beaucoup, un code de qualité se doit d'être performant et optimisé.

De notre côté, nous pensons que la qualité de code se trouve dans un bon compromis entre ces différents facteurs.

L'IA au service de la qualité de code

L'intelligence artificielle (IA) est LE sujet tendance du moment, il est bien vu de l'intégrer dans divers aspects du processus de développement. Nous allons voir ici comment l'utiliser intelligemment à travers différents cas d'utilisation qui pourront vous permettre d'améliorer la qualité du code de vos projets.

Faire des revues de code grâce à l'IA

Lorsque l'on parle d'IA, nous parlons en réalité principalement d'IA générative. Cette dernière est excellente pour rédiger, que ce soit pour écrire une recette de cuisine ou du code. Si on devait résumer, cette IA est principalement basée sur des statistiques pour générer un texte qui fait le plus de sens par rapport à la demande. C'est d'ailleurs pour cette raison que l'IA génère les mots les uns après les autres, elle n'a aucune idée de la fin de la phrase lorsqu'elle la commence.

L'objectif de cette explication est de mettre en évidence qu'il peut être difficile de croire aveuglément tous les codes que l'IA peut générer. Dans vos processus de rédaction de code, ce sera une aide très précieuse, mais il vous sera donc difficile d'automatiser des processus de vérification de code grâce à de l'IA. L'IA apportera une réponse un peu banale si vous lui demandez « Est-ce que la qualité de mon code est bonne ? » alors qu'elle sera bien plus compétente pour répondre à la question « Est-ce que mon code est bien découpé en fonctions ? ». Si vous souhaitez automatiser des revues de code grâce à l'IA, la demande doit être très précise.

Se servir de l'IA pour améliorer la qualité de code

Pour la qualité du code, l'IA est une grande aide ! Cette dernière peut très facilement vous expliquer comment rédiger votre code dans les grandes lignes en vous sauvant des nombreuses heures de lecture de documentation. Cependant, il faudra toujours bien relire le code et y apporter des modifications pour qu'il soit parfaitement intégré dans votre projet.

Créer des tests unitaires avec l'IA

L'IA est également très douée lors de la rédaction des tests : elle permet de rédiger bien plus rapidement des tests unitaires ou d'intégration. Vous n'avez plus de bonnes raisons de ne pas écrire de tests sur vos projets.

Apprendre avec l'IA

Un point bien souvent oublié lorsque l'on parle d'IA et de qualité de code est l'apprentissage. L'IA ayant accès à de très larges connaissances, elle sera facilement capable de répondre à vos questions en lien avec la qualité de code. Elle sera toujours une très bonne source d'information pour parfaire vos connaissances sur différents sujets. Attention tout de même, il est toujours important de vérifier ce que l'IA vous dira. Dans ce cas d'usage, on ne peut que grandement conseiller l'utilisation de Bing (Copilot) qui, à côté de vos explications, vous fournit les différents liens de sites utilisés pour rédiger sa réponse. Cela vous permet d'avoir directement accès aux différents sites qui peuvent répondre à votre question et ainsi vous faire un avis par vous-même.

Utiliser intelligemment l'intelligence artificielle

Nous souhaitons conclure cette dernière partie sur l'IA avec un petit avertissement : lors de l'utilisation de l'IA, il est bien important d'avoir en tête ses limitations. Il nous a été couramment donné de voir l'IA générer des codes qui contiennent des failles de sécurité. Il est important d'avoir une bonne connaissance du code et des bonnes pratiques. Cela va vous permettre de remettre facilement en question le code généré par l'IA ainsi que de l'aiguiller au mieux lors de sa rédaction pour obtenir le meilleur code possible. Le meilleur conseil que l'on peut vous donner lorsque l'on parle de génération de code par l'IA est de ne jamais demander à une IA de générer un code dont vous n'avez aucune idée du résultat final attendu. Si vous n'êtes pas capable de challenger la proposition de l'IA en termes de qualité de code, le risque d'intégrer le code généré est bien trop grand.

L'audit de code - L'arme ultime pour améliorer la qualité du code

Qu'est-ce qu'un audit de code ?

L'audit de code consiste à examiner le code afin d'identifier les problèmes potentiels et les améliorations possibles. Il représente donc une étape incontournable à l'amélioration de la qualité d'un code source.

La place de l'humain dans un audit de code source

Étonnamment, en 2024, cette tâche doit encore être effectuée par un humain. Bien que l'intelligence artificielle commence à jouer un rôle dans cette activité, l'audit humain reste essentiel pour améliorer le code source. Cependant, l'audit de code est un exercice délicat. Premièrement, cela peut sembler surprenant, mais il n'existe pas de manière parfaite d'écrire un logiciel.

Pour illustrer ce problème, considérons le paradoxe suivant : en tentant d'améliorer la lisibilité du code, on peut en diminuer la performance. Pourquoi ? Car un code source performant doit être écrit à un niveau bas, utilisant des instructions primitives. Plus on emploie ces instructions, moins le code est lisible et maintenable. Ce n'est qu'un exemple  parmi tant d'autres qui démontre qu'il est impossible d'obtenir un code parfait. L'enjeu de l'audit de code est donc de naviguer dans ces eaux troubles pour répondre au mieux aux besoins du projet. Pour cela, il faut d'abord discuter des priorités : performances, maintenabilité, rapidité de livraison des fonctionnalités, ou prévention des régressions ?

Ce n'est qu'après cette analyse qu'on peut évaluer un code source. Et pour l'instant, seuls les humains en sont capables, car il n'est plus possible d'appliquer des règles génériques. De notre côté, on pense que cette situation ne changera pas de sitôt, et que, même si l'IA peut assister dans l'amélioration de la qualité du code, elle ne pourra pas remplacer l'expertise humaine.

Ce que sait faire un humain, et qui reste hors de portée d'une machine, c'est la capacité à gérer des contextes d'applications complexes, avec de nombreux modules interagissant entre eux. La capacité d'abstraction d'un développeur expérimenté est toujours supérieure.

Enfin, une compétence primordiale de l'audit de code est de remettre en question la fonctionnalité même du code. Il n'est pas rare qu'en cherchant à comprendre et à améliorer un code, on conclue que celui-ci est inutile et pourrait être conçu différemment.

Les points importants à examiner lors d'un audit

Après ce long préambule, nous pouvons détailler les points importants à examiner lors d'un audit :

  • Identifier les bugs évidents (en s'appuyant sur des listes de bugs classiques selon les langages et frameworks).
  • Maximiser l'utilisation des frameworks (vérifier si des tâches sont effectuées manuellement alors qu'elles sont disponibles de manière standard dans le framework - cela nécessite que l'auditeur effectue une veille technologique).
  • Porter une attention particulière aux problèmes de performances classiques (avec un focus sur les requêtes à la base de données).
  • Assurer la lisibilité du code (il ne s'agit pas seulement de vérifier la présence de commentaires, mais de s'assurer que le code est compréhensible).
  • Examiner le processus de développement (il est important de regarder comment le git flow est utilisé, la gestion des environnements, le DevOps, etc.).
  • Profiter de l'audit pour former les nouveaux arrivants (tout projet respectable devrait intégrer cette pratique pour transmettre ses valeurs).
  • Valider la modélisation (ce qui est difficile car on tend à adopter la perspective du développeur initial. Il faut prendre du recul et remettre en question à la fois le code et la base de données).
  • Examiner impérativement la sécurité du code (même si elle est gérée par le framework, il est crucial de se baser sur les vulnérabilités communes comme celles du OWASP top 10).
  • Examiner les dépendances pour s'assurer qu'elles soient à jour et éviter l'ajout de librairies suspectes.

La sensibilisation des développeurs pour améliorer la qualité de code ?

Lorsque nous abordons la question de la qualité du code, le développeur se trouve au centre de la discussion et devrait être la principale priorité en termes d'investissement si l'on souhaite améliorer la qualité globale de nos livrables.

La formation joue un rôle crucial à cet égard, agissant sur plusieurs fronts. Tout d'abord, sur le plan humain, une entreprise prospère a besoin d'une équipe motivée et qualifiée pour accomplir les tâches qui lui sont confiées. Ainsi, la formation est essentielle pour valoriser les compétences de vos développeurs. Ensuite, du point de vue du code à proprement parler, un développeur qui acquiert, comprend et applique des concepts visant à améliorer la qualité du code le fera de manière durable, contribuant ainsi à la réussite continue des projets. Enfin, en participant à la revue croisée des "merge requests" ou "pull requests" de son projet, il favorisera également le développement des autres membres de l'équipe.

Le DevOps - Voiture balai pour assurer une qualité optimale ?

Le rôle du DevOpsEnsemble de techniques permettant l'intégration, les tests et le déploiement d'une application. dans l'assurance de la qualité du code est essentiel et se manifeste à travers plusieurs aspects clés.

Réduire le risques d'erreurs de code grâce au DevOps

Tout d'abord, en favorisant l'intégration continue (CI), le DevOps encourage une pratique où les développeurs fusionnent leurs modifications de code dans une branche principale plusieurs fois par jour. Cette approche permet une détection rapide des erreurs de code, facilitant ainsi leur correction immédiate. De même, le déploiement continu (CD) est facilité par le DevOps, automatisant les tests et le déploiement des modifications dans l'environnement de production après leur intégration, réduisant ainsi les risques d'erreurs de déploiement et assurant une livraison plus rapide du produit.

Faciliter la collaboration entre les équipes de développement et d'exploitation

Parallèlement, le DevOps encourage la collaboration entre les équipes de développement et d'exploitation, favorisant une communication plus fluide, une résolution rapide des problèmes et une amélioration globale de la qualité du code. L'automatisation des tests est également un pilier du DevOps, permettant une détection précoce des erreurs et des problèmes de qualité du code, libérant ainsi du temps pour les développeurs afin qu'ils puissent se concentrer sur la résolution des problèmes plutôt que sur la recherche des erreurs.

Comment vous faire accompagner dans l'amélioration de la qualité de votre code source ?

On l'aura compris, de nombreux outils sont à votre disposition pour améliorer la qualité d'un code. Cependant, dans un monde numérique où la qualité du code source est l'essence même du bon fonctionnement d'un système d'information, que ce soit l'IA, le DevOps, etc. Rien ne remplace à 100% l'humain pour assurer sa qualité.

Si vous souhaitez vous faire accompagner ou simplement avoir un avis sur votre démarche d'amélioration du code source de vos applications, nos experts en développement seront ravis d'échanger avec vous sur le sujet !