Webinaire en vedette : Simplifiez les flux de travail de conformité avec le nouveau test C/C++ 2024.2 et l'automatisation pilotée par l'IA Visionnez maintenant

Qu'est-ce que l'analyse de code statique?
Un aperçu complet

Aller à la section

Aperçu

Méthodes outils d'analyse de code statique Assurez une qualité continue pour le développement de logiciels. L'automatisation de la conformité avec une gamme de normes de codage fournit un codage de haute qualité, sûr et sécurisé pour le développement de logiciels d'entreprise et embarqués.

Qu'est-ce que l'analyse de code statique?

Analyse statique Il s'agit du processus d'analyse du code source dans le but de détecter des bugs et d'évaluer la qualité du code sans avoir à l'exécuter. Les développeurs et les testeurs exécutent une analyse statique sur du code partiellement complet, des bibliothèques et du code source tiers.

Les analyseurs de code statiques utilisent une interface de type compilateur pour créer un modèle syntaxique et sémantique du logiciel. Le modèle syntaxique est ensuite analysé par rapport à un ensemble de règles ou "vérificateurs" pour voir si le code est en violation. Ces vérificateurs utilisent des algorithmes de correspondance de modèles pour détecter les erreurs, notamment :

  • Mauvaise utilisation des constructions du langage
  • Utilisation de fonctions non sécurisées
  • Violations des directives de codage

L'analyse statique est fortement recommandée ou requise par certaines entreprises qui créent des applications conformes aux normes de sécurité telles que ISO 26262, DO-178C, IEC 62304, IEC 61508 et EN 50716. Elle aide les organisations à détecter les défauts difficiles à trouver et à améliorer la sécurité et la fiabilité des logiciels en se conformant aux normes de codage telles que MISRA, AUTOSAR C++ 14, CERT, CWE, OWASP et autres.

« MISRA », « MISRA C » et le logo triangulaire sont des marques déposées de The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Tous droits réservés.

Comment fonctionne l’analyse de code statique ?

Les analyseurs de code statiques utilisent une interface de type compilateur pour créer un modèle syntaxique et sémantique du logiciel. Le modèle syntaxique est ensuite analysé par rapport à un ensemble de règles ou de « vérificateurs » pour voir si le code est en infraction.

Cercle bleu avec une icône blanche représentant une bulle de mots avec un point d'exclamation bleu au milieu.

Définir les règles

Les vérificateurs utilisent des algorithmes de recherche de modèles pour détecter les erreurs telles que l'utilisation incorrecte de structures de langage, l'utilisation de fonctions non sécurisées et les violations des directives de codage. L'ensemble spécifique de vérificateurs utilisés est configurable par l'utilisateur. Certains outils d'analyse statique fournissent des configurations prédéfinies pour plus de commodité, par exemple pour les normes de codage telles que MISRA C 2023.

Cercle bleu avec une icône de paramètres de contrôle blanche.

Utiliser les données et contrôler le flux

Les vérificateurs plus sophistiqués utilisent une analyse sémantique qui utilise les données et le flux de contrôle pour détecter les bogues complexes et les vulnérabilités de sécurité. Pour ce faire, l'analyseur statique construit un modèle d'exécution du logiciel, considère les chemins possibles à travers le code et évalue l'utilisation des données au fur et à mesure de leur circulation depuis la source (comme la saisie utilisateur) vers sa destination (comme un appel API ou un appel système).

Cercle bleu avec une icône montrant trois lignes blanches empilées de plus en plus courtes avec la plus longue en haut et la plus courte en bas.

Appliquer l'heuristique

L'analyse de chaque condition et chemin possible prendrait trop de temps. L'analyseur utilise donc des heuristiques pour détecter les chemins les plus probables à évaluer. Les types d'erreurs détectés par ces vérificateurs incluent la déférence de pointeur nul, les dépassements de tampon et les vulnérabilités de sécurité telles que les injections de commandes et SQL.

