PVS-Studio pour Visual Studio


Beaucoup de nos articles se concentrent sur n'importe quoi, mais pas sur l'outil PVS-Studio lui-même. Alors que nous faisons beaucoup pour rendre son utilisation pratique pour les développeurs. Néanmoins, nos efforts sont souvent cachés dans les coulisses. J'ai décidé de remédier à cette situation et de vous parler du plugin PVS-Studio pour Visual Studio. Si vous utilisez Visual Studio, cet article est pour vous.

Qu'est-ce que l'analyse de code statique et pourquoi nous en avons besoin


L'analyse de code statique est le processus de détection des erreurs et des défauts dans le code source des programmes. L'analyse statique peut être considérée comme un processus de révision automatisée du code. L' examen conjoint des codes est une merveilleuse méthodologie. Cependant, il présente un inconvénient important - un coût élevé. Il est nécessaire de rassembler plusieurs programmeurs pour revoir le code nouvellement écrit ou réécrit après les modifications qui y sont apportées.

D'une part, nous voulons revoir régulièrement le code. Par contre, c'est trop cher. La solution de compromis est des outils d'analyse statique. Ils analysent sérieusement le code source des programmes et donnent des recommandations aux programmeurs sur la révision de certains fragments de code. Bien sûr, un programme ne remplacera pas une revue de code à part entière, effectuée par une équipe de développeurs. Cependant, le rapport prix / avantages fait de l'analyse statique une pratique assez utile, appliquée par de nombreuses entreprises. Si le lecteur est intéressé par des chiffres précis, je vous suggère de lire l'article " PVS-Studio ROI ".

Il existe de nombreux analyseurs de code statique commerciaux et gratuits. Une grande liste d'analyseurs statiques est disponible sur Wikipedia: Liste d'outils pour l'analyse de code statique . La liste des langages pour lesquels il existe des analyseurs de code statiques est assez longue (C, C ++, C #, Java, Ada, Fortran, Perl, Ruby, ...). Inutile de dire que nous vous parlerons de l' analyseur PVS-Studio.

Le principal avantage de l'analyse de code statique est la possibilité de réduire considérablement le coût de l'élimination des défauts dans un programme. Plus une erreur est détectée tôt, moins il est coûteux de la corriger. Ainsi, selon le livre «Code Complete» de McConnell, la détection d'erreurs au stade du test de code coûte dix fois plus cher qu'au stade de la conception du code (codage):

Figure 1. Coût moyen de correction des défauts en fonction du moment de leur apparition et de leur détection dans le code (les données du tableau sont extraites du livre «Code Complete» de S. McConnell)

Figure 1. Coût moyen de correction des défauts en fonction du moment de leur apparition et de leur détection dans le code (les données du tableau sont extraites du livre «Code Complete» de S. McConnell)

Les outils d'analyse statique permettent de détecter un grand nombre d'erreurs, typiques de l'étape de conception du code, ce qui réduit considérablement le coût de l'ensemble du développement du projet. Par exemple, l'analyseur de code statique PVS-Studio peut être exécuté en arrière-plan juste après la compilation et en cas de détection d'erreurs potentielles, il en informera un programmeur. Plus d'informations sur ce mode seront données ci-dessous.

Analyseur de code statique PVS-Studio


PVS-Studio est un analyseur statique qui détecte les bogues et les vulnérabilités potentielles dans le code source des applications en C, C ++ (autres extensions prises en charge: C ++ / CLI et C ++ / CX ), C # et Java sur les plates-formes Windows, Linux et macOS. L'analyseur est superbement intégré dans les IDE Visual Studio 2010-2019 et IntelliJ IDEA. Dans cet article, nous allons examiner de plus près PVS-Studio, en vérifiant le code dans les langages C, C ++ et C #. Vous pouvez lire ici comment utiliser PVS-Studio pour vérifier le code Java dans IntelliJ IDEA.

Après l'installation de PVS-Studio et son intégration dans Visual Studio, les utilisateurs obtiennent un élément supplémentaire "PVS-Studio" dans le menu principal et la fenêtre pour travailler avec les messages d'erreur:

Figure 2. Les principaux éléments ajoutés par l'analyseur PVS-Studio lors de l'intégration dans Visual Studio.

Figure 2. Les principaux éléments ajoutés par l'analyseur PVS-Studio lors de l'intégration dans Visual Studio.

Paramètres initiaux


