Présentation des fonctionnalités de PVS-Studio version 7.07

Image 30

Le but de cet article est une démonstration générale des capacités de l'analyseur statique PVS-Studio. La façon la plus simple et la plus visuelle de le faire est de montrer le fonctionnement de l'outil avec des exemples. La vérification du projet sera affichée à l'aide du plug-in pour Visual Studio, en lançant l'analyseur dans le système d'exploitation Linux, en important les résultats de l'analyse dans SonarQube.

informations générales


PVS-Studio est un analyseur de code statique écrit en C, C ++, C # et Java. PVS-Studio effectue un large éventail de vérifications de code, mais est le plus puissant pour trouver les fautes de frappe et les conséquences d'un copier-coller échoué (exemples: un , deux , trois , quatre ). L'analyse statique est un bon complément à l'une des méthodes les plus anciennes et les plus fiables pour détecter les défauts - la révision du code. Certaines erreurs sont difficiles à trouver lors d'une révision conjointe du code (par exemple, les mêmes fautes de frappe). Par exemple:

int trans_rest(transcoder_settings *trans)
{
  ....
  for(i=0; i<16; i++);
  {
    trans->eq.eq.preamp[i]   = 0.0;
    for(j=0; j<32; j++)
    {
      trans->eq.eq.boost[i][j] = 0.0;
    }
  }
}

Pour ceux qui ne l'ont pas remarqué, faites attention au point-virgule après le premier pour . Ou:

private class ObjectArrayComparer : IEqualityComparer<object[]>
{
  public bool Equals(object[] x, object[] y)
  {
    ....
    for (int i = 0; i < x.Length; i++)
    {
      if (!object.Equals(x[0], y[0])) 
      {
        return false;
      }
    }
    return true;
  }
  ....
}

Les mêmes éléments sont toujours comparés. Afin de ne pas perdre votre temps à rechercher de telles erreurs, il vaut la peine d'introduire un analyseur statique. Vous pouvez télécharger et essayer PVS-Studio sur ce lien.

Plugin pour Visual Studio


PVS-Studio dispose d'un plugin pour Visual Studio 2010-2019. Avant de procéder directement à la vérification, je vais démontrer les capacités du plugin. Passons en revue certains points qui peuvent soulever des questions dans l'esprit de "de quoi s'agit-il?"

Image 13


J'attirerai l'attention sur l'élément Supprimer les messages, qui ouvre une fenêtre pour travailler avec les avertissements de l'analyseur supprimés et maintenant je vais expliquer ce qu'est cet élément. Le fait est que PVS-Studio peut supprimer les avertissements, ce qui facilite l'utilisation de l'analyseur même dans un grand projet. Cela vous permet d'incorporer rapidement et facilement un analyseur statique dans le processus de développement.

Si votre projet est petit, la mise en œuvre de l'analyseur sera assez simple. Cependant, si le projet est «avec l'histoire», alors vous avez probablement des doutes: qui sera impliqué dans le traitement et le filtrage des résultats, combien de temps vous devrez y consacrer, etc. Je vais essayer de les dissiper.

L'utilisation idéale de l'analyseur dans ce cas est la suivante. Vous l'exécutez sur votre projet et voyez un tas de messages d'analyseur. Ensuite, à l'aide du mécanisme de suppression d'avertissement, demandez à PVS-Studio de ne pas afficher ces messages. Parce que Étant donné que votre projet se développe depuis longtemps, le rapport de l'analyseur contiendra certainement très peu d'avertissements liés à certains défauts critiques. En outre, pendant le processus de développement, vous et vos collègues ne voyez que les erreurs liées au code modifié ou nouveau. Ces avertissements qui ont été supprimés sont maintenant votre devoir technique, auquel vous pouvez revenir progressivement. Le mécanisme de suppression d'avertissement est décrit plus en détail ici .

Image 14


Ensuite, allez à l'élément «Afficher les codes CWE dans la fenêtre de sortie». PVS-Studio est un outil pour les tests statiques de sécurité des applications (Static Application Security Testing, SAST). Les alertes PVS-Studio peuvent être classées selon le Common Weakness Enumeration (CWE). Pour en savoir plus sur la classification des alertes PVS-Studio selon CWE, pourquoi CWE est nécessaire, de quoi il s'agit et ainsi de suite, je vous suggère de lire les liens suivants:


Passons à l'onglet «Options».

Image 6

Dans la section "Erreurs détectables (C, C ++)", nous pouvons contrôler l'affichage des types de messages de l'analyseur. Les messages de diagnostic qui, pour une raison quelconque, ne sont pas pertinents pour ce projet peuvent être masqués ou désactivés. Par exemple, il est peu probable que les diagnostics MISRA intéressent quelqu'un d'autre que les développeurs intégrés. Par conséquent, ils sont désactivés par défaut . L'utilisateur qui a d'abord décidé d'utiliser l'analyseur, le nombre d'avertissements MISRA peut effrayer et entrer dans une stupeur. Et la partie des utilisateurs qui ont délibérément lancé l'analyseur pour vérifier la conformité de leur projet avec les normes MISRA peut simplement les activer dans les paramètres.

