Tout ce que vous vouliez savoir sur PVS-Studio et n'hésitez pas à demander

Image 1

Récemment, nous avons renforcé notre présence à diverses conférences informatiques spécialisées en Russie et à l'étranger. Lors de la plupart des événements, nous essayons de nous tenir debout avec un stand; à certains, nous faisons des présentations. Les conférences peuvent non seulement accroître la reconnaissance de notre produit (analyseur de code statique PVS-Studio), mais aussi, plus important encore, mieux connaître les utilisateurs potentiels et existants. Communiquant avec les visiteurs du stand, nos collaborateurs répondent souvent aux mêmes questions, parfois assez curieuses. Dans cet article, je vais essayer de répondre aux questions les plus fréquemment posées par les visiteurs sur l'analyse statique en général et PVS-Studio en particulier.

Pour commencer, un peu d'humour sur le thème «Attente et réalité». Nous écrivons beaucoup d'articles et croyons naïvement que si les gens les lisent déjà, ils connaissent au moins en général notre produit et ses fonctionnalités. Malheureusement, ce n'est pas toujours le cas. Voici un exemple de communication réelle avec un visiteur lors d'une récente conférence. Le visiteur: "Nous avons lu vos articles sur Habré. Intéressant. Dommage que votre analyseur ne nous convienne pas du tout. Nous avons tous les codes source secrets, nous ne pouvons pas les envoyer. Mais tout sur le cloud fonctionne pour vous là-bas. »

Image 4

Notre service marketing a probablement quelque chose à travailler.

Ensuite, je donnerai d'autres questions courantes du visiteur moyen à notre stand à l'exposition, ainsi que les réponses à celles-ci dans un format de dialogue impromptu.

Q: J'ai entendu parler de toi. D'où venez-vous, que faites-vous et comment en savoir plus sur vous?

R: Nous sommes une petite équipe indépendante de Tula. Nous développons PVS-Studio - un analyseur de code statique pour les langages C, C ++, C #, Java. Vous pouvez en savoir plus sur nous sur le site Web de PVS-Studio . Nous écrivons également des articles et les publions sur notre blog , sur Habré et d'autres ressources.

Q: Quel genre d'analyse statique? Notre équipe a suffisamment d'avertissements du compilateur et de revues de code conjointes.

R: Le compilateur ne peut signaler que des erreurs grossières et plutôt évidentes. Par exemple, du code inaccessible ou l'utilisation de variables non initialisées. La détection des erreurs pour le compilateur est une tâche secondaire. Oui, les compilateurs sont devenus assez intelligents ces derniers temps. Mais tout outil spécialisé pour trouver des erreurs dans le code est nettement supérieur au compilateur, vous permettant d'effectuer une analyse détaillée du code et d'identifier les fautes de frappe, les erreurs logiques, l'utilisation potentielle de pointeurs / liens nuls, etc.

Les revues conjointes de code sont une bonne technologie éprouvée. Mais il présente également des inconvénients liés à la nécessité d'attirer des employés supplémentaires pour travailler sur le code d'autres personnes. Cela augmente le coût du développement, tandis que la probabilité d'ignorer une erreur ou d'en ajouter une nouvelle demeure, car c'est la nature humaine de commettre des erreurs.

L'analyse statique est la vérification du code source d'un programme sans avoir besoin de son exécution. Nous vous recommandons d'utiliser des outils d'analyse de code statique comme barrière supplémentaire aux erreurs.

Q: PVS-Studio analyse-t-il les fichiers exécutables ou le code source directement?

R: Si nous parlons de la recherche de vulnérabilités, l'analyse du code exécutable est plus similaire à la façon dont l'antivirus fonctionne en recherchant des signatures dans un code binaire à partir d'une certaine base de données.

PVS-Studio analyse le code source . Cela vous permet d'identifier une gamme beaucoup plus large d'erreurs et de vulnérabilités potentielles, augmente la vitesse de travail et donne des résultats plus fiables.

Oui, bien sûr, vous pouvez essayer de démonter le code et trouver l'erreur dans l'algorithme. Mais vous devez comprendre que dans le code binaire, beaucoup d'informations sont perdues. Par exemple, la vraie condition sera toujours simplement supprimée lors de la compilation du code, et il n'y a aucun moyen de savoir que quelque chose n'allait pas avec cette condition.

Q: Et quelles sont les options d'intégration? Avez-vous des plugins pour n'importe quel IDE?

R: Actuellement, PVS-Studio s'intègre dans Visual Studio 2010-2017 en tant que plugin. Il existe un plugin Java pour IntelliJ IDEA. De plus, grâce à un module spécialisé, vous pouvez gérer des projets CMake dans Qt Creator et CLion.