L'analyseur est prêt à fonctionner juste après l'installation. Dans la plupart des cas, vous n'avez rien à configurer pour la première exécution. La seule configuration dont vous pourriez avoir besoin au début est l'exclusion des bibliothèques tierces. Vous n'allez rien réparer dans les fichiers d'origine, par exemple, la bibliothèque jpeg, il n'est donc pas nécessaire de le vérifier. De plus, l'exclusion des dossiers inutiles accélérera l'analyse du projet. Les exceptions du répertoire sont définies ici: PVS-Studio> Options ...> Ne pas vérifier les fichiers> PathMasks (voir Figure 3).

Figure 3. Modification d'une liste de répertoires que l'analyseur ne vérifiera pas.

Figure 3. Modification d'une liste de répertoires que l'analyseur ne vérifiera pas.

Si le nom de fichier complet contient l'un des noms spécifiés, l'analyse ne sera pas effectuée pour ce fichier. Par défaut, les noms de certains répertoires sont déjà inclus dans la liste. Cependant, dans votre projet, le répertoire avec la bibliothèque ZLib peut être appelé non pas "zlib", mais, par exemple, "zip_lib". Par conséquent, cette liste doit être modifiée. Pour commencer l'édition, vous devez cliquer sur un bouton avec trois points.

Exemples de masques acceptables pour la liste PathMasks:

  • c: \ Libs \ - tous les fichiers de ce répertoire et de ses sous-répertoires seront exclus.
  • \ Libs \ ou * \ Libs \ * - tous les fichiers des répertoires dont le chemin contient le sous-répertoire "Libs" seront exclus. Si les symboles "*" ne sont pas spécifiés, ils seront quand même ajoutés automatiquement, donc les deux options sont égales.
  • Libs ou * Libs * - tous les fichiers dont le chemin contient le sous-répertoire, dont le nom est égal ou contient «Libs». Dans ce cas également, tous les fichiers contenant des Libs dans leur nom, par exemple c: \ project \ mylibs.cpp, seront exclus. Pour éviter toute confusion, nous vous recommandons de toujours utiliser des barres obliques.

En plus d'exclure des répertoires entiers, vous pouvez définir des masques pour exclure des fichiers individuels. Pour ce faire, il existe le paramètre FileNameMasks. Pour en savoir plus sur l'utilisation des listes d'exceptions, consultez la documentation: Paramètres: ne pas vérifier les fichiers .

Vérification du projet


Lorsque vous avez terminé les paramètres initiaux, vous pouvez commencer à vérifier le projet. PVS-Studio pour Visual Studio prend en charge la vérification des projets C ++ (.vcxproj) et C # (.csproj). Vous pouvez également essayer immédiatement de vérifier l'intégralité de la solution, qui contient des projets de ces types. Pour ce faire, sélectionnez l'élément de menu Extensions Extensions> PVS-Studio> Vérifier> Solution (voir figure 4).

Figure 4. Vérification d'une solution à l'aide de l'analyseur PVS-Studio.

Figure 4. Vérification d'une solution à l'aide de l'analyseur PVS-Studio.

En cas de difficultés avec la vérification, nous vous recommandons de vous référer à la section " PVS-Studio: Dépannage " de notre site Web. Ce ne sont pas des recommandations stupides dans l'esprit de "vérifier que la fiche est insérée dans la prise". La section décrit les situations typiques des demandes des utilisateurs et suggère des options.

Utilisation d'une liste de messages de diagnostic


Après la vérification, tous les messages de diagnostic seront affichés dans une fenêtre spéciale. La fenêtre a de nombreux composants de contrôle. Tous servent à afficher exactement les messages de diagnostic qui sont intéressants pour l'utilisateur. Cependant, au premier moment, la fenêtre peut sembler compliquée. Examinons tous les composants de contrôle (voir la figure 5).

Figure 5. Une fenêtre avec des messages de diagnostic.