Image 10

Ici, vous pouvez saisir des chemins / masques pour exclure certains fichiers ou dossiers de l'analyse. Vous pouvez choisir soit un masque par le chemin (masque de chemin), soit un masque par le nom de fichier (masque FileName). Ils sont nécessaires si vous souhaitez exclure de l'analyse les bibliothèques tierces, les fichiers générés automatiquement, etc. Après avoir défini les masques d'exclusion, les messages des fichiers qui leur correspondent disparaîtront de la fenêtre de sortie de PVS-Studio et ne seront pas inclus dans la prochaine analyse. Ainsi, l'exclusion de fichiers et de répertoires via des masques peut réduire considérablement le temps d'analyse global de l'ensemble du projet.

Plus de détails ici .

Image 8

Vous pouvez également filtrer la sortie de l'analyseur en fonction du texte qu'il contient. Par exemple, dans votre rapport d'analyseur, il y a des avertissements qui mentionnent la fonction my_super_function dans le texte , mais vous êtes sûr que tous ces avertissements sont faux. Ensuite, vous pouvez ajouter le mot my_super_function dans ce champ. Tous les avertissements qui contenaient ce mot seront filtrés. Eh bien, juste au cas où, je vais laisser un lien ici vers la section correspondante de la documentation .

Remarque. Dans PVS-Studio, il existe d'autres façons de marquer les faux avertissements dans le code ou les macros. Ils sont décrits dans la documentation de la section Suppression des fausses alertes .

Une fois que nous avons terminé avec une vue d'ensemble des paramètres, passons à la vérification du projet. Comme vous l'avez peut-être remarqué, l'article avait plusieurs paramètres liés aux projets C ++, mais il n'y avait aucune spécification pour C # et Java. Il y a simplement plus de paramètres pour C ++ que pour C #, nous avons donc décidé de nous attarder sur ces brèves critiques. Mais pour changer d'histoire, vérifions à l'aide du plug-in pour Visual Studio non pas un C ++, mais un projet C # et voyons à quoi ressemble le rapport de l'analyseur.

Naturellement, après la première vérification du projet, vous devrez revenir aux paramètres afin de réduire le pourcentage de faux positifs. Les faux positifs sont inévitables, mais leur pourcentage peut être réduit en définissant une valeur acceptable. Voir l'article: " Caractéristiques de l'analyseur PVS-Studio utilisant l'exemple EFL Core Libraries, 10-15% de faux positifs ."

Image 1

Sélectionnez l'élément «Analyser la solution avec PVS-Studio».

Image 2

Une fenêtre avec une barre de progression apparaîtra.

Image 3

Et puis nous pouvons voir le rapport de l'analyseur.

Image 11

Au fait, ici, vous pouvez également filtrer certains avertissements. Par exemple, vous pouvez masquer le premier avertissement dans notre rapport en le sélectionnant et en cliquant sur l'élément «Marquer les messages sélectionnés comme fausses alarmes». Pour plus de détails, reportez-vous à nouveau à la section Suppression des fausses alertes .

Linux


Plus tôt, nous avons testé le projet C #. Essayons maintenant de vérifier le code écrit en C ++. Pour ajouter de la variété à l'article, nous allons le tester sous Linux. Par ailleurs, sous Windows, Linux et macOS, vous pouvez vérifier les projets dans n'importe quel langage (C, C ++, C #, Java).

Image 20

Nous clonons un référentiel.

Image 18

Nous lançons un script de configuration pour l'assemblage.

Image 16

Nous lançons PVS-Studio en mode trace et assemblons le projet. Un utilitaire strace installé est requis . Au lieu de la commande make, dans votre cas, il peut y avoir n'importe quelle commande pour commencer à construire le projet avec tous les paramètres nécessaires.

Image 12

Nous analysons les fichiers du projet en utilisant les résultats de l'étape précédente. L'option -a vous permet de spécifier les avertissements à inclure dans le rapport.

Image 4

Nous convertissons le journal en html et apprécions les résultats.

Je n'ai décrit qu'une seule option pour vérifier un projet sous Linux et de manière très formelle, sans entrer dans les détails. Il existe d'autres façons de vérifier le projet, par exemple, en écrivant l'appel de l'analyseur dans le makefile. Pour un examen plus détaillé, je recommande de consulter les liens suivants:

Sonarquube


SonarQube est une plateforme open source pour l'analyse et la mesure en continu de la qualité du code, prenant en charge un grand nombre de langages de programmation et vous permettant de recevoir des rapports sur des métriques telles que la duplication de code, la conformité aux normes de codage, la couverture des tests, la complexité du code, les erreurs potentielles, etc.

