Découvrez comment intégrer facilement l'analyse statique, les tests unitaires et d'autres méthodes de test de logiciels C et C++ dans votre pipeline CI/CD. Inscrivez-vous pour la démo >>

Comment l'analyse statique prévient-elle les défauts et accélère-t-elle la livraison ?

Par Arthur Hicken

8 juin 2018

7  min lire

Pour intégrer la qualité dans votre logiciel dès le début, utilisez l'analyse statique - l'activité la plus simple et la plus efficace que les ingénieurs en logiciel peuvent effectuer pour éviter les défauts et durcir le code tout en accélérant la livraison des applications.

Lors de la conception de tout type de système, la vérification des défauts et la correction des erreurs tôt (et souvent) permet aux équipes de réduire considérablement la quantité de travail en aval ajoutée au projet et constitue une méthode infaillible pour éviter de multiples maux de tête en cours de route.

Dans le développement de logiciels, au lieu de concevoir de meilleurs logiciels en premier lieu, il est tentant de tomber dans une souricière commune et d'essayer simplement de tester la qualité dans le projet logiciel (généralement à la fin). Mais il est important d'éviter la tentation de suivre une telle approche, qui repose sur des tests unitaires ou fonctionnels pour tester la qualité du produit. Pour intégrer plus de qualité dans le logiciel dès le début, le développeur peut prendre le contrôle, en employant analyse statique du code, l'activité la plus simple et la plus efficace que les ingénieurs logiciels peuvent effectuer pour éviter les défauts et renforcer le code tout en accélérant la livraison des applications.

Qu'est-ce que l'analyse de code statique?

L'analyse de code statique (ou analyse statique) est une activité de test de logiciel dans le développement de logiciels, dans laquelle le code source est analysé pour des constructions connues pour être associées à des erreurs logicielles ou des vulnérabilités de sécurité. Lorsqu'une construction à haut risque est détectée, l'outil d'analyse statique signale une violation que le développeur doit afficher et corriger.

Avant de passer en revue certains des principaux avantages de l'analyse statique, passons en revue les différents types d'analyse statique et les différences entre eux.

Guide gratuit: Premiers pas avec l'analyse statique

Il existe quelques principaux types d'analyse statique, chacun ayant ses propres forces et faiblesses. Les conditions pour chacun sont ci-dessous.

Analyse statique basée sur des modèles

Dans sa forme la plus simple, un outil d'analyse statique analyse le code source et le vérifie par rapport à un ou plusieurs ensembles de règles. Par exemple, les ingénieurs commettent parfois l'erreur d'utiliser la chaîne «\ 0» alors que le caractère nul «\ 0» est réellement voulu. Cette erreur peut entraîner une corruption de la mémoire et faire planter le programme ou faire d'autres choses désagréables. Un outil d'analyse statique recherche ces modèles dans le code et les signale comme des erreurs possibles. Ce type d'analyse statique est connu sous le nom d'analyse statique basée sur des modèles. Certains modèles sont de simples vérificateurs de syntaxe, semblables à un correcteur orthographique lors de l'écriture. D'autres modèles peuvent être beaucoup plus sophistiqués, analysant et détectant des modèles complets associés à des problèmes subtils. Ce type d'analyse statique ne souffre presque jamais de faux positifs.

Normes modernes de génie logiciel comme Association pour la fiabilité des logiciels de l'industrie automobile (MISRA) et Joint Strike Fighter (JSF) sont basés sur l'idée que certaines constructions doivent être évitées dans le code qui est critique pour la sécurité, en raison de la possibilité que le code dans de tels systèmes ait des problèmes.

En fournissant des alternatives «plus sûres» aux installations «non sûres», on évite les problèmes connus liés aux fonctionnalités de bas niveau. Essentiellement, les programmes sont écrits dans un sous-ensemble «plus sûr» d'un sur-ensemble.

A partir de Normes de codage C ++ des véhicules aériens de combat interarmées - Introduction

Analyse de flux

L'analyse de flux, parfois appelée analyse de flux de contrôle ou analyse de flux de données, est quelque peu différente. Ce type d'analyse de code vérifie les constructions problématiques par rapport à un ensemble de règles, tout en simulant des chemins de décision pour approfondir l'application et éliminer les défauts difficiles à trouver, tels que les déréférences de pointeur nul, les débordements de tampon et les défauts de sécurité tels que corrompus. Les données. L'analyse de flux est excellente dans la mesure où elle peut trouver de vrais bogues, mais un certain nombre de faux positifs font toujours partie de cette méthode.

Types d'analyses supplémentaires

Il existe d'autres types d'analyse statique qui permettent d'atteindre différents types d'objectifs. Par exemple, les outils d'analyse de métriques mesurent les caractéristiques du code, telles que les lignes de code et la complexité. Les outils d'analyse de couverture suivent les tests unitaires et applicatifs pour permettre une meilleure compréhension de la qualité des tests du code. Lorsqu'ils sont utilisés ensemble dans le cadre d'un tests de développement automatisés processus, ces types d'analyses offrent une visibilité significative sur la sûreté, la sécurité et la fiabilité de l'application.