Figure 5. Une fenêtre avec des messages de diagnostic.

  1. Eh bien, voici la fenêtre PVS-Studio.
  2. Menu supplémentaire. Vous permet d'accéder à des options telles que marquer les avertissements comme faux, masquer les messages, ajouter des fichiers aux exceptions (lire à ce sujet ci-dessous).
  3. Le bouton active les messages «quelque chose s'est mal passé». Par exemple, l'un des fichiers ne peut pas être prétraité.
  4. Accédez au message précédent / suivant. Cela ouvre le fichier correspondant et le curseur est placé sur la ligne avec une erreur potentielle. Vous pouvez également toujours sélectionner un diagnostic dans la liste en double-cliquant. Vous pouvez définir des raccourcis clavier pour les transitions vers le message précédent / suivant. Par défaut, c'est Alt + '[' et Alt + ']'.
  5. Boutons qui incluent des avertissements de différents niveaux. Les deux premiers niveaux de diagnostic sont désormais activés. Dans le même temps, la fenêtre affiche 90 avertissements du premier niveau, 6700 avertissements du deuxième niveau. Le niveau du message est affiché sur le côté gauche de la fenêtre sous forme de bande, correspondant à la couleur de la bande sur le bouton de niveau correspondant. Pourquoi y a-t-il autant de déclenchements? Pourquoi 6700 avertissements? Pour démontrer les capacités de l'interface, un ensemble de règles MISRA est activé, ce qui est inapproprié pour les applications normales :).
  6. Ensembles actifs de règles de diagnostic. Général - diagnostics généraux, Optimisation - micro-optimisation, diagnostics 64 bits - 64 bits, diagnostics des normes MISRA - MISRA C et MISRA C ++. Toutes sortes d'avertissements sont désormais affichés dans la fenêtre.
  7. L'indicateur indique le nombre d'avertissements, marqués comme faux (fausses alarmes). Vous pouvez activer / désactiver l'affichage des messages marqués dans les paramètres - PVS-Studio> Options ...> Paramètres spécifiques de l'analyseur> Afficher les fausses alarmes.
  8. Filtres rapides. Par exemple, vous pouvez réduire la liste aux seuls messages avec le code V501 et à ceux du projet XYZ.
  9. Certains diagnostics suggèrent de prêter attention non pas à une, mais à plusieurs lignes. Dans ce cas, des points apparaissent à côté du numéro de ligne. En cliquant dessus, vous pouvez voir la liste des lignes et en choisir une.

Le tableau avec les messages de diagnostic est divisé dans les colonnes suivantes:

  • Niveau Le niveau de certitude qui indique qu'une erreur, pas une odeur de code, a été trouvée. Le niveau 1 (rouge) montre les endroits les plus suspects. Le niveau 3 (jaune) est probablement une inexactitude non essentielle dans le code.
  • Etoile Il n'a pas de but précis. Les utilisateurs peuvent l'interpréter comme ils le souhaitent. Par exemple, un utilisateur peut marquer les avertissements les plus intéressants pour une analyse plus approfondie. L'analogie est la marque vedette des e-mails dans les clients de messagerie comme Thunderbird ou Outlook.
  • Identifiant Numéro de message unique. Cela peut être utile lorsqu'il s'agit d'une grande liste. Par exemple, vous pouvez accéder à un message avec un numéro spécifique (voir "Naviguer vers ID ..." dans le menu contextuel ).
  • Code Code de message. Si vous cliquez dessus, vous ouvrirez une page décrivant l'avertissement.
  • CWE. Permet d' identifier un avertissement par le code CWE (Common Weakness Enumeration). Lorsque vous cliquez sur le lien, vous pouvez voir une description de ce CWE dans le réseau.
  • Misra. Comme ci-dessus, mais pour la norme MISRA .
  • Message Le texte du message de diagnostic.
  • Projet Nom du projet (vous pouvez désactiver cette colonne à l'aide d'un menu contextuel).
  • Fichier Nom de fichier.
  • Ligne Numéro de ligne. Important! Notez que certaines lignes se terminent par des points. Exemple: "123 (...)". En cliquant sur ce numéro, vous obtiendrez une liste de toutes les lignes de code liées à ce message. En même temps, vous pouvez accéder à chacune des lignes de la liste.

Oui, c'était épuisant de tout lire. Cependant, je vous assure qu'ayant commencé à l'utiliser, vous vous habituerez rapidement à l'outil. Et vous cliquerez rarement sur quelque chose à configurer.

Menu contextuel


Ainsi, en double-cliquant sur le message, vous accédez à l'élément de code correspondant. En cliquant avec le bouton droit de la souris, le menu contextuel s'ouvre.

Le menu est assez simple, et je n'encombre pas l'article avec la description de chaque élément. Si quelque chose n'est pas clair, vous pouvez consulter la documentation.

Néanmoins, je voudrais m'attarder sur une caractéristique très utile. Vous souvenez-vous que dans les paramètres, vous pouvez ajouter des dossiers / fichiers à exclure? Le fait est que l'ajout de quelque chose est beaucoup plus simple qu'il n'y paraît!

Faites attention à l'option de menu "Ne pas vérifier les fichiers et masquer tous les messages de ...". Lorsque vous cliquez dessus, vous obtenez une liste de chemins que vous pouvez ajouter aux exceptions (voir figure 6).

Figure 6. Exclusion de fichiers de la vérification.

Figure 6. Exclusion de fichiers de la vérification.