L'analyseur est en constante évolution, vous pouvez donc trouver les informations les plus récentes sur les fonctionnalités du produit en visitant notre site Web .

Q: Nous utilisons SonarQube.

R: Excellent choix. Le plugin PVS-Studio pour SonarQube vous permet d'importer des résultats d'analyse dans SonarQube et de les utiliser de la manière habituelle.

Q: Eh bien, je dois en quelque sorte intégrer l'analyse dans notre système de construction.

R: PVS-Studio peut être utilisé à partir de la ligne de commande. L'analyseur contient un large éventail de paramètres pour résoudre un large éventail de tâches. De plus, quel que soit le scénario d'utilisation, nous fournissons une assistance à nos clients pendant la phase de mise en œuvre de l'analyseur et un support technique tout au long de la période de licence.

Q: Comment essayer votre analyseur?

R: Utilisez la page de téléchargement , téléchargez le kit de distribution nécessaire et travaillez avec PVS-Studio en mode d'essai. Si vous avez besoin de plus de temps pour évaluer notre produit ou si vous n'êtes pas satisfait des limitations de la version de démonstration, contactez-nous .

Lors des expositions, nos visiteurs peuvent également recevoir une clé d'entreprise, dont la validité est d'un mois. Pour ce faire, venez sur notre stand avec une licorne. De plus, vous pouvez devenir membre de la loterie et recevoir un prix de PVS-Studio.

Q: Je suis étudiant, est-il possible d'utiliser PVS-Studio gratuitement?

R: Cela est possible si vous ajoutez des commentaires d'un type spécial à votre code source. Les fichiers marqués de cette manière seront vérifiés pour les erreurs sans aucune restriction. Pour en savoir plus sur ce mode de fonctionnement, consultez l'article " Comment utiliser PVS-Studio gratuitement ".

Q: Qui sont vos clients?

R: À l'heure actuelle, plus de 200 entreprises dans le monde sont devenues nos clients. L'étendue de leurs activités est très variée. Une liste des clients existants se trouve sur notre site Web .

Q: Avez-vous ou non un mode de fonctionnement local?

R: L'analyseur PVS-Studio est installé localement sur un ou plusieurs ordinateurs dédiés et peut fonctionner complètement de manière isolée. Une connexion Internet est nécessaire pour recevoir les mises à jour, ainsi que des liens rapides vers la documentation (description des diagnostics, etc.) des plugins. Nous réfléchissons actuellement à des options pour travailler à travers le «cloud», mais ce sera un ajout au mode de fonctionnement standard.

Q: Et en quoi êtes-vous meilleur, par exemple, l'analyseur de couverture?

R: Il est impossible de donner une réponse simple et complète à cette question. Toutes nos tentatives de comparaison avec d'autres analyseurs ont échoué. Nous avons été accusés de parti pris, de «liquidation» des résultats, en utilisant une base de test spécialement préparée et d'autres péchés capitaux. De plus, les analyseurs ne peuvent pas être simplement comparés «de face». Chaque outil est unique et possède ses propres forces et faiblesses. Certains outils se concentrent sur les performances, d'autres se concentrent sur la recherche d'odeurs dans le code et l'amélioration du style. Nous recherchons des bugs et des vulnérabilités potentielles.

Si vous avez un désir et une méthodologie appropriée, vous pouvez mener une étude et comparer notre analyseur avec d'autres, puis écrire un article à ce sujet. Pour ce faire, nous vous délivrerons même une clé de licence temporaire sans restrictions. Mais préparez-vous à la critique.

Q: Je ne comprends pas, vous recherchez donc uniquement des erreurs dans le code non compilé? Autrement dit, le programme n'a même pas réussi la vérification du compilateur?

R: Ce n'est pas le cas. PVS-Studio recherche et trouve des erreurs uniquement dans les programmes compilés. Dans des applications réelles. Ces programmes ne sont pas seulement compilés sans erreurs, certains d'entre eux sont vérifiés par d'autres analyseurs. Et nous y cherchons toujours des erreurs. À ce sujet, nous écrivons souvent des articles sur notre blog, en vérifiant les projets open source.

Q: Et quelles erreurs PVS-Studio pourra-t-il détecter dans notre projet? Juste des fautes de frappe?

R: Les fautes de frappe appartiennent bien entendu à la classe des erreurs classiques détectées par l'analyse statique. Mais en plus de cela, PVS-Studio peut potentiellement détecter plusieurs centaines de modèles d' erreur supplémentaires . Exemples: déréférencer un pointeur nul, diviser par zéro, la condition est toujours fausse ou vraie, opérations incorrectes avec l'index, sortir des limites du tableau, et bien d'autres. Une liste complète des erreurs est fournie sur la page de documentation .

