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 >>

Prise en main de l'extension de code Visual Studio pour l'analyse statique C / C ++

Par Miroslaw Zielinski

2 juin 2020

6  min lire

Dans cet article de blog, je vais partager quelques conseils avec vous sur la configuration et l'utilisation de notre toute nouvelle extension d'analyse statique de test C / C ++ pour l'éditeur Visual Studio Code.

La popularité de l'éditeur Visual Studio Code (VS Code) augmente à un rythme rapide. Dans le dernier Enquête annuelle sur les développeurs Stack Overflow, VS Code a dominé le Environnements et outils de développement catégorie.

Il est rapide, simple, personnalisable, extensible et fonctionne sur les trois principales plates-formes de développement: Windows, Linux et Mac. Sa popularité ne se limite pas aux équipes développant avec JavaScript ou TypeScript. Nous le voyons souvent utilisé pour développer des logiciels C / C ++ critiques pour la sécurité.

VS Code est pris en charge par un vaste écosystème d'extensions disponibles sur le marché. Cependant, il existe un nombre limité d'extensions pour l'analyse statique C / C ++.

Jusqu'à ce que le Version 2020.1 du test Parasoft C / C ++ en avril, rien ne pouvait vous aider à vous conformer aux normes de codage MISRA, CERT et AUTOSAR C ++ sans avoir à quitter l'éditeur pour vérifier les résultats. Je veux dire que le support complet des normes, Clang-Tidy, est cool mais il ne couvre qu'une fraction de ces normes.

Nous avons décidé de combler cette lacune et de fournir une extension à cet excellent éditeur pour vous aider à vérifier le code que vous venez d'écrire par rapport à votre norme de codage préférée, à examiner les résultats et à les corriger ou les supprimer - le tout dans le code VS

Dans cet article, je me concentre sur l'analyse statique pour C / C ++, mais nous prenons également en charge C # avec l'extension d'analyse statique pour Parasoft dotTEST.

Comment démarrer avec le test C / C ++ pour VS Code

Le moyen le plus simple de démarrer avec l'extension d'analyse statique Parasoft pour l'éditeur Visual Studio Code consiste à utiliser le Marché Microsoft.

Démarrez VS Code et accédez aux extensions (Ctrl + Maj + X). Dans le champ de recherche, tapez «test C ++» et installez l'extension.

Après l'installation, l'extension vous accueillera avec le message suivant:

Le message informe que pour exécuter l'analyse statique avec l'extension VS Code, vous devez télécharger le standard de test C / C ++, qui est le moteur d'analyse statique de ligne de commande utilisé par l'extension Visual Studio Code de test C / C ++.

Après avoir téléchargé la distribution standard de test C / C ++ simplement décompressez-le dans n'importe quel répertoire vous aimez et installez la licence d'essai (ou complète). Votre licence doit contenir la fonction de ligne de commande. Vous pouvez installer la licence en éditant le fichier cpptestcli.properties situé dans le répertoire principal de la distribution ou placer le fichier cpptestcli.properties dans votre répertoire personnel et y placer les informations de licence.

Pour notre expérience ici, nous allons utiliser l'exemple de projet Timer livré avec le test C / C ++. Dans le code VS, passez à l'Explorateur et utilisez «Ajouter un dossier à l'espace de travail…» pour ajouter le / examples / Timer dossier dans votre espace de travail.

Pour effectuer la configuration simple de l'extension, cliquez sur le démarrage rapide du test C / C ++ dans la barre d'état:

Vous verrez ces options de configuration:

Définissez-les comme suit:

  • Sélectionnez l'installation de test C / C ++: Pointez sur l'endroit où vous avez décompressé la norme de test C / C ++.
  • Sélectionnez la configuration du compilateur: Sélectionnez le compilateur le plus proche de ce que vous utilisez pour votre projet, par exemple «GNU GCC 9.x (x86_64)» si vous utilisez GCC 9.2.
  • Sélectionnez la configuration de test: Définit les vérificateurs d'analyse statique qui seront utilisés pour analyser votre projet. Restons avec la valeur par défaut.

Pour vos projets réels, vous devrez peut-être configurer un paramètre supplémentaire pour commencer à utiliser l'analyse statique. Nous y reviendrons plus tard. Pour l'instant, avec ces paramètres définis, sélectionnez le dossier Timer dans l'Explorateur.

Depuis le menu contextuel, sélectionnez "Test C / C ++: analyser le (s) fichier (s) sélectionné (s)…". Le panneau OUTPUT commencera à afficher les informations sur les étapes suivantes de l'analyse statique.

Une fois l'analyse terminée, le panneau PROBLÈMES affichera tous les résultats rapportés par l'analyse statique. Cela devrait ressembler à ci-dessous:

Vous pouvez analyser les résultats en cliquant sur les lignes du panneau PROBLEMES. Lorsque vous sélectionnez une constatation, l'extension de test C / C ++ vous amène au code source où vous pouvez voir pourquoi le problème est signalé.

Si la raison n'est pas claire, cliquez avec le bouton droit de la souris sur la constatation dans le panneau PROBLÈMES et un choisissez "Afficher la documentation pour ". Il vous montrera la description détaillée.