Vous pouvez choisir un fichier séparé ou l'un des répertoires. L'image montre que le dossier "SDL2-2.0.9 \ src \ haptic \ windows" est choisi. Cela signifie que tous les fichiers de ce dossier et tous les sous-dossiers seront exclus de l'analyse. De plus, tous les messages liés à ces fichiers disparaîtront immédiatement de la liste. Très pratique. Vous n'avez pas besoin de redémarrer l'analyse pour supprimer tous les messages liés aux tests.

Mode d'analyse incrémentale


L'introduction à PVS-Studio sera incomplète si nous dissimulons l'une des fonctionnalités les plus importantes - l' analyse de code incrémentielle .

Plus une erreur est détectée tôt, moins il est coûteux de l'éliminer. La meilleure option consiste à mettre immédiatement en évidence les erreurs dans le texte du programme modifié. Cependant, c'est techniquement difficile et gourmand en ressources. C'est pourquoi PVS-Studio s'exécute en mode arrière-plan lorsque le code fixe est correctement compilé. Ce faisant, vous recherchez des bogues dans le code qui vient d'être modifié. L'icône dans la zone de notification système indique que l'analyse est en cours.

Lorsqu'une erreur est détectée, une fenêtre contextuelle apparaît, vous avertissant d'un danger (voir Figure 7).

Figure 7. Un message contextuel, signalant que des endroits suspects ont été trouvés dans les fichiers modifiés.

Figure 7. Un message contextuel, signalant que des endroits suspects ont été trouvés dans les fichiers modifiés.

Si vous cliquez sur l'icône, vous ouvrirez l'EDI avec le résultat de la vérification du projet (voir figure 2) et vous pourrez creuser dans des fragments de code suspects.

En fait, il est plus facile d'essayer de travailler dans ce mode que de le décrire. Vous écrivez le code comme précédemment. En cas de besoin, l'analyseur vous dérange. Essayez-le!

Nous utilisons ce mode tout le temps. Oui, nous faisons aussi parfois des erreurs de codage. La possibilité de les corriger immédiatement réduit considérablement le temps de détection du défaut et d'essayer de comprendre pourquoi le programme ne se comporte pas comme prévu. C'est très bouleversant de passer 15 à 20 minutes de débogage pour finalement trouver une faute de frappe dans l'index. Voici l'un des cas où PVS-Studio a trouvé une erreur dans PVS-Studio juste après son apparition dans le code:

if (in[0] == '\\' && in[1] == '.' && in[1] == '\\') { in += 2; continue; } 

Eh bien, le plus intéressant reste à venir. L'analyseur PVS-Studio peut parfois être beaucoup plus utile que cela. Voici l'un des commentaires sur notre analyseur: " L'expérience d'un utilisateur de travailler avec l'analyseur ". Le texte me fait réfléchir.

Permettez-moi de le résumer. L'analyse incrémentale est quelque chose que vous devez absolument essayer. Vous l'aimerez dès que vous trouverez quelques erreurs dans le nouveau code.

Fonctionnalités de PVS-Studio


Soyons brefs. Il est impossible de décrire succinctement tous les diagnostics disponibles dans PVS-Studio. Une liste complète des diagnostics et leur description détaillée se trouvent dans la documentation: Description des bogues détectés . Posons-nous sur la table dans laquelle les diagnostics sont regroupés par type. Certains diagnostics appartiennent à plusieurs groupes. Le fait est que la classification est assez formelle. Par exemple, une faute de frappe peut entraîner l'utilisation de mémoire non initialisée. Certaines erreurs, au contraire, ne pouvaient convenir à aucun des groupes, car elles étaient trop spécifiques. Néanmoins, ce tableau donne un aperçu de la fonctionnalité de l'analyseur de code statique.

Figure 8. Capacités de PVS-Studio.

Figure 8. Capacités de PVS-Studio.

Comme vous le voyez, l'analyseur est particulièrement utile dans des domaines tels que la recherche de bogues de copier-coller. Il est excellent pour détecter les problèmes liés à la sécurité du code.

Pour voir ces diagnostics en action, consultez la base des erreurs . Nous collectons toutes les erreurs que nous avons trouvées, en vérifiant divers projets open source avec PVS-Studio.

SAST


PVS-Studio est un outil de test de sécurité d'application statique. L'analyseur peut détecter des vulnérabilités potentielles dans le code du projet et afficher l'identificateur d'erreur approprié dans une certaine classification.

PVS-Studio prend en charge les classifications d'erreur suivantes:

  1. CWE
  2. SEI CERT
  3. Misra

