Rejoignez-nous le 30 avril : dévoilement de Parasoft C/C++test CT pour l'excellence en matière de tests continus et de conformité | En savoir plus

Faites évoluer vos tests de logiciels critiques pour la sécurité avec l'automatisation des tests

Portrait de Ricardo Camacho, directeur de la conformité de la sûreté et de la sécurité
16 octobre 2023
8 min lire

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.

Nous sommes confrontés à une crise de coûts avec les logiciels critiques en matière de sécurité, ce qui signifie que les fonctionnalités accrues requises ont dépassé la capacité de payer pour 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 chiffres des coûts pour Boeing 777X programme n’a pas été divulgué publiquement et Le 737 MAX de Boeing était initialement estimé à 3.6 milliards de dollars, mais il est passé à 6.3 milliards de dollars, ce qui n'inclut pas les milliards de coûts en cas d'échec.

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?

Certification de sécurité et tests et vérifications requis cela représente une grande partie du budget de développement logiciel. Test de décalage gauche de logiciels (testés plus tôt dans le SDLC) tout en tirant parti de l'automatisation, rapporte d'importants dividendes en termes de coût, de risque et de calendrier. L'image ci-dessous montre le coût en millions de dollars par millier de lignes de code pour le développement de logiciels pour les compagnies aériennes commerciales, ce qui montre clairement l'augmentation exponentielle.

Graphique montrant l'augmentation du coût des systèmes avioniques par KLOC (millions $)
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.

Comprendre quand les bogues sont introduits et détectés

Sans surprise, la plupart des défauts sont introduits dans un projet au début, avant même que la première ligne de code ne soit écrite. La plupart des bugs sont trouvés et corrigés lors des tests. Mais un bon pourcentage, jusqu'à 20 %, est découvert pendant l'exploitation, après la vente et l'expédition du produit.

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.

Graphique montrant le pourcentage de défauts introduits par rapport à ceux détectés au cours des phases de développement
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.

Graphique montrant l'augmentation du coût relatif pour corriger les défauts au cours des phases de développement
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.

Tests Shift-Gauche grâce à l'automatisation des tests

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é.

Avantages de l'automatisation des tests

Les tests constituent une grande partie de tout projet critique pour la sécurité. L'automatisation est absolument nécessaire pour atteindre les objectifs de sûreté, de sécurité et de qualité. Voici des exemples de la manière dont les outils d'automatisation des tests prennent en charge développement de logiciels modernes méthodes et augmenter la productivité des tests et de la documentation.

Prise en charge des pipelines Agile et CI/CD

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 prend en charge ces méthodes avec des tests automatisés, fournissant des rapports à différents niveaux pour chaque test mais également des résultats cumulés au fil du temps. Ces outils sont également conçus pour fonctionner avec les processus CI en s'intégrant aux services de suivi des éléments de travail, de gestion des exigences, de systèmes de build et de référentiel source. Les outils d'analyse dynamique sont essentiels pour détecter les erreurs d'exécution difficiles à détecter. L'analyse statique joue un rôle important dans la détection des défauts avant le début des tests.

Prise en charge des inspections de logiciels

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.

Augmenter la productivité des tests

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 « corrects ». Il est difficile de suivre la couverture requise par le code, qui varie en fonction des normes de sécurité et de 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.

Automatisation de la conformité aux normes de codage

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.

Automatisation de la documentation de certification

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.

Accélérer la réutilisation des logiciels existants

Une stratégie clé pour augmenter la productivité consiste à réutiliser les logiciels. Idéalement, des composants déjà certifiés peuvent être utilisés pour réduire les coûts de développement de ces sous-unités. L'automatisation de l'évaluation des logiciels existants avec des outils d'analyse statique et dynamique réduit le risque lié à l'utilisation de ces composants.

Améliorer la qualité, la sûreté et la sécurité

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.

Quel est l’impact des tests Shift-Left ?

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.

Graphique intitulé Déplacement de la détection des défauts vers la gauche et comparant la recherche de bogues plus tôt et plus tard. Lorsqu'elle est trouvée plus tôt, la détection des bogues diminue à mesure que la version se rapproche.
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 ».

Graphique intitulé Coûts relatifs pour corriger les défauts, comparant les coûts liés à la recherche de bogues plus tôt et plus tard. Lorsqu'il est détecté plus tôt, le coût de la détection des bogues diminue à mesure que la version se rapproche.
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'importance des chaînes d'outils certifiées et de l'assistance à la qualification

L’utilisation d’outils automatisés dans des projets critiques pour la sécurité nécessite une confiance dans les outils eux-mêmes. 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 vendeurs d'outils peuvent y contribuer en faisant certifier les outils par des organismes de normes de sécurité avant de les vendre aux fabricants ou, dans les cas où une telle précertification n'est pas possible, en fournissant une assistance à la qualification. Ils peuvent ensuite utiliser les preuves de certification du fournisseur d'outils dans leur propre soumission de certification et réduire les efforts nécessaires. Par exemple, Parasoft C / C ++test a été certifié par TÜV SÜD pour le développement de logiciels liés à la sécurité conformément aux normes CEI 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.

Gérer les coûts des logiciels critiques pour la sécurité grâce à une stratégie de déplacement vers la gauche

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é.

Guide des méthodologies de test de logiciels : Maximiser la qualité, la conformité, la sûreté et 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.