Q: Après avoir vérifié avec votre analyseur, puis-je être sûr que le programme ne contient pas d'erreurs?

R: Non. PVS-Studio n'est pas un outil pour prouver l'exactitude des programmes. Il s'agit d'une classe d'outils distincte. La tâche de notre analyseur est d' indiquer rapidement et de manière fiable une erreur potentielle dans le code. La décision sur la faillibilité d'une conception particulière est toujours prise par le développeur, en utilisant le contexte de l'occurrence de l'erreur et sa connaissance du projet. Et l'analyseur aide le développeur, minimisant éventuellement le nombre de faux positifs et fournissant des capacités supplémentaires pour traiter la liste des avertissements reçus.

Q: Comment fonctionne exactement PVS-Studio? Quel genre de mécanismes de recherche d'erreur? Vous utilisez probablement des expressions régulières.

R: L' utilisation d'expressions régulières est extrêmement inefficace. Il vous permet de trouver uniquement les erreurs les plus primitives, par exemple, dans des conditions (comparer deux sous-expressions identiques):

if ((a+b+) == (a+b+)) {....} 

Dans le même temps, un petit changement dans le code (sans changer la logique de travail) mettra très probablement un tel analyseur dans une impasse:

 if ((a+b+) == (b+a+)) {....} 

L'analyseur PVS-Studio est beaucoup plus intelligent et utilise les mécanismes suivants:

  • Correspondance de modèle basée sur un arbre de syntaxe abstraite.
  • Construire un modèle sémantique avec inférence de type ultérieure.
  • Exécution symbolique, qui vous permet de calculer les valeurs des variables pouvant entraîner des erreurs, ainsi que de vérifier les plages de valeurs (vérification des plages).
  • Analyse de flux de données (analyse de flux de données).
  • Annotations de méthode

Tout cela a été décrit plus en détail par mon collègue Andrei Karpov dans un article récent, « Technologies utilisées dans l'analyseur de code PVS-Studio pour trouver les erreurs et les vulnérabilités potentielles ».

Q: Eh bien, nous avons un projet C / C ++, 15 ans de développement et cinq millions de lignes de code. Pouvons-nous vraiment commencer à utiliser PVS-Studio maintenant?

R: Oui. Au stade de la mise en œuvre, il sera nécessaire d'effectuer une vérification complète de votre projet une fois. Ensuite, tous les avertissements reçus (il y en aura probablement beaucoup) peuvent être considérés comme inintéressants (supprimer temporairement leur conclusion) afin de revenir plus tard sur cette dette technique. Après cela, vous pouvez utiliser PVS-Studio pour vérifier régulièrement uniquement le nouveau code. Vous pouvez en savoir plus à ce sujet et sur d'autres fonctionnalités de l'analyseur sur la page de documentation .

Q: À quelle fréquence dois-je exécuter un test? Et quoi, vérifiez la base de code entière à chaque fois?

R: L'utilisation la plus efficace de l'analyse statique consiste à vérifier le nouveau code aussi souvent que possible. Pour cela, le mode d'analyse incrémentielle est implémenté dans PVS-Studio. Les fichiers modifiés depuis la dernière version du projet sont soumis pour vérification. Il existe d'autres modes de fonctionnement. Cela vous permet d'identifier les erreurs déjà au stade du développement, ce qui réduit le risque qu'elles pénètrent dans la version.

Q: Nous utilisons PVS-Studio. L'analyseur trouve des erreurs, mais nombre d'entre elles se trouvent dans du code ou des tests inutilisés. Est-ce que ça va?

R: C'est tout à fait normal. Contrairement à l'analyse dynamique, l'une des caractéristiques de l'analyse statique est la vérification de l' intégralité de la base de code, et pas seulement de ce qui est exécuté lors de l'exécution du code. Supposons que vous ayez passé beaucoup de temps et d'efforts à déboguer le code du programme, et que tout fonctionne de manière stable. Mais il existe une fonction qui est rarement utilisée, ou pas encore utilisée du tout. La probabilité de trouver une erreur dans une telle fonction est élevée. Et quand à un moment donné ils commencent à utiliser la fonction, quelque chose peut mal tourner. L'utilisation de l'analyse statique minimisera les risques d'une telle situation.