Vous pouvez activer l'affichage des codes CWE par le menu contextuel dans la fenêtre de l'analyseur par le chemin Afficher les colonnes> CWE

Figure 9. Menu contextuel et l'exemple de sortie CWE.

Figure 9. Menu contextuel et l'exemple de sortie CWE.

Ou dans le menu principal (Extensions> PVS-Studio> Afficher les codes CWE dans la fenêtre de sortie)

Figure 10. Menu de l'extension.


Figure 10. Menu de l'extension.

Les diagnostics MISRA sont activés séparément dans les paramètres:

Figure 11. Liste des erreurs détectées.


Figure 11. Liste des erreurs détectées.

Vous pouvez en savoir plus sur ces classifications ici .

Vérification des projets à partir de la ligne de commande


PVS-Studio_Cmd.exe - un utilitaire pour vérifier les projets Visual Studio C ++ / C # (.vcxproj / .csproj) et les solutions .sln à partir de la ligne de commande. Il peut être utile d'automatiser l'analyse. Le programme se trouve dans le répertoire où l'installation a été effectuée - par défaut, il est 'C: \ Program Files (x86) \ PVS-Studio'.

Le programme a de nombreux paramètres , mais d'abord nous n'en avons besoin que de 3:

  • --target: fichier de projet ou de solution à vérifier.
  • --output: fichier plog où le rapport doit être écrit.
  • --progress: affiche la progression d'un chèque.

Voici à quoi ressemblera la course:

Figure 12. Sortie du programme PVS-Studio_Cmd.exe.


Figure 12. Sortie du programme PVS-Studio_Cmd.exe.

Après l'exécution, nous obtiendrons un fichier plog avec un rapport, un chemin vers lequel nous avons spécifié dans les options d'exécution. Vous pouvez convertir ce rapport dans d'autres formats à l'aide de l'utilitaire PlogConverter.exe. Pour afficher le rapport dans IDE, double-cliquez sur un fichier plog dans le Finder.

Vous pouvez également ouvrir le fichier de rapport dans le menu d'extension par le chemin Extensions> PVS-Studio> Ouvrir / Enregistrer> Ouvrir le rapport d'analyse ...

Image 4


Des informations détaillées sur l'utilitaire et ses paramètres se trouvent dans la documentation .

Suppression des faux positifs


Certains messages émis par l'analyseur seront inévitablement faux. Nous ne pouvons rien y faire. Un analyseur statique est juste un programme qui n'a pas d'intelligence artificielle et ne peut pas déterminer s'il s'agit d'un vrai bug ou non.

Pour lutter contre les faux positifs, l'analyseur propose un ensemble de mécanismes différents. Ils sont détaillés dans les sections suivantes de la documentation:

  • Réglage fin .
  • Une méthode approximative qui vous permet uniquement de travailler avec des avertissements liés au code nouveau ou modifié.

Conclusion


Bien sûr, nous ne vous avons pas tout dit sur l'outil. Si je vous dis tout, l'article se transformera en documentation. L'objectif était de montrer à quel point il est facile de travailler avec l'outil dans l'environnement Visual Studio. Vous pouvez lire sur d'autres environnements et modes de travail dans la documentation et d'autres articles sur notre site Web . Soit dit en passant, il y a beaucoup de choses intéressantes pour les programmeurs. Venez traîner.

Il convient de noter que PVS-Studio ne fonctionne pas uniquement dans l'environnement Microsoft. Nous prenons également en charge le langage Java, nous pouvons travailler sur Linux et macOS, intégrer dans CMake et bien plus encore. Vous pouvez en savoir plus dans la documentation .

Je vous souhaite un mauvais code sans mémoire et j'espère que vous apprécierez PVS-Studio. S'il y a des questions, nous vous aiderons et vous conseillerons toujours. Écrivez-nous .

Liens supplémentaires:


  1. Révision du code .
  2. Analyse de code statique .
  3. Outils d'analyse de code statique .
  4. SAST .
  5. Technologies utilisées dans l'analyseur PVS-Studio .
  6. Téléchargez et essayez PVS-Studio.
  7. Prise en charge de Visual Studio 2019 .
  8. Discutez du prix de l'analyseur PVS-Studio pour votre équipe et comment l'acheter: achetez PVS-Studio .
  9. Exemple d'utilisation d'un analyseur statique .
  10. Réponses aux questions souvent posées lors des conférences.
  11. Comment exécuter PVS-Studio Java
  12. Comment exécuter PVS-Studio sur Linux et macOS

Source: https://habr.com/ru/post/fr458068/


All Articles