PVS-Studio est un outil de recherche d'erreurs et de vulnérabilités potentielles dans le code source des programmes écrits en C, C ++, C # ou Java. PVS-Studio appartient à la classe d'outils pour les tests de sécurité des applications statiques (Static Application Security Testing, SAST). L'analyseur se concentre sur la pratique de l'intégration continue (CI) et vous permet d'identifier les erreurs dès les premières étapes lorsque leur correction ne coûte presque rien.
Analyse de code statique
Les projets logiciels en cours de développement sont de plus en plus nombreux. Exemples:
- Noyau Linux 1.0.0: 176 000 lignes de code
- Noyau Linux 5.0: 26 000 000 lignes de code
- Photoshop 1.0: 128 000 lignes de code
- Photoshop CS 6: 10 000 000 lignes de code
À mesure qu'un projet grandit, sa complexité croît plus rapidement que linéairement. Pour cette raison, à mesure que la taille de la base de code
augmente, la densité des erreurs
augmente également . Une façon de compenser la complexité croissante consiste à utiliser des outils d'analyse de code statique.
Un analyseur statique est un programme assistant de programmeur qui effectue une revue préliminaire du code et indique des fragments de code qui sont plus susceptibles de contenir une erreur. Grâce à cela, de nombreuses erreurs peuvent être corrigées à un stade précoce lorsque le coût de leur correction est minime.
L'analyse statique ne remplace pas, mais complète d'autres méthodologies de détection des défauts, telles que les revues de code, les tests unitaires, l'analyse de code dynamique, les tests de régression, les tests manuels, etc.
Par exemple, si nous parlons de
révision de code , il est préférable que le programme détecte des erreurs simples. Ensuite, les programmeurs examinant le code pourront se concentrer sur des vérifications de haut niveau plus utiles de l'algorithme, et ne seront pas obligés de lire
les fonctions de comparaison . De plus, comme
le montre la
pratique , de nombreuses erreurs sont très difficiles à rechercher «avec vos yeux» et elles sont très susceptibles de passer inaperçues au stade de la révision du code.
Un autre avantage des outils d'analyse statique est la présence d'une base de données riche de modèles d'erreur. Ils peuvent trouver des problèmes dont le programmeur pourrait ne même pas être au courant. Quelques exemples:
V698 ,
V718 ,
V1023 .
PVS-Studio
Nous vous recommandons d'implémenter l'analyseur de code statique PVS-Studio que nous avons développé dans le processus de développement. Le produit fonctionne sur des systèmes 64 bits sous Windows, Linux et macOS et peut analyser le code conçu pour les plates-formes ARM 32 bits, 64 bits et intégrées.
Au moment de la publication de cet article, l'analyseur prend en charge les langages et compilateurs suivants:
- Windows Visual Studio 2010-2019 C, C ++, C ++ / CLI, C ++ / CX (WinRT), C #
- Windows IAR Embedded Workbench, compilateur C / C ++ pour ARM C, C ++
- Windows QNX Momentics, QCC C, C ++
- Windows / Linux Keil µVision, DS-MDK, ARM Compiler 5/6 C, C ++
- Windows / Linux Texas Instruments Code Composer Studio, Outils de génération de code ARM C, C ++
- Windows / Linux / macOS. GNU Arm Embedded Toolchain, compilateur Arm Embedded GCC, C, C ++
- Windows / Linux / macOS. Clang C, C ++
- Linux / macOS. GCC C, C ++
- Windows MinGW C, C ++
- Windows / Linux / macOS. Java
L'analyseur dispose d'une
documentation détaillée en anglais et en russe. Les descriptions des règles de diagnostic contiennent des exemples de code correct et incorrect, ainsi que des liens vers des exemples d'erreurs réelles trouvées dans les projets open source.
Pour la commodité des spécialistes qui utiliseront PVS-Studio comme
outil SAST , l'analyseur affiche ses avertissements sur l'énumération des faiblesses communes, les normes de codage SEI CERT et la norme MISRA. Tableaux de conformité des diagnostics PVS-Studio à différentes normes:
L'analyseur peut être utilisé indépendamment et s'intégrer à Visual Studio et IntelliJ IDEA. En outre, récemment, un certain nombre de nos clients utilisent PVS-Studio dans le cadre de SonarQube. PVS-Studio, étant connecté en tant que
plug-in à SonarQube, est une source supplémentaire de messages de diagnostic.
Divers scénarios d'intégration dans CI ont été élaborés. La prise en compte de tous les scénarios dépasse le cadre de cet article et il est préférable de se référer à la documentation. Voici quelques liens pour que le lecteur puisse faire une impression générale:
L'analyseur PVS-Studio détecte efficacement un large éventail d'erreurs, des
fautes de
frappe aux
fuites de mémoire . Cela est possible grâce à l'analyse du flux de données, l'exécution symbolique, la mise en correspondance des modèles, l'annotation des méthodes (y compris automatique). Pour en savoir plus sur les principes de fonctionnement, consultez l'article "
Technologies utilisées dans l'analyseur de code PVS-Studio pour rechercher les erreurs et les vulnérabilités potentielles ".
Pourquoi devriez-vous utiliser PVS-Studio
En introduisant l'analyseur de code statique PVS-Studio dans le processus de développement, vous réduirez le coût de la correction de nombreuses erreurs. Cela libère du temps pour la mise en œuvre de nouvelles fonctionnalités ou pour des tests de haut niveau plus approfondis.
Avec une utilisation régulière de l'analyseur, le code s'améliorera progressivement, ce qui facilitera sa maintenance. La correction systématique des erreurs et la pratique de l'écriture de code de haute qualité réduiront la probabilité de détecter des vulnérabilités zero-day dans le projet. Cette rubrique est abordée plus en détail dans l'article "
Comment PVS-Studio peut-il aider à rechercher des vulnérabilités? "
L'utilisation de l'outil PVS-Studio est bénéfique pour des équipes de cinq personnes ou plus. Vous pouvez vous familiariser avec la méthode de calcul de l'efficacité d'utilisation de l'analyseur dans l'article "
PVS-Studio ROI ".
Pour les projets développés par un ou deux passionnés, l'analyseur PVS-Studio sera très probablement redondant. Cependant, il peut également être utilisé dans de tels petits projets, d'autant plus que nous proposons plusieurs options de licence
gratuites pour les étudiants, les projets open source, etc.
Le plus souvent, au début,
nos clients acquièrent une licence pour un an. Après un an, lorsqu'ils sont convaincus que les capacités de l'analyseur et leur support sont entièrement satisfaits, ils renouvellent la licence pour deux ou trois ans à la fois. Cela leur permet d'obtenir une remise substantielle. Vous pouvez demander des prix et consulter les problèmes de licence
ici .
Devenez notre client. En utilisant PVS-Studio, vous augmenterez la maturité du processus de développement, économiserez de l'argent dans la lutte contre les bugs et créerez de meilleurs logiciels.
Nous vous fournirons un support rapide et de qualité. Les questions sont répondues directement par les programmeurs développant les modules sur lesquels la question s'est posée. Cela permet d'obtenir des réponses même dans des situations difficiles. Un exemple d'une telle communication est "
Faux positifs dans PVS-Studio: la profondeur du trou du lapin ".
Réponses d'opposition
Parfois, les programmeurs perçoivent négativement l'idée d'introduire l'analyse de code statique dans le processus de développement, critiquant la méthodologie de l'analyse statique dans son ensemble ou spécifiquement l'outil PVS-Studio. Lorsque la discussion commence, il s'avère que la critique n'est pas étayée et découle simplement de la réticence à changer quelque chose dans le processus de développement établi. Considérez les arguments typiques pour ne rien changer, et en quoi consiste leur faiblesse.
«L'analyse statique fera partie du temps de travail»
L'énoncé «l'analyse statique occupera une partie du temps de travail» indépendamment du contexte est vrai. La révision régulière des avertissements de l'analyseur statique émis pour un code nouveau ou modifié prend vraiment du temps. Cependant, la réflexion doit être poursuivie: mais le temps consacré à cela est bien inférieur au coût d'identification des erreurs par d'autres méthodes.
D'où vient l'opinion sur la nécessité de passer du temps à avertir les analyseurs de code statique?
Les programmeurs qui ne connaissent pas encore la méthodologie d'analyse de code confondent les tests et l'utilisation régulière. Au premier démarrage, tous les analyseurs donnent une énorme liste d'avertissements, dont beaucoup sont faux. La raison en est que l'analyseur n'est pas encore configuré. Un analyseur réglé génère un petit nombre de faux positifs lors des lancements réguliers. En d'autres termes, avec une utilisation régulière, la plupart des avertissements détectent de vrais défauts ou un code d'odeur. Il est seulement important de faire ce réglage.
Cette rubrique est décrite plus en détail dans l'article «
Utilisation des objections: l'analyse statique prendra une partie du temps de travail ».
"L'analyseur statique est très bruyant (il produit beaucoup de faux positifs)"
Comme mentionné ci-dessus, cette conclusion est faite en utilisant un analyseur de code non configuré. Après avoir configuré PVS-Studio, vous pouvez vous attendre à ce que le pourcentage de faux positifs soit de 10 à 20%. Autrement dit, avec cinq avertissements émis, quatre indiqueront de vraies erreurs ou un code susceptible de provoquer des erreurs à l'avenir. Un exemple d'un tel paramètre peut être vu dans l'article "
Spécifications de l'analyseur PVS-Studio en utilisant l'exemple EFL Core Libraries, 10-15% de faux positifs ".
Une autre raison qui fausse l'idée de l'analyseur est le désir d'inclure autant d'avertissements que possible, sans comprendre leur objectif. Par exemple, si vous activez l'ensemble de règles MISRA axé sur les systèmes intégrés pour une application Windows classique, l'analyseur génère des centaines de milliers d'avertissements. Il n'y aura aucun sens pratique en eux. Des diagnostics particulièrement inutiles interfèrent au stade de la connaissance de l'outil et forment une idée fausse sur ses capacités de diagnostic. L'article «
Comment voir rapidement les avertissements intéressants que l'analyseur PVS-Studio pour le code C et C ++? » Aide à éviter cela.
«L'introduction de l'analyse statique dans le processus de développement est très difficile, longue et coûteuse»
Très bien, ces préoccupations se reflètent dans ce commentaire:
Hélas, les analyseurs statiques eux-mêmes ne sont rien d'autre que des jouets. Les introduire dans le flux de travail est un travail d'enfer, vous devez sélectionner des personnes pour traiter et filtrer les résultats. Les tentatives de déplacer ces tâches sur les épaules des développeurs ordinaires se terminent généralement par rien.Ce n'est pas si effrayant. Il existe au moins trois approches qui vous permettent d'implémenter minutieusement l'analyse statique, même dans les grands projets anciens.
Première approche. «Ratchet Method», dont Ivan Ponomarev parle bien dans son rapport «
Continuous Static Code Analysis ».
Deuxième approche. Afin de commencer rapidement à utiliser l'analyse statique, nous proposons aux clients de PVS-Studio d'utiliser la "
base de balisage ". L'idée générale est la suivante. L'utilisateur a démarré l'analyseur et a reçu de nombreux avertissements. Étant donné qu'un projet développé depuis de nombreuses années, est vivant, se développe et rapporte de l'argent, il est fort probable qu'il n'y aura pas beaucoup d'avertissements dans le rapport indiquant des défauts critiques. En d'autres termes, les bogues critiques ont déjà été corrigés d'une manière ou d'une autre de manière plus coûteuse ou grâce aux commentaires des clients. En conséquence, tout ce que l'analyseur trouve maintenant peut être considéré comme une dette technique, ce qui n'est pas pratique pour essayer de l'éliminer immédiatement.
Vous pouvez demander à PVS-Studio de considérer ces avertissements comme non pertinents (reporter la dette technique pour plus tard) et de ne plus les afficher. L'analyseur crée un fichier spécial où il stocke des informations sur les erreurs jusqu'ici inintéressantes. Et maintenant, PVS-Studio émettra des avertissements uniquement sur le code nouveau ou modifié. De plus, tout cela est mis en œuvre intelligemment. Si, par exemple, une ligne vide est ajoutée au début d'un certain fichier .cpp, alors l'analyseur comprend qu'en fait, rien n'a changé et restera silencieux. Ce fichier de balisage peut être intégré dans le système de contrôle de version. Le fichier est volumineux, mais ce n'est pas effrayant, car il est souvent inutile de le poser.
Désormais, tous les programmeurs verront des avertissements liés uniquement au code nouveau ou modifié. Ainsi, l'analyseur peut commencer à utiliser ce qu'on appelle le lendemain. Et il sera possible de revenir plus tard à la dette technique, de corriger progressivement les erreurs et de configurer l'analyseur.
La troisième approche. Vous pouvez conclure un contrat avec nous et déléguer à notre équipe le travail de mise en place et d'intégration de l'analyse statique. Un exemple de cette pratique: "
Comment l'équipe PVS-Studio a amélioré le code Unreal Engine ."
"Nous avons lancé l'analyseur et n'avons rien trouvé d'intéressant"
C'est tout à fait possible, mais cela ne signifie pas que l'analyseur ne sera pas utile. Le fait est que les erreurs ont été corrigées par des méthodes plus coûteuses. Voici comment prendre le texte d'un livre, déjà lu par plusieurs relecteurs, et voir ce que le vérificateur orthographique intégré à Microsoft Word peut trouver. De petites erreurs seront trouvées, mais il ne s'ensuit pas que la fonction de vérification dans Word ne sera pas utile lors de l'écriture de nouveaux textes.
Ce sujet est abordé plus en détail dans l'article "
Philosophie de l'analyse de code statique: nous avons 100 programmeurs, l'analyseur a trouvé peu d'erreurs, est-ce inutile? ".
"Un analyseur statique coûte cher, il vaut mieux engager un autre programmeur / testeur"
En fait, cela signifie que vous ne voulez rien changer. En effet, avant que l'équipe ne s'agrandisse et ne se reconstitue avec de nouveaux programmeurs et testeurs. Cependant, cela n'a pas entraîné une augmentation significative de la maturité du processus de développement. Examinons néanmoins cette objection plus en détail.
Tout d'abord, prendre une personne supplémentaire pour rechercher des erreurs coûte beaucoup plus cher que de commencer à utiliser un analyseur de code. Calculez le fonds salarial d'une personne pour l'année. Ajoutez les taxes et l'aménagement du lieu de travail. L'argument selon lequel une licence coûte cher n'est plus un argument. Et pourtant, l'analyseur statique, contrairement à la personne, ne part pas en vacances, n'est pas malade et ne part pas. Si nous parlons de grandes équipes, par exemple, 100 personnes, alors pour obtenir un certain effet, vous devrez embaucher plusieurs personnes. L'écart en faveur de l'analyseur statique se creuse.
Deuxièmement, le plus grand effet est obtenu en raison de la synergie de l'utilisation de diverses techniques de recherche d'erreur. Certaines erreurs sont bien détectées par les tests unitaires, certaines avec des tests manuels, etc. Imaginez la situation. Le projet a 10 programmeurs, de nombreux tests unitaires sont écrits, mais il n'y a pas de testeurs. La qualité du projet ne convient pas aux utilisateurs et l'idée est d'ouvrir un poste de testeur. Mais cela ne se fait pas sous prétexte «il vaut mieux embaucher un autre programmeur», qu'il y ait encore plus de tests unitaires! D'accord, c'est la mauvaise décision. De toute évidence, le processus d'assurance de la qualité est unilatéral et l'ajout de tests manuels apportera des avantages beaucoup plus importants. La même situation est avec l'analyse statique.
"L'analyse dynamique est plus efficace que statique."
Les analyseurs statiques détectent bien certaines erreurs. Certains sont des analyseurs dynamiques. Ces outils se
complètent et cela n'a aucun sens de choisir une chose.
Par exemple, les analyseurs dynamiques ne peuvent pas trouver de nombreuses erreurs de frappe ou détecter un code inaccessible. Dans l'article "
Validation du code de l'analyseur dynamique Valgrind à l'aide d'un analyseur statique ", vous pouvez rencontrer certaines de ces erreurs.
«Les tests unitaires sont plus efficaces que l'analyse de code statique»
Si vous choisissez entre l'écriture de tests unitaires et l'analyse statique, alors les tests seront peut-être plus importants et utiles. Mais aucun choix ne doit être fait. Il est nécessaire d'utiliser à la fois des tests unitaires et une analyse de code statique. Ces méthodologies de recherche d'erreurs se complètent parfaitement.
L'analyse statique complétera les tests unitaires pour les raisons suivantes:
- Personne ne teste les tests eux-mêmes et ils contiennent souvent des erreurs. Dans nos articles, nous avons cité à plusieurs reprises des exemples d'erreurs dans le code de test unitaire. Par conséquent, l'analyse statique peut trouver des erreurs dans les tests, qui, à leur tour, peuvent trouver des erreurs dans le code d'application principal.
- Les tests sont très difficiles à couvrir tout le code. Surtout quand il s'agit de code pour gérer les situations d'urgence. Les analyseurs statiques vérifient tout le code.
- Certaines erreurs sont impossibles ou extrêmement difficiles à détecter avec des tests unitaires. Exemple: V597 (CWE-14) .
- Certaines erreurs ne se manifestent que lors du traitement de grandes quantités de données et les tests unitaires ne permettent pas de modéliser de telles situations. Un exemple est le débordement d'une variable 32 bits dans un programme 64 bits ( V108 , V127 ).
- Il est plus facile et plus rapide de trouver une erreur en exécutant une analyse statique que de déboguer le code lorsqu'il s'avère qu'il ne fonctionne pas sur le test unitaire. Bien sûr, les tests unitaires trouveront plus d'erreurs, mais si certains d'entre eux peuvent être trouvés de manière moins coûteuse (analyse statique), pourquoi ne pas l'utiliser.
- Nous trouvons un grand nombre d'erreurs dans divers projets. Beaucoup de ces projets sont bien couverts par des tests, mais comme vous pouvez le voir, cela n'aide pas. Il n'y a donc aucune raison de ne pas démarrer, en plus des tests unitaires, également en utilisant l'analyse de code statique, améliorant ainsi sa qualité et sa sécurité.
«Les compilateurs gratuits modernes peuvent faire la même chose que PVS-Studio»
Oui, en effet, les compilateurs évoluent et de nouveaux avertissements sont mis en œuvre pour les aider à trouver des erreurs dans le code. Cependant, il ne faut pas trop attendre des compilateurs, par rapport aux solutions professionnelles payantes, comme PVS-Studio.
Avantages de PVS-Studio:
- Support utilisateur.
- Infrastructure riche (intégration avec d'autres produits).
- Développer des capacités de diagnostic.
Les deux premiers points sont déjà suffisants pour l'emporter sur les échelles en faveur de PVS-Studio. Parlons cependant des diagnostics. Nous développons constamment l'analyseur pour devancer les autres outils. Par exemple, nous pouvons trouver ici une erreur aussi intéressante "
31 février ".
Ce n'est pas suffisant pour convaincre les lecteurs sceptiques. Par conséquent, de temps en temps, nous vérifions d'autres compilateurs et montrons que PVS-Studio est capable de trouver des erreurs en eux:
PS
Si vous doutez toujours d'utiliser PVS-Studio, regardez
quelles erreurs et dans quels projets nous avons réussi à détecter .
Liens utiles
- PVS-Studio: page principale , documentation , téléchargement , achat .
- Justification des avantages: exemples de vérification de projet , clients , ROI .
- Comment voir rapidement les avertissements intéressants générés par l'analyseur PVS-Studio pour le code C et C ++?
- En bref PVS-Studio en tant que solution SAST
- PVS-Studio - moteur de progrès
- Note aux enseignants: PVS-Studio pour initier les étudiants aux outils d'analyse de code
- Pourquoi n'écrivons-nous pas sur la comparaison de PVS-Studio avec d'autres analyseurs de code statique
- Comment PVS-Studio peut-il aider à rechercher des vulnérabilités?
- PVS-Studio et développement d'applications 64 bits en C et C ++
- Technologies utilisées dans l'analyseur de code PVS-Studio pour rechercher des erreurs et des vulnérabilités potentielles
- PVS-Studio pour Java

Si vous souhaitez partager cet article avec un public anglophone, veuillez utiliser le lien vers la traduction: Andrey Karpov.
Pourquoi choisir l'analyseur statique PVS-Studio à intégrer dans votre processus de développement .