En outre, le code peut contenir des constructions manifestement incorrectes (cela se produit généralement dans les tests), il est donc souvent judicieux de les exclure de l'analyse (en spécifiant des projets ou des chemins) via les paramètres PVS-Studio. Cependant, parfois les tests eux-mêmes contiennent des erreurs. De telles situations sont difficiles à identifier et, dans ce cas, la décision doit être prise par le développeur.

Q: Qu'en est-il de la recherche de vulnérabilités?

R: L'analyseur PVS-Studio est un outil SAST (Static Application Security Testing) et vous permet d'identifier les vulnérabilités potentielles classées selon CWE (Common Weakness Enumeration). Les alertes CWE se chevauchent largement avec les alertes PVS-Studio classiques. Vous pouvez en savoir plus sur SAST dans la documentation . Il est important de comprendre que les vulnérabilités potentielles ne conduisent pas nécessairement à des vulnérabilités réelles qui peuvent être exploitées par un pirate. Les vulnérabilités identifiées sont classées par CVE (Common Vulnerabilities and Exposures). Néanmoins, l'élimination des vulnérabilités potentielles contribue clairement à améliorer la sécurité du programme et minimise le risque d'identifier des vulnérabilités réelles à l'avenir.

Q: Je dirige l'équipe de développement. Comment PVS-Studio m'aidera-t-il exactement?

R: En plus d'améliorer la qualité et la fiabilité du code, la mise en œuvre de PVS-Studio permettra de résoudre des tâches purement managériales liées, par exemple, à la répartition des responsabilités. Le package d'analyseur comprend l'utilitaire BlameNotifier, qui vous permet d'identifier automatiquement les employés qui ont envoyé un code erroné au système de contrôle de version. Dans le même temps, des notifications par courrier sont envoyées à la fois au contractant et à son responsable.

Vous pouvez également configurer la conversion des rapports d'erreurs sous toute forme qui vous convient, y compris un rapport html détaillé, pratique à utiliser par la tête.

Enfin, si SonarQube est utilisé, vous pouvez utiliser tous les avantages de cet outil pour assurer un contrôle continu de la qualité du code en téléchargeant les résultats de la vérification du projet sur le SonarQube à l'aide de l'analyseur PVS-Studio à l'aide d'un plug-in spécialisé.

Q: Vous utilisez ou prévoyez d'utiliser l'apprentissage automatique?

R: C'est un sujet important et intéressant. Nous prévoyons d'écrire un article critique à ce sujet. Maintenant, je ne ferai que quelques brèves réflexions.

Il n'est pas nécessaire de créer une calculatrice à l'aide de l'apprentissage automatique. Il existe une certaine règle (formule), et elle doit être appliquée au code et tirer une sorte de conclusion. Il n'est pas clair pourquoi le réseau neuronal doit être configuré pour détecter un nouveau modèle d'erreur lorsque ces modèles existent déjà, et il vous suffit de les appliquer correctement. Et, plus important encore, il n'est pas clair où trouver la base d'une telle formation. Où se trouve cet échantillon de centaines de milliers de projets avec des erreurs écrites dont vous pouvez tirer des leçons?

Le seul endroit où, à notre avis, il pourrait être judicieux d'utiliser des algorithmes d'apprentissage automatique est de filtrer les faux positifs.

Q: Vérifiez-vous le code PVS-Studio avec PVS-Studio?

R: bien sûr! De plus, en cas d'erreur, la liste des auteurs est rendue publique avec leur excommunication ultérieure du réfrigérateur avec de la glace. Mais sérieusement, nous pensons qu'il est très utile d'utiliser votre propre outil. Cela vous permet de regarder le produit du point de vue de l'utilisateur et de remarquer certains inconvénients.

Q: Comment obtenir votre merveilleux statut pour le bureau et la casquette de marque avec oreillettes?

R: Venez à notre stand avec une licorne à l'exposition la plus proche, où nous serons présents avec un stand. Nous trouverons quelque chose :)

Image 2

J'espère avoir pu répondre aux questions les plus fréquentes des visiteurs de nos stands lors des expositions. Bien sûr, il existe des questions plus complexes qui peuvent nécessiter la rédaction d'un article séparé pour y répondre.

Lorsque nous communiquons avec les visiteurs, nous essayons de transmettre l'idée principale: une analyse statique n'est pas une panacée pour tous les maux, mais son utilisation est très utile pour la santé (vos programmes). Utilisez PVS-Studio et ne tombez pas malade!

En conclusion, je donnerai à nouveau un certain nombre de liens utiles:



Si vous souhaitez partager cet article avec un public anglophone, veuillez utiliser le lien vers la traduction: Sergey Khrenov. Tout ce que vous vouliez savoir sur PVS-Studio et osé demander

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


All Articles