État de l'Intelligence Artificielle appliquée à l'Ingénierie de la Qualité 2021-2022
Section 3.1 : Mesures

Chapitre 3 par Capgemini

Analyse de la qualité du code

Métier ●○○○○
Technique ●●●●○

Download the "Section 3.1: Inform & Measure" as a PDF

Use the site navigation to visit other sections and download further PDF content

By submitting this form, I understand that my data will be processed by Sogeti as described in the Privacy Notice.*

Il est possible d'améliorer la qualité du code en appliquant des modèles d'analyse et d'apprentissage automatique au contenu et aux métadonnées du code, ainsi qu'aux données provenant d'autres référentiels connexes. Si ces modèles nous aident à prendre des décisions plus rapidement, ils ne remplacent pas l'intelligence humaine.

La qualité du code source est essentielle à la création de logiciels, et son contrôle permanent est une responsabilité essentielle dans le projet. Diverses organisations ont adopté un ensemble de pratiques au cours des quatre dernières décennies. Les approches sont restées constantes mais ont été améliorées par un apprentissage continu et une adaptation aux nouveaux outils et technologies. Les stratégies d'analyse de la qualité du code qui sont largement utilisées par la majorité des entreprises sont représentées dans la figure ci-dessous.

  • Les procédures de qualité de code pré-commit sont celles qui sont utilisées avant chaque commit, c'est-à-dire qu'elles vérifient minutieusement le code logiciel avant qu'il ne soit modifié dans un dépôt de code source.
  • Les approches de qualité de code post-commit sont celles qui sont utilisées après le commit.
Figure 1: code quality analysis techniques

 

Figure: Techniques d'analyse de la qualité du code

Les activités telles que l'analyse d'impact manuelle, l'identification du bon ensemble de cas de test à exécuter, les revues de code inadéquates, les tests unitaires et la nature non déterministe du système sont les principales raisons du retard des tests.

Les possibilités de surmonter les
les défis liés aux techniques de qualité du code

Il existe une marge d'amélioration considérable pour surmonter les limites actuelles, notamment :

  • L'absence d'approche d'analyse collective, le manque de bande passante, et les outils aboutissent souvent à un processus de décision erroné.
  • Les avantages de l'exploration des référentiels logiciels sont pour la plupart inexploités. Les tendances et les modèles ne sont donc pas exploités ou sous-exploités, ce qui nous empêche de fournir rapidement des recommandations d'analyse d'impact.
  • Les technologies d'analyse dynamique du code (DCA en anglais) génèrent d'énormes quantités de données, dont certaines peuvent contenir des quantités importantes de bruit. La suppression du bruit et l'extraction d'informations précieuses des résultats de l'analyse dynamique du code permettraient d'améliorer la détection des vulnérabilités exploitables.
  • Les connaissances des experts en la matière sont limitées à quelques domaines spécialisés, et les connaissances sont dispersées et incohérentes entre les différentes PME.
  • Nous ne faisons pas un usage approprié de la puissance de calcul disponible, de l'analyse croissante des données et des développements de l'apprentissage automatique.

Sources de données autour du code source

Au fil des années, une quantité massive de données est générée, stockée et conservée dans et autour du code du programme. Le tableau suivant résume les types de données trouvées dans et autour du code source :

  • Données comportementales (historique de commit)
  • Données attitudinales (code, revue de conception)
  • Données d'interaction (analyse dynamique du code, vérification du code dans les commentaires, notes de défauts)
  • Données descriptives (attributs de qualité du code comme la densité des défauts, etc., informations auto-déclarées).

Sources de données :

  • mauvaises odeurs (Code Smells en anglais)
  • Données sur les bogues
  • Commentaires de révision
  • Développeur
  • Système de gestion de la construction
  • Contenu du code Source et de ses dérivés
  • Données d'analyse du code dynamique
  • Données d'analyse du code statique
  • Exigences, cas d'utilisation
  • Résultats des tests unitaires

