Votre code IA est-il de la pure DAUBE ? (Voici comment corriger ça)

BBetter Stack
Computing/SoftwareManagementInternet Technology

Transcript

00:00:00Aujourd'hui, je veux parler du CRAP. Et non, il ne s'agit pas de ce genre de CRAP. Je parle de
00:00:05l'abréviation qui signifie Change Risk Anti-Patterns Index. Et c'est conçu pour trouver
00:00:12les fonctions risquées dans votre code, qui sont très complexes, mais mal testées. Ce n'est pas
00:00:18un concept particulièrement nouveau, mais qui a attiré mon attention récemment, grâce à un paquet publié par
00:00:24Alexander Prokhoranko appelé Cargo CRAP, qui identifie ces fonctions clés dans le code Rust.
00:00:31L'idée originale de la métrique CRAP vient d'Alberto Savoia et Bob Evans, qui ont inventé la
00:00:37métrique en 2007 alors qu'ils expérimentaient avec des outils de test automatisés pour développeurs. Mais Alexander
00:00:44a récemment relancé l'attention sur cette métrique oubliée en écrivant cet article perspicace
00:00:49à ce sujet et sur la façon dont, de nos jours, alors que presque tout le code est écrit par des agents IA, il est plus important que jamais
00:00:55de scanner votre base de code pour ces problèmes cachés. C'est un concept très cool et nous allons l'explorer
00:01:01plus en détail dans la vidéo d'aujourd'hui. Alors, plongeons dedans. Pour comprendre pourquoi cela compte, examinons
00:01:11cette fonction sur mon écran. Elle gère une transformation de données en plusieurs étapes avec des instructions “match”
00:01:16profondément imbriquées, quelques boucles et de nombreux chemins de gestion d'erreurs. Sa complexité cyclomatique est donc assez élevée, environ 15.
00:01:24Maintenant, si vous n'êtes pas familier avec le terme complexité cyclomatique, c'est fondamentalement une façon élégante de mesurer
00:01:30combien de chemins différents une donnée peut emprunter dans votre code. Chaque fois que vous écrivez une instruction “if”
00:01:36ou un “match” ou une boucle “while” ou un bloc “catch”, vous créez une bifurcation, et plus vous avez de bifurcations,
00:01:43plus le score de complexité augmente. Et plus il devient difficile pour un cerveau humain de cartographier chaque résultat possible
00:01:51dans une fonction. C'est pourquoi, dans la mesure du possible, nous essayons de diviser les fonctions en petites tâches.
00:01:57Et pour cette fonction sur mon écran, une complexité de 15 signifie qu'il y a 15 chemins distincts
00:02:04que cette logique peut exécuter du début à la fin. Maintenant, si cette fonction est entièrement couverte par des tests unitaires,
00:02:09son score CRAP reste à 15. C'est complexe, mais c'est sûr car nous validons son comportement.
00:02:16Et c'est ce à quoi nous devrions nous attendre lorsque nous exécutons l'outil d'Alexander, CargoCrap. Et ici, nous voyons que le score est de 13,
00:02:23pas 15. C'est probablement parce que la bibliothèque n'a pas pris en compte les gestionnaires d'erreurs.
00:02:27Mais bref, 15 et 13 sont assez proches. Donc, en gros, cet outil fait ce que nous attendons.
00:02:33Mais regardons ce qui se passe si quelqu'un supprime ces tests ou si un agent IA génère cette fonction
00:02:39à partir de zéro et oublie complètement d'écrire des tests. Dans cet exemple, je vais juste mettre mes tests en commentaire.
00:02:45Et si nous réexécutons CargoCrap, le score dépasse soudainement 100.
00:02:51Il utilise donc une formule simple pour calculer le risque en équilibrant la complexité cyclomatique,
00:02:57le nombre de chemins d'exécution linéaires dans votre code par rapport à la couverture des tests.
00:03:03Donc, si nous regardons cette fonction, C est la complexité cyclomatique de la fonction et COV est la couverture des tests
00:03:10exprimée sous forme de fraction entre zéro et un. Et le calcul pénalise lourdement le code complexe qui manque de tests.
00:03:17Ainsi, si votre couverture est de cent pour cent, tout le premier chemin de l'équation tombe à zéro
00:03:23et votre score CRAP égale simplement votre complexité cyclomatique.
00:03:26Mais si votre couverture chute, l'exposant cubique sur le côté gauche fait monter en flèche le score de risque.
00:03:33Et une fonction avec une complexité de 10 et une couverture de zéro donne un score CRAP de 110.
00:03:39Et c'est une bonne chose, car si vous voulez une base de code où, par exemple,
00:03:43aucune fonction ne dépasse une complexité cyclomatique de cinq, alors c'est votre métrique de base à surveiller.
00:03:49Et si une fonction dépasse cinq, vous savez que c'est une zone à laquelle faire attention.
00:03:55Normalement, vous pourriez autoriser une complexité plus élevée. CargoCrap a une valeur par défaut fixée à 30.
00:04:00Mais je dis simplement que vous pouvez définir cette métrique vous-même comme vous le souhaitez.
00:04:05C'est donc essentiellement une bonne métrique intermédiaire à surveiller.
00:04:09Et cela devient critique à l'ère du code généré par IA.
00:04:13Parce que les agents IA sont incroyablement doués pour produire ces blocs de code syntaxiquement corrects
00:04:20hautement complexes qui gèrent des cas limites auxquels vous n'aviez même pas pensé, mais ils sont notoirement mauvais pour écrire
00:04:25des tests d'intégration significatifs et robustes à moins d'y être explicitement forcés.
00:04:30Des outils comme CargoCrap sont donc destinés à être exécutés en deuxième vérification après tous les tests unitaires
00:04:37pour évaluer la qualité globale du code.
00:04:39Cela agit donc essentiellement comme une carte thermique pour votre dette technique, vous pointant directement vers le code
00:04:44qui est le plus susceptible de casser lors d'une refactorisation.
00:04:47Et c'est aussi particulièrement utile si vous voulez garder votre base de code bien structurée
00:04:52au cas où vous devriez intégrer un nouvel ingénieur dans votre équipe.
00:04:56Et nous savons, d'après des comptes rendus anecdotiques, à quel point les bases de code peuvent devenir folles avec tout ce
00:05:02code généré par IA aujourd'hui si nous n'y prêtons pas attention.
00:05:06Et parfois, ces agents IA ont aussi tendance à dupliquer la même fonction dans plusieurs fichiers.
00:05:13Je pense donc que des outils comme ceux-ci, et surtout des méthodologies comme celles-ci, sont importants à connaître
00:05:19et à ne pas oublier dans notre paysage de codage moderne pour maintenir une haute qualité de code.
00:05:24Les mêmes auteurs qui ont proposé cette méthodologie ont également publié un outil de métrique CRAP pour Java.
00:05:30Et honnêtement, jusqu'à ma lecture récente de l'article d'Alexander, je n'étais même pas au courant de cette métrique.
00:05:34Je suis donc reconnaissant que son outil m'ait fait remarquer cette pratique d'ingénierie oubliée depuis longtemps.
00:05:40Et je suis sûr que d'autres langages de programmation bénéficieraient également d'un tel outil.
00:05:44Donc, si vous cherchez un projet amusant à construire pendant votre temps libre,
00:05:48allez lire l'article original d'Alberto Savoia et construisez-en un pour un autre langage de programmation
00:05:53car cela pourrait être un utilitaire très utile pour beaucoup de développeurs.
00:05:57Voilà, les amis.
00:05:58C'est tout pour le CRAP.
00:06:01Ça sonnait drôle.
00:06:02Bref, quelles sont les autres pratiques ou métriques d'ingénierie oubliées que vous connaissez
00:06:08et auxquelles nous devrions prêter plus d'attention dans cette nouvelle ère du codage agentique ?
00:06:13Faites-le-nous savoir dans la section des commentaires ci-dessous.
00:06:15Et les amis, si vous aimez ce genre de breakdowns techniques,
00:06:18faites-le-moi savoir en fracassant ce bouton “j'aime” sous la vidéo.
00:06:21Et n'oubliez pas non plus de vous abonner à notre chaîne.
00:06:24C'était Andrus de BetterStack et je vous verrai dans les prochaines vidéos.
00:06:28On se voit dans les prochaines vidéos.