Si vous préférez ignorer la découverte, cliquez avec le bouton droit de la souris et choisissez "Supprimer la violation de ". Cette opération ajoutera un commentaire spécial à votre fichier source, ce qui empêchera l'analyseur de signaler cette découverte à l'avenir.

Ou tu peux "Supprimer la violation de " de la vue et ne vous inquiétez pas à ce sujet dans cette course. Ces options de menu sont présentées dans l'image ci-dessus.

Définition des lignes de commande de compilation pour l'analyse statique

J'ai mentionné que pour vos projets réels, vous devrez peut-être configurer une option supplémentaire pour commencer à travailler avec l'analyse statique. Il s'agit de la construire des informations, plus précisément, des lignes de commande de compilation.

Le moteur d'analyse statique doit connaître les lignes de commande de compilation pour chaque fichier à analyser. Selon la façon dont votre projet est construit, vous pouvez appliquer différentes stratégies pour fournir ces informations.

Voyons comment cela s'est passé pour notre exemple Timer.

Basculez vers le panneau OUTPUT, qui devrait toujours contenir la sortie de notre analyse.

Faites défiler tout le chemin vers le haut. Dans la deuxième ligne de la sortie, vous devriez voir la ligne de commande pour le standard de test C / C ++ qui a été exécuté par l'extension. Il commencera par «cpptestcli». La partie intéressante se trouve à la fin de cette ligne de commande.

Dans ce cas, le moteur d'analyse statique de test C / C ++ a été invité à «tracer» la construction pour obtenir les informations de lignes de commande de compilation dont il a besoin. Vous pouvez également appliquer cette stratégie à d'autres systèmes de construction. Cela fonctionne bien:

Cpptestcli exécute la commande de construction spécifiée après l'option -trace. Les informations de construction sont automatiquement scannées et enregistrées dans le fichier cpptest.bdf, qui est maintenant visible dans le dossier «Timer» et utilisé comme entrée pour l'analyse statique.

Tout va bien, mais que se passe-t-il si je souhaite réexécuter l'analyse statique? Eh bien, avec les paramètres par défaut, le test C / C ++ réexécutera votre build. Pas une bonne option pour les vrais projets.

Voici comment vous pouvez le changer.

  • Ouvrez les paramètres de l'extension.
  • Appuyez sur Ctr + Maj + P.
  • Tapez «Test C / C ++: Démarrage rapide» et sélectionnez «Ouvrir les paramètres…». (Ou utilisez le démarrage rapide du test C / C ++ dans la barre d'état.)

Vous verrez les paramètres d'extension comme indiqué ici:

La configuration des informations de construction fait partie du paramètre de modèle de ligne de commande. Dans le panneau des paramètres, sélectionnez Minuterie (à côté de l'utilisateur et de l'espace de travail) pour modifier les paramètres uniquement pour le dossier Timer.

Accédez au modèle de ligne de commande, allez à la fin et personnalisez le modèle pour remplacer «-trace make clean all» par «-input $ {workspaceFolder} /cpptest.bdf» comme indiqué ci-dessous:

Avec ce paramètre, chaque fois que vous exécutez l'analyse statique, le test C / C ++ ne réexécutera pas votre processus de génération, mais chargera simplement le contenu du cpptest.bdf qui a été généré lors de la première génération et effectuera l'analyse beaucoup plus rapidement. Vous pouvez en savoir plus sur les fichiers de données de construction ici.

Réglage pour CMake

Pour ceux d'entre vous qui utilisent CMake pour vos projets, il existe une autre option disponible pour simplifier le processus de configuration. Le test C / C ++ peut prendre le fichier compile_commands.json qui peut être généré automatiquement par CMake comme entrée pour l'analyse.

Configurez le compile_commands.json génération de fichiers pour notre exemple Timer dans cet article.

Quand tu as fini, visitez le panneau des paramètres une fois de plus (Ctr + Shift + P, tapez «Test C / C ++: Démarrage rapide» et sélectionnez «Ouvrir les paramètres…» ou utilisez le démarrage rapide «Test C / C ++» dans la barre d'état).

Accédez au modèle de ligne de commande et modifiez-le comme indiqué ci-dessous:

C'est tout! Vous pouvez utiliser le fichier généré automatiquement par la build CMake et simplifier votre configuration.

Il y a quelques autres options et commandes intéressantes disponibles dans l'extension, que je vous invite à explorer. Par exemple, vous pouvez importer les résultats de l'analyse statique à partir du fichier généré dans le cadre de votre pipeline CI / CD et les examiner localement.

J'espère que cet article vous aidera au début de votre voyage avec l'extension de test C / C ++ pour l'éditeur Visual Studio Code.

« 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.

Par Miroslaw Zielinski

Chef de produit pour les solutions de test embarquées de Parasoft, les spécialités de Miroslaw comprennent le C / C ++, les RTOS, l'analyse de code statique, les tests unitaires, la gestion de la qualité des logiciels pour les applications critiques pour la sécurité et la conformité des logiciels aux normes de sécurité.

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