La liste ci-dessus est une collection possible de sources de données centrées sur le code source qui offre une mine d'or inexploitée d'informations. La plupart des techniques de qualité du code tirent des informations du contenu des données. L'analyse de qualité spécifique au contenu est spécifique au langage, dépend de la personne, prend du temps et ne fournit qu'une quantité limitée d'informations. En plus du contenu, les attributs hors contenu générés à partir des métadonnées autour du code aident à obtenir une image holistique de la qualité du code. Par exemple, les journaux de livraison, qui contiennent des données comportementales sur le code source, permettent d'extraire des informations telles que les tendances de changement et la familiarité des développeurs avec le code mis à jour. Ces caractéristiques (les caractéristiques ou propriétés sont appelées caractéristiques ou variables d'entrée en science des données) sont simples et capables de déterminer la qualité.

Les techniques existantes utilisent l'une ou l'autre des sources de données de manière isolée. La prise en compte des caractéristiques de qualité du code provenant de plusieurs référentiels permet de formuler des recommandations plus précises.

Figure 2


Figure: Fonctionnalités

Les caractéristiques de qualité du code peuvent être classées dans les catégories suivantes :

  • Mesures du changement : fonctions permettant de déterminer comment un composant du code évolue au cours d'une version, par exemple, des changements consécutifs effectués à la fin du cycle de publication ont une forte probabilité d'être défectueux.
  • Mesures du taux d'attrition : fonctions permettant de déterminer l'ampleur des changements apportés aux composants du code, par exemple, les changements extrêmes apportés aux composants du code ont une forte probabilité d'être défectueux.
  • Métriques humaines : fonctions permettant de déterminer qui modifie le composant de code sur un intervalle de temps, par exemple "trop de cuisiniers gâchent le bouillon" - si un composant de code est touché par de nombreux développeurs, il aura une forte probabilité d'être défectueux.
  • Métriques temporelles : fonctions permettant de déterminer les aspects temporels du moment où les changements sont apportés à un composant de code, par exemple, les changements effectués tard dans le cycle de publication ont une probabilité élevée d'être défectueux.
  • Facteurs de qualité du code : fonctionnalités permettant de déterminer la complexité et les violations de la qualité du code à l'aide d'une analyse statique du code, par exemple, les composants de code présentant une complexité élevée et de graves violations ont une probabilité élevée d'être défectueux.
  • Senteurs de code : fonctions permettant d'évaluer les senteurs de code qui conduisent à un état défectueux d'un composant de code, par exemple, une forte densité de senteurs de code sévères a une probabilité élevée d'être défectueuse.
  • Mesures des processus : fonctions permettant de déterminer l'efficacité et l'efficience des processus, par exemple, les lacunes des processus et les raccourcis privilégiés pendant le développement de logiciels peuvent entraîner des problèmes de qualité du code.
Figure 2: Code Quality Features


Figure: Caractéristiques de la qualité du code

Analyse et apprentissage automatique (pour la qualité du code)

Un système basé sur l'apprentissage automatique (machine learning) et l'apprentissage profond (deep learning) utilise des algorithmes qui permettent au modèle d'apprendre à partir des données. Les modèles formés sont ensuite utilisés pour prendre automatiquement des décisions intelligentes en fonction des relations, des modèles et des connaissances identifiés dans les données. Des algorithmes tels que Random Forest, Decision Tree, GBM, GLM, KNN, k-means clustering, RNN, LSTMs etc. sont utilisés pour extraire des connaissances, des modèles et des relations. L'expérience antérieure en matière d'exploitation minière permet d'identifier les schémas prévalents ; ces apprentissages ou schémas peuvent ensuite être utilisés comme prédicteurs de résultats futurs.

Les modèles historiques identifiés et accessibles à l'aide des caractéristiques décrites ci-dessus peuvent contribuer à l'élaboration d'un modèle capable de reconnaître les composants de code défectueux et dangereux dans un dépôt de code source.

En l'absence d'une solution automatisée, les architectes et les experts en la matière (PME) peuvent analyser manuellement la qualité du code en utilisant un ensemble d'heuristiques, de raccourcis mentaux. Ces heuristiques peuvent être extraites manuellement ou automatiquement en utilisant un cadre d'extraction d'heuristiques et un modèle analytique. L'objectif n'est pas de supplanter l'intelligence des PME, mais plutôt de compléter et d'accélérer leur prise de décision.

Analyse de la qualité du code

L'analyse de la qualité du code est une solution intelligente basée sur l'analyse et l'apprentissage automatique (machine learning) qui utilise des données provenant de plusieurs référentiels tels que le code source, les révisions de code, la gestion de projet, la gestion des défauts, la gestion des exigences et l'analyse statique du code pour identifier et prévoir les changements de fichiers de code source plus risqués entrants dans un référentiel en fonction de plus de 50 indicateurs de caractéristiques de risque produit. Il permet l'extraction de modèles à partir de données historiques et l'établissement de connexions entre plusieurs référentiels cloisonnés.

Dans l'analyse de la qualité du code, nous:

  • Factorisons les données provenant de plusieurs référentiels tels que le code source, les revues de code, la gestion de projet, la gestion des défauts et l'analyse statique du code.
  • Établissons les données liées entre les référentiels multi-silo
  • Extrayons des modèles à partir de données historiques
  • Dérivez plus de 50 mesures de changement, de désabonnement, temporelles, d'odeurs de code, de violation et de personnes qui sont des propositions de valeur uniques.
  • Implémentation d'un modèle auto-apprenant de prédiction de code/composant de version plus risqué en utilisant l'analyse et l'apprentissage automatique.
  • Le modèle d'analyse de la qualité du code peut être invoqué à la demande ou programmé pour obtenir des recommandations en temps réel sur les composants et les fichiers les plus risqués.
Figure: High level overview


Figure: Aperçu de haut niveau

Les défis de l'analyse de la qualité du code

Plusieurs problèmes importants sont associés à la mise en œuvre de l'analytique et de l'apprentissage automatique pour la qualité du code. Les difficultés rencontrées peuvent être résumées comme suit :

  • Données pour l'extraction des caractéristiques d'entrée clés non disponibles.
  • Données inadéquates pour effectuer des analyses de la qualité du code.
  • Données non accessibles pour effectuer l'analyse.
  • La qualité des données n'est pas à la hauteur, pour l'analyse.
  • Non-disponibilité de la liaison des données en raison de lacunes dans le processus.
  • Données bruyantes, difficulté à déterminer les valeurs aberrantes.

Un projet mature, avec un pipeline de publication solide et l'utilisation de technologies standard, est souvent exempt des difficultés susmentionnées.

Analyse d'impact automatisée

L'analyse de la qualité du code permet d'identifier les composants et les fichiers à haut risque dans un référentiel de code source. Toute mise à jour du code source a un effet sur la qualité, les caractéristiques et les fonctionnalités du code. Analyser manuellement les effets des changements entrants et apporter les modifications appropriées à la stratégie de test prend énormément de temps et peut entraîner un retard dans les tests ou ne pas fournir une couverture de test optimale pour la nouvelle version.

L'analyse d'impact automatisée assistée par des analystes utilise des méthodologies de traçage, de dépendance, d'expérience et empiriques pour générer des changements et des zones impactées afin de prévoir les cas de test qui couvrent les régions mises en évidence. Elle facilite l'identification des changements apportés aux exigences, au code source et aux scénarios de test dans un environnement d'intégration continue. Chaque changement déclenche un modèle d'analyse d'impact qui identifie le changement et les endroits impactés. Cela permet de prédire les cas de test qui couvrent les zones mises en évidence ci-dessus et alimente les tests d'intégration continue avec le plan de test. En outre, le modèle d'analyse d'impact tire des enseignements des résultats du plan de test et ajuste la durée d'exécution proposée si nécessaire.

En 2018, un fabricant mondial de composants automobiles évaluait l'adoption de la base de code Automotive grade Linux codebase[1] . L'approche traditionnelle consistant à s'appuyer uniquement sur l'analyse statique du code et les résultats des tests unitaires comme indicateurs du risque du code était considérée comme trop risquée. Ils ont opté pour une plateforme Capgemini centrée sur l'identification du risque du code à partir des méta-données (enregistrement de commit).

Le principal défi était que la base de code était complexe avec 104 000 fichiers, 12 000 développeurs contribuant dans le monde entier et plus de 600 000 commits. Le groupe d'ingénierie de la qualité du client souhaitait automatiser l'analyse d'impact afin de pouvoir déterminer le risque inhérent. L'approche d'exécution est détaillée ci-dessous.

Approche d'exécution :

  • Sources de données pondérées :
    • GIT- Code source
    • Gerrit - Commentaires de révision
    • JIRA - Défauts, profils de développement
    • C++ Test - Analyse de la qualité du code. [Conforme aux normes MISRA]
  • Collecte des données, préparation des données et analyse exploratoire des données.
  • Feature Engineering pour obtenir les caractéristiques de qualité du code.
  • Modèle pour déterminer la probabilité que chaque fichier soit défectueux en utilisant des modèles d'apprentissage automatique.
  • Auto classificateur pour la classification des risques.

Conclusion

L'amélioration de la qualité du code peut être obtenue en utilisant l'analyse et l'apprentissage automatique pour le contenu du code et les métadonnées, ainsi que les données provenant d'autres sources connexes. Les recommandations basées uniquement sur l'exploration du contenu ont atteint une précision relativement faible (entre 20 et 30 %), mais les recommandations basées sur le code, les métadonnées et d'autres sources pertinentes ont atteint une précision de 75 à 90 %. En général, l'application de l'analytique et de l'apprentissage automatique au code et aux artefacts liés au code permet aux entreprises de fournir un code plus rapide et de meilleure qualité. Les recommandations générées par l'analyse d'impact automatisée améliorent la qualité du code de la manière suivante :

  • Développement et exécution de petits tests unitaires pour les composants/fichiers à risque.
  • Révision du code à plusieurs niveaux pour les fichiers à risque
  • Tests de vérification de la construction dynamique
  • Les équipes d'assurance qualité concentrent les tests sur les zones à haut risque.
  • La cadence d'exécution des cas de test correspondants a augmenté pour les fichiers chauds.
  • Amélioration de la qualité grâce à la détection précoce des défauts.

Les recommandations générées par les modèles d'analyse et d'apprentissage automatique aident les équipes à prendre des décisions plus rapidement, mais elles ne remplacent pas l'intelligence humaine. Des audits fréquents de l'efficacité des modèles à l'aide de mesures statistiques telles que la précision, le rappel et la F-mesure, ainsi que la mise à niveau des modèles avec les heuristiques manquantes, permettraient de garantir l'exactitude des modèles.

En outre, l'analyse d'impact automatisée permet d'identifier les zones qui seront touchées par les changements à venir et d'optimiser le plan de test en conséquence, ce qui garantit un retour d'information plus rapide et une couverture maximale. Cela permet à l'entreprise de respecter les objectifs de délais de mise sur le marché tout en fournissant des produits de la plus haute qualité.

About the authors

Vivek Jaykrishnan

Vivek Jaykrishnan

Vivek Jaykrishnan is an enterprise test consultant and architect with extensive experience. He has over 22 years of experience leading Verification and Validation functions, including functional, system, integration, and performance testing, in leadership positions with reputable organizations. Vivek has demonstrated success working across a variety of engagement models, including outsourced product verification and validation in service organizations, independent product verification and validation in captive units, and globally distributed development in a product company. Additionally, Vivek has extensive experience developing and implementing test strategies and driving testing in accordance with a variety of development methodologies, including continuous delivery, agile, iterative development, and the waterfall model. Vivek is passionate about incorporating cognitive intelligence into testing and is also interested in exploring the frontiers of IoT testing.

Vivek Sejpal

Vivek Sejpal

Vivek is an passionate data scientist with more than five years of experience in analytics and machine learning. He is currently engaged in the design and development of intelligent data-driven assets for quality engineering applications. Vivek works with customers on end-to-end engagements to demonstrate the value of various Intelligent asset offerings across domains/industries. Additionally, Vivek contributes to the research and development of new intelligent assets for the purpose of resolving critical business problems through a data-driven approach that is consistent with business requirements.

About Capgemini

Capgemini is a global leader in partnering with companies to transform and manage their business by harnessing the power of technology. The Group is guided everyday by its purpose of unleashing human energy through technology for an inclusive and sustainable future. It is a responsible and diverse organisation of 270,000 team members in nearly 50 countries. With its strong 50 year heritage and deep industry expertise, Capgemini is trusted by its clients to address the entire breadth of their business needs, from strategy and design to operations, fueled by the fast evolving and innovative world of cloud, data, AI, connectivity, software, digital engineering and platforms. The Group reported in 2020 global revenues of €16 billion.

Get the Future You Want  I  www.capgemini.com

 

 

 

Capgemini logo