Webinar: Evaluation - 05.12
L'analyseur statique PVS‑Studio détecte les erreurs dans le code écrit en C, C++, C# et Java. L'analyseur est plus efficace pour rechercher de problèmes dans les systèmes incorporés et autres projets d'ingénierie.
Plus tôt détection d'erreur sera le moins cher pour corriger. L'analyseur statique détecte les erreurs au stade de l'écriture du code ou, du moins, lors des tests nocturnes (night tests) sur le serveur. En conséquence : détection et correction des erreurs deviennent plus économiques.
L'analyse statique peut être particulièrement utile pour débogage des systèmes embarqués.
Dans de tels projets, les développeurs peuvent rencontrer des erreurs dans le logiciel et l'appareil, ou une mauvaise qualité de la conception de la mise en page (mauvais contacts, etc.).
Par conséquent, le processus de trouver d'erreurs peut prendre beaucoup de temps, puisqu'il n'est pas toujours évident où chercher une.
Si un développeur pense que le code est correct, cela peut créer les concepteurs de circuits et d'autres collègues à passer du temps à trouver une erreur dans le matériel.
Plus il sera désagréable de revenir plus tard sur le code du programme et de finalement trouver une faute de frappe.
L'utilisation inefficace du temps et de l'énergie de l'équipe. C'est formidable si un analyseur statique trouve une telle erreur.
Voici la description un cas similaire par développer :
Quand j'ai été master, j'ai commencé à travailler pour une entreprise spécialisée dans la production de divers appareils personnalisés. Par exemple, l'automation des serres ou collection d'information à partir de capteurs dans l'entreprise. Cela signifie qu'il n'y a eu ni fuite ni ne surchauffe nulle part.
J'ai été attribué une autre tâche typique, que j'ai terminée en quelques heures. Je l'ai ensuite donné à mes collègues pour qu'ils le microprogramme dans l'appareil. Ils ont été surpris par ma rapidité et j'ai répondu : " Je suis pro, c'est simple comme bonjour ". Ils ont pris la clé USB avec un fichier binaire pour le microprogramme et sont partis.
J'ai immédiatement effacé cela de ma mémoire. C'étaient des tâches plus grandes et plus intéressantes pour faire. De plus, comme mes collègues ne sont pas revenus, tout allait bien.
Ils sont revenus. Mais seulement une semaine après cela. Ils ont dit : " Nous sommes confus. Nous ne comprenons rien. Notre appareil ne fonctionne pas. Ou, plutôt, cela fonctionne, mais pas exactement comme prévu. Nous l'avons déjà ressoudé et remplacé les détails électromécaniques activés. Ça ne fonctionnera pas... Voulez-vous jeter un coup d'œil ? Il y a peut-être un problème avec le programme... " J'ai regardé le code et j'ai vu l'erreur suivante :
uchar A[3]; .... for (uchar i = 0; i != 4; i++) average += A[i]; average /= 3;
J'ai pris un autre projet comme base et j'ai simplement copié-collé la plupart du code. À un endroit, j'ai oublié de remplacer le nombre de capteurs : 4 par 3. J'étais tellement honteux d'avoir fait perdre deux semaines à deux personnes pour trouver mon erreur.
Les erreurs dans les systèmes embarqués sont extrêmement désagréables. Il est presque impossible de les corriger si les appareils sont déjà en production de masse. Et si des centaines de milliers de machines à laver ont déjà été vendues et utilisées, mais qu'elles fonctionnent incorrectement dans un certain mode ? La question est rhétorique. Il n'y a que deux options :
De plus, que la circulation des appareils soit grande ou petite, la correction des erreurs peut être problématique ou retardée :
La fusée s'est écrasée, l'erreur a été détectée, mais trop tard ;
Les patients sont morts, l'erreur a été détectée, mais cela ne réanimera pas les gens ;
Les freins des voitures étaient cassés, l'erreur a été détectée, mais les victimes n'en ont tiré aucun avantage.
La conclusion est simple. Le code des systèmes embarqués doit être testé aussi en détail que possible. Surtout si les erreurs peuvent entraîner des pertes humaines ou de graves pertes matérielles.
L'analyse statique n'est pas garantie d'absence d'erreurs. Cependant, les développeurs doivent utiliser tous les moyens pour vérifier en plus le code pour les bugs. Les analyseurs statiques peuvent indiquer une variété d'erreurs qui diriger à se cacher dans le code même après plusieurs revues de code.
Si l'analyse statique aide à éliminer certaines erreurs dans le code, ce sera génial. Peut-être, grâce à la détection de ces erreurs, des vies humaines peuvent être sauvées et une entreprise ne perdra pas d'argent et de réputation.
Les erreurs dans le logiciel peuvent diviser en deux types. Les développeurs savent les erreurs du premier type. Ils apparaissent dans le code par accident ou après un codage rapide. Les erreurs de second type apparaissent quand les développeurs ne savent pas qu'écrire du code de cette manière est une faute. En d'autres termes, ils peuvent examiner ce code autant de fois qu'ils le souhaitent, mais ils ne trouveront toujours pas l'erreur.
Pour détecter les problèmes dans le code, les analyseurs statiques utilisent une vaste base de connaissances avec des modèles qui, dans certaines conditions, conduisent à une erreur. Voilà, les analyseurs peuvent alerter les développeurs à propos des erreurs, dont l'existence peut ne pas être découverte en raison d'un manque de connaissances. Par exemple, l'utilisation du type time_t de 32 bit qui peut mener à un mauvais fonctionnement de l'appareil après 2038.
Un autre exemple est le comportement indéfini en raison d'une utilisation incorrecte des opérateurs de décalage <</>>. Ces opérateurs sont beaucoup utilisés dans le code des microcontrôleurs. Malheureusement, les développeurs utilisent souvent ces opérateurs de manière imprudente, rendant ainsi le logiciel peu fiable et dépendant de la version et des paramètres du compilateur. Le programme peut toujours fonctionner assez bien. Même si c'est par pur hasard et non pas grâce à la justesse du code.
En utilisant un analyseur statique, les développeurs peuvent prévenir une telle situation. De plus, l'analyseur peut être utilisé comme un outil de contrôle de la qualité du code, ce qui est important lorsque l'équipe s'agrandit ou change. En d'autres termes, l'analyse statique aide à vérifier si un nouveau développeur a commencé à écrire du mauvais code.
Développement de système incorporé implique souvent l'utilisation de normes telles que MISRA C, MISRA C++, AUTOSAR C++. L'analyseur statique aide vérifie de code pour la conformité avec ces standards.
Les standards sont reliés et servent un seul but : améliorer la sécurité, la portabilité et la fiabilité des logiciels embarqués.