Un graphique montrant le processus d'analyse statique lorsque le code source passe du référentiel source à l'analyseur statique, puis les violations sont signalées au serveur de l'équipe Parasoft.
Une vue d'ensemble du processus d'analyse statique

Façons d'appliquer l'analyse statique

Les équipes utilisent le plus souvent l’analyse statique de deux manières :

  1. Sur le bureau du développeur intégré à son environnement de développement (IDE).
  2. En ligne de commande dans le cadre d’un processus de build ou d’intégration continue.

Certains outils commerciaux s'intègrent aux principaux IDE et fournissent des solutions permettant aux utilisateurs de gérer efficacement les résultats d'analyse. En fait, l'intelligence artificielle et l'apprentissage automatique peuvent également être appliqués à la priorisation et à la gestion de toutes les violations identifiées afin de réduire les efforts et les risques.

Comparaison entre l'analyse statique et l'analyse dynamique

 

Image d'un tableau comparant les avantages de l'analyse statique et de l'analyse dynamique.

 

Combiner l'analyse statique et dynamique est la meilleure option pour obtenir des résultats exploitables, réduire l'occurrence des bugs, augmenter la détection des bugs et créer un code globalement plus sécurisé. L'un n'est ni meilleur ni pire que l'autre. Ils fonctionnent en tandem comme tous les rouages ​​d'une montre suisse parfaitement conçue.

 

Le pipeline SDLC et les étapes d'analyse statique et d'analyse dynamique qui détectent les défauts.
Le pipeline SDLC et les étapes d'analyse statique et d'analyse dynamique qui détectent les défauts.

Techniques d'analyse de code statique

L'analyse statique est le processus d'examen de la source sans exécution dans le but de détecter des bugs ou d'évaluer la qualité du code. Cela signifie que les équipes peuvent exécuter une analyse statique sur du code partiellement complet, des bibliothèques et du code source tiers. Dans le domaine de la sécurité des applications, l'analyse statique est connue sous le terme test de sécurité des applications statiques (SAST).

Analyse statique basée sur des modèles

Recherche les modèles de code qui enfreignent les règles de codage définies. En plus de garantir que le code répond aux attentes uniformes en matière de conformité réglementaire ou d'initiatives internes, il aide également les équipes à prévenir les défauts tels que les fuites de ressources, les problèmes de performances et de sécurité, les erreurs logiques et l'utilisation abusive des API.

Analyse statique basée sur les flux

Implique de trouver et d'analyser les différents chemins qui peuvent être empruntés dans le code à la fois par le contrôle (l'ordre dans lequel les lignes peuvent être exécutées) et par les données (les séquences dans lesquelles une variable ou une entité similaire peut être créée, modifiée, utilisée et détruite) . Cela peut exposer des problèmes qui conduisent à des défauts critiques tels que des corruptions de mémoire (écrasements de tampon), des violations d'accès à la mémoire, des déréférencements de pointeur nul, des conditions de concurrence ou des blocages. Il peut également détecter les problèmes de sécurité en indiquant les chemins qui contournent le code critique pour la sécurité, par exemple, le code qui effectue l'authentification ou le chiffrement.

Analyse de complexité

Implique de mesurer et de visualiser divers aspects du code. Il peut aider à détecter les défauts existants, mais le plus souvent, il avertit d'une difficulté potentielle à prévenir et à détecter de futurs défauts lorsque le code est maintenu. Cela se fait en trouvant la complexité et la lourdeur telles que :

  • Composants trop volumineux
  • Imbrication excessive de boucles
  • Série de décisions trop longue
  • Dépendances intercomposantes alambiquées

Analyse de duplication de code

La recherche de code en double aide les organisations à améliorer la conception des applications et à réduire les coûts de maintenance. Au cours de ce type d'analyse, le code est décomposé en éléments de langage plus petits (tokens). Les tokens sont analysés selon un ensemble de règles qui spécifient ce qui doit être considéré comme du code en double. Il existe deux types de règles :

  • Des règles simples trouvent des doublons de jeton unique comme des littéraux de chaîne.
  • Les règles complexes trouvent plusieurs doublons de jetons, comme des méthodes ou des instructions en double.

