Rejoignez-nous le 30 avril : dévoilement de Parasoft C/C++test CT pour l'excellence en matière de tests continus et de conformité | En savoir plus

Analyse statique et analyse dynamique

Portrait de Ricardo Camacho, directeur de la conformité de la sûreté et de la sécurité
4 avril 2023
4 min lire

L'analyse statique et l'analyse dynamique agissent comme une approche à deux volets pour améliorer le processus de développement en termes de fiabilité, de détection de bogues, d'efficacité et de sécurité. Mais en quoi diffèrent-ils et pourquoi chacun est-il important ?

Trouver et corriger les bogues tôt dans le développement est payant à bien des égards. Il peut réduire le temps de développement, réduire les coûts et prévenir les violations de données ou d'autres vulnérabilités de sécurité. En particulier avec DevOps, l'intégration précoce et continue des tests dans le SDLC peut être extrêmement utile.

C'est là qu'interviennent les tests d'analyse dynamique et statique. Ils servent chacun des objectifs différents au sein du SDLC tout en offrant un retour sur investissement unique et presque immédiat pour toute équipe de développement.

Analyse statique ou dynamique : comprendre les différences

L'analyse de code statique est un terme général utilisé pour décrire plusieurs types d'analyses. Cependant, tous ceux-ci présentent un trait commun : ils ne nécessitent pas l'exécution de code pour fonctionner.

En revanche, l'analyse dynamique nécessite l'exécution de code. Bien qu'il existe d'autres différences, cette caractéristique est ce qui sépare radicalement les deux types d'approches de test.

Cela signifie également que chaque approche offre des avantages différents à différentes étapes du processus de développement. Afin de comprendre ces différences, examinons ce qui suit.

Qu'est-ce que l'analyse statique ?

Les tests d'analyse de code statique comprennent différents types, les deux principaux étant basés sur des modèles et sur des flux.

L'analyse statique basée sur des modèles recherche les modèles de code qui violent 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 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.

L'analyse statique basée sur les flux consiste à rechercher et à analyser les différents chemins pouvant être empruntés dans le code. Cela peut se produire 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). Ces processus peuvent exposer des problèmes qui conduisent à des défauts critiques tels que :

  • Corruptions de mémoire (écrasements de tampon)
  • Violations d'accès à la mémoire
  • Déréférences de pointeur nul
  • Conditions de course
  • Les impasses

Il peut également détecter les problèmes de sécurité en indiquant les chemins qui contournent le code critique pour la sécurité, tel que le code d'authentification ou de chiffrement.

De plus, l'analyse des métriques 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 de la difficulté potentielle à prévenir et à détecter les 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

Qu'est-ce que l'analyse dynamique ?

Parfois appelé détection des erreurs d'exécution, l'analyse dynamique est l'endroit où les distinctions entre les types de tests commencent à s'estomper. Pour les systèmes embarqués, l'analyse dynamique examine le fonctionnement interne et la structure d'une application plutôt que le comportement externe. Par conséquent, l'exécution du code est effectuée au moyen de tests en boîte blanche.

Les tests d'analyse dynamique détectent et signalent les défaillances internes dès qu'elles se produisent. Cela permet au testeur de corréler plus facilement ces échecs avec les actions de test pour les rapports d'incidents.

Développer le comportement externe de l'application en mettant l'accent sur la sécurité, test dynamique de sécurité des applications (DAST) est un test analytique avec l'intention d'examiner l'élément de test plutôt que de l'exercer. Pourtant, le code testé doit être exécuté.

DAST étend également la capacité de tests empiriques à tous les niveaux, de l'unité à l'acceptation. Pour ce faire, il permet de détecter les défaillances internes qui indiquent des défaillances externes autrement non observables qui se produisent ou se produiront après l'arrêt des tests.

Avantages et inconvénients de l'analyse statique

Comme pour toutes les voies vers la perfection DevSecOps, il y a des avantages et des inconvénients avec les tests d'analyse statique.