Risques de ne pas exécuter une analyse statique

L'état des logiciels devient de plus en plus complexe. Aujourd'hui, par exemple, une automobile moyenne peut contenir plus de 1,000 100 MCU exécutant du code et jusqu'à XNUMX millions de lignes de code! Cette grande surface électronique, en particulier dans les applications critiques pour la sécurité, telles que l'automobile, les dispositifs médicaux ou l'avionique, nécessite une approche d'ingénierie rigoureuse du logiciel afin d'approcher un code sans défaut.

La bonne nouvelle est que des organisations telles que OWASP, CERT et MITRE s'engagent à rechercher et à publier les meilleures pratiques de programmation pour aider les ingénieurs en logiciel à réussir leurs projets logiciels. Il existe également des organisations de normalisation spécifiques à l'industrie (telles que MISRA, se concentrant sur les systèmes logiciels automobiles), qui publient les meilleures pratiques souvent exigées par les organismes de réglementation. Ces bonnes pratiques peuvent être codifiées dans des outils d'analyse statique sous forme de règles, que vous pouvez choisir de mettre en œuvre dans le cadre de la stratégie de votre organisation que les développeurs doivent suivre.

Il est essentiel d'utiliser un outil d'analyse statique capable de mettre en œuvre ces normes de programmation tout en s'intégrant à votre processus de développement. D'un point de vue commercial, le fait de ne pas vérifier votre travail avec au moins un outil d'analyse statique augmente considérablement le risque de déploiement ou de publication de vos applications. Les défauts peuvent conduire à un code exploitable que les pirates malveillants peuvent utiliser pour planter le système, exposer des données sensibles, etc. Dans le cas de logiciels critiques pour la sécurité, les conséquences des vulnérabilités logicielles peuvent être bien plus graves.

Avantages de l'analyse statique automatisée

L'exécution d'une analyse statique sur le bureau fournira certains avantages et peut fonctionner pour de petites équipes ou des projets; cependant, dans les grandes organisations, l'analyse statique doit également être automatisée dans le cadre des builds nocturnes et de l'intégration continue. Lorsqu'elle est implémentée en tant que partie intégrante du processus de développement, l'analyse de votre code avec une analyse statique offre un certain nombre d'avantages, notamment les suivants:

Cycle de développement plus rapide

Une analyse statique constante dès les premières étapes du projet vous permet de trouver et de corriger les défauts systémiques lorsque le coût de la correction est au plus bas. Le processus peut initialement prendre plus de temps que le développement rapide du logiciel sans exécuter l'analyse, mais les gains d'efficacité deviennent exponentiels au cours du cycle de vie du développement. N'oubliez pas que certaines des erreurs les plus dangereuses peuvent être difficiles à résoudre en fin de cycle, il est donc essentiel de les trouver tôt.

Les bons outils d'analyse statique comprennent également une documentation descriptive sur la norme de programmation mise en œuvre, qui étend les connaissances en programmation et le développement professionnel des ingénieurs en logiciel. Au fil du temps, le respect de ces normes améliore la qualité moyenne du code en améliorant les programmeurs grâce à un retour d'information constant. Si votre outil d'analyse statique dispose d'un écosystème plus large qui peut automatiquement hiérarchiser les tâches de correction des défauts, vous serez en mesure de fournir le logiciel encore plus rapidement.

Taux de défaut inférieur

L'analyse statique vous aide à trouver et à corriger rapidement les défauts, ce qui peut empêcher la réapparition de défauts systémiques en aval. Avec une politique de détection précoce, vous pouvez plus facilement mettre en œuvre une politique de prévention des défauts, ce qui réduit le taux de défauts tout au long du cycle de développement. (Prise sans vergogne: Parasoft C / C ++test , qui non seulement signale les violations d'analyse statique, mais s'intègre également à un système incroyablement sophistiqué plateforme d'analyse, peut vous donner une compréhension plus large de toutes les instances du défaut signalé et de son impact global sur la qualité de votre base de code.)

AMÉLIORATION CONTINUE

Le terme DevOps est souvent utilisé pour décrire un ensemble de pratiques qui facilitent la collaboration et la communication interservices nécessaires pour aider les organisations à optimiser et à accélérer leurs processus de développement et de livraison. En partageant les connaissances et les tâches entre les départements, les organisations créent un processus efficace pour accélérer le SDLC tout en améliorant les processus de qualité.

Pour que cette approche soit efficace, cependant, une boucle de rétroaction automatisée doit être mise en œuvre qui permet l'application cohérente des politiques de qualité au fur et à mesure que les exigences progressent de la création à la production.

Comment choisir un outil d'analyse statique moderne

L'analyse statique automatisée n'est pas seulement le mécanisme de la boucle de rétroaction, mais elle génère également les données dont les autres services ont besoin pour accéder et collaborer efficacement dans le cadre du modèle DevOps. Surtout lorsqu'elle est utilisée avec des tests unitaires et de régression, l'analyse statique remplit quelques rôles, notamment:

  • Assurer la qualité du code
  • Fournir les mégadonnées nécessaires pour améliorer le processus de développement
  • Faciliter les usinages de la boucle de rétroaction automatisée DevOps