Considérations lors de la recherche d'un outil

Lors de la sélection d'un outil d'analyse de code statique pour les applications critiques en matière de sécurité, certains facteurs clés doivent être pris en compte.

Icône à l'intérieur d'un cercle bleu montrant un contour blanc d'une liste de contrôle des directives.

Certifié par une autorité de certification TÜV

Pour les applications critiques en matière de sécurité et de sûreté, une solution certifiée par une autorité de certification TÜV telle que TÜV SÜD pour une utilisation sur des systèmes critiques en matière de sécurité pour la surveillance des normes de codage d'analyse statique telles que MISRA et AUTOSAR C++ 14.

Icône à l'intérieur d'un cercle bleu montrant un contour blanc d'une liste de contrôle des directives.

Fournit un rapport récapitulatif de conformité

Un rapport sommaire de conformité qui documente l'état de conformité pour chaque ligne directrice et tout autre écart ou recatégorisation associé.

Icône à l'intérieur d'un cercle bleu montrant un contour blanc d'une liste de contrôle des directives.

Prend en charge les normes de codage de l'industrie

Prend en charge plus de 2500 14 règles différentes qui couvrent les normes de codage de l'industrie telles que AUTOSAR C++ XNUMX, MISRA, JSF, CERT, CWE, etc.

Quels sont les avantages d'un outil d'analyse de code statique ?

Cercle bleu montrant une flèche blanche de tendance ascendante au centre.

Augmentez la qualité du code et réduisez le coût des défauts

Prévenez les défauts de code dès le début de tout processus de développement avant qu'ils ne se transforment en défis plus coûteux dans les dernières étapes des tests logiciels.

Icône du bouclier de sécurité.

Satisfaire aux normes fonctionnelles de l'industrie

Introduisez des solutions d’analyse statique recommandées par des normes de processus telles que ISO 26262, DO-178C, IEC 62304, IEC 61508, EN 50716 ou EN 50128, et plus encore.

Icône d'un cadenas

Satisfaire les tests de sécurité d'analyse statique (SAST)

Intégrez la conformité aux normes de codage de sécurité telles que SEI CERT, CWE, OWASP, DISA-ASD-STIG et UL 2900 dans les processus de test SA et assurez-vous que votre code répond à des normes de sécurité strictes.

Cercle bleu montrant une icône de loupe à contour blanc zoomant sur des curseurs blancs ouverts et fermés.

Satisfaire aux normes de conformité du codage de sécurité

Établissez la conformité avec les normes de codage de sécurité telles que MISRA, AUTOSAR C++ 14, JSF, etc., ou créez votre propre configuration de normes de codage personnalisées pour votre organisation.

Cercle bleu avec une icône blanche montrant deux carrés reliés par une ligne courbe.

Intégrez facilement l'analyse statique dans votre pipeline CI/CD rationalisé avec des tests continus qui fournissent rapidement des logiciels de haute qualité.

Icône à l'intérieur d'un cercle bleu montrant un connecteur blanc à 4 broches avec AI écrit au centre.

Testez plus intelligemment avec l'IA et le ML

Intégrez l'intelligence artificielle et l'apprentissage automatique pour améliorer la productivité dans le flux de travail d'analyse statique de votre équipe. L'IA signalera et hiérarchisera les violations les plus urgentes qui doivent être corrigées en premier.

