Découvrez comment intégrer facilement l'analyse statique, les tests unitaires et d'autres méthodes de test de logiciels C et C++ dans votre pipeline CI/CD. Inscrivez-vous pour la démo >>

Analyse statique et analyse dynamique

Par Parasoft

1 mars 2012

3  min lire

Par Boguslaw Czwartkowski, responsable des services professionnels de Parasoft

L'analyse de code statique est un terme général utilisé pour décrire plusieurs types d'analyses :

  • Analyse de code statique (alias analyse statique basée sur des modèles) : ce type d'analyse statique recherche des 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 é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: Ce type d'analyse statique consiste à trouver et à analyser les différents chemins qui peuvent être empruntés dans le code, à la fois par « contrôle » (c'est-à-dire l'ordre dans lequel les lignes peuvent être exécutées) et par les données (c'est-à-dire 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 des métriques: Cela 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 défauts futurs lorsque le code est maintenu. Cela se fait en trouvant la complexité et la lourdeur telles que des composants trop volumineux, une imbrication excessive des boucles, des séries de décisions trop longues et des dépendances intercomposantes alambiquées.

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

La chose que tous ces types d'analyses statiques ont en commun est qu'elles impliquent l'analyse (c'est-à-dire l'examen d'un programme) du code source. Il s'agit d'un moyen très rapide et facile d'exposer les défauts critiques. Il atteint une couverture à 100 % et ses résultats sont objectifs à 100 %. Il est presque impossible d'argumenter contre le fait de le faire continuellement.

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 (généralement, cela peut être personnalisé en fonction de vos préférences et priorités). Cependant, il ne peut pas vous dire quand le système testé ou en production ne fait PAS ce qu'il est censé faire - ou fait quelque chose que personne ne s'attendait à ce qu'il fasse.

Le défi ici est d'observer le comportement inattendu. Par exemple, une transaction peut sembler se dérouler correctement pour un utilisateur (ou un testeur ou un outil d'exécution de test) alors qu'un composant a en fait levé une exception non gérée et n'a pas réussi à la traiter correctement. Un système de contrôle peut réagir rapidement et correctement sous test pendant 3 jours, mais avoir des fuites de mémoire et se diriger vers un crash lors de son 4e 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 assurance 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 et 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.

Analyse dynamique - Détection des erreurs d'exécution

Chez Parasoft, nous appelons cette activité détection des erreurs d'exécution, une forme d'analyse dynamique. Ici, les distinctions entre les types de tests commencent à s'estomper. Test de sécurité d'application dynamique est un test analytique en ce sens que l'intention est d'examiner l'élément de test plutôt que de l'exercer. Il s'agit de tests en boîte blanche dans la mesure où nous examinons le comportement interne plutôt qu'externe. Pourtant, le code testé doit être exécuté, et cela se fait en exécutant les mêmes tests de boîte noire que ceux utilisés pour les tests dynamiques.

Détection des erreurs d'exécution détecte et signale une défaillance interne à l'instant où elle se produit, il est donc facile pour le testeur de la corréler précisément avec les actions de test pour les rapports d'incident. Comme une bonne analyse statique, il fournit des détails techniques complets pour permettre au développeur d'isoler et de corriger le défaut sous-jacent. La détection des erreurs d'exécution étend la capacité des tests empiriques à tous les niveaux, de l'unité à l'acceptation, en permettant de détecter une défaillance interne qui indique qu'une défaillance externe autrement non observable s'est produite ou se produira après l'arrêt des tests.

***

Crédit photo: Dexxus

Par Parasoft

Les outils de test de logiciels automatisés de pointe de Parasoft prennent en charge l'ensemble du processus de développement logiciel, depuis le moment où le développeur écrit la première ligne de code jusqu'aux tests unitaires et fonctionnels, jusqu'aux tests de performance et de sécurité, en exploitant des environnements de test simulés en cours de route.

Recevez les dernières nouvelles et ressources sur les tests de logiciels dans votre boîte de réception.