AVANTAGES

  • Évalue le code source sans l'exécuter.
  • Analyse le code dans son intégralité pour détecter les vulnérabilités et les bogues.
  • Suit des règles personnalisées et définies.
  • Améliore la responsabilité des développeurs.
  • Capable d'automatisation.
  • Met en évidence les bogues tôt et réduit le temps nécessaire pour les corriger.
  • Réduit les coûts du projet.

INCONVENIENTS

  • Peut renvoyer des faux positifs et des faux négatifs susceptibles de distraire les développeurs.
  • Peut prendre beaucoup de temps pour fonctionner manuellement.
  • Impossible de localiser les bogues ou les vulnérabilités qui surviennent dans les environnements d'exécution.
  • Décider quelles normes de codage de l'industrie appliquer peut être source de confusion.
  • Il peut être difficile de déterminer s'il est approprié de s'écarter d'une violation de règle.

Alors que la liste des inconvénients peut sembler intimidante, les trous de l'analyse statique peuvent être corrigés avec deux choses.

  1. Automatisation de l'analyse statique.
  2. Utiliser des techniques dynamiques.

Pourquoi l'analyse de code statique est si précieuse

Tous ces types d'analyse statique ont une chose en commun : ils impliquent de scanner ou de faire examiner par un programme le code source.

Il s'agit d'un moyen rapide et facile d'exposer les défauts critiques. Il atteint une couverture à 100 % avec des résultats objectifs à 100 %.

Le faire en continu est tout simplement logique car il fournit ces résultats exploitables, réduit les coûts et le temps de développement, augmente la couverture du code, et plus encore.

Au-delà de la portée de l'analyse statique

Balayage statique fournit des informations pour aider à prédire ce qui peut se passer lorsque le code est intégré et exécuté. Il détecte les défauts en fonction de ce que l'outil considère comme un défaut. En règle générale, cela peut être personnalisé en fonction de vos préférences et de vos priorités.

Cependant, il ne peut pas vous dire quand le système testé ou en production fournit des résultats inattendus, inappropriés ou inexacts.

Le défi ici est d'observer un comportement inattendu. Par exemple, une transaction peut sembler se dérouler correctement pour un utilisateur, un testeur ou un outil d'exécution de test alors qu'en fait, un composant a levé une exception non gérée et n'a pas réussi à la traiter correctement. Un système de contrôle peut répondre rapidement et correctement lors d'un test pendant trois jours, mais peut perdre de la mémoire et se diriger vers un crash le quatrième jour de production.

La correction de tous les défauts détectés à l'aide d'un outil d'analyse de code statique ne donne aucune garantie contre d'autres défauts qui entraîneront des défaillances comme celles-ci. C'est pourquoi il est important d'appliquer la définition de l'échec au comportement interne aussi bien qu'externe, même après l'intégration. La défaillance interne doit être détectée avant qu'elle ne se manifeste à l'extérieur.

Meilleures pratiques pour combiner l'analyse statique et dynamique

La combinaison d'analyses statiques et dynamiques est la meilleure option pour obtenir des résultats exploitables, réduire les occurrences de bogues, augmenter la détection de bogues et créer un code plus sécurisé dans l'ensemble. L'un n'est ni meilleur ni pire que l'autre. Ils fonctionnent en tandem comme tous les engrenages d'une montre suisse parfaitement conçue.

Pour utiliser l'analyse statique et dynamique ensemble, suivez ces bonnes pratiques.

  • Utilisez-les à la fois avec des solutions manuelles et automatisées qui répondent à vos besoins.
  • Rendre le code lisible et réutilisable pour d'autres développeurs.
  • Utilisez la bonne approche au bon moment dans votre SDLC : statique dès le début et dynamique dans les environnements d'exécution.
  • Utilisez les deux approches pour une vue d'ensemble plus globale de votre projet.
  • Évitez le piège de ne compter que sur une seule méthode de test, un petit oubli qui peut entraîner de gros problèmes.

La combinaison d'analyses statiques et dynamiques permet aux équipes de localiser une gamme et un nombre plus larges de vecteurs de menaces exploitables.

Obtenez des informations précieuses pour choisir une solution d'analyse statique qui convient le mieux à votre équipe.

Article connexe + ressources