Quelles sont les limites possibles d’un outil d’analyse de code statique ?

  • Génère des faux positifs et négatifs
    Les outils SAST génèrent souvent des faux positifs et des faux négatifs. Les faux positifs signalent des problèmes qui ne sont pas réels, ce qui fait perdre du temps aux développeurs, tandis que les faux négatifs passent à côté de véritables vulnérabilités, ce qui pose des risques de sécurité. Il est difficile de trouver un équilibre entre la réduction des faux positifs et l'augmentation des faux négatifs.
  • Complexités de l'analyse statique et des systèmes logiciels
    L'analyse de code statique est un défi pour les outils SAST en raison de la nécessité d'une compréhension approfondie de la structure du code, de la logique et du flux de données sans exécution. À mesure que la complexité du logiciel augmente, les outils SAST peuvent passer à côté de problèmes de sécurité ou générer de faux positifs. Ils ont également du mal avec les applications Web dynamiques et axées sur les données où les entrées et les interactions des utilisateurs varient.
  • Identifier les vulnérabilités à partir d'entrées non nettoyées
    Les outils SAST passent souvent à côté des vulnérabilités provenant d'entrées non nettoyées, comme les injections SQL ou XSS, car ils s'appuient sur une analyse de code statique. Ils ont du mal à détecter les problèmes découlant d'entrées externes mal validées et nettoyées.
  • Dépendance à des langages de programmation spécifiques
    Les outils SAST sont souvent spécifiques à une langue, excellent dans certaines langues mais peinent à fonctionner avec d'autres. Les organisations qui utilisent plusieurs langues peuvent avoir besoin de plusieurs outils SAST ou d'un seul qui prenne en charge l'ensemble de leur pile technologique, ce qui pose un défi logistique.

Conseils pour effectuer une analyse de code statique avec succès

L'une des meilleures choses que vous puissiez faire pour réussir est de comprendre les quatre principaux types d'analyse de code statique et les erreurs que ces tests sont conçus pour détecter.

Icône d'une ampoule

Des tests de performance

Les tests de performances identifient les erreurs qui résoudront les problèmes de performances globaux et aideront les développeurs à se tenir au courant des dernières meilleures pratiques.

Icône d'une ampoule

Analyse du code source lié à la sécurité

L'analyse du code source lié à la sécurité détecte des risques de sécurité tels qu'une cryptographie faible, des problèmes de configuration et des erreurs d'injection de commandes spécifiques au framework.

Icône d'une ampoule

Tests de sécurité et de fiabilité

Les tests de sécurité et de fiabilité permettent d'éviter les problèmes de fonctionnalité, car personne ne souhaite recevoir de messages d'urgence de service qui ne répondent pas en dehors des heures de bureau. Ce type d'analyse de code statique est particulièrement utile pour détecter les fuites de mémoire ou les problèmes de threading.

Icône d'une ampoule

Tests de style

Les tests de style encouragent les équipes à adopter des styles de codage uniformes pour faciliter l'utilisation, la compréhension et la correction des bogues. Les développeurs n'ont pas besoin de perdre du temps à identifier les violations de style. Les tests les détectent, ce qui permet de gagner du temps.

Bonnes pratiques pour effectuer une analyse de code statique avec succès

Optimisez l’efficacité de l’analyse de code statique pour améliorer la qualité du code, réduire les défauts et répondre efficacement aux exigences de conformité en suivant ces meilleures pratiques.

  1. Intégrez l’analyse statique du code dès le début du cycle de développement, idéalement dès le début du codage.
  2. Automatisez l'analyse statique en l'intégrant dans le pipeline d'intégration continue/déploiement continu (CI/CD).
  3. Encouragez les développeurs à résoudre les problèmes en temps réel et à faire de la qualité du code une partie de leur flux de travail quotidien.
  4. Concentrez-vous sur l’analyse incrémentielle en examinant uniquement les modifications de code plutôt qu’en analysant l’ensemble de la base de code à chaque fois.
  5. Adaptez les règles d'analyse statique aux normes de codage adaptées à votre projet ou à votre secteur d'activité, telles que MISRA pour l'automobile ou CERT pour les systèmes critiques pour la sécurité. Appliquez ces règles dans le cadre du processus de développement.
  6. Concentrez-vous d'abord sur la résolution des problèmes les plus critiques et les plus graves. Utilisez le tri pour classer les résultats par niveaux d'importance : vulnérabilités de sécurité, exactitude du code, performances et violations de style.
  7. Utilisez des tableaux de bord dynamiques et des outils de reporting pour suivre les indicateurs clés tels que le nombre de problèmes résolus, les niveaux de conformité et les tendances de qualité du code au fil du temps.
  8. Maintenez l’outil d’analyse statique à jour avec les dernières règles, les modèles de correction de bogues et les contrôles de conformité.
  9. Utilisez l’analyse statique en combinaison avec d’autres méthodes de test, telles que les tests unitaires et la couverture de code, pour créer un processus d’assurance qualité robuste.