Key Takeaway

L'utilisation de la métrique CRAP permet de cartographier la dette technique en pénalisant les fonctions complexes dépourvues de tests, un outil devenu essentiel pour valider le code généré par IA.

Highlights

  • L'indice CRAP (Change Risk Anti-Patterns) quantifie le risque d'un code en combinant sa complexité cyclomatique et sa couverture de tests.

  • Une fonction avec une complexité cyclomatique de 10 et une couverture de tests nulle génère un score CRAP de 110.

  • La formule du score CRAP utilise un exposant cubique, ce qui fait monter en flèche le risque dès que la couverture de tests diminue.

  • Les agents IA produisent souvent du code syntaxiquement correct mais complexe sans inclure les tests unitaires nécessaires.

  • CargoCrap identifie automatiquement les fonctions risquées au sein d'une base de code écrite en Rust.

Timeline

Définition et origine de la métrique CRAP

  • Le sigle CRAP signifie Change Risk Anti-Patterns Index.
  • Cette métrique identifie les fonctions présentant une complexité élevée et une faible couverture de tests.
  • Alberto Savoia et Bob Evans ont inventé cette métrique en 2007.

L'indice CRAP vise à isoler les zones à risque dans une base de code. Initialement conçu pour les environnements de test automatisés, il gagne en pertinence avec l'essor du code généré par IA qui tend à négliger les tests unitaires.

Calcul et interprétation de la complexité

  • La complexité cyclomatique mesure le nombre de chemins d'exécution distincts dans une fonction.
  • Une complexité de 15 signifie que 15 chemins logiques différents traversent la fonction.
  • Le score CRAP s'obtient en équilibrant la complexité cyclomatique avec la fraction de couverture des tests.

Chaque structure de contrôle telle que 'if', 'match' ou 'while' augmente la complexité cyclomatique. Lorsque la couverture de tests atteint 100 %, le score CRAP est égal à la complexité. En l'absence de tests, l'exposant cubique de la formule augmente drastiquement le score de risque.

Application dans le développement moderne

  • Les outils comme CargoCrap servent de seconde vérification après les tests unitaires.
  • La métrique agit comme une carte thermique pour localiser les zones de la base de code susceptibles de rompre lors d'une refactorisation.
  • L'utilisation de cette méthode aide à maintenir une structure cohérente lors de l'intégration de nouveaux ingénieurs.

L'IA génère facilement des blocs complexes mais échoue souvent à produire des tests robustes. L'analyse CRAP permet de limiter la dette technique et de prévenir les comportements imprévus dans les bases de code saturées par des contributions automatiques.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video