Découvrez GoogleTest certifié TÜV avec Agentic AI pour les tests C/C++ !
Plus de détails »
Aller à la section
Blog Parasoft
Le développement de logiciels critiques pour la sécurité a un coût élevé. Cependant, cela peut être réduit en utilisant l'automatisation et les tests de décalage à gauche des logiciels pour réduire le taux d'erreur. Continuez à lire pour en savoir plus.
Aller à la section
Nous sommes confrontés à une crise des coûts concernant les logiciels critiques pour la sécurité, ce qui signifie que les fonctionnalités supplémentaires requises dépassent les capacités de financement de leur développement. Le programme Boeing 787, par exemple, a nécessité 6.5 millions de lignes de code, dont la conception, le développement et les tests ont coûté 4 milliards de dollars. Les coûts du programme Boeing 777X n'ont pas été rendus publics et le coût du Boeing 737 MAX , initialement estimé à 3.6 milliards de dollars, a grimpé à 6.3 milliards de dollars, sans compter les milliards de dollars de coûts liés aux défaillances.
La tendance des grands projets critiques pour la sécurité montre une croissance exponentielle des coûts totaux, les logiciels représentant une part plus importante du budget total de développement d'une année sur l'autre. Le prochain grand programme aérospatial sera probablement inabordable en utilisant les mêmes techniques que celles utilisées dans les programmes précédents. Alors, que pouvons-nous faire?
La certification de sécurité et les tests et vérifications requis représentent une part importante du budget de développement logiciel. L' intégration des tests en amont du cycle de vie du développement logiciel ( Shift-left testing ), combinée à l'automatisation, génère des gains considérables en termes de coûts, de risques et de délais. L'image ci-dessous illustre le coût, en millions de dollars, par tranche de mille lignes de code pour le développement de logiciels destinés aux compagnies aériennes commerciales, mettant ainsi en évidence une augmentation exponentielle.
Figure 1 : Coût de développement de logiciels par ligne de code dans les projets d'aviation commerciale. Les données ont été extraites des métriques des projets Airbus et Boeing.
Sans surprise, la plupart des défauts sont introduits dans un projet dès le départ , avant même la première ligne de code. La plupart des bogues sont détectés et corrigés lors des tests. Cependant, un pourcentage non négligeable, jusqu'à 20 %, est découvert en cours d'utilisation, une fois le produit vendu et expédié.
Dans les systèmes certifiés, cela signifie soit un cycle de réparation-test-recertification extrêmement coûteux, soit des solutions de contournement du problème par l'opérateur. Le graphique suivant montre le pourcentage relatif de bogues introduits et détectés au cours de chaque phase du cycle de vie du développement logiciel.
Figure 2 : Graphique montrant le pourcentage de défauts introduits et détectés au cours des différentes phases de développement. Source : Applied Software Measurement : Analyse globale de la productivité et de la qualité, Capers Jones, 2008.
Il est moins coûteux de corriger les défauts au début du cycle de vie. Leur recherche et leur réparation deviennent exponentiellement plus coûteuses tout au long du projet. En fonctionnement, une fois qu'un produit est expédié entre les mains des clients, c'est la réparation la plus coûteuse. Les coûts de réparation des défauts après le déploiement sont prudents et n'incluent pas les dommages causés à votre marque ni la responsabilité résultant d'incidents de sécurité sur le terrain.
Le graphique suivant montre le coût relatif de la correction d'un défaut à chaque étape du cycle de vie. De toute évidence, l’objectif est de déplacer les défauts détectés et corrigés plus tôt dans le cycle de vie. En d’autres termes, déplacez-vous vers la gauche. De plus, il est souhaitable de réduire le nombre de défauts arrivant chez le client, une réalité dans tous les domaines.
Figure 3 : Coût relatif pour rechercher et corriger les bogues au cours de chaque phase de développement. Lors des exigences et de la conception, c'est la référence (1x) et l'endroit le moins coûteux pour corriger les défauts. Source des figures 2 et 3 : Présentation de SAVI à la conférence INCOSE SE 2012.
L'industrie des logiciels critiques pour la sécurité reconnaît la nécessité de changer la façon dont les choses sont faites. Trop de projets réinventent la roue et la certification d'un tout nouveau logiciel prend du temps et coûte cher. La croissance de la connectivité et de la fonctionnalité des nouveaux produits signifie que les méthodes doivent changer. Dans cet article, nous ne couvrirons pas toutes les techniques proposées, mais nous nous concentrerons plutôt sur le rôle que joue l'automatisation des tests dans le transfert à gauche de la réduction, de la détection et de la correction des défauts et des vulnérabilités de sécurité.
Les tests constituent une part essentielle de tout projet critique pour la sécurité. L'automatisation est indispensable pour atteindre les objectifs de sécurité et de qualité. Voici quelques exemples de la manière dont les outils d'automatisation des tests soutiennent les méthodes modernes de développement logiciel et améliorent la productivité des tests et de la documentation.
Les problèmes liés à la méthode en cascade sont compris et de nombreuses équipes utilisent des méthodes de développement plus modernes pour améliorer la qualité et la sécurité. L'automatisation des tests est une partie importante de toute méthode de développement itératif puisque les suites de tests sont exécutées à chaque nouvelle itération d'un module, d'un composant, etc.
L'automatisation des tests soutient ces méthodes grâce à des tests automatisés reproductibles , fournissant des rapports à différents niveaux pour chaque test ainsi que des résultats cumulatifs au fil du temps. Ces outils sont également conçus pour s'intégrer aux processus d'intégration continue (CI) en assurant le suivi des éléments de travail, la gestion des exigences, les systèmes de compilation et les services de dépôt de code source. Les outils d'analyse dynamique sont essentiels pour détecter les erreurs d'exécution difficiles à déceler. L'analyse statique joue un rôle important dans la détection des défauts avant le début des tests.
L'une des meilleures pratiques pour éliminer les défauts au début du cycle de vie du développement consiste à effectuer des inspections. Les inspections signifient tout revoir, pas seulement le code source. Par exemple, l’inspection des exigences et de la conception est essentielle pour prévenir la principale source de bogues du système. Voir Figure 2. De nombreux bogues sont littéralement intégrés au système. Les outils jouent un rôle moindre à ce stade mais améliorent l’efficacité des révisions de code.
Les tests unitaires automatisés, la détection dynamique des erreurs et l'analyse statique offrent une détection des erreurs considérablement améliorée dès les premières étapes de codage d'un projet. Les résultats des tests automatisés peuvent être présentés dans des revues de code, réduisant ainsi la dépendance à l'égard de la détection manuelle des erreurs et laissant plus de temps pour détecter les exigences incorrectes et les décisions de conception.
Les tests manuels sont fastidieux et moins reproductibles. La collecte des résultats peut être ponctuelle et une erreur peut passer inaperçue malgré des résultats apparemment corrects. Il est difficile de suivre l'atteinte du taux de couverture de code requis , qui varie selon les normes de sécurité et la criticité du projet.
L'automatisation des tests rend non seulement les tests beaucoup moins fastidieux et reproductibles, mais les capacités de reporting des outils de test avancés créent des informations de gestion importantes sur l'état du projet. L'ajout d'une analyse dynamique, qui analyse le code lors de son exécution pour détecter les erreurs d'exécution délicates, et d'une analyse statique, qui analyse le code avant son exécution, augmente considérablement la capacité de détection des bogues des outils de test.
De nombreux projets critiques pour la sécurité nécessitent des normes de code source. MISRA, par exemple, est courant dans les logiciels automobiles mais a gagné en popularité dans d'autres secteurs. Certaines normes exigent que le code soit conforme à une norme d'entreprise qui répond à certains objectifs. Dans chaque cas, l’application manuelle de la conformité du codage est fastidieuse et sujette aux erreurs. Les outils d'analyse statique sont idéaux pour faire respecter la conformité et les outils avancés vont plus loin en détectant les erreurs qui vont au-delà des violations de format.
Une grande partie de la charge de travail liée à l'obtention des certifications de sécurité des logiciels consiste à documenter les processus, la validation et la vérification. L'automatisation des tests réduit considérablement le coût de la documentation des résultats des tests et de l'analyse de la couverture.
Une stratégie clé pour accroître la productivité consiste à réutiliser les logiciels. Idéalement, l'utilisation de composants déjà certifiés permet de réduire les coûts de développement de ces sous-unités. L'automatisation de l'évaluation des logiciels existants à l'aide d'outils d'analyse statique et dynamique diminue les risques liés à l'utilisation de ces composants.
Même des programmes de tests stricts peuvent passer à côté d’erreurs critiques. La couverture du code à elle seule ne suffit pas à garantir un comportement correct en cas d'attaques de sécurité ou de code multithread, par exemple. Les outils d'analyse statique peuvent détecter les erreurs dans le code source sans exécuter de test spécifique et détecter des bogues tels que des vulnérabilités de sécurité difficiles à découvrir lors des tests unitaires ou système.
Les outils d'analyse dynamique peuvent détecter des erreurs dans l'exécution du code lors des tests qui peuvent se refléter dans les résultats des tests, comme une fuite de mémoire lente. Les tests de fuzzing et de pénétration lors des tests du système peuvent détecter les bogues manqués dans des conditions de fonctionnement normales. Au total, les défauts et vulnérabilités de sécurité supplémentaires découverts par les outils de pointe contribuent à réduire les coûts, les risques et bon nombre des quelque 20 % de bogues qui entrent en production.
Il est clair que quelque chose doit être fait pour résoudre les problèmes clairement illustrés dans la figure 2. Trop de défauts sont introduits et restent non détectés au début du cycle de vie. Et il en reste trop dans le produit lors de sa fabrication et entre les mains des clients, ou dans les avions ou les voitures, selon le cas. L'adoption de méthodes de développement modernes, la réutilisation des composants, l'exploitation des COTS et de l'open source, ainsi que l'automatisation des outils sont autant d'étapes clés pour améliorer la productivité du développement.
En supposant un processus de développement utilisant des outils de pointe dans lequel les tests sont décalés vers la gauche et où davantage de défauts sont détectés et corrigés plus tôt dans le cycle de vie, les tests unitaires sont extrêmement efficaces, permettant à moins de bogues d'atteindre la production. Dans la figure 4, un exemple hypothétique montre l'évolution de la détection des défauts au cours du cycle de vie, où l'essentiel de la détection et de la correction des défauts est décalé vers la gauche plus tôt dans le cycle de vie.
Figure 4 : Un graphique montrant un processus de développement hypothétique et amélioré qui décale la détection des bogues et des vulnérabilités de sécurité plus tôt dans le cycle de vie.
Nous savons grâce à la figure 3 ci-dessus que les coûts augmentent considérablement à chaque phase de développement. La figure 5 ci-dessous montre la comparaison des coûts de correction des défauts dans la méthode traditionnelle par rapport à la méthode moderne présentée dans la figure 4. Déplacer la recherche et la correction des bogues vers la gauche coûte moins cher que de les corriger plus tard. Dans la situation présentée ici, la différence de coût globale est d’environ 40 % en faveur de l’approche « shift-left ».
Figure 5 : Un graphique montrant le coût relatif de la correction des bogues dans l'approche traditionnelle par rapport à l'approche Shift Left. Même avec le même nombre total de défauts, une détection précoce réduit considérablement les coûts.
L'utilisation d'outils automatisés dans les projets critiques pour la sécurité exige une confiance absolue dans ces outils. Il incombe au fabricant du produit de s'assurer que les processus et les outils utilisés pour créer le logiciel répondent aux exigences de la norme. Les fournisseurs d'outils peuvent y contribuer en faisant certifier leurs outils par des organismes de normalisation de sécurité avant leur vente aux fabricants ou, lorsqu'une pré-certification est impossible, en proposant une assistance à la qualification. Les fabricants peuvent ensuite utiliser la preuve de certification du fournisseur d'outils dans leur propre dossier de certification, ce qui réduit considérablement les efforts nécessaires. Par exemple, Parasoft C/C++test a été certifié par TÜV SÜD comme étant qualifié pour le développement de logiciels liés à la sécurité, conformément aux normes IEC 61508 et ISO 26262.
Dans certaines normes de sécurité logicielle, telles que DO-178C, la certification est effectuée au niveau du système et les outils et logiciels individuels ne sont pas certifiés de manière indépendante. Dans ces cas, le fournisseur de l'outil fournit des kits de qualification et une assistance en termes de documentation et de services professionnels, réduisant considérablement le coût et les efforts nécessaires pour qualifier les outils à utiliser sur le projet.
Les logiciels critiques pour la sécurité sont certainement confrontés à une crise de coûts. Les nouveaux grands projets critiques pour la sécurité deviennent trop coûteux à développer, au point qu’ils risquent de ne pas être rentables. Des méthodes modernes sont nécessaires pour développer des logiciels critiques en matière de sécurité, et cet effort doit réduire le nombre d'erreurs détectées tard dans le cycle de vie du développement logiciel. En allant vers la gauche, la détection et la correction des défauts et des vulnérabilités de sécurité le plus tôt possible dans le cycle de vie réduisent considérablement les coûts. L'automatisation des tests joue un rôle clé dans l'amélioration de l'efficacité et des résultats des tests. Il s'agit d'un élément important de l'approche moderne du développement de logiciels critiques pour la sécurité.
« 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.