Mise en route : comment s'effectue l'analyse statique ?

Les outils d'analyse statique peuvent être efficaces lorsqu'un projet est incomplet et partiellement codé. Cela signifie que ces outils peuvent être introduits et utilisés à n'importe quelle phase d'un projet de développement logiciel, ce qui constitue un avantage majeur en génie logiciel. Il est important de tenir compte de la maturité du produit en cours de développement, car cela peut avoir un impact sur la manière dont l'analyse statique peut être adoptée.

Le plus grand défi avec l'introduction de l'analyse statique est qu'une compilation d'une grande quantité de code peut produire un grand nombre d'avertissements.

C'est pourquoi votre objectif doit être de rendre votre équipe aussi productive que possible lors de l'intégration de l'analyse statique dans un projet. Cela évitera à votre équipe d'être submergée par les nombreux avertissements d'analyse statique qu'elle aura très probablement. La plupart des développeurs n'ont pas le luxe de réparer immédiatement le code existant ou hérité.

Au fur et à mesure que votre équipe deviendra plus compétente, vous pourrez intégrer des objectifs secondaires tels que l'amélioration de la qualité globale et l'application des normes de codage de l'organisation. Les développeurs peuvent analyser rapidement les résultats, gérer les faux positifs et corriger efficacement les bogues, car l'analyse statique devient une routine quotidienne. Ils pourront également faire face aux faux positifs.

Vous trouverez ci-dessous quelques approches pour démarrer avec l’analyse statique à différents stades de développement.

Icône d'une cible ou d'un œil de bœuf

Projet existant sur le marché

L'approche principale de l'adoption de l'analyse statique pour ces projets s'appelle la reconnaissance et l'ajournement. Comme il n'y a pas beaucoup de nouveau code en cours de développement, tous les bogues et vulnérabilités de sécurité découverts s'ajoutent à la dette technique existante.

Icône d'un cercle à moitié rempli de bleu et à moitié blanc pour indiquer un projet en cours, à moitié terminé.

Projet existant avec développement actuel

L'approche recommandée pour l'intégration est appelée approche linéaire. Cette approche signifie améliorer le nouveau code au fur et à mesure qu'il est développé tout en différant les avertissements moins critiques en tant que dette technique.

Cercle bleu avec deux cercles concentriques à l'intérieur finement bordés de blanc.

Nouveau projet

Les développeurs peuvent intégrer l'analyse statique dans leurs environnements de développement dès le début et de manière contrôlée pour s'assurer que le code est écrit selon un standard de haute qualité. L'approche de l'adoption, dans ce cas, porte à juste titre le nom de greenfield.

Exploration des applications concrètes de l'analyse statique du code

La clé pour réussir une analyse statique est un outil facile à utiliser et accessible qui fournit aux développeurs des informations utiles et exploitables en amont sans les submerger.

Image de bannière rectangulaire avec principalement du bleu foncé et des coins inclinés en bleu standard. Dans le coin supérieur droit se trouve un collage d'icônes de produits Parasoft pour DTP, C/C++test, CTP, Jtest, Selenic, Insure++, C/C++test CT, dotTEST, Virtualize et SOAtest.

Améliorez vos tests logiciels avec les solutions Parasoft.