PVS-Studio dispose d'un plugin pour importer les résultats d'analyse dans SonarQube, essayons de l'utiliser.

Image 9

Pour commencer, nous obtenons le rapport de l'analyseur et le fichier de configuration sonar-project.properties.

Image 27

Ensuite, nous avons besoin d'une commande de lancement de scanner.

Image 28

Résultat :)

Image 23

De plus, le fichier de configuration peut être créé (ou modifié). Par exemple, dans la capture d'écran ci-dessus, nous avons activé l'ajout de l'identifiant MISRA aux avertissements de l'analyseur. Oui, c'est-à-dire que par défaut, MISRA est désactivé ici. Si vous devez vérifier la conformité de votre code avec MISRA, ajoutez "actif" à votre fichier de configuration à inclure.

Image 25

Dans l'onglet Mesures, diverses métriques de code et graphiques sont disponibles.

Image 26

Vous pouvez également créer des graphiques à l'aide de la section PVS-Studio. Vous pouvez en savoir plus sur l'intégration des résultats d'analyse PVS-Studio dans SonarQube dans cette section du manuel.

PVS-Studio Java


Nous avons maintenant examiné les paramètres des projets C ++, testé le projet en C #, mais Java est en quelque sorte tombé hors de l'article. Il est nécessaire de résoudre ce problème et de dire en quoi consiste l'analyseur Java PVS-Studio. L'analyseur a plusieurs façons de s'intégrer dans un projet. Selon le système de construction, vous pouvez utiliser le plugin pour Maven ou Gradle. Vous pouvez également utiliser directement le cœur de l'analyseur. L'utilisation des plugins Gradle, Maven ou du noyau vous permet de travailler facilement avec Sonar Qube ou CI (Jenkins). Si ces plugins sont activés, le projet Java est vérifié par analyse statique directement pendant le processus de génération et, par conséquent, vous recevrez non seulement votre projet assemblé, mais également un journal de l'analyseur PVS-Studio.

L'analyseur Java PVS-Studio peut également être utilisé comme plug-in pour IntelliJ IDEA. Dans ce cas, l'analyse de la structure du projet est effectuée à l'aide de cet IDE, et le plugin fournit une interface graphique pratique pour travailler avec l'analyseur.

Image 40

Je suggère de lire plus en détail dans la section sur la façon de démarrer PVS-Studio Java .

De plus, en vérifiant un projet Java, vous pouvez supprimer les messages de l'analyseur afin que l'intégration dans un grand projet soit rapide et indolore.

Dans IntelliJ IDEA, cela ressemble à ceci.

Image 42

Dans cette fenêtre, nous voyons le rapport de l'analyseur.

Image 43

En cliquant avec le bouton droit sur le message sélectionné, nous voyons un tel menu contextuel. Dans celui-ci, nous pouvons sélectionner l'élément en surbrillance et le message disparaîtra de la sortie de l'analyseur.

Image 44

Nous pouvons également supprimer tous les messages de l'analyseur.

Pour supprimer les avertissements de l'analyseur dans Gradle, exécutez la commande:

./gradlew pvsSuppress "-Ppvsstudio.report=/path/to/report.json"
  "-Ppvsstudio.output=/path/to/suppress_base.json"

Pour supprimer les avertissements de l'analyseur dans Maven, exécutez la commande:
mvn pvsstudio:pvsSuppress "-Dpvsstudio.report=/path/to/report.json"
  "-Dpvsstudio.output=/path/to/suppress_base.json"

En savoir plus sur le mécanisme de suppression ici .

Résumer


Le but de cet article était de montrer les capacités de l'analyseur statique PVS-Studio, comment travailler facilement avec lui en utilisant le plug-in pour Visual Studio et pour Linux. Grâce à la capacité d'intégration à la plate-forme SonarQube, vous pouvez fournir une analyse continue et une gestion de la qualité de votre code, ce qui n'est qu'une des nombreuses fonctionnalités décrites dans la documentation.

L'intégration de l'analyseur statique dans le système CI vous permet de détecter les bogues immédiatement après la construction du projet. Cela réduit le coût de recherche et de correction des erreurs. Vous trouverez ci-dessous des liens vers des articles intégrant les services cloud les plus populaires:

  1. PVS-Studio passe aux nuages: Travis CI
  2. PVS-Studio passe au cloud: Azure DevOps
  3. PVS-Studio passe aux nuages: CircleCI
  4. PVS-Studio passe aux nuages: GitLab CI / CD
  5. Lancez PVS-Studio dans TeamCity


Si vous souhaitez partager cet article avec un public anglophone, veuillez utiliser le lien vers la traduction: Ekaterina Nikiforova. PVS-Studio 7.07: Présentation des fonctionnalités .

All Articles