Nous accueillons favorablement toute discussion thématique sur le thème de la qualité du code. Nous sommes contactés par des clients, des étudiants et tout autre utilisateur de partout sur Internet. Quel que soit le pays, le fuseau horaire ou la langue. La langue parlée, bien sûr. Parmi les langages de programmation, nous nous intéressons toujours à un ensemble limité. Maintenant, c'est C, C ++, C # et Java. Les avantages de la communication sont nombreux. Nous mettons immédiatement en œuvre certaines offres d'utilisateurs, car ils sont vraiment utiles. Souvent, nous aidons simplement le projet de quelqu'un d'autre, en expliquant les avertissements de l'analyseur, qui se révèlent finalement être une erreur. Cette note concerne un de ces cas.
À propos de l'analyseur
PVS-Studio est un outil pour détecter les erreurs et les vulnérabilités potentielles dans le code source des programmes écrits en C, C ++, C # et Java. Il fonctionne sur Windows, Linux et macOS.
Pour la communication, il existe 3 formes de feedback:
- Rétroaction
- Demande d'essai
- Demande de prix
Jeudi soir
Un utilisateur actif qui a essayé l'analyseur sur son code a commencé activement à envoyer de faux avertissements. Avant de pouvoir répondre, 3 lettres se sont accumulées. C'était la fin de la journée de travail et il restait peu de force (à la question de la fiabilité de la révision manuelle du code). Notre équipe se préparait activement à la grande sortie, qui est partie quelques jours plus tard.
J'ai décidé de reporter la réponse à vendredi ou même à la semaine prochaine:
Bonjour, Konstantin.Nous analysons les avertissements. La semaine prochaine, je commenterai les endroits suspects :-)Ceci est une note que l'analyse de code statique est très efficace, et la révision manuelle du code sera inférieure à la vérification automatique dans de nombreux cas, en particulier à la fin de la journée de travail.
Avec la permission de l'utilisateur, je vais vous parler de la correspondance:
Lettre 1Faux positifs V712:uint32_t StartUpCounter = 0, HSEStatus = 0; RCC->CR |= ((uint32_t)RCC_CR_HSEON); { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
Lettre 2Il y a un faux positif V715: {
Lettre 3Bâtons d'arbre de Noël, endroit enchanté! Tout y est, jure (voir le code des lettres précédentes):V560 Une partie de l'expression conditionnelle est toujours vraie: (StartUpCounter! = ((Uint16_t) 0x5000)). lpmode.cpp 356V776 Boucle potentiellement infinie. La variable dans la condition de sortie de boucle 'HSEStatus == 0' ne change pas sa valeur entre les itérations. lpmode.cpp 356Peut-être que je ne comprends pas quelque chose? Mais en pratique, tout fonctionne, et si le quartz ne démarre pas, alors on quitte cette section par timeout ;-)Lettre 4 (réponse)Bonjour, Konstantin.Nous analysons les avertissements. La semaine prochaine, je commenterai les endroits suspects :-)Lettre 5L'enfer Je n'ai vu votre code qu'après votre écriture avec une vision latérale - l'instruction do a été sautée ... Tout s'est mis en place! Un oeil flou%)faire {...} tandis que (...);Conclusion
Comme vous l'avez peut-être remarqué, il y avait 4 avertissements d'analyseur au même endroit, mais il a quand même fallu du temps pour convaincre l'utilisateur d'une erreur. Dans une telle situation, une révision manuelle n'aurait même aucune chance.
Une histoire similaire avec une fin heureuse: "
Comment PVS-Studio s'est avéré être plus attentif que trois programmeurs et demi ."
Utilisez des analyseurs statiques dans votre projet. Ils ne remplacent pas la révision du code avec un collègue, mais sont un complément utile au contrôle de la qualité du code.

Si vous souhaitez partager cet article avec un public anglophone, veuillez utiliser le lien vers la traduction: Svyatoslav Razmyslov.
Un jour à partir du support utilisateur de PVS-Studio .