En conséquence, l'analyse statique devient un agent d'amélioration continue et automatisée des processus. Il permet aux développeurs de comprendre et d'examiner une erreur détectée lors de la publication, ou au contrôle qualité de déterminer s'il existe un moyen de renforcer le code et d'éliminer la possibilité que ces défauts se produisent à l'avenir.

À propos de la solution d'analyse statique de Parasoft

Il existe plusieurs outils d'analyse statique sur le marché, allant des utilitaires open source aux suites complètes de tests de développement. La solution de test logiciel de Parasoft fournit une plate-forme intégrée pour automatiser un large éventail de pratiques de qualité logicielle pour plusieurs langages de codage, tout en fournissant des rapports significatifs et complets et l'option d'analyse intelligente, alimentée par Parasoft DTP.

Pour C et C ++, en plus d'une gamme complète de capacités d'analyse de code statique et de plus de 2,200 règles (le plus de tout outil du marché, basé sur des implémentations de MISRA, MISRA C ++, FDA, C ++ efficace de Scott Meyers, Effective STL, et d'autres sources établies), Parasoft C / C ++test fournit une solution unifiée pour vos pratiques de test de développement.

Parasoft C/C++test exécute et génère tests unitaires automatisés; permet plusieurs types de couverture de code, y compris la ligne, l'instruction, le bloc, le chemin, la décision (branche), la condition simple et la couverture MC / DC; fournit une analyse d'exécution et est livré avec un kit de qualification d'outils pour se conformer aux normes de sécurité fonctionnelle.

Parasoft a également une prise en charge complète de l'analyse de code statique pour le langage Java, avec Jtest Parasoft, et pour le langage .NET, avec Parasoft dotTEST. Tout comme avec C et C ++, ce sont des solutions entièrement intégrées qui fournissent plus qu'une simple analyse statique, de sorte que vous obtenez une solution complète pour apporter efficacité et facilité à vos tests logiciels. Un utilisateur peut analyser le code avec l'analyse statique Parasoft sur le bureau et l'intégrer également dans vos builds automatisés pour vous permettre d'éviter les défauts de manière continue et automatique.

Pour obtenir des flux de travail automatisés qui améliorent la collaboration et l'efficacité, ces moteurs d'analyse statique s'intègrent à PAO Parasoft, qui fournit des flux de travail pour intégrer la qualité dans votre SDLC, afin que vous puissiez définir votre politique de développement et ensuite appliquer automatiquement les exigences non fonctionnelles. Par exemple, une analyse statique est automatiquement exécutée pendant la génération, les violations sont signalées à DTP, où elles sont traitées, et les résultats sont renvoyés à l'EDI de l'ingénieur, pour être visualisés pour correction.

DTP effectue également des analyses intelligentes, qui permettent à ces flux de travail d'évaluer automatiquement la qualité et les risques de votre développement logiciel. Par exemple, le DTP peut rechercher des problèmes systémiques associés au processus de programmation ou corréler une violation grave du code produit par un ingénieur junior avec un ensemble de tests unitaires et d'informations de couverture pour déterminer le niveau de risque associé au module. Si la corrélation pointe vers un niveau de risque supérieur à un seuil spécifique, la violation peut déclencher un flux de travail d'amélioration continue des processus spécifique qui implique un examen du code par les pairs et une analyse supplémentaire, en plus des tâches normales de correction des défauts.

Conclusion

L'analyse de code statique est un élément important pour garantir que les applications fonctionnent comme prévu. Cela améliore non seulement la vitesse globale de l'équipe de développement, mais réduit également les risques associés à la publication de logiciels potentiellement dangereux. Bien qu'une analyse soit toujours préférable à l'absence d'analyse, l'analyse statique devrait être intégrée dans une infrastructure de test de logiciel plus grande pour maximiser l'efficacité de la pratique. Parasoft propose une suite d'analyse et de test de code de niveau entreprise en test C / C ++, Jtest et dotTEST, ainsi qu'un système avancé d'analyse et de reporting en PAO. La combinaison de ces technologies permet aux équipes d'ingénierie logicielle d'accélérer la livraison de logiciels, tout en garantissant que leurs applications fonctionnent comme prévu.

Découvrez la solution d'analyse de code statique la plus complète pour les logiciels C et C ++ en action.
Demandez une démo aujourd'hui

« MISRA », « MISRA C » et le logo triangulaire sont des marques déposées de The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Tous droits réservés.

Par Arthur Hicken

Arthur est impliqué dans la sécurité logicielle et l'automatisation des tests chez Parasoft depuis plus de 25 ans, aidant à la recherche de nouvelles méthodes et techniques (dont 5 brevets) tout en aidant les clients à améliorer leurs pratiques logicielles.

Recevez les dernières nouvelles et ressources sur les tests de logiciels dans votre boîte de réception.