Rejoignez notre webinaire du 19 septembre : Tests d'API améliorés par l'IA : une approche sans code pour les tests | Inscrivez-vous
Aller à la section
Comment l'échec de CrowdStrike met en évidence la puissance des tests Shift-Left
Les organisations peuvent réduire considérablement le risque d'incidents tels que l'échec de CrowdStrike en automatisant les tests logiciels et en les déplaçant vers la gauche. Poursuivez votre lecture pour découvrir la puissance de l'adoption d'une approche de test axée sur la gauche.
Aller à la section
Aller à la section
Les risques de prendre des raccourcis dans les tests
L’échec de la mise à jour du logiciel CrowdStrike constitue une leçon cruciale sur l’importance des tests logiciels précoces, automatisés et complets. Comme mon collègue, Miroslaw Zielinski, souligné dans Informations sur les tests logiciels suite à l'incident CrowdStrike, prendre des raccourcis pour gagner du temps et de l’argent lors des tests peut conduire à des résultats désastreux. Les tests ne sont pas seulement une case à cocher. Il s'agit d'un élément essentiel pour garantir que le logiciel que vous fournissez est fiable, sécurisé et capable de fonctionner comme prévu dans le monde réel.
Bien que plusieurs facteurs soient à l’origine de cet échec, un défi commun que j’entends fréquemment de la part des organisations est la pression incessante pour publier des mises à jour fréquentes. Cette pression fait souvent de l’optimisation du coût et du temps des tests un objectif attrayant. Cependant, la clé pour éviter des incidents tels que l’échec de CrowdStrike réside dans l’adoption d’une stratégie globale et approche des tests avec décalage à gauche.
Les tests de logiciels de Parasoft, en particulier analyse statique, est conçu pour faciliter cette approche de décalage à gauche. Mais avant d'aborder cette solution, comprenons d'abord la puissance des tests de décalage à gauche.
La puissance des tests Shift-Gauche
Les tests Shift-Left sont l'un des concepts les plus puissants du développement logiciel moderne, permettant une détection précoce des erreurs et améliorant la qualité globale du code. Traditionnellement, les tests et le débogage étaient effectués vers la fin du cycle de développement, après l'écriture et l'intégration du code, et souvent après les phases de test initiales. Cette approche conduisait généralement à la découverte de bugs et de problèmes critiques tard dans le processus, alors qu'ils étaient beaucoup plus difficiles et longs à corriger.
En mettant en œuvre une analyse statique pendant le processus de mise en œuvre, les ingénieurs peuvent résoudre les problèmes de codage ou les violations de conformité au fur et à mesure qu'ils écrivent le code. Ce retour immédiat permet aux développeurs de corriger les problèmes sur place, améliorant ainsi considérablement la qualité du code dès le départ. Le résultat est une réduction substantielle des défauts qui autrement seraient découverts plus tard dans le cycle de vie du développement, où leur réparation devient de plus en plus complexe et coûteuse.
Par exemple, lorsqu’un défaut est identifié tôt grâce à une analyse statique, il peut être résolu rapidement et efficacement. Cependant, si le même défaut n’est détecté que plus tard par les tests d’assurance qualité, le processus de résolution devient plus compliqué. Un plus grand nombre de membres de l'équipe sont impliqués et les étapes de journalisation, de signalement, de reproduction et de résolution du problème prennent plus de temps, ce qui entraîne des efforts et des retards accrus.
Les enjeux deviennent encore plus importants si le défaut atteint la production. Remédier à un défaut sur le terrain est particulièrement difficile, car cela a un impact direct sur les clients et peut nécessiter des correctifs urgents, des rappels ou même un contrôle des dommages pour protéger la réputation du produit. L'équipe de développement doit agir rapidement pour corriger le bug, tandis que l'équipe d'assurance qualité doit retester la solution, ajoutant ainsi des niveaux de complexité supplémentaires au processus.
En réfléchissant à l'incident CrowdStrike, il est clair à quel point l'analyse statique est vitale pour identifier et résoudre les défauts dès le début du processus de développement, évitant ainsi que des problèmes coûteux et dommageables n'atteignent la production.
L'analyse statique est plus qu'une simple vérification syntaxique
L'analyse statique est une technique avancée permettant d'examiner le code source afin d'identifier des erreurs potentielles telles que l'utilisation de variables non initialisées, le déréférencement de pointeur NULL, les débordements de tampon et de nombreux autres défauts de codage, sans exécuter le code.
Par exemple, le moteur d'analyse statique de Parasoft va au-delà des simples vérifications de syntaxe. Il effectue non seulement une analyse du flux de contrôle et du flux de données pour détecter un large éventail de bogues et de problèmes de codage, mais il devance également la concurrence grâce à une application unique de l'IA et de l'apprentissage automatique. Notre Solution basée sur l'IA examine les nouveaux résultats de l'analyse statique dans le contexte des interactions historiques avec la base de code et les résultats de l'analyse statique précédente, en prédisant la pertinence et en hiérarchisant les nouveaux résultats pour aider les organisations à adopter l'analyse statique plus efficacement.
Types de problèmes détectés par l’analyse statique
Voici quelques types de bugs ou de problèmes que l'analyse statique peut détecter.
- Déréférencement de pointeur nul. Détecte automatiquement les tentatives de déréférencement des pointeurs NULL.
- Fuites de mémoire. Identifiez les cas où la mémoire est allouée mais n'est pas correctement libérée.
- Débordement de tampon. Critique pour la sécurité, détecte quand plus de données sont écrites dans un tampon qu’il ne peut en contenir.
- Variables non initialisées. Marquer les variables utilisées avant d'être initialisées.
- Boucles infinies. Détectez les boucles qui pourraient ne jamais se terminer, provoquant le blocage du programme.
- Code mort. Recherchez le code qui n'est jamais exécuté et qui peut être supprimé en toute sécurité.
- Divisez par zéro. Identifiez les divisions où le dénominateur pourrait être zéro, entraînant des erreurs d'exécution.
- Erreurs de syntaxe et de type. Signalez les erreurs dans le code qui empêchent sa compilation.
- Erreurs logiques. Détectez les erreurs dans la logique du code qui pourraient conduire à un comportement incorrect.
- Failles de sécurité. Détectez l’utilisation de bibliothèques vulnérables connues et d’autres problèmes de sécurité.
- Codage des violations des normes. Garantir le respect des normes de codage, cruciales pour l’obtention de certifications dans des environnements critiques pour la sécurité.
Ces types de bogues de codage sont recherchés et atténués de manière agressive dans les développements critiques pour la sécurité, où des vies pourraient être perdues en cas de panne ou de défaillance du système. Bien que les concepts de sécurité ne soient pas une exigence pour CrowdStrike, la qualité des logiciels l'est, et ils devraient envisager d'adopter des normes de codage telles que MISRA, CERT, CWE, ou autres.
Les normes de codage comme MISRA sont développées par des experts possédant des années d'expérience, et Parasoft, en tant que membre contributeur du MISRA C et C++ 2023 normes de codage, propose une solution d'analyse statique robuste construite sur cette expertise.
Malgré ces avantages évidents, il est surprenant de constater combien d'équipes de développement n'utilisent toujours pas l'analyse statique. L'adoption de l'analyse statique est essentielle pour réduire les coûts des tests logiciels, tout en augmentant la qualité du code.
En intégrant une analyse statique dans son pipeline d'intégration continue/déploiement continu (CI/CD), CrowdStrike aurait pu identifier automatiquement les problèmes d'accès à la mémoire qui ont conduit à l'échec de la mise à jour logicielle.
Intégration de l'analyse statique dans le pipeline CI/CD
Dans un environnement CI/CD moderne, les développeurs écrivent et valident le code, déclenchant ainsi un processus de génération automatisé. Lorsqu’une build se termine avec succès, des tests automatisés, y compris une analyse statique, s’exécutent. Parasoft Solutions de tests C et C++ comme C/C++test s'intègrent facilement aux pipelines CI/CD, fonctionnant de manière transparente avec des outils tels que Jenkins, GitLab, Bamboo, VS Code, Eclipse et bien d'autres.
Cette intégration garantit que la qualité du code est surveillée et améliorée en permanence, les développeurs recevant un retour immédiat sur tout problème identifié par l'analyse statique. En automatisant ces contrôles qualité, les organisations peuvent :
- Empêcher l’accumulation de la dette technique.
- Réduisez les coûts de test en identifiant les problèmes plus tôt dans le développement.
- Atteindre des normes élevées de qualité de code tout au long du processus de développement.
Leçons de l’incident CrowdStrike
L'incident CrowdStrike offre de précieuses leçons aux équipes de développement.
- Résistez à la tentation de prendre des raccourcis. La pression de livrer rapidement peut conduire à des compromis sur la qualité. Il est essentiel de résister à cette tentation et de donner la priorité à des tests complets pour éviter des pannes coûteuses.
- Comprenez la criticité de vos systèmes. Même des systèmes apparemment non critiques peuvent avoir des conséquences importantes en cas de panne. Comprendre les véritables risques associés à votre logiciel est essentiel pour prendre des décisions éclairées en matière de tests et d'assurance qualité.
- Apprenez des industries critiques pour la sécurité. Des secteurs comme l’automobile et l’aérospatiale, où une défaillance logicielle peut avoir des conséquences mortelles, ont développé des normes de test rigoureuses. L'adoption de certaines de ces bonnes pratiques peut contribuer à améliorer la fiabilité de votre logiciel, même si cela n'est pas critique pour la sécurité.
Conclusion
L'échec de la mise à jour du logiciel CrowdStrike souligne l'importance de tests complets et automatisés dans l'environnement de développement logiciel actuel. Les organisations peuvent réduire considérablement le risque de tels incidents en tirant parti des solutions Parasoft pour l'analyse statique ainsi que des tests unitaires, une couverture de code et d'autres méthodes de test. Nos outils aident les équipes à maintenir des normes élevées en matière de qualité logicielle tout en gérant les risques commerciaux, garantissant ainsi que leurs logiciels sont fiables, sécurisés et prêts à fonctionner dans le monde réel.
Le guide ultime du CI/CD pour les systèmes logiciels